면접은 1시간 30분 정도로 진행되었습니다. 제가 면접 본 Area별로
1. Area2(컴퓨터 구조 및 논리 설계)
교수1 : 자기소개 해봐요.
나 : 예, 어쩌구~~
교수1 : 왜 지원하게 되었지?
나 : 어쩌구~~
1) latch, F/F
나 : latch 설명, F/F 설명
교수1 : 흠~ 뭐가 다른데?
나 : ? 정확히 모르겠습니다.
2) cache와 memory hierarche
나 : 케쉬는 memory 계층에서 register와 main memory 사이에
있고 보통 associative memory를 사용합니다.
교수1 : 케쉬의 예를 들어서 설명해 보게
나 : 예를 들어, TLB(Translation Look-aside Buffer)의 경우
자주 참조되는 (논리 주소, 물리 주소) 쌍을 저장해
빠른 참조를 가능하게 합니다.
3) cache cohesion
나 : 첨 들어 봤습니다.
교수1 : 그래. 다음.
4) ?
나 : 역쉬. 모르겠습니다.
교수1 : 넘어가.
나 : (도대체 뭐란 말인가???)
5) locality 관련
나 : locality에는 시간 지역성과 공간 지역성이 있습니다.
시간 지역성이란 어쩌구....공간 지역성은 어쩌구...
케쉬의 존재 이유입니다.
교수1 : 어째서 그렇지
나 : 케쉬를 참조할 때 있으면 hit라고 합니다. hit율을
보면 약 90%정도여서 이것이 참조 지역성을 증명하는
것이라 배웠습니다.
교수1 : (약간 웃음)
6) pipe line hazards
나 : pipe line은 어쩌구...hazard의 정의는 pipe line이
정상적인 행동을 벗어나는 것입니다.
교수1 : 그럼 어케 되지? 속도가 느려지는 것이지.
나 : 예
나 : 종류는 3가지 인데, resource conflict, data dependency
, branch difficulty입니다.
각각의 경우는 어쩌구 저쩌구...해결 방안은 어쩌구...
(RISC 컴퓨터의 경우를 예를 들어서 설명)
칠판에 위와 같이 적혀 있고 각각을 간단히 설명하는 문제였죠.
흠~~역쉬 cache - locality - memory hierarche는 중요한가 봅니다.
중간에 무슨 logic 어쩌구 저쩌구 하고 cache cohesion은 무슨
말인지 몰라서 그냥 모른다구 했죠(ㅜ.ㅜ)
또 한분 교수님이 늦게 들어오셔서 다른 질문을 던졌습니다. 크~윽
교수2 : 컴파일러를 흥미있게 들었다던데, 그럼 컴파일러 설계자의
입장에서 단지 instruction set만 고려하면 되나?
나 : instruction set 뿐만 아니라 예를 들면, RISC 컴퓨터에서
pipe line hazard를 해결하는 데 delayed load / branch
방법을 사용합니다. 여기서 컴파일러의 도움이 필요하죠.
따라서 컴퓨터의 구조도 역시 고려해야 한다고 생각합니다.
교수1, 2 : 수고했어요. 나가보세요.
2. Area1(자료구조/알고리즘/오토마타)
역시 자기소개 간단히 하고 시작 했습니다.
교수1 : 넘 긴장하지 말고 제대한지 얼마 안됬어요?
나 : 3년 됬습니다.
교수1 : 긴장 푸시고..
나 : 예.(-.-)
1) 오토 마타
교수1 : 오토 마타 과목을 대학원 준비하면서 공부했죠?
나 : 예
교수1 : 그럼 지금부터 물어보죠.
나 : 예
교수1 : ragular language는?
나 : 유한상태 오토마타가 있으면 됩니다.
교수1 : 다른 방법은?
나 : 흠~~잘 모르겠습니다.
교수1 : 그럼 ragular expression은 뭡니까?
나 : 재귀적으로 정의해서 어쩌구..
교수1 : (웃으면서) 그럼 그거 하고 regular language하고 관계는?
나 : (아. 이제 질문 의도를 파악하고) 예, 정규 언어를 표현 하는
또 다른 방법입니다.
교수1 : 이제 알았죠.
나 : 예
교수1 : 정규 문법의 정의는?
나 : 좌선형이나 우선형 문법입니다.
교수 1 : 정규 언어인지 아닌지 어케 구별하나?
나 : pumping lemma를 사용합니다.
교수1 : 간단히 설명하면?
나 : 무한 정규언어에 속하는 어떤 문자열을 pumping하면 다시
그 무한 정규언어에 속한다는 원리를 이용합니다.
교수1 : 그럼 CFG는?
나 : A ->x 꼴의 문법입니다.
교수1 : CFG 에서 chomsky normal form이란?
나 : A -> BC | a 꼴의 문법입니다.
교수1 : 모든 정규 언어가 chomsky normal form으로 바뀌어 질 수
있나?
나 : 문법 변형 규칙을 사용하면 가능하다고 생각합니다.
교수1 : 그럼 CFG를 인식하는 오토마타는?
나 : npda 입니다.
교수1 : 그게 어케 동작하는데?
나 : stack을 이용하여 어쩌구...
2) 자료구조 및 알고리즘
교수2 : 다른 사람은 ....학생을 어께 생각하나?
나 : 어쩌구 저쩌구..
교수2 : 뒤의 칠판에 보면 트리가 그려져 있죠.
(k-ary full tree 였습니다.)
한번 depth k와 전체 node수 N의 관계를 보여 보세요.
나 : log k의 N입니다.
교수2 : 증명해 보라구.
나 : (헉, 열심히 흔적을 보였죠. 앗! 그런데 갑자기 정신이
오락 가락해서 실수했습니다)
교수2 : 흠~틀렸어
나 : (암 말도 못하고 그냥) 예
(아~~된장. 이런 단순한 문제도 못 풀다니 흑흑...)
교수2 : 그 옆에 time complexity O(n^2), O(2^n), n = 5
이렇게 젹혀 있는데 이런 경우가 되는 알고리즘의
예를 들어봐?
나 : sorting 에서 bubble sort와 0-1 knapsack 문제입니다.
교수2 : 0-1 knapsack문제는 어케 푸는데?
나 : 어쩌구...
교수2 : 그럼 n = 5라구 되어 있는데 저런 경우 O(n^2)이 더
좋은 알고리즘이라고 할 수 있는가?
나 : 아닙니다. 정의에 의하면 어쩌구...
교수2 : 흠~~그럼. AVL tree의 정의는?
나 : binary tree에서 banlance를 조정하는 트리입니다.
교수2 : 집에가서 맞는지 확인해 보도록 하고.
나 : ? (앗! 왼쪽과 오른쪽 트리의 depth 관계를 빼먹었습니다
흑흑...)
교수2 : 수고했어요. 나가보세요.
나 : 예.
3. Area3(운영체제/프로그래밍 언어론)
간단히 자기소개 후....
교수1 : 박사 과정 진학 계획은 아직 없다구?
나 : 예
교수1 : 석차는 이정도 인데 학점이 짠가보군?
나 : 예
교수1 : 카이스트는 지원했었나?
나 : 예. 낙방했습죠.
1) 운영 체제
교수2 : 그럼 운영체제를 배웠을테니 질문하죠.
교수2 : VM 구현 방법에 page와 segment가 있는데 간단히 설명해
봐?
나 : page는 어쩌구...segment는 어쩌구...
교수2 : 차이점은 뭔가?
나 : segment는 프로그래머에 의해서 지정됩니다.
교수2 : micor kernel이라구 들어봤나?
나 : 예. 하지만 정확히는 모르겠습니다.
교수2 : 그래, 그럼 IPC 방법에는 뭐가 있지?
나 : shared memory, massage 방식....
교수2 : 흠~~그럼 그 둘의 장단점을 설명해 보게
나 : 먼저 공유 메모리 사용시 속도는 빠르지만 동기화 문제를
고려해야하고 메시지 방식은 느립니다.
교수2 : dead lock의 필요 조건은?
나 : 어쩌구...
교수2 : 그럼 그걸 해결하는 방법에는 prevention, avoidance,
detection and recovery가 있는데 각각을 간단히
설명하면?
나 : prevention은 상호 배제를 제외한 나머지를...
교수2 : 그건 됐고 avoidance는?
나 : 시스템이 항상 안정 상태에 있게 만드는 방법입니다.
교수2 : 어케 하지?
나 : 최대 요구 자원 정보를 미리 알아야 합니다.
교수2 : 그럼 현재 안정 상태면 승락하나?
나 : (약간 꼬이다가) 아닙니다. 수락 후 안정 상태이면
허용합니다.
2) 프로그래밍 언어론
교수1 : static / dynamic scoping의 정의는 뭔가?
나 : 어쩌구...
교수1 : 그럼 구분은?
나 : compile time과 run time입니다.
교수1 : binding의 정의는?
나 : 어쩌구...
교수1 : binding에도 static과 dynamic이 있지?
나 : 예
교수1 : 구분은?
나 : 어쩌구....
교수1 : strongly typed 언어란?
나 : 어쩌구...
교수1 : activation record에서 static link와 dynamic link는
뭔가?
나 : 비지역 변수를 참조하기 위하서 어쩌구...
교수1 : 그럼 그 구분도 아까와 같이 compile time과 run time
인가?
나 : 실제로 activation record는 프로시져를 호출한 후에
생기기 때문에 약간 다르지만 program text의 작성 시에
프로그래머는 static하게 static link가 어께 될 것인 지
알 수 있습니다. 그래서 비슷하다고 생각합니다.
교수1 : 수고했어. 나가봐.
나 : 예.
흠~~tree 부분을 좀더 공부하지 못한게 아쉽더군요.
제가 공부해본 결과 Reading list를 잘 읽는 게 젤 중요하다고 생각
되구요.(저는 그러지 못했습니다.) 단순히 정의만 아는 것은 기본이고
장점과 단점 그리고 전체적인 흐름은 더욱 중요한 것 같습니다.
그럼 이상이었습니다. bye~~