기록물 저장소/활동

[SW 마에스트로] 면접 대비 Python의 이론과 예상 질문

모영이 2021. 3. 23. 00:11

아래의 사이트의 정리된 내용을 정리했습니다. 후에 정보가 추가되면 출처를 밝히도록 노력하겠습니다. 누락된 출처가 있고 정보가 섞여서 정리 될 수 있습니다. 저는 Python언어의 이론을 1도 모르기 때문에 여기 적힌 내용은 모두 구글링한 것입니다. 

github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Python

Python

Generator

Generator(제네레이터)는 제네레이터 함수가 호출될 때 반환되는 iterator(이터레이터)의 일종이다. yeild 구문을 사용해 데이터의 반환과 처리 시점을 정한다. 진입점이 여러 개. 원하는 시점에 원하는 데이터를 받을 수 있다.

 

클래스를 상속했을 때 메서드 실행 방식

__getattribute__()bound method를 가져온 후 메서드를 실행한다. 순서는 __mro__에 따른다.

GIL과 그로인한 성능 문제

멀티 스레드는 파일, 네트워크 IO 같은 IO bound 프로그램에 사용하고 멀티 프로세스를 활용해야함.
GIL :
스레드에서 사용되는 Lock을 인터프리터 레벨로 확장한 개념. 여러 스레드가 동시에 실행되는 것을 방지. 어느 시점이든 하나의 Bytecode만이 실행되도록 강제. 각 스레드는 다른 스레드에 의해 GIL이 헤제되길 기다린 후에야 실행.
GIL
의 장점 : 구현이 쉽다. 레퍼런스 카운팅을 사용하는 메모리 관리 방식에서 GIL 덕분에 오버헤드가 적어 싱글 스레드일 때 fine grained lock 방식보다 성능이 우월.

GC작동 방식

Garbage Collection(가비지 컬렉션)Reference Counting(레퍼런스 카운팅)을 통해 할당된 메모리를 관리한다. 참조횟수가 0이된 객체를 메모리에서 해제하는 레퍼런스 카운팅 방식을 사용하지만, 참조횟수가 0이 아니지만 도달할 수 없는 상태인 reference cycles(순환 참조)가 발생했을 때 GC로 해결.

Celery

메시지 패싱 방식의 분산 비동기 작업 큐다. 작업(Task)은 브로커(Broker)를 통해 메시지(Message)로 워커(Worker)에 전달되어 처리된다. 작업은 멀티 프로세싱, eventlet, gevent를 사용해 하나 혹은 그 이상의 워커에서 동시적으로 실행. 백그라운드에서 비동기적으로 실행 가능.

PyPy가 CPython보다 빠른 이유

Cpython은 일반적인 인터프리터인데 반해, PyPy는 실행 추적 JIT(Just In Time)컴파일을 제공하는 인터프리터이기 때문이다.
실행추적 JIT컴파일 : 메소드 단위로 최적화 하는 전통 JIT과는 다르게 런타임에서 자주 실행되는 루프를 최적화.
Rpython(Restricted Python) :
실행 추적 JIT컴파일을 C로 구현해 툴체인을 포함한다. PyPy 프로젝트 팀이 만든 일종의 인터프리터 제작 프레임워크다.

메모리 누수가 발생할 수 있는 경우

mutable객체를 기본 인자값으로 사용하는 경우
클래스 내 __del__메서드를 재정의하는 행위.

Duck Typing

만일 그 새가 오리처럼 걷고, 오리처럼 꽥꽥거린다면 그 새는 오리일 것이다. 객체의 실제 타입보다는 객체의 변수와 메소드가 그 객체의 적합성을 결정하는 것을 의미. 메소드 호출이나 변수 접근시 타입 검사를 하지 않으므로 duck typing을 넓은 범위에서 활용할 수 있다.

 

Timsort : Python의 내부 sort

Python의 내부 sorttimsort알고리즘으로 구현되어 있다. merge sortinsert sort가 병합된 형태의 안정정렬이다.