1장. 디자인 패턴과 프로그래밍 패러다임
1.1 디자인 패턴 __1.1.1 싱글톤 패턴 __1.1.2 팩토리 패턴 __1.1.3 전략 패턴 __1.1.4 옵저버 패턴 __1.1.5 프록시 패턴과 프록시 서버 __1.1.6 이터레이터 패턴 __1.1.7 노출모듈 패턴 __1.1.8 MVC 패턴 __1.1.9 MVP 패턴 __1.1.10 MVVM 패턴 1.2 프로그래밍 패러다임 __1.2.1 선언형과 함수형 프로그래밍 __1.2.2 객체지향 프로그래밍 __1.2.3 절차형 프로그래밍 __1.2.4 패러다임의 혼합 예상 질문 2장. 네트워크 2.1 네트워크의 기초 __2.1.1 처리량과 지연 시간 __2.1.2 네트워크 토폴로지와 병목 현상 __2.1.3 네트워크 분류 __2.1.4 네트워크 성능 분석 명령어 __2.1.5 네트워크 프로토콜 표준화 2.2 TCP/IP 4계층 모델 __2.2.1 계층 구조 __2.2.2 PDU 2.3 네트워크 기기 __2.3.1 네트워크 기기의 처리 범위 __2.3.2 애플리케이션 계층을 처리하는 기기 __2.3.3 인터넷 계층을 처리하는 기기 __2.3.4 데이터 링크 계층을 처리하는 기기 __2.3.5 물리 계층을 처리하는 기기 2.4 IP 주소 __2.4.1 ARP __2.4.2 홉바이홉 통신 __2.4.3 IP 주소 체계 __2.4.4 IP 주소를 이용한 위치 정보 2.5 HTTP __2.5.1 HTTP/1.0 __2.5.2 HTTP/1.1 __2.5.3 HTTP/2 __2.5.4 HTTPS __2.5.5 HTTP/3 예상 질문 3장. 운영체제 3.1 운영체제와 컴퓨터 __3.1.1 운영체제의 역할과 구조 __3.1.2 컴퓨터의 요소 3.2 메모리 __3.2.1 메모리 계층 __3.2.2 메모리 관리 3.3 프로세스와 스레드 __3.3.1 프로세스와 컴파일 과정 __3.3.2 프로세스의 상태 __3.3.3 프로세스의 메모리 구조 __3.3.4 PCB __3.3.5 멀티프로세싱 __3.3.6 스레드와 멀티스레딩 __3.3.7 공유 자원과 임계 영역 __3.3.8 교착 상태 3.4 CPU 스케줄링 알고리즘 __3.4.1 비선점형 방식 __3.4.2 선점형 방식 예상 질문 4장. 데이터베이스 4.1 데이터베이스의 기본 __4.1.1 엔터티 __4.1.2 릴레이션 __4.1.3 속성 __4.1.4 도메인 __4.1.5 필드와 레코드 __4.1.6 관계 __4.1.7 키 4.2 ERD와 정규화 과정 __4.2.1 ERD의 중요성 __4.2.2 예제로 배우는 ERD __4.2.3 정규화 과정 4.3 트랜잭션과 무결성 __4.3.1 트랜잭션 __4.3.2 무결성 __4.4 데이터베이스의 종류 __4.4.1 관계형 데이터베이스 __4.4.2 NoSQL 데이터베이스 4.5 인덱스 __4.5.1 인덱스의 필요성 __4.5.2 B-트리 __4.5.3 인덱스 만드는 방법 __4.5.4 인덱스 최적화 기법 4.6 조인의 종류 __4.6.1 내부 조인 __4.6.2 왼쪽 조인 __4.6.3 오른쪽 조인 __4.6.4 합집합 조인 4.7 조인의 원리 __4.7.1 중첩 루프 조인 __4.7.2 정렬 병합 조인 __4.7.3 해시 조인 예상 질문 5장. 자료 구조 5.1 복잡도 __5.1.1 시간 복잡도 __5.1.2 공간 복잡도 __5.1.3 자료 구조에서의 시간 복잡도 5.2 선형 자료 구조 __5.2.1 연결 리스트 __5.2.2 배열 __5.2.3 벡터 __5.2.4 스택 __5.2.5 큐 5.3 비선형 자료 구조 __5.3.1 그래프 __5.3.2 트리 __5.3.3 힙 __5.3.4 우선순위 큐 __5.3.5 맵 __5.3.6 셋 __5.3.7 해시 테이블 예상 질문 6장. 포트폴리오와 면접 6.1 포트폴리오 __6.1.1 첫 문장이 중요하다 __6.1.2 숫자로 말하라 __6.1.3 기술의 숙련도를 나눠서 표기하라 __6.1.4 리드미를 잘 작성하라 __6.1.5 오픈 소스 컨트리뷰터가 되자 __6.1.6 블로깅을 하자 6.2 면접 __6.2.1 꼬리에 꼬리를 무는 질문 __6.2.2 대답을 바꾸지 말자 __6.2.3 모르는 것은 모르는 것 __6.2.4 압박을 버텨라 __6.2.5 공식 사이트를 봐라 __6.2.6 또렷한 발음으로 __6.2.7 장점, 단점, 차이는 필수다 __6.2.8 업무를 예측하라 __6.2.9 체크리스트를 만들어 준비하라 __6.2.10 인성 면접 |
주홍철의 다른 상품
필자는 IT 대기업 면접을 준비할 때 “탄탄한 CS 전공지식이 필요하다.”라는 말을 듣고 수많은 전공 서적과 전공 강의들을 보며 CS 전공지식을 쌓으려고 노력했습니다. 그때는 무엇이 필요하고 필요 없는 지식인지 알 수 없어 다 외우려고 했지만 정말 많은 양이었기 때문에 너무 힘들었습니다. 또한, 인터넷에 있는 CS 전공지식들은 몇 개씩은 틀리기 마련이라 공부하다가 헷갈려서 다시 찾아보는 등의 어려움도 겪었습니다. 이 책은 그러한 문제점들을 해결하는 책입니다. 한 권만으로 CS 전공지식의 전반적인 내용을 학습할 수 있으며, 더 나아가 실제로 개발할 때 필요한 CS 전공지식을 담았습니다. 이 책의 장점은 다음과 같습니다.
- 면접에 나올 법한 CS 전공지식을 포함한 CS 전공지식의 전반을 다룹니다. - 필자의 실제 개발 경험이 녹아 있어 이론에만 치우친 CS 전공지식이 아닌 이론과 실무가 아우러진 전공지식을 선사합니다. - 필자의 수많은 면접 경험을 바탕으로 한 면접 노하우가 책 곳곳에 녹아 있습니다. - 구글, 네이버, 카카오 등 탑티어급의 회사에 합격한 필자의 포트폴리오가 소개되며 포트폴리오 작성 노하우를 알려줍니다. 각 장은 다음과 같은 내용을 담고 있습니다. - 1장에서는 디자인 패턴을 다룹니다. 이론뿐만 아니라 실제로 어떻게 디자인 패턴이 쓰이고 있는지를 서술했습니다. 예를 들어 ‘전략 패턴은 passport 라이브러리에서 사용된다’처럼 실무에서 어떻게 사용되고 있는지를 구체적으로 알려줍니다. 예시 코드로는 자바, 자바스크립트 두 가지의 언어로 구성했고, 코드의 난이도를 최대한 낮추면서도 디자인 패턴을 잘 표현하도록 노력했습니다. - 2장에서는 네트워크를 다룹니다. 네트워크의 전반적인 내용을 설명하며 네트워크에서 중요한 IP, HTTP 부분은 따로 빼서 좀 더 자세하게 설명하여 중요한 부분은 깊게, 중요하지 않은 부분은 핵심만 설명합니다. - 3장에서는 운영체제를 다룹니다. 운영체제의 핵심 요소 중 하나인 시스템콜이나 커널을 조금 더 쉽게 설명하고자 노력했으며, 프로세스와 스레드를 중심으로 설명합니다. - 4장에서는 데이터베이스를 다룹니다. ERD나 트랜잭션, 인덱싱 등 데이터베이스에서의 중요한 부분들을 중점적으로 설명합니다. - 5장에서는 자료 구조를 설명합니다. 먼저 시간 복잡도와 공간 복잡도를 설명하여 자료 구조의 기초를 알아보고 큐, 스택 등 필수적인 자료 구조를 전부 다룹니다. - 6장에서는 필자의 포트폴리오를 중심으로 포트폴리오를 쓰는 팁과 인성 면접을 준비하는 팁을 알려줍니다. 이 책이 탄탄한 CS 전공지식을 갖춘 훌륭한 개발자가 되기 위한 첫걸음이 되길 바랍니다. --- 본문 중에서 |
“이 책을 만들기까지 총 13명의 개발자 최범석(네이버 리서치 엔지니어), 김찬호(라인 백엔드 개발자), 이성준(쿠팡 시니어 소프트웨어 엔지니어), 남승원(당근마켓 백엔드 개발자), 이태훈(배달의 민족 백엔드 개발자), 이태우(휴먼스케이프 CTO), 송성빈(삼성전자 소프트웨어 엔지니어), 이승철(NHN 백엔드 개발자), 김인범(CNCITY 데이터 엔지니어 / MongoDB Korea 운영진), 김재엽(스타트업 데이터 엔지니어), 김건우(클래스101 백엔드 개발자), 조유빈(이스트소프트 IOS 개발자), 오규영(한전 KDN 소프트웨어 엔지니어) 님이 도와주셨습니다.”
|
4년 동안 학부를 다니면서 CS를 배웠지만, 막상 면접을 준비할 때는 빠진 것은 없는지, 어떤 식으로 대답할지 잘 몰랐습니다. 결국에는 맨땅에 몇 번 헤딩한 뒤에야 감을 잡았는데, 이 책이 그때 있었더라면 좋았겠다는 생각이 듭니다. 이 책은 그림과 코드를 십분 활용하여 CS를 재미있게 풀어서 설명하고, 짧은 분량과는 다르게 많은 내용을 커버합니다. CS를 잘 모르는 비전공자라면 쉽고 빠르게 CS를 훑어볼 수 있고, CS를 배운 전공자라면 면접 전에 가볍게 복기하거나 예상 질문에 대답해보면서 면접을 더욱 단단히 준비할 수 있을 것입니다. 특히 포트폴리오를 쓰는 법과 면접 예상 질문들은 이제 막 취업을 준비하는 사람에게 많은 도움이 될 것이라고 확신합니다. - 최범석 (네이버 리서치 엔지니어)
|
현직 개발자 중에서도 기본적인 CS 관련 기반 지식이 부족한 개발자가 많습니다. 이러한 부분이 겉으로는 그리 중요해보이지 않을지 몰라도 실력 있는 소프트웨어 개발자가 되기 위해서는 반드시 숙지해야 하는 내용입니다. 이 책은 기본적으로 소프트웨어 개발자가 갖추어야 할 기본 지식을 상당 부분 담고 있습니다. 면접에서도 모든 질문에 답변할 필요는 없기 때문에 이 책의 내용만 충분히 숙지하신다면 기본 과목에 대한 지식이 부족하여 면접에 불합격하는 일은 없으리라고 생각합니다. 또한, 이 책은 배경지식을 쌓기 위한 기본서로도 좋습니다. 신입 개발자가 어떠한 내용을 공부하기 위해 라이브러리의 문서들을 읽다 보면 문장의 단어 뜻이나 배경지식이 부족하여 공부하기 힘든 부분들이 있을 수 있는데, 이 책은 그러한 부분들도 깔끔하게 채워줍니다. - 김찬호 (라인 백엔드 엔지니어)
|
IT 면접을 잘 보기 위해서는 알아야 하는 지식이 많고 이를 짧은 시간 안에 공부하는 것은 어렵습니다. 어떠한 지식이 필요하고 어떠한 커리큘럼으로 공부해야 효율적일지 고민하고 있다면 이 책을 보는 것이 최선이라고 확신합니다. 또한, 이 책은 IT 지식뿐만 아니라 면접은 어떻게 봐야 하는지, 포트폴리오는 어떻게 작성해야 하는지 나와 있고, 면접 예상 질문까지 알려주어 면접을 원활하게 준비할 수 있습니다. - 남승원 (당근마켓 백엔드 개발자)
|
개발자라면 알아야 할 필수적인 CS 지식들이 있지만 저와 같은 비전공자들은 이런 것들을 공부하는 데 있어 어려움이 많습니다. 어디서부터 시작해서 어디까지 학습해야 할지 잘 모르겠고, 방대한 범위를 정말 다 공부해야 하는지 로드맵을 그리기가 어려운데, 이 책에서는 비전공자들을 비롯한 전공자들까지도 알아두면 좋을 내용이 알차게 담겨 있습니다. 또한, 이미 CS 지식을 공부한 분들에게도 탄탄한 CS 지식을 다지는 데 도움을 주어 이 책을 기반으로 성공적인 이직 또는 취업 준비를 할 수 있으실 것입니다. - 이태훈 (배달의 민족 백엔드 개발자)
|
이 책은 개발자라면 꼭 알아야 할 내용을 다루고 있습니다. 비전공자라면 이 책의 수많은 CS 전공지식으로 인해 한 번에 이해할 수 없을 수도 있지만, 키워드 중심으로 찾아가면서 이해하려고 한다면 어느새 전공자 수준으로 성장해가는 자신을 발견할 수 있을 것입니다. 전공자라면 이 책을 통해 자신의 CS 전공지식을 빠르게 훑어보며 부족한 면을 보완할 수 있습니다. 이 책을 통해 기본기가 탄탄한 개발자가 되는 기반을 마련하셨으면 합니다. - 이태우 (휴먼스케이프 CTO)
|
이 책은 단편화된 컴퓨터 지식들을 연결해주고 면접 준비 중이신 분들이나 컴퓨터 공학의 기본기가 약하신 분들에게 큰 도움이 되는 책입니다. 적극 추천합니다! - 김건우 (클래스101 백엔드 개발자)
|