본문 바로가기
:: Notes/Books

[Book] 프로그래밍 면접 이렇게 준비한다 -2

by 메모밍 2019. 9. 9.

 

:: INTRO

  총 20개의 Chapter중 에서 내가 따로 생각해보고 싶었던 부분들을 빼서 정리해보려한다. 처음에는 단순히 알고리즘 복습을  위해 본 책을 집어들었지만 쭉 읽다보니 저자가 권하고 있는 방향이 너무나 명확해서 안하면 손해를 보거나 모르면 안될 것들만 짚어주는 느낌 마저 들었다. 

 


 

:: Chapter 01. 구직을 시작하기 전에

'일 제대로 해내기' 

  지금까지 정말 수많은 프로젝트와 프로그램을 코딩 해왔지만 정작 확실하게 두각을 보일 수 있는 무엇인가 이뤄내 봤던 경험을 정리해 두지 않았다. 단순히 학위를 취득한 경험과 하나의 프로젝트를 착수 단계부터 출시 까지 끌고 가본 경험은 회사 입장에서 보았을때 전혀 다른 경험으로 인식 된다. 이러한 경험을 잘 정리해 두는 것은 내가 일을 제대로 해낼 줄 아는 사람이라는 것을 어필 할 수 있다. 당장 최근 프로젝트부터 Github와 youtube를 이용해 정리를 시작했다.

 

'온라인 프로파일을 정돈하라'

  온라인 프로파일이란 나와 관련하여 공개된 온라인 정보들을 말한다. 이는 이력서 못지않게 나에대한 정보를 담고 있기에 채용 담당자에게 다양한 상황에서 쓰일 수 있다. 실제로 '메모밍' 이라는 닉네임을 오랫동안 사용해온 나로써는 네이버와 구글에 '메모밍'으로 검색만해도 내가 이전에 적었던 글들과 활동했던 사이트들이 주르륵 나오는 것을 발견하고 깜짝 놀랐다. 그중에서는 채용 담당자가 보았을때 좋은 인상을 남기지 못할 것으로 생각되는 컨텐츠들도 여럿 있었다. 구글검색결과, 링크드인 프로파일, Github 프로파일, StackOverflow, Youtube, 네이버 카페 및 블로그 글등 내가 정리해야할 프로파일들을 3일에 걸쳐 정리해 나갔다. 결과적으로 심사관이 보기에 결격사유가 되지 않을 만큼 정리를 할 수 있었다.

 


:: Chapter 04. 프로그래밍 문제 접근법

'절차'

  프로그래밍 문제를 풀때를 한번 떠올려 보면 종이와 펜을 먼저 들때도 있고 이것저것 바로 코딩을 해볼 때도 있다. 하지만 결국에는 자주쓰던 에디터를 하나 열고 내 생각대로 함수를 구현 하면서 실행도 해보고 에러가 발생하면 에러도 잡으면서 하나의 Flow를 굳혀 가는 방식으로 문제를 풀었다. 저자는 면접관과 일대일로 진행하는 경우 컴퓨터가 제공되지 않았을때를 항상 생각해보라고 말한다. 화이트보드와 펜만 주어졌을때 어떻게 할 것인가? 이럴때 당황하지 않기위해서 평소에 풀때도 백지와 펜만 두고 시간을 정해두고 푸는 연습을 꾸준히 하는것을 추천하고있다. 

 

'소통이 핵심이다'

  면접관 입장에서 생각해보면 지원자의 코드를 직접 볼 기회는 면접시에 작성한 코드뿐이다. 그렇기에 현장에서 짧은 시간안에 짜는 코드가 지저분하다면 평소의 습관도 지저분 한것으로 생각될 가능성이 크다고 지적한다. 면접시에 최고의 코드를 만들 수 있도록 평소에 연습해야한다. 또한 코딩을 하는 각 단계마다 면접관과 끊임 없이 대화를 해야한다고 말한다. 입을 꾹다물고 코딩만하면 이 사람이 어떤 생각을 가지고 지금 접근을 하고 있는지를 알 방법이 없다. 작은 포인트라도 자신의 생각을 정리하며 대화를 해야한다.

 

'문제를 풀다가 막히는경우'

  면접관은 문제를 풀다가 막혔을 경우에 지원자가 어떤식으로 반응 하는지를 보고 싶어한다. 바로 패닉에 빠지는 것이 아니라 여러가지 자료구조도 시도해보고 ( 그러려면 이전에 연결리스트, 배열. 해시테이블, 이진 검색 트리 같은 여러 자료 구조를 구현해보는건 필수다 ! ) 레퍼런스에서 찾을 수 있을 만한 내용은 질문을해도 무방하다.

 

'빅오분석법'

학부 시절 열심히 머리를 굴리며 답을 써냈던 빅오 분석법을 설명하는 파트가 있었는데 실제로 자신이 짠 알고리즘이 어떤 계산 함수를 따르는 알고리즘인 지를 알고 있다면 개선을 할때 큰 도움이 될것 이라는 것은 분명하다. 다시한번 복습 해볼 수 있는 계기가 된 파트였다.

 


:: Chapter 05. 연결 리스트

  사실 연결리스트(Linked List)는 별 것 아닌 것처럼 보이지만 동적인 데이터 처리와 여러 문제에서 쉽게 쓰일 수 있는 자료구조로 기초적인 자료구조를 테스트하기에 안성 맞춤인 자료구조라고 말한다. 데이터의 삽입, 삭제, 탐색등을 한번에 물어볼 수 있으니 무궁 무진하게 응용 될 수 있다. 또한 참 어려워하는 C/C++의 포인터도 테스트 할 수 있기에 애용된다. 

  해당 챕터를 읽으면서 다시한번 C와 C++로 Linked List를 구현해보았다. 단일 연결 리스트와 이중 연결 리스트 그리고 각 자료 구조 에서의 탐색, 삽입, 삭제등을 구현해보며 느낀것은 한동안 라이브러리를 가져다 써버릇 하다보니 직접 구현하는 것이 쉬운 작업이 아니라는 것이었다.

 


:: Chapter 06. 트리와 그래프

  트리는 재귀 호출과 실행 시간을 테스트 하기에 참 좋은 자료 구조이다. 그래프 같은경우 중요하긴 하지만 짧은 시간에 문제를 풀고 구현하는 것이 까다롭기에 트리에 비해서 많이 출제 되지 않는다. 이 두 자료구조 역시 오랜만에 C/C++을 이용해서 구현을 해보면서 동시에 여러 탐색 알고리즘과 여러 종류의 트리를 다시금 구현해보는 시간을 갖을수 가 있었다. 중간 중간에 실제 면접 문제 처럼 면접 문제가 주어질때면 어김없이 20분이라는 타이머를 설정 해놓고 풀어보았다. 만약 진짜 면접 이었다면 아찔 했을 상황이 꽤 자주 나왔다.

 

 

댓글0