728x90
728x90
기술 인터뷰 준비
들어가며
- 기술 인터뷰를 앞두고, 기술 인터뷰에 나올 수 있는 예상 질문과 답변을 정리해본다.
- 예상 질문 리스트는 인터넷의 다른 블로거분들의 글을 참고하였다. (@참고@ 영역 참고)
- 이해하기 쉽도록 관련 그림을 답변에 함께 포함하였다. (모든 이미지의 저작권은 구글링을 통해 나오는 사이트들에 있다.)
예상 질문 모음
① 운영체제(Operating System)
Q. 프로세스와 스레드의 차이는 무엇인가요?
프로세스는 실행 중인 프로그램의 독립된 인스턴스로 메모리와 자원을 분리하며, 스레드는 하나의 프로세스 내에서 실행되는 작은 실행 단위로 메모리를 공유하며 작업을 분할하여 동시에 처리합니다.
Q. 교착상태란 무엇이며, 교착상태가 발생하기 위해서는 어떤 조건이 있어야 하나요?
교착상태(Deadlock)는 프로세스들이 서로의 자원을 기다리며 무한히 진행하지 못하는 상태를 말하며, 발생하기 위해서는 상호 배제, 점유와 대기, 비선점, 순환 대기의 네 가지 조건이 동시에 충족되어야 합니다.
Q. 교착상태의 해결법은 무엇인가요?
교착상태의 해결법은 자원 할당 순서 변경, 타임아웃 설정, 프로세스 중단 등을 통해 조건 중 하나를 해제하거나, 데드락 검출 및 복구 알고리즘을 활용하여 해결합니다.
Q. 뮤텍스와 세마포어에 대해서 설명해 보세요.
뮤텍스(Mutex)는 상호 배제를 위한 동기화 메커니즘으로, 하나의 스레드만이 접근할 수 있는 임계 영역을 설정합니다. 세마포어(Semaphore)는 자원의 가용 개수를 나타내며, 스레드들이 이를 통해 상호작용하고 동기화합니다.
Q. 컨텍스트 스위칭이란 무엇인가요?
컨텍스트 스위칭(Context Switching, 문맥 교환)은 현재 실행 중인 프로세스나 스레드의 상태를 저장하고, 다음 실행할 프로세스나 스레드의 상태로 교체하는 작업을 말합니다. 이는 다중 작업 환경에서 CPU 할당을 조절하기 위해 필요합니다.
Q. 경쟁 상태란 무엇인가요?
경쟁 상태(Race Condition)는 여러 프로세스나 스레드가 공유 자원에 동시에 접근하여 예상치 못한 결과가 발생하는 상황을 나타냅니다.
Q. 프로세스 혹은 스레드의 동기화란 무엇인가요?
프로세스나 스레드의 동기화는 공유 자원의 안전한 접근을 보장하기 위해 동시 접근을 조절하는 메커니즘으로, 뮤텍스, 세마포어 등을 사용하여 상호작용하고 순서를 제어합니다.
Q. 사용자 수준의 스레드와 커널 수준의 스레드의 차이는 무엇인가요?
사용자 수준의 스레드는 어플리케이션에서 직접 관리되며, 커널 수준의 스레드는 운영체제가 관리하는 스레드입니다. 사용자 스레드는 유연성이 높지만, 커널 스레드는 다중 코어 활용과 블로킹 상황에서의 효율성이 높습니다.
Q. CPU 스케줄링이란 무엇인가요?
CPU 스케줄링은 다중 작업 환경에서 프로세스나 스레드 중 어떤 것이 CPU를 사용할 수 있는지 결정하는 것을 말합니다.
Q. CPU 스케줄링 방법에는 대표적으로 어떤 것들이 있나요?
대표적인 CPU 스케줄링 방법으로는 라운드 로빈, 우선순위, 최단 작업 우선 등이 있습니다.
Q. 동기와 비동기, 블로킹과 넌블로킹의 차이는 무엇인가요?
동기와 비동기는 작업 완료를 기다리는 방식의 차이를 나타내며, 블로킹과 넌블로킹은 호출된 함수가 작업을 완료할 때까지 대기하거나 즉시 반환되는지의 차이를 나타냅니다.
② 메모리(Memory)
Q. 프로세스에 할당되는 메모리의 각 영역에 대해서 설명해 주세요.
> 코드(Code) 영역은 프로그램 코드를 저장하고
> 데이터(Data) 영역은 전역 변수와 정적 변수를 저장하며,
> 힙(Heap) 영역은 동적 할당된 메모리를 관리하고,
> 스택(Stack) 영역은 지역 변수와 함수 호출 정보를 저장합니다.
Q. 메모리 구조의 순서가 어떻게 되나요? CPU에서 가까운 순으로 말해보세요.
CPU에서 가까운 순서로 레지스터(Register), 캐시(Cache), 주 기억장치(Main Memory), 보조 기억장치(Secondary Storage)가 위치합니다.
Q. 페이지와 세그멘테이션에 대해서 설명해 보세요.
페이지는 고정 크기의 블록으로 메모리를 관리하며, 세그멘테이션은 프로세스를 논리적으로 분할하여 메모리를 할당하는 방식입니다.
Q. 외부 단편화란? 내부 단편화란?
외부 단편화는 할당 가능한 작은 공간들 사이에 사용하지 못하는 작은 조각들이 쌓이는 현상을 나타내며, 내부 단편화는 할당된 메모리 영역 내에서 사용하지 못하는 공간이 발생하는 현상을 의미합니다.
Q. First Fit, Best Fit, Worst Fit에 대해서 설명해 보세요.
> First Fit은 사용 가능한 첫 번째 공간에 할당하는 방식이며,
> Best Fit은 가장 작게 맞추어지는 공간에 할당하는 방식입니다.
> Worst Fit은 가장 크게 남는 공간에 할당하는 방식입니다.
참고 사이트 : https://prepinsta.com/operating-systems/first-fit-best-fit-worst-fit-in-os-example/
Q. 페이지 교체 알고리즘 종류에는 어떤 것들이 있나요?
페이지 교체 알고리즘으로는 FIFO(First-In-First-Out), LRU(Least Recently Used), Optimal 등이 있으며, 가상 메모리 시스템에서 페이지 부재 시 어떤 페이지를 대체할지 결정하는 방법을 제공합니다.
③ 네트워크(Network)
전산 기본
Q. OSI 7계층에 대해서 설명해주세요.
OSI 모델은 컴퓨터 네트워크의 통신 과정을 7개의 계층으로 나눈 모델로, 물리(Physical), 데이터 링크(Data Link), 네트워크(Network), 전송(Transport), 세션(Session), 표현(Presentation), 응용(Application) 계층(물데네 전세표응)으로 구성되어 있습니다. 각 계층은 특정 기능과 역할을 수행하며 상위 계층은 하위 계층의 서비스를 활용합니다.
Q. TCP/IP 4계층에 대해서 설명해주세요.
TCP/IP 모델은 네트워크 통신을 4개의 계층으로 분류한 모델로, 네트워크 인터페이스(Network Interface), 인터넷(Internet), 전송(Transport), 응용(Application) 계층(네인전응)으로 구성되어 있습니다. 각 계층은 서로 다른 역할을 수행하며, 인터넷 프로토콜 스위트의 기반이 됩니다.
Q. DNS가 무엇인가요?
DNS(Domain Name System)는 도메인 이름을 실제 IP 주소로 변환해주는 시스템으로, 사람이 읽기 쉬운 도메인 이름을 컴퓨터가 이해하는 숫자 형태인 IP 주소로 연결해주는 역할을 합니다.
Q. 도메인 이름으로 실제 IP를 어떻게 찾을 수 있는지 흐름을 설명해 주세요.
1. 사용자가 웹 브라우저에 도메인 이름을 입력하면, 브라우저는 먼저 로컬 캐시, 호스트 파일, 라우터 캐시 등에서 IP 주소를 찾습니다.
2. 만약 없다면, 브라우저는 DNS 서버에 질의(Query)를 보내 해당 도메인의 IP 주소를 요청(Request)합니다.
3. DNS 서버는 계층적인 구조로 쿼리를 처리하며, 도메인의 IP 주소를 찾아 응답(Response)합니다.
4. 이후 브라우저는 해당 IP 주소로 연결하여 웹 페이지를 요청하고 표시합니다.
TCP / UDP
Q. TCP와 UDP의 차이에 대해서 설명해 주세요.
TCP(Transmission Control Protocol)는 연결 지향적이고 신뢰성을 강조하는 프로토콜로, 패킷 전송 순서와 오류 검출 및 복구를 보장합니다.
UDP(User Datagram Protocol)는 비연결성이며 빠른 전송을 중요시하는 프로토콜로, 데이터 전달의 신뢰성보다는 낮은 지연 시간을 추구합니다.
Q. TCP 헤더에 대해서 설명해 주세요.
TCP 헤더는 송신자와 수신자 간의 통신에 필요한 정보를 담고 있으며, 출발지 포트, 목적지 포트, 시퀀스 번호, 응답 번호, 윈도우 크기 등의 정보를 포함합니다.
Q. MTU가 무엇인가요?
MTU(Maximum Transmission Unit)는 네트워크 링크에서 전송 가능한 최대 데이터 크기를 나타내며, 패킷 크기를 이 값 이하로 유지해야 중간 경로에서 패킷 분할과 재조립을 최소화하고 효율적인 전송을 보장할 수 있습니다.
Q. 3-way Hand Shake, 4-way Hand Shake 흐름에 대해서 설명해주세요.
3-way Hand Shake는 TCP 연결 설정 과정으로 클라이언트가 서버에 SYN 패킷을 보내고, 서버가 SYN+ACK 패킷으로 응답한 뒤, 클라이언트가 ACK 패킷을 보내 연결을 확립합니다.
4-way Hand Shake는 연결 종료 과정으로 클라이언트가 FIN 패킷을 보내고, 서버가 ACK 패킷으로 응답한 뒤, 서버가 FIN 패킷을 보내고 클라이언트가 ACK 패킷으로 응답하여 연결을 종료합니다.
HTTP
Q. HTTP 프로토콜에 대해서 아는대로 말해주세요.
HTTP(Hypertext Transfer Protocol)는 웹 브라우저와 웹 서버 간의 통신을 위한 프로토콜로, 클라이언트가 요청(Request)을 보내고, 서버가 응답(Response)을 보내며, HTML 등의 리소스를 주고받아 웹 페이지를 표시하는 기본 규약입니다.
Q. HTTP와 HTTPS 의 차이는 무엇인가요?
HTTP는 데이터를 평문으로 전송하여 보안이 취약하지만, HTTPS는 SSL 또는 TLS 프로토콜을 통해 데이터 암호화를 지원하여 보안을 강화한 프로토콜입니다.
Q. HTTPS가 동작하는 방식에 대해서 설명해 주세요.
HTTPS는 클라이언트와 서버 간의 데이터 통신 시 공개키 암호화와 대칭키 암호화를 조합하여 데이터를 보호합니다. 클라이언트는 서버의 공개키로 암호화한 대칭키를 전송하고, 서버는 이를 개인키로 복호화하여 대칭키를 얻어 암호화된 데이터를 주고받습니다.
Q. HTTP 1.0과 1.1의 차이는 무엇인가요?
HTTP 1.0은 여러 요청을 별도의 연결로 처리하며, 헤더 정보가 간단하고 추가적인 기능 지원이 제한적인 프로토콜입니다. HTTP 1.1은 Keep-Alive 연결을 기본적으로 지원하여 여러 요청을 단일 연결로 처리하고, 요청과 응답에 대한 헤더 정보가 추가되어 효율적인 데이터 전송이 가능합니다.
Q. HTTP2와 그 특징에 대해서 설명해 주세요.
HTTP2는 여러 개의 요청을 다중화(multiplexing)하여 한 연결로 동시에 처리하며, 헤더 압축과 이진 프레이밍을 통해 효율적인 데이터 전송을 지원하고, 브라우저와 서버 사이의 데이터 요청과 응답이 더 빠르고 효율적으로 이루어집니다.
Q. HTTP 헤더의 구조에 대해서 설명해 주세요.
HTTP 헤더는 키-값 쌍으로 이루어져 있으며, 요청과 응답 모두에 사용되며, 메타데이터를 포함하여 데이터의 처리 방식과 유형을 지정합니다.
Q. keep-alive 헤더에 대해서 설명해 주세요.
keep-alive 헤더는 HTTP 1.0에서 도입된 기능으로, 단일 연결을 유지하며 여러 요청과 응답을 동일한 연결로 처리하여 네트워크 지연을 줄이고 성능을 개선합니다.
Q. HTTP GET과 POST의 차이는 무엇인가요?
GET은 서버로 데이터를 요청하는 메서드로 URL에 데이터를 포함하여 전송하며, POST는 서버로 데이터를 제출하는 메서드로 본문(body)에 데이터를 담아 전송합니다. GET은 주로 데이터 조회에, POST는 데이터 전송 및 업데이트에 사용됩니다.
Q. 쿠키와 세션에 대해서 설명해 주세요.
쿠키(Cookie)는 클라이언트 측에 저장되는 작은 데이터 조각으로, 상태 정보를 유지하거나 추적하는 데 사용됩니다. 세션(Session)은 서버 측에서 클라이언트의 상태 정보를 관리하는 메커니즘으로, 일시적으로 데이터를 저장하고 유지합니다.
웹
Q. 웹브라우저에서 서버로 요청했을 때, 흐름을 설명해주세요.
웹브라우저에서 서버로 요청(Request) 시, 브라우저가 해당 URL로 HTTP 요청을 보내고, DNS를 통해 도메인 이름을 IP 주소로 변환한 뒤, 서버가 요청을 받아 처리하고 클라이언트에게 응답(Response) 데이터를 보내 웹 페이지를 렌더링합니다.
Q. CORS란 무엇인가요?
CORS(Cross-Origin Resource Sharing)는 웹 애플리케이션에서 동일 출처 정책을 우회하여 다른 출처의 리소스를 요청하고 사용하는 메커니즘으로, 보안 상의 이유로 브라우저에서 제한하며, 서버에서 특정 헤더를 설정하여 허용할 수 있습니다.
※ 동일 출처 정책(Same-Origin Policy)
- 웹 브라우저에서 실행되는 스크립트가 다른 출처(도메인, 프로토콜, 포트)의 리소스에 접근하는 것을 제한하는 보안 메커니즘
- 클라이언트 측에서 다른 도메인으로의 무단 데이터 접근을 방지하여 보안성을 강화하고 웹 페이지의 안전성을 유지하는 목적으로 동작한다.
- 동일 출처 정책을 위반하면 브라우저에서 보안 예외가 발생하여 스크립트 실행이 차단될 수 있다.
Q. 웹 서버와 웹 어플리케이션 서버(WAS)의 차이는 무엇인가요?
웹 서버는 정적 리소스(HTML, CSS, 이미지 등)를 제공하는 역할을 하며, 웹 어플리케이션 서버(WAS, Web Application Server)는 동적인 처리, 비즈니스 로직 실행 등을 담당하여 웹 애플리케이션의 동작을 지원합니다.
Q. REST API에 대해서 설명해 주세요.
REST API(Representational State Transfer API)는 자원을 HTTP 메서드(GET, POST, PUT, DELETE)로 표현하여 웹 애플리케이션 간의 통신과 데이터 요청을 수행하는 인터페이스입니다.
Q. API Gateway란 무엇인가요?
API Gateway는 여러 마이크로서비스의 엔드포인트를 단일 진입점으로 묶어주는 서비스로, 요청 라우팅, 인증, 로깅, 로드 밸런싱 등을 관리하여 API 관리와 보안을 향상시킵니다.
Q. API Gateway가 다운되면 모든 API를 사용 못할지도 모르는데, 어떤 방안을 마련해야 할까요?
API Gateway 다운 시 백업 서비스나 로드 밸런서를 설정하여 다운 시점에 대비하고, 클라이언트 측에서 적절한 에러 핸들링을 구현하여 사용자 경험을 개선할 수 있습니다. 또한, 서비스 격리와 모니터링 도구를 활용하여 장애 상황을 미연에 방지하고 대응할 수 있습니다.
④ 데이터베이스(Database)
전산 기본
Q. JOIN에 대해서 설명해 주세요.
데이터베이스에서 둘 이상의 테이블을 연결하여 하나의 결과 테이블을 생성하는 연산으로, 관계형 데이터베이스에서 데이터 간의 연관성을 파악하고 조작할 수 있도록 도와줍니다.
Q. 내부 조인과 외부 조인의 차이는 무엇인가요?
내부 조인은 공통된 값만 반환하며, 외부 조인은 일치하지 않는 값도 반환하여 누락된 정보를 보완합니다.
Q. 정규화에 대해서 설명해 주세요.
데이터베이스의 설계를 최적화하기 위해 중복을 제거하고 데이터를 논리적으로 구조화하는 과정으로, 데이터의 일관성과 무결성을 보장하며, 쿼리 성능을 향상시키는데 목적이 있습니다.
Q. 파티셔닝과 샤딩에 대해서 설명해 주세요.
파티셔닝(Partitioning)은 하나의 테이블을 논리적 또는 물리적으로 분할하여 관리하는 것이고, 샤딩(Sharding)은 데이터를 별도의 서버나 노드에 분산하여 저장하고 처리하는 방식입니다.
Q. ORM이란 무엇인가요?
객체-관계 매핑(Object-Relational Mapping)은 객체 지향 프로그래밍 언어(C++, Java 등)와 관계형 데이터베이스 간의 데이터를 변환 및 연결하여 쉽게 조작할 수 있도록 돕는 도구나 프레임워크입니다.
Q. NoSQL이란 무엇인가요?
NoSQL은 '비관계형 데이터베이스'를 의미하며, 스키마가 유연하고 대용량 데이터를 처리하는데 특화되어 있는 데이터베이스 종류를 지칭합니다.
Q. 스키마란 무엇인가요?
데이터베이스에서 테이블, 필드, 제약 조건 등의 구조와 정의를 나타내는 체계적인 구조를 말합니다.
인덱스
Q. 인덱스란 무엇인가요? 어떻게 동작 하나요?
데이터베이스 검색 속도를 향상시키기 위해 특정 열의 값을 사용하여 테이블 내의 데이터 레코드를 빠르게 찾을 수 있도록 도와주는 자료 구조입니다. 인덱스는 효율적인 데이터 검색과 정렬을 지원합니다.
Q. 인덱스의 알고리즘에는 어떤 것들이 있나요?
대표적인 인덱스 알고리즘으로 B-Tree, B+Tree, 해시 인덱스 등이 있으며, 각각 다양한 방식으로 데이터를 저장하고 관리합니다.
Q. Full Table Scan과 Index Range Scan 을 설명해주세요.
Full Table Scan은 전체 테이블을 순차적으로 읽어 필요한 데이터를 찾는 방식이고, Index Range Scan은 인덱스를 이용하여 특정 범위 내의 데이터를 검색하는 방식입니다.
트랜잭션
Q. 트랜잭션이란 무엇인가요? 4가지 원칙을 포함해서 설명해 주세요.
데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위로, ACID(원자성, 일관성, 고립성, 지속성) 원칙을 준수하여 안정적인 데이터 조작을 보장합니다.
Q. 트랜잭션의 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 말해보세요.
격리 수준은 동시에 여러 트랜잭션이 처리되는 상황에서 트랜잭션 간의 보이지 않는 영향을 조절하는 수준을 나타내며, Dirty Read, Non-Repeatable Read, Phantom Read 등의 문제가 발생할 수 있습니다.
Q. 공유 락과 배타 락의 차이는 무엇인가요?
공유 락(공유 잠금, Shared Lock)은 여러 트랜잭션이 동일한 데이터를 읽을 수 있도록 허용하는 잠금이며, 배타 락(배타적 잠금, Exclusive Lock)은 하나의 트랜잭션이 데이터를 변경하는 경우 다른 트랜잭션의 접근을 막는 잠금입니다.
Q. 데드락이란 무엇이며, 어떻게 발생할까요?
데드락(Dead Lock)은 두 개 이상의 트랜잭션이 서로 상대방이 점유한 자원을 기다리며 무한히 대기하는 상황을 의미하며, 원인은 상호 배제, 점유와 대기, 비선점, 순환 대기의 4가지 조건이 동시에 충족될 때 발생합니다.
⑤ 알고리즘
전산 기본
Q. 빅오 표기법에 대해서 설명해주세요.
빅오 표기법이란 알고리즘의 실행 시간이나 공간 복잡도를 표현하는 방식으로, 알고리즘의 최악의 경우 성능을 나타내는 표기법입니다.
Q. 팩토리얼(factorial)을 구현해 보세요. (손코딩)
def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1)
Q. 피보나치 수열 구현 방식 세 가지를 말해보시고, 시간복잡도와 공간복잡도를 설명해 주세요.
구현 방식 : 재귀, 반복, 메모이제이션
시간복잡도
> 재귀 - $O(2^n)$
> 반복 - $O(n)$
> 메모이제이션 - $O(n)$
공간복잡도
> 재귀 - $O(n)$
> 반복 - $O(1)$
> 메모이제이션 - $O(n).$
# 피보나치 수열 구현 방식: 재귀 def fibonacci_recursive(n): if n <= 1: return n return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2) # 피보나치 수열 구현 방식: 반복 (다이나믹 프로그래밍) def fibonacci_iterative(n): if n <= 1: return n fib = [0, 1] for i in range(2, n + 1): fib.append(fib[i - 1] + fib[i - 2]) return fib[n] # 피보나치 수열 구현 방식: 메모이제이션 (재귀 + 캐싱) def fibonacci_memoization(n, memo={}): if n in memo: return memo[n] if n <= 1: return n memo[n] = fibonacci_memoization(n - 1, memo) + fibonacci_memoization(n - 2, memo) return memo[n] # 각 방식의 시간복잡도: 재귀 - O(2^n), 반복 및 메모이제이션 - O(n) # 각 방식의 공간복잡도: 재귀 - O(n), 반복 및 메모이제이션 - O(n) # 예시 n = 10 print(f"Fibonacci({n}) (Recursive): {fibonacci_recursive(n)}") print(f"Fibonacci({n}) (Iterative): {fibonacci_iterative(n)}") print(f"Fibonacci({n}) (Memoization): {fibonacci_memoization(n)}")
Q. BFS/DFS 차이는 무엇인가요?
BFS는 너비 우선으로 탐색하여 레벨 순서대로 탐색하고, DFS는 깊이 우선으로 탐색하여 한 경로를 완전히 탐색한 후 다음 경로를 탐색합니다.
Q. 프림 알고리즘에 대해서 설명해 주세요.
최소 신장 트리(Minimum Spanning Tree)를 구성하기 위해 시작 정점에서 출발하여 점진적으로 간선을 선택하는 그리디 알고리즘으로, 우선순위 큐를 사용하여 가장 작은 가중치의 간선을 선택합니다.
Q. 다익스트라 알고리즘에 대해서 설명해 주세요.
최단 경로를 찾는 그리디 알고리즘으로, 출발 정점에서부터 각 정점까지의 최단 거리를 구하는 방식으로 우선순위 큐를 사용하여 가장 작은 거리의 정점을 선택합니다.
Q. 은행원 알고리즘에 대해서 설명해 주세요.
은행 업무를 모델링한 병행 프로그래밍 알고리즘으로, 두 개의 프로세스가 동시에 계좌 이체를 하려고 할 때 임계 영역을 효과적으로 보호하기 위해 사용됩니다.
정렬
Q. 정렬의 종류에는 어떤 것들이 있나요?
선택 정렬, 삽입 정렬, 버블 정렬, 퀵 정렬, 병합 정렬, 힙 정렬 등이 있습니다.
Q. 삽입 정렬이 일어나는 과정을 설명해 보세요.
각 요소를 적절한 위치에 삽입하면서 정렬하는 방식으로, 배열을 순회하면서 현재 요소를 이미 정렬된 부분과 비교하여 삽입합니다.
Q. 퀵 정렬이 일어나는 과정을 설명해 보세요.
피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할하여 분할 정복 방식으로 정렬합니다.
Q. 54321 배열이 있을 때, 어떤 정렬을 사용하면 좋을까요?
54321 배열은 버블 정렬로 가장 효율적으로 정렬됩니다. 이는 인접한 값들을 비교하고 교환하는 단순한 방식으로 작동하며, 최대 값이 맨 뒤로 이동하여 정렬됩니다. 버블 정렬은 일반적으로 다른 정렬 알고리즘보다 비효율적이며 시간 복잡도는 $O(n^2)$입니다.
Q. 랜덤으로 배치된 배열이 있을때, 어떤 정렬을 사용하면 좋을까요?
랜덤으로 배치된 배열을 정렬할 때, 분할 정복 기반의 "퀵 정렬(Quick Sort)"이 좋은 선택입니다. 퀵 정렬은 분할 정복 방식으로 작동하며, 배열을 피벗을 기준으로 두 부분으로 분할한 후 재귀적으로 정렬합니다. 이로 인해 평균적으로 빠른 성능을 보이며, 랜덤한 배열에서도 높은 효율을 유지합니다. 단, 최악의 경우 시간 복잡도가 $O(n^2)$이 될 수 있으므로 입력 데이터의 분포에 따라 성능이 달라질 수 있습니다.
Q. 자릿수가 모두 같은 수가 담긴 배열이 있을 때, 어떤 정렬을 사용하면 좋을까요?
자릿수가 모두 같은 수가 있는 배열을 정렬할 때, "기수 정렬(Radix Sort)"을 사용하는 것이 좋습니다. 기수 정렬은 자릿수별로 비교하여 정렬하는 알고리즘으로, 모든 원소의 자릿수가 동일한 경우에 최적의 성능을 발휘하며, 비교 연산을 하지 않고 원소를 분류하므로 안정적인 정렬 결과를 얻을 수 있습니다. 하지만 원소의 자릿수를 파악하고 정렬하기 위한 추가적인 계산이 필요하며, 입력값의 범위에 따라 적절한 기수를 선택해야 합니다.
⑥ 자료 구조(Data Structure)
전산 기본
Q. 배열과 링크드 리스트의 차이점에 대해서 설명해 주세요.
배열(Array)은 연속된 메모리 공간에 원소를 저장하며 인덱스로 접근하고 크기가 고정되지만, 링크드 리스트(Linked List)는 불연속적인 노드들이 연결되어 있으며 포인터를 통해 접근하고 크기가 동적으로 조절될 수 있습니다.
Q. 스택과 큐에 대해서 설명해 주세요.
스택(Stack)은 후입선출(LIFO) 구조로 요소를 추가하거나 삭제하는 자료구조로, 주로 함수 호출, 뒤로가기 등에 사용됩니다. 큐(Queue)는 선입선출(FIFO) 구조로 동작하며, 요소를 추가하거나 삭제할 때 주로 사용되는 자료구조로, 대기열과 같은 상황에 활용됩니다.
Q. 해시 테이블에 대해서 설명해 주세요.
해시 함수를 사용하여 데이터를 저장하고 검색하는 자료구조로, 키와 값을 짝지어 저장하며 빠른 검색 성능을 제공합니다. 해시 충돌을 처리하기 위한 충돌 해결 방법도 적용되며, 평균적으로 상수 시간($O(1)$)의 검색 속도를 가집니다.
트리
Q. 포화(Perfect) 이진트리, 완전(Complete) 이진트리, 정(Full) 이진트리의 차이점에 대해 각각 설명해주세요.
포화(Perfect) 이진트리는 모든 레벨이 꽉 차 있는 이진트리입니다. 완전(Complete) 이진트리는 높이를 제외하고는 왼쪽부터 오른쪽으로 빠짐없이 노드가 채워진 이진트리입니다. 정(Full) 이진트리는 모든 노드가 0개 또는 2개의 자식 노드를 가지는 이진트리입니다.
Q. 그래프와 트리의 차이점에 대해서 설명해 주세요.
그래프(Graph)는 노드와 간선으로 이루어진 자료구조로, 노드 간의 관계가 자유로우며 순환 구조일 수 있습니다. 트리(Tree)는 계층 구조의 노드로 이루어진 그래프의 특별한 형태로, 부모-자식 관계이며 순환하지 않습니다.
Q. 힙 자료구조에 대해 설명해 주세요.
힙(Heap)은 완전 이진트리 형태의 특별한 형태의 이진트리로, 최댓값 또는 최솟값을 빠르게 찾기 위한 목적으로 사용되며 우선순위 큐 구현에 주로 사용됩니다.
Q. 힙의 삽입과 삭제는 어떻게 이루어지나요?
힙의 삽입은 힙의 마지막 위치에 새로운 원소를 추가한 후 부모 노드와 비교하여 정렬합니다. 힙의 삭제는 루트 노드를 삭제하고 마지막 노드를 루트로 옮긴 후 자식 노드와 비교하여 정렬합니다.
Q. 레드 블랙 트리에 대해 설명해주세요.
균형 이진탐색트리의 일종으로, 노드에 레드 또는 블랙 색을 부여하여 트리의 높이를 관리하며 탐색, 삽입, 삭제 연산의 시간복잡도를 $O(log n)$으로 유지합니다.
Q. 레드 블랙 트리의 삽입과 삭제 과정에 대해서 말해보세요.
레드 블랙 트리의 삽입은 일반적인 이진탐색트리의 삽입 과정 후, 레드 블랙 특성을 유지하도록 색을 조정하고 회전을 수행합니다. 삭제는 삭제 후 레드 블랙 특성을 유지하도록 조정하고 회전을 수행합니다.
Q. B-Tree에 대해서 설명해 주세요.
여러 노드들이 자식 노드를 가리키며, 노드 내에 여러 개의 키와 자식 노드들을 가질 수 있는 이진 탐색트리의 확장된 형태로, 데이터베이스와 파일 시스템에서 사용됩니다.
Q. 최소 신장 트리에 대해서 설명해 주세요.
그래프에서 모든 노드를 포함하는 트리 중에서 간선의 가중치 합이 최소가 되는 트리를 의미하며, 프림 알고리즘이나 크루스칼 알고리즘을 사용하여 구성됩니다.
⑦ 프로그래밍(Programming)
전산 기본
Q. 객체지향이 무엇인가요? 절차지향과의 차이점은 뭐죠?
객체지향은 프로그램을 객체로 나누어 기능과 속성을 포함하며 상속, 캡슐화, 다형성을 강조하는 패러다임이고, 절차지향은 프로그램을 순차적인 단계로 처리하는 패러다임입니다.
Q. 객체지향 SOLID 원칙에 대해서 설명해 주세요.
객체지향 설계 원칙으로, 단일 책임 원칙(SRP), 개방-폐쇄 원칙(OCP), 리스코프 치환 원칙(LSP), 인터페이스 분리 원칙(ISP), 의존 역전 원칙(DIP)으로 구성되어 객체지향 시스템을 유지보수 가능하고 확장 가능하게 만듭니다.
Q. 객체지향 4가지 특징에 대해서 설명해 주세요.
캡슐화, 상속, 추상화, 다형성으로 구성되며, 캡슐화(Encapsulation)는 데이터와 기능을 하나로 묶어 외부로부터 숨김으로써 정보 은닉을 지원하고, 상속(Inheritance)은 기존 클래스를 재사용하거나 확장하여 새로운 클래스를 만들 수 있습니다. 추상화(Abstraction)는 복잡한 현실 세계에서 핵심적인 개념을 모델링하여 객체의 공통된 특징과 동작을 간추려 표현하는 것이고, 다형성(Polymorphism)은 같은 이름의 메서드나 연산자를 다양한 객체에서 다르게 동작하도록 하는 개념으로, 객체지향 프로그래밍에서의 유연성과 재사용성을 높이는 중요한 원칙입니다.
Q. 대표적인 객체지향 언어에는 어떤 것들이 있나요?
Java, Python, C++, C# 등이 있으며, 이들 언어는 객체지향 프로그래밍을 지원하며 클래스, 객체, 상속, 다형성 등의 개념을 활용합니다.
Q. 데이터 타입과 변수의 차이는 무엇인가요?
데이터 타입(Data Type)은 값의 종류와 크기를 정의하며, 변수(Variable)는 메모리 공간에 값을 저장하기 위한 식별자입니다.
Q. 함수형 프로그래밍에 대해서 설명해 주세요.
함수형 프로그래밍은 프로그램을 수학적 함수의 조합으로 생각하며, 상태 변화와 가변 데이터보다는 순수 함수와 데이터 불변성을 강조하는 프로그래밍 패러다임입니다. 함수를 일급 객체로 다루고 함수의 조합을 통해 복잡한 작업을 해결하며, 부작용을 최소화하여 코드의 예측 가능성과 유지보수성을 높이는 특징을 갖습니다. 함수형 프로그래밍은 병렬 처리와 비동기 작업에 유리하며, 간결하고 모듈화된 코드를 작성할 수 있습니다.
Q. AOP란 무엇인가요?
"관점 지향 프로그래밍(Aspect-Oriented Programming)"의 약자로, 주요 로직과 부가적인 관심사를 분리하여 모듈화하는 프로그래밍 패러다임입니다.
Q. 컴파일러와 인터프리터의 차이는 무엇인가요?
컴파일러(Compiler)는 전체 소스 코드를 기계어로 변환하여 실행 파일을 생성하고, 인터프리터(Interpreter)는 소스 코드를 한 줄씩 해석하고 실행합니다.
Q. 오버로딩과 오버라이딩의 차이는 무엇인가요?
오버로딩(Overloading)은 같은 이름의 메서드를 매개변수의 타입이나 개수에 따라 다르게 정의하는 것이고, 오버라이딩(Overriding)은 부모 클래스의 메서드를 자식 클래스에서 재정의하여 다양한 동작을 수행하는 것입니다.
Q. 1급 객체에 대해서 설명해 주세요.
1급 객체(First-class Object / First-class Citizen)란, 프로그래밍 언어에서 함수를 일반 값처럼 다루는 것을 의미하며, 변수에 할당하고 인자로 전달하거나 반환값으로 사용할 수 있는 객체를 의미합니다.
참고
728x90
728x90
'ETC. > Job Preparation' 카테고리의 다른 글
[Job Preparation] 코딩 테스트 준비 : 자료구조 (with Python) (1) | 2024.09.22 |
---|---|
[Job Preparation] 코딩 테스트 준비 : SQL (0) | 2024.09.22 |
[Job Preparation] 개발 환경 구축 (React.js) (1) | 2024.09.20 |