자바면접질문 72

개발자 면접 질문 - Atomic, Volatile, Synchronized 차이

1. Atomic - compare and swap 기반으로 되어 있다. - 비교하는 과정에서 실패하면 다시 읽고 비교하고 반복하는 과정을 가진다. - Integer, boolean 등 변수를 사용할 수 있다. 2. Volatile - 메인 메모리에서 항상 최신 데이터를 가져온다. - 동시에 변수를 읽어 들이는 상황은 계속 발생한다. 3. synchronized - 한 객체에 여러 쓰레드가 동시에 사용하지 못하도록 한다.

면접 - 자바 2020.12.03

개발자 면접 질문 - 동기화된 컬렉션(Thread-Safe Collection)

1. 동기화된 컬렉션(Thread-Safe Collection) - 자바에서 Collections의 synchronizedXXX() 메서드를 제공하여 멀티 쓰레드에 안전한 컬렉션을 쓸 수 있게 한다. 리턴 타입 메소드(매개변수) 설명 List synchronizedList(List list) List를 동기화된 List로 리턴 Map synchronizedMap(Map m) Map을 동기화된 Map으로 리턴 Set synchronizedSet(Set s) Set을 동기화된 Set으로 리턴 2. 단점 - 하나의 쓰레드가 요소를 안전하게 처리하도록 도와주지만 전체 요소를 빠르게 처리하지 못한다. (작업시 락 발생) 3. 대안 - 자바에서 멀티쓰레드환경에서 안전하면서도, 쓰레드가 병렬적으로 작업을 처리할 수 ..

면접 - 자바 2020.12.03

개발자 면접 질문 - 블로킹과 논블로킹 큐(Blocking Queue / Non Blocking Queue) 종류

1. BlockingQueue - Queue가 꽉 찼을 때의 삽입 시도/ 비어 있을 때의 추출시도를 막는다. - 구현체 모두 Thread-safe 하다 1) ArrayBlockingQueue - 고정 배열에 일반적인 Queue를 구현한 클래스 - 생성 후 크기 변경 불가 2) LinkedBlockingQueue - 선택적으로 Bound가 가능한 LinkedList 로 구현한 Queue 3) PriorityBlockingQueue - PriorityQueue와 같은 정렬 방식을 지니는 용량 제한이 없는 Queue 4) SynchorousQueue - Queue 내부로의 insert 작업이 다른 쓰레드의 remove 작업과 반드시 동시에 일어나야 한다. 2. Non Blocking Queue 1) Concu..

면접 - 자바 2020.12.03

개발자 면접 질문 - Blocking(블로킹) / Non-Blocking (논 블로킹)

1. 블로킹 (Blocking) - 호출된 함수가 자신의 작업을 모두 끝낼때까지 제어권을 가지고 있어 호출한 함수가 대기하도록 만든다. - 클라이언트가 I/O 작업을 진행하면 해당 프로세스가 진행하는 작업이 중지된다. - 다른 클라이언트에 영향을 미치지 않게 하기 위해 클라이언트 별로 쓰레드를 만들어야 한다. - 쓰레드가 많이질수록 CPU의 컨텍스트 스위칭 횟수가 증가한다. - 쓰레드가 요청한 동작이 수행 가능해질 때 까지 대기한다. 2. 논블로킹 (Non-Blocking) - 호출된 함수가 바로 return 해서 호출한 함수에게 제어권을 주어 다른 일을 할 수 있게 한다. - Blocking 방식의 비효율성을 극복하고자 만든 것이다. - 클라이언트가 I/O 작업을 진행해도 유저 프로세스의 작업을 중단시..

면접 - 자바 2020.12.03

개발자 면접 질문 - 동적 프로그래밍(Dynimic Programming)

1. 다이나믹 프로그래밍 (Dynamic Programming) - 분할정복법처럼 작은 문제들로 나누어 각각 해답을 찾고 원래 문제의 해답을 계산하는 방식 1) 메모이제이션 (Memoization) 을 이용한 DP - Top Down 방식이다. - 반복되는 결과를 메모리에 저장해서 중복 호출 되었을 때 한번 더 계산하지 않고, 메모리에 저장된 값을 가져와서 사용 - 가장 큰 문제를 방문 후 작은 문제를 호출하여 답을 찾는 방식 2) 반복문을 이용한 DP - Bottom Up 방식이다. - 재귀가 필요없다. (시간과 메모리 사용량을 줄일 수 있다.) - for 문을 이용해서 수행한다. - 가장 작은 문제들부터 답을 구해가며 전체 문제의 답을 찾는 방식

면접 - 자바 2020.12.03

개발자 면접 질문 - IO와 NIO

1. IO - 입출력 방식 : 스트림 - 버퍼 방식 : None Buffer (보조 스트림 BufferdInputStream, BufferdOutputStream 사용) - 비동기 방식 : 지원 안함 - 블로킹 / Non블로킹 방식 : 블로킹 방식만 지원 - 대용량 처리에 효율적 2. NIO - 입출력 방식 : 채널 방식 - 버퍼 방식 : Buffer - 비동기 방식 : 지원 - 블로킹 / Non블로킹 방식 : 블로킹 / Non블로킹 방식 모두 지원 - 대용량 처리에 비효율적 - 연결 클라이언트가 많고 입출력 처리 작업이 오래 걸리지 않는 작업에 적절하다.

면접 - 자바 2020.12.03