출처 : https://www.edureka.co/blog/interview-questions/python-interview-questions/#basicinterviewquestions
Python 기본 질문
- list 와 tuple 의 차이
- list : 가변성, 더 느림
- tuple : 불변성(수정 불가), 더 빠름 - Python 주요 특징
- interpreted language : 실행 전 컴파일이 필요 없음
- dynamically typed : 변수 사용 전 선언할 필요 없음
- 객체지향적 프로그래밍 : 상속 등과 함께 class(객체) 정의 허용
- 함수가 first-class object : 변수에 할당 가능, 다른 함수에서 반환 및 전달 가능 - Scripting & Programming Language
- Scripting : 자동화 가능 / 주어진 데이터에서 정보 제공
- Programming : script 또는 다른 상위 코드 내에서 실행 - PEP 8
- 파이썬 개선 제안서 : 어떻게 코드 구상할지 알려주는 스타일 가이드
- ex1) indentation == 4 spaces (tab보단 space)
- ex2) maximum line length == 79 - memory 관리
- python private heap space에서 관리됨
- 내장된 garbage collector가 있어서 사용되지 않는 메모리 재사용 가능 - namespace
- 이름 충돌 피하기 위해 고유한 이름인지 확인하는 이름 지정 시스템 - PYTHONPATH
- 모듈이 import되는 환경변수 - Global & Local Variables
- Global Variables : 모든 global 영역에서 접근 가능한 변수
- Local Variables : function 안에서 정의되는 변수 - 대소문자 구별?
- Python은 대소문자를 구별하는 case-sensitive한 언어 - 형변환 방식
- int() / float() / ord() : char → int / hex() : int → 16진수 / oct() : int → 8진수 / complex() : 실수 → 복소수
- tuple() / set() / list() / dict() / str() - Array와 List 차이
- array : 요소의 data type이 동일해야 함 (import array)
- list : 요소의 data type 상관 없음 - __init__
- method or constructor
- 새로운 객체나 class가 생성됐을 때 메모리 할당 - lambda 함수
- 이름이 정해져 있지 않은 함수로, 여러 parameter 받아 결과 return
- a = lambda x,y : x+y - self
- class의 인스턴스 또는 객체 - break / continue / pass
- break : loop 종료
- continue : loop의 일부분 skip
- pass : 실행 건너뛰기 - [::-1] 의미
- 순서 반대로 - list 순서 randomize
- from random import shuffle - iterators
- collection이나 문자열 하나씩 데이터 처리할 수 있는 iterable 객체의 iterator를 return
- it = iter(객체명) → next(it)로 객체 하나씩 return - generator
- iterator의 특수 함수 형태
- 함수 내 yield를 통해 데이터 하나씩 return - range와 xrange 차이
- 둘 다 일정 간격 정수 반환
- xrange == generator의 yield : range보다 더 적은 메모리 사용하며, type이 다름 (range는 list / xrange는 xrange) - pickling과 unpickling
- pickle : 어떤 객체도 문자열 표현으로 변환하여 파일로 dump (import pickle; pickle.dump(dir, file);)
- unpickling : 저장된 문자열 표현에서 객체로 변환 - help / dir
- help() : 해당 documentation 반환
- dir() : 내장 함수 이름 list 반환 - Python 나갈 때 왜 모든 memory가 할당 해제되지 않는지?
- C에서 예약된 메모리 할당 해제는 불가능 - ternary operator (삼항 연산자)
- [true_value] if [condition] else [false_value] - *args / **kwargs
- *args : 얼마나 많은 argument가 함수에 전달될지 모르는 경우 or 저장된 list, tuple을 함수에 전달할 때 사용
- **kwargs : 얼마나 많은 keyword argument가 함수에 전달될지 모르는 경우 or 저장된 dictionary를 함수에 전달할 때 사용 - re module 기능
- split() : regex pattern으로 string을 list로 쪼개기
- sub() : regex pattern에 match되는 부분 변경
- subn() : sub() + 변경된 횟수 반환 - numpy array 장점 (list와 비교했을 때)
- list는 vector화된 작업(addition, multiplication) 지원 X
- numpy array가 더 빠르고 효율적 - array에 value 더하기
- append(ele)
- extend([ele1, ele2, ele3])
- insert(idx, element) - array에 value 빼기
- pop(idx)
- remove(element) - Shallow / Deep copy
- Shallow copy : 새로운 instance가 생성될 때 사용
- Deep copy : 이미 복사된 값 저장할 때 사용 - Multithreading
- 멀티스레딩 패키지가 있음
- 하지만 Python은 GIL(Global Intervirator Lock) 구조로 되어있기 때문에 멀티스레딩을 하더라도 같은 CPU가 교대로 작업됨 - Compilation & Linking
- 새로운 확장자를 오류 없이 적절하게 컴파일하도록 함
- Linking은 컴파일된 절차 통과해야 수행됨
- 새로운 확장자 파일을 Modules/ 경로에 넣고 Setup.local 파일에 행을 추가하고 spam file.o를 이용하여 실행 후 make 명령어로 재빌드
객체지향 관련 질문
- 상속 (Inheritance)
- 다른 클래스의 모든 멤버(속성, method) 받는 것
- 파이썬은 multiple inheritance도 가능해서 여러 부모 class로부터 상속 가능 - Monkey Patching
- 런타임에 class / module 동적 수정 - Overloading & Overriding
- Overloading : 같은 공간 내 동일 이름 함수 정의 BUT 매개변수 유형, 개수 다르게
- Overriding : 상위 class의 method를 하위 class에서 재정의 - Call by reference & Call by object
- Call by value : 인자로 받은 값을 복사하여 처리
- Call by reference : 인자로 받은 값의 주소값을 참조
- Call by object : Python 내에서는 모든 것을 객체로 보고 immutable object(int, float, str, tuple)은 call by value로 동작 / mutable object(list, dict, set)은 call by reference로 동작 - Polymorphism
- 부모 class 내의 method를 자식 class에서 overriding - Encapsulation
- code와 data를 하나로 묶어 외부에서 code를 통해서만 data에 접근 가능하도록 하는 정보 은닉 방식 - data 추상화
- 필요 세부사항만 제공하고 구현은 숨기는 것
- 추상 class 사용 - Access specifier (접근 제어자)
- 따로 public, private 지정해주지 않음 - 비어 있는 class 만들기
- class a: pass
- class 내 개체 밖에서 정의 가능 - object() 역할
- 특징 없는 객체 반환, 매개변수 필요 X
파이썬 코딩 예제
Bubble sort
def bubblesort(a):
b = len(a)-1
for x in range(b):
for y in range(b-x):
if a[y] > a[y+1]:
a[y], a[y+1] = a[y+1], a[y]
return a
Star tree
def startree(r):
for x in range(r):
print(' '*(r-x-1) + '*'*(2*x+1))
피보나치 배열
def fibonacci(num):
if num < 2:
return num
else:
return fibonacci(num-1) + fibonacci(num-2)
def fibonacci2(num):
a, b = 0, 1
for i in range(num):
a, b = b, a+b
return a
소수 판별
def primenumber(num):
if num != 1:
for f in range(2, num):
if num % f == 0:
return False
else:
return False
return True
### 에라토스테네스의 체
n = 1000
a = [False, False] + [True]*(n-1)
primes = []
for i in range(2, n+1):
if a[i]:
primes.append(i)
for j in range(2*i, n+1, i):
a[j] = False
print(primes)
Django 관련 문제
- Flask vs Pyramid vs Django
- Flask : 간단한 구조 제공 + 외부 library 사용 필요
- Pyramid : 상대적으로 무거움
- Django : 구현 위한 기본 틀을 제공해줌 + ORM(객체 관계 매핑) - Django 아키텍쳐
- MVT : Model + View + Template
Data 분석 관련 문제
- map function
- list로부터 원소 하나씩 함수 적용시키고 그 결과 새로운 list로
- list(map(int, ['1','2','3']))
- lambda 함수 같이 사용 : df['col'].map(lambda x : int(x)) - numpy array가 list보다 나은 점
- less memory + fast + convenient - apply
- df.apply(np.average, axis=0) # 0 : 열단위 / 1 : 행단위
반응형
'REVIEW > INTERN+INTERVIEW' 카테고리의 다른 글
[NLP] 자연어처리 기초 (for 기술면접 대비) (0) | 2020.06.25 |
---|---|
[ML] 머신러닝 기초 (for 기술면접 대비) (0) | 2020.06.25 |
[CS] 자료구조 (for 기술면접 대비) (0) | 2020.06.25 |
[INTERVIEW] 엔씨소프트 2020 Summer Intern 면접 준비 (10) | 2020.06.16 |
[INTERVIEW] 네이버 NLP 직군 인턴 면접 후기 (0) | 2020.02.25 |