아래의 사이트의 정리된 내용을 정리했습니다. 후에 정보가 추가되면 출처를 밝히도록 노력하겠습니다. 누락된 출처가 있고 정보가 섞여서 정리 될 수 있습니다. 저는 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의 내부 sort는 timsort알고리즘으로 구현되어 있다. merge sort와 insert sort가 병합된 형태의 안정정렬이다.
'기록물 저장소 > 활동' 카테고리의 다른 글
[SW 마에스트로] 면접 대비 Unity와 C#의 이론과 예상 질문 (0) | 2021.03.24 |
---|---|
[SW 마에스트로] 면접 대비 Android Studio의 이론과 예상 질문 (0) | 2021.03.24 |
[SW 마에스트로] 면접 대비 JAVA의 이론과 예상 질문 (0) | 2021.03.22 |
[SW 마에스트로] 면접 대비 CS의 이론과 예상 질문 (0) | 2021.03.20 |
[SW 마에스트로] 면접 대비 코딩테스트 수행 내역 (0) | 2021.03.20 |