Dev

11. 기술면접 전 보고가면 좋은 내용 공유

VIPeveloper 2021. 4. 6. 23:35
728x90
반응형

1. 스레드 와 프로세스의 차이는?

프로세스는 메모리에 올라와 실행 중인 프로그램 인스턴스이고 스레드는 프로세스내에서 실행되는 여러 흐름의 단위 입니다.

  • 멀티 프로세싱 - 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
    • 장점: 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산 되지 않는다.
    • 단점: Context Switching에서의 오버헤드
      • Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생.
      • 프로세스 사이의 어렵고 복잡한 통신기법(IPC)
      • 프로세스는 각각 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.
  • 멀티 쓰레딩 - 하나의 응용프로그램을 여러 개의 쓰레드로 구성하고 각 쓰레드로 하여금 하나의 작업을 처리 하도록 하는 것이다.
    • 장점 : 시스템 자원 소모 감소
      • 시스템 처리량 증가 : 프로세스 간의 통신보다 쓰레드 간 통신이 비용이 적으므로 통신 비용이 줄어들게 된다.
    • 단점: 잘못된 변수 공유와 미묘한 시간으로 오류 발생 확률 증가
      • 동기화의 문제가 발생한다.
      • 하나의 쓰레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

2. cpu의 개념과 core 수와의 관계

  • CPU - 기억,연산, 제어 3개의 기능을 종합하는 장치이며 컴퓨터의 가장 중요한 부분을 담당합니다. 컴퓨터가 동작하는데 필요한 모든 계산을 처리합니다.
  • CORE - 코어란 각종 연산을 수행하는 CPU의 핵심 요소이다. 1개면 싱글코어, 2개면 듀얼코어, 3개면 트리플코어라고 부르며, 많으면 많을수록 일반적으로 처리속도가 빨라진다.
    • 따라서 코어가 많을 수록 빠르다.

3. context switching 이란?

  • Context Switching란?
    • CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 Context Switching라 한다.
    • 구체적으로 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

4. 동기 vs 비동기, 블로킹 vs논블로킹

  • 동기/비동기 : 작업을 수행하는 주체가 두개 이상이어야한다. 이 떄, 작업의 시작/종료 시간을 맞춘다면 동기. 아니면 비동기로 구분합니다.
    • A가 작업을 끝내야만 B가 작업을 시작하는 경우, A와 B가 작업을 동시에 시작하는경우 등 순서를 지켜 실행하는경우 동기이다.
    • A와 B가 서로 영향을 받지 않고 각자의 고유한 시간으로 작업하는 경우 비동기라고 한다.
  • 블로킹/논블로킹 : 작업의 대상이 두개 이상이어야한다.
    • 작업A를 수행하다가 작업B가 들어왔을 때, 작업B가 끝나길 기다리는것은 블로킹이다.
    • 작업A를 수행하다가 작업B가 들어왔을 때, 호출이후 바로 작업A를 지속하는것은 논블로킹이다.
  • 동기 + 블로킹 조합 : JDBC에서 DB쿼리를 조회하는 경우
  • 비동기 + 논블로킹 조합 : 대규모 메시지 API를 호출하는 경우
    출처 : https://deveric.tistory.com/99

5. TCP vs UDP

  • TCP는 연결형 데이터 전송방식이다. 전송 순서가 보장되며 신뢰도가 높다. 대신 느리다.
  • UDP는 비연결형 데이터 전송 방식이다. 전송 순서가 보장되지 않으며 신뢰도가 낮다. 대신 빠르다.

6. hashMap hashTable 코드 뜯어보면서 왜 thread safe한지 분석해보자.

  • HashTable : java1 부터 쭉 이어져오고 있음. 키/밸류에 null 값 허용하지 않음. 동기화 코드로 구성되어있어 멀티스레드 환경에 적합하다.
  • HashMap : java2 부터 쭉 이어져오고 있음. 키/밸류에 null 값 허용하고 있음. 동기화코드가 구현되어있지 않아 단일스레드환경에 적합하다.
  • 출처 : https://tomining.tistory.com/169

7. hash는 충돌 났을때 어떻게 처리하고 있는가?

  • 해시 충돌 발생 이유 : 서로 다른 값을 가지고 있는 key가 해시테이블의 한 주소에 매핑되는 경우 발생한다.

    • Hashing을 통해 삽입하려 했지만, 이미 다른 원소가 자리를 차지하고 있을 경우 에러가 발생한다.
  • 해결을 위해 체이닝 기법을 이용하자.

    • 해시 자료구조를 배열이 아닌 연결리스트로 설정한다. 같은 주소로 배정되었을 경우 연결리스트에 추가만 해주면 되므로 사이즈 걱정도 없다.
728x90
반응형