면접을 위한 cs 전공지식 노트 낙서장

스터디 책으로 3월 13 ~ 5월 1 총 8주간의 스터디이다.

1주차: 책 살펴보기

1주차는 책을 살펴보는 시간이다. 빠르게 책을 살펴봄으로써 내가 이 책을 읽는 이유, 저자가 하고자하는 이야기, 내가 이 책에서 관심있는 부분들을 읽고 공유하는 시간이다.

대부분의 사람들이 1장과 6장을 읽었다. 1장은 디자인 패턴 내용인데, 다수의 사람들이 면접 책의 1장이 왜 디자인 패턴일까? 의문을 품었다. 디자인 패턴은 모호한 부분이 있다. 모호하다고 이야기한 것은 외워서 될 부분이 아니라고 생각하기 때문이다. 또 다른 여러 이유도 있지만 일단 패스 1장 스터디가 끝나고 다시 생각해보자.

6장은 면접과 포트폴리오에 대한 내용이다. 예상 답변들도 나와있어서 좋았다. 훑어보면서 가장 뇌리에 박혔던 것은 <모르는 것은="" 모른다고하자=""> 이것인데, 완전 처음에는 모르는 것을 부끄럽다고 생각하지 않고 모른다고 했었다. 근데 1년이 지난 지금 모르는 것을 모른다고 하기가 어려워졌다. 하지만 어설프게 아는데 아는 척 하는 것은 금방 들통날 뿐더러 신뢰를 잃는다. 요즘 내가 딱 그러고 있어서 반성을 많이 했다. 모르는 것은 모른다고하자.

스터디 방향은 모의 면접을 위주로 진행한다. 예상 질문을 만들고 직접 면접을 해보고 답변을 정제해보는 것 까지가 스터디이다.

2주차: Chapter 1. 디자인 패턴과 프로그래밍 패러다임

예상문제

  • 싱글턴 패턴은 무엇인지? 싱글턴 패턴이 사용되는 예시를 들어주세요.
  • 싱글턴 패턴의 단점은 무엇인가요?
  • 옵져버 패턴이란 무엇인가요? 옵져버 패턴이 사용되는 예시를 들어주세요.
  • 프록시 패턴이란 무엇인가요? 프록시 패턴이 사용되는 예시를 들어주세요.
  • 함수형 프로그램을 설명해주세요. 순수함수란 무엇인가요?
  • SOLID 원칙에 대해서 설명해주세요.
  • 디자인 패턴 중 사용해 본 패턴이 있나요? 있다면 어떤 상황에서 어떻게 사용했고 왜 사용했는지 설명해주세요.

  • 의존성 주입의 장점과 단점, 원칙에 대해 설명해주세요

  • 전략 패턴이란 무엇인가요?
  • MVC 패턴은 무엇인가요? 또, 어떻게 동작하는지 설명해주세요.

  • 프런트 엔드 서버를 만들어서 백엔드 서버와 통신할 때 CORS 에러를 마주치는데, 이 때 어떻게 해결하나요?

  • 템플릿 메소드 패턴이란 무엇인가요? 사용되는 예시를 들어주세요.

  • NodeJS서버를 구축할 때, 앞단에 nginx를 두는 것으로 얻는 이점은 무엇인가요?

  • MVVM패턴과 MVC패턴의 차이는 무엇인가요?

예상문제 답변 :: 스터디 하기 전

싱글턴 패턴은 무엇인지? 싱글턴 패턴이 사용되는 예시를 들어주세요.

싱글턴 패턴은 하나의 클래스의 오직 하나의 인스턴스만 가지는 패턴입니다. 싱글턴 패턴은 주로 데이터베이스 연결에 쓰입니다.

싱글턴 패턴의 단점은 무엇인가요?

인스턴스를 하나만 생성해서 공유해서 쓰기때문에 의존성이 높아집니다. 또, 단위 테스트에서 테스트마다 독립적인 인스턴스를 만들기가 어렵습니다. 단위 테스트는 테스트 서로가 독립적이어야 하고 순서에 영향을 받지 않아야하는데, 싱글톤은 미리 생성된 하나의 인스턴스를 기반으로 구현되기 때문에 테스트가 어렵습니다.

옵져버 패턴이란 무엇인가요? 옵져버 패턴이 사용되는 예시를 들어주세요.

옵져버 패턴은 관찰자가 어떤 객체의 상태를 확인하다가 이벤트가 일어나면 객체 상태 변화에 따라 추가 변화 사항이 생기는 객체들에게 상태 변화를 알려주는 패턴입니다. 상태 변화는 메소드 등을 통해 알려줍니다. 사용되는 예시로는 트위터가 있습니다. A 사용자가 게시물을 올리면 A를 팔로잉하고 있는 팔로워들에게 A가 포스팅을 했다는 알림이 가게됩니다. 또, 이벤트 기반 시스템이나 MVC 패턴에서도 사용됩니다.

프록시 패턴이란 무엇인가요? 프록시 패턴이 사용되는 예시를 들어주세요.

프록시 패턴은 대상 객체에 접근하기 전에 가로채 대상 객체 앞단에서 인터페이스 역할을 하는 패턴입니다. 보안, 데이터 검증, 캐싱, 로깅에 사용합니다. 프론트 엔드와 벡엔드 서버가 통신할 때 마주하는 CORS 에러를 프록시를 통해 해결할 수 있습니다.

함수형 프로그램을 설명해주세요. 순수함수란 무엇인가요?

함수형 프로그램은 부수 효과없이 순수 함수만을 사용하는 프로그래밍 스타일입니다. 여기서 순수 함수란 출력이 입력에만 의존하고 부수효과가 없는 함수를 말합니다. 동일한 입력을 주었을 때 항상 같은 값을 반환합니다.

SOLID 원칙에 대해서 설명해주세요.

SOLID 원칙은 객체지향 설계의 5가지 원칙입니다. 한 클래스는 하나의 책임만 가져야 한다는 단일 책임 원칙. 변경에는 닫혀있고 확장에는 열려있어야 한다는 개방 폐쇄 원칙. 하위 타입 인스턴스로 바꾸어도 시스템이 문제없이 돌아가야 한다는 리스코프 치환 원칙. 하나의 일반적인 인터페이스보다 여러 개의 인터페이스를 만들어야 하는 인터페이스 분리 원칙. 상위 계층은 하위 계층의 변화에 영향 받지 않아야 한다는 의존관계 역전 원칙이 있습니다.

전략 패턴이란 무엇인가요?

전략 패턴은 객체의 행위를 바꾸고 싶을 때 직접 수정하지 않고 캡슐화하여 전략을 바꿔주는 것을 전략 패턴이라고 합니다. 예로는 결제가 있습니다. 결제를 할 때, 카카오 페이를 이용할 수도 있고, 네이버 페이를 이용할 수도 있고, 삼성페이를 이용할 수도 있습니다. 이때 결제 ‘전략’만 바꿔서 결제를 구현할 수 있습니다.

3주차 : Chapter2 네트워크

예상문제 & 답변

  • 좋은 네트워크란 무엇인가?
    많은 처리량을 처리할 수 있으며 지연 시간이 짧고 장애 빈도가 적으며 좋은 보안을 갖춘 네트워크

  • 트래픽은 무엇인가?
    네트워크에서 일정 시간동안 흐르는 데이터 양을 트래픽이라고 한다.

  • 네트워크 토폴로지란 노드와 링크가 어떻게 배치되어 있는지에 대한 방식이자 연결 형태이다. 이 토폴로지에 대해서 아는대로 설명하라. 또 이 토폴로지가 중요한 이유는 무엇인가?
    트리 토폴로지, 버스 토폴로지, 링형 토폴로지, 메시 토폴로지가 있다. 토폴로지는 네트워크 구조이기 때문에 병목 현상을 찾을 때 중요한 기준이 된다. 어떤 경로로 이루어져 있는지 알아야 회선을 추가하는 등의 조치를 취할 수 있다.

  • 네트워크 분류를 간단히 해라.
    LAN, MAN, WAN이 있다. LAN은 근거리 통신망을 의미하며 같은 건물같은 좁은 공간에서 운영된다. 전송 속도가 빠르고 혼잡하지 않다. MAN은 대도시 지역 네트워크를 의미하며 넓은 지역에서 운영된다. 속도는 평균이고 LAN보다는 혼잡하다. WAN은 광역 네트워크를 의미하며 국가 같은 넓은 지역에서 운영된다. 전송 속도는 낮으며 MAN보다 더 혼잡하다.

  • 네트워크 프로토콜이란?
    다른 장치들끼리 데이터를 주고받기 위해 설정된 공통된 인터페이스를 말한다. IEEE 또는 IETF라는 표준화 단체가 이를 정한다.

  • TCP/IP 4계층 모델은 통신 프로토콜의 집합인데, 이 4계층 모델 중 전송 계층에 대해 설명하라.
    링크 계층, 인터넷 계층, 전송 계층, 애플리케이션 계층으로 나눠져있다.

애플리케이션 계층은 응용 프로그램이 사용되는 프로토콜 계층이며, 실질적으로 사람들에게 제공하는 층이다.
전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때 중계 역할을 한다. 대표적으로 TCP와 UDP가 있다.
인터넷 계층은 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층이다. 링크 계층은 전선, 광섬유, 무선 등으로 실질적으로 데이터를 전달하며 장치 간에 신호를 주고 받는 ‘규칙’을 정하는 계층이다. 네트워크 접근 계층이다.

  • TCP 연결 해제 과정 중 4 웨이 핸드쉐이크 과정에서 time_wait 상태가 존재하는 이유가 무엇인지 설명해라.

패킷이 뒤늦게 도달하여 처리하지 못하게 되는 지연 패킷 문제점을 해결하기 위해 존재한다. 또 두 장치가 연결이 닫혔는지 확인하기 위해서 존재한다.

  • 내 컴퓨터에서 다른 컴퓨터로 데이터를 요청한다면 어떤 일이 일어날까? ( 계층간 데이터 송수신 과정으로 설명하라)
    애플리케이션 계층에서 전송 계층으로 보내는 요청 값들이 캡슐화되어 인터넷 계층, 링크 계층을 거쳐 해당 서버와 통신을 하고, 해당 서버에서는 링크 계층에서 애플리케이션 계층까지 비캡슐화 과정을 거쳐 데이터가 전송된다.

  • 애플리케이션 계층의 L7스위치나 L4스위치 등의 로드밸런서를 사용하는 이유를 설명해라.
    서버의 부하를 분산시킬 수 있다. 클라이언트의 요청을 여러 서버로 나눌 수 있기 때문에 트래픽 증가에 용이하다.

  • TCP/UDP 차이점을 설명해주세요.
    TCP는 패킷 사이의 순서를 보장하고 신뢰성을 구축해서 수신 여부를 확인하며, 가상회선 패킷 교환 방식을 사용한다. UDP는 패킷 사이의 순서를 보장하지 않고 수신 여부도 확인하지 않고 단순히 데이터만 주는 데이터그램 패킷 교환 방식을 사용한다.

  • TCP 연결 과정과 해제 과정을 설명해주세요.
    TCP 연결에는 3웨이 핸드쉐이크 과정을 거친다. 먼저 클라이언트가 서버에 클라이언트의 ISN을 담아 syn를 보낸다. 서버는 클라이언트의 syn를 수신하고 서버의 isn를 보낸다. 승인번호로는 클라이언트의 isn에 1을 더해서 보낸다. 클라이언트는 서버의 isn+1한 값인 승인번호를 담아 ack를 서버에 보낸다.

TCP 연결 해제에는 4웨이 핸드쉐이크 과정을 거친다. 먼저 클라이언트가 서버에 FIN으로 설정된 세그먼트를 보낸다. 서버는 클라이언트로 승인 세크먼트를 보내고 close_wait 상태로 들어간다. 클라이언트는 서버의 ack를 받고 fin_wait_2 상태로 들어간다. 서버는 ack를 보내고 일정 시간 후에 fin 세그먼트를 보낸다. 클라이언트는 time_wait 상태가 되고 다시 서버로 ack를 보내서 서버는 closed 상태가 된다. 클라이언트는 어느 정도 대기 후에 연결이 닫히고 클라이언트와 서버의 모든 자원 연결이 해제된다.

  • 로드 밸런싱은 무엇인가요?
    네트워크 트래픽을 균등하게 분배해주는 것이다.

  • DNS는 무엇인가요?
    도메인 이름을 ip주소로 변환하는 시스템이다.

  • HTTP와 HTTPS의 차이는 무엇인가요?
    HTTP에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다.

  • 처리량과 지연시간에 대해 설명해주세요.
    처리량은 링크를 통해 전달되는 단위 시간당 데이터양을 말한다. 지연시간은 요청이 처리되는 시간을 말한다. 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간을 말한다.

  • RTT란 무엇이고, 이를 줄이고 있는 사례를 아는대로 설명해주세요.
    RTT는 패킷이 목적이에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간이며 패킷 왕복 시간이다. RTT를 줄이기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩을 사용한다.

  • L7 로드밸런서와 L4 로드밸런서의 차이점을 설명해주세요.
    L4 로드 밸런서는 메시지를 기반으로 인식하고 IP와 포트를 기반으로 트래픽을 분산한다. L7는 IP와 포트 외에도 URL, HTTP 헤더, 쿠키 등을 기반으로 트래픽을 분산한다. 클라우드에서는 L7는 ALB 컴포넌트로 하며, L4는 NLB 컴포넌트로 한다.

  • PDU는 무엇이고, 효율성과 확장성의 특징별로 유리한 PDU를 설명해주세요.
    PDU는 네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위를 PDU라고 한다. 제어 관련 정보들이 포함된 헤더, 데이터를 의미하는 페이로드로 구성되어 있다. 비트로 송수신하는 것이 가장 빠르고 효율성이 높다. 문자열을 기반으로 송수신 할 때는 헤더에 다른 값들을 넣는 확인이 쉬워진다. 그래서 애플리케이션 계층에서는 문자열 기반으로 송수신 한다.

4주차 : Chapter3 운영체제

예상문제 & 답변

  • 캐시에 대해 설명하고, 캐시에서 지역성은 무엇을 말하는지 아는대로 설명하세요.
    캐시란 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말합니다. 메모리와 CPU 사이의 속도 차이가 너무 커서 그 중간에 레지스터 계층을 둬서 속도 차이를 해결하는데, 그 계층을 캐시 계층이라고 합니다. 캐싱 계층 말고 직접 캐시를 설정할 수 있습니다. 자주 사용하는 데이터를 기반으로 캐시를 설정할 수 있습니다. 자주 사용하는 데이터의 근거는 지역성입니다. 시간 지역성과 공각 지역성으로 나뉩니다. 시간 지역성은 최근 사용한 데이터에 다시 접근하려는 특성을 말하고 공간 지역성은 최근 접근한 데이터를 이루고 있는 공간이나 가까운 공간에 접근하는 특성을 말합니다.

  • 컨택스트 스위칭에 대해서 아는대로 설명하세요.
    PCB를 교환하는 과정입니다. PCB는 프로세스에 대한 메타데이터를 저장한 데이터를 말합니다. 컴퓨터는 많은 프로그램을 동시에 실행하는 것처럼 보이지만 어떠한 시점에서 실행되고 있는 프로세스는 단 한개이며(싱글 코어 기준), 많은 프로세스가 동시에 구동되는 것처럼 보이는 것은 다른 프로세스와의 켄텍스트 스위칭이 아주 빠른 속도로 실행되기 때문입니다.

  • 스레드와 멀티스레딩에 대해서 아는대로 설명하세요.
    스레드는 프로세스의 실행 가능한 가장 작은 단위입니다. 멀티스레딩은 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높습니다. 훨씬 적은 리소스를 소비하며, 한 스레드가 중단되어도 다른 스레드는 실행 상태가 가능하기 때문에 중단되지 않은 빠른 처리가 가능합니다. 하지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 주기 때문에 스레드로 이루어져 있는 프로세스에 영향을 줄 수 있습니다.

  • 교착상태에 대해서 아는대로 설명하세요.

    두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태를 말합니다. 원인으로는 4가지가 있습니다. 한 프로세스가 자원을 독점하고 있어 다른 프로세스들이 접근이 불가합니다. 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태로 대기가 발생합니다. 다른 프로세스의 자원을 강제적으로 가져올 수 없고, 서로가 서로의 자원을 요구하는 상황이 있습니다.

    해결 방법으로는 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계합니다. 교착 상태 가능성이 없을 때만 자원 할당되며 프로세스당 요청할 자원들의 최대치를 통해 자원 할당 가능 여부를 파악하는 은행원 알고리즘을 씁니다. 요즘엔 교착 상태를 처리하는 비용이 더 크기 때문에 교착 상태가 발생하면 사용자가 작업을 종료합니다.

  • 운영체제의 역할과 구조에 대해 설명해주세요.

    운영체제의 역할은 CPU 스케줄링과 프로세스 관리, 메모리 관리, 디스크 파일 관리, I/O 디바이스 관리가 있습니다. 운영체제 구조는 GUI(CUI), 시스템콜, 커널, 드라이브가 있습니다. 시스템 콜은 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 씁니다. 커널은 운영체제의 핵심 부분이자 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 합니다.

  • 프로세스와 스레드란 무엇인지 또 차이점은 무엇인지 설명해주세요.

    프로세스는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업이라는 용어와 거의 같은 의미로 쓰입니다. 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스(process)라고 부릅니다. 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 이것이 프로세스입니다. 각 프로세스는 별도의 주소 공간에서 실행되고 프로세스끼리 자원을 공유하지 않습니다. 스레드는 프로세스 내 작업의 흐름을 말합니다. 할당 받은 자원을 이용하는 실행의 단위입니다. 스레드는 프로세스 내에서 스택만 따로 할당받고 코드, 데이터, 힙 영역은 공유합니다.

  • 소켓이란 무엇인가요?

    동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터를 의미합니다. TCP와 UDP가 있습니다.

  • 커널이란 무엇인가요?

    커널은 운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분입니다. 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원들을 관리하는 역할을 합니다. 즉, 커널은 인터페이스로써 응용 프로그램 수행에 필요한 여러가지 서비스를 제공하고, 여러가지 하드웨어(CPU, 메모리) 등의 리소스를 관리하는 운영체제의 중추적인 역할을 합니다.

  • 힙 영역과 스택영역의 차이점을 설명해주세요.

    힙은 동적 할당할 때 사용되며 런타임 시 크기가 결정됩니다. 사용자가 직접 관리해야하는 영역입니다. 엑세스가 느립니다.

    스택에는 지역변수, 매개변수, 함수 등 정적 메모리가 저장되고 컴파일 시에 크기가 결정되며 동적인 특징을 갖습니다. LIFO 방식으로 관리됩니다. 엑세스가 매우 빠릅니다.

  • 선점형 스케줄링과 비선점형 스케줄링의 차이를 설명해주세요.

    비선점형 방식은 프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 중지하지 않습니다. 따라서 컨텍스트 스위칭으로 인한 부하가 적습니다. FCFS, SJF, 우선순위 알고리즘이 있습니다.

    선저형 방식은 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에 CPU 소유권을 할당하는 방식을 말합니다. 라운드 로빈, SRF, 다단계 큐 알고리즘이 있습니다.

  • 동시성과 병렬성의 차이를 설명해주세요.

    동시성은 동시에 실행되는 것처럼 보이는 것입니다. 여러 개의 스레드를 번갈아 가면서 실행되는 방식입니다.

    병렬성은 물리적으로 동시에 실행되는 것입니다. 그럴려면 멀티 코어에서 멀티 스레드를 동작시킵니다. 데이터 병렬성과 작업 병렬성으로 구분됩니다. 데이터 병렬성은 전체 데이터를 나누어 작업을 빠르게 처리하는 것입니다. 작업 병렬성은 서로 다른 작업을 병렬 처리하는 것입니다.

  • 뮤텍스와 세마포어의 차이에 대해 설명해주세요.

    뮤텍스는 프로세스나 스레드가 공유 자원을 lock()을 통해 잠금 설정하고 사용한 후에는 unlock()을 통해 잠금 해제하는 객체입니다. 잠금이 되면 다른 프로세스나 스레드는 잠긴 영역에 접근할 수 없습니다. 뮤텍스는 잠금 또는 잠금 해제라는 상태만 가집니다.

    세마포어는 일반화된 뮤텍스입니다. 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 여러 Process 혹은 Thread가 접근하는 것을 막아줍니다. (동기화 대상이 하나 이상)

    둘의 가장 큰 차이는 동기화 대상의 개수입니다.

  • 인터럽트란 무엇인가?
    어떤 신호가 들어왔을 떄 CPU를 잠깐 정지시키는 것을 말합니다.

  • 메모리에 계층을 두어 관리하는 이유는 무엇인가?
    경제성과 캐시때문에 계층을 두어 관리합니다. 계층 위로 올라갈수록 가격은 비싸지고 용량은 작아지고 속도는 빨라지는 특성이 있습니다.

  • 쿠키 로컬스토리지 세션스토리지의 차이점은 무엇인가?
    로컬 스토리지와 세션 스토리지의 차이점은 데이터의 영구성입니다. 로컬 스토리지의 데이터는 사용자가 지우지 않는 이상 계속 브라우저에 남아 있습니다. 하지만 세션 스토리지의 데이터는 윈도우나 브라우저 탭을 닫을 경우 제거됩니다.

  • 스와핑이 일어나는 과정에 대해 설명하라, 스레싱을 개선할 수 있는 방법을 설명하라
    메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것을 스와핑이라고 합니다. 스레싱은 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생하는 것이다. 이를 해결하기 위해 메모리를 늘리거나, HDD를 사용한다면 HDD를 SSD로 바꾸는 방법이 있다.

  • 컴파일이란 무엇인가요?
    컴파일러가 프로그램을 컴퓨터가 이해할 수 있는 기계어로 번역해주는 것을 말합니다.

  • PCB에서는 어떤 것들을 저장하나요?
    프로세스에 대한 메타데이터를 저장한 데이터를 말합니다. 프로세스 스케줄링 상태, 프로세스 ID, 프로세스 권한, 프로그램 카운터, CPU 레지스터, CPU 스케줄링 정보, 계정 정보, I/O 상태 정보로 이루어져 있습니다.

5주차 : Chapter4 데이터베이스

예상문제 & 답변

  • 데이터베이스에서 릴레이션은 무엇을 말하는 것일까요?

  • 정규화란 무엇이고, 정규형을 어떻게 만들 수 있을까요?

  • 트랜잭션에 대해서 아는대로 설명해주세요

  • 격리수준에 대해서 아는대로 설명해주세요

  • 인덱스는 왜 필요할까요 아는대로 설명해주세요

  • 유일성과 최소성이 무엇인가요?

  • 트랜잭션의 특징이 무엇인가요?

  • 복합인덱스는 설정할 때 올바른 순서를 설명해주세요.

  • 기본키는 어떤 조건을 만족해야 하나요?

  • 기본키를 인조키로 설정하는것과 자연키로 설정하는 것의 차이가 무엇이 있을까요?

  • 트랜잭션이란 무엇인가요?

  • 인덱스를 사용하면 얻는 이점이 뭔가요?

  • 팬텀리드, non-repeatable read, 더티리드에 대해 트랜잭션 격리 수준과 연관지어 설명해주세요

6주차 : Chapter5 자료구조

예상문제 & 답변

  • 배열(Array)와 연결리스트(Linked-List)의 차이는 무엇인가요? 각각의 장단점을 설명해주세요 배열은 순차적으로 데이터가 저장되는 정적 데이터 구조입니다. , 연결 리스트는 선으로 연결한 형태의 데이터 구조입니다. 배열은 미리 크기가 정해지는데, 연속된 메모리 주소를 할당받습니다. 따라서 인덱스를 갖게 되고, 인덱스로 임의로 접근이 가능합니다. 인덱스로 임의로 접근이 가능하기때문에 접근과 탐색에 용이합니다.

연결 리스트는 동적 자료구조입니다. 크기가 정해져있지 않습니다. 노드를 가지고 있고, 그 안에 데이터와 다음 데이터의 주소가 들어있습니다. 크기가 정해져있지 않기 때문에 추가 삭제에 용이하나, 데이터 검색시 순차적으로 찾아야합니다.

배열의 시간복잡도를 보면 인덱스를 알고 있는 경우 탐색은 O(1)이고 순차적으로 탐색시에는 O(n)입니다. 배열의 처음 또는 중간에 삽입 및 삭제의 경우는 삽입 지점 이후의 데이터를 옮겨야 하기 때문에 O(n)입니다. 배열의 끝에 삽입 및 삭제의 경우에는 O(1)입니다.

연결리스트의 경우 탐색은 순차적으로 확인을 해야하기 때문에 O(n)입니다. 삽입/삭제 시에도 탐색을 해야하기 때문에 O(n)이 걸립니다.

데이터의 추가, 삭제가 많은 경우 연결리스트가 데이터 검색이 많은 경우 배열이 유리합니다.

  • 스택과 큐는 무엇이고 차이는 무엇인가요? 스택과 큐는 각각 어디에 사용할수있나요? 스택은 후입선출 형태로 자료를 쌓아올리는 구조입니다. 사용 예로는 방문 기록, 재귀적 알고리즘 등이 있습니다. 큐는 선입선출 구조입니다. 사용 예로는 너비우선탐색, 캐시, 프로세스 대기 등이 있습니다.

  • 스택을 구현해주세요

  • 큐를 구현해주세요

  • 그래프와 트리의 차이는 무엇인가요? 그래프는 정점과 간선으로 이루어진 자료 구조입니다. 순환 혹은 비순환 구조를 가집니다. 트리는 그래프 중 하나로 트리 구조로 배열된 계층적 데이터 집합입니다. 트리는 루트 노드, 내부 노드, 리프 노드 등으로 구성됩니다.

  • 우선순위 큐가 무엇인지 설명해주세요 큐는 먼저 들어온 데이터가 먼저 나가는 자료 구조를 말합니다. 우선순위 큐는 먼저 들어온 순서대로 나가는 것이 아니라 우선순위에 따라 나가는 자료구조를 말합니다. 일반적으로 힙으로 구현됩니다. 힙은 완전 이진 트리 기반의 자료 구조이며 최소힙과 최대힙이 있고, 각 힙에 따라 다양한 특징을 지킨 트리를 말합니다.

  • 트리와 힙 구조에 대해 설명해주세요

  • 해시테이블에 대해서 설명해주세요.

  • 이진 탐색 트리(Binary search tree)는 무엇인가 ? 이진 탐색 트리는 노드의 오른쪽 하위 트리에는 노드 값보다 큰 값, 왼쪽 하위 트리에는 노드 값보다 작은 값이 들어 있는 트리를 말합니다. 이렇게 하면 검색을 하기에 용이해 집니다. 보통 탐색시 O(logn)이 걸립니다. 최악의 경우 O(n)이 걸립니다. 이진 탐색 트리는 삽입 순서에 따라 선형적일 수 있기 때문입니다.

  • 자가 균형 이진 탐색 트리(Self-balancing binary search tree) 란 무엇인가 ? 이진 탐색 트리의 경우 삽입 순서에 따라 선형적일 수 있습니다. 이 최악의 경우를 방지하고 스스로 균형을 잡는 구조를 이진 탐색 트리라고 합니다. 탐색, 삽입, 삭제 모두 시간 복잡도가 O(logn)이며 삽입, 삭제를 할 때마다 균형이 안 맞는 것을 맞추기 위해 트리 일부를 왼쪽 혹은 오른쪽으로 회전시키며 균형을 잡습니다.

  • 해시(Hash) 란 무엇인가 ? 단방향 암호화 기법으로 해시함수를 이용하여 고정된 길이의 비트열로 변경한 것을 말한다.

  • 해시 충돌 회피 기법이 무엇인가요 ?

results matching ""

    No results matching ""