CS 스터디

23 minute read

문제영역

스프링 파트

  1. 스프링 IOC가 무엇인가요?

  2. IoC 컨테이너의 역할은 무엇이 있을까요?

  3. OOP와 AOP에 대한 차이를 설명해주세요.

  4. AOP를 사용하는 경우의 장점은 무엇이고 단점은 무엇이 있을까요?

  5. POJO가 무엇인가요?

  6. MVC 진행 방식

  7. 프레임워크와 라이브러리의 차이는 무엇인가요?

  8. DI에 대해 설명하시오.

  9. Spring Bean이란 무엇인가요?

  10. Restful API에 대해 설명해주세요.

  11. 잘 알고있는 대표적인 디자인패턴 3개 말씀하여 보세요.

  12. CORS란 도메인이 서로 다른 2개의 사이트가 데이터를 주고 받을 때 발생하는 문제입니다.

  13. OAuth의 흐름에 대해 간단히 설명해주세요.

  14. OAuth에 대해서 간단히 설명해주세요.

  15. Call By Value와 Call By Reference의 차이에 대해 설명해주세요.

  16. DTO, VO에 대해 설명하시오.

  17. MVC 패턴에 대해 설명하시오.

  18. 서블릿 컨테이너란?

  19. 디스패처서블릿이란?

  20. 웹소켓

21.Autowiring 과정에 대해서 설명해주세요.

  1. Spring Application을 구동할 때 메서드를 실행시키는 방법에 대해 설명해주세요.

Java

  1. JVM구조에 대해 설명하시오.

  2. GC 처리 방법에 대해 설명하시오.

  3. HashMap vs HashTable vs ConcurrentHashMap의 차이를 설명하시오.

  4. 접근제어자에 대해 설명하시오.

  5. interface와 abstract의 차이를 설명하시오.

  6. StringBuilder와 StringBuffer의 차이에 대해 설명하시오.

  7. try-with-resources에 대해 설명하시오.

  8. Synchronize에 대해 설명하시오. 동기화 뜻함.

  9. static은 메모리 구조 중 어디에 올라가나요?

  10. 컬렉션 프레임워크에 대해 설명하시오.

  11. 제네릭에 대해 설명해주시고, 왜 쓰는지 어디세 써 봤는지 알려주세요.

  12. Vector와 List 차이에 대해 설명하시오.

  13. 오버로딩과 오버라이딩의 차이는?

  14. CheckedException과 UnCheckedException의 차이를 설명하시오.

  15. final / finally / finalize 의 차이를 설명하시오.

  16. new String()과 ““의 차이에 대해 설명해주세요.

  17. 직렬화와 역직렬화에 대해서 설명해주세요.

  18. 자바에서 불변객체는 무엇무엇이 있나요?

  19. 자바에서 인스턴스가 생성되는 과정에 대해서 설명하여 보세요

  20. 자바에서 대표적인 다형성 메소드를 말해보세요

  21. 자바에서 뮤텍스와 세마포어의 차이는 무엇일까요?

  22. 프로세서, 스레드의 차이는 무엇인가요?

  23. 스레드를 통해 생성된 영역은 다른 스레드에 접근이 가능 한가요?

  24. Java에서 병럴 스트림을 사용하게 되면 예상 할 수 있는 문제와 해결 방법은 무엇인가요?

  25. 클래스는 무엇이고 객체는 무엇인가요?

  26. Mutable 객체와 Immutable 객체의 차이점에 대해 설명해주세요.

  27. 애노테이션에 대해서 설명해주세요.

데이터베이스

  1. 디비 풀은 왜 쓰나요?

  2. 데이터베이스 언어(DDL, DML, DCL)에 대해 설명해주세요.

  3. 트리거에 대해 설명해주세요.

  4. SQL에서 left outer join에 대해 설명하시오.

  5. RDBMS와 NoSQL의 차이는?

  6. index에 대한 설명과 장/단점으로 무엇이 있나요.

  7. SQL Injection은 무엇인가요?

  8. ORM에 대해 설명해주세요.

  9. jpa 페치조인을 Lazy로 바꿔서 하면 N+1 문제해결

  10. 트랜잭션에 대해서 설명해주세요.

  11. ACID는 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질입니다.

  12. 트랜잭션 격리 수준(Transaction Isolation Levels)에 대해서 설명해주세요.

  13. 정규화에 대해서 설명해주세요.

네트워크

  1. TCP와 UDP의 차이에 대해 설명하실오.

  2. HTTP와 HTTPS의 차이점에 대해서 설명해보세요.

  3. 쿠키와 세션에 대해 설명해주세요.

  4. 3way handshake와 4way handshake를 설명해주세요.

  5. get방식과 post방식 그리고 CRUD에 대해 설명해주세요.

  6. TCP와 IP에 대해 설명해주세요.

  7. HTTP Method에 대해 설명해주세요.

  8. Connection Timeout/Read Timeout의 차이는?

  9. 클라이언트가 서버에 접속을 성공 했으나 서버가 로직을 수행하는 시간이 너무 길어 제대로 응답을 못 준 상태에서 클라이언트가 연결을 해제하는 것이 Read Timeout입니다.

  10. OSI 7계층이 무엇인지 설명해 보세요.

  11. url에 www.naver.com을 입력했다. 일어나는 현상에 대해 아는대로 설명하라.

운영체제

  1. 데드락에 대해서 설명하시오.

  2. 데드락 4대요소에 대해 설명하시오.

  3. 멀티 스레드 환경에서의 주의사항을 설명해주세요.

  4. 64비트와 32비트의 차이점은 무엇인가요?

  5. 동기와 비동기의 차이(블로킹, 넌블로킹) / 장단점에 대해 설명해보세요.

  6. Thread-safe 하다는 의미와 설계하는 법을 설명해보세요.

  7. 세마포어와 뮤텍스의 차이에 대해 설명해보세요.

  8. 가상메모리에 대해 설명하시오.

코테관련

  1. List와 Set의 차이에 대해서 설명해주세요.

2.배열과 링크드 리스트의 차이를 설명해주세요.

  1. Stack, Queue에 대해서 설명해주세요.

자바 심화 꼬리물기 식

  1. 자바의 모든 클래스는 Object 클래스를 상속받습니다. 그리고 Object클래스에는 equals() 와 hashCode() 라는 메소드가 선언되어 있습니다. 이 메소드들은 각각 어떤 역할일까요? 이 둘의 차이점은 무엇일까요?

  2. StringBuilder 와 StringBuffer 의 차이는 무엇일까요?

  3. System.out.println 메소드는 현업에서 절대 쓰지 말라고하는 메소드인데요. 그 이유가 무엇일까요?

  4. ArrayList 는 내부적으로 어떻게 구현되어있을까요?

  5. 스레드는 왜 써야하는 것일까요?

  6. 0이 들어있는 변수에 10개의 스레드가 동시에 접근해서 ++ 연산을 하면 우리 예상과 다르게 10이 나오지 않습니다. 왜 그럴까요?

  7. 자바에서 동시성과 관련된 예약어를 모두 말씀해주세요.

  8. Blocking IO와 Non-Blocking IO 의 차이를 말씀해주세요.

9.Serializable 은 무엇일까요?

스터디

스프링 파트

  1. 스프링 IOC가 무엇인가요? 제어의 역전 메소드와 객체 호출 작성을 개발자가 결정하는 것이아닌 외부에의해 결정하는것

  2. OOP와 AOP에 대한 차이를 설명해주세요.
    • 객체지향관점 객체지향관점 모든 데이터를 현실에 빗대어 객체화 시킨 것을 뜻함.
    • 관점지향관점 객체지향을 좀더 향상시켜주기위해
  3. AOP를 사용하는 경우의 장점은 무엇이고 단점은 무엇이 있을까요? 관점 지향 프로그래밍 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리해 관리.

  4. MVC 진행 방식 클라이언트로부터 요청이 들어오면 dispatcherServlet이 가장 먼저받는다. HandlerMapping이 요청 URL과 매핑되는 Controller 검색 후 리턴 HandlerAdapter에서 알맞은 controller 처리요청 ViewResolver에서 controller가 리턴한 view 검색후 view를 클라이언트로 보냄

  5. 프레임워크와 라이브러리의 차이는 무엇인가요? 차이점은 제어 흐름에 대한 주도권이 누구에게/어디에 있는가에 있습니다. 프레임워크는 전체적인 흐름을 쥐고 있고, 개발자는 그 안에서 라이브러리에 대한 흐름을 쥐고 있습니다. 여기서 개발자의 제어권을 프레임워크에게 넘김으로써 신경써야할 것을 줄일 수 있는데, 이를 제어의 역전(Inversion of Control)이라 합니다.

  6. DI에 대해 설명하시오. DI (Dependency Injection) 의존성 주입 설정 파일이나 어노테이션을 통해 객체간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요없음

  7. Restful API에 대해 설명해주세요. Restful API는 HTTP 통신을 Rest 설계 규칙을 잘 지켜서 개발한 API를 Restful한 API라고 합니다. Rest 설계 규칙은 URI는 정보의 자원만 표현해야 하며, 자원의 상태와 행위는 HTTP Method에 명시하는걸 말합니다.

  8. 잘 알고있는 대표적인 디자인패턴 3개 말씀하여 보세요. 싱글톤 패턴 - 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미 팩토리 패턴 - 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를                                  만들지는 서브클래스에서 결정하게 만든다. 즉 팩토리 메소드 패턴을 이용하면                                  클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것. 템플릿 패턴 - 좋은 설계는 변하는 것과 변하지 않는 것을 분리하는 것이다. 변하지 않는 것은 추상클래스의 메서드로 선언, 변하는 부분은 추상 메서드로 선언하여 자식 클래스가 오버라이딩 하도록 처리한다. 이렇듯이 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴이다. 빌더 패턴 - 빌더 패턴은 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여, 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다. 생성해야하는 객체가 Optional한 속성을 많이 가질 때 더 좋다. 필요한 데이터만 설정할 수 있음, 유연성을 확보할 수 있음, 가독성을 높일 수 있음, 변경 가능성을 최소화할 수 있음

  9. CORS란 도메인이 서로 다른 2개의 사이트가 데이터를 주고 받을 때 발생하는 문제입니다. 예를 들어 A 사이트 B 사이트 간에 데이터를 주고받을시 따로 설정 하지 않으면 CORS 에러를 만나게 됩니다.

  10. OAuth 2.0의 흐름에 대해 간단히 설명해주세요. 사용자가 클라이언트(이하 클라)에게 사용 요청을 보낸다. 클라는 권한 서버에 권한 부여 승인 코드 요청을 보낸다. 이후 클라는 권한 서버에서 제공하는 로그인 페이지를 띄워 사용자에게 보여준다. 사용자가 로그인 하면 권한 서버는 (2)권한 부여 승인 코드 요청에 전달받은 redirect_url로 Authorization Code를 전달한다. Authorization Code는 권한 서버에서 제공하는 API를 통해 Access Token으로 교환된다.

  11. Call By Value와 Call By Reference의 차이에 대해 설명해주세요. Call By Value(값에 의한 호출) - 인자로 받은 값을 복사하여 처리하는 방식입니다. 장점 - 값을 복사하여 처리하기 때문에 원래의 값이 보존된다. 단점 - 복사하기 때문에 메모리 사용량이 증가한다.

Call By Reference(참조에 의한 호출) - 인자로 받은 값의 주소를 참조하여 직접 저장해 값에 영향을 주는 방식입니다. 장점 - 복사하지 않고 직접 참조하기에 빠르다. 단점 - 직접 참조를 하기에 원래의 값이 영향을 받는다.

  1. DAO DTO에 대해 설명하시오. DAO - 는 데이터베이스의 data에 접근하기 위한 객체입니다. DataBase에 접근 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용합니다. DTO - 는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)입니다. 유저가 입력한 데이터를 DB에 넣는 과정을 보겠습니다. 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송합니다. 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣습니다. VO - 값 오브젝트로써 값을 위해 쓰입니다. read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다. DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있습니다.

  2. MVC 패턴에 대해 설명하시오. 어플리케이션을 세 개의 영역으로 분할하고 각 구성 요소에게 고유한 역할을 부여하는 개발 방식입니다. MVC 패턴을 도입하면 도메인(비즈니스 로직) 영역과 UI 영역이 분리되므로 서로 영향을 주지 않고 유지보수가 가능합니다.

  3. 서블릿 컨테이너란? 서블릿 컨테이너 서블릿들의 생성, 실행, 파괴를 담당한다. 서블릿들을 위한 상자(Container)입니다. 서버에 만들어진 서블릿이 스스로 작동하는 것이 아니라, 서블릿을 관리 해주는 것이 필요한데, 이러한 역할을 하는 것이 바로 서블릿 컨테이너 입니다.

서블릿 컨테이너는 Clinet의 Request를 받아주고 Response할 수 있게, 웹 서버와 소켓을 만들어 통신합니다. 대표적으로 무료 서비스인 Tomcat(톰캣)이 있습니다.톰캣은 웹 서버와 소켓을 만들어 통신하며 JSP(java server page)와 Servlet이 작동할 수 있는 환경을 제공합니다.

서블릿 생명주기(Life Cycle) 관리 서블릿 컨테이너는 서블릿의 탄생과 죽음을 관리한다. 서블릿 클래스를 로딩하여 인스턴스화 초기화 메소드를 호출 요청이 들어오면 적절한 서블릿 메소드를 호출합니다. 서블릿 소멸 시 Garbage Collection(가비지 컬렉션)을 진행 서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성 HTTP 서비스 메소드를 실행하고 나면, 쓰레드는 자동으로 소멸 원래는 쓰레드를 관리해야 하지만 서버가 다중 쓰레드를 생성 및 운영해주니 쓰레드의 안정성에 대해서 걱정하지 않아도 된다.

  1. 디스패처서블릿이란? HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)라고 정의할 수 있습니다. 이것을 보다 자세히 설명하자면, 클라이언트로부터 어떠한 요청이 오면 Tomcat(톰캣)과 같은 서블릿 컨테이너가 요청을 받게 됩니다. 그리고 이 모든 요청을 프론트 컨트롤러인 디스패처 서블릿이 가장 먼저 받게 됩니다. 그러면 디스패처 서블릿은 공통적인 작업을 먼저 처리한 후에 해당 요청을 처리해야 하는 컨트롤러를 찾아서 작업을 위임합니다. 여기서 Front Controller(프론트 컨트롤러)라는 용어가 사용되는데, Front Controller는 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러로써, MVC 구조에서 함께 사용되는 디자인 패턴입니다.

  2. 웹소켓 현재 인터넷 환경(HTML5)에서 많이 사용된다. 웹 소켓을 지원하는 브라우저의 경우 웹 소켓 프로토콜을 지원 양방향 통신 - 데이터 송수신을 동시에 처리할 수 있는 통신 방법 클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있다 통상적인 Http 통신은 Client가 요청을 보내는 경우에만 Server가 응답을 하는 단방향 통신 실시간 네트워킹(Real Time-Networking) 웹 환경에서 연속된 데이터를 빠르게 노출

  3. OAuth의 흐름에 대해 간단히 설명해주세요.
  4. 사용자가 클라이언트(이하 클라)에게 사용 요청을 보낸다.
  5. 클라는 권한 서버에 권한 부여 승인 코드 요청을 보낸다.
  6. 클라는 권한 서버에서 제공하는 로그인 페이지를 띄워 사용자에게 보여준다.
  7. 사용자가 로그인 하면 권한 서버는 (2)권한 부여 승인 코드 요청에 전달받은 redirect_url로 Authorization Code를 전달한다.
  8. Authorization Code는 권한 서버에서 제공하는 API를 통해 Access Token으로 교환된다.

  9. OAuth에 대해서 간단히 설명해주세요. OAuth는 제3자 인증방식 입니다. 기본적으로 사용자는 서버를 신뢰할 수 없습니다. 그렇기 때문에, 민감정보를 작성하는 것을 꺼립니다. 서버측에서도 마찬가지 입니다. 사용자의 민감정보를 관리하는 것은 리소스가 필요합니다. 그래서 OAuth를 사용해서 신뢰할 수 있는 서버에게 정보를 맡겨놓고 접근할 수 있는 권한을 주는 것이라고 이해하면 됩니다. 그러면 사용자 측에서는 민감정보를 굳이 입력하지 않고도 서비스를 사용할 수 있고, 서버측에서도 민감정보를 굳이 관리하지 않아도 되기 때문에 이점이라고 볼 수 있습니다.

20.Autowiring 과정에 대해서 설명해주세요. 컨테이너에서 타입(인터페이스 또는 오브젝트)을 이용해 의존 대상 객체를 검색하고 할당할 수 있는 빈 객체를 찾아 주입한다

  1. Spring Application을 구동할 때 메서드를 실행시키는 방법에 대해 설명해주세요. CommandLineRunner, ApplicationRunner를 구현한 클래스를 만들어서 실행시키는 2가지 방법이 있습니다. 또한 Spring의 ApplicationEvent를 사용한 방법, @Postconstruct를 사용한 방법, InitializingBean 인터페이스를 구현하는 방법, @Bean의 initMethod를 사용한 방법이 있습니다.

Java

  1. JVM구조에 대해 설명하시오. 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어입니다. 장점 JVM은 스택 기반으로 동작하며, Java Byte Code를 OS에 맞게 해석 해주는 역할을 하고 가비지컬렉션을 통해 자동적인 메모리 관리를 해줍니다. JVM 위에서 동작하기 때문에 운영체제에 독립적이다. GabageCollector를 통한 자동적인 메모리 관리가 가능하다. 단점 JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다. 다중 상속이나 타입에 엄격하며, 제약이 많다.

  2. GC 처리 방법에 대해 설명하시오. 가비지 컬렉션은 JVM의 메모리 관리 기법 중 하나로 시스템에서 동적으로 할당됐던 메모리 영역 중에서 필요없어진 메모리 영역을 회수하여 메모리를 관리해주는 기법입니다. GC의 작업을 수행하기 위해 JVM이 어플리케이션의 실행을 잠시 멈추고, GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업을 중단 후 사용하지 않는 메모리를 제거하고 작업이 재개됩니다.

  3. HashMap vs HashTable vs ConcurrentHashMap의 차이를 설명하시오.
    • hashTable : 동기화 처리 가능, 동기화 락을 통해 멀티스레드 무결성보장 안정적 신뢰, 단 락으로인해 느림
    • hashMap : 동기화 키워드가없어 동기화 보장 안됨, 단일스레드, 속도 빠르나 데이터 신뢰, 안정성이 떨어짐
    • concorrentHashMap : 해시맵의 멀티스레드 동기화 문제를 보완한 것 단, null허용안됨.
  4. 접근제어자에 대해 설명하시오. public - 접근 제한이 없다. (같은 프로젝트 내 어디서든 사용 가능) protected - 해당 패키지 내, 다른 패키지에서 상속받아 자손 클래스에서 접근 가능하다. default - 해당 패키지 내에서만 접근 가능 private - 해당 클래스에서만 접근 가능

  5. interface와 abstract의 차이를 설명하시오. 추상 클래스는 클래스 내 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 경우를 말하고, 인터페이스는 모든 메소드가 추상 메소드로만 이루어져 있는 것을 말합니다. 공통점 new 연산자로 인스턴스 생성 불가능 사용하기 위해서는 하위 클래스에서 확장/구현 해야 한다. 차이점 인터페이스는 그 인터페이스를 구현하는 모든 클래스에 대해 특정한 메소드가 반드시 존재하도록 강제함에 있고, 추상클래스는 상속받는 클래스들의 공통적인 로직을 추상화 시키고, 기능 확장을 위해 사용한다. 추상클래스는 다중상속이 불가능하지만, 인터페이스는 다중상속이 가능하다.

  6. StringBuilder와 StringBuffer의 차이에 대해 설명하시오. String은 불변의 속성을 가지며, StringBuffer와 StringBuilder는 가변의 속성을 가집니다. StringBuffer는 동기화를 지원하여 멀티 쓰레드 환경에서 주로 사용하며, StringBuilder는 동기화를 지원하지 않아 싱글 쓰레드 환경에서 주로 사용합니다.

  7. try-with-resources에 대해 설명하시오. try-with-resources는 try-catch-finally의 문제점을 보완하기 위해 나온 개념입니다. try( … ) 안에 자원 객체를 전달하면, try블록이 끝나고 자동으로 자원 해제 해주는 기능을 말합니다. 따로 finally 구문이나 모든 catch 구문에 종료 처리를 하지 않아도 되는 장점이 있습니다.

  8. Synchronize에 대해 설명하시오. 동기화 여러 개의 쓰레드가 한 개의 자원을 사용하고자 할 때, 현재 데이터를 사용하고 있는 쓰레드를 제외하고 나머지 쓰레드들은 데이터에 접근할 수 없게 막는 개념입니다. 데이터의 thread-safe를 하기 위해 자바에서 Synchronized 키워드를 제공해 멀티 쓰레드 환경에서 쓰레드간 동기화를 시켜 데이터의 thread-safe를 보장합니다. Synchronized는 변수와 메소드에 사용해서 동기화 할 수 있으며, Synchronized 키워드를 남발하게 되면 오히려 프로그램의 성능저하를 일으킬 수 있습니다.

  9. static은 메모리 구조 중 어디에 올라가나요? JVM 메모리 영역중 STACK , HEAP, DATA 영역중 DATA에 올라가며 프로그램이 시작과 종료때까지 실행되는 것입니다.

  10. 컬렉션 프레임워크에 대해 설명하시오. map, list, set, queue 등 데이터를 담는 구조입니다.

  11. 제네릭에 대해 설명해주시고, 왜 쓰는지 어디세 써 봤는지 알려주세요. 제네릭은 데이터의 타입을 하나로 지정하지 않고 사용할 때마다 범용적이고 포괄적으로 지정한다는 의미입니다. 제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있어 에러를 사전에 방지할 수 있습니다.

  12. Vector와 List 차이에 대해 설명하시오. 벡터는 데이터 삽입시 원소를 밀어내지만 리스트는 노드를 연결만 하기 때문에, 삽입 삭제 부분에서 리스트가 시간복잡도의 우위를 가집니다. 벡터는 랜덤부분접근이 가능하지만 리스트는 더블링크드리스트(노드가 양쪽으로 연결)로 되어있기 때문에 랜덤 접근이 되지 않습니다. 검색적인 측면에서는 벡터가 우위에 있습니다. 벡터는 리스트와 달리 항상 동기화되는 장점이자 단점을 가지고 있습니다. 멀티 쓰레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있지만, 단일쓰레드 환경 일때도 동기화를 하기 때문에 List보다 성능이 떨어집니다.

  13. 오버로딩과 오버라이딩의 차이는? 오버라이딩(Overriding)은 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것을 말하고, 오버로딩(Overloading)은 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것을 말합니다.

  14. CheckedException과 UnCheckedException의 차이를 설명하시오. CheckedException은 실행하기 전에 예측 가능한 예외를 말하고, 반드시 예외 처리를 해야 합니다. 대표적인 Exception - IOException, ClassNotFoundException 등 UncheckedException은 실행하고 난 후에 알 수 있는 예외를 말하고, 따로 예외처리를 하지 않아도 됩니다. 대표적인 Exception - NullPointerException, ArrayIndexOutOfBoundException 등 RuntimeException은 UncheckedException을 상속한 클래스이고, RuntimeException이 아닌 것은 CheckedException을 상속한 클래스 입니다.

  15. final / finally / finalize 의 차이를 설명하시오. final은 클래스, 메소드, 변수, 인자를 선언할 때 사용할 수 있으며, 한 번만 할당하고 싶을 때 사용합니다. final 변수는 한 번 초기화되면 그 이후에 변경할 수 없습니다. final 메소드는 다른 클래스가 이 클래스를 상속할 때 메소드 오버라이딩을 금지합니다. final 클래스는 다른 클래스에서 이 클래스를 상속할 수 없습니다. finally는 try-catch와 함께 사용되며, try-catch가 종료될 때 finally block이 항상 수행되기 때문에 마무리 해줘야 하는 작업이 존재하는 경우에 해당하는 코드를 작성해주는 코드 블록입니다. finalize는 Object 클래스에 정의되어 있는 메소드이며, GC에 의해 호출되는 메소드로 절대 호출해서는 안되는 메소드입니다. GC가 발생하는 시점이 불분명하기 때문에 해당 메소드가 실행된다는 보장이 없고, finalize() 메소드가 오버라이딩 되어 있으면 GC가 이루어질 때 바로 Garbage Collectiong 되지 않습니다. GC가 지연되면서 OOME(Out of Memory Exception)이 발생할 수 있기 때문에 finalize() 메소드를 오버라이딩하여 구현하는 것을 권장하지 않고 있습니다.

  16. new String()과 ““의 차이에 대해 설명해주세요. 메모리영역중 어느곳에서 존재하는지가 차이점입니다. 레퍼런스 주소가 다릅니다. 메모리상 처리되는 방식이 틀립니다.

  17. 자바에서 직렬화에 대해서 설명하여 보세요 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술이며, 반대로 직렬화된 바이트 형태의 데이터를 다시 객체로 변환하는 과정을 ‘역직렬화’라고 합니다. (간단히) JVM의 메모리에 상주(힙 or 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술

  18. 자바에서 불변객체는 무엇무엇이 있나요? 불변 객체는 객체 생성 이후 내부의 상태가 변하지 않는 객체를 말합니다. Java에서는 필드가 원시 타입인 경우 final 키워드를 사용해 불변 객체를 만들 수 있고, 참조 타입일 경우엔 추가적인 작업이 필요합니다.

  19. 자바에서 인스턴스가 생성되는 과정에 대해서 설명하여 보세요 인스턴스를 생성하기 위해서는 new 예약어를 사용합니다. new 키워드가 등장하면 힙메모리에 인스턴스가 생성되었다는 것을 알 수 있습니다.

  20. 자바에서 대표적인 다형성 메소드를 말해보세요 가장 여러타입을 처리할 수 있는 메소드 는 System.out.println();

  21. 자바에서 뮤텍스와 세마포어의 차이는 무엇일까요? 뮤텍스: 한 쓰레드, 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호배제기법 세마포어: Signaling mechanism. 현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법

  22. 프로세서, 스레드의 차이는 무엇인가요? 프로세스: 운영체제로부터 자원을 할당받은 작업의 단위. 스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.

  23. 자바에서 뮤텍스와 세마포어의 차이는 무엇일까요? 뮤텍스: 한 쓰레드, 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호배제기법 세마포어: Signaling mechanism. 현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법

  24. Java에서 병럴 스트림을 사용하게 되면 예상 할 수 있는 문제와 해결 방법은 무엇인가요? 병렬 Stream의 가장 큰 문제는 threadPool을 global하게 이용한다는 것입니다. 즉, 모든 병렬 Stream이 동일한 ThreadPool에서 thread를 가져와 사용합니다. 이렇게 되면 Thread Pool의 문제점이 발생할 수 있습니다.

  25. 자바에서 인스턴스가 생성되는 과정에 대해서 설명하여 보세요 인스턴스를 생성하기 위해서는 new 예약어를 사용합니다. new 키워드가 등장하면 힙메모리에 인스턴스가 생성되었다는 것을 알 수 있습니다.

  26. Java에서 병럴 스트림을 사용하게 되면 예상 할 수 있는 문제와 해결 방법은 무엇인가요? 병렬 Stream의 가장 큰 문제는 threadPool을 global하게 이용한다는 것입니다. 즉, 모든 병렬 Stream이 동일한 ThreadPool에서 thread를 가져와 사용합니다. 이렇게 되면 Thread Pool의 문제점이 발생할 수 있습니다.

  27. 클래스는 무엇이고 객체는 무엇인가요? 클래스 - 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다. 객체 - 식별 가능한 개체 또는 사물입니다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가집니다. 인스턴스들을 통칭하는 용도로 사용합니다.

  28. Mutable 객체와 Immutable 객체의 차이점에 대해 설명해주세요. mutable 객체는 변경 가능 객체이고, Immutable 객체는 불변 객체라고 흔히들 말합니다. Mutable - 도메인 개체(도메인 클래스 혹은 엔터티)로 사용됩니다. Immutable - 불변객체이며 값 객체, 서비스 객체 등에 사용됩니다. Immutable 객체의 변경 메서드는 변경한 객체의 복사본을 반환해야 합니다.

  29. 애노테이션에 대해서 설명해주세요. 애노테이션은 인터페이스를 기반으로 한 문법으로 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입할 수 있습니다. built-in annotation은 상속받아서 메소드를 오버라이드 할 때 나타나는 @Override 애노테이션이 그 대표적인 예입니다.

  30. 스레드를 통해 생성된 영역은 다른 스레드에 접근이 가능 한가요?

  31. 스택과 링크드리스트와 리스트의 차이점을 설명해 보세요.

  32. 병렬작업 환경에서 가장 주의해야되는점은 무엇일까요?

  33. 자바에서 사용중인 메모리 힙과 스택의 차이에 대해서 설명하여 보세요

데이터베이스

  1. 디비 풀은 왜 쓰나요? 디비연결때마다 3way hand shake , 4way hand shake동작이 반복적으로 발생하여 리소스에 영향을 끼침 그로인해 한번연결성공한 케이스에 풀을 마련해 바로 연결될수있도록 처리함

  2. 데이터베이스 언어(DDL, DML, DCL)에 대해 설명해주세요. DDL (정의어) : 데이터베이스 구조를 정의, 수정, 삭제하는 언어 ( alter, create, drop ) DML (조작어) : 데이터베이스내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어 ( select, insert, update, delete ) DCL (제어어) : 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어 ( commit, rollback, grant, revoke )

  3. 트리거에 대해 설명해주세요. 트리거는 특정 테이블에 대한 이벤트에 반응해 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램입니다. 사용자가 직접 호출하는 것이 아닌, 데이터베이스에서 자동적으로 호출한다는 것이 가장 큰 특징입니다.

  4. SQL에서 left outer join에 대해 설명하시오. -양 테이블의 전체 결과값 조회 null값을 포함한 관계

5.. RDBMS와 NoSQL의 차이는?

  • rdbms 관계형데이터베이스- 복잡한쿼리, 중복없는 데이터, 데이터변경이 자주일어날경우 사용
  • nosql 스키마가없어서 자유로운 데이터 구조가능(도큐먼트, 그래프 등) 빅데이터 환경 데이터 분산처리 용이함. 데이터중복 발생할수있음.
  1. index에 대한 설명과 장/단점으로 무엇이 있나요. Index란 테이블을 처음부터 끝까지 검색하는 방법인 FTS(Full Table Scan)과는 달리 인덱스를 검색하여 해당 자료의 테이블을 엑세스 하는 방법입니다. 예를들어, DB를 책으로 비유하면 데이터는 책의 내용일 것이고, 데이터가 저장된 레코드의 주소는 index 목록에 있는 페이지 번호일 것이다. 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠르지만, 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행 속도가 느려집니다. 즉, 인덱스는 데이터의 저장 성능을 희생하고 그대신 데이터의 검색 속도를 높이는 기능이라 할 수 있습니다.

  2. SQL Injection은 무엇인가요?
    • 클라이언트에서 데이터 입력시 쿼리문을 함께 써 디비에직접 영향을 끼쳐 정보탈취함.
  3. ORM에 대해 설명해주세요. ORM은 객체와 관계형 데이터베이스 매핑의 줄임말이며, OOP에서 쓰는 객체라는 개념을 구현한 클래스와 RDB에서 쓰이는 데이터 테이블을 매핑하는 것을 의미합니다.

  4. jpa 페치조인을 Lazy로 바꿔서 하면 N+1 문제해결
    • 페이지네이션처리할땐 @BatchSize(size=100) «in 쿼리랑 동일한기능 1:N 문제해결 N+1 문제에 대해 짧게 설명해주세요 Lazy 로딩에 의해서 한번에 모든 정보를 안가져와서 발생하는 문제인데 폐치조인을 사용해서 해결할 수 있다. SQL 1번으로 100명의 회원을 조회하였는데,한번 SQL을 실행해서 조회된 결과 수만큼 N번 SQL을 추가로 실행한다고 해서 N+1 문제라 한다. 각 회원마다 주문한 상품을 추가로 조회하기 위해 100번의 SQL을 추가로 실행하는 상황을 말한다.
  5. 트랜잭션에 대해서 설명해주세요. 트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위라고 할 수 있으며, 트랜잭션에는 여러개의 연산이 수행될 수 있습니다. 트랜잭션은 수행중에 한 작업이라도 실패하면 전부 실패하고, 모두 성공해야 성공이라고 할 수 있습니다.

  6. ACID는 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질입니다. Atomicity(원자성): 트랜잭션의 연산은 모든 연산이 완벽히 수행되어야 하며, 한 연산이라도 실패하면 트랜잭션은 실패해야 합니다. Consistency(일관성): 트랜잭션은 유효한 상태로만 변경될 수 있습니다. Isolation(고립성): 트랜잭션은 동시에 실행될 경우 다른 트랜잭션에 의해 영향을 받지 않고 독립적으로 실행되어야 합니다. Durability(내구성): 트랜잭션이 커밋된 이후에는 시스템 오류가 발생하더라도 커밋된 상태로 유지되는 것을 보장해야 합니다. (일반적으로 비휘발성 메모리에 데이터가 저장되는 것을 의미)

  7. 트랜잭션 격리 수준(Transaction Isolation Levels)에 대해서 설명해주세요. 트랜잭션 격리수준은 고립도와 성능의 트레이드 오프를 조절합니다. READ UNCOMMITTED: 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있다. READ COMMITTED: 다른 트랜잭션에서 커밋된 내용만 참조할 수 있다. REPEATABLE READ: 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있다. SERIALIZABLE: 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 한다.(성능 매우 떨어짐)

  8. 정규화에 대해서 설명해주세요. 정규화는 데이터의 중복방지, 무결성을 충족시키기 위해 데이터베이스를 설계하는 것을 의미합니다.

네트워크

  1. TCP와 UDP의 차이에 대해 설명하실오. TCP는 연결형 서비스로 3-way handshaking 과정을 통해 연결을 설정하기 때문에 높은 신뢰성을 보장하지만, 속도가 비교적 느리다는 단점이 있습니다. UDP는 비연결형 서비스로 3-way handshaking을 사용하지 않기 때문에 신뢰성이 떨어지는 단점이 있지만, 데이터 수신 여부를 확인하지 않기 때문에 속도가 빠르다는 장점이 있습니다. TCP는 신뢰성이 중요한 파일 교환과 같은 경우에 쓰이고 UDP는 실시간성이 중요한 스트리밍에 자주 사용됩니다.

  2. HTTP와 HTTPS에 차이와 HTTPS에서 S는 어떤 계층에 속했는지 설명하시오. HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP로 중요한 정보를 주고 받으면 제 3자에 의해 조회될 수 있습니다. 이러한 문제를 해결하기 위해 HTTP에 암호화가 추가된 프로토콜이 HTTPS입니다. HTTPS는 SSL의 껍질을 덮어쓴 HTTP라고 할 수 있습니다.  ※ SSL(Secure Socket Layer) 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약 HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신함으로써 암호화와 증명서, 안전성 보호를 이용할 수 있게 됩니다.

  3. 쿠키와 세션에 대해 설명해주세요. 쿠키 클라이언트 PC에 저장 세션 세션은 서버에 저장되고, 서버자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원이 큼

  4. 3way handshake와 4way handshake를 설명해주세요. 3way handshake - TCP 3 Way Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.. 4way handshake - B가 A에게 FIN을 보낼때의 의미는 B가 더이상 보낼 데이터가 없음을 A에게 알려주기 위함이다. 만약 FIN이 유실된다면 A는 B가 아직 보낼 데이터가 있다고 인식하게 되고 계속 대기하게 된다. 그렇게 때문에 B입장에서는 A가 FIN을 확실히 받았는지를 알아야 한다. 그렇게 하기 위해서, A는 마지막 ACK를 응답으로 보내야만 한다.

  5. get방식과 post방식 그리고 CRUD에 대해 설명해주세요. GET - 데이터 길이제한 데이터 노출 , 속도빠름 데이터 요청시 사용 POST - 데이터길이제한없음,데이터노출안됨, GET 대비느림

  6. TCP와 IP에 대해 설명해주세요. TCP - 4계층 신뢰성보장,
    IP - 3계층비연결지향, 신뢰성보장않음,

  7. HTTP Method에 대해 설명해주세요. GET - 데이터 조회 POST - 요청 데이터 처리(보통 데이터 등록 사용) PUT - 데이터 변경 (해당 데이터가 없으면 생성) PATCH - 일부 데이터만 변경 DELETE - 데이터 삭제

  8. Connection Timeout/Read Timeout의 차이는? 서버 자체에 클라이언트가 어떤 사유로 접근을 실패했을 시 적용되는 것이 Connection Timeout입니다. 즉, 접근을 시도하는 시간 제한이 Connection Timeout 되는 것을 말합니다.  
  9. 클라이언트가 서버에 접속을 성공 했으나 서버가 로직을 수행하는 시간이 너무 길어 제대로 응답을 못 준 상태에서 클라이언트가 연결을 해제하는 것이 Read Timeout입니다. 이 경우는 클라이언트는 해당 상황을 오류로 인지하고, 서버는 계속 로직을 수행하고 있어 성공으로 인지해  양 사이드간 싱크가 맞지 않아 문제가 발생할 확률이 높습니다.

  10. OSI 7계층이 무엇인지 설명해 보세요. 7 계층(응용 계층) : 사용자에게 통신을 위한 서비스 제공. 인터페이스 역할 6 계층(표현 계층) : 데이터의 형식(Format)을 정의하는 계층 (코드 간의 번역을 담당) 5 계층(세션 계층) : 컴퓨터끼리 통신을 하기 위해 세션을 만드는 계층 4 계층(전송 계층) : 최종 수신 프로세스로 데이터의 전송을 담당하는 계층 (단위 :Segment) (ex. TCP, UDP) 3 계층(네트워크 계층) : 패킷을 목적지까지 가장 빠른 길로 전송하기 위한 계층 (단위 :Packet) (ex. Router) 2 계층(데이터링크 계층) : 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당하는 계층 (단위 :frame) (ex. 이더넷) 1 계층(물리 계층) : 데이터를 전기 신호로 바꾸어주는 계층 (단위 :bit) (장비: 케이블,리피터,허브)

운영체제

  1. 데드락에 대해서 설명하시오. 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황을 말합니다. 예를 들어, 자원 A를 가진 프로세스 P1과 자원 B를 가진 프로세스 P2가 있을 때, P1은 B를 필요로 하고 P2는 A를 필요로 한다면 두 프로세스는 서로 자원을 얻기 위해 무한정 기다리게 됩니다.

  2. 데드락 4대요소에 대해 설명하시오. 비선점 (Nonpreemptive) : 다른 프로세스의 자원을 뺏을 수 없음. 순환 대기 (Circular wait) : 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 관계가 순환적 구조. 점유 대기 (Hold & Wait) : 공유 자원에 대한 접근 권한을 가진 채로 다른 자원에 대한 접근 권한을 요구. 상호 배제(Mutual Exclusion) : 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 접근 권한이 제한적일 경우.

  3. 멀티 스레드 환경에서의 주의사항을 설명해주세요. 멀티 스레드는 자원을 공유하기 때문에 서로의 자원을 동시에 접근하려 할 때 서로 교착 상태(Deadlock)에 빠질 수 있다. 따라서, 멀티 스레드 환경에서는 Deadlock이 발생하지 않도록 동기화하는 작업이 필요하다.

  4. 64비트와 32비트의 차이점은 무엇인가요?
    • 32비트는 제한적 메모리로인해 고부하 프로그램 수행불가
  5. 동기와 비동기의 차이
    • 동기 메서드 리턴과 결과를 전달받는 시간이 일치하는 명령 실행 방식입니다. 또, 한 함수가 끝나는 시간과 바로 다음의 함수가 시작하는 시간이 같습니다.
    • 비동기 여러 개의 처리가 함께 실행되는 방식으로, 동기 방식에 비해 단위시간 당 많은 작업을 처리할 수 있습니다. 단, CPU나 메모리를 많이 사용하는 작업을 비동기로 처리하게 되면 과부하가 걸릴 수 있습니다. 프로그램의 복잡도도 증가하게 됩니다.

6.블로킹, 넌블로킹 장단점에 대해 설명해보세요.

  • 블로킹 블로킹 방식은 대상의 작업이 끝날 때 까지 제어권을 대상이 가지고 있는 것을 의미합니다.
  • 논블로킹 계속해서 polling을 수행하기 때문에 컨텍스트 스위칭이 지속적으로 발생해 지연이 발생합니다. 대상의 작업 완료여부와 상관없이 새로운 작업을 수행합니다.
  1. Thread-safe 하다는 의미와 설계하는 법을 설명해보세요. 두 개 이상의 스레드가 race condition에 들어가거나 같은 객체에 동시에 접근해도 연산결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태를 의미합니다. java.util.concurrent 패키지 하위의 클래스를 사용합니다. 인스턴스 변수를 두지 않습니다. Singleton 패턴을 사용합니다. 동기화(syncronized) 블럭에서 연산을 수행합니다.

  2. 세마포어와 뮤텍스의 차이에 대해 설명해보세요.
    • 세마포어는 여러개의 프로세스가 접근 가능한 공유자원을 관리하는 방식이고
    • 뮤텍스는 한 번에 한 개의 프로세스만 접근 가능하도록 관리하는 방식입니다. 따라서 뮤텍스는 세마포어가 될 수 없습니다. 또, 세마포어는 다른 프로세스가 세마포어를 해제할 수 있지만, 뮤텍스는 락을 획득한 프로세스만 락을 반환할 수 있습니다.
  3. 가상메모리에 대해 설명하시오. 가상 메모리는 실제 메모리(RAM, main memory, first storage)와 보조 기억 장치(auxiliary storage, secondary storage)의 Swap 영역으로 구성됩니다. OS 는 메모리 관리자(Memory Management Unit)를 통해 메모리를 관리하며 프로세스는 사용하는 메모리가 실제 메모리인지, Swap 영역인지 모릅니다. Java 에서는 Swap 영역을 잡아주지 않은 경우 OOM 이 발생할 수 있습니다.

코테관련

  1. List와 Set의 차이에 대해서 설명해주세요. List는 중복된 데이터를 저장하고 순서를 유지하는 선형 자료구조이고, Set은 중복되지 않은 데이터를 저장할 수 있고, 일반적으로 순서를 유지하지 않는 선형 자료구조입니다.(Set은 집합입니다., TreeSet과 같이 순서를 유지하는 Set도 존재합니다.)

2.배열과 링크드 리스트의 차이를 설명해주세요. 배열은 메모리상에 순서대로 데이터를 저장합니다. 반면 링크드 리스트는 다음 데이터의 위치에 대한 포인터를 가지고 있는 구조입니다. 배열은 데이터를 인덱스로 조회할 수 있기 때문에 인덱스 조회성능이 높고, 데이터가 메모리에 순서대로 저장되어 있기 때문에, 캐시의 지역성으로 인하여 비교적 빠르게 탐색을 수행할 수 있습니다. 링크드 리스트는 중간에 데이터를 삽입하거나 삭제하는 것이 용이하다는 장점이 있습니다.

  1. Stack, Queue에 대해서 설명해주세요. Stack 스택은 선형 자료구조의 일종으로 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO(Last In First Out)방식의 자료구조 입니다. 스택의 사용 예시로는 웹 브라우저의 방문기록(뒤로가기), 실행 취소(undo) 등이 있습니다. Queue 큐는 선형 자료구조의 일종으로 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out)방식의 자료구조 입니다. 큐의 사용 예시로는 프린터의 인쇄 대기, 콜센터 고객 대기 시간 등이 있습니다.

자바 심화 꼬리물기 식

  1. 자바의 모든 클래스는 Object 클래스를 상속받습니다. 그리고 Object클래스에는 equals() 와 hashCode() 라는 메소드가 선언되어 있습니다. 이 메소드들은 각각 어떤 역할일까요? 이 둘의 차이점은 무엇일까요?

  2. StringBuilder 와 StringBuffer 의 차이는 무엇일까요?
    • 왜 동기화(synchronized 키워드)가 걸려있으면 느린걸까요?
    • 싱글 스레드로 접근한다는 가정하에선 StringBuilder 와 StringBuffer 의 성능이 똑같을까요? (함정 질문입니다. synchronized 키워드를 달면 내부적으로 어떤 일이 벌어지는지 동작원리에 대해 잘 알아보세요!)
  3. System.out.println 메소드는 현업에서 절대 쓰지 말라고하는 메소드인데요. 그 이유가 무엇일까요?
    • synchronized 키워드는 왜 현업에서 큰 성능 저하를 일으킬 수 있을까요?
    • Blocking IO는 왜 성능을 저하시킬 수 있을까요?
    • synchronized 가 Blocking IO 와 만나면 어떻게 환장의 성능하락을 만들 수 있는걸까요?
  4. ArrayList 는 내부적으로 어떻게 구현되어있을까요?
    • 배열로 구현되어있다면 분명 크기가 꽉 차면 일반 배열처럼 예외가 발생할텐데 ArrayList 는 어떻게 무한히 데이터를 받을 수 있을까요?
  5. 스레드는 왜 써야하는 것일까요?
    • 스레드를 쓰면 동시에 여러 일을 처리할 수 있으니 한 1만개정도 띄우면 너무 좋지 않을까요?
    • 사실 좋지 않은데.. 왜 좋지 않을까요? 스레드를 사용하는데에 있어 어떤 비용이 들까요?
  6. 0이 들어있는 변수에 10개의 스레드가 동시에 접근해서 ++ 연산을 하면 우리 예상과 다르게 10이 나오지 않습니다. 왜 그럴까요?

  7. 자바에서 동시성과 관련된 예약어를 모두 말씀해주세요.(1개가 아니라 2개입니다.)
    • volatile 키워드는 어떤 키워드일까요?
    • 이 키워드는 가시성을 보장해준다고 하는데, 이게 어떤 말일까요?(volatile 가시성 을 검색해보세요)
    • volatile은 어떤 상황에 쓸 수 있을까요?
  8. Blocking IO와 Non-Blocking IO 의 차이를 말씀해주세요.
    • Blocking IO 가 일어나면 스레드에는 무슨 일이 생길까요?
    • 스레드가 멈춰있는 동안 CPU는 어떻게 될까요?
    • CPU가 쉬는 것을 막으려면 어떻게 해야할까요?
    • 스레드를 늘리면 단점이 무엇일까요? Non-Blocking IO는 CPU 활용률이 어떨까요?
    • Spring Webflux와 Netty에 대해 알아보시면 좋습니다.

9.Serializable 은 무엇일까요?

  • 직렬화란 무엇인가요?
  • 직렬화의 종류엔 무엇무엇이 있을까요?

Comments