Pandas 면접 질문 - Pandas myeonjeob jilmun

기술면접 준비 - backend(Python/Django)

  • 목차

    1. 자료구조
    2. 알고리즘
    3. Operating System
    4. Data Base
    5. Design Pattern
    6. Network
    7. Git
    8. Python(⁂)

  • 자료구조

    1. Array

      • 데이터를 찾을 때 시간 복잡도 알고있나요?
      • 데이터를 삽입, 삭제하는 경우 시간 복잡도 무엇인가요?
        • 왜 그만큼 걸리나요?
      • array 대신 다른 자료구조 어떤거 사용하나요?
    2. Linked List

      • search할 때 시간 얼마나 걸리나요?
      • 삽입, 삭제할 때 시간 얼마나 걸리나요?
      • 얘가 Tree가 될때 비로소 그 유용성이 드러남
    3. Hash Table

      • search의 평균 시간복잡도 알고있나요?
      • 해시 테이블이 무엇인가요?
      • hash function은 어떤 조건을 갖추고 있어야하나요?
      • 해시 충돌이 발생할 때 어떤 해결방법이 있을까요?
        • 개방주소법(open address 방식)
        • 분리 연결법(Separate Chaining 방식)
    4. Stack

      • stack으로 미로찾기 구현해봤나요?
      • stack 두 개로 queue 구현 해봤나요?
      • stack으로 괄호 유효성 체크 해봤나요?
    5. Queue

      • stack과 어떤 차이점이 있나요?
      • queue를 사용해서 heap 구현 해봤나요?
    6. Graph

      • 인접 행렬 방식과 인접 리스트 방식 어떤 차이가 있나요?
      • 각각의 방식이 어떤 경우에 적합한가요?
    7. Tree

      • 스택 &큐와 대표적인 차이점이 무엇인가요? - 선형구조, 비선형구조
    8. 그래프와 트리의 차이점

    9. Binary Tree

      • 이진트리에 대해 설명해주세요

        • 언제 사용하나요?

        • heap이란 무엇인가요?

          • 힙을 왜 사용하나요?

          • 힙 생성 알고리즘의 시간복잡도 알고있나요?

          • 힙 정렬 알고리즘의 시간복잡도 알고있나요?

      • 포화 이진 트리(Perfect Binary Tree), 완전 이진 트리(Complete Binary Tree), 정 이진 트리(Full Binary Tree) 각각이 무엇인지 알고있나요?

    10. Binary Search Tree

      • BST 무엇인가요?
      • 어떤 경우에 장점이 극대화되나요?
      • 문제점은 무엇인가요? - 편향트리 가능성
    11. Binaray Heap

      • 언제 사용하나요? - 최대힙, 최소힙과 연관지어서 설명
      • 최대값, 최소값 search할때 시간복잡도 알고있나요?
    12. Red-Black Tree

      • RBT는 BST의 삽입, 식제 과정에서 발생하는 문제점을 해결하기 위한 자료구조인데요, 어떤 문제를 어떻게 해결한건가요?
    13. B+tree

    14. 추가해주세요

    15. 추가해주세요


  • Algorithm

    1. BigO

    2. DFS와 BFS의 차이

    3. Fibonacci에서 세 가지 (Recursion, DP, 반복) 방식에 대한 시간복잡도와 공간복잡도 차이

    4. 정렬 알고리즘의 종류와 개념, 시간복잡도

    5. Greedy 알고리즘

    6. 최소 신장 트리(Minimum Spanning Tree)란 무엇인가요?

    7. Kruskal 알고리즘 설명해주세요

      • 어떻게 cycle 생성 여부를 판단하나요?
      • 시간복잡도 설명해주세요
        • edge의 weight를 기준으로 sorting할 때 얼마나 걸리나요?
        • cycle 생성 여부 검사할 때 얼마나 걸리나요?
        • 그럼 전체 시간은 얼마나 걸리나요?
    8. Prim MST 알고리즘 설명해주세요

      • 시간복잡도 알고있나요?
    9. 추가해주세요

    10. 추가해주세요


  • Operating System

    1. 프로세스와 스레드의 차이
    2. 멀티 프로세스 대신 멀티 스레드를 사용하는 이유
    3. Thread-safe란?
    4. 동기화 객체의 종류
    5. 뮤텍스와 세마포어의 차이
    6. 스케쥴러란?
    7. 동기와 비동기란?
    8. 프로세스 동기화란?
    9. 메모리 관리 전략 아는대로 말해보라
    10. 가상 메모리란?
    11. 캐시의 지역성
    12. 교착상태(Deadlock)의 개념과 조건
    13. 사용자 수준 스레드와 커널 수준 스레드란?
    14. 외부 단편화와 내부 단편화란?
    15. Context Switching이란?
    16. Swapping이란?
    17. 추가해주세요
    18. 추가해주세요

  • Data Base

    1. 데이터베이스 풀이란?
    2. 정규화란?(1차, 2차, 3차 BCNF)
    3. 트랙잭션(Transaction) 이란?
    4. 트랜잭션 격리 수준이란? (Transaction Isolation Level)
    5. Join이란?
    6. SQL injection이란?
    7. DB에서 Index를 사용하는 이유과 장단점을 설명해주세요.
    8. Statement와 PrepareStatement는 무엇이고 차이점은?
    9. RDBMS와 NoSQL 무엇이고 차이점은?
      • Redis와 mongodb의 공통점과 차이점 설명해주세요.
    10. 효과적인 쿼리 저장 방법 아는대로 말해보라
    11. 옵티마이저(Optimizer)란?
    12. Replication이란?
    13. 파티셔닝(Partitioning)이란?
    14. 샤딩(Sharding)이란?
    15. 객체 관계 매핑(Object-relational mapping, ORM)이란?
    16. Django에서 ORM이 사용되는가?
    17. 추가해주세요
    18. 추가해주세요

  • Design Pattern

    1. 디자인 패턴의 개념과 종류
    2. Singleton 패턴이란?
    3. Strategy 패턴이란?
    4. Template Method 패턴이란?
    5. Factory Method 패턴이란?
    6. MVC1 패턴과 MVC2 패턴이란?
    7. Django에서 사용하는 디자인패턴은?
    8. 추가해주세요
    9. 추가해주세요

  • Network

    1. OSI 7계층이란?

    2. TCP/IP의 개념

    3. TCP와 UDP

      • TCP와 UDP가 무엇인지 차이점 위주로 설명해주세요.
    4. TCP의 3-way-handshake와 4-way-handshake란?

      • TCP의 연결 설정 과정(3단계)와 연결 종료 과정(4단계)이 차이가 나는 이유는 무엇인가?
      • 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?
      • 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유는 무엇인가?
    5. HTTP와 HTTPS의 공통점과 차이점

    6. HTTP 요청/응답 헤더에 대해 설명하라

    7. HTTP와 HTTPS 동작 과정에 대해 설명하라

      • HTTP의 문제점이 무엇인가요?
      • 보완 방법 아는대로 설명해주세요.
      • HTTPS는 SSL을 덮어쓴 HTTP라고 할 수 있는데 모든 웹 페이지가 HTTPS를 사용하는 것은 아니다. 어떤 경우에 HTTPS를 사용하지 않을까요?
    8. CORS란 무엇인가?

    9. GET 메서드와 POST 메서드란 무엇인가?

    10. 쿠키(Cookie)와 세션(Session)이란 무엇인가?

    11. DNS란 무엇인가?

      • DNS Round Robin 방식의 문제점이 무엇인가요? - 많은 공인 IP 필요함, 균등하게부하분산되지 않는다. 서버가 다운되도 확인이 불가하다.
    12. REST와 RESTful이 무엇인가?

    13. 소켓(Socket)이란 무엇인가?

    14. Socket.io와 WebServer의 차이

    15. Frame, Packet, Segment, Dategram 개념과 차이

    16. 우리가 Chrome을 실행시켜 주소창에 특정 url 값을 입력시키면 어떤일이 일어나는지 설명해주세요 (웹 통신의 큰 흐름이 이해하고 있는지 확인하려는 질문)

      (최대한 자세한 과정을 적어놓았음. 네트워크 직군이 아닌 이상 이렇게까지 길게 대답할 수는 없을 것 같고 다음 과정을 이해하고 최대한 축약해서 설명하면 됨. 더 궁금하면 꼬리질문으로 물어 볼 것임)

      • 먼저 브라우저에서 일어나는 일
        • url에 입력된 값을 브라우저 내부에서 결정된 규칙에 따라 그 의미를 조사한다.
        • 조사된 의미에 따라 HTTP Request 메시지를 만든다.
        • 만들어진 메시지를 웹 서버로 전송한다.
          • 이때 만들어진 메시지 전송은 브라우저가 직접 하는게 아니다. 브라우저는 메시지를 네트워크에 송출하는 기능이 없으므로 OS에 의뢰하여 메시지를 전달한다. 이때 OS에 송신을 의뢰할 때는 도메인명이 아니라 ip주소로 메시지를 받을 상대를 지정해야하는데 이 과정에서 DNS 서버를 조회한다.
      • 프로토콜 스택, LAN 어댑터에서 일어나는 일
        • 프로토콜 스택(운영체제에 내장된 네트워크 제어용 소프트웨어)이 브라우저로부터 메시지를 받는다.
        • 브라우저로부터 받은 메시지를 패킷 속에 저장한다.
        • 그리고 수신처 주소 등의 제어 정보를 덧붙인다.
        • 그런 다음, 패킷을 LAN 어댑터에 넘긴다.
        • LAN 어댑터는 패킷(패킷의 데이터를?)을 전기신호로 변환시킨다.
        • 신호를 LAN 케이블에 송출시킨다.
        • 프로토콜 스택의 역할이 무엇인가? - 통신 중 오류가 발생했을 때 각종 상황을 조절한다.
      • 허브, 스위치,라우터에서 일어나는 일
        • LAN 어댑터가 송신한 패킷은 스위칭 허브를 경유하여 인터넷 접속용 라우터에 도착한다.
        • 라우터는 패킷을 프로바이더(통신사)에게 전달한다.
        • 인터넷으로 들어가게 된다.
      • 액세스 회선, 프로바이더에서 일어나는 일
        • 패킷은 인터넷의 입구에 있는 액세스 회선(통신회선)에 의해 POP(통신사용 라우터)까지 운반된다.
        • POP를 거쳐 인터넷의 핵심부로 들어가게 된다.
        • 수 많은 고속 라우터들을 통해 패킷이 목적지를 향해 흘러들어간다.
      • 방화벽, 캐시 서버에서 일어나는 일
        • 패킷은 인터넷 핵심부를 통과하여 웹 서버측의 LAN에 도달한다.
        • 기다리고 있던 방화벽이 도착한 패킷을 검사한다.
        • 패킷이 웹 서버까지 가도 되는지를 판단하는 캐시 서버가 존재한다.
          • 액세스한 페이지의 데이터가 캐시 서버에 있으면 굳이 웹 서버에 의뢰하지 않고 바로 그 값을 읽을 수 있다.
      • 웹 서버에서 일어나는 일
        • 패킷이 물리적인 웹 서버에 도착하면 웹 서버의 프로토콜 스택은 패킷을 추출하여 메시지를 복원하고 웹 서버 애플리케이션에 넘긴다.
        • 메시지를 받은 웹 서버 애플리케이션은 요청 메시지에 따른 데이터를 응답 메시지에 넣어 클라이언트로 회송한다.
        • 왔던 방식대로 응답 메시지가 클라이언트에게 전달된다.
    17. 추가해주세요


  • Git

    1. Git이란 무엇인가?
    2. Git을 사용할 때의 장점이 무엇인가?
    3. 추가해주세요
    4. 추가해주세요

  • Python

    1. 파이썬은 인터프리터언어인가요?

    2. 인터프리터 언어와 컴파일 언어의 차이점이 무엇인가요?

    3. 인터프리터 언어와 컴파일 언어 종류 알고있나요?

    4. 버그를 찾거나 정적 분석을 할 수 있는 어플리케이션이 있나요?

    5. decorator는 언제 사용되나요?

    6. 리스트와 튜플의 차이점은 무엇인가요?

    7. 파이썬에서 메모리를 어떻게 관리되나요?

    8. Lambda와 Def의 주된 차이점은 무엇인가요?

    9. Docstring은 무엇인가요?

    10. Function call 혹은 A callable Object는 무엇인가요?

    11. Call by value는 무엇인가요?

    12. call by value와 call by reference의 차이점은 무엇인가요?

    13. *args는 무엇은 하는 앤가요?

    14. *kwargs는 무엇을 하는 앤가요?

    15. 파이썬에서 main() 메소드가 있나요?

    16. GIL이란 무엇인가요(⁂⁂⁂)?

      • 왜 GIL이 필요한가요?
        • thread-safe하다는게 어떤 뜻인가요?
        • 어떤 상황에서 성능 문제가 생기나요?
        • 다중 스레드가 동시에 실행될 때의 문제점이 무엇인가요?
        • race condition으로 인해 발생한 메모리 유실을 파이썬에서는 어떻게 해결할 수 있나요?
        • C에서는 이런 상황(이전 문제에서의 상황)을 막기위해 어떤 것을 사용하나요?
        • 멀티 스레드와 멀티 프로세서의 차이점이 무엇인가요?
        • 어떤 상황에서 멀티 스레드를 사용해야할까요?
      • 그래서 GIL의 문제를 어떻게 해결할 수있을까요? - cpu가 바쁘게 계산하는 일들은 numpy, scipy같이 GIL 밖에서 C코드로 연산할 수 있고, 병렬처리에 관해서는 멀티 프로세싱 사용할 수 있다. 굳이 thread 간의 동시처리가 필요하다면 Jython, IronPython, PyPy같은 것들 고려해볼 수 있다.
    17. 파이썬에서 스레드의 안정성은 어떻게 보장되나요?

    18. GC 작동방식을 설명해주세요

      • 레퍼런스 카운팅이 무엇인가요?
      • 순환 참조가 무엇인가요?
    19. 파이썬에서는 어떻게 메모리를 관리하나요?

      • 가비지 컬렉션(Garbage collection)과 레퍼런스 카운팅(reference counting)에 대해 설명해주세요.

      • 힙 매니저는 어떤 일을 하나요?

    20. 파이썬에서 튜플은 무엇인가요?

    21. 파이썬에서 딕셔너리는 무엇인가요?

    22. 파이썬에서 Set은 무엇인가요?

    23. 파이썬에서 딕셔너리는 어떻게 사용되나요?

    24. 파이썬의 리스트의 자료구조는 어떻게 생겼을까요?

      • C에서 공부한 연결리스트와 같은 건가요?
    25. 파이썬에서 클래스는 무엇인가요?

      • OOP란 무엇인가요?
    26. 파이썬 클래스에서 Attributes와 Methods는 무엇인가요?

    27. 런타임 클래스 속성에 값을 할당하는 방법은 무엇인가요?

    28. 파이썬에서 상속은 무엇인가요(⁂)?

      • 파이썬에서 Composition은 무엇인가요?
      • 클래스를 상속했을 때 메서드 실행 방식을 설명해주세요
    29. 파이썬에서 Errors와 Exceptions는 무엇인가요?

    30. Try / Exception / Finally는 어떻게 사용하나요?

    31. 파이썬에서 미리 정의된 조건에 대한 Exception를 어떻게 발생시키나요?

    32. 파이썬의 Iterator는 무엇인가요?

      • 왜 이터레이터를 사용하나요?
    33. iterators와 iterable의 차이는 무엇인가요?

      • 사용하는 함수가 있나요? 무엇인가요?
      • 이터러블한 객체와 시퀀스 객체의 종류와 차이점을 설명해주세요.
    34. 파이썬의 generator은 무엇인가요(⁂)?

      • 이터레이터와 제너레이터의 차이점을 설명해주세요.
    35. 파이썬에서 Enumerate는 무엇인가요?

    36. 파이썬에서 Globals() 함수는 무엇인가요?

    37. Self 는 어떤 키워드인가요?

    38. python debugger 사용해본적 있나요?

    39. pypy가 Cpython보다 빠른 이유가 무엇인가요?

      • JIT가 무엇인가요?
    40. 메모리 누수가 발생할 수 있는 경우 어떤 경우가 있을까요?


  • Django

    1. 장고 ORM의 원리를 설명해주세요
    2. 사용자의 요청이 API까지 도달하는 과정을 설명해주세요
      • 디자인 패턴이랑 연결해서 설명해주세요
    3. Django에서 Serializer 사용해봤나요? 무엇인가요?
    4. KeyError는 언제 발생하나요?
    5. 추가해주세요.

  • 그 외

    1. 도커와 VM의 차이점 무엇인가요?
    2. TDD란 무엇인가요?
      • 어떤 장점이 있나요?
    3. 객체 지향 프로그래밍이란 무엇인가요?
      • 객체 지향 개발 원칙은 무엇인가요?
    4. RESTful API가 무엇인가요?
    5. 본인이 생각하는 좋은 코드란 무엇인가요?

면접 보면서 느낀 개인적인 생각

면접 대답할 때 중요한 것은,

내가 사용하는 단어(혹은 용어)에 대해서는 그게 무엇인지 반드시 알고있어야한다는 점입니다.

예를 들어 "HTTP의 GET과 POST에 대해 설명해주세요"라는 질문에

" 둘 다 HTTP 프로토콜을 이용해서 서버에 무엇인가를 요청할 때 사용하는 방식입니다.

GET은 요청하는 데이터가 HTTP Request Message의 Header 부분의 url에 담겨서 전송됩니다. url에 붙어서 전송되기 때문에 데이터의 크기가 제한적이고 보안에 취약하다는 단점이 있습니다.

반면 Post는 HPPT Message의 Body 부분에 데이터가 담겨서 전송되기 때문에 보낼 수 있는 데이터의 크기가 GET방식 보다 크고 보안면에서 더 낫습니다."

라고 대답했다면 HTTP 프로토콜이 무엇인지, HTTP Request Message가 무엇인지, HTTP Message의 Body 부분이 무엇인지 간단하게 한 문장 정도로 설명할 수 있을 정도의 지식을 알고 있어야 꼬리질문에서 말문이 막히지 않을 수 있습니다.

답변을 외워서 말하는게 아니라는 느낌을 주는게 중요한 것 같습니다.

  • 참고 자료
    • https://github.com/WeareSoft/tech-interview/blob/master/contents/datastructure.md#1-data-structure
    • https://shelling203.tistory.com/31
    • https://github.com/JaeYeopHan/Interview_Question_for_Beginner