해당 게시글은 백엔드 CS 관련 지식 및 면접에 도움이 될 내용을 포함한 글입니다.
아직 미완성이며 다음에 계속해서 내용을 추가할 예정입니다.
backend
- 컴파일 타임과 런타임
- 컴파일 타임
개발자가 작성한 소스코드가 컴파일 과정을 통해 사용자가 실행 가능한 프로그램이 되는 과정
- 컴파일?
사람이 작성한 소스코드를 컴퓨터가 이해할 수 있는 기계어로 번역하는 행위
- 런타임
컴파일 과정을 마친 프로그램이 사용자에 의해 실행되는 과정
OS
python
- python과 PEP8은 무엇인가?
파이썬(python)은 1990년 귀도 반 로섬이라는 개발자에 의해서 개발된 인터프리터 언어이다.
그리고 python은 타입이 컴파일시 결정되는게 아닌 실행 시간에 결정되는 동적타입의 언어이다.
PEP8은 더 읽기 쉬운 python코드를 만들 수 있도록 안내하는 코딩 표준, 즉 권장 사항이다.
- 인터프리터? 인터프리터 언어?
인터프리터는 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행시키는 프로그램이다.
- 매개변수 기본값은 호출시 실행이 아니다.
def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
list2 = extendList(123, [])
list3 = extendList("a")
print("list1 = %s" % list1)
print("list2 = %s" % list2)
print("list3 = %s" % list3)
위의 결과와 같이 매개변수의 기본값은 호출시마다 생성되는 것이 아닌 함수 생성시 한번만 이루어진다.
- immutable? mutable?
파이썬에는 변경 가능한 객체인 mutable 과 변경 불가능한 객체인 immutable이 있다.
immutable 객체는 call by value의 속성을 띄며 일반적인 자료형과 튜플이 포함됨
mutable 객체는 call by reference의 속성을 띄며 리스트와 딕셔너리가 포함됨
- call by value? call by reference?
두 방식은 함수의 인자 전달 방식이다.
call by value : 변수를 복사한 값을 전달하는 방식
call by reference : 인자로 받은 변수의 주소 값을 전달하는 것
- 클로저(closure)란?
내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킨다.
예시
def calculate(m):
def mul(n):
return n * m
return mul
mul3 = calculate(3)
mul5 = calculate(5)
print(mul3(2))
print(mul5(2))
- 데코레이터란?
함수를 받아 코드를 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이다.
함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 사용한다 .
(중복된 코드를 방지하면서 깔끔하게 함수를 확장할 수 있다.)
- 파이썬은 어떻게 메모리를 관리?
파이썬은 프로그래머가 직접 메모리를 관리하지 않고 레퍼런스 카운트(Reference Counts)와 가비지 콜렉션(Automatic Garbage Collection)에 의해 관리됩니다.
- lambda와 def의 차이
- lambda
단일식 함수이며 함수 객체를 형성하고 반환합니다.
return문을 사용할 수 없습니다.
- def
여러식을 포함할 수 있으며 나중에 호출할 수 있는 이름을 지정합니다.
return문을 사용할 수 있습니다.
- *args, **kwargs이란?
앞에 붙어있는 *은 unpacking을 뜻한다.
- *args는 위치 가변 인자로 임의의 개수의 인자를 받는다.
- **kwargs는 키워드 가변인자로 임의의 개수의 키워드 인자를 받는다. ex) 딕셔너리 key-value
- GIL(Global Interpreter Lock)이란?
CPython에서의 GIL은 Python 코드(bytecode)를 실행할 때에 여러 thread를 사용할 경우, 단 하나의 thread만이 Python object에 접근할 수 있도록 제한하는 mutex 이다.
이 lock이 필요한 이유는 CPython이 메모리를 관리하는 방법이 thread-safe하지 않기 때문이다.
- thread safe?
멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없는것
- Iterable과 Iterator
- Iterable은 순회할 수 있는 모든 객체를 말한다.
string, list, tuple, dict, set 등이 포함된다.
- Iterator는 Iterable한 객체를 통해 만든 상태를 유지하며 순차 반환이 가능한 객체라 말할 수 있다.
여기서 말하는 상태란 index 등을 의미한다.
- Generator
간단하게 설명하면 Iterator 를 생성해 주는 function 이다.
일반적으로 Iterator의 상태 유지를 위해 yield를 사용한다.
reference
https://www.techbeamers.com/python-interview-questions-programmers/ [파이썬100가지 면접 질문]
https://shelling203.tistory.com/31 [파이썬100가지 면접 질문 번역 및 정리]
https://coding-factory.tistory.com/303 [컴파일러, 인터프리터]
https://velog.io/@suasue/Python-%ED%81%B4%EB%A1%9C%EC%A0%80 [클로저]
https://dc7303.github.io/python/2019/08/06/python-memory/ [파이썬의 메모리 관리]
https://engineer-mole.tistory.com/64 [Iterator와 Generator]
https://velog.io/@ygh7687/OOP%EC%9D%98-5%EC%9B%90%EC%B9%99%EA%B3%BC-4%EA%B0%80%EC%A7%80-%ED%8A%B9%EC%84%B1 [OOP의 원칙과 특성]