제주 탈출 일지

기술 면접 준비 - 네이버 웍스 동계 인턴 본문

취준

기술 면접 준비 - 네이버 웍스 동계 인턴

귀건 2020. 11. 2. 18:42
728x90
반응형

다시 공부하면서 많은 것을 느꼈지만, 인터넷에 나온 기술면접관련 내용들이 너무나 많았기에 이 내용부터 속성으로 정리하는 것이 좋을 것 같다. 여기에 있는 문제들은 Youtube 혹은 다른 블로그에 포스팅된 자료들을 참고하면서 구성해 보았다.

자기소개

안녕하십니까, 2020 웍스 모바일 동계 인턴 지원자 이호성입니다. 저는 꾸준함을 통해 결과를 이뤄낼 수 있는 사람입니다. 저는 단기 계획을 자주 설정하여 현재 상황을 파악하고, 과거를 돌아보며, 앞으로의 방향을 결정하였습니다. 장기 계획 속에서 많은 단기 계획에 집중하면서 마지막까지 유종의 미를 거둘 수 있었습니다.

 

저는 이것을 캡스톤 디자인 프로젝트에도 적용할 수 있었습니다. 이 프로젝트는 하차 미태그 문제를 해결하기 위한 새로운 계수 방식 연구를 주제로 선정했습니다. 이 프로젝트를 해결하기 위한 아이디어를 구현하기 위해서 일주일 단위로 진행 상황, 이전까지 진행한 내용을 정리하고, 피드백을 진행했습니다. 이를 통해 빠르게 프로젝트 방향을 수정하고 개선해나갔고, 금상이라는 결과를 이끌어냈습니다. 

 

저는 프로젝트를 성공한 이유가 계획을 통해 상황을 파악하고 꾸준하게 개선했기 때문이라고 생각합니다. 

 

저의 이러한 꾸준함을 웍스모바일에서의 업무에도 적용하여 목적을 달성할 것이고, 최종적으로는 웍스모바일의 비지니스 커뮤니케이션 확장에 기여하고 싶습니다.

 

인턴 지원을 위해 어떤 노력을 해오셨나요?

인턴지원을 위해 저는 다음과 같은 노력을 해왔습니다.

먼저, 배운 내용들을 제 블로그에 교육용 자료를 만드는 것처럼 하나씩 포스팅하고 있습니다. 누군가를 가르치기 위해서는 제가 그 내용에 대해서 자세하게 알아야 가르치는 것이 가능합니다. 설명을 위해 새로운 내용을 찾아보고, 또 정리하고 있습니다.

또한 제주 평생교육장학진흥원에서 주관하는 “SKT와 함께하는 AI 인재 양성 프로그램에 참여하고 있습니다. 이 프로그램을 참여하게 된 이유는 AI 관련 교육도 있지만, 회사 실무자들과 이야기하고 기획부터 개발까지 진행해보는 프로세스를 경험할 수 있다는 것이 매력적이라고 느꼈기 때문입니다. 현재 NUGU 서비스를 이용하여 AI스피커에서 사용할 수 있는 독감 예방 접종 알림 서비스를 개발하고 있습니다. 이를 통해서 회사에서 진행하는 하나의 프로세스에 따라갈 수 있는 역량을 성장하기 위한 노력을 하였습니다,

사용 가능한 언어는 어떤 것들이 있나요?

자주 사용하는 언어는 C++와 R입니다. 


OOP(객체 지향 프로그래밍)이란?

객체 지향 프로그래밍은 데이터를 강조합니다. 데이터를 강조한다는 것은 해결해야 할 문제에 특성에 맞게 데이터형 자체를 설계한다는 것을 의미합니다. 예를 들어 C++에서는 클래스가 이와 같은 목적으로 설계되는 데이터 구조입니다. 

절차적 프로그래밍과 객체 지향 프로그래밍의 차이는?

절차적 프로그래밍은 컴퓨터가 수행해야 할 동작들을 명확히 구분하고, 그 구분된 동작들을 프로그래밍 언어로 구현하는 것입니다.  원하는 결과를 얻기 위해 컴퓨터가 따라야 할 절차를 규정한 것이 절차적 프로그래밍입니다. 이러한 절차들은 알고리즘을 중시한다고 할 수 있고, 데이터를 강조하는 객체 지향 프로그래밍과는 추구하는 방향이 다르다고 할 수 있습니다.

(규모가 큰 프로그래밍은 절차적으로 구현하기 어려워, 그에 대한 대안으로 객체 지향 프로그래밍을 활용한다.)

Class와 Object의 차이점은?

Class는 데이터와 데이터의 동작 모두를 포함하는 데이터 형입니다. Object(객체)는 이러한 데이터 형에 따라 구현된(메모리에 할당된) 형태라고 할 수 있습니다. 예를 들어, 사각형 Class라고 했을 때, 해당 클래스는 가로와 세로라는 변수를 가지고 대각선의 길이를 구한다든가 하는 메소드 혹은 멤버 함수를 가질 수 있습니다. 그를 통해 가로는 4 세로는 4 라는 고유한 상태를 가지고 있는 객체를 생성할 수 있을 것입니다.

Override와 Overload의 차이점은?

Override의 경우 상속에 있어서 멤버 함수를 재정의하는 것을 말한다. 상속받은 클래스에서의 멤버 함수가 다른 작업을 하는 것이 필요할 때 Overriding한다.

Overload는 동일한 함수명이지만 다른 인자를 가지는 경우를 사용할 수 있게 지원합니다.

포인터에 대해서 설명할 수 있나요?

포인터는 주소를 가리킵니다. 정확히는 메모리의 주소를 가리키며, 변수의 주소를 받아서 해당 변수를 가리키는데 많이 사용됩니다.

 

문자형은 char 타입과 string 타입으로 나눠져 있습니다. 왜일까요?

char를 사용할 때 복잡한 과정을 거치게 되었고, 이러한 작업을 줄이고 편하게 하기 위해서 string 타입을 만들게 되었습니다. (string끼리 더한다든가.. == 으로 비교를 한다든가..)

스마트 포인터에 대해서 설명할 수 있나요?

C++에서 메모리 누수를 방지하기 위해 스마트 포인터를 사용합니다. 스마트 포인터(smart pointer)란 포인터처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해 줍니다.

프레임워크와 라이브러리의 차이에 대해 설명할 수 있나요?

프레임워크는 Application 개발 시 필수적인 코드, 알고리즘, 데이터베이스 연동 등과 같은 기능들을 위해 어느정도 뼈대(구조)를 제공해주는 것입니다. 이 뼈대 위에서 프로그래머가 코드를 작성하여 application을 완성해야 합니다.

" 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합"

 

라이브러리는 특정 기능에 대한 도구 혹은 함수를 모은 집합입니다. " 단순 활용이 가능한 도구들의 집합"

 

Framework와 Library의 차이는 Flow(흐름)에 대한 제어 권한이 어디에 있느냐의 차이입니다. 프레임워크에서 실행의 흐름을 프레임워크가 쥐고 있기 떄문에 개발 코드를 그 사이에 끼워넣는다고 할 수 있습니다.


퀵 정렬/버블 정렬에 대해서 설명할 수 있나요?

퀵 정렬은 정렬에 사용할 기준원소를 선택한 후. 기준원소보다 큰 원소와 작은 원소로 나누고, 자신이 있어야 할 자리에 들어가게 됩니다. 작은 원소와 큰 원소들에 대해서 이 작업을 반복하여 정렬을 진행합니다. 퀵 정렬은 큰 문제를 작은 문제로 해결하는 부분 문제 형태로 정렬을 진행하며, 최악의 경우 복잡도가 O(n^2)입니다. 하지만 평균적으로 최악의 경우는 잘 발생하지 않으므로 세타(nlogn)으로 좋은 정렬으로 알려져 있습니다.버블 정렬은 처음부터 원소들을 2개씩 비교하면서 마지막 원소까지 비교를 진행합니다. 원소가 0...n까지 라고 했을 때,  n까지 모두 비교를 마치게 되면 가장 큰 원소(혹은 작은 원소)가 마지막 인덱스에 있게 됩니다. 그 다음 비교는 0...n-1까지 하면서 정렬된 영역을 하나씩 늘려가는 정렬입니다. 최악의 경우 O(n^2)입니다.  거의 정렬이 된 배열의 경우 무의미한 순환을 반복할 수도 있는데, 특수한 처리를 통해 이 무의미한 순환을 줄임으로서 세타(n) 시간으로 줄일 수도 있다.

스택, 큐, 트리, 힙에 대해서 설명할 수 있나요?

스택은 후입선출의 구조를 가지고 있는 자료구조 입니다. 일반적인 스택의 ADT는 push. pop, top으로 정의됩니다.

큐는 스택과는 반대로 선입선출의 구조를 가지고 있는 자료구조입니다. Enqueue, Dequeue를 통해 큐에 데이터를 넣고 빼낼 수 있습니다.

 

트리는 계층적 관계를 표한하는 자료구조입니다. 나무처럼 가지를 뻗어나가면서, 노드와 간선간의 관계를 표현할 수 있습니다. 

 

힙은 '이진 트리'이면서 '완전 이진 트리'입니다. 모든 노드의 저장된 값은 자식 노드에 저장된 값보다 우선순위가 다 크거나 같아야 합니다. 즉, 루트 노드가 가장 큰 우선순위를 가지고 있습니다.

최소 신장 트리가 무엇인가요?

그래프네 모든 정점이 간선에 의해 연결되어 있고, 사이클을 형성하지 않는 그래프를 말합니다.

크루스칼, 프림 알고리즘을 설명하고 차이점에 대해서 말해주세요.

크루스칼, 프림 알고리즘은 최소신장트리를 찾는 알고리즘들입니다. 크루스칼 알고리즘은 전체 가중치에서 최소값을 택하거나, 혹은 최댓값을 제외하면서 최소신장트리를 찾습니다. 프림 알고리즘은 하나의 정점을 트리에 포함시키면서, 가중치가 작은 간선들을 트리에 포함해나갑니다.

Hashing이 무엇인지 설명할 수 있나요?

해시 테이블은 저장된 원소의 수에 관계없이 상수 시간의 검색을 추구하는 테이블입니다.  해시 함수를 통해 입력 원소가 해시 테이블 전체에 고루 저장할 수 있도록 합니다.


데이터베이스의 키에 대해서 설명해주세요.

릴레이션에서 키는 각 튜플을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트의 모임이다. 키의 종류에는 수퍼키, 후보키, 기본키, 대체키, 외래키가 있다.

수퍼키는 유일성을 보장하는 애트리뷰트의 집합입니다.

후보키는 유일성과 최소의 애트리뷰트 갯수를 만족하는 키입니다.

기본키는 후보키에서 가장 자주 사용되는 키로 정의합니다.

대체키는 후보키에서 기본키를 제외한 나머지 모든 키를 의미합니다.

외래키는 다른 릴레이션에서의 기본키를 참조하여 그 키의 값을 사용하는 키를 말합니다.

데이터베이스에서 데이터 무결성에 대해서 설명해주세요.

데이터 무결성은 데이터의 정확성 혹은 유효성이라고 정의하고 있습니다. 데이터 무결성을 위배하지 않기위해 무결성 제약조건을 검사합니다. 무결성 제약조건에는 도메인 제약조건, 키  제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건이 있습니다.

도메인 제약조건은 각 애트리뷰트의 값이 반드시 원자값이어야 합니다.

키 제약조건의 핵심은 키 애트리뷰트는 절대 중복값이 있어서는 안됩니다.

엔티티 무결성 제약조건은 기본키에 널값이 존재해서는 안된다는 것을 의미합니다.

참조 무결성 제약조건은 다른 릴레이션의 기본키에 존재하지 않는 값을 가져서는 안되고, 외래키가 기본키가 아닌 경우에 한해서 널값을 가질 수있다는 것을 의미합니다.

데이터베이스에서 인덱스에 대해서 설명할 수 있나요?

데이터베이스에서 데이터가 쌓이면 쌓일 수록 데이터 탐색에 부담이 커지게 됩니다. 천만개의 데이터가 데이터베이스에 쌓여있다고 가정할 때, 특정 '사과' 데이터를 찾기 위해서는 선형적으로 모든 데이터를 탐색해야하는데, 천만개의 선형탐색은 매우 비효율적입니다. 이를 해결하기 위해 인덱스 테이블을 만들고 검색 시 인덱스 테이블의 key-value을 이용하여 기존 테이블에서의 결과값을 반환해오게 됩니다.

데이터베이스의 정규화에 대해 설명해주세요.

데이터베이스를 잘못 설계한다면, 데이터의 일관성이나 무결성이 깨지는 현상이 발생할 수 있습니다. 이와 같은 현상을 갱신 이상이라고 하고, 이 갱신 이상(삽입 이상, 수정 이상, 삭제 이상)을 해결하기 위한 작업을 정규화라고 합니다.

정규화는 제 1정규화, 제 2정규화, 제 3정규화, BCNF, 제 5정규화 등이 존재하며 일반적으로 BCNF까지 정규화 작업이 된다면 실제적인 이상현상이 없어지므로 그 이상의 정규화는 잘 이루어지지 않습니다.

제 1정규화는 모든 애트리뷰트의 값이 다치가 아닌 단일 원자값으로 이루어져야 합니다.

제 2정규화는 완전 함수적 종속성을 가져야 합니다. 기본키가 한가지가 아닌 2가지 이상의 애트리뷰트의 집합으로 구성되었을 때, 기본키의 부분집합에 종속되지 않는 형태를 완전 함수적 종속성이라고 합니다.

제 3정규화는 이행적 함수 종속성 관계를 가지지 않아야 합니다. 이행적 함수 종속성이란 A -> B -> C가 성립할 때 입니다.  이 경우 B와 C를 다른 릴레이션으로 분해하면 됩니다.

BCNF는 제 3정규형의 조건을 만족하면서, 모든 결정자가 후보키인 경우를 말합니다. 이 경우도 후보키가 아닌 결정자를 다른 릴레이션으로 분해하면 됩니다.


http 요청 흐름에 대해서 설명해주세요.

브라우저의 도메인을 파싱하여 http 요청 메세지를 만듭니다. 브라우저는 메세지를 네트워크에 송출하지 못하기 떄문에, OS에 전송할 메세지를 의뢰하게 됩니다. 이 때 메세지를 받을 상대를 지정하기 위해 DNS에 요청하여 해당 도메인에 대한 IP 주소를 얻습니다. 

 

TCP/IP 계층의 프로토콜 스택이 메시지를 패킷 내부에 저장한 후 주소와 같은 제어정보를 덧붙입니다. 이 패킷을 LAN 어댑터에 넘기게 되고, LAN 어댑터는 전기신호로 변환하여 LAN 케이블에 송출합니다.

 

LAN에서 송출한 패킷을 스위칭 허브를 경유하여 라우터에 들어가게 됩니다. 라우터는 패킷을 ISP에 전달하고 이후 인터넷에 들어가게 됩니다. 패킷은 이후 액세스 회선에 의해 통신사용 라우터까지 운반됩니다. 고속 라우터들 사이로 데이터가 빠르게 흘러가게 됩니다.

 

패킷이 인터넷의 핵심부를 통과하여 웹 서버측의 LAN에 도착한다. 방화벽이 도착한 패킷을 검사한 후, 웹 서버까지 가야하는 패킷인지 아닌지를 캐시 서버를 통해 조사한다. 액세스한 페이지의 데이터가 캐시서버에 있으면 웹 서버에 의뢰하지 않고 바로 값을 읽을 수 있다. 페이지의 데이터 중 다시 이용할 수 있는 것은 캐시 서버에 저장된다.

 

패킷이 웹서버에 도착하면 프로토콜 스택에 의해 패킷을 추출하여 메시지를 복원하고 웹서버 애플리케이션에 넘기게 됩니다. 웹서버 애플리케이션에서 요청에 대한 응답 메시지를 넣어 클라이언트로 다시 전송합니다.

네트워크 OSI 7 계층에 대해서 설명해주세요.

네트워크 OSI 7계층은 국제 표준화 기구에서 네트워크 통신을 7단계로 구분하여 규정한 것을 말합니다. 물리 계층, 데이터링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 나누어지며, 이 계층들을 통해 통신을 단계별로 파악할 수 있게 됩니다.

- 물리 계층에 대해서 설명해주세요.

이 계층은 전기적, 물리적인 특성을 이용하여 통신케이블로 데이터를 전송하게 됩니다.  이 계층에서 사용되는 단위는 비트이며 데이터를 전기적인 신호로 바꾸어 주고받는 기능을 하게 됩니다. 주요 장치로 통신 케이블, 리피터, 허브를 사용합니다.

- 데이터 링크 계층에 대해 설명해주세요

데이터링크 계층은 데이터를 전송 방식에 맞추어 단위화하여 전송하게 됩니다. 이 계층에서는 프레이밍,  흐름제어,  오류제어의 기능을 담당합니다.  노드(송신자, 수신자, 중간 라우터 등)에서 다음 노드로 데이터를 보낼 때, MAC주소를 통해 목적지를 찾아가게 됩니다.(프레임)

- 네트워크 계층에 대해 설명해주세요.

네트워크 계층은 논리주소를 담당하고 패킷의 이동경로를 결정하는 계층입니다. Routing 알고리즘을 활용해 최적 경로를 선택하여 목적지로 패킷을 전송합니다.(패킷)

- 전송 계층에 대해 설명해주세요.

정보를 분할하고 다시 합치는 과정을 담당하는 계층입니다. TCP혹은 UDP 방식으로 전송방식을 결정하여 전송하게 됩니다. TCP는 연결을 지향하며 신뢰성이 어느정도 보장되는 프로토콜이고, UDP는 비연결로 데이터를 빠르게 보낼 수 있지만 데이터의 손실이 일어날 수 있습니다.(세그먼트)

TCP/IP 4계층에 대해 설명해주세요.

인터넷 통신을 위한 가장 기반이 되는 프로토콜로 대다수 프로그램은 TCP/IP로 통신하고 있습니다.  네트워크 액세스 계층, 인터넷 계층, 전송 계층, 응용 계층 4가지로 구분되며 네트워크 액세스 계층은 OSI 7계층에서 1,2 계층, 인터넷은 3계층, 전송 계층은 4계층, 응용 계층은 5,6,7 계층으로 대응되게 됩니다.


스택과 힙의 차이는? - 동적 정적

스택에는 정적인 형태의 값들이 스택 프레임 형태로 담겨져 있습니다. 힙은 동적인 영역으로 일반적으로 프로그램 실행 중에 영역을 할당받아야 하는 경우에 사용됩니다.(이경우를 동적할당이라고 합니다.)

매개변수 전달 방법에 대해서 설명해주세요.

매개변수 전달 방법은 call by value, call by reference, call by result, call by value-result, call by name이 있습니다. 

call by value는 실 매개변수의 값을 형식 매개변수에 전달합니다.

call by reference는 실 매개변수의 주소를 매개변수에 전달하는 형태를 말합니다.

call by result는 callee가 형식 매개변수의 결과를 실 매개변수에 복사한 후 반환하는 형태를 말합니다.

call by value-result는 call by value와 call by result를 동시에 적용하는 형태를 말합니다.

call by name은 형식 매개변수의 이름이 사용될 때마다 그에 대응되는 실 매개변수가 사용된 것으로 간주하는 형태를 말합니다. 실제로는 거의 사용되지 않습니다.

바인딩이 무엇인가요?

바인딩은 이름에 어떤 속성을 연결하는 과정입니다. 예를 들어, int x = 100이라고 했을 때, 이름 x에 변수와 정수라는 속성이 바인딩되게 됩니다.


페이지 교체 정책

페이지 교체는 최적, LRU, FIFO, CLOCK 정책이 있습니다. 

프로세스와 쓰레드의 차이

프로세스와 스레드의 가장 큰 차이는 자원의 공유 여부입니다. 프로세스는 다른 프로세스와 자원을 공유하지 않지만, 스레드는 그렇지 않습니다.


후기(2020.11.07 업데이트)

면접은 자기소개 - 프로젝트 관한 이야기 - 기타 서류상 궁금한 내용 - 기본적인 개념에 대한 질문 - 코딩테스트 순으로 진행되었습니다. 면접관들이 질문하신 내용들이 어렵지는 않았으나, 면접을 봤던 경험 자체가 처음이었기에 횡설수설한 경향이 없잖아 있었습니다;;; ㅋㅋ.

기본적인 개념은 해싱에 대한 질문이 나왔고.(사실 이런 세부적인 내용 자체가 중요할까 싶지만,,, 그래도 저는 넓은 범위의 내용들을 준비해갔기에 이런 사소한 정보라도 도움이 될까 싶어), 해싱을 솔직히 구현하거나 해보지도 않아서 그냥 "해싱은 검색을 위한 자료구조다!" 이 내용만 머릿속에 맴돌았습니다.ㅋㅋ 뭐 그후 해싱에 대한 세부적인 내용 그리고 충돌했을 때의 다양한 기법, 그 기법을 구현하기 위한 자료구조는 어떤 것이 좋을 지 등등.. 질문이 점점 세부적이고 깊어지게 됩니다. 이떄 면접관님들이 혹시 생각나지 않더라도 이야기할 수 있도록 많은 유도를 해주십니다!!! 

코딩 테스트는 원래 제가 짜는 코드를 면접관님들이 보시면서, 답이 나오는 것보다는 문제를 어떻게 풀것인가?에 대해 초점을 맞춰서 진행합니다. 답은 중요하지 않아요! 그냥 제가 어떤 자료구조를 사용하여 구현했고, 또 왜 이런 방식으로 풀었는지에 대한 논리적인 형태로 이야기할 수 있는지 많이 물어보십니다. 만약 코드로 구현하지 못했다고 하더라도, 이 문제는 어떤 방향으로 풀어야 하며 ~ 형태로 이야기 한 후에, 세부적인 형태로 정답이 어떻게 도출되게 되는지 이야기하면 코딩테스트는 큰 문제가 없을 것으로 생각이 됩니당.

자신감있고 조급하지 않게 자신의 방향으로 면접을 이끌어 나가면서, 정리한 내용을 다 보여주는 것이 중요한 면접이라고 생각합니다. 

 

후기2 (2020.11.23 업데이트)

오늘 결과가 발표 되었는데 " 불 합 격 "

 

하지만 좋은 경험이 되었고, 앞으로 면접 때 더 열심히 준비할 수 있는 계기가 되지 않았나 싶습니다.

^^ 웃지만 울고 있는 취준생.. ㅠ.ㅠ

 

맥주 한 캔 마시고, 내일부턴 더 열심히 해야겠다..

728x90
반응형

'취준' 카테고리의 다른 글

취업 성공!  (1) 2021.12.02
SSAFY 6기 지원  (0) 2021.05.20
정보처리기사 시험 지원,,,  (0) 2021.04.13
Comments