[자료구조, 데이터베이스] 기술면접 준비

김태인·2022년 9월 21일
0

기술면접 준비

목록 보기
1/3

Stack 과 Queue 자료구조에 대해 말하고 차이점에 대해 설명하시오

  • 스택과 큐는 일종의 규칙으로써 자료구조의 한 형태이며 배열 위에 어떤 규칙을 설정한 모습으로써
  • 큐는 FiFo라고도 하며 가장 먼저 입장한 요소가 가장 먼저 나가게 되는 ‘선입선출’의 형식을 가지고있고
  • 스택은 LiFo라고도 하고 마지막에 입장한 요소가 가장 먼저 나가게 되는 ‘후입선출’의 형식을 가지고 있습니다

Array와 Linked List 자료구조에 대해 말하고 차이점에 대해 설명해보시오

  • Array는 연속된 메모리 공간에 존재하고 Linked List는 메모리상에서 떨어져 있는 데이터들의 앞과 뒤의 데이터를 기억하는 형태로 존재합니다
  • Array에 저장되어있는 데이터를 조회할 때는 O(1)로 가능하지만 Linked List는 O(N)이 소요됩니다
  • Array에 데이터 추가 및 삭제할때는 O(N)이 소요되지만, Linked List는 O(1)로 가능합니다
  • Array는 컴파일 과정에서 메모리가 할당되는 정적 메모리 할당인 반면 Linked List는 런타임 환경에서 메모리가 할당되는 동적 메모리 할당입니다
    -파이썬의 어레이는 어디에 가까운지?
    파이썬 리스트 같은 경우는 링크드 리스트에 조금더 가깝다

RDB와 NoSQL은 무엇인가? 차이점 또는 장단점 위주로 설명해보시오

  • RDB는 관계형 모델을 기반으로하는 데이터베이스이며 이를 유지하고 관리하기 위한 시스템을 RDBMS라고 합니다
  • 정해진 스키마에 따라 데이터를 저장하고 명확한 데이터 구조를 보장하고있습니다
  • 데이터를 중복없이 저장할 수 있습니다
  • RDB는 복잡한 쿼리와 Join을 통한 연산이 가능한것이 장점입니다
  • 단점으로는 테이블간 관계를 맺고 있어 시스템이 커질 경우 Join 문이 많은 복잡한 쿼리가 만들어 질 수 있습니다
  • 또한 스키마로 인해 데이터가 유연하지 못하며, 변경될 경우 번거롭고 까다롭습니다
  • NoSQL은 관계형이 아닌 데이터 모델을 총칭합니다
  • NoSQL은 데이터 테이블에 명시된 제약이나 규칙이 없고 스키마가 고정적이지 않아 매우 유연합니다
  • 연산이 빠르며 빅데이터와 실시간 연산등에 적합합니다
  • 단점으로는 데이터 중복이 발생할 수 있으며, 중복된 데이터가 변경될 경우 수정을 모든컬렉션에서 진행해야합니다
  • 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않습니다

Join 의 뜻은 무엇인가? Inner Join과 Left (Outer) Join 에 대한 차이점을 설명해보시오

  • Join은 말그대로 어울리다 라는 의미를 가지고있습니다.
  • Inner Join은 내부 조인이라는 의미로써 두 테이블을 연결할 때 가장 많이 사용하는 조인이며 A와 B의 교집합을 조회하는 명령입니다
  • 이너조인에 한쪽이 데이터가 없을 경우엔 조회가 되지 않음 (확인 필요)
  • Left Outer Join은 A라는 테이블과 B라는 테이블이 있다면 두 테이블중 기준이 되는 테이블을 왼쪽에 두고 Join을 하라는 명령이며 A와 B의 합집합을 조회하는 명령입니다

Transaction 의 의미와 ACID 규칙에 대해서 설명해보시오

  • 데이터베이스의 상태를 변화시키기 위해 수행하는 논리적인 작업의 단위이자 데이터베이스 장애 발생시 데이터를 복구하는 작업의 단위
  • 트랜잭션이란 DB에서 수행되는 작업의 최소 단위이며 DB의 무결성을 유지하면서도 상태를 변화시키는 기능을 수행합니다
  • ACID : 원자성, 일관성, 독립성, 지속성을 일컫는 말
  • 원자성 : 트랜잭션이 DB에 모두 반영되거나 전부 안되어야 한다는 것 (프로젝트를 진행하다 에러가 났는데 데이터가 저장되는 경우가 있을텐데 with transaction.atomic()이라던가 데코레이터로 해당 내용을 wrapping하여 처리할 수 있습니다)
  • 일관성 : 트랜잭션 작업 처리 결과가 항상 일관되어야 한다는 것 (이전의 데이터타입이 string이라면 이후에도 string이어야 함)
  • 독립성 : 어느 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다는 것
  • 지속성 : 트랜잭션이 정상 처리 되었을 때 결과가 영구 반영되야 한다는 것 (트랜잭션이 끝나고나면 장애 혹은 이슈가 발생해도 저장된 데이터는 영향을 받지 않아야함)

Primary Key와 Foreign Key에 대해 각각 설명해보시오

  • Primary Key는 특정 컬럼내에 데이터가 유일하도록 보장 해주는데 사용되는 Key이며 테이블 내 하나의 Primary Key만 허용된다
  • Null값을 허용하지 않으며 상위 테이블에서 해당 값을 삭제할 수 없다
  • Foreign Key는 두 테이블 사이에 데이터를 연결시켜주는 관계형 데이터 베이스 테이블에 컬럼이다
  • 다른 테이블의 Primary Key를 참조할 수 있으며, 테이블 내에 한개 이상의 Foreign Key가 허용된다
  • Null값을 허용하며 상위 테이블에서 해당 값을 삭제할 수 있다

Deadlock이 무엇인지 설명하고 해결할 수 있는 방안을 말해보시오

  • 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태를 ‘교착 상태’ = 데드락 이라고 함
  • 이는 시스템으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다
    데드락 처리 방법
  • 데드락이 발생하는 4가지 조건 (상호 배제, 점유 대기, 비선점, 순환대기) 중 하나라도 만족되지 못하게 예방한다
  1. 상호 배제 (Mutual Exculsion)
    → 자원은 한 번에 한 프로세스만
  2. 점유 대기 (Hold and Wait)
    → 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 있는 자원을 추가로 점유하기 위해 대기하는 프로세스 존재
  3. 비선점 (No Preemption)
    → 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제적으로 빼앗을 수 없다
  4. 순환 대기 (Cicular wait)
    → 프로세스의 집합(P0,P1 ~ , PN)에서 P0이 P1이 점유한 자원을 대기하고 P1은 P2가 점유한 자원을 대기하고.. PN-1 은 PN이 점유한 자원을 대기하고 PN은 P0이 점유한 자원을 요구해야 한다
  • 프로세스에 대한 교착 상태 가능성을 미리 판단, 최대 자원을 파악하여 교착상태를 최대한 피하는 회피를 선택할 수 있다
  • 다음은 탐지로 프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 계속 주시하여 검출 시 상태 회복단계를 밟는다
  • 회복이란 교착상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시키는 것을 말함

쿠키와 세션의 차이에 대해 설명해보세요

  • 쿠키는 키-값 형태로 클라이언트의 정보를 로컬에 저장하는 역할을 하며 클라이언트 측에 저장되는 특성을 가짐
  • 속도측면에선 쿠키가 세션보다 빠르나 로컬에 저장되는 특성상 request에서 스니핑을 당할 우려가 있고 보안이 취약함
  • 세션은 서버측에 저장이 되며, 서버의 자원을 사용하게 되고 브라우저가 종료될 경우 사라짐
  • 쿠키보다 비교적 보안면에서 우수하며 그 이유는 세션은 쿠키를 이용해서 session id만 저장하고 그것으로 구분하여 서버에서 처리하기 때문
profile
코딩이 취미가 되는 그날까지

0개의 댓글