본인의 생각을 기술한 내용이므로 답이 정확하지 않음
모의 면접
1. 자료구조를 알아야 하는 이유
- 알고리즘을 잘 만들기 위해 자료구조를 아는 것이 좋다. 알고리즘을 사용하여 컴퓨터 사고를 통한 문제 해결을 효율적으로 할 수 있는데 어떤 자료구조를 사용하느냐에 따라 성능차이가 나기 때문이다.
2. 자료구조에 대해서 간단하게 정의
- 효율적인 접근, 수정을 가능하게 하는 자료의 조직, 관리, 저장을 의미
논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것
3. OOP란?
- 객체 지향 프로그래밍을 의미하며 데이터를 추상화하여 속성, 행위를 가진 객체를 만들고 객체들 간 상호 작용을 통해 로직을 구성하는 프로그래밍 방법, 특성으로는 크게 추상화, 캡슐화, 상속, 다형성이 있다.
4. 클라우드 서비스 모델에 대해 무엇이 있으며, 각각 설명
- 인터넷을 통한 컴퓨팅 자원, 데이터 저장, 소프트웨어 플랫폼 및 기타 IT관련 서비스를 원격으로 제공하는 것, IaaS, PaaS, SaaS
- IaaS: 서비스로 제공되는 Infra Structure, 개발사에 제공되는 물리적 자원을 가상화
- PaaS: 서비스로 제공되는 플랫폼, 개발사에 제공되는 플랫폼을 가상화
- SaaS: 서비스로 제공되는 소프트웨어, 고객에게 제공되는 소프트웨어를 가상화
5. 네트워크 OSI, TCP/IP 모델을 비교
-
OSI: 7계층의 계층 구조, 이론적인 참조 모델로 개발, 실제 통신에는 사용되지 않지만, 네트워크 기술 및 프로토콜의 표준화를 위해 사용
-> 각 계층의 기능과 역할에 대한 이론적인 설명을 제공
-
TCP/IP: 4계층의 계층 구조(상위3,4,5,하위2), 인터넷의 표준 프로토콜로 개발, 실질적인 통신을 위해 사용
-> 인터넷에서 사용되는 실질적인 프로토콜을 구성
6. TCP, UDP의 차이
-
TCP: 연결 지향적 프로토콜(클라이언트, 서버가 연결된 상태에서 데이터를 주고 받는 프로토콜), 신뢰성을 보장, 안정적이고 순서대로 에러없이 교환이 가능
-
UDP 비연결형 프로토콜, 신뢰성 낮음, TCP보다 빠름, 데이터 수신 여부를 확인하지 않음, 순서를 보장하지 않음
7. 프로토콜이 무엇인지, 알고있는 프로토콜 중 하나를 설명
- 컴퓨터, 원거리 통신 장비 사이에서 메세지를 주고 받는 양식과 규칙 체계(통신 규약, 약속)
- http: 인터넷에서 하이퍼 텍스트 문서(참조를 통해 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트 문서)를 교환하기 위해 사용되는 프로토콜 포트번호 80
8. 그래프의 인접 리스트와 인접 행렬의 차이점
-
인접 리스트: 그래프의 연결관계를 벡터의 배열로 나타내는 방식, 연결된 노드의 순서는 의미가 없음
-
인접 행렬: 그래프의 연결관계를 이차원 배열로 나타내는 방식, 구현이 쉬움
9. 시간 복잡도와 공간 복잡도의 차이
-
시간 복잡도: 특정 크기의 입력을 기준으로 할 때 필요한 연산의 횟수, 최악의 경우로 알고리즘의 성능을 파악
-
공간 복잡도: 프로그램 실행과 완료에 얼마나 많은 공간(메모리)이 필요한지를 나타냄
10. 재귀 함수가 무엇이며, 어떤 상황에서 사용하는지
- 함수 안에 자신의 함수를 다시 호출하는 함수, 자신의 로직을 내부적으로 반복하다가 일정한 조건이 만족되면 함수를 이탈하여 결과를 도출
- 큰 목표 작업을 동일하면서 간단한 작업 여러 개로 나눌 수 있을 때 사용, 스택 오버플로우에 주의
11. DB와 SQL은 무엇인지
-
DB: 데이터의 저장소, 데이터의 집합, 구조화된 정보 또는 데이터의 조직화된 모음, DBMS에 의해 제어
-
SQL: 구조화된 질의 언어, RDB에서 사용, DBMS에 데이터를 구축, 관리, 활용하기 위해 사용
12. 배열과 연결 리스트의 차이점, 각각의 장단점
-
배열: 입력된 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조, index를 통한 접근이 빠름, 배열의 크기를 처음 생성할 때 지정
-
연결 리스트: 여러 개의 노드들이 순차적으로 연결된 형태를 갖는 자료구조, 메모리를 연속적으로 사용하지 않음, 삽입,삭제가 빠름
13. 리스트에서 삽입 삭제 하는 방법
- 각 노드는 데이터와 다음 노드를 가리키는 포인터로 이루어져 있어 삽입, 삭제시 노드의 포인터만 바꾸면 삽입, 삭제가 이루어진다.
14. 트리에 대해서 간단히 정의
- 노드들이 나무 가지처럼 연결된 비선형 자료구조
- 트리 내에 하위 트리가 있고 이게 반복되는 재귀적 자료구조이기도 함
- 노드 간 부모 자식 관계를 가지는 계층형 자료구조
15. BFS는 일반적으로 어떤 자료구조를 사용하는지
- 큐를 사용
- 루트(임의의) 노드에서 시작해서 인접한 노드를 먼저 탐색하는 방법
- 큐는 FIFO 원칙을 갖기 때문에 BFS를 구현할 때 사용하는 것이 좋음
16. 브루트 포스 방법은 무엇인지 간단히 설명
- 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과를 도출하는 방법
17. 쿼리에 대해서 간단히 정의
- DB에 사용자가 특정 데이터를 보여달라는 요청을 의미, 쿼리문을 잘 작성하면 DB에서 필요한 데이터에 빠르게 접근하고 능숙하게 데이터를 다룰 수 있음
18. 스키마에 대해서 간단히 정의
- DB의 구조와 제약조건에 관해 전반적인 명세를 기록한 것
- 속성, 개채, 관계에 대한 정의, 이들이 유지해야할 제약조건을 기술한 것
- 데이터 사전에 저장(데이터 항목들에 대한 정보를 지정한 중앙 저장소)
19. Set 자료구조는 어떤 특성을 가지고, 어떤 상황에서 사용하는지
- 데이터를 비순차적으로 저장할 수 있는 순열 자료구조
- 집합의 개념
- 순서가 유지가 안됨
- 중복값을 가지지 않음
- 중복 제거, 집합 관련 문제에서 자주 사용
20. join 연산에 대해서 설명
- 복수의 테이블을 엮어서 원하는 데이터를 추출하고 싶을 때 사용
- INNER JOIN: 교집합, 두 테이블에 데이터가 모두 있는 것만 join
- LEFT JOIN(RIGHT JOIN): 왼쪽 혹은 오른쪽 테이블을 기준으로 join, 왼쪽 기준 오른쪽 데이터가 없으면 NULL로 처리하여 join
- OUTER JOIN: 합집합, 두 테이블 중 한 테이블이라도 있는 데이터를 모두 join