면접 결과 정리
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
###
그때 무엇을 했는지 기억하는가?
내 대답
메모리를 물리적으로 연결지을지, 물리적 위치와 상관없이 논리적으로 연결할지를 다루었던 기억이 남