목록CS 지식/면접준비 (78)
개발놀이터
Q. 뮤텍스와 세마포어의 차이점에 대해서 설명해주세요. A. 뮤텍스는 Locking 매커니즘이고 세마포어는 Signaling 매커니즘입니다. 이 둘은 식당에 있는 화장실 예시로 설명할 수 있습니다. 이 화장실 예제에서 사람은 프로세스 혹은 스레드로, 화장실은 자원으로 묘사됩니다. 뮤텍스는 식당에 화장실이 한개이고 열쇠도 한개인 경우입니다. 화장실에 가고싶으면 열쇠를 획득해야하고 만약 이미 화장실에 사람이 있다면 열쇠를 획득할 때 까지 기다려야합니다. 세마포어는 화장실이 여러개이고 화장실 밖에 전광판이 있는 경우입니다. 만약 화장실이 세개라면 전광판에는 3이라는 숫자가 적혀있고 누군가 화장실에 들어가면 전광판의 숫자가 2로 줄어듭니다. 화장실에 들어간 사람이 화장실을 나온 경우 숫자는 다시 3으로 바뀌게 ..
Q. 교착상태와 기아상태에 대해서 설명하고 해결방안에 대해서 설명해주세요. A. 교착상태는 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 대기하고 있는 상태를 말합니다. 교착상태가 발생하기 위해서는 한번에 한 프로세스만 자원을 사용할 수 있는 상호 배제, 할당된 자원을 가진 상태에서 다른 자원을 기다리는 점유 대기, 다른 프로세스가 자원의 사용을 끝날 때 까지 자원을 뺏을 수 없는 비선점, 각 프로세스가 순환적으로 다음 프로세스를 요구하는 자원을 가지고 있는 상태인 순환 대기가 모두 만족하는 경우 발생합니다. 이를 해결하기 위해서는 앞선 네가지 조건 중 하나라도 만족하지 않도록 설계하거나, 알고리즘을 통해 교착상태가 발생하지 않도록 하는 방법을 사용하거나, 교착상태를 감지하고 회복하거나, 시스템..
Q. 데이터베이스 인덱스에 대해서 설명해주세요. A. 기존 DBMS는 검색을 하기 위해서는 풀 스캔을 통해 검색에 대한 결과를 반환했습니다. 이는 효율적인 방식이 아니기 때문에 고대 개발자들은 데이터를 정렬한 후 이진 탐색 트리를 활용하여 데이터를 쉽게 반환할 수 있었습니다. 이렇게 정렬된 데이터들을 인덱스라고 부릅니다. 인덱스의 장점은 검색성능의 압도적인 향상입니다. 이는 데이터 수가 많으면 많을 수록 좋은 성능을 보여줍니다. 단점으로는 삽입, 수정, 삭제 연산을 수행할 때 인덱스도 데이터 일관성을 위해 삽입, 수정, 삭제의 작업을 해줘야하고 이때 성능상 불이익을 받을 수 있습니다. 또한, 인덱스를 저장하기위해 데이터베이스의 10퍼센트 정도 되는 데이터 공간이 필요한 것이 단점이 될 수 있습니다.
Q. 프로세스 동기화에 대해 설명해주세요. A. 프로세스 동기화는 다중 프로세스 환경에서 공유자원에 하나의 프로세스만 접근가능하도록 하는 것입니다. 프로세스 동기화를 하지 않으면 데이터의 일관성이 깨지기 때문에 연산결과가 잘못 반환될 가능성이 존재하므로 주의해야합니다. 각 프로세스에는 Critical Section이라고 부르는 임계구역이 존재합니다. 한 프로세스가 자신의 임계구역에서 작업하는 동안에는 다른 프로세스가 그들의 임계구역에 들어갈 수 없습니다. 임계구역에 접근한는 것을 제어하기 위해 세마포어, 뮤텍스와 같은 매커니즘을 사용합니다. 이런 임계구역 문제는 여러 프로세스나 스레드가 동기화 매커니즘 없이 자원에 접근하려는 상황인 race condition을 막을 수 있는 해결책이 됩니다. 임계구역 문..
Q. Thread-safe에 대한 정의와 구현방법에 대해서 설명해주세요. A. 두개 이상의 스레드가 같은 객체에 접근해도 연산결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태를 말합니다. Thread-safe를 구현하기 위해서는 불변 객체를 사용하거나, java.util.concurrent 클래스를 사용하거나, ThreadLocal을 사용하거나, synchronized 키워드를 사용하거나, final 변수를 사용해야 합니다.
Q. 멀티스레드 프로그래밍에 대해서 설명해주세요. A. 멀티스레딩은 하나의 프로세스에서 여러개의 스레드를 만들어 자원의 생성과 관리의 중복을 최소화하는 것을 말합니다. 멀티스레딩의 장점은 멀티프로세싱에 비해 메모리 자원소모가 적고 힙 영역을 통해서 스레드간 통신이 가능해서 프로세스간 통신보다 간단하다는 점이 있고 단점은 힙 영역에 있는 자원을 사용할 때는 동기화를 해야하고 이때 락을 과하게 사용하면 성능이 저하될 수 있다는 점입니다.
Q. 프로세스와 스레드의 차이에 대해서 설명해주세요. A. 프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이고 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위입니다. 각각의 프로세스는 고유한 주소와 메모리 공간이 부여되고 독립적입니다. 반면에 스레드는 부모 프로세스에서 자원을 공유하기 때문에 논리적으로 연결되어 있습니다. 즉, 스레드는 프로세스 안에 포함된 개념이며 스레드는 경량화된 프로세스라고 볼 수 있습니다. Q. Context Switching에 대해서 설명해주세요. A. Context Switching은 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말합니다. 보..
https://coding-review.tistory.com/345 여태까지 공부한 데이터베이스 면접질문 / 답변 https://coding-review.tistory.com/344 여태까지 공부한 Spring 면접질문 / 답변 https://coding-review.tistory.com/343 여태까지 공부한 Java 면접질문 / 답변 4부터 시작하는 것은 넘어가주시길 바랍니다... 따로 정리 coding-review.tistory.com 위의 포스팅과 이어집니다. 58. TCP와 UDP의 차이 TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램으로 전송하는 프로토콜입니다. TCP는 연결형 서비스를 지원하고 가상회선 연결을 지원하기 때문에 전송이 양방향으로 이루어질 수 있는 전이중 방식과 각..
https://coding-review.tistory.com/344 여태까지 공부한 Spring 면접질문 / 답변 https://coding-review.tistory.com/343 여태까지 공부한 Java 면접질문 / 답변 4부터 시작하는 것은 넘어가주시길 바랍니다... 따로 정리하면서 공부한거라 Java 면접질문이 아닌 123번을 제외하고 4번부터 수 coding-review.tistory.com 위의 포스팅과 이어집니다. 46. 데이터베이스 인덱스에 대해서 설명해주세요. 데이터베이스 인덱스는 조회 성능을 향상시켜주는 데이터베이스 튜닝 방식 중 하나입니다. 하지만 실질적인 성능 향상을 위해서라면 인덱스가 사용된 컬럼인지 카디널리티나 셀렉티비티같은 구성 요소들이 고려된 인덱스인지 확인해야합니다. 47...
https://coding-review.tistory.com/343 여태까지 공부한 Java 면접질문 / 답변 4부터 시작하는 것은 넘어가주시길 바랍니다... 따로 정리하면서 공부한거라 Java 면접질문이 아닌 123번을 제외하고 4번부터 수록했습니다. 꼬리질문에 대한 답변도 수록했기 때문에 조금 길게 coding-review.tistory.com 위의 포스팅과 이어지는 내용입니다. 1. 스프링이 어떻게 트랜잭션을 추상화했나요? / 왜 추상화 했나요? 트랜잭션이 데이터 접근 기술마다 다른 현상이 발생했습니다. 예를 들어서 JDBC에서 JPA로 기술을 확장하기 위해서 그에 따른 모든 트랜잭션 코드들을 바꿔야했습니다. 이를 해결하고자 스프링에서는 플랫폼트랜잭션매니저 라는 것으로 모든 트랜잭션 코드들을 추상화..