면접대비- 인성,기술 대비

박상훈·2023년 3월 21일
0

면접준비

목록 보기
1/5

면접대비 - 인성,기술 대비

차근차근 정리해보는 예상질문과 그에 대한 답변 정리 및 공부

1. 인성 면접

1) 우리 회사에 지원한 동기를 말씀해주세요.

  • 많은 선배 개발자님들과의 협업 환경이 잘 갖춰져있다고 생각했고, 끈기와 노력을 바탕으로 회사에서 필요로 하는 개발자가 되고 싶기에 지원하게 되었습니다.

2) 개발자가 되기로 한 이유에 대해 말씀해주실 수 있을까요?

  • 개발에 관심이 없던 대학교 신입생 시절 탁구를 치고싶었지만 공간적인 제약이 있어 치지 못하는 상황이였습니다. 그 상황에서 일찍부터 프로그래밍을 하던 동기 형이 간단하게 탁구 게임을 만들어서 재밌게 했던 기억이 있습니다. 이렇게 머릿속에는 있지만 표현하는 도구가 제한적인 상황에서 프로그래밍은 완벽한 도구가 되어 줄것이라고 생각했기에 개발자가 되고 싶습니다.

3) 개발자가 되지 않았다면 어떤 일을 하고 싶으신가요?

  • 남들과 소통하고 이야기하는 것을 좋아하고, 긍정적인 힘을 전파하는 능력이 있다고 생각하기에 상담사나 항공기 승무원쪽도 해보고 싶다는 생각을 했었습니다.

4) 즐겨보는 테크 유튜버나 뉴스레터가 있다면 ?

  • 노마드코더, 잇섭, 드림 코딩 이렇게 즐겨봅니다!

5) 최근에 본 기술 아티클에 대해 설명해주실 수 있으실까요?

  • 최근에 유튜브를 시청하지 않아 가장 기억에 남았던 부분을 설명드리자면 , Log4J 사건에 대해 노마드 코더가 다룬 내용을 재밌게 보았습니다. 지금 자바에서 log를 다룰 때 사용하는 @Slf4j등에 관련 되었고, 사건의 발단은 마인크래프트라는 게임에서 로그를 통해 게임에 관여할 수 있는 조작이 가능했던 부분이 인상깊었습니다. 클라이언트가 개발 서비스의 서버단에 명령을 log로 인해 조작할 수 있었던게 신기했습니다.

6) 좋아하는 개발자가 있다면 누구고 그 이유는?

  • 현재 스타트업에 몸 담고 계신 배달의 민족 개발자 출신 동욱님과, 김영한 님이 있습니다.
    동욱님은 비전공자, 무스펙 , 지방대 출신이라는 타이틀을 가지고 java라는 언어를 접하게 되셨고, 잠을 줄여가며 공부하신 노력과 끈기를 보여주신 대표적인 개발자라고 생각합니다. 팀들과의 의사소통을 중요하게 생각하시고, 기록하는 습관을 지금까지도 꾸준히 블로그에 포스팅하시는 것을 보면서 배우는게 정말 많았습니다.

7) 개발자로 은퇴하기 전까지 만들어보고 싶은 프로그램이 있다면?

  • 저는 새로운 서비스 프로그램은 정말 창조적이지 않아도 일상생활에 큰 도움을 줄 수 있고, 불편함을 해소시켜 줄 수 있다면 된다고 생각합니다. 따라서 학창시절부터 생각했던 두 가지 불편사항이 주차문제, 식당의 웨이팅입니다.
    실시간으로 업데이트 되어 어디 주차장에 자리가 얼마만큼 있는지와, 가고싶은 식당의 웨이팅이 얼마나 있는지, 또 자리가 있다면 얼마나 있는지 등을 한눈에 볼 수 있는 서비스를 개발해보고 싶습니다.

8) 개발자로서 본인의 강점과 근거가 되는 경험을 말씀해주실 수 있을까요?

  • 개발자로서 저의 강점은 책임감과 끈기라고 생각합니다. 그에 근거가 되는 경험은 많은 아르바이트 경험에서 좋은 리뷰와 후기를 받은 경험이 있을 정도로 제가 맡은 일에 책임을 다했고, 졸업 프로젝트로 간단한 어플리케이션을 만들 때에도 기본 언어인 코틀린을 모르는 상태로 무작정 뛰어들었지만, 기본 강의와 문서를 계속 보며 결국 미흡하지만 원하는 결과물을 만들어본 경험이 있습니다.

9) 개발자로서 본인의 약점은 무엇인가요

  • 안정적인 것을 추구하는 성격이라고 생각합니다. 변화하는 시대의 흐름에 편승하여 새롭게 바꿀 것은 바꾸고 적용시키는 것이 맞으나, 안정적인 시스템을 새로 바꾸는 것에 대한 살짝의 거부감이 생길 때가 있습니다.

10) 앞으로 3개월 6개월 1년 동안 어떤 것을 공부할 것인지 그 계획을 세운 이유는 무엇인가?

  • 새로운 기술 스택, 카프카, 레디스, 젠킨스등 실무에서 많이 사용되는 기술들을 사용해보고 싶고, 백엔드 개발자인 만큼 쿼리 최적화와 트랜잭션등에 대한 깊은 공부를 해보고 싶습니다.

11) 누군가에게 피드백을 주었던 경험이 있으신가요? 본인의 감정은 어떠했고 그것을 듣는 상대방의 반응은 어떠했나요?

  • 내일배움캠프에서 같은 조원 분들 중에서 자바라는 언어에 익숙하시지 않은 분들도 있다보니 기본 개념을 바탕으로 진행되는 CRUD를 피드백 해드린적이 있습니다. 거기서 저의 부족함도 많이 깨달았고 피드백을 해주면서도 배우는게 많다는 생각이 들었습니다. 현재까지 장난으로 그분들은 저에게 선생님이라고 부르기도 한답니다..하하

12) 누군가에게 피드백을 받았던 경험이 있나? 그 때 본인의 감정은 어떠했고 그것을 말하는 상대방의 반응은 어떠했나?

  • 마지막 프로젝트를 진행할 때 게임회사에서 실무를 경험하시고 넘어오신 동료분이 계셨는데, 여태까지는 동작을 위한 코딩을 진행했다면 그분은 필요없는 부분은 과감하게 빼시고 줄일 수 있는 부분은 줄이고 누가 봐도 코드를 읽을 수 있게 끔 깔끔한 정리를 요구하셨습니다. 그 때 구현을 위해 무작정 코딩하는 것이 아닌 협업의 바탕이 될 수 있도록 깔끔하게 코딩하는 것의 중요성을 배웠습니다. 말씀 해주신 동료분의 반응은 저와 마찬가지로 피드백을 하면서 자신도 많이 배웠다고 말씀해주셨습니다.

13) 가장 인상 깊게 읽었던 책과 그 이유

  • 에모토 마사루의 물은답을 알고있다 라는 책입니다. 물의 결정이 말과 환경적인 영향에 따라 모양이 달라지는 내용인데, 많은 과학적인 논란이 있지만 처음 이 책을 접했을 때 물 또한 말 한마디에 따라 영향을 받고 모양이 일그러지는 것을 보고 말의 중요성에 대해 고찰해볼 수 있었던 계기가 되었습니다.

14) 삶에서 중요하게 생각하는 가치가 있다면 무엇인가요?

  • 저는 사람을 중요하게 생각합니다. 그 누구도 적을 만들면 안된다고 생각하고 인적,교육적 자원을 바탕으로 성장한 대한민국에서 살고 있기 때문에 사람이라는 존재는 결국 서로 도움을 주고 받고 하며 살아가야 한다고 생각합니다.

15) 롤모델이 있다면 누구고 그 이유는?

  • 뻔한 답변일 수 있지만 저희 아버지입니다. 유년기 시절 사업의 실패로 저희 5인 가족은 뿔뿔히 흩어질 위기에 봉착했지만, 한 가정의 가장이라는 책임감을 바탕으로 지금의 평탄하고 화목한 가정이 되기까지 묵묵히 자신을 희생하며 살아오신 아버님이시기 때문에 제 평생의 롤모델 이십니다.

16) 즐겁고 행복했던 경험을 하나 이야기해주실 수 있나?

  • 항상 긍정적으로 살고 있다고 자부하기 때문에 사소한 것에 행복하고 즐거웠지만, 군대를 전역하기 전
    같이 근무하던 후임, 부사관, 장교분들이 전부 나오셔서 그동안 수고했고 너는 어딜가던 사랑받고 모든 잘 해낼 것이다 라고 말해주시며 배웅해주셨던 경험이 있습니다. 저라는 한 사람이 집단에서 인정받았고 또 사랑 받았다고 느꼈기 때문에 정말 행복했고 즐거웠습니다.

17) 힘들고 쉽지 않았지만 극복한 경험을 하나 이야기 해줄 수 있냐?

  • 또 군대이야기진 하지만 군대에 입대하기 과도한 음주와 폭식으로 살이 비약적으로 쪘고 젊은 나이에 고혈압이 있었습니다. 일병 때 부터 전역까지 꾸준한 식단관리와 운동으로 22kg정도를 감량하고 인생을 살면서 처음으로 아름다운 제 몸을 볼 수 있었고, 건강 또한 좋아졌습니다. 남들이 보기엔 별거 아니라고 생각할 수 있어도 처음으로 한계를 넘은 도전을 해보았고 많은 시행착오 끝에 원하는 결과를 얻을 수 있었습니다.

18) 이상적으로 생각하는 조직문화에 대해 말할 수 있냐?

  • 제가 생각하는 이상적인 조직문화는 서로를 존중하고 견제하지말고 서로 성장하는 문화라고 생각합니다.
    여지껏 긴 인생은 아니였지만 살아오면서 자신이 조금 더 잘한다고 상대를 무시하는 사람도 많이 보았고, 자신의 지식등과 같은 지적자산을 남들과 공유하지 않고 견제하는 문화를 보았습니다. 그런 사람들이 속해있는 조직은 발전할 수 없고 결국 도태될 것 이라고 생각합니다.

19) 회사에서 가장 기대하는 바가 있다면 무엇인가?

  • 이론이 아닌 실무에 처음으로 뛰어드는 만큼 실제 서비싱되는 프로그램에서 사용되는 기술 스택을 보고 배우고 싶습니다!

2. 기술면접

1) 시간 복잡도와 공간 복잡도에 대해서

  • 갈수록 많은 데이터를 처리해야하는 만큼 효율성에 대한 고민이 이뤄지고 있습니다.
    그중에 큰 지표로 사용되는 개념중에 하나인 시간 복잡도는 알고리즘에서 실행되는 연산의 횟수를 뜻합니다.
    여기서 연산은 산술,대입,비교,이동을 말합니다.
    보통 연산의 횟수는 고정되어 있는 것이 아닌 데이터의 갯수 n에 따라 가변적으로 변합니다.
    따라서 연산의 갯수를 입력한 데이터의 개수 n의 함수로 나타낸 것을 시간 복잡도 함수라고 칭합니다.
  • 빅오 표기법 : 연산의 횟수에 따라 앞에 상수가 붙는 2n+1, 4n+2등을 n에 정비례한다고 표기하는 것
  • 공간 복잡도 : 프로그램을 실행시킨 후 완료하는데 필요로 하는 자원 공간의 양.
    (코드의 저장공간, 단순 변수, 고정 크기 구조변수 등...)

2) 재밌게 공부한 알고리즘이 있다면?

-> 이부분은 아직 정확하게 답변을 못적겠으니 추후 다시 생각해볼 것!

3) 포트폴리오에서 시간복잡도를 낮춘 사례가 있다면?

  • 제가 알고 있는 시간 복잡도를 줄인다는 연산의 횟수를 줄이는 것인데, 제작 했던 포트폴리오에서는 구현 중심의 코딩을 이어갔기 때문에 향후 리펙토링을 진행하며 찾아볼 생각입니다.

4) 이분탐색이 무엇이고 시간복잡도는 어떻게되며 그 이유는 무엇인가요?

  • 이분탐색,이진탐색은 호율적인 알고리즘 중 하나이며, 기본적으로 정렬이 되어있어야합니다.
    정렬된 자료안에서 특정 값을 찾을 때 절반씩 나누어 값을 찾는다는 것이 핵심적인 아이디어입니다.
탐색 횟수범위
0N
1N/2 => N/2^1
2N/4 => N/2^2
3N/8 => N/2^3
4N/16 => N/2^4
TN/2 => N/2^T
  • 따라서 최악의 경우를 가정했을 때 N/2^T =1 -> T = log2 (N)이 됩니다.
    상수를 버리고 log N 의 시간복잡도를 가진다고 할 수 있다.
  • 이분탐색 알고리즘을 사용할 때 보통의 변수 Start , Mid( (Start + End) / 2 ) , End( 배열의 길이 -1 )
  • 찾고자 하는 값이 Array[Mid]의 값보다 큰 경우, Start값을 증가시킨다.

5) 시간복잡도가 높은 경우 취할 수 있는 전략 3가지?

-> 이부분은 아직 정확하게 답변을 못적겠으니 추후 다시 생각해볼 것!

6) 좋아하는 자료구조가 있다면?

  • 좋아한다고 표현하는 것은 이상할 수 있지만 LinkedList를 선택했습니다.
    자바라는 언어로 코드를 짤 때 List형의 구조를 정말 많이 사용하게 되는데, 그 때 중간요소를 삭제 삽입할 때 index를 수정해줘야하는 번거로움과 비효율성이 존재합니다. 그 때 LinkedList는 다음 수를 가르키는 부분의 원래 노드가 아닌 삽입 삭제가 이루어지고 난 후의 노드로 연결해주면 되기 때문입니다.

7) 스텍과 큐란?

  • 스텍과 큐는 자료구조의 종류인데, 스텍은 가장 나중에 대입한 데이터가 제일 먼저 나오는 LIFO의 구조이고, 큐는 스텍과는 달리 FIFO 선입선출 구조의 자료구조 입니다.
    스텍 자료구조를 공부할 때 교수님이 동전 넣는 기계랑 , 빨래더미를 예시로 들어주셔서 아직도 기억에 남습니다.

8) 배열 링크드 리스트를 설명?

  • 위에서 좋아하는 자료구조를 설명할 때 얘기했음!

9) 해시테이블의 원리, 충돌 해소 전략에 대해 설명할 수 있나?

  • 검색할 때 빠른 속도를 제공하는 Hash는 key,Value로 이루어져 있으며, key값으로 value값을 쉽고 빠르게 찾을 수 있습니다. 자료구조를 공부할 때 한번 궁금해서 HashMap코드를 따고 들어가본적이 있습니다.
    제가 봤을 때의 코드 원리는 기본 배열을 사용했습니다. 그러나 array[]같은 배열은 index로 value값을 탐색하기 때문에 통상 순차탐색이 원칙인데 특정 중복되지 않는 고유의 index로 value값을 뽑아 낼 수 있으므로 입력한 Key값을 hash_function을 이용해 변환하여 index로 사용하는 모습을 볼 수 있었습니다.
  • 충돌 해소전략 : 해시테이블의 충돌은 index로 변환하는 과정에서 다른 key value이나 같은 값으로 변환되어 발생하는 문제라고 알고있습니다. 해소 전략은 크게 체이닝 기법과 Open Address기법이 있습니다.
    아직 해소 전략에 기법에 대해 자세한 공부가 되지 않아 조금 더 공부해야할 것 같습니다.

10) 우선순위 큐의 시간복잡도와 그 이유

https://komas.tistory.com/48
https://code-lab1.tistory.com/8

  • 우선순위 큐는 일반 FIFO의 큐와는 다르게 우선순위가 높은 데이터가 나가는 자료구조이다.
  • 우선순위 큐는 힙으로 표현했을 때 가장 높은 효율을 가질 뿐 힙의 자료구조는 아니다!!
  • Heap
  • 배열로 표현한 힙
  • 왼쪽 자식 노드의 인덱스 = 부모 노드의 인덱스 2
    오른쪽 자식 노드의 인덱스 = 부모 노드의 인덱스
    2 + 1
    부모 노드의 인덱스 = 자식 노드의 인덱스 / 2
  • 우선순위 큐의 시간복잡도 : log N
  • 이유 : 배열일 때 최악의 경우 n길이의 배열은 n번 탐색해야한다. 그러나 트리 구조는 n/2..n/4..이런식으로 탐색하는 노드의 수가 이루어지기 때문에 log n의 시간 복잡도를 가진다.

11) 인덱스랑 무엇이고 일반적인 원리는 어떠한가?

  • 우선 저희는 이미 인덱스를 사용했습니다. Entity를 설정할 때 고유 id를 Column으로 갖게 구성을 하였는데 이 id가 바로 index입니다. 인덱스의 개념은 테이블상에서 검색 속도를 향상시켜주는 자료구조입니다.
    여기서 검색속도가 빨라지는 자료구조? -> Hash의 개념이 떠오릅니다. key Value형태의 자료구조로 검색에 특화된 자료구조입니다. 해당 key값을 고유 index로 설정하여 value값을 가지고올 수 있게 해줍니다.

12) 모든 요소에 인덱스를 걸지 않는 이유는 무엇인가?

  • 인덱스를 설정하는 경우 그 인덱스를 관리해야하므로 저장공간의 추가적인 사용이 요구됩니다. 또한 index가 설정된 컬럼에 Delete or Update의 상황이 발생한다면 index를 지우고 바꿔주는 것이 아닌 사용하지 않음의 별도 처리를 하게 됩니다. 만약 10만개의 데이터가 있는데 사용하지 않음 처리된 인덱스를 포함해서 인덱스가 100만건이 넘어간다면 오히려 검색속도의 저하를 야기할 수 있기 떄문입니다.

13) 복합 인덱스는 무엇인가?

https://dev-woo.tistory.com/27

  • 복합 인덱스는 두개 이상의 컬럼을 하나로 합쳐 인덱스를 만드는 것 입니다.
    복합 인덱스는 주로 where ~ And조건절에서 등장하는데 만약 컬럼1을 찾고 컬럼2에 접근하게 된다면 해당 컬럼을 각각 찾아줘야합니다. 하지만 복합 인덱스로 설정할 경우 컬럼1에 대한 컬럼2가 같이 쌍으로 존재하기 때문에 효율성이 증대됩니다.

14) 트랜잭션이란 무엇이고 ACID를 설명해라

  • 트랜잭션이란 Insert,Update,Delete, Select 와 같이 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위입니다.
    A : 원자성 -> 트랜잭션이 데이터베이스에 모두 반영되던가 아니면 전부 반영되지 않아햐 되는 것 입니다.
    C : 일관성 -> 트랜잭션이 수행되는 동안 데이터베이스가 변경되더라도 수행하는 트랜잭션은 그대로 실행되게 하는 것 입니다.
    I : 독립성 -> 두개이상의 트랜잭션이 수행되는 동안 어떤 다른 트랜잭션이 간섭할 수 없는 것 입니다.
    D : 지속성 -> 트랜잭션이 정상적으로 끝났을 경우 결과가 영구적으로 반영되야 하는 것 입니다.

15) 정규화란 무엇이고 대표적인 장점과 단점은 무엇인가?

  • 정규화란 데이터베이스의 중복성을 허용하지 않는 것으로써, 데이터 베이스의 무결성을 보장해주는 것입니다.
  • 그로써 얻는 장점은 데이터의 저장용량을 줄일 수 있고, 올바른 데이터를 얻을 수 있습니다.
    단점은 릴레이션을 나눔으로써 join연산이 많이 필요하게 되어 속도의 저하를 야기할 수 있다는 점 입니다.

16) Https의 원리

  • http에서 보안성을 높힌 방법으로 전송이나 수신되는 데이터를 암호화 하여 데이터의 갈취가 이뤄져도 보안적으로 문제가 없게 하는 것 입니다.
  • https는 쉽게 이야기하면 인증기관(CA)에서 인정한 인증서를 그 서버가 가지고 있는지를 검증하는 것이라고 생각합니다.

17 ) TCP 3 way HandShake란 무엇?

  • TCP(전송제어프로토콜,순서보장) 장치들 사이의 연결 성립을 위해 사용되는 것으로,
    클라이언트와 서버 간의 데이터 전송과 수신의 준비가 되었다는 것을 보장해주고, 또 그것을 알 수 있게 해줍니다.

18) TCP vs UDP

  • TCP는 연결형 프로토콜로써 데이터 단위인 패킷의 이동경로와 도착지가 명확합니다. 잘 보냈고 잘 받았고의 응답을 주고 받으며 신뢰성 있는 데이터의 교환을 이뤄줍니다.
    반면 UDP는 비연결형 프로토콜로 연속적인 데이터를 보낼 때의 속도적 이점을 가져갈 수 있습니다. 하지만 데이터가 잘 갔는지 보내는지를 확인하지 않고 연속적으로 전송하기 때문에 신뢰성있는 송수신을 보장할 수 없습니다.

19)CORS란?

  • 동일한 출처에서만 자원을 공유할 수 있게 하는 것 입니다. 저는 직접 구현한 것은 아니지만 프론트서버와 백엔드 서버의 출처가 다르기 때문에 프론트 서버의 출처 (프로토콜+호스트+포트번호)의 자원공유 접근을 허용해 주는 것으로 스프링 시큐리티딴에서 해결할 수 있습니다.
  • 하지만 img, script,link등은 Cross - origin을 지원합니다.
  • 개인적인 생각이지만 img테그에 src속성으로 다른 http 출처를 참고해도 접근할 수 있는 것과 원리가 같다고 생각합니다.

20) Base64인코딩이란?

  • Base64인코딩은 바이너리 형식의 이진 데이터를 Text로 변환하는 인코딩입니다.
  • 바이너리 데이터를 6bit씩 자른 뒤 base64표에서 해당 문자를 찾아 치환합니다.

21) 사용자의 패스워드를 전송하고 보관하는 방법을 설명할 수 있나?

  • 이부분은 부족하지만 프로젝트 경험에서 회원가입 진행시 패스워드 인코딩 저장하는 방법에서 사용했습니다. 사용자가 등록한 password를 Spring Security에서 제공하는 프레임워크인 BCryptPasswordEncoder를 사용하여 암호화하여 저장하고, 암호화된 비밀번호를 입력한 비밀번호와 맞는지 판할 수 있는 match Function을 사용한 경험이 있습니다.

22) 프로세스와 스레드를 비교해서 설명할 수 있나?

  • 프로세스와 스레드 모두 task의 단위 즉 작업의 단위라고 알고있습니다. 정의를 명확하게 말씀드기에는 부족하지만 구글 크롬 웹 페이지를 예시로 공부했습니다. 크롬은 멀티프로세싱 방식을 사용함으로써, 다른 프로세스가 다운이 되더라도 현재 프로세스에 영향을 미치지 않습니다. 따라서 실행 메모리를 많이 잡아 먹는 것으로 알고있습니다.

23) 동기와 비동기를 비교하여 설명할 수 있나?

  • 동기 방식은 클라이언트가 서버에게 데이터를 요청하고, 응답에 시간이 얼마나 걸리는 그 응답에 대한 결과를 기다려야합니다. 비동기는 서버에 데이터를 요청하고 결과를 기다리지 않고도 다른 작업을 진행 할 수 있습니다.

24) Call By Reference 무엇 어떻게 사용되나

  • 참조 방식은 크게 두가지가 있는 것으로 알고있습니다. Call By Value 값을 직접 참조하느냐, Call By Reference 주소값을 참조하느냐입니다.
    Call By Reference는 해당 변수가 있는 공간에 대한 주소를 가지고 참조 하기 때문에 직접 값을 복제하여 참조하는 것보다 빠릅니다. 가령 함수 호출시 매개변수로 들고가서 변화를 준 값은 원본 값에 영향을 주는 것이 Call By Reference이고, 값을 직접 복제하여 사용하기 때문에 원본 데이터에 영향을 주지 않는 것이 Call By Value 라고 알고있습니다.

25) 동시성과 병렬성을 비교하여 설명할 수 있냐?

  • 동시성은 여러가지 task를 동시에 실행되게 하는 것 처럼 보이는 것 입니다. 문맥 교환을 통해 하나의 작업을 실행하고 있지만 여러 작업을 수행하는 것 처럼 보이게 하는 것입니다.
  • 병렬성은 실제로 여러 작업이 동시에 실행되게 하는 것입니다.
profile
기록하는 습관

0개의 댓글