본문 바로가기

REVIEW/INTERN+INTERVIEW

[CS] Python 기초 (for 기술면접 대비)

출처 : 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 : 행단위

 

 

반응형