네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

'2021/10/30'에 해당되는 글 2건


반응형

2020년 하반기 네이버 공채 1차 / 2차 면접 후기


1년 전, 기억을 되살리기엔 너무 오래전 이야기지만 다른 사람들에게 도움이 될까 싶어서 꺼내보려고 한다.
사실 이 후기를 1년 전에 적었어야 했는데 불합격 후 멘탈을 다시 부여잡는데 시간이 오래 걸렸다. 다시 취준을 시작하는 것이 좀 힘들기도 했고 부족한 점이 뭔지 차근차근 살펴보는 시간도 필요했기 때문에 이제야 글을 쓰게 되었다. 그리고 2021년 하반기 네이버 서류 합불 발표와 함께, 면접 일정이 잡혔다는 소식을 접하게 되면서 면접을 준비하는 사람들에게 도움이 되고자 조금 작성해보려 한다.

물론, 이 글은 면접 전에 작성했던 정보 보안 서약서 때문에 조심스러운 부분도 있다. 하지만, 네이버뿐만 아니라 다른 기업들도 비슷하게 기술 면접을 진행할 것이고 네이버뿐만 아니라 기술 면접을 준비하는 모든 분들을 대상으로 작성하였다. 그동안 내가 기술면접을 보고 나서 생각했던 부분들을 작성하였기 때문에 그 부분을 참고해서 보면 좋을 것 같다. "이런 문항이 나온다!" 보다는 "이렇게 준비하면 좋다!" 혹은 "이렇게 준비했으면 더 좋았을 걸!"이라는 내용을 담을 것이다. 때문에 뻔한 내용일 수 있다는 점... 물론 문제가 된다면 연락 부탁드립니다.

1차 면접

코딩 테스트와 서류 합불 발표가 뜨고 1차 면접 일정이 잡혔다. 서류 발표가 20년 10월 16일이었고 면접 일정은 10월 20일 날 잡혔다. 그리고 면접은 10월 23일(금요일)이었다. 아직도 기억나는 게 이때 내가 42 서울 피신을 진행 중일 때라 정신이 없었는데 더불어 면접도 급하게 준비한다고 바빴다. 피신에서 매주 금요일은 시험을 보는 데, 시험 시간과 면접 시간이 겹치는 바람에 클러스터 근처에 스터디룸을 빌리고 시험 중간에 나와서 면접을 보았다.

중고 신입은 면접 일자가 토요일에 잡히는 듯 보였고 생신입은 평일에 배정되는 듯 보였다. 물론 모든 사람이 그렇게 배정되는 것은 아니지만 면접 일자를 변경할 수 없으니 네이버에서 최대한 배려를 해주신 것 같았다. 나는 당시 대학교 4학년이었고 졸업 예정자였기 때문인지 금요일에 면접을 보게 되었다.

사람마다 1차 면접 내용이 다른 것 같지만 나는 CS 위주의 질문을 많이 받았다. 크게 알고리즘, 운영체제, 네트워크 ! IT 기술 면접에서 흔하게 나오는 질문들이 나온다. 아, 그리고 모든 면접이 그렇듯 1분 자기소개는 준비해 가야 한다. (물어보지 않는 기업들도 있었지만, 거의 99%가 자기소개를 준비해 가는 것이 좋고 네이버 역시 간단한 자기소개로 면접이 시작된다.)

# 알고리즘

알고리즘은 크게 이론라이브 코딩으로 나뉘게 된다.
이론은 다들 알고리즘이나 자료구조 시간에 배웠던 이론들을 다시 정리하는 시간을 가지면 좋을 것 같다. 지금 생각해보면 삼성 알고리즘 특강이 많이 도움이 되었을 것 같다. (20년도에 네이버 면접을 보았고 21년에 삼성 알고리즘 특강을 들었다) 지금까지 배운 알고리즘을 정리하면서 어떤 문제가 생겼을 때 어떤 알고리즘을 쓰는 것이 효율적인지 정리하는 것이 좋다. 네이버뿐만 아니라 다른 기업에서도 코딩 면접에서는 시간 복잡도와 공간 복잡도를 물어보는 경우가 많다. 단순히 이런 알고리즘에는 시간 복잡도가 뭔지 암기하는 것이 아니라 코드를 보면 시간 복잡도는 얼마인지 공간 복잡도는 얼마인지 계산할 줄 알아야 된다.
라이브 코딩은 문제가 주어지고 그에 맞는 코드를 작성하면 된다. 작년 네이버 공채 면접은 손 코딩으로 진행되었는데 면접에 따라 화면 공유를 해서 라이브 코딩을 한 경우도 있었다(네이버 웹툰 인턴 면접은 화면 공유로 진행했었다). 문제는 생각보다 단순하고 어렵지 않다. 내가 생각했을 땐 코딩 테스트를 합격하고 면접을 본 사람이라면 라이브 코딩에서 나오는 문제는 쉽다고 느낄 확률이 높다. 라이브 코딩에서 중요한 건 면접관들과의 소통이라고 생각한다. 라이브 코딩에 주어지는 문제는 대개 코딩 테스트에 쉽고 단순하기 때문에 허점이 있다. 절대 코딩 테스트에서 나오는 것처럼 처리해야 할 모든 예외처리를 알려주지 않는다. 이 때는 면접관들과 이런 경우 어떻게 처리하면 좋은지(예. 배열을 반환해야 하는 메서드를 작성해야 할 경우, 아무것도 없는 상태를 반환하고 싶을 때 null을 반환할지 []을 반환할지 [0]을 반환할지, 물론 문제 상황에 따라 어떤 것을 리턴해야 좋을지는 다를 것이다.) 대화하면서 작성하는 것이 중요한 것 같다. 단순히 코딩 능력을 보는 것이 아니라 주어진 문제에서 어떤 것을 보았고 어떻게 면접관과 소통하며 해결해 나갈 것인지를 확인하는 질문이라고 생각한다. 크게 걱정을 하지 않아도 되는 점이 코드를 보고 면접관분들이 질문을 해주시는 과정 속에(이런 경우는 어떻게 하면 될까요?, 지금 코드는 이런 것은 반영하지 않은 것 같은데요.) 코드를 작성하면 수월하게 해결할 수 있을 것이다. 보통 이런 경우 꼬리물기 질문이 계속된다. 코드를 작성하는 것뿐만 아니라 코드 한줄한줄마다 정당성을 부여하면서 말로 정리하는 연습을 하면 좋을 것 같다.

# 네트워크, 운영체제 및 기타 CS 지식

이 부분에 대해선 말해줄 것이 크게 없다. (깃허브만 가도 정리해주신 분들이 엄청 많다.) 오히려 말하고 싶은 것은 그런 것에 너무 의존하지 말라는 말을 드리고 싶다. 면접 전 스스로 고민할 시간이 무조건 필요한 것 같다. CS 질문 같은 경우 연관된 개념 이론들이 많아서 꼬리물기 질문이 계속될 수밖에 없다. 꼬리물기 질문을 받다 보면 당연히 막히는 구간이 생길 것이다. 그런 질문에 대답을 잘하는 것이 중요한 것 같다. 다양하게 생각해보는 것만으로도 좋은 준비가 될 수 있고 실제 개발에선 어떻게 해결하는지 찾아보고 가면 더 좋을 것 같다. (예를 들어 A와 B의 차이에 대해서 설명하다가 면접관이 그래서 무엇이 좋은 것 같나요? 혹은 본인이 개발한다면 어떤 것을 사용하실래요? 묻는 질문에 대답을 할 때 단지 "어떤 것"만 언급하는 것이 아니라 논리적이고 합당한 이유도 대답하면 좋다. 대답을 했을 땐 그런데 이런 단점도 있지 않을까요? 이런 것은 어떻게 해결하실래요? 와 같은 꼬리 질문이 시작된다.)

# CS 면접 준비 관련 깃허브

https://github.com/ksundong/backend-interview-question

GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질

백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문, 인터넷 참고한 질문(CC BY-NC) - GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문,

github.com

https://github.com/WeareSoft/tech-interview

GitHub - WeareSoft/tech-interview: 🙍 tech interview

:loudspeaker:🙍 tech interview. Contribute to WeareSoft/tech-interview development by creating an account on GitHub.

github.com

https://github.com/gyoogle/tech-interview-for-developer

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

# 2차 면접

사실 떨어질 것 같았던 1차 면접이 붙었다. 얼떨떨한 기분이 먼저 들었던 것 같다. 물론 공식적인 경쟁률은 알려진 적이 없지만, 그때 당시 합격자들끼리 추정하던 카더라 2차 면접 경쟁률은 2:1 정도였던 것 같다. (더 아래일 수도 더 위일 수도... 사실 네이버 인사팀 말고는 아무도 모르는 것 아닌가?) 2시간정도 진행되던 1차 면접과는 다르게 2차 면접은 1시간 동안 진행하는 면접이었기 때문에 끝나고 좀 더 마음이 편했다. 20년 11월 13일에 1차 면접 합격자 발표가 떴고 11월 20일에 2차 면접을 보았다.
2차 면접은 자기소개서와 포트폴리오를 바탕으로 한 기술 면접이었다.
면접을 준비하기 전 포트폴리오와 자기소개서를 꼭 정리를 해야한다. 그리고 포트폴리오에 깃허브가 있다면 깃허브 정리를 하면서 코드를 한 번 더 확인하고 코드 리팩토링을 할 수 있으면 진행하는 것을 추천한다. 면접관님들이 무조건 확인을 하기 때문에 깃허브나 블로그를 한 번씩 정리하는 것이 좋다. 블로그에 남긴 글은 한번 읽으면서 상기시키고 가는 것이 꼭 필요하다. 면접 도중에 블로그에 있는 글에 대해 물어보는 경우도 있었다. 내가 정확히 알고 있는 것이 맞는지, 까먹은 것은 아닌지, 잘못된 개념을 블로그나 깃에 올린 것은 아닌지 확인하면서 정리하는 시간이 무조건 필요하다고 생각된다. 깃허브, 블로그 등 안 하는 것보다 하는 것이 낫지만, 기록을 한다면 제대로 알고 기록을 하는 것이 중요하다고 생각했다.
포트폴리오
1. 어떤 기술을 사용했는지
- Spring, JPA, MyBatis, AWS EC2/RDS/S3, Golang, Javascript ES6, React, Vue, JWT, Redis, Mysql 등등
- 그 기술에 대한 전반적인 이론도 알아야 됨. 예) Spring이라면 IoC가 무엇인지, Redis를 사용한 이유는 무엇인지, JWT와 다른 인증 방식의 차이점은 무엇인지 등
2. 기술 - 어떤 문제가 발생했고 어떻게 해결했는지
- N+1 Query 문제 해결, 코드 리팩토링 과정, 배포 시 생긴 문제 등
3. 사람 - 어떤 문제가 발생했고 어떻게 해결했는지
- 팀내 불화, 책임감이 없는 팀원, 백엔드 혹은 프런트 팀원의 부재, 촉박한 마감기한 등
4. 비즈니스 로직을 어떻게 구현했는지
- 그 기능이나 서비스가 필요했는지
- 그래서 비즈니스 로직을 어떤 식으로 짰는지, 2번과 연결 지어 정리

2차 면접은 "이 프로젝트를 진행하면서 이만큼이나 고민했어요.", "저는 회사에서 이만큼 기여할 수 있어요." 혹은 "저는 이 정도까지 열정이 있는 사람이에요" 라는 것을 보여주는 것이라고 생각한다. 그리고 본인의 장점은 무엇인지, 단점은 무엇인지, 그 단점을 극복하기 위해 어떤 노력을 해왔는지 이런 것들을 개발, 본인 포트폴리오와 엮어 설명하면 더 좋을 것이라고 생각된다.



사실 면접 후기라는게 어쩌면 진부한 글(정말 진부했다...)이 될 수 있는데, 아무튼 적어보았다. 나는 비록 최종 면접에서 불합격을 했지만, 정말 좋은 경험이었다.(나의 장점.. 긍정충..) 주위에 친한 개발자 선배들도 없었고 혼자 취업 준비를 했기 때문에 이런 경험은 더 뜻깊었던 것 같다. 또, 피드백을 받는 것을 정말 좋아하는데 개발 경력이 최소 10년 이상인 사람이 내 코드를 읽고 내가 하는 말을 들으면서 조언을 해주고 같이 이야기한다는 것이 너무 감격스러웠고 그 시간이 정말 정말 소중했다. 현실적이지만 합격하든 불합격하든 면접도 나를 성장시키는 또 하나의 발판이라고 생각한다. 면접을 준비하는 기간에도, 면접을 하는 그 시간에도 정말 많은 것을 배울 수 있고 많은 것을 생각할 수 있는 시간을 가지게 된 것 같다.




donaricano-btn




728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

# 프로세스란?

실행중인 프로그램

 

# ps 명령어

- Process 와 관련 linux 명령어는 ps 입니다.

옵션 기능
-e 시스템 상의 모든 프로세스 정보를 출력
-f 상세한 정보를 출력 (full-format)

 

$ ps -ef
  UID   PID  PPID   C STIME   TTY           TIME CMD
    0     1     0   0  4:57PM ??         0:07.21 /sbin/launchd
    0    69     1   0  4:57PM ??         0:00.61 /usr/sbin/syslogd
옵션 기능
UID 프로세스를 실행한 사람 (User ID)
PID 프로세스를 구분하기 위해 만들어진 프로세스 ID (Process ID)
PPID 부모 프로세스 ID (Parent Process ID)
C 스케쥴링을 위한 CPU 사용량
STIME 프로세스 시작 시간
TTY 장치 번호, 해당 프로세스의 입출력 담당 터미널
TIME CPU 점유 시간
CMD command

 

# Kill 명령어

- 프로세스에 시그널을 보내는 명령어이다.

1. kill 시그널 리스트 확인

$ kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

2. 주요 시그널

시그널 영어 설명
1) SIGHUP Hang Up 세션이 종료될 때 시스템이 내리는 시그널
2) SIGINT Interrupt Ctrl + C, 종료 요청 시그널
9) SIGKILL Kill 강제 종료 시그널
11) SIGSEGV Segment Violation 메모리 침범이 일어날 때 시스템이 보내는 시그널
15) SIGTERM Terminate 기본 값, 종료 요청 시그널
20) SIGTSTP Temporary Stop Ctrl + Z 일시 중지 요청 시그널

3. 프로세스에 시그널 보내기

$ kill [option] PID

# 1234(PID) 프로세스 종료 
$ kill -9 1234
$ kill -SIGKILL 1234

 

 같이 보면 좋은 글 

https://frogand.tistory.com/187

 

[Graceful Shutdown] kill -9 쓰지말자!

kill -9로 종료하는 것은 좋지않다. jvm shutdown hook 또는 spring의 @PreDestroy의 실행을 보장하기 힘들다. kill -2(SIGINT) 혹은 kill -15(SIGTERM)을 쓰는 것이 좋다. kill 명령어와 Graceful Shutdown에 대..

frogand.tistory.com

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !