Spring 신입 CS 기초 면접
새 면접Q. Stack과 Queue의 차이점을 설명하고, 각각의 대표적인 활용 사례를 말씀해주세요.
데이터가 삽입되고 제거되는 순서의 차이에 주목해보세요.
Stack은 LIFO(Last In First Out) 방식으로 마지막에 들어온 데이터가 먼저 나가는 구조입니다. Queue는 FIFO(First In First Out) 방식으로 먼저 들어온 데이터가 먼저 나가는 구조입니다. Stack은 함수 호출 스택, 브라우저의 뒤로가기 기능, 괄호 검사 등에 활용됩니다. Queue는 프린터 대기열, 작업 스케줄링, BFS 알고리즘 등에 사용됩니다.
- • Stack은 LIFO 구조
- • Queue는 FIFO 구조
- • 각각의 실무 활용 사례 이해
Spring 애플리케이션에서 메시지 큐를 사용하여 비동기 작업을 처리할 때 Queue 구조가 활용됩니다.
Java에서 Stack과 Queue를 구현할 때 사용할 수 있는 클래스나 인터페이스는 무엇이 있나요?
Q. TCP와 UDP의 차이점을 설명하고, 각각 어떤 서비스에 적합한지 말씀해주세요.
연결 방식과 신뢰성, 속도 측면에서 비교해보세요.
TCP는 연결 지향 프로토콜로 3-way handshake를 통해 연결을 수립하며, 데이터 전송의 신뢰성을 보장합니다. UDP는 비연결 프로토콜로 연결 수립 과정 없이 데이터를 전송하며, 속도가 빠르지만 신뢰성은 보장하지 않습니다. TCP는 파일 전송, 이메일, 웹 브라우징 등 정확한 데이터 전달이 중요한 서비스에 적합합니다. UDP는 실시간 스트리밍, 온라인 게임, DNS 조회 등 속도가 중요하고 일부 데이터 손실이 허용되는 서비스에 적합합니다.
- • TCP는 연결 지향, 신뢰성 보장
- • UDP는 비연결, 빠른 속도
- • 각 프로토콜의 적합한 사용 사례
REST API 통신은 TCP 기반 HTTP를 사용하여 데이터의 정확한 전달을 보장합니다.
TCP의 3-way handshake 과정을 단계별로 설명해주세요.
Q. 프로세스와 스레드의 차이점을 설명하고, 멀티 프로세스와 멀티 스레드 방식의 장단점을 비교해주세요.
메모리 공유 여부와 컨텍스트 스위칭 비용을 생각해보세요.
프로세스는 독립적인 메모리 공간을 가진 실행 단위이며, 스레드는 프로세스 내에서 메모리를 공유하는 실행 단위입니다. 멀티 프로세스는 독립적인 메모리로 안정성이 높지만 컨텍스트 스위칭 비용이 크고 메모리 사용량이 많습니다. 멀티 스레드는 메모리를 공유하여 효율적이고 컨텍스트 스위칭이 빠르지만, 동기화 문제가 발생할 수 있고 한 스레드의 오류가 전체에 영향을 줄 수 있습니다. Spring에서는 주로 멀티 스레드 방식으로 여러 요청을 동시에 처리합니다.
- • 프로세스는 독립적 메모리, 스레드는 공유 메모리
- • 멀티 프로세스의 안정성과 비용
- • 멀티 스레드의 효율성과 동기화 문제
Spring Boot의 Tomcat은 Thread Pool을 사용하여 동시에 여러 HTTP 요청을 처리합니다.
스레드 간 동기화 문제를 해결하기 위한 방법에는 어떤 것들이 있나요?
Q. 트랜잭션의 ACID 속성에 대해 각각 설명해주세요.
원자성, 일관성, 격리성, 지속성 네 가지 속성을 생각해보세요.
Atomicity(원자성)는 트랜잭션의 모든 작업이 완전히 수행되거나 전혀 수행되지 않음을 보장합니다. Consistency(일관성)는 트랜잭션 실행 전후에 데이터베이스가 일관된 상태를 유지함을 의미합니다. Isolation(격리성)는 동시에 실행되는 트랜잭션들이 서로 영향을 주지 않도록 격리됨을 보장합니다. Durability(지속성)는 트랜잭션이 성공적으로 완료되면 그 결과가 영구적으로 저장됨을 의미합니다.
- • Atomicity: All or Nothing
- • Consistency: 데이터 무결성 유지
- • Isolation: 트랜잭션 간 독립성
- • Durability: 영구적 저장
Spring의 @Transactional 어노테이션을 사용하면 ACID 속성을 보장하는 트랜잭션 처리가 가능합니다.
트랜잭션의 격리 수준(Isolation Level)에는 어떤 것들이 있고, 각각 어떤 문제를 해결하나요?
Q. 시간 복잡도와 공간 복잡도가 무엇인지 설명하고, Big-O 표기법에서 O(1), O(n), O(n²)의 의미를 설명해주세요.
알고리즘의 효율성을 측정하는 두 가지 기준에 대해 생각해보세요.
시간 복잡도는 알고리즘 실행에 필요한 시간을, 공간 복잡도는 필요한 메모리 양을 나타내는 지표입니다. Big-O 표기법은 입력 크기 n에 대한 알고리즘의 최악의 경우 성능을 나타냅니다. O(1)은 입력 크기와 무관하게 일정한 시간이 걸리는 상수 시간을 의미합니다. O(n)은 입력 크기에 비례하여 시간이 증가하는 선형 시간을 의미합니다. O(n²)은 입력 크기의 제곱에 비례하여 시간이 증가하는 이차 시간을 의미합니다.
- • 시간 복잡도와 공간 복잡도의 개념
- • Big-O는 최악의 경우 성능
- • 각 복잡도의 의미와 성능 차이
대용량 데이터를 처리하는 API를 개발할 때 알고리즘의 시간 복잡도를 고려하여 성능을 최적화합니다.
이진 탐색 알고리즘의 시간 복잡도는 무엇이며, 그 이유를 설명해주세요.
Q. Hash Table의 동작 원리를 설명하고, 해시 충돌(Hash Collision)이 발생했을 때 해결하는 방법을 두 가지 이상 말씀해주세요.
해시 함수를 통해 키를 인덱스로 변환하는 과정과, 같은 인덱스에 여러 값이 매핑될 때의 처리 방법을 생각해보세요.
Hash Table은 해시 함수를 사용하여 키를 배열의 인덱스로 변환하고, 해당 위치에 값을 저장하는 자료구조입니다. 평균적으로 O(1)의 시간 복잡도로 데이터를 검색, 삽입, 삭제할 수 있습니다. 해시 충돌 해결 방법으로는 Chaining 방식이 있는데, 같은 인덱스에 연결 리스트로 여러 값을 저장합니다. Open Addressing 방식은 충돌 발생 시 다른 빈 인덱스를 찾아 저장하며, 선형 탐사, 이차 탐사, 이중 해싱 등의 방법이 있습니다.
- • 해시 함수로 키를 인덱스로 변환
- • 평균 O(1) 시간 복잡도
- • Chaining과 Open Addressing 방식
Spring에서 사용자 세션을 관리하거나 캐시를 구현할 때 Hash 기반 자료구조가 활용됩니다.
Java의 HashMap은 어떤 방식으로 해시 충돌을 해결하나요?
Q. REST API에서 GET, POST, PUT, DELETE 메서드의 역할과 차이점을 설명하고, 각 메서드의 멱등성(Idempotent)에 대해 말씀해주세요.
각 HTTP 메서드가 수행하는 작업의 종류와, 같은 요청을 여러 번 보냈을 때의 결과를 생각해보세요.
GET은 리소스 조회에 사용되며 서버 상태를 변경하지 않습니다. POST는 새로운 리소스 생성에 사용됩니다. PUT은 리소스 전체를 수정하거나 없으면 생성하는 데 사용됩니다. DELETE는 리소스 삭제에 사용됩니다. 멱등성은 동일한 요청을 여러 번 수행해도 결과가 같은 성질을 의미합니다. GET, PUT, DELETE는 멱등성을 가지지만, POST는 요청마다 새로운 리소스가 생성되므로 멱등성을 가지지 않습니다.
- • 각 HTTP 메서드의 역할 구분
- • 멱등성의 개념 이해
- • POST는 비멱등, GET/PUT/DELETE는 멱등
Spring REST Controller를 개발할 때 각 메서드의 특성에 맞게 @GetMapping, @PostMapping 등의 어노테이션을 선택합니다.
PUT과 PATCH의 차이점은 무엇인가요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!