본문 바로가기
취준 기록

[취준] 알고리즘, 자료구조, CS 면접 대비 질문 리스트 (for 데이터 사이언티스트)

by davidlds 2025. 12. 19.
반응형

데이터 사이언티스트.
정말로 정보를 찾기가 힘든 직종이다.
취업하는 과정이 험난하고 막막하다.
나는 다음 세대가 더 편하게 취업을 했으면 하는 생각에 취업 준비 기록을 남긴다.

 

딥러닝 면접 대비를 위한 질문 리스트이다.

(다른걸 더 많이 물어본다. 알고리즘, 자료구조, CS 질문은 거의 안함.)

깃허브에 통합 버전이 있는데 안들어갈거 같아서 여기다 추가로 적는다.

 

원본은 여기.

여러 사이트와 깃허브를 참고했다.

그분들께 무한한 감사를 드립니다.

그런 의미에서 나의 리스트도 공공재로 쓰면 된다.

 

다만 면접 대비에서도 언급했던 것처럼 꼭 반드시 자신의 언어로 답변을 다시 준비하도록 하자.

면접 대비 글은 여기.

 

[취준] 5번째, 데이터 사이언티스트 면접 준비

데이터 사이언티스트.정말로 정보를 찾기가 힘든 직종이다.취업하는 과정이 험난하고 막막하다.나는 다음 세대가 더 편하게 취업을 했으면 하는 생각에 취업 준비 기록을 남긴다.코딩 테스트가

davidlds.tistory.com

 

면접대비 짤

 

 

면접

  • 자신감과 진정성

🧐 사용 방법

  • 질문에 대한 답변을 패드에 손으로 쓰며 외운다.
  • 마크다운의 목차(Outline)를 클릭하여 펼친다.
  • 질문만 보고 답변을 연습한다.

 

[알고리즘]

파이썬의 특징에 대해 설명하라

  • 파이썬은 인터프리터 언어입니다. 코드를 작성한 후 컴파일 없이 즉시 실행할 수 있습니다. 가독성이 높은 특징이 있고 머신러닝과 데이터 분석과 같은 다양한 분야에서 사용됩니다.

인터프리터와 컴파일러의 차이를 설명하라

  • 인터프리터는 소스 코드의 내용을 한번에 한줄씩 읽어들여서 실행합니다. 소스 코드를 해석하는데는 적은 시간이 걸리지만 실행 시간은 느립니다.
  • 컴파일러는 전체 프로그램 코드를 스캔하여 소스 코드(하이 레벨 프로그래밍 언어)를 오브젝트 코드(로우 레벨 프로그래밍 언어)로 바꾸어주는 역할을 합니다. 컴파일러는 소스코드를 해석하는데는 많은 시간이 걸리지만 한번 오브젝트 코드로 바꿔놓으면 실행 시간은 빠릅니다.

파이썬 데코레이터, 제너레이터, 이터레이터의 개념과 사용 예시를 설명하라

  • 데코레이터는 기존 함수의 코드를 수정하지 않고 앞뒤에 기능을 추가하고 싶을 때 사용하는 문법(@)입니다. 함수를 인자로 받아 새로운 함수를 반환하는 고차 함수 입니다. (파이토치 @torch.no_grad())
  • 제너레이터는 이터레이터를 생성하는 함수입니다. 일반 함수와 달리 return 대신 yield 를 사용합니다. 호출 시 함수의 실행을 일시 중지하고 값을 반환하며, 다음 호출 시 멈춘 지점부터 다시 실행됩니다. (파이토치 IterableDataset)
  • 이터레이터는 __next__ 메서드를 통해 데이터를 순차적으로 하나씩 꺼낼 수 있는 객체입니다. 리스트와 달리 모든 데이터를 메모리에 올리지 않고 현재 순서의 데이터만 다룹니다. (파이토치 DataLoader)

[자료구조]

리스트와 튜플의 공통점과 차이점을 설명하라

  • 공통점으로는 둘 다 여러 데이터를 담을 수 있는 컨테이너형 변수입니다. 그리고 인덱스를 통해 특정 요소에 접근할 수 있으며, iterable 합니다.
  • 차이점으로는 리스트는 mutable 하지만 튜플은 immutable 합니다. 수정할 수 없는 특징 때문에 리스트는 딕셔너리의 키 값으로 사용 불가능 하지만, 튜플은 사용 가능합니다. 또한 같은 개수의 for 문을 돌리면 튜플이 리스트보다 속도가 빠릅니다. 리스트는 객체가 생성된 후 크기 확장을 대비해 추가 메모리를 할당하지만 튜플은 크기가 고정적이기 때문에 최소 메모리만 할당하기 때문입니다.

파이썬의 메모리 할당 방법을 설명하라

  • 프라이빗 힙: 모든 객체와 자료구조를 저장하는 공간입니다. 프로그래머가 직접 접근할 수 없으며 파이썬 메모리 관리자가 관리합니다.
  • 레퍼런스 카운팅: 객체를 참조하는 변수의 수를 세어, 참조 횟수가 0이 되면 즉시 메모리를 해제합니다.
  • 가비지 컬렉션: 순환 참조 문제를 해결하기 위해, 주기적으로 세대별 가비지 컬렉터가 작동하여 메모리를 정리합니다.

파이썬 리스트와 딕셔너리의 차이를 설명하라

  • 리스트는 순서가 있는 시퀀스(Sequence) 자료형으로 인덱스를 통해 값에 접근합니다. (시간복잡도 O(n))
  • 딕셔너리는 키(Key)와 값(Value)의 쌍으로 이루어진 해시 테이블(Hash Table) 구조입니다. (시간복잡도 O(1))

해시 테이블(Hash Table)의 원리와 시간 복잡도를 설명하라

  • 해시 테이블은 Key를 해시 함수(Hash Function)에 넣어 얻은 인덱스에 Value를 저장하는 구조입니다.
  • Python의 dict가 이 구조이며, 평균적으로 O(1)의 시간 복잡도로 데이터를 조회할 수 있습니다.
  • AI 분야에서는 거대한 임베딩 테이블(Embedding Table)을 조회하거나, 데이터를 빠르게 로딩할 때 필수적으로 사용됩니다.

배열 연산에서 'Vectorization(벡터화)'를 설명하라

  • Vectorization은 루프(for문)를 사용하지 않고 배열 전체에 대해 한 번에 연산을 수행하는 기법입니다. (NumPy, PyTorch 등)
  • 기존 프로그래밍처럼 for문을 돌리는게 아니라 numpy나 tensor를 사용하면 속도가 훨씬 빠릅니다.

[컴퓨터과학]

동시에 10개 컴퓨터에 라이브러리를 설치하는 번거로움을 해결하는 방법을 설명하라

  • requirements.txt나 environment.yml 파일을 작성하여 버전 호환성을 맞추고, 이를 쉘 스크립트로 일괄 실행하여 설치를 진행합니다.
  • 만약 OS와 CUDA 버전 문제가 있다면 도커 이미지를 만들어 도커 허브에 올린 뒤 도커 풀을 하는 방법도 있습니다.

프로세스(Process)와 스레드(Thread)의 차이를 설명하라

  • 프로세스는 운영체제로부터 독립된 메모리 공간을 할당받는 실행 단위입니다.
  • 스레드는 한 프로세스 내에서 메모리(Stack 제외)를 공유하는 실행 단위입니다.
  • AI 학습 시 GPU 연산은 비동기적으로 처리되지만, 데이터 전처리와 로딩은 CPU에서 이루어집니다. 이때 프로세스 간 통신 비용(IPC)과 스레드 간 공유 메모리의 이점을 고려하여 데이터 파이프라인을 설계해야 합니다.

GIL(Global Interpreter Lock)에 대해 설명하고, 이것이 AI 학습(Dataloader)에 미치는 영향을 설명하라

  • GIL은 파이썬 인터프리터가 한 번에 하나의 스레드만 바이트코드를 실행하도록 잠그는 기능입니다. 이 때문에 파이썬에서는 멀티 스레드를 써도 CPU 연산 병렬 처리가 불가능합니다. 이는 파이썬의 치명적인 단점 입니다.
  • PyTorch DataLoader에서 num_workers를 설정할 때 멀티 스레드가 아닌 멀티 프로세싱을 사용하는 근본적인 이유가 GIL 때문입니다. 멀티 프로세싱은 각 프로세스가 독립된 메모리 공간을 가지므로 GIL의 영향을 받지 않고 병렬 처리가 가능합니다.

 

반응형