슈코딩

[신입 기술면접] 기술면접 스터디 정리 1 본문

코딩공부/기술면접

[신입 기술면접] 기술면접 스터디 정리 1

Roshu 2022. 10. 17. 22:18

 

 

💡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값을 허용하며 상위 테이블에서 해당 값을 삭제할 수 있음
  • 참조하는 데이터의 무결성을 높임
  • 관계를 설정하여 참조된 테이블의 데이터에 접근이 가능하게 해줌

 

Comments