내 맘대로 CS 지식으로 분류하여 정리해보는 면접 질문 버전 투 😛
ORM
- object-relational-mapping
- 객체 지향적 프로그래밍을 돕기 위해 객체와 관계형 데이터베이스간의 차이를 연결시켜주는 것
- 쿼리를 수행해줌으로써 객체 지향적인 프로그래밍을 가능하게 해준다.
복잡도 ex) 빅오 표기법
알고리즘의 효율성을 알려주는 표기법. 효율성은 기본적으로 데이터의 개수가 주어졌을 때 연산 횟수를 의미하고, 얼마나 시간익 걸리는지에 대한 시간복잡도와 메모리 사용에 대한 공간 복잡도가 주어질 수 있다.
- O(1) 상수 시간 : 알고리즘이 문제를 해결하는데 오직 한 단계만 거칩니다.
- O(log n) 로그 시간 : 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듭니다.
- O(n) 직선적 시간 : 문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계를 가집니다.
- O(n^2) 2차 시간 : 문제를 해결하기 위한 단계의 수는 입력값 n의 제곱입니다.
- O(C^n) 지수 시간 : 문제를 해결하기 위한 단계의 수는 주어진 상수값 C 의 n 제곱입니다. (상당히 큰수가 됩니다)
출처: 링크
정렬?
- 요소들로 이루어져있고 인덱스로 접근할 수 있는 값
- 인덱스가 순서로 저장되어 삭제 시 뒷 요소들을 재정렬해주어야 하기 때문에 적합하지 않음
- 파이썬은 배열의 크기가 가변적이고 모든 데이터 타입을 담을 수 있다.
Array list & Linked list
- 배열은 element로 이루어져 있고 검색이 빠른 반면, 삭제 및 추가 시 인덱스 변화로 인해 취약하다.
- 링크드 리스트는 node(vertax)로 이루어져 있고 노드는 data field, link field로 구성되어 있다. (노드의 값과 다음 노드의 주소)
CORS
- 다른 출처의 리소스 요청을 제한하는 방식. CORS 와 SOP(Same Origin Policy: 같은 출처에서만 리소스를 공유할 수 있다)가 있다.
- cross-origin resoucre sharing
- 클라이언트는 요청할 때 헤더 Origin field에 요청 출처를 남기고, 서버는 응답할 때 헤더의 Access-Control-Allow-Origin field에 서버가 허용하는 출처를 남긴다. 이 때 클라이언트는 자신의 Origin과 Access-Control-Allow-Origin을 비교해서 내 요청값이 맞을 경우 응답을 받고, 아니면 응답을 버린다.
JWT 인증 방식이랑 세션 인증 방식의 차이점
- 유저가 로그인하면 세션id를 서버에 저장하고 헤더에 반환한다. 클라이언트는 쿠키에 세션 id를 저장하고 요청할 때마다 request hedader에 쿠키를 포함시킨다. 인증에 성공했을 때마다 세션값을 저장하기 때문에 데이터베이스에 부하가 걸릴 수 있다.
- 토큰은 전달받은 후 검증만 하면 되기 떄문에 서버에 부담이 덜하다. 다만 강제로 만료시킬 수 없는 문제가 있다.
세션과 쿠키 차이점
- 라이프사이클: 쿠키는 만료 기간을 설정할 수 있지만, 장기간 잡아놓으면 삭제할 때까지 유효하다(브라우저 종료하더라도) 반면 세션은 브라우저를 종료하면 끝난다.
- 저장: 쿠키는 클라이언트에 파일로 저장하지만, 세션은 서버에 저장된다. (출처: 링크)
Commit이 hash되는 이유
- 오프라인일 때도 커밋할 수 있기 위해. 정수 사용할 경우에는 Remote에서 최신값을 가져와야 함
- 해시하면 중복값이 없으므로 오프라인일 때에도 저장 가능
- commit id 외에 부모 hash값도 같이 저장해서 순서를 기억해 합칠 수 있다.