기술 면접 회고

질문 내용

면접 결과 정리

7/25일 기술면접에 참여했다. 처음이라 떨리지도 않았고 기대도 안했다. 이번 경험으로 어떻게 진행되는구나, 어떤 질문들을 하는구나를 느끼는 게 중요하다고 생각했다. 스스로 얼마나 준비가 덜 된 사람인지 알기에 열심히 적기도 했고 기억을 더듬었다. 한번 들은 질문은 안까먹기 위해 정리하는 글이다.

주제 1 PintOS

1. 스레드와 프로세스의 의미와 차이는 무엇인가?

내 대답

쓰레드는 연산을 처리하는 가장 작은 단위. 연산이라 하면 간단하게는 숫자와 숫자를 더한다던가 하는 작동되는 한 단위.

프로세스는 한 프로그램에서 발생하는 일련의 과정.

공부 내용

Thread : 프로그래밍되어 scheduler가 독립적으로 관리할 수 있는 instruction의 가장 작은 단위

Process : 독립적인 메모리공간과 시스템자원을 할당받아 실행되는 독립적인 인스턴스

Thread VS Process

  • Process 내 여러 개의 Threads 존재 가능
  • Process는 자신만의 오픈 파일, 네트워크 소켓, 스택 등을 가진다.
  • Process는 다른 process의 메모리 공간이나 자원 접근 못함.
  • Thread는 같은 프로세스에 속하는 가상 주소 공간을 thread와 공유
  • Thread는 자신만의 스택이 있지만, 코드, 데이터 세그먼트는 공유한다.

2. 스레드는 종료되면 사라지는가?

내 대답

아니다. 경우에 따라 다르겠지만, 다시 사용될 필요가 있다면 waiting 등의 상태로 관리하여 재사용할 수 있다. 물론 필요하다면 terminate 시킬 수도 있다.

공부 내용

프로세스가 종료될 때 사라진다. 하지만 별개의 생명 주기를 가진다. 프로세스가 종료되지 않았을 때는 재사용 될수도, 미리 종료될 수도 있지만 결국 프로세스가 종료되면 모든 내부의 스레드는 종료된다.

3. 스레드는 어떤 자원을 공유하지 못하는가? 공유할 수 있는 것은 있는가?

내 대답

processor를 공유하지 못함. 정확히는 같은 프로세서를 사용하지만, 한번에 한 스레드만 점유할 수 있음.

공부 내용

공유 : 전역 변수, 공유 데이터 구조, 프로세스의 주소 공간

공유 X : 뮤텍스 or 세마포어, 스택

4. 프로세스는 어떤 자원을 공유하지 못하는가? 공유할 수 있는 것은 있는가?

내 대답

X

공부 내용

공유 : 파일, 공유 메모리

공유 X : 스택, 레지스터, PCB

4. 가상 메모리를 다루었는데, 메모리는 어떻게 이루어져 있는가?

내 대답

X

공부 내용

코드 영역 : 실행할 프로그램의 명령어 저장

데이터 영역 : 전역변수 등을 저장

스택 영역 : 함수 호출과 지역 변수 저장

힙 영역 : 동적으로 할당된 메모리 저장

5. 가상메모리란 무엇인가?

내 대답

X

공부 내용

Physical memory를 보조하여 가상 주소를 통해 프로세스에게 더 큰 주소공간을 제공하고 동시에 여러 프로세스를 실행할 수 있는 환경을 제공함.

주제 2 알고리즘

1. 본인이 알고있는 정렬 중 시간복잡도가 가장 낮은 정렬은?

내 대답

병합 정렬

2. 병합정렬의 시간복잡도는 무엇인가?

내 대답

nlogn

3. 본인이 말하는 시간복잡도는 Big-O를 말하는 것인가?

내 대답

맞음

4. 그렇다면 Big-O는 무엇을 의미하는가?

내 대답

시간 복잡도의 점근적 상한선. 최악의 경우 시간복잡도를 의미함

5. O(N) 과 O(2N)은 같은가? 혹은 다른가? 이유는 무엇인가?

내 대답

같다. Big O 표기법에서는 입력크기인 n의 최고차항의 차수만 고려하고 계수나 상수는 고려하지 않음

5. 병합정렬은 어떻게 이루어지는가?

내 대답

분할 단계

우선 배열을 절반으로 나누어서 2개만 남을때까지 반복한다.

정복 단계

2개가 남으면 2개를 비교하여 정렬한다.

결합 단계

다른 2개짜리 배열과 병합하고 그 내부에서 정렬을 시행한다.

1개의 배열만 남을때까지 반복한다.

6. 각각 단계에서 수행시간과 수행횟수는 어떻게 되는가?

내 대답 :

분할단계는 2로 나누어지는 횟수만큼 이루어진다.

입력크기 n을 2의 k제곱으로 표현한다면 k=logn이므로 log n번 발생함

공부 내용

반으로 나누는 시간은 상수.

결합하는 단계에서는 비교하여 정렬하므로 각 배열의 크기만큼 걸림. 모든 배열의 크기의 합은 n임.

분할하는 것처럼 결합하는 것도 logn번이므로 둘을 곱해서 nlogn이 시간복잡도 임을 알 수있음

7. 지금까지를 바탕으로 병합정렬의 시간 복잡도를 다시 계산할수 있는가?

내 대답 :

X

병합정렬의 시간복잡도에서 왜 밑이 2인 로그가 나타나는가?

내 대답 :

분할할 때 절반인 2로 나누었기 때문

밑이 10인 로그를 쓰려면 어떻게 해야하는가?

내 대답 :

분할시 2로 나누지 않고 10으로 나누면 됨.

밑이 10인 로그를 쓸때와 밑이 2인 로그를 쓸때의 시간복잡도는 어떻게 다른가?

내 대답

둘은 다르다.

공부 내용

로그의 밑은 상수이므로 차이가 없음

지금까지를 바탕으로 O(N)과 O(2N)이 같은지 다른지 다시 말해볼 수 있는가?

내 대답

아까 N,2N에서랑 log랑 대답이 달라진 것 같음. 잘 모르겠음. 더 공부가 필요함.

공부 내용

둘은 같다.

주제 3 C Programming

malloc이란 무엇인가? 무엇의 약자인가?

내 대답

모르겠음. 까먹음.

공부 내용

동적 메모리 할당 memory allocation

###

그때 무엇을 했는지 기억하는가?

내 대답

메모리를 물리적으로 연결지을지, 물리적 위치와 상관없이 논리적으로 연결할지를 다루었던 기억이 남