C++, CS

앞으로 공부해야 할 CS 정리

CS 공부


취준을 시작하고 일단 코테를 통과하지 못하면 죽도밥도 안되니 알고리즘과 문제풀이 실력을 올리는게 급선무같다! 라고 생각하여 일단 백준과 프로그래머스를 싹 훑었다.
백준 골드4 정도 찍고나서야 다른데 눈을 돌릴 여유가 생겨 기술면접 등에 대해 알아봤는데 이 또한 코테 못지않은 큰 난관이었다. 너무 코테에만 집중한 것 같아 기술면접에 대비할 전공 지식과 이론에 대해서도 공부할 필요성을 느꼈는데, 회사마다 물어보는 것이 다 달라 중점적으로 공부해야 할 부분에 대해 기술해둬야할 필요성을 느꼈다.
회사들이 공통적으로 물어보는 부분에 대해서는 흔들리지 않도록 개념을 확실하게 잡아두고, 일반 pc 클라이언트인지 또는 모바일 Unity 개발인지에 따라 추가적으로 질문에 대비하여 공부하면 될 것 같다는 생각이 든다. 따라서 아래에 개념이 흔들리지 않도록 중점을 두고 공부해야 할 부분에 대해 목록을 작성해 두어야겠다.

중점적으로 공부할 부분


  • 정렬 :
    퀵 소트의 시간복잡도, 머지 소트의 공간복잡도, stable sort인가 unstable sort인가
    퀵 소트의 개념, 정렬의 여러 종류와 어떤 정렬이 가장 빠른가 등등
  • C++ 지식 :
    스마트 포인터란 무엇인가? C++에서 오버로딩과 오버라이딩의 차이점, Call by Value와 Call by Reference의 차이점, static_cast와 dynamic_cast의 차이점
    구조체와 클래스의 차이점, 가상 함수란 무엇인가? 포인터란 무엇인가? new와 malloc의 차이점
    STL에 대한 지식들, 객체지향이란? 그리고 객체지향의 4대 특징은 무엇인가?
  • 자료구조 :
    배열과 리스트, 배열과 벡터의 차이점, stack, queue, map 등 자주 사용되는 자료구조의 개념과 특징, 그들 사이에서의 차이점
    map과 unordered_map의 차이점
  • OS :
    세마포어와 뮤텍스의 차이점, stack 영역과 heap 영역의 차이점, 가상 메모리의 개념
    페이징과 페이지 폴트 시에 교체하는 방식
    프로세스와 스레드의 차이점, 멀티 프로세스와 멀티 스레드의 차이점, 메모리 단편화의 두가지 종류
    데드락의 개념과 조건, cpu 스케쥴러의 알고리즘 종류
  • 디자인 패턴 :
    디자인 패턴이란 무엇인가? 싱글톤 패턴, 널 오브젝트 패턴, 프록시 패턴
    옵저버 패턴, 어댑터 패턴, 스트래티지 패턴 등

앞으로 위에 작성한 목록들에 대해 공부하며 이해한 내용들을 짧게라도 포스팅하여 개념을 흔들리지 않도록 잡아가는 것을 목표로 해야겠다.