Diary/TIL

2024-05-29) 기술 면접 준비

nsean 2024. 5. 29. 23:05

자료 구조

  • array, list, hash의 차이는?리스트는 가변 크기, 포인터로 연결된 노드, 삽입과 삭제 용이. 메모리 오버헤드가 존재
  • hash는 키-값 쌍 저장, 해시 함수를 통한 빠른 조회, 충돌 처리 필요.
  • array는 고정 크기, 인덱스를 통한 빠른 접근, 연속적인 메모리 할당. 요소 추가, 삭제가 힘듬

포인터주소를 지칭하고 있는 곳인데, 예를 들면 엘리베이터에서 포인터는 해당 층을 표시하는 버튼이라고 할 수 있음. 10층을 누르면 10층으로 이동하듯, 해당 위치를 가리키고 있는 변수다.

포인터를 사용할 때 주의할 점은, 어떤 주소를 가리키고 있어야만 사용이 가능함

포인터는 메모리 주소를 저장하는 변수임

DB

  • RDBMS는 먼저 쿼리를 처리하고 최적화해주는 쿼리 매니저와, 격리수준 제어를 담당하는 동시성 제어 매니와, 저장소 매니저, 리커버리 매니저로 분류되어있다.
  • 세마포어, 뮤텍스
  • 세마포어는 한 자원에 여러 스레드가 접근 가능하지만 접근 가능 한 최대 개수에 제한이 있다. 뮤텍스는 한 자원에 한 스레드만 접근 가능하다.
  • DDL, DML, DCL, TCL
  • DDL (Data Definition Language) 
    • 정의: 데이터 정의 언어는 데이터베이스의 구조(스키마)를 정의하는 데 사용된다.
    • Create, Alter, Drop
    DML (Data Manipulation Language)
    • 정의: 데이터 조작 언어는 데이터베이스의 데이터를 조작하는 데 사용됩니다.
    • SELECT, INSERT, UPDATE, DELETE
    DCL (Data Control Language)
    • 정의: 데이터 제어 언어는 데이터베이스 시스템의 보안과 권한을 관리하는 데 사용됩니다.
    • GRANT, REVOKE
    TCL (Transaction Control Language)
    • 정의: 트랜잭션 제어 언어는 데이터베이스의 트랜잭션을 제어하는 데 사용됩니다.
    • COMMIT, ROLLBACK, SAVEPOINT, RELASE SAVEPOINT
    •  
  • 인덱스(B-Tree, Hash Tree)
  • Hash tree의 경우 인덱스의 조회, 삽입, 삭제속도는 O(1)이지만, 데이터가 많아질 경우 충돌이 발생할 확률이 높고(이 경우 시간복잡도가 O(n)까지 올라감), 범위검색의 경우 Hash Tree는 O(n)까지 올라가기 때문에 최악의 경우에서도 O(logn)의 시간복잡도를 가진 B-Tree를 사용
  • ACID 개념
    • 정의: 트랜잭션이 완전히 수행되거나 전혀 수행되지 않아야 한다는 원칙입니다. 트랜잭션 내의 모든 작업이 성공적으로 완료되거나, 어떤 작업도 수행되지 않는 것을 보장합
    Consistency (일관성)
    • 정의: 트랜잭션이 성공적으로 완료되면 데이터베이스는 일관된 상태를 유지해야 한다는 원칙입니다. 모든 데이터베이스 규칙(제약 조건, 트리거 등)이 트랜잭션 전후에 모두 유지
    Isolation (고립성)
    • 정의: 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션은 독립적으로 수행되어야 하며, 서로의 작업이 간섭을 받지 않아야 합니다. 고립성은 트랜잭션 간의 간섭을 방지
    Durability (지속성)
    • 정의: 트랜잭션이 성공적으로 완료된 후에는 그 결과가 영구적으로 데이터베이스에 저장되어야 한다는 원칙입니다. 시스템 오류가 발생하더라도 완료된 트랜잭션의 결과는 손실되지 않
  • Atomicity (원자성)
  • DB 격리 수준1레벨 : 일반적인 db의 설정,3레벨 : 모든 트랜잭션이 순서대로 실행되는것처럼 나타납니다.
    • 더티 리드 (Dirty Read): 커밋되지 않은 변경 사항을 읽는 것. 나중에 롤백되면 무효화된 데이터를 읽게 됩니다.
    • 반복되지 않는 읽기 (Non-repeatable Read): 동일한 트랜잭션 내에서 동일한 쿼리를 여러 번 실행할 때 다른 결과를 얻는 것. 이는 다른 트랜잭션이 데이터를 수정했기 때문입니다.
    • 팬텀 리드 (Phantom Read): 동일한 트랜잭션 내에서 동일한 쿼리를 여러 번 실행할 때 다른 결과 세트를 얻는 것. 이는 다른 트랜잭션이 데이터를 삽입하거나 삭제했기 때문입니다.
  • 제 1,2,3 정규형의 개념
  • 1: 한 컬럼에는 한개의 원소만
  • 2: 1을 지키면서, 복합키에 대하여 부분 종속성이 제거
  • 3: 1,2를 지키면서 이항 종속성을 제거(A→B→C) 일경우, DB를 A→B, B→C로 변경
  •  
  • Redis캐싱도 가능해 실시간 채팅에 적합하며 세션 공유를 위해 세션 클러스터링에도 활용된다.이를 막기위한 백업 과정이 존재한다.
    • snapshot : 특정 지점을 설정하고 디스크에 백업
    • AOF(Append Only File) : 명령(쿼리)들을 저장해두고, 서버가 셧다운되면 재실행해서 다시 만들어 놓는 것
    데이터 구조는 key/value 값으로 이루어져 있다. (따라서 Redis는 비정형 데이터를 저장하는 비관계형 데이터베이스 관리 시스템이다)
    1. String (text, binary data) - 512MB까지 저장이 가능함
    2. set (String 집합)
    3. sorted set (set을 정렬해둔 상태)
    4. Hash
    5. List (양방향 연결리스트도 가능)
  • value 5가지
  • RAM은 휘발성
  • 보통 데이터베이스는 하드 디스크나 SSD에 저장한다. 하지만 Redis는 메모리(RAM)에 저장해서 디스크 스캐닝이 필요없어 매우 빠른 장점이 존재함
  • 파일 매니저와 dbms의 차이, 왜 dbms를 사용해야되는가?
  • 파일 매니저의 경우, 직관적이고, 비용이 매우 저렴하다. 하지만, 중요한 데이터일 경우 요구되는 무결성, 보안, 동시성에 있어 아무런 대비가 되어있지 않다. 추가적으로 대규모 데이터 처리와 다중 사용자 환경에 있어 제한적이다.