Merge pull request #1013 from lemontree1729/patch-1

Refines exist translation
This commit is contained in:
John Washam 2021-11-02 18:27:06 -07:00 committed by GitHub
commit baf49db5ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,20 +1,21 @@
# 코딩 인터뷰 대학(Coding Interview University) # 코딩 면접 대학(Coding Interview University)
> 나는 원래 이것을 소프트웨어 엔지니어가 되기 위한 짧은 연구 목록으로 만들었다. > 이 글은 원래 제가 소프트웨어 엔지니어가 되기 위해 정리한 짧은 주제들이었습니다.
> 그러나 지금 당신이 볼 수 있듯이 이 목록은 매우 커졌다. 이 목록을 숙지한 후, > 그러나 지금은 보다시피 주제들이 굉장히 많아졌습니다. 아래 내용을 모두 습득한 후,
> [나는 아마존에 소프트웨어 엔지니어로 채용됐다](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! > [저는 아마존에 소프트웨어 엔지니어로 채용되었습니다](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)!
> 당신은 아마 내가 한 것처럼 많이 공부할 필요는 없을 것이다. 어쨌든 당신이 필요로 하는 모든 것은 여기에 있다. > 여러분은 아마 아래 글들을 모두 다 공부할 없을 겁니다. 아무튼 여러분에게 필요한 모든 것은 여기에 있습니다.
> >
> 몇 달 동안 하루에 8-12 시간 정도 공부했습니다. 이것이 제 이야기입니다. [Google 인터뷰를 위해 8 개월 동안 풀 타임으로 공부 한 이유](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > 몇 달 동안 저는 하루에 8-12시간 정도 공부했습니다. 다음 글에는 제 이야기를 적어놓았습니다. [Google 면접을 위해 8개월 동안 풀 타임으로 공부한 이유](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
> >
> 여기에 나열된 목록들은 아마존, 페이스북, 구글, 마이크로소프트 같은 거대 기업을 포함한 거의 모든 소프트웨어 회사의 인터뷰를 준비하는 데에 도움이 될 것이다. > **반드시 읽어주세요:** 다시 한번 말하지만, 여러분은 여기에 있는 글들을 모두 알 필요는 없습니다. 저는 제가 알지 않아도 될 것에 많은 시간을 뺏겼습니다. 여러분의 귀중한 시간을 잃지 않게 해당 파트에 더 자세하게 적어놓겠습니다.
>
>여기에 정리된 글들은 아마존, 페이스북, 구글, 마이크로소프트 같은 거대 기업을 포함한 거의 모든 소프트웨어 회사의 면접을 준비하는 데에 도움이 될 것입니다.
> >
> >
> *행운을 빈다!* > *행운을 빕니다!*
<details> <details>
<summary>번역:</summary> <summary>완료된 번역:</summary>
- [중국어](translations/README-cn.md) - [중국어](translations/README-cn.md)
- [베트남어](translations/README-vi.md) - [베트남어](translations/README-vi.md)
@ -22,6 +23,13 @@
- [브라질 포르투갈어](translations/README-ptbr.md) - [브라질 포르투갈어](translations/README-ptbr.md)
- [폴란드어](translations/README-pl.md) - [폴란드어](translations/README-pl.md)
- [타이완어](translations/README-tw.md) - [타이완어](translations/README-tw.md)
- [일본어](translations/README-ja.md)
- [러시아어](translations/README-ru.md)
- [독일어](translations/README-de.md)
- [인도네시아어](translations/README-id.md)
- [크메르어](translations/README-kh.md)
- [우즈베크어](translations/README-uz.md)
</details> </details>
<details> <details>
@ -29,7 +37,6 @@
- [힌디어](https://github.com/jwasham/coding-interview-university/issues/81) - [힌디어](https://github.com/jwasham/coding-interview-university/issues/81)
- [히브리어](https://github.com/jwasham/coding-interview-university/issues/82) - [히브리어](https://github.com/jwasham/coding-interview-university/issues/82)
- [바하사 인도네시아어](https://github.com/jwasham/coding-interview-university/issues/101)
- [아랍어](https://github.com/jwasham/coding-interview-university/issues/98) - [아랍어](https://github.com/jwasham/coding-interview-university/issues/98)
- [터키어](https://github.com/jwasham/coding-interview-university/issues/90) - [터키어](https://github.com/jwasham/coding-interview-university/issues/90)
- [프랑스어](https://github.com/jwasham/coding-interview-university/issues/89) - [프랑스어](https://github.com/jwasham/coding-interview-university/issues/89)
@ -42,7 +49,6 @@
- [그리스어](https://github.com/jwasham/coding-interview-university/issues/166) - [그리스어](https://github.com/jwasham/coding-interview-university/issues/166)
- [이탈리아어](https://github.com/jwasham/coding-interview-university/issues/170) - [이탈리아어](https://github.com/jwasham/coding-interview-university/issues/170)
- [말라얄람어](https://github.com/jwasham/coding-interview-university/issues/239) - [말라얄람어](https://github.com/jwasham/coding-interview-university/issues/239)
- [일본어](https://github.com/jwasham/coding-interview-university/issues/257)
</details> </details>
@ -83,34 +89,41 @@
<hr /> <hr />
</div> </div>
## 코딩 인터뷰 대학이란? ## 이건 대체 뭐하는 건가요?
코딩 인터뷰 대학은 (컴퓨터공학 학위 없이 독학한) 웹 개발자에서 큰 회사의 소프트웨어 엔지니어가 되기 위한 나의 몇 달간의 공부 계획이다.
![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) ![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
이 글은 **신입 소프트웨어 엔지니어** 혹은 소프트웨어/웹 개발에서 (컴퓨터과학 지식이 필요한) 소프트웨어 엔지니어링으로 전환하고자 하는 사람들을 위한 글입니다. 만약 당신이 여러 해의 소프트웨어 엔지니어링 경력이 있다면, 더 어려운 인터뷰가 예상된다. 이 글은 저의 대기업의 소프트웨어 엔지니어가 되기 위한 여러 달에 걸친 공부계획을 적어놓은 것입니다.
만약 당신이 여러 해의 소프트웨어/웹 개발 경험을 가지고 있다면, 구글과 아마존, 페이스북 그리고 마이크로소프트와 같은 큰 규모의 소프트웨어 회사들은 소프트웨어 엔지니어링을 소프트웨어/웹 개발과 다르게 바라보고 있으며 컴퓨터과학 지식을 요구한다는 사실에 주목하도록 하자. **필요한 것:**
* 조금이라도 코딩을 해본 경험 (변수, 반복문, 메서드/함수 등등)
* 인내심
* 시간
믿음직한 엔지니어 혹은 시스템 엔지니어가 되고 싶다면, 선택적인 주제 목록(네트워크, 보안 등)을 더 공부하도록 하자. 주의) 이 글은 **소프트웨어 엔지니어**가 되기 위한 계획이지 웹 개발을 배우기 위한 것이 아닙니다.구글, 아마존, 페이스북 그리고 마이크로소프트 같은 대기업은 소프트웨어 엔지니어링이랑 웹 개발을 서로 다른 것으로 봅니다. 예를 들어, 아마존에는 프론트엔드 엔지니어와 소프트웨어 개발 엔지니어가 있습니다. 이 두 역할은 서로 나뉘어져있으므로 면접 역시 같게 보진 않을 것이고, 갖추어야할 역량 역시 다릅니다. 위의 회사들은 소프트웨어 개발자/엔지니어 역할에 좀 더 전문적인 컴퓨터 과학 지식을 요구합니다.
--- ---
## 목차 ## 목차
- [코딩 인터뷰 대학이란?](#코딩-인터뷰-대학이란) ### 공부 계획
- [이걸 왜 써야하죠?](#이걸-왜-써야하죠)
- [어떻게 쓰면 되나요?](#어떻게-쓰면-되나요) - [이건 대체 뭐하는 건가요?](#이건-대체-뭐하는-건가요)
- [당신은 충분히 똑똑합니다](#당신은-충분히-똑똑합니다) - [이걸 왜 해야하죠?](#이걸-왜-해야하죠)
- [어떻게 하면 되나요?](#어떻게-하면-되나요)
- [머리가 나쁘다고 자책하지 마세요](#-머리가-나쁘다고-자책하지-마세요)
- [영상 자료에 관하여](#영상-자료에-관하여) - [영상 자료에 관하여](#영상-자료에-관하여)
- [인터뷰 과정 & 전반적인 인터뷰 준비 과정](#인터뷰-과정--전반적인-인터뷰-준비-과정) - [프로그래밍 언어 선택하기](#프로그래밍-언어-선택하기)
- [인터뷰를 위한 언어 고르기](#인터뷰를-위한-언어-고르기) - [자료구조와 알고리즘에 대한 도서](#자료구조와-알고리즘에-대한-도서)
- [도서 목록](#도서-목록) - [면접 준비 관련 도서](#면접-준비-관련-도서)
- [시작하기 전에](#시작하기-전에) - [저와 같은 실수는 하지마세요](#저와-같은-실수는-하지마세요)
- [다루지 않을 것](#다루지-않을-것) - [다루지 않을 것](#다루지-않을-것)
- [먼저 알아야 할 지식](#먼저-알아야-할-지식) - [하루하루의 계획](#하루하루의-계획)
- [하루하루의 계획](#하루-하루의-계획) - [코딩 질문 연습하기](#코딩-질문-연습하기)
- [코딩 문제들](#코딩-문제들)
### 공부 주제
- [알고리즘 복잡도 / Big-O / 점근적 분석](#알고리즘-복잡도--big-o--점근적-분석) - [알고리즘 복잡도 / Big-O / 점근적 분석](#알고리즘-복잡도--big-o--점근적-분석)
- [자료구조](#자료구조) - [자료구조](#자료구조)
- [배열](#배열) - [배열](#배열)
@ -157,17 +170,17 @@
- [유니코드](#unicode) - [유니코드](#unicode)
- [엔디언(Endianness)](#endianness) - [엔디언(Endianness)](#endianness)
- [네트워크](#networking) - [네트워크](#networking)
- [시스템 디자인, 확장성, 데이터 핸들링](#시스템-디자인-확장성-데이터-핸들링) (4년 이상 경력자를 위한 주제)
- [최종 검토](#최종-검토) - [최종 검토](#최종-검토)
- [코딩 문제 연습](#코딩-문제-연습)
- [코딩 연습/도전](#코딩-연습도전) ### 직업 구하기
- [인터뷰가 얼마 남지 않았을 때](#인터뷰가-얼마-남지-않았을-때)
- [면접이 얼마 남지 않았을 때](#면접이-얼마-남지-않았을-때)
- [이력서](#이력서) - [이력서](#이력서)
- [인터뷰가 다가오면 생각해보기](#인터뷰가-다가오면-생각해보기) - [인터뷰가 다가오면 생각해보기](#인터뷰가-다가오면-생각해보기)
- [면접관에게 받았던 질문들](#면접관에게-받았던-질문들) - [면접관에게 받았던 질문들](#면접관에게-받았던-질문들)
- [취직했다면](#취직했다면) - [취직했다면](#취직했다면)
---------------- 여기부터는 선택사항입니다. ---------------- **---------------- 이 아래로는 전부 선택사항입니다 ----------------**
- [추가 도서](#additional-books) - [추가 도서](#additional-books)
- [추가 주제](#additional-learning) - [추가 주제](#additional-learning)
@ -215,240 +228,239 @@
--- ---
## 이걸 왜 야하죠? ## 이걸 왜 야하죠?
내가 이 프로젝트를 시작했을 때, 나는 힙이나 스택, 시간 복잡도, 트리, 그래프 순회 등에 대하여 전혀 아는 바가 없었다. 대기업에서 소프트웨어 엔지니어로 일하기 위해서는 알아야 할 것들이 많습니다.
만약 내가 정렬 알고리즘을 코딩해야 했다면, 나는 그리 잘하지 못했을 것이다.
모든 사용했던 모든 자료 구조는 언어 안에서 구현되어 있던 것들이고, 나는 그것들이 보이지 않는 곳에서 어떻게 작동하고 있는지 몰랐다.
나는 실행 중인 프로세스가 메모리 초과 에러를 메시지를 보내지 않는 한 메모리를 관리할 필요가 없었고, 나는 해결책을 찾아야만 했다.
나는 몇몇 다차원 배열이나 연관 배열을 사용해왔지만, 자료구조를 처음부터 구현해 본 적은 없었다.
하지만 이 공부 계획을 진행하면서 나는 내가 고용될 것이라는 자신감을 갖게 되었다. 이것은 내게 여러 달이 필요한 긴 계획이다. 만약 여러분이 저처럼 컴퓨터 관련 전공이 아니라면 이 과정은 전공자들을 따라잡으면서도 4년이라는 시간을 절약하게 해줍니다.
만약 당신이 이 중 많은 내용에 익숙하다면 시간은 훨씬 덜 들 것이다.
## 어떻게 사용하면 되나요? 제가 이 프로젝트를 시작했을 때, 저는 힙이나 스택, 시간 복잡도, 트리, 그래프 순회 등에 대하여 전혀 아는 바가 없었습니다. 만약 그 때의 제가 정렬 알고리즘을 직접 코딩해야 할 일이 있었다면, 아마 제 코드는 끔찍한 상태였을 겁니다.
제가 사용했던 모든 자료 구조는 이미 언어 안에서 구현되어 있던 것들이고, 저는 그것들이 보이지 않는 곳에서 어떻게 작동하고 있는지 몰랐습니다. 실행 중인 프로세스가 메모리 초과 에러를 메시지를 보내지 않는 이상 메모리를 관리할 필요조차 없었고, 에러가 발생하면 그제야 해결책을 찾곤 했습니다. 또한 저는 몇몇 다차원 배열이나 연관 배열을 사용한 적은 있지만, 자료구조를 완전 밑바닥부터 구현해 본 적은 없었습니다.
매우 긴 과정이고 몇 달이나 걸릴지 모릅니다. 그렇치만 여러분이 이런 분야에 익숙하다면 분명 훨씬 더 적은 시간이 걸릴 겁니다.
## 어떻게 하면 되나요?
아래의 모든 것은 대략적인 개요이며 당신은 위에서 아래 순서대로 진행해야 한다. 아래에 있는 모든 것들은 대략적인 개요이며 여러분은 위에서 아래 순서대로 차근차근 진행해야 합니다.
문서는 진행 상황을 확인하기 위한 목록 작성부터 다른 곳에도, Github식 마크다운 문법을 사용하고 있다. 글은 진행 상황 파악을 위해 목차를 만드는 등 Github 특유의 마크다운을 이용한 방식을 사용하고 있습니다.
**새 브랜치를 만들어서 중괄호에 x표를 넣는 식으로 항목을 체크하라: [x]** **새 브랜치를 만들어서 중괄호에 x를 추가하는 식으로 항목을 체크하세요: [x]**
브랜치를 라하고 아래의 명령을 따라라 브랜치를 포크(fork)하고 아래의 커맨드들을 입력하세요
포크 버튼을 눌러 Github https://github.com/jwasham/coding-interview-university 레포지토리를 포크 하라. 포크 버튼을 눌러 Github <https://github.com/jwasham/coding-interview-university> 레포지토리를 포크하세요.
로컬 레포지토리에 클론 하라. 로컬 레포지토리에 클론(clone)하기:
`git clone git@github.com:<your_github_username>/coding-interview-university.git` git clone git@github.com:<your_github_username>/coding-interview-university.git
git checkout -b progress
git remote add jwasham https://github.com/jwasham/coding-interview-university
git fetch --all
`git checkout -b progress` 끝났으면 박스를 x로 체크하기:
`git remote add jwasham https://github.com/jwasham/coding-interview-university` git add .
git commit -m "Marked x"
`git fetch --all` git rebase jwasham/main
git push --set-upstream origin progress
끝났으면 박스에 x로 체크하라 git push --force
`git add . `
`git commit -m "Marked x" `
`git rebase jwasham/main `
`git push --set-upstream origin progress`
`git push --force`
[Github식 마크다운에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) [Github식 마크다운에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
## 당신은 충분히 똑똑합니다 ## 머리가 나쁘다고 자책하지 마세요
- 성공한 소프트웨어 엔지니어들은 똑똑합니다. 하지만 그들 조차도 자신들의 지적 능력면에 대해서 불안감을 갖기 일쑤입니다.
- 성공한 소프트웨어 엔지니어들은 똑똑합니다. 하지만 그들조차도 자신들의 지적 능력에 대해서 불안감을 갖기 일쑤입니다.
- [천재 프로그래머에 대한 미신(迷信)](https://www.youtube.com/watch?v=0SARbwvhupQ) - [천재 프로그래머에 대한 미신(迷信)](https://www.youtube.com/watch?v=0SARbwvhupQ)
- [위험한 홀로서기: 테크 산업의 보이지 않는 괴물들의 전쟁](https://www.youtube.com/watch?v=1i8ylq4j_EY) - [위험한 홀로서기: 테크 산업의 보이지 않는 괴물들의 전쟁](https://www.youtube.com/watch?v=1i8ylq4j_EY)
## 영상 자료에 관하여 ## 영상 자료에 관하여
몇몇 영상들은 Cousera, Edx에 등록을 해야만 접근할 수 있습니다. 이것들은 MOOCs라고 불리는데요. 몇몇 영상들은 Cousera, Edx에 등록을 해야만 접근할 수 있습니다. 이들을 MOOCs라고 부르기도 합니다.
강의가 없는 경우에는 몇 달 동안 기다려야 할 수도 있습니다. 가끔씩 강의가 진행중이지 않아서 몇 달 동안 기다려야 할 수도 있습니다.
여러분이 YouTube 온라인 강의 동영상과 같이 무료이고 항상 접근 가능한 동영상 소스들을 추가해주면 정말 감사하겠습니다. YouTube 온라인 강의 동영상과 같이 무료이고 항상 접근 가능한 동영상 소스들을 추가해주신다면 많은 분이 온라인 강의가 다시 시작할 때까지 기다리지 않고 언제나 공부할 수 있게 될 테니 정말 감사하겠습니다.
저는 대학 강의 듣는 것을 좋아합니다.
## 인터뷰 과정 & 전반적인 인터뷰 준비 과정 ## 프로그래밍 언어 선택하기
- [ ] [ABC: 항상 코딩 하라](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) 여러분은 코딩 면접용 프로그래밍 언어도 선택해야하지만, 컴퓨터 과학을 배우기 위한 프로그래밍 언어 역시 선택해야합니다.
- [ ] [화이트 보드 쓰기](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs)
- [ ] Big 4에 취업하는 방법:
- [ ] ['Big 4에 취업하는 방법 - Amazon, Facebook, Google & Microsoft' (영상)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
- [ ] 코딩 인터뷰 정복 Set 1:
- [ ] [Gayle L McDowell - 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
- [ ] [저자와 함께하는 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
- [ ] 페이스북 코딩 인터뷰 정복
- [ ] [접근법](https://www.youtube.com/watch?v=wCl9kvQGHPI)
- [ ] [문제 풀이](https://www.youtube.com/watch?v=4UWDyJq8jZg)
- [ ] 준비 코스:
- [ ] [소프트웨어 엔지니어 인터뷰 대공개 (유료 강좌)](https://www.udemy.com/software-engineer-interview-unleashed):
- 전직 구글 면접관이 당신이 어떻게 소프트웨어 엔지니어 인터뷰를 준비해야 하는지 알려줍니다.
- [ ] [자료 구조, 알고리즘 그리고 면접을 위한 파이썬! (유료 강좌)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/):
- 자료 구조와 알고리즘, 모의 면접 등을 다루는 파이썬 중점 면접의 준비 강좌입니다.
- [ ] [Intro to Data Structures and Algorithms using Python (Udacity 무료 강좌))](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513):
- 파이썬 중심적 자료구조와 알고리즘 강좌.
- [ ] [자료구조와 알고리즘 나노학위! (Udacity 유료 나노학위)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256):
- 100개 이상의 자료구조, 알고리즘 실습과 당신의 인터뷰, 취업을 도울 섬세한 멘토의 가이드
## 인터뷰를 위한 언어 고르기 왠만하면 둘 다에 해당하는 언어를 골라서 일단 하나에 숙달되도록 하는 것을 추천합니다.
인터뷰때에 당신이 쓰기에 편한 언어를 선택해도 되지만, 큰 기업들은 보통 아래의 언어들을 선택합니다. ### 이 공부 계획을 위해서
제가 공부할 때에는 C와 Python이란 2가지의 언어를 주로 썼습니다.
* C: 굉장히 저급 언어입니다. 포인터와 메모리 할당 및 해제를 직접 다루어서 데이터 구조와 알고리즘을 뼈 속 깊이 새겨둘 수 있게 됩니다. Python이나 Java와 같은 고급 언어들은 이런 걸 알아서 처리하기 때문에 가려져 있습니다. 이는 일상 업무를 할 때에는 아주 훌륭하지만 만약 저급 수준 데이터 구조가 어떻게 짜여져있는지 자체를 배우는 중이라면 c 언어를 사용해 기계와 가까워 지는 것이 더 좋습니다.
- C 언어는 어디에나 있습니다. 여러분은 공부하는 내내 이 사실을 깨닫게 될겁니다.
- [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
- 이 책은 짧은 책이지만 여러분이 C 언어를 잘 다루게 만들어주고, 만약 조금씩 연습해본다면 더 빠르게 발전할 겁니다. C 언어를 이해하면 프로그램이 어떻게 돌아가고 메모리가 어떻게 작동하는지 이해하는데 도움을 줍니다.
- 여러분은 이 책을 깊게 파고들 필요는 없습니다(심지어 다 안 읽으셔도 됩니다). 그저 여러분이 C 언어를 읽고 쓰는 데에 익숙해질 정도면 됩니다.
- [이 책의 문제에 대한 정답들](https://github.com/lekkas/c-algorithms)
* Python: 현대적이고 굉장히 많은 것들을 할 수 있습니다. 저는 그냥 완전 유용하고 면접 때 써야할 코드를 줄여주기도 해서 배웠습니다.
이건 물론 제 취향일 뿐이고 여러분은 원하시는 걸 하시면 됩니다.
아마 필요없으실 수도 있지만, 새 언어를 배우기 위한 여러 사이트 주소들입니다.
- [Exercism](https://exercism.org/tracks)
- [Codewars](http://www.codewars.com)
- [Codility](https://codility.com/programmers/)
- [HackerEarth](https://www.hackerearth.com/)
- [Sphere Online Judge (spoj)](http://www.spoj.com/)
- [Codechef](https://www.codechef.com/)
- [Codeforces](https://codeforces.com/)
### 면접을 위해서
면접에서는 여러분이 쓰기에 편한 언어를 사용해도 되지만, 대기업들은 보통 다음과 같은 정해진 언어들을 사용합니다:
- C++ - C++
- Java - Java
- Python - Python
아래 언어들을 사용할 수 있지만 주의하여야 합니다. 아래 언어들을 사용할 수도 있지만 제대로 확인하셔야합니다. 주의사항이 있을 수도 있습니다:
- JavaScript - JavaScript
- Ruby - Ruby
코딩 인터뷰를 위한 언어를 선택하는 것과 관련하여 제가 쓴 글입니다: [코딩 인터뷰를 위한 언어 선택하기](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) 코딩 면접를 위한 언어를 선택하는 것과 관련하여 제가 쓴 글입니다: [코딩 면접을 위한 언어 선택하기](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)
이 글은 제가 기반으로 사용한 원본 글입니다: http://blog.codingforinterviews.com/best-programming-language-jobs/
당신은 당신의 언어에 매우 익숙하고 그 언어에 대해 잘 알아야 합니다. 여러분은 여러분이 선택한 언어에 대해 매우 익숙하고 잘 알아야 합니다.
언어 선택에 도움이 될 만한 읽을 거리들 언어 선택에 도움이 될 만한 읽을 거리들
- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ - [코딩 면접을 위해 맞는 언어 고르기](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/)
- http://blog.codingforinterviews.com/best-programming-language-jobs/
[프로그래밍 언어 참고목록](programming-language-resources.md) [프로그래밍 언어 참고목록](programming-language-resources.md)
제가 공부하고 있는 C, C++, Python 강의를 아래서 볼 수 있습니다. 아래를 보시면 관련된 책들이 몇 개 있습니다. ## 자료구조와 알고리즘에 대한 도서
## 도서 목록 이 책들은 여러분의 컴퓨터 과학에 대한 기반을 다져줄 책들입니다.
아래의 목록은 내가 공부했던 책들보다는 적다. 당신의 시간을 절약하기 위해 몇몇 책들은 생략하였다. 그냥 아무거나 하나 여러분이 편한 언어와 관련된 것으로 선택하세요. 엄청나게 많은 책 읽기와 코딩을 하게 될 겁니다.
### 인터뷰 준비를 위해서 ### C
- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - [Algorithms in C, Parts 1-5 (Bundle), 3rd Edition](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080)
- C++ 과 JAVA 문제의 답변을 위해서 - 기본적인 것들, 데이터 구조들, 정렬, 탐색, 그리고 그래프와 관련된 알고리즘 등이 들어있습니다.
- Cracking the Coding Interview 책을 위한 좋은 사전학습용 책이기 때문에
- 어렵지 않고, 당신이 인터뷰에서 마주할 대부분의 문제들 보다 쉽기 때문에
- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
- JAVA 문제의 답변을 위해서
### 만일 당신이 많은 여유 시간이 있다면:
하나를 선택:
- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
- [ ] Elements of Programming Interviews (Java version)
- [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
- [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)
### 특정 언어 관련
**인터뷰를 위해 당신의 언어를 선택하여야 합니다 (윗글 참조)** 아래는 제가 추천하는 언어들입니다. 이 언어들중에 부연설명이나 부가 자료들이 있다면 나눠 주세요.
이 중 하나를 읽으려면 코딩 문제 푸는 데 필요한 데이터 구조 및 알고리즘 지식이 있어야합니다.
검토(review)를 좋아하지 않는다면, **이 프로젝트의 모든 영상은 생략해도 됩니다.**
[Additional language-specific resources here.](programming-language-resources.md)
### C++
나는 아래의 두 책들을 읽지 않았습니다. 하지만 Sedgewick이 높게 평가한 책들입니다. 그는 정말 대단한 사람입니다.
- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf)
- 자세하고 많은 자료구조와 알고리즘.
- 처음 시도 하는 사람에게 좋은 선택.
C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적인 자료를 찾고 있습니다.
### Java
- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
- videos with book content (and Sedgewick!) on coursera:
- [Algorithms I](https://www.coursera.org/learn/algorithms-part1)
- [Algorithms II](https://www.coursera.org/learn/algorithms-part2)
또는:
- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
- by Goodrich, Tamassia, Goldwasser
- UC버클리 대학의 CS입문 과정의 선택 텍스트로 사용됨
- 아래에서 Python 버전에 대한 나의 책 보고서를 참조하십시오. 이 책은 동일한 주제를 다루고 있습니다.
### Python ### Python
- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
- by Goodrich, Tamassia, Goldwasser - by Goodrich, Tamassia, Goldwasser
- 나는 이 책을 사랑한다. 이 책은 모든 것을 다룬다. - 저는 이 책이 좋습니다. Python에 대한 모든 것과 부가적인 것을 다룹니다.
- Pythonic code - Python적인 코드
- 나의 열렬한 서적 보고서: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ - 저의 열렬한 서적 보고서: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf)
## 시작하기 전에 ### Java
이 문서는 몇 달간 계속 업데이트 되고 있으며, 그런 이유로, 내가 감당할 수 없어지기 시작한 듯하다. 여러분이 선택하세요:
내가 저지른 몇 가지 실수들을 소개한다. 이를 통해 당신은 이 과정을 좀 더 효과적으로 진행할 수 있기를 바란다. - Goodrich, Tamassia, Goldwasser
- [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
- Sedgewick and Wayne:
- [Algorithms](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
- 책의 내용을 가르쳐주는 무료 Cousera 강의 (저자가 가르쳐줍니다!):
- [Algorithms I](https://www.coursera.org/learn/algorithms-part1)
- [Algorithms II](https://www.coursera.org/learn/algorithms-part2)
### 1. 당신은 이것을 다 기억하지 못할 것이다.
나는 수 시간의 비디오를 보고 방대한 양의 노트를 작성했지만, 몇 달 뒤에는 대부분의 내용을 기억하지 못했다. 나는 3일 동안 내가 작성한 노트를 보고 flashcard를 만들면서 내용들을 다시 검토해야 했다. ### C++
꼭 읽고 내가 한 실수들을 반복하지 않길 바란다. 여러분이 선택하세요:
- Goodrich, Tamassia, and Mount
- [Data Structures and Algorithms in C++, 2nd Edition](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275)
- Sedgewick and Wayne
- [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
- [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/).
## 면접 준비 관련 도서
여러분은 이 책 뭉터기들을 다 살 필요는 없습니다. 솔직하게 말해서 "Cracking the Coding Interview"라는 책 하나면 충분합니다. 하지만 저는 더 준비해보기 위해 많이 사보았습니다. 결국 항상 너무 과했지만 말이죠.
저는 이 책을 둘 다 샀습니다. 굉장히 많은 걸 준비하게 해주었습니다.
- [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/)
- C++와 Java로 답변되어 있습니다.
- Cracking the Coding Interview 책을 위한 좋은 사전학습용 책입니다.
- 너무 어렵지 않습니다. 대부분의 문제가 여러분이 직접 겪게될 면접 문제보다 쉬울지도 모릅니다(제가 읽기로는)
- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
- JAVA로 답변되어 있습니다.
### 만일 당신이 시간이 넘쳐난다면
하나를 선택하세요:
- [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
- [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
- [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
- [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)
## 저와 같은 실수는 하지마세요
이 문서는 많은 달에 걸쳐서 추가되고 있고, 맞습니다, 이미 제 손을 떠났습니다.
여기에 제가 저지른 몇 가지 실수들을 적어놓았으니 여러분은 참고하시고 더 나은 방향으로 나아가시길 바랍니다. 물론 몇 달의 시간도 절약하실 겁니다.
### 1. 당신은 이것을 다 기억하지 못할 것이다
저는 수 시간의 비디오를 보고 방대한 양의 노트를 작성했지만, 몇 달 뒤에는 대부분의 내용을 기억하지 못했습니다. 저는 3일에 걸쳐 제가 작성한 노트를 보고 flashcard를 제작해서 복습할 수 있게 만들었습니다. 그 많은 지식들까지는 사실 필요 없었습니다.
꼭 읽고 제가 한 실수들을 반복하지 않길 바랍니다:
[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/) [Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/)
내가 추천받은 강좌 (아직 수업을 들어보지는 않았다): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) ### 2. 요약집(Flashcard)을 만들자
### 2. Flashcard를 사용하자. 이 문제를 해결하기 위해 2가지 종류(일반적인 내용, 코드)의 요약집을 보관하고 추가할 수 있는 조그만 사이트를 만들었습니다.
각 정리본은 다른 형식을 가지고 있습니다. 저는 모바일 우선인 웹사이트를 만들어서 제 휴대폰이나 태블릿 등 어디서나 볼 수 있게 했습니다.
이 문제를 해결하기 위해 나는 2가지 종류(일반적인 내용, 코드)의 flashcard를 보관하고 추가할 수 있는 작은 사이트를 만들었다. 여러분만의 요약집을 무료로 만들어봅시다:
각 카드는 다른 서식을 가지고 있다.
이 사이트는 모바일에 최적화 되어있기 때문에 내 전화기나 태블릿 어디에서든 이를 확인할 수 있다.
당신만의 카드를 무료로 만들어보자:
- [Flashcard 사이트 repo](https://github.com/jwasham/computer-science-flash-cards) - [Flashcard 사이트 repo](https://github.com/jwasham/computer-science-flash-cards)
- [내 flashcard 데이터베이스 (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
- [내 flashcard 데이터베이스 (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
앞에서도 언급했듯이 나는 불필요하게 많은 것을 공부하려고 했고, 내 카드의 내용들은 어셈블리 언어와 Python의 자잘한 지식들부터 기계 학습과 통계학까지 넘나들게 되었다. 결국 기업이 요구하는 것보다 훨씬 멀리 가버리고 말았다. **제 요약집을 그대로 사용하시는 건 추천하지 않습니다.** 거기엔 너무 많은 것들이 있고 대부분은 여러분이 필요하지 않은 것들뿐입니다.
**flashcard에 대한 참고사항:** 답을 할 수 있더라도 처음부터 안다고 표시하지 말자. 정확히 알기 전까지는 같은 카드를 보고 여러 번 답변할 수 있어야한다. 하지만 제 말을 듣고 싶지 않은 청개구리 같은 분들을 위해, 주소는 남겨두겠습니다:
반복 학습을 통해 해당 지식은 당신의 뇌에 깊이 각인될 것이다. - [내 flashcard 데이터베이스 (1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
- [내 flashcard 데이터베이스 (확장판 - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
나의 flashcard site를 사용하는 대신 [Anki](http://ankisrs.net/)를 사용해도 된다. 나는 이 것을 여러 번 추천받았다. 이것은 당신이 기억하는 것을 돕기 위해 반복적인 시스템을 사용한다. 앞에서도 언급했듯이 저는 불필요하게 많은 것을 공부하려고 했고, 카드의 내용들은 어셈블리 언어와 Python의 자잘한 지식들부터 기계 학습과 통계학까지 넘나들게 되었습니다. 이건 필요한 것에서 엇나가도 너무 엇나간 겁니다.
이것은 사용자 친화적이며, 모든 플랫폼에서 사용가능하다. 또한 클라우드 동기화 시스템을 제공한다. 이것은 iOS에서는 $25이지만 다른 플랫폼에서는 무료로 사용 가능하다. **flashcard에 대한 참고사항:** 한 번 답을 맞췄다고 해서 안다고 표시하지 맙시다. 정확히 알기 전까지는 같은 카드를 보고 여러 번 맞추어 보아야합니다.
반복 학습은 그 지식을 뇌에 깊이 각인시켜 줄 겁니다.
Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) 제 사이트를 사용하는 대신 [Anki](http://ankisrs.net/)를 사용해도 됩니다. 여러 번 추천받았던 사이트입니다. 이 사이트는 반복 시스템을 통해 여러분의 기억을 돕습니다. 사용자 친화적이며, 모든 플랫폼에서 사용 가능합니다. 또한 클라우드 동기화 시스템을 제공합니다. iOS에서는 2만 5천 원이지만 다른 플랫폼에서는 무료입니다.
### 3. 자료구조와 알고리즘을 배우면서 코딩 인터뷰를 시작하라 Anki 형식의 내 요약집 데이터베이스: https://ankiweb.net/shared/info/25173560 ([@xiewenya](https://github.com/xiewenya)에게 감사의 말을 전합니다).
문제를 풀기 위해 배웠던 무언가를 적용하는 것이 필요합니다., 그렇지 않으면 까먹을 겁니다. 내가 이 실수를 했습니다. 한 주제를 익혔다면 , 어떤 분들이 공백과 관련된 포맷팅 문제가 있다고 언급하셨는데 다음 방법으로 해결할 수 있습니다: open deck, edit card, click cards, select the "styling" radio button, add the member "white-space: pre;" to the card class.
링크드 리스트와 같이 그 주제에 좀 익숙해졌다면, 코딩 인터뷰 책 한권을 펴서 링크드 리스트와 관련된 문제를 몇개 풀어보십시오. 그리고 나서 다시 돌아가 다른 링크드리스트 문제를 해결하던, 회귀 문제나 다른 것을 하십시오. 하지만 배우면서 문제를 계속해서 푸십시오. 당신은 지식 자체의 소유가 아니라 그 지식을 적용할 수 있기에 고용되는 것입니다.
다음은 제가 추천하는 책과 사이트들입니다..
좀 더 알아보고 싶다면: [Coding Question Practice](#coding-question-practice)
### 4. 검토, 검토, 검토 ### 3. 배우는 동안에 코딩 면접 질문들을 보기
나는 ASCII, OSI 구조, Big-O 표기법 등에 관한 일련의 치트시트를 만들어 놓고, 여유 시간이 날 때마다 공부한다. 굉장히 중요합니다!
30분 동안 프로그래밍 문제를 해결하고, flashcard를 살펴보자. 코딩 면접 질문들을 여러분이 데이터 구조와 알고리즘을 배우는 동안에 봐두세요.
### 5. 집중 한 주제를 공부하고 충분히 익숙해졌다고 느낀다면(예를 들어 그것이 **연결 리스트**라면):
1. [코딩 면접 책들](#면접-준비-관련-도서)이나 더 밑에서 다룰 코딩 문제 사이트들을 준비합니다.
1. 연결 리스트에 관한 문제를 두세 문제 풀어봅니다.
1. 다음 배울 주제로 넘어갑니다.
1. 나중에, 다시 돌아와서 또 다른 두세 문제를 연결 리스트와 관련해서 풀어봅니다.
1. 이를 새 내용을 배울 때마다 반복합니다.
주의를 산만하게 만드는 많은 것이 있으며, 이것들은 우리의 귀중한 시간을 뺏어간다. 주의를 집중하는 것은 힘든 일이다. **반드시 여러분이 배우는 동안에 문제를 푸세요, 다 배우고 나서가 아니라.**
여러분은 지식 자체가 필요해서 고용되는 것이 아니라 그 지식을 활용하기 위해서 고용되는 것입니다.
이를 위한 엄청나게 많은 자료들이 아래에 있습니다. 계속 합시다.
### 4. 집중하기
주의를 산만하게 만드는 많은 것들이 우리의 귀중한 시간을 뺏어갑니다. 주의를 집중하는 일은 물론 힘듭니다. 가사 없는 음악을 듣다보면 좀 더 쉽게 집중하실 수 있습니다.
## 다루지 않을 것 ## 다루지 않을 것
@ -458,51 +470,76 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
- Javascript - Javascript
- HTML, CSS, 그리고 다른 프론트엔드 기술들 - HTML, CSS, 그리고 다른 프론트엔드 기술들
## 하루 하루의 계획 ## 하루하루의 계획
어떤 주제들은 하루가 걸리고, 어떤 것들은 며칠이 걸릴 것이다. 이 과정에는 엄청나게 많은 주제가 있습니다. 어떤 주제들은 며칠이 걸리거나 심지어 아마 일주일이나 그 이상이 걸릴지도 모릅니다. 여러분의 일정에 달려있습니다.
또 어떤것은 구현할 것들이 없이 그냥 배우는 것들이다.
아래 리스트에 있는 것에서 매일 하나의 주제를 택했고, 그 주제에 대한 강의를 보고, 구현을 했다: 매일매일, 다음 주제로 넘어가면서, 주제에 관한 동영상들을 보고, 그리고 실제로 선택한 언어의 데이터 구조나 알고리즘을 구현하세요.
- C - 인자를 가지는 구조체와 함수 사용
- C++ - 빌트인 타입 사용하지 않음
- C++ - 링크리스트를 위한 STL's std::list 같은 빌트인 타입 사용
- Python - 빌트인 타입 사용 (파이선 연습을 계속 하려고)
- 제대로 하고 있는지 테스트를 했고 가끔은 간단한 assert() 사용
- 당신은 아마 자바나 그 어떤 언어를 이용하겠지만 이것은 그냥 내 것들이다.
당신은 이것을 다 할 필요는 없다. 단지 [인터뷰를 위한 하나의 언어를 할 것.](#인터뷰를 위한 언어를 하나 골라 두어라). 여기서 제 코드들을 볼 수 있습니다:
- [C](https://github.com/jwasham/practice-c)
- [C++](https://github.com/jwasham/practice-cpp)
- [Python](https://github.com/jwasham/practice-python)
왜 이 모든것을 코딩해야 하는가? 모든 알고리즘을 외울 필요는 없습니다. 그저 그걸 이해하고 나만의 방식으로 구현할 수 있으면 됩니다.
- 나는 이것에 미칠때까지 연습하고 또 연습했고, 아무런 문제 없이 할 수 있게 되었다 (어떤 것들은 다양한 케이스가 있고 이것을 기억하기 위해 기록을 보관했다.)
- 있는 그대로의 제한 속에서 연습 (garbage collection의 도움없이 메모리 할당과 해지 (파이선 빼고))
- 빌트인 타입을 사용하여 나는 빌트인 도구에 대한 경험이 있게 되었다. (내 프로젝트의 링크 리스트 구현은 쓰지 않을 예정)
모든 주제에 대한 모든 것을 할 수 없지만 나는 노력했다. ## 코딩 질문 연습하기
나의 코드를 여기서 확인하세요: 왜 이게 여기 있죠? 전 아직 면접볼 준비가 안되어 있는데요.
- [C](https://github.com/jwasham/practice-c)
- [C++](https://github.com/jwasham/practice-cpp)
- [Python](https://github.com/jwasham/practice-python)
당신은 모든 알고리즘에 대해서 기억할 필요는 없다. [그렇다면 이걸 다시 읽어보세요](#3-배우는-동안에-코딩-면접-질문들을-보기)
컴퓨터에 코딩하지 말고 와이트보드나 종이에 적어보아라. 인풋 값으로 샘플 테스트를 해 보아라. 그리고 컴퓨터로 테스트해 보아라. 왜 프로그래밍 문제들을 풀면서 연습히야하는가:
- 문제 인식, 그리고 어디에 어떤 데이터 구조와 알고리즘을 썼어야했는지 알 수 있음
- 문제의 요구사항이 뭐였는지 이해할 수 있음
- 실제 면접처럼 자신만의 방식으로 문제를 설명할 수 있음
- 컴퓨터가 아니라 화이트보드나 종이에 코딩함
- 시간과 공간 복잡도를 함께 생각하게 됨(아래의 Big-O를 볼 것)
- 코드가 맞나 확인하게 됨
## 먼저 알아야 할 지식 면접에서 방법론적인, 양방향 소통인 문제 해결에 대한 훌륭한 소개글이 있습니다. 물론 프로그래밍 면접 책들에서도 배울 수 있겠지만 이 글이 더 미친 수준이라 봅니다: [Algorithm design canvas](http://www.hiredintech.com/algorithm-design/)
- [ ] **C언어 배우기** 컴퓨터가 아니라 화이트보드나 종이에 직접 코드를 적어보세요. 그리고 여기에 값들을 넣어보면서 테스트해보세요. 그리고는 컴퓨터에 코드를 치고 테스트해보세요.
- C 는 어디에나 있다. 당신은 책이나 강의, 비디오 등 공부하는 동안 모든 곳에서 예제를 볼 것이다.
- [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
- 이 책은 분량이 적은 책이지만 C언어를 잘 다룰 수 있게 해 줄 것이다. 또한 조금만 연습하더라도 연습량에 비해 빠르게 배울 수 있을 것이다. C언어를 이해하는 것은 프로그램과 메모리가 어떻게 돌아가는지 이해하는 것을 도와준다.
- [질의 응답](https://github.com/lekkas/c-algorithms)
- [ ] **컴퓨터가 프로그램을 어떻게 처리하는 지:** 만약 화이트보드가 집에 없다면, 문방구에 가서 그림용 공책을 사서 거기서 연습해보세요.
- [ ] [CPU는 프로그램을 어떻게 실행하는 지 (영상)](https://www.youtube.com/watch?v=XM4lGflQFvA) 이건 제 "소파 화이트보드"입니다. 크기 비교를 위해 사진에 펜을 추가해봤습니다. 펜을 쓰신다면 몇 분 후 지워지지 않는 펜을 원망하는 자신을 보게 될 겁니다.
- [ ] [컴퓨터의 계산 방법 - ALU (영상)](https://youtu.be/1I5ZMmrOfnA) 엄청 빨리 더러워집니다. **저는 그래서 연필과 지우개를 썼습니다.**
- [ ] [레지스터와 RAM (영상)](https://youtu.be/fpnE6UAfbtU)
- [ ] [중앙처리장치(CPU) (영상)](https://youtu.be/FZGugFqdr60) ![제 소파 화이트보드](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg)
- [ ] [명렁어와 프로그램 (영상)](https://youtu.be/zltgXvg6r3k)
**코딩 문제 연습은 프로그래밍 문제에 대한 답을 외우는 연습이 아니다.**
## 코딩 문제들
[여기 있는](#면접-준비-관련-도서) 코딩 면접 책들을 잊지마세요.
문제 푸는 법들:
- [해답을 찾는 법](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/)
- [탑코더 문제 상태 파헤치기](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/)
코딩 면접 질문 관련 동영상들:
- [IDeserve (동영상 88개)](https://www.youtube.com/playlist?list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
- [Tushar Roy (플레이리스트 5개)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
- Super for walkthroughs of problem solutions
- [Nick White - 릿코드 해답 (동영상 187개)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
- Good explanations of solution and the code
- You can watch several in a short time
- [FisherCoder - 릿코드 해답](https://youtube.com/FisherCoder)
도전 사이트들:
- [릿코드](https://leetcode.com/)
- My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing.
- See Nick White and FisherCoder Videos above for code walk-throughs.
- [해커랭크](https://www.hackerrank.com/)
- [탑코더](https://www.topcoder.com/)
- [Geeks for Geeks](https://practice.geeksforgeeks.org/explore/?page=1)
- [InterviewBit](https://www.interviewbit.com/)
- [Project Euler](https://projecteuler.net/)
## 이제 시작해봅시다
네, 잡설은 그만하고, 배워봅시다!
하지만 위의 코딩 문제를 배우는 중에 같이 풀어보는 거 절대 잊지마세요!
## 알고리즘 복잡도 / Big-O / 점근적 분석 ## 알고리즘 복잡도 / Big-O / 점근적 분석
@ -922,7 +959,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [꼬리 재귀가 무엇이고 왜 그게 좋지 않은지에 대하여](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - [ ] [꼬리 재귀가 무엇이고 왜 그게 좋지 않은지에 대하여](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
- [ ] [꼬리 재귀 (영상)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1) - [ ] [꼬리 재귀 (영상)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1)
- ### Dynamic Programming - ### Dynamic Programming
- 인터뷰에서 DP 문제를 접하지 않을 수도 있습니다. 하지만 알고 있는게 미뤄두는 것 보다 낫습니다. - 인터뷰에서 DP 문제를 접하지 않을 수도 있습니다. 하지만 알고 있는게 미뤄두는 것 보다 낫습니다.
- 이 주제는 아주 어렵습니다. DP로 풀리는 각 문제마다 어떤 점화식을 정의해야 하는데 그게 까다롭습니다. - 이 주제는 아주 어렵습니다. DP로 풀리는 각 문제마다 어떤 점화식을 정의해야 하는데 그게 까다롭습니다.
@ -983,7 +1019,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips)
- [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns)
- ### Combinatorics (n choose k) & Probability - ### Combinatorics (n choose k) & Probability
- [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
- [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) - [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
@ -1289,6 +1324,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
**코딩 문제 연습은 프로그래밍 문제에 대한 답을 외우는 것이 아니다.** **코딩 문제 연습은 프로그래밍 문제에 대한 답을 외우는 것이 아니다.**
당신에게 프로그래밍 문제를 푸는 연습이 필요한 이유: 당신에게 프로그래밍 문제를 푸는 연습이 필요한 이유:
- 문제 인식, 그리고 어떤 자료구조와 알고리즘이 언제 필요한지 - 문제 인식, 그리고 어떤 자료구조와 알고리즘이 언제 필요한지
- 문제의 조건을 모으기 - 문제의 조건을 모으기
- 인터뷰를 하듯 당신이 문제를 푸는 과정을 말하기 - 인터뷰를 하듯 당신이 문제를 푸는 과정을 말하기
@ -1329,6 +1365,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) - [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/)
코딩 인터뷰 질문들 영상: 코딩 인터뷰 질문들 영상:
- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
@ -1337,6 +1374,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) - [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder)
Challenge sites: Challenge sites:
- [LeetCode](https://leetcode.com/) - [LeetCode](https://leetcode.com/)
- My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing. - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing.
- [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode)
@ -1350,6 +1388,7 @@ Challenge sites:
- [Code Exercises](https://code-exercises.com) - [Code Exercises](https://code-exercises.com)
Language-learning sites, with challenges: Language-learning sites, with challenges:
- [Codewars](http://www.codewars.com) - [Codewars](http://www.codewars.com)
- [Codility](https://codility.com/programmers/) - [Codility](https://codility.com/programmers/)
- [HackerEarth](https://www.hackerearth.com/) - [HackerEarth](https://www.hackerearth.com/)
@ -1357,15 +1396,17 @@ Language-learning sites, with challenges:
- [Codechef](https://www.codechef.com/) - [Codechef](https://www.codechef.com/)
Challenge repos: Challenge repos:
- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) - [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges)
모의 면접: 모의 면접:
- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. - [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview.
- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews
- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies.
- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously. - [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously.
## 인터뷰가 얼마 남지 않았을 때 ## 면접이 얼마 남지 않았을 때
- [ ] Cracking The Coding Interview Set 2 (videos): - [ ] Cracking The Coding Interview Set 2 (videos):
- [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo)
@ -1375,7 +1416,6 @@ Challenge repos:
- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed
## 인터뷰가 다가오면 생각해보기 ## 인터뷰가 다가오면 생각해보기
아래의 아이템들에 따른 너가 받을 20개의 인터뷰 질문에 대해 생각하라. 각각 2-3개의 대답을 준비해라. 아래의 아이템들에 따른 너가 받을 20개의 인터뷰 질문에 대해 생각하라. 각각 2-3개의 대답을 준비해라.
@ -1493,7 +1533,6 @@ Challenge repos:
## Additional Learning ## Additional Learning
두루 갖춘 소프트웨어 엔지니어가 되는데 도움이 될만한 것들을 추가했습니다. 이를 통해 더 큰 도구들을 다루실 수 있게 되실 겁니다. 두루 갖춘 소프트웨어 엔지니어가 되는데 도움이 될만한 것들을 추가했습니다. 이를 통해 더 큰 도구들을 다루실 수 있게 되실 겁니다.
- ### Compilers - ### Compilers
@ -1746,7 +1785,6 @@ Challenge repos:
- covers cache-oblivious B-Trees, very interesting data structures - covers cache-oblivious B-Trees, very interesting data structures
- the first 37 minutes are very technical, may be skipped (B is block size, cache line size) - the first 37 minutes are very technical, may be skipped (B is block size, cache line size)
- ### k-D Trees - ### k-D Trees
- great for finding number of points in a rectangle or higher dimension object - great for finding number of points in a rectangle or higher dimension object
- a good fit for k-nearest neighbors - a good fit for k-nearest neighbors
@ -1816,7 +1854,7 @@ Challenge repos:
- [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X)
- [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/)
- [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
- Data School: http://www.dataschool.io/ - Data School: <http://www.dataschool.io/>
--- ---
@ -1842,7 +1880,6 @@ Challenge repos:
- [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
- [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
- **Union-Find** - **Union-Find**
- [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) - [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
- [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) - [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
@ -1977,6 +2014,7 @@ Challenge repos:
- [(많은 온라인 강의가 있는) 컴퓨터 과학 강의들](https://github.com/prakhar1989/awesome-courses) - [(많은 온라인 강의가 있는) 컴퓨터 과학 강의들](https://github.com/prakhar1989/awesome-courses)
## 학술 자료들 ## 학술 자료들
- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
- [implemented in Go](https://godoc.org/github.com/thomas11/csp) - [implemented in Go](https://godoc.org/github.com/thomas11/csp)