Joonas' Note

Joonas' Note

2019년 KT S/W 개발 직무 1차 면접 후기 본문

후기

2019년 KT S/W 개발 직무 1차 면접 후기

2019. 5. 10. 16:59 joonas

    총 5시간

    면접 OT, 질의응답 30분(8시~8시반)


    토론 면접 (2시간)

    망 중립성에 대한 찬반 토론 및 합의

    > 나는 동등하게 제공해야 한다는 찬성측(2:4로 소수쪽)이었다. 토론에 사용하라고 기사 등 근거 자료를 주는데, 읽다보니 '아 이거 통신사는 반대가 맞구나'라고 깨달았다. 근데 내 생각에 찬성이 맞다는 건 변함없었다.
    상대측 발언 잘 듣고, 정리해서 이 말이 맞느냐 되묻고 그럼 이게 문제인데 어떻게 생각하냐는 식으로 랠리하면서 천천히 진행했음.


    공통 필기 (2시간, 5유형)

    전산 기초, 알고리즘(손코딩), 프로그래밍 언어론
    참고 자료들이 주어지고 합리적인 선택을 하는 문제(선택 기준 등을 타당하게 잘 설명)
    사회 문제가 주어지고 그에 대한 새로운 상품/서비스 제안(고령화 사회)


    PT 면접 (25분+25분)

    25분 문제 풀이

    1. 프로세스와 스레드의 특징과 차이점
    2. 재귀적 함수의 정의와 문제점, 코딩
    3. 조세퍼스 문제 (코딩), 큐 풀이를 검증할 시간이 없어서 반복문으로 빠르게 작성. O(nk)
    4. 괄호문자열. 스택 문제
    5. N-queen인데 N=5임. dfs로 백트래킹

    들어가면 1분 소개 없이 바로 PT문제 풀이함
    1~5 코드 왜 그렇게 적었는 지 이유 붙여가면서 간단하게 말함. 스택은 return true 가 아니라 return stack.empty() 라고 말하다 생각나서 정정함.

    1의 꼬리 질문은 Thread pool을 아느냐?
    > 그 부분은 아직 모르겠다.

    2는 재귀가 좋다고 생각하느냐. 아니라면 왜 그렇냐
    > 수학적으로나 누군가에게 설명하기에는 좋다. 해결해야 할 문제 부분에만 집중하기에도 좋다. 하지만 재귀는 기본적으로 스택을 사용하고 있으니 지역 변수 등을 생각하면 재귀 깊이에 따른 메모리를 잘 관리해야한다. 그런 부분을 신경쓰면 재귀도 좋다고 생각하지만, 가능하다면 반복적인 형태로 작성하는 것이 좋다고 생각한다.

    5는 대각선 처리를 안 하신거 같은데 시간이 없어서 못했나요?
    > (실제로 시간이 빠듯했음. 코드 적느라) 네. 시간이 빠듯해서 전체적인 개요를 작성하고 해당 부분을 추가하려 했습니다. (출력 부분을 주석으로 대체하긴 함)

    가장 잘하는 언어가 뭐냐
    > C++과 Javascript이다.

    그럼 서버사이드에서만 주로 하고 프론트단은 안해봤겠네요
    > javascript 기반인 node.js를 사용해서 웹 사이트를 만든 적도 있다. javascript가 풀스택이 되기 때문에 프론트도 해봤다.

    왜 node.js로 했어요?
    > 이벤트 기반 동작이기 때문에 필요할때만 CPU 처리가 있어서 효율적일것이라 생각했다. 그리고 i/o 요청이 잦은 경우도 있었는데 이 부분에서도 적합하다 생각해서 그랬다.

    Django 프레임워크 특징이 뭐가 있는지?
    > 생각 안나서 대답 제대로 못함. MTV 모델이다 이런거 말하면 됐었나봄. 장고만의 특징은 아닌거같아서 말 안했는데..

    멀티 스레드를 사용해본 적 있나요? 왜?
    > 예전에 채팅 프로그램 만들때 써봤다. 콘솔창으로 입출력을 모두 하다보니까 입력을 기다리느라 출력이 안되고 있더라. 입력 부분과 출력 부분, 채팅 처리 부분을 나눠서 스레드로 처리했다.
    (사실 CUI 라이브러리로 해결되는 부분이긴 하다. 떠오르는 프로젝트가 없어서 이걸로 말함. node.js가 싱글 스레드 멀티 프로세스라 물어본건가 싶기도 하다)

    S/W 개발을 하면서 가장 필요하다고 느낀 부분이 뭐였냐
    > 가독성이랑 확장성이었다. 이미 진행된 중규모 프로젝트를 이어받아서 한 적이 있는데, 추가 기능을 개발하기가 힘들정도로 확장성이 없고 모놀리틱했다. 그렇다보니까 전체 구조를 알아야했는데 그 과정에서 주석도 없고 가독성이 떨어지는 게 너무 힘들더라. 그런 의미에서 가독성과 확장성 두 가지를 꼽았다.

    확장성을 높이기 위해 중요한 건 뭐라고 생각하느냐
    > 모듈화다. 기능별로 모듈화해서 쪼개는 것이 제일 효과적인 솔루션 같다.

    애자일 방법론 들어봤는지. 요즘 이걸로 다 넘어가고 있는데 어떤건지 설명 좀
    > 기존에는 폭포수 모델로 요구 사항 분석부터 개발, 테스트, 배포까지 했는 데 배포 이후에 다시 수정을 하려면 너무 힘들더라. 그런데 애자일 방법론은 그걸 해결한 것으로 알고 있다. 수정된 내용을 빠르게 적용할 수 있게 되었다 등등..

    자소서 질문 시작
    2번 문항에서 프로젝트 실패했다고 하는데, 원인, 그리고 이걸로 내가 다시는 안 그래야겠다같은거 뭐 깨달았는 지
    > 서로 프로젝트에 대한 이해가 부족해서 생긴 일이라 생각한다. 프로젝트를 완전히 이해하고 어떤 기능이 필요한 지와 불필요한 지를 구분해야했는데 그러지 못해서 프로젝트의 방향이 저쩌구....
    그래서 의사소통이 중요하다 생각했고 그 이후로는 최대한 잦은 만남을 통해 서로 의사소통하며 프로젝트를 완전히 파악하려고 한다.

    4번에서 말한 역량이랑 좀 다른데요. 여기서는 끊임없는 도전과 그걸 생각하는 자세라고..
    > 4번에서 첫째로 그것이고, 둘째로 협업을 위한 의사소통을 적었는 데 첫둘째를 제가 구분하지 못해서 그렇게 보신 것 같다. 제가 말한 도전은 개발자 개인에 대한 자세를 뜻한 것이었다. 작품을 만들다보면 많은 코드를 적고 그 과정에서 많은 버그를 만나는데, 버그를 해결하는 것들이 도전이라 생각했다. 그것을 끊임없이 해결해야 내가 원하는 작품이 나오기 때문에.... 그리고 버그를 해결하기 위해서는 그것에 대해 깊게 오래 생각하는 자세가 필요하다.

    본인이 생각하기에 부족하다고 생각하는 부분. 채워야겠다 싶은 부분은?
    > 문제에 대해 깊게 고민하는 자세였다. 시간 안에 끝내야하는 상황에서 버그를 해결하느라 마치지 못했기 때문. 그래서 개발 역량을 키워서 시간 안에 빠르게 끝낼 수 있는 식으로 해결하려고 한다.

    끝.

     

     

    1차 결과는 합격.

    Comments