|
@@ -1,6 +1,6 @@
|
|
|
# Coding Interview University #
|
|
|
|
|
|
->**ดั้งเดิมผมสร้างเพื่อเป็นรายการที่ต้องทำสำหรับหัวข้อที่ต้องศึกษาเพื่อที่จะเป็นวิศวกรรมซอฟต์แวร์ แต่ว่ามันเติบโตขึ้นอย่างมาและมีหัวข้อต่างๆ มากมายอย่าบที่คุณเห็นอยู่ทุกวันนี้
|
|
|
+>**เดิมทีผมสร้างขึ้นเพื่อเป็นรายการที่ต้องทำสำหรับหัวข้อที่ต้องศึกษาเพื่อที่จะเป็นวิศวกรซอฟต์แวร์ แต่ว่ามันเติบโตขึ้นอย่างมากและมีหัวข้อต่างๆ มากมายอย่างที่คุณเห็นอยู่ทุกวันนี้
|
|
|
หัวข้อต่างๆ นี้จะเป็นสิ่งที่ให้คุณเตรียมตัวสำหรับสัมภาษณ์งานสำหรับบริษัทซอฟต์แวร์รวมทั้งบริษัทซอฟต์แวร์ขนาดใหญ่ของโลกอย่างเช่น Amazon Facebook Google หรือ Microsoft **
|
|
|
>
|
|
|
> *ขอให้คุณโชคดี!*
|
|
@@ -28,13 +28,13 @@
|
|
|
|
|
|
## นี่คืออะไร ?
|
|
|
|
|
|
-นี่เป็นแผนการศึกษาหลายเดือนของผมจากนักพัฒนาเว็บไซต์ (ด้วยการศึกษาด้วยตัวเอง โดยไม่ได้จบวิทยาการคอมพิวเตอร์) เพื่อจะเป็นวิศวกรรมซอฟต์แวร์ในบริษัทขนาดใหญ่ที่หลายๆ คนต้องการเข้าทำงานด้วย
|
|
|
+นี่เป็นแผนการศึกษาหลายเดือนของผมจากนักพัฒนาเว็บไซต์ (ด้วยการศึกษาด้วยตัวเอง โดยไม่ได้จบวิทยาการคอมพิวเตอร์) เพื่อจะเป็นวิศวกรซอฟต์แวร์ในบริษัทขนาดใหญ่ที่หลายๆ คนต้องการเข้าทำงานด้วย
|
|
|
|
|
|

|
|
|
|
|
|
-บทความนี้สำหรับคนที่อยากเป็น **วิศวกรรมซอฟต์แวร์** หรือต้องการเปลี่ยนมาจากนักพัฒนาซอฟต์แวร์หรือนักพัฒนาเว็บไซด์มาเป็นวิศวกรรมซอฟต์แวร์ (ผู้ซึ่งมีความรู้ความเข้าใจลึกซึ่งในหลักการของวิทยาการคอมพิวเคอร์) ถ้าคุณมีประสบการณ์หลายปีและมั่นใจในประสบการณ์การเป็นวิศวกรรมซอฟต์แวร์ของคุณ จะได้เจอการสัมภาษณ์ที่ยากแน่นอน
|
|
|
+บทความนี้สำหรับคนที่อยากเป็น **วิศวกรซอฟต์แวร์** หรือต้องการเปลี่ยนมาจากนักพัฒนาซอฟต์แวร์หรือนักพัฒนาเว็บไซด์มาเป็นวิศวกรซอฟต์แวร์ (ผู้ซึ่งมีความรู้ความเข้าใจลึกซึ่งในหลักการของวิทยาการคอมพิวเตอร์) ถ้าคุณมีประสบการณ์หลายปีและมั่นใจในประสบการณ์การเป็นวิศวกรซอฟต์แวร์ของคุณ จะได้เจอการสัมภาษณ์ที่ยากขึ้นแน่นอน
|
|
|
|
|
|
-ถ้าคุณมีประสบการณ์การพัฒนาซอฟต์แวร์หรือเว็บไซต์มาหลายปี แต่ในบริษัทซอฟต์แวร์ขนาดใหญ่ของโลกอย่าง Google Amazon Facebook และ Microsoft มองการพัฒนาซอฟต์แวร์ของวิศวกรรมซอฟต์แวร์ที่ต่างกันออกไปจากการพัฒนาซอฟต์แวร์หรือเว็บไซต์โดยทั่วๆไป และบริษัทที่กล่าวมานี้ก็ต้องการความรู้ทางวิทยาการคอมพิวเตอร์ที่เข้มข้นอย่างมาก
|
|
|
+ถ้าคุณมีประสบการณ์การพัฒนาซอฟต์แวร์หรือเว็บไซต์มาหลายปี แต่ในบริษัทซอฟต์แวร์ขนาดใหญ่ของโลกอย่าง Google Amazon Facebook และ Microsoft มองการพัฒนาซอฟต์แวร์ของวิศวกรซอฟต์แวร์ที่ต่างกันออกไปจากการพัฒนาซอฟต์แวร์หรือเว็บไซต์โดยทั่วๆไป และบริษัทที่กล่าวมานี้ก็ต้องการความรู้ทางวิทยาการคอมพิวเตอร์ที่เข้มข้นอย่างมาก
|
|
|
|
|
|
ถ้าคุณต้องการเป็นวิศวกรคุณภาพ หรือวิศวกรระบบ คุณอาจจะต้องศึกษาเพิ่มเติมในรายการเพิ่มเติม (ระบบเครือข่าย, ระบบความปลอดภัย)
|
|
|
|
|
@@ -55,7 +55,7 @@
|
|
|
- [อะไรที่ไม่ครอบคลุม](#what-you-wont-see-covered)
|
|
|
- [ความรู้ที่ต้องมีมาก่อน](#prerequisite-knowledge)
|
|
|
- [แผนของแต่ละวัน](#the-daily-plan)
|
|
|
-- [ขั้นตอนวิธีที่ซับซ้อน / Big-O / การวิเคราะห์ Asymptotic](#algorithmic-complexity--big-o--asymptotic-analysis)
|
|
|
+- [ความซับซ้อนของขั้นตอนวิธี / Big-O / การวิเคราะห์ Asymptotic](#algorithmic-complexity--big-o--asymptotic-analysis)
|
|
|
- [โครงสร้างข้อมูล](#data-structures)
|
|
|
- [แถวลำดับ (Arrays)](#arrays)
|
|
|
- [รายการโยง (Linked Lists)](#linked-lists)
|
|
@@ -88,7 +88,7 @@
|
|
|
- [การโปรแกรมแบบพลวัต](#dynamic-programming)
|
|
|
- [การเขียนโปรแกรมเชิงวัตถุ](#object-oriented-programming)
|
|
|
- [แบบแผนการออกแบบ](#design-patterns)
|
|
|
- - [คณิตศาสตร์เชิงการจัด (n เลือก k) & ความน่าจเป็น](#combinatorics-n-choose-k--probability)
|
|
|
+ - [คณิตศาสตร์เชิงการจัด (n เลือก k) & ความน่าจะเป็น](#combinatorics-n-choose-k--probability)
|
|
|
- [กลุ่มปัญหาเอ็นพี (NP), เอ็นพีบริบูรณ์ (NP-Complete) และ ระเบียบวิธีการประมาณการ](#np-np-complete-and-approximation-algorithms)
|
|
|
- [แคช](#caches)
|
|
|
- [กระบวนการ และ เทรด](#processes-and-threads)
|
|
@@ -108,7 +108,7 @@
|
|
|
- [แบบฝึกหัดและความท้ายทายของการเขียนโปรแกรม](#coding-exerciseschallenges)
|
|
|
- [เมื่อใกล้ถึงวันสัมภาษณ์งาน](#once-youre-closer-to-the-interview)
|
|
|
- [ประวัติย่อของคุณ](#your-resume)
|
|
|
-- [สิ่งที่คิดไว้ชเมื่อวันสัมภาษณ์มาถึง](#be-thinking-of-for-when-the-interview-comes)
|
|
|
+- [สิ่งที่คิดไว้เมื่อวันสัมภาษณ์มาถึง](#be-thinking-of-for-when-the-interview-comes)
|
|
|
- [คำถามสำหรับผู้สัมภาษณ์](#have-questions-for-the-interviewer)
|
|
|
- [เมื่อคุณได้งาน](#once-youve-got-the-job)
|
|
|
|
|
@@ -260,7 +260,7 @@ This is a shorter list than what I used. This is abbreviated to save you time.
|
|
|
|
|
|
If you have tons of extra time:
|
|
|
|
|
|
-- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
|
|
|
+- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
|
|
|
- [ ] [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
|
|
|
|
|
|
### Computer Architecture
|
|
@@ -279,7 +279,7 @@ If short on time:
|
|
|
- Chapter 7 - Composite Data Types and Memory Objects
|
|
|
- Chapter 9 - CPU Architecture
|
|
|
- Chapter 10 - Instruction Set Architecture
|
|
|
- - Chapter 11 - Memory Architecture and Organization
|
|
|
+ - Chapter 11 - Memory Architecture and Organization
|
|
|
|
|
|
If you have more time (I want this book):
|
|
|
|
|
@@ -290,7 +290,7 @@ If you have more time (I want this book):
|
|
|
|
|
|
**You need to choose a language for the interview (see above).** Here are my recommendations by language. I don't have resources for all languages. I welcome additions.
|
|
|
|
|
|
-If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems.
|
|
|
+If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems.
|
|
|
**You can skip all the video lectures in this project**, unless you'd like a review.
|
|
|
|
|
|
[Additional language-specific resources here.](programming-language-resources.md)
|
|
@@ -299,7 +299,7 @@ If you read though one of these, you should have all the data structures and alg
|
|
|
|
|
|
I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome.
|
|
|
|
|
|
-- [ ] [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++, 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/)
|
|
|
|
|
|
If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource.
|
|
@@ -364,7 +364,7 @@ OR:
|
|
|
that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter.
|
|
|
|
|
|
- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~
|
|
|
- - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results.
|
|
|
+ - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results.
|
|
|
- Would rather spend time on coding problems from another book or online coding problems.
|
|
|
|
|
|
|
|
@@ -393,7 +393,7 @@ I made a mobile-first website so I could review on my phone and tablet, wherever
|
|
|
Make your own for free:
|
|
|
|
|
|
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
|
|
|
-- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
|
|
|
+- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
|
|
|
- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
|
|
|
|
|
|
Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required.
|
|
@@ -402,7 +402,7 @@ Keep in mind I went overboard and have cards covering everything from assembly l
|
|
|
same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in
|
|
|
your brain.
|
|
|
|
|
|
-An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember.
|
|
|
+An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember.
|
|
|
It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms.
|
|
|
|
|
|
My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya))
|
|
@@ -460,9 +460,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
|
- [ ] **Learn C**
|
|
|
- C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying.
|
|
|
- [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
|
|
|
- - This is a short book, but it will give you a great handle on the C language and if you practice it a little
|
|
|
+ - This is a short book, but it will give you a great handle on the C language and if you practice it a little
|
|
|
you'll quickly get proficient. Understanding C helps you understand how programs and memory work.
|
|
|
- - [answers to questions](https://github.com/lekkas/c-algorithms)
|
|
|
+ - [answers to questions](https://github.com/lekkas/c-algorithms)
|
|
|
|
|
|
- [ ] **How computers process a program:**
|
|
|
- [ ] [How does CPU execute program (video)](https://www.youtube.com/watch?v=42KTvGYQYnA)
|
|
@@ -1102,7 +1102,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
|
- [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2)
|
|
|
- [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
|
|
|
- [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
|
|
|
-
|
|
|
+
|
|
|
If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
|
|
|
|
|
|
- ### Tries
|
|
@@ -1137,7 +1137,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
|
- [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
|
|
|
- Very technical talk for kernel devs. Don't worry if most is over your head.
|
|
|
- The first half is enough.
|
|
|
-
|
|
|
+
|
|
|
- ### Networking
|
|
|
- **if you have networking experience or want to be a systems engineer, expect questions**
|
|
|
- otherwise, this is just good to know
|
|
@@ -1157,8 +1157,8 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
|
|
|
|
## System Design, Scalability, Data Handling
|
|
|
- **You can expect system design questions if you have 4+ years of experience.**
|
|
|
-- Scalability and System Design are very large topics with many topics and resources, since
|
|
|
- there is a lot to consider when designing a software/hardware system that can scale.
|
|
|
+- Scalability and System Design are very large topics with many topics and resources, since
|
|
|
+ there is a lot to consider when designing a software/hardware system that can scale.
|
|
|
Expect to spend quite a bit of time on this.
|
|
|
- Considerations:
|
|
|
- scalability
|
|
@@ -1469,7 +1469,7 @@ You're never really done.
|
|
|
|
|
|
## Additional Learning
|
|
|
|
|
|
-These topics will likely not come up in an interview, but I added them to help you become a well-rounded
|
|
|
+These topics will likely not come up in an interview, but I added them to help you become a well-rounded
|
|
|
software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox.
|
|
|
|
|
|
- ### Compilers
|
|
@@ -1937,4 +1937,3 @@ Sit back and enjoy. "Netflix and skill" :P
|
|
|
|
|
|
- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science)
|
|
|
- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses)
|
|
|
-
|