윌라 최종면접

  • 일시: 2021. 11. 25
  • 장소: 강남역 인플루엔셜 사무실
  • 진행시간: 약 2시간
  • 난이도: 하

CTO 면접

자바

Q) 자바의 가비지 컬렉션에 대해서 설명해볼까요? 콜렉션이 어떻게 동작하나요? A) 수동으로 할수도 있고, 기본적으로는 자동으로 해주기도 하는데, 수동이라고 해도 정확히 된다고 보장할 수는 없습니다. 가비지 콜렉터는 고유한 정책을 갖고 동작하는데, 예를 들어, 참조되는 횟수가 3회 미만이다고 하면 콜렉트 되는 식입니다.

Q) 자바의 메모리 구조가 어떻게 되죠? A) 스태틱, 클래스, 스택, 힙이 있고, 스태틱은 메모리 로딩 단계에서 정적인 요소들을 저장하고, 클래스는 클래스 파일, 스택은 지역변수 등 스택프레임이 생성됩니다. 마지막으로 힙은 인스턴스가 할당됩니다.

Q) 프로세스와 스레드의 차이가 뭐죠? A) 프로세스는 방금 말씀드린 메모리 구조 자체가 별도로 생성되고, 스레드는 스태틱 영역 빼고 새로 생성됩니다.

Q) 확실한가요? 3개를 모두 생성하나요? A) 음… 스태틱은 확실히 아니고, 클래스도 공유되고, 스택이랑 힙은 새로 생성될 것 같습니다.

Q) 네, 스택만 새로 생성됩니다.

Q) 자바는 Call by reference 인가요?

Q) PreparedStatement와 Statement의 차이가 무엇이죠?

스프링

Q) 스프링의 장점이 무엇인가요? 왜 스프링을 그렇게 많이들 사용할까요? A) 자바라는 언어가 객체지향프로그래밍을 잘 하기 위해서 등장한 언어인데, 개발하면서 SOLID 원칙을 잘 지키기 어려운 상황이 있습니다. 그러한 부분에서 특히 DIP와 OCP를 잘 지키기 위해서 설정부분과 로직실행 부분을 구분해서 OCP를 지킬 수 있도록 도와줍니다.

Q) DI와 IoC는 무엇인가요?

Q) SOLID 원칙 중에 한 가지만 설명해주실래요?

Q) 스프링 MVC는 무엇인가요? A) JSP에는 모델이랑 로직이 한꺼번에 있는데, 이를 분리시키기 위해…

Q) 스프링 MVC의 단점은 무엇인가요?

Q) 실무경험이나 개인프로젝트 중에 가장 내세울만한 프로젝트가 무엇인가요? A) 아무래도 커머스 백오피스 개발하면서 테이블 설계도 했어서 가장 기억에 남습니다.

Q) 테이블 설계부터 개발까지 다 하신건가요? 테이블을 어떻게 설계하셨나요? A) 기존에 있던 ITEM, PARTNER 테이블 사이에 PRODUCT 테이블을 끼워넣는 설계였는데, OPTION_SET 테이블과 OPTION_ENTRY 테이블을 두고 리스트 형태로 옵션을 포합했습니다. 그런데 그 부분에서 꼭 그렇게 리스트로 포함하는 방법이 최선인가를 고민했습니다.

Q) 리스트 형태로 갖지 않는다면 어떻게 할 수 있나요? A) 별도의 테이블을 두면…

CS 기초

Q) 전공하신 과목중에 어떤 과목을 좋아했나요? A) 주로 하드웨어 쪽 컴퓨터 구조, 마이크로프로세서, 그리고 논리회로 같은 과목입니다.

Q) 그렇다면 인텔 CPU

Q) 데이터베이스에서 정규화에 대해서 설명해보실까요? A) 1, 2, 3, 4, BCNF 등 정규형이 있고, 1정규형은… 4정규형 정도가 적절하다고 이론적으로는 아는데, 1정규형도 겨우 지키느 수준으로 실무에서 개발했던 기억이 납니다.

Q) 네트워크에서 TCP와 UDP 차이점은 무엇인가요? A) TCP는 3-way handshaking을 하기 떄문에 신뢰성이 있고, UDP는 그냥 단순히 데이터를 보냅니다.

Q) 그러면 TCP에서 논리적으로 연결되었을 때, 어떻게 주고받나요? A) 잘 모르겠지만, 데이터를 보내고, 잘 받았다고 ACK를 보내는 것을 반복할 것 같습니다.

Q) 네, ACK를 그렇게 반복해서 보내면 비효율적일 것 같은데, 개선방법이 있나요? A) … 헤더에 체크섬이나 미리 알 수 있는 정보를… 아니면 애플리케이션 계층에서 무엇을 처리한다던가..

Q) ACK를 꼭 안하고 할 수 있을 수 있을텐데요. A)) 소켓을 사용해야하는 것인지.. 잘 모르겠습니다.

기타

Q) 개발팀의 리더가 개발팀원으로서 좋은 개발문화를 위해 어떤걸 할것같나요? A) 우선, 스터디, 페어프로그래밍, 세미나도 하고, 또 방금 생각난건데, 매달 알고리즘 대회같은걸 해서 1등한테 상금을 준다던가 하면 팀원들의 역량증진에 도움이 될 것 같습니다.


HR 면접

Q) 이직 사유가 어덯게 되나요?

Q) 우리가 리액트 네이티브로 개발을 하고있는데, 네이티브로 전환할 겁니다. 이에 대해 어려운 점이 있나요?

Q) 회사를 고를때 기대하는 부분, 또는 이렇게 하지 말았으면 하는것은 무엇인가요?

Q) 2020년에 졸업 하셨는데, 지금까지 어떤 일을 하셨나요?

Q) 연봉이 얼마였나요?


문제해결역량 면접

첫 번째 문제

Q) 좌표평면위에 직사각형이 있는데, 점 세개를 알고 있을 때 나머지 한 점의 좌표를 구하는 방법? A) 이 문제는 프로그래머스에서 항상 시작할 때 나오는 문제인데.. 저는 if문으로 분기해서 한 점과 같은 x값이 있는지 보고, 같은 좌표가 없는 나머지 하나의 x좌표를 x로 결정. y도 같은 방식으로 수행합니다.

Q) 아, 그러면 다른문제로 넘어갈게요. 제가 생각한 정답은 조금 다른 방식인데, 각 좌표에 대해서 카운트를 해요. 그러면 1만큼만 카운트 된 좌표값이 있겠죠, 그 값을 취하는 거에요.

두 번째 문제

Q) 두 번째 문제입니다. 집합에서 [1,2,3], [6,7], [13] 이 있습니다. 각 집합은 연속된 수들을 가집니다. 여기에 [4,5]를 추가하면 어떻게 되나요? [1,2,3,4,5], [6,7], [13] 세 개의 집합이죠. 그러면 [3,4,5]면 어떻게 되나요? A) [1,2,3] [3,4,5] [6,7] [13] ??

Q) 그건 아니고, [1,2,3,4,5], [6,7], [13] 이 됩니다. 그러면 [1,2,3,4,5,6,7,8,9,10,11,12,13] 을 넣으면 어떻게 되나요? A) [1,2,3,4,5,6,7,8,9,10,11,12,13] 으로 한 개의 집합이 됩니다.

Q) 네, 그렇죠. 그러면 일반화 시켜서 어떻게 로직을 짤 수 있나요? A) 음.. 저는 visited 배열을 생성하는 방법을 생각해보았습니다. 길이가 N이라는 걸 알 수 있다면 N크기의 boolean 배열을 생성합니다. 그리고 각 원소가 있다면 true로 바꿉니다. 새로운 요소가 들어오면 true이면 그대로 두고, false라면 true로 바꿉니다. 그리고 마지막에 true인 부분만 카운트하면 됩니다.

Q) 어떤 문제점이 있을까요? 우선, N을 알 수 없을 거에요. 그리고 이게 9897937242341125527274 이렇게 엄청나게 큰 수라면? int는 65536인가요? 네, 16비트에서는 그렇죠. 아무튼 이러한 경우에 빈공간에 대한 낭비도 상당히 크겠죠. Q) 기대하는 답변은 이겁니다. 우선 [1,2,3,6,7,13] 그냥 배열로 만들어요. 그리고 새로운 요소인 [4,5]가 들어오면 그냥 크기를 비교하면서 해당 위치에 삽입하는 거에요. 그러면 [1,2,3,4,5,6,7,13]이 되겠죠. 마지막에는 [1,2,3,4,5,6,7]까지는 연속적이므로 카운트가 되고, [13]은 연속적이지 않으므로 추가로 카운트되어서 2가 나오겠죠. 아무튼 그런 방식도 훌륭하다고 생각합니다.

세 번째 문제

Q) 마지막 문제는 rand7이라는 함수가 있고, 이는 1 ~ 7 중에 동일한 확률로 랜덤하게 수를 선택하는 함수에요. 그렇다면 rand5는 rand7을 사용해서 어떻게 표현할 수 있나요? A) 5와 7의 최소공배수인 35만큼 rand7을 더한다음 나머지 연산으로 값을 가져옵니다. rand5 = (rand7 * 5) % 5 입니다.

Q) 그렇게 하면 문제가 생기지 않을까요? 나오는 비율이 과연 균등할까요? A) 아, rand7을 기반으로 5번 더하면 1, 2의 등장 비율이 훨씬 높을것입니다.

Q) 그러면 어떻게 다른 방법으로 해결할 수 있나요? A) 잘 모르겠습니다.