[CS] 백엔드 CS 지식

에딕·2021년 6월 29일
0

CS

목록 보기
2/8
post-thumbnail

해당 게시글은 백엔드 CS 관련 지식 및 면접에 도움이 될 내용을 포함한 글입니다.
아직 미완성이며 다음에 계속해서 내용을 추가할 예정입니다.

backend

  • OOP (Object Oriented Programming)란?
    프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 만들고, 이를 조립 및 연결해가며 전체 프로그램을 완성하는 기법을 OOP (객체 지향 프로그래밍)라고 한다.

    • OOP의 4가지 특성
      캡슐화: 실제 구현 부분을 외부에 드러내지 않는 것
      상속: 부모 클래스의 특성과 기능을 자식 클래스가 물려 받는 것
      다형성: 변수, 메서드 등이 상황에 따라 다른 결과를 내는 것 ex) 오버로딩, 오버라이딩
      추상화: 인터페이스로 클래스들의 공통적인 특성을 묶어 표현 하는 것

  • ORM 이란?
    객체와 관계형 데이터베이스의 데이터를 매핑하는 것이다.

    • 장점
      • 재사용 및 유지보수가 편리함
      • DBMS에 대한 종속성이 줄어듬
      • 직관적이므로 비즈니스 로직에 집중할 수 있음

    • 단점
      • 완벽한 ORM만으로는 서비스 구현이 어려움

  • 컴파일 타임과 런타임
    • 컴파일 타임
      개발자가 작성한 소스코드가 컴파일 과정을 통해 사용자가 실행 가능한 프로그램이 되는 과정
      • 컴파일?
        사람이 작성한 소스코드를 컴퓨터가 이해할 수 있는 기계어로 번역하는 행위

    • 런타임
      컴파일 과정을 마친 프로그램이 사용자에 의해 실행되는 과정

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)
    
    # 출력 결과
    # list1 = [10, 'a']
    # list2 = [123]    
    # list3 = [10, 'a']

    위의 결과와 같이 매개변수의 기본값은 호출시마다 생성되는 것이 아닌 함수 생성시 한번만 이루어진다.


  • 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  # mul 함수를 반환
    
    mul3 = calculate(3)
    mul5 = calculate(5)
    
    print(mul3(2))  # 3 * 2 = 6
    print(mul5(2))  # 5 * 2 = 10

  • 데코레이터란?
    함수를 받아 코드를 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이다.
    함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 사용한다 .
    (중복된 코드를 방지하면서 깔끔하게 함수를 확장할 수 있다.)


  • 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의 원칙과 특성]

profile
코딩💻 고양이😺

0개의 댓글