슈코딩
[신입 기술면접] 기술면접 스터디 정리 1 본문
💡Stack과 Queue 자료구조에 대해 말하고 차이점에 대해 설명하시오
Stack 이란?
- 같은 구조와 크기의 자료를 Top방향으로만 쌓는 구조
- 가장 최근에 삽입된 데이터가 가장 위에 쌓이며 가장 먼저 삭제
- FIFO 후입선출의 구조
Queue 란?
- 한쪽에서는 삽입, 다른 한쪽에서는 삭제를 담당하는 구조
- 삽입연산이 이루어지는 Rear, 삭제연산이 이루어지는 Front의 구성
- LIFO 선입선출의 구조
💡Array와 Linked List 자료구조에 대해 말하고 차이점에 대해 설명해보시오
Array (배열)
- 특정 크기 만큼 연속된 메모리 공간에 데이터를 저장하는 자료구조
- 연속된 메모리 -> 데이터의 주소를 통해서 데이터 조회 가능
- 데이터를 추가하는 경우, 한자리를 비워야되는데 모든자료가 한칸 밀리게 되어 추가,삭제는 지양
Linked List (연결리스트)
- 메모리 상에서 떨어져 있는 데이터들의 앞과 뒤의 데이터를 기억하는 형태
- Node는 연속된 공간에 존재하지 않기에 데이터를 조회하려면 처음부터 순차적으로 접근해야함
- 메모리 관리가 용이
- 추가 및 삭제는 O(1)로 가능
차이점
- Array에 데이터 추가 및 삭제 시 O(N)이 소요, Linked List는 O(1)만큼 소요
- 데이터의 주소를 찾는 것에는 Array가 용이하고, 데이터 추가 및 삭제를 위한 것에는 Linked List가 더 용이
- 수정을 할때마다 동적으로 Linked List 크기가 결정되어 Array에 비해 처음부터 큰 공간을 할당할 필요가 없음
- Array와 Linked List는 trade off의 관계를 갖는다. 즉, 어떤 특성이 좋아지면 다른 특성이 나뻐지는 상황을 의미
#파이썬의 List는 Linked List 기능이 함께 포함되어 있어서 Linked List에 조금 더 가깝다.
💡RDB와 NoSQL은 무엇인가? 차이점 또는 장단점 위주로 설명해보시오
RDB (Relational DataBase)
- 관계형 모델을 기반으로하는 DataBase, 이를 관리하기 위한 시스템을 RDBMS (Management System) 라고 함
- 모든 데이터를 2차원의 테이블 형태로 표현
- 정해진 스키마에 따라 데이터를 저장하고 명확한 데이터 구조를 보장
- 스키마로 인해 데이터가 유연하지 못하며, 스키마가 변경될 경우 번거롭고 까다로움
- 외래 키와 같은 관계가 설정되어 있기 때문에 결제 등의 복잡한 트랜잭션 처리에 강함
- 테이블 설계시 정규화를 통해 데이터 중복 저장 없앰
- 테이블간의 Join연산이 가능
- 단점, 테이블간 관계를 맺고 있어 시스템이 커질 경우 Join 문이 많은 복잡한 쿼리가 만들어 질 수 있음
NoSQL (Not Only SQL)
- 비관계형으로 데이터를 저장하는 형태
- 테이블(혹은 컬렉션 혹은 또 다른 명칭) 사이에 딱히 명시된 제약이나 규칙이 없음
- 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있음
- key-value나 key-value가 계층화 된 document로 저장하는 것이 일반적
- 자유롭게 데이터 구조를 설정 가능
- 연산이 빠르며 빅데이터와 실시간 연산등에 적합
- 복잡도가 떨어지기에 훨씬 대용량의 데이터를 저장, 관리하기에 용이
- 데이터 분산이 용이하여 성능 향상을 위한 scale-up 뿐만 아니라 scale-out 또한 가능함
- 단점, 데이터 중복이 발생할 수 있으며, 중복된 데이터가 변경될 경우 수정을 모든컬렉션에서 진행해야함
- 단점, 서로 depth가 깊은 곳에 data가 있다면 다른 컬렉션 끼리는 JOIN이 힘들 수 있음
💡Join 의 뜻은 무엇인가? Inner Join과 Left (Outer) Join 에 대한 차이점을 설명해보시오
Join
- 두개의 테이블에 관계를 맺어 원하는 데이터를 조회하는 방법
- ORM에서 FK로 참조를 할 때 자주 발생
Inner Join
- 서로 연관된 내용만 검색하는 조인 방법
- A와 B에 대해 수행하는 것은, A와 B의 교집합을 의미함
Outer Join
- 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법
- A와 B에 대해 수행하는 것은, A와 B의 합집합을 의미함
- 어떤 행을 기준으로 outer join 하느냐에 따라서 left, right, full outer join으로 나뉨
💡Transaction 의 의미와 ACID 규칙에 대해서 설명해보시오
Transaction
- 데이터베이스에서 쿼리문에 의해 발생하는 일정 작업의 단위
- 작업의 완전성을 보장
- 즉, 작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능
- 하나의 트랜잭션은 Commit(작업완료) 되거나 Rollback(취소) 됨
트랜잭션의 특성 ACID
- 원자성(Atomicity) : 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 함
- 일관성(Consistency) : 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 함
- 독립성(Isolation) : 둘 이상 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없음
- 영속성(Durability) : 완료된 결과는 영구적으로 반영되어야 함
💡Primary Key와 Foreign Key에 대해 각각 설명해보시오
Primary Key (기본키)
- 테이블 내의 각각의 데이터를 유일하게 구분하는 키
- 테이블 내에 하나의 PK만 허용
- Null값을 허용하지 않고 상위 테이블에서 해당 값을 삭제할 수 없음
Foreign Key (외래키)
- 다른 테이블의 PK(기본키)를 현재 테이블로 참조하여 사용하는 키
- 테이블 내에 한개 이상의 FK(외래키)가 허용
- Null값을 허용하며 상위 테이블에서 해당 값을 삭제할 수 있음
- 참조하는 데이터의 무결성을 높임
- 관계를 설정하여 참조된 테이블의 데이터에 접근이 가능하게 해줌
'코딩공부 > 기술면접' 카테고리의 다른 글
[기술면접] Django 50문 50답 31~45 (0) | 2022.10.26 |
---|---|
[기술면접] Django 50문 50답 16~30 (0) | 2022.10.25 |
[기술면접] Django 50문 50답 1~15 (0) | 2022.10.24 |
[신입 기술면접] 기술면접 스터디 정리 3 (0) | 2022.10.22 |
[신입 기술면접] 기술면접 스터디 정리 2 (0) | 2022.10.21 |
Comments