Q1. 재귀 함수와 반복문의 차이점에 대해 설명해주세요.
Q2. Stack과 Queue의 차이점에 대해 설명해주세요.
스택은 프링글스 통같이 한쪽이 막혀있는 통과 같으며, 데이터를 순서대로 쌓는 자료구조로써, 후입선출의 구조를 가지고있다.
큐는 터널같이 앞뒤가 뚫려있는 통과 같으며, 데이터의 입력과 출력이 다른 자료구로조써, 선입 선출의 구조를 가지고있다.
#보충자료
- 스택(Stack)의 개념
- 한 쪽으로만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out) 형식의 자료 구조
- 메모리의 스택영역은 함수의 호출과 관계되는 지역변수외 매개변수가 저장되는 영역
- 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸.
- 컴퓨터의 시간지역성(최근에 참조된 자료가 다시 참조될 확률이 높다는 원리)을 활용할 수 있는 추상적 자료구조
- 스택(Stack)의 연산
- pop: 스택에서 가장 마지막에 입력된 항목을 활용하고 제거한다.
- push(item): item 하나를 스택의 가장 윗 부분에 추가한다.
- peek(top): 스택의 가장 위에 있는 항목을 활용한다(삭제 ㄴㄴ).
- empty(): 스택이 비어 있을 때에 true를 반환한다.
- full : 스택이 다 차있으면 true반환
- size : 스택의 크기를 리턴 (O(n)시간복잡도)
- 스택(Stack)의 사용 사례
- 재귀 알고리즘
- 재귀적으로 함수를 호출해야 하는 경우에 임시 데이터를 스택에 넣어준다.
- 재귀함수를 빠져 나와 퇴각 검색(backtrack)을 할 때는 스택에 넣어 두었던 임시 데이터를 빼 줘야 한다.
- 스택은 이런 일련의 행위를 직관적으로 가능하게 해 준다.
- 또한 스택은 재귀 알고리즘을 반복적 형태(iterative)를 통해서 구현할 수 있게 해준다.
- 웹 브라우저 방문기록 (뒤로가기)
- 실행 취소 (undo)
- 역순 문자열 만들기
- 수식의 괄호 검사 (연산자 우선순위 표현을 위한 괄호 검사)
- Ex) 올바른 괄호 문자열(VPS, Valid Parenthesis String) 판단하기
- 후위 표기법 계산
- 재귀 알고리즘
- 큐(Queue)의 개념
- 데이터의 입력과 출력이 다른 자료구조.
- 먼저 집어 넣은 데이터가 먼저 나오는 선입선출, FIFO(First In First Out)구조로 저장하는 형식
- 큐(Queue)의 연산
- add(item): item을 리스트의 끝부분에 추가한다.
- delete: 리스트의 첫 번째 항목을 제거한다.
- front : queue의 맨 앞을 가리킴 데이터를 꺼낼 수 있는 위치.
- rear : queue의 맨 뒤를 가리킴, 데이터를 넣을 수 있는 위치.
- 큐(Queue)의 사용 사례
- 너비 우선 탐색(BFS, Breadth-First Search) 구현
- 처리해야 할 노드의 리스트를 저장하는 용도로 큐(Queue)를 사용한다.
- 노드를 하나 처리할 때마다 해당 노드와 인접한 노드들을 큐에 다시 저장한다.
- 노드를 접근한 순서대로 처리할 수 있다.
- 캐시(Cache) 구현
- 우선순위가 같은 작업 예약 (인쇄 대기열)
- 선입선출이 필요한 대기열 (티켓 카운터)
- 콜센터 고객 대기시간
- 프린터의 출력 처리
- 윈도우 시스템의 메시지 처리기
- 프로세스 관리
- 너비 우선 탐색(BFS, Breadth-First Search) 구현
Q3. 인접 행렬과 인접 리스트의 차이점은 무엇인가요?
Q4. 탐욕(Greedy) 알고리즘을 사용하기 위해 성립해야 하는 조건에 대해 설명해주세요.
Q5. 이진 탐색 알고리즘(BST)이 데이터를 효율적으로 찾기 위해 탐색하는 과정을 설명해주세요.
Q6. 웹 브라우저에서 CORS 이슈가 발생하는 원인은 무엇이며, 서버에서 어떻게 해결할 수 있나요?
Q7. URL과 URI의 차이점이 무엇인가요?
Q8. DNS의 정의와 DNS가 필요한 이유에 대해 설명해주세요.
브라우저에 url를 치면 서버에서 ip를 찾아서 응답을 해줌 서버가 ip를 알아야하는데 여기서 DNS가 사용됩니다 Domaiun Name System의 약자로 도메인의 이름과 IP주소에 대한 정보를 관리하는 시스템을 말합니다.
인터넷 사용자는 IP주소를 몰라도 도메인 이름을 DNS가 IP주소로 바꿔주는 기능을 제공해줍니다.
동작과정으로는 브라우저는 브라우저에 있는 캐시에서 IP가 있나 찾아보고 없으면 컴퓨터에 저장된 host파일과 캐시에있는지 확인후 없으면 DNS서버에 IP주소를 요청하고 DNS는 IP주소를 응답합니다. 도메인을 계층적으로 관리하기위해 서버를 분리하며 이로인해 트래픽과 데이터를 분산시켜 안정적인 DNS서비스를 제공해줍니다.DNS 계층 구조는 tree구조로 가장 위쪽이 Root Domain 그 다음 가지가 top Level Domain(TLD) 밑으로는 세컨레벨과 서드레벨 이라고 부르는데 TLD밑으로는 서브 도메인이라고 부르기도한다. 상위서버는 하위서버의 위치를 알고 있다.
필요한 이유는 IP로 사용할때를 가정하면 IP가 변경이 됐을때 변경된 IP주소를 알아야하지만 DNS를 사용하면 uri 값은 고정이여서 IP주소가 변경되어도 uri만 쳐도 변경된 ip주소로 이동하게 됩니다.
Q9. REST API란 무엇인가요?
Representational State Transfer 클라이언트와 서버의 통신방식을 말하며 URI와 HTTP를 이용한 통신 목적의 아키텍처 스타일
RESTful > REST가 적용된 시스템
REST API > REST가 적용된 API
REST API를 제공하는 시스템은 RESTful이다
REST라는 개념은 6가지 조건을 만족해야한다
1. 일관된 인터페이스 : URI사용,HTTP메소드 사용, RPC미호출 등의 지정된 인터페이스를 준수한다
2. 클라이언트/서버 : 클라이언트는 서버에 요청 메시지를 전송하고 서버는 요청에 대한 응답메시지를 전송한다.
3. 비연결성 : 세션 등 이전 상황 (문맥) 없이도 통신할 수 있다.
4. 캐시 가능 : 서버의 응답 메세지는 캐싱(저장후 재사용) 될 수 있다.
5. 계층화된 시스템(Layered system) : 계층별로 기능이 분리된다. 그러므로 중간 계층의 기능(로드 밸런싱, 서버증설, 인증 시스템 도입 등)이 변경되어도 통신에 영향을 주지 않는다.
6. 주문형 코드(code on demand) : 손쉬운 데이터 처리를 위해 서버는 클라이언트에서 실행될 스크립트를 전송할 수 있다.
REST는 아키텍처 스타일이다 이는 아키텍처 제작 시 사용되는 가이드 정도의 의미로 사용되며 명확히 준수해야할 표준은 없다.
그렇다 보니, 겉으로는 REST를 표방하고 있으나 특히 "1.일관된 인터페이스" 조건을 준수하지 않아 REST가아닌경우가 많다.
Q10. Client Side Rendering 과 Server Side Rendering 의 차이점에 대해서 설명해주세요.
Q11. 트랜잭션에 대해 설명해주세요.
트랜잭션은 저희가 통신을 통해서 주고받은 데이터를 데이터베이스 라는 저장소에 저장하거나 수정하거나 있는 데이터를 삭제하거나 이러한 작업을 통해 데이터베이스의 상태를 변화시키는 작업의 단위를 말합니다. 트랜잭션에는 몇가지 특징을 갖게 되는데 첫번째론 원자성으로 하나의 트랜잭션일 발생할 때 이 트랜잭션에서 발생하는 모든 작업들이 모두 성공하거나 실패해야된다는것을 의미합니다 일부는 성공하고 일부가 실패하게 되면 데이터 정보 자체가 신뢰성을 잃기 때문에 원자성이 중요합니다. 두번째는 일관성으로 트랜잭션 작업 처리 결과가 항상 일관성을 가져야한다 라는것을 의미하며 데이터베이스가 가지고있는 제약이나 규칙을 트랜잭션이 지켜야한다는것을 의미합니다. 세번째론 독립성으로 모든 트랜잭션들이 각각 독립적이여야된다것을 의미하며 트랜잭션이 서로 영향을 주거나 끼어들수 없게 해야된다는것을 의미합니다 마지막은 지속성으로 트랜잭션이 완료가 되고나면 그것의 해당 결과나 기록이 영구적으로 보존이되어야한다는것을 의미합니다.
Q12. Foreign Key와 Primary Key에 대해 설명해주세요.
Q13. IOC에 대해 설명해주세요.
Q14. Spring에서 AOP가 필요한 이유에 대해 설명해주세요.
Q15. 스프링 컨테이너(Spring Container)에 대해 설명해주세요.
Q16. DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요.
'앞으로 공부할것들' 카테고리의 다른 글
[Spring MVC][기술면접] (0) | 2022.11.16 |
---|---|
[어노테이션 정리][계속해서 수정중] (0) | 2022.11.13 |
[Spring][NodeJs] (0) | 2022.10.18 |
과제 - 요약하고 정리하기 (0) | 2022.10.02 |
[DB]Docker (0) | 2022.09.20 |