Python 면접

·2023년 3월 13일
0

Python 기본질문

  • list와 tuple 의 차이
    list : 가변성, 더 느림
    tuple : 불변성(수정 불가), 더 빠름

  • Python 주요 특징
    interpreted language : 실행 전 컴파일 필요 없음
    dynamically typed : 변수 사용 전 선언할 필요 없음
    객체지향적 프로그래밍 : 상속 등과 함께 class 정의 허용
    함수가 first-class object : 변수에 할당 가능, 다른 함수에서 반환 및 전달 가능

  • Scripting & Programming Languate
    Scripting : 자동화 가능 / 주어진 데이터에서 정보 제공
    Programming : script 또는 다른 상위 코드 내에서 실행

  • PEP8
    python 개선 제안서 : 어떻게 code 구상할지 알려주는 스타일 가이드

  • memory 관리
    python private heap space에서 관리됨
    내장된 garbage collector가 있어서 사용되지 않는 메모리 재사용 가능

  • namespace
    이름 충돌 피하기 위해 고유한 이름인지 확인하는 이름 지정 시스템

  • PYTHONPATH
    -- module이 import되는 환경변수

  • Global & Local Variables
    Global Variables : 모든 global 영역에서 접근 가능한 변수
    Local Variables : function 안에서 정의되는 변수

  • 대소문자 구별하는 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)
    다른 class의 모든 멤버(속성, method) 받는 것
    python은 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

Django 관련

  • Flask vs Pyramid vs Django
    Flask : 간단한 구조 제공 + 외부 library 사용 필요
    Pyramid : 상대적으로 무거움
    Django : 구현 위한 기본 틀을 제공해줌 + ORM(객체 관계 매핑)

  • Django 아키텍쳐
    MVT : Model + View + Template

코딩 예제

# 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] + [Ture]*(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)

0개의 댓글