Hướng dẫn ace the python coding interview github - ace the python coding phỏng vấn github

Đại học phỏng vấn mã hóa

Ban đầu tôi đã tạo ra đây như một danh sách việc cần làm ngắn gọn về các chủ đề nghiên cứu để trở thành một kỹ sư phần mềm, nhưng nó đã phát triển thành danh sách lớn mà bạn thấy ngày hôm nay. Sau khi trải qua kế hoạch nghiên cứu này, tôi đã được thuê làm kỹ sư phát triển phần mềm tại Amazon! Bạn có thể sẽ không phải học nhiều như tôi đã làm. Dù sao, mọi thứ bạn cần là ở đây.

Show

Tôi đã học khoảng 8-12 giờ mỗi ngày, trong vài tháng. Đây là câu chuyện của tôi: Tại sao tôi học toàn thời gian trong 8 tháng cho một cuộc phỏng vấn của Google

Xin lưu ý: bạn sẽ không cần học nhiều như tôi đã làm. Tôi đã lãng phí rất nhiều thời gian cho những điều tôi không cần biết. Thông tin thêm về điều đó dưới đây. Tôi sẽ giúp bạn đến đó mà không lãng phí thời gian quý báu của bạn. You won't need to study as much as I did. I wasted a lot of time on things I didn't need to know. More info about that below. I'll help you get there without wasting your precious time.

Các mục được liệt kê ở đây sẽ chuẩn bị cho bạn một cuộc phỏng vấn kỹ thuật tại bất kỳ công ty phần mềm nào, bao gồm Người khổng lồ: Amazon, Facebook, Google và Microsoft.

Nhưng điêu tôt đẹp nhât se đên vơi bạn!

Translations:
  • 中文
  • Tiếng việt - người Việt Nam
  • Español
  • Bồ Đào Nha Brasileiro
  • Đánh bóng
  • 繁體
  • Tiếng Nhật (日本語)
  • tiếng Nga
  • tiếng Đức
  • Tiếng bahasa indonesia
  • - Khmer
  • Uzbek
  • Bulgaria
  • বাংলা - Bangla
Bản dịch đang diễn ra:
  • हिन
  • עבר
  • tiếng Ả Rập
  • Thổ Nhĩ Kỳ
  • người Pháp
  • Bạn có thể
  • Hàn Quốc (한국어)
  • Telugu
  • Urdu
  • Thái
  • người Hy Lạp
  • Malayalam
  • Ba Tư - Farsi
  • Người Afrika

Nó là gì?

Hướng dẫn ace the python coding interview github - ace the python coding phỏng vấn github

Đây là kế hoạch học tập nhiều tháng của tôi để trở thành một kỹ sư phần mềm cho một công ty lớn.

Required:

  • Một ít kinh nghiệm với mã hóa (biến, vòng lặp, phương thức/chức năng, v.v.)
  • Tính kiên nhẫn
  • Thời gian

Lưu ý Đây là một kế hoạch nghiên cứu cho kỹ thuật phần mềm, không phát triển web. Các công ty phần mềm lớn như Google, Amazon, Facebook và Microsoft xem kỹ thuật phần mềm khác với phát triển web. Ví dụ, Amazon có Kỹ sư Frontend (Phí) và Kỹ sư phát triển phần mềm (SDE). Đây là 2 vai trò riêng biệt và các cuộc phỏng vấn cho họ sẽ không giống nhau, vì mỗi người có năng lực riêng. Các công ty này yêu cầu kiến ​​thức khoa học máy tính cho vai trò phát triển/kỹ thuật phần mềm.software engineering, not web development. Large software companies like Google, Amazon, Facebook and Microsoft view software engineering as different from web development. For example, Amazon has Frontend Engineers (FEE) and Software Development Engineers (SDE). These are 2 separate roles and the interviews for them will not be the same, as each has its own competencies. These companies require computer science knowledge for software development/engineering roles.


Mục lục

Kế hoạch nghiên cứu

  • Nó là gì?
  • Đây là kế hoạch học tập nhiều tháng của tôi để trở thành một kỹ sư phần mềm cho một công ty lớn.
  • Một ít kinh nghiệm với mã hóa (biến, vòng lặp, phương thức/chức năng, v.v.)
  • Tính kiên nhẫn
  • Thời gian
  • Lưu ý Đây là một kế hoạch nghiên cứu cho kỹ thuật phần mềm, không phát triển web. Các công ty phần mềm lớn như Google, Amazon, Facebook và Microsoft xem kỹ thuật phần mềm khác với phát triển web. Ví dụ, Amazon có Kỹ sư Frontend (Phí) và Kỹ sư phát triển phần mềm (SDE). Đây là 2 vai trò riêng biệt và các cuộc phỏng vấn cho họ sẽ không giống nhau, vì mỗi người có năng lực riêng. Các công ty này yêu cầu kiến ​​thức khoa học máy tính cho vai trò phát triển/kỹ thuật phần mềm.
  • Mục lục
  • Kế hoạch nghiên cứu
  • Tại sao sử dụng nó?
  • Làm thế nào để sử dụng nó
  • Đừng cảm thấy bạn không đủ thông minh
  • Một lưu ý về tài nguyên video
  • Chọn một ngôn ngữ lập trình

Sách cho cấu trúc dữ liệu và thuật toán

  • Sách chuẩn bị phỏng vấn
  • Đừng phạm sai lầm của tôi
    • Những gì bạn sẽ không thấy được bảo hiểm
    • Kế hoạch hàng ngày
    • Thực hành câu hỏi mã hóa
    • Vấn đề mã hóa
    • Chủ đề nghiên cứu
  • Phân tích độ phức tạp thuật toán / phân tích Big-O / Asmptotic
    • Cấu trúc dữ liệu
    • Mảng
  • Danh sách liên kết
    • Cây rơm
    • Xếp hàng
    • Bàn băm
    • Thêm kiến ​​thức
    • Tìm kiếm nhị phân
  • Hoạt động bitwise
    • Cây
    • Cây - Giới thiệu
    • Cây tìm kiếm nhị phân: BSTS
    • Hàng đợi / Hàng đợi ưu tiên / đống nhị phân
    • Cây tìm kiếm cân bằng (khái niệm chung, không chi tiết)
  • Traversals: đặt hàng trước, đặt hàng, bưu điện, BFS, DFS
    • Sắp xếp
    • lựa chọn
    • chèn
    • Heapsort
    • sắp xếp nhanh chóng
  • Hợp nhất sắp xếp
    • Đồ thị
    • Chỉ đạo
    • vô hướng
    • ma trận kề
    • Danh sách kề
    • Traversals: BFS, DFS
    • Thậm chí nhiều kiến ​​thức
    • Đệ quy
    • Lập trình năng động
    • Mô hình thiết kế
    • Tổ hợp (n chọn k) & xác suất
    • NP, thuật toán gần đúng NP và gần đúng
    • Cách máy tính xử lý một chương trình
    • Bộ nhớ cache
    • Quá trình và chủ đề
  • Kiểm tra

Tìm kiếm và thao tác chuỗi

  • Cố gắng
  • Số điểm nổi
  • Unicode
  • Endianness
  • Kết nối mạng
  • Đánh giá cuối cùng

Nhận công việc

Cập nhật sơ yếu lý lịch của bạn

  • Tìm việc làm
  • Quy trình phỏng vấn & chuẩn bị phỏng vấn chung
  • Đang suy nghĩ khi cuộc phỏng vấn đến
    • Có câu hỏi cho người phỏng vấn
    • Khi bạn đã có công việc
    • ---------------- mọi thứ bên dưới điểm này là tùy chọn ----------------
    • Chủ đề & tài nguyên bổ sung tùy chọn
    • Sách bổ sung
    • Thiết kế hệ thống, khả năng mở rộng, xử lý dữ liệu (nếu bạn có hơn 4 năm kinh nghiệm)
    • Học thêm
    • Trình biên dịch
    • Emacs và VI (M)
    • Công cụ dòng lệnh UNIX
    • Lý thuyết thông tin
    • Mã ngang bằng & Hamming
    • A*
    • Sự hỗn loạn
    • Mật mã
    • Nén
    • Bảo mật máy tính
    • Thu gom rác thải
    • Lập trình song song
    • Tin nhắn, tuần tự hóa và hệ thống xếp hàng
      • Biến đổi Fourier nhanh
      • Bộ lọc nở hoa
      • Hyperloglog
      • Băm nhạy cảm địa phương
      • Van emde boas cây
      • Cấu trúc dữ liệu tăng cường
      • B-Trees
    • Cây tìm kiếm cân bằng
    • Cây avl
    • Cây splay
    • Cây đỏ/đen
    • 2-3 cây tìm kiếm
    • 2-3-4 cây (còn gọi là 2-4 cây)
    • Cây n-ary (k-ary, m-ary)
    • Cây K-D
    • Bỏ qua danh sách
  • Lưu lượng mạng
  • Setoint Sets & Union Find
  • Toán học để xử lý nhanh
  • Treap

Đây là kế hoạch học tập nhiều tháng của tôi để trở thành một kỹ sư phần mềm cho một công ty lớn.

Một ít kinh nghiệm với mã hóa (biến, vòng lặp, phương thức/chức năng, v.v.)

Tính kiên nhẫn

Thời gian

Đó là một kế hoạch dài. Nó có thể mất nhiều tháng. Nếu bạn đã quen thuộc với rất nhiều điều này, nó sẽ khiến bạn mất ít thời gian hơn.

Làm thế nào để sử dụng nó

Tất cả mọi thứ dưới đây là một phác thảo và bạn nên giải quyết các mục theo thứ tự từ trên xuống dưới.

Tôi đang sử dụng hương vị Markdown đặc biệt của GitHub, bao gồm các danh sách các nhiệm vụ để theo dõi tiến trình.

  • Thông tin thêm về đánh dấu có hương vị GitHub

Nếu bạn không muốn sử dụng git

Trên trang này, nhấp vào nút mã gần đầu, sau đó nhấp vào "Tải xuống Zip". Giải nén tệp và bạn có thể làm việc với các tệp văn bản.

Nếu bạn đang mở trong trình chỉnh sửa mã hiểu Markdown, bạn sẽ thấy mọi thứ được định dạng độc đáo.

Nếu bạn thoải mái với Git

Tạo một nhánh mới để bạn có thể kiểm tra các mục như thế này, chỉ cần đặt một X trong ngoặc: [x]

  1. Fork the GitHub repo: https://github.com/jwasham/coding-interview-university bằng cách nhấp vào nút Fork. https://github.com/jwasham/coding-interview-university by clicking on the Fork button.

  2. Clone to Repo địa phương của bạn:

    git clone :/coding-interview-university.git
    cd coding-interview-university
    git checkout -b progress
    git remote add jwasham https://github.com/jwasham/coding-interview-university
    git fetch --all
    

  3. Đánh dấu tất cả các hộp với x Sau khi bạn hoàn thành các thay đổi của mình:

    git add .
    git commit -m "Marked x"
    git rebase jwasham/main
    git push --set-upstream origin progress
    git push --force
    

Đừng cảm thấy bạn không đủ thông minh

  • Các kỹ sư phần mềm thành công là thông minh, nhưng nhiều người có một sự bất an rằng họ không đủ thông minh.
  • Các video sau có thể giúp bạn vượt qua sự bất an này:
    • Huyền thoại của lập trình viên thiên tài
    • Thật nguy hiểm khi đi một mình: chiến đấu với những con quái vật vô hình trong công nghệ

Một lưu ý về tài nguyên video

Một số video chỉ có sẵn bằng cách đăng ký vào lớp Coursera hoặc EDX. Chúng được gọi là MOOCS. Đôi khi các lớp không có trong phiên nên bạn phải đợi một vài tháng, vì vậy bạn không có quyền truy cập.

Sẽ thật tuyệt vời khi thay thế các tài nguyên khóa học trực tuyến bằng các nguồn công cộng miễn phí và luôn có sẵn, chẳng hạn như video YouTube (tốt nhất là các bài giảng của trường đại học), để mọi người có thể học này bất cứ lúc nào, không chỉ khi một khóa học trực tuyến cụ thể đang diễn ra.

Chọn một ngôn ngữ lập trình

Bạn sẽ cần chọn một ngôn ngữ lập trình cho các cuộc phỏng vấn mã hóa bạn làm, nhưng bạn cũng cần tìm một ngôn ngữ mà bạn có thể sử dụng để nghiên cứu các khái niệm khoa học máy tính.

Tốt nhất là ngôn ngữ sẽ giống nhau, do đó bạn chỉ cần thành thạo một.

Đối với kế hoạch nghiên cứu này

Khi tôi thực hiện kế hoạch học tập, tôi đã sử dụng 2 ngôn ngữ cho hầu hết: C và Python

  • C: Mức độ rất thấp. Cho phép bạn đối phó với các con trỏ và phân bổ bộ nhớ/giải quyết, vì vậy bạn cảm thấy các cấu trúc dữ liệu và thuật toán trong xương của bạn. Trong các ngôn ngữ cấp cao hơn như Python hoặc Java, chúng được ẩn khỏi bạn. Trong công việc hàng ngày, thật tuyệt vời, nhưng khi bạn tìm hiểu cách xây dựng các cấu trúc dữ liệu cấp thấp này, thật tuyệt khi cảm thấy gần với kim loại.
    • C ở khắp mọi nơi. Bạn sẽ thấy các ví dụ trong sách, bài giảng, video, ở mọi nơi trong khi bạn đang học.
    • Ngôn ngữ lập trình C, tập 2
      • Đây là một cuốn sách ngắn, nhưng nó sẽ cung cấp cho bạn một xử lý tuyệt vời về ngôn ngữ C và nếu bạn thực hành nó một chút, bạn sẽ nhanh chóng thành thạo. Hiểu C giúp bạn hiểu cách các chương trình và bộ nhớ hoạt động.
      • Bạn không cần phải đi siêu sâu trong cuốn sách (hoặc thậm chí hoàn thành nó). Chỉ cần đến nơi bạn thoải mái khi đọc và viết ở C.
      • Câu trả lời cho các câu hỏi trong cuốn sách
  • Python: Hiện đại và rất biểu cảm, tôi đã học được vì nó rất hữu ích và cũng cho phép tôi viết ít mã hơn trong một cuộc phỏng vấn.

Đây là sở thích của tôi. Bạn làm những gì bạn thích, tất nhiên.

Bạn có thể không cần nó, nhưng đây là một số trang web để học một ngôn ngữ mới:

  • Bài tập
  • CodeWars
  • Hackerearth
  • Chủ đề Scaler (Java, C ++)

Đối với cuộc phỏng vấn mã hóa của bạn

Bạn có thể sử dụng một ngôn ngữ mà bạn cảm thấy thoải mái để thực hiện phần mã hóa của cuộc phỏng vấn, nhưng đối với các công ty lớn, đây là những lựa chọn vững chắc:

  • C++
  • Java
  • Python

Bạn cũng có thể sử dụng những thứ này, nhưng đọc xung quanh trước. Có thể có cảnh báo:

  • JavaScript
  • Ruby

Dưới đây là một bài viết tôi đã viết về việc chọn một ngôn ngữ cho cuộc phỏng vấn: chọn một ngôn ngữ cho cuộc phỏng vấn mã hóa. Đây là bài viết gốc Bài viết của tôi dựa trên: chọn ngôn ngữ lập trình cho các cuộc phỏng vấn

Bạn cần phải rất thoải mái trong ngôn ngữ và có kiến ​​thức.

Đọc thêm về các lựa chọn:

  • Chọn ngôn ngữ phù hợp cho cuộc phỏng vấn mã hóa của bạn

Xem các tài nguyên cụ thể về ngôn ngữ ở đây

Sách cho cấu trúc dữ liệu và thuật toán

Cuốn sách này sẽ tạo thành nền tảng của bạn cho khoa học máy tính.

Chỉ cần chọn một, bằng một ngôn ngữ mà bạn sẽ thoải mái. Bạn sẽ thực hiện rất nhiều việc đọc và mã hóa.

C

  • Thuật toán trong C, Phần 1-5 (Gói), Phiên bản thứ 3
    • Nguyên tắc cơ bản, cấu trúc dữ liệu, phân loại, tìm kiếm và thuật toán đồ thị

Python

  • Bạn cũng có thể sử dụng những thứ này, nhưng đọc xung quanh trước. Có thể có cảnh báo:
    • JavaScript
    • Ruby
    • Dưới đây là một bài viết tôi đã viết về việc chọn một ngôn ngữ cho cuộc phỏng vấn: chọn một ngôn ngữ cho cuộc phỏng vấn mã hóa. Đây là bài viết gốc Bài viết của tôi dựa trên: chọn ngôn ngữ lập trình cho các cuộc phỏng vấn
    • Bạn cần phải rất thoải mái trong ngôn ngữ và có kiến ​​thức.

Java

Python

  • Bạn cũng có thể sử dụng những thứ này, nhưng đọc xung quanh trước. Có thể có cảnh báo:
    • JavaScript
  • Sedgewick và Wayne:
    • Thuật toán
    • Khóa học miễn phí Coursera bao gồm cuốn sách (được giảng dạy bởi các tác giả!):
      • Thuật toán i
      • Thuật toán II

C++

Lựa chọn của bạn:

  • Goodrich, Tamassia và Núi
    • Cấu trúc dữ liệu và thuật toán trong C ++, Phiên bản thứ 2
  • Sedgewick và Wayne
    • Các thuật toán trong C ++, Phần 1-4: Nguyên tắc cơ bản, Cấu trúc dữ liệu, Sắp xếp, Tìm kiếm
    • Các thuật toán trong C ++ Phần 5: Thuật toán đồ thị

Sách chuẩn bị phỏng vấn

Bạn không cần phải mua một loạt những thứ này. Thành thật mà nói "bẻ khóa cuộc phỏng vấn mã hóa" có lẽ là đủ, nhưng tôi đã mua nhiều hơn để cho bản thân thực hành nhiều hơn. Nhưng tôi luôn làm quá nhiều.

Tôi đã mua cả hai. Họ đã cho tôi rất nhiều thực hành.

  • Các cuộc phỏng vấn lập trình tiếp xúc: Mã hóa theo cách của bạn thông qua cuộc phỏng vấn, Phiên bản thứ 4
    • Câu trả lời trong C ++ và Java
    • Đây là một khởi động tốt để bẻ khóa cuộc phỏng vấn mã hóa
    • Không quá khó. Hầu hết các vấn đề có thể dễ dàng hơn những gì bạn sẽ thấy trong một cuộc phỏng vấn (từ những gì tôi đã đọc)
  • Khai thác cuộc phỏng vấn mã hóa, Phiên bản thứ 6
    • Câu trả lời trong Java

Nếu bạn có hàng tấn thời gian thêm:

Chọn một:

  • Các yếu tố của các cuộc phỏng vấn lập trình (phiên bản C ++)
  • Các yếu tố của các cuộc phỏng vấn lập trình trong Python
  • Các yếu tố của các cuộc phỏng vấn lập trình (Phiên bản Java) - Dự án đồng hành - Phương pháp Stub và các trường hợp kiểm tra cho mọi vấn đề trong cuốn sách

Đừng phạm sai lầm của tôi

Danh sách này đã tăng lên trong nhiều tháng, và vâng, nó đã ra khỏi tầm tay.

Dưới đây là một số sai lầm tôi đã mắc phải vì vậy bạn sẽ có trải nghiệm tốt hơn. Và bạn sẽ tiết kiệm nhiều tháng.

1. Bạn sẽ không nhớ tất cả

Tôi đã xem hàng giờ video và ghi chép rất nhiều, và nhiều tháng sau, tôi không nhớ nhiều. Tôi đã dành 3 ngày để xem các ghi chú của mình và làm flashcards, vì vậy tôi có thể xem xét. Tôi không cần tất cả kiến ​​thức đó.

Xin vui lòng, đọc để bạn sẽ không phạm sai lầm của tôi:

Giữ lại kiến ​​thức khoa học máy tính.

2. Sử dụng flashcards

Để giải quyết vấn đề, tôi đã tạo một trang web Flashcards nhỏ nơi tôi có thể thêm flashcards của 2 loại: chung và mã. Mỗi thẻ có định dạng khác nhau. Tôi đã tạo một trang web đầu tiên trên thiết bị di động, vì vậy tôi có thể xem lại trên điện thoại hoặc máy tính bảng của mình, bất cứ nơi nào tôi có.

Tự làm miễn phí:

  • Trang web flashcards repo

Tôi không khuyên bạn nên sử dụng flashcards của mình. Có quá nhiều và hầu hết trong số họ là những câu đố mà bạn không cần. There are too many and most of them are trivia that you don't need.

Nhưng nếu bạn không muốn lắng nghe tôi, bạn đi đây:

  • Cơ sở dữ liệu thẻ flash của tôi (1200 thẻ):
  • Cơ sở dữ liệu thẻ flash của tôi (Extreme - 1800 thẻ):

Hãy nhớ rằng tôi đã quá nhiệt tình và có các thẻ bao gồm tất cả mọi thứ, từ ngôn ngữ lắp ráp và câu đố Python đến học máy và thống kê. Đó là quá nhiều cho những gì được yêu cầu.

Lưu ý trên flashcards: Lần đầu tiên bạn nhận ra bạn biết câu trả lời, đừng đánh dấu nó như đã biết. Bạn phải xem cùng một thẻ và trả lời chính xác nhiều lần trước khi bạn thực sự biết nó. Sự lặp lại sẽ đặt kiến ​​thức đó sâu sắc hơn trong não của bạn. The first time you recognize you know the answer, don't mark it as known. You have to see the same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in your brain.

Một giải pháp thay thế cho việc sử dụng trang web flashcard của tôi là Anki, đã được đề xuất cho tôi nhiều lần. Nó sử dụng một hệ thống lặp lại để giúp bạn nhớ. Nó thân thiện với người dùng, có sẵn trên tất cả các nền tảng và có hệ thống đồng bộ hóa đám mây. Nó có giá 25 đô la trên iOS nhưng miễn phí trên các nền tảng khác.

Cơ sở dữ liệu flashcard của tôi ở định dạng Anki: https://ankiweb.net/shared/info/25173560 (cảm ơn @xiewenya).

Một số sinh viên đã đề cập đến các vấn đề định dạng với không gian trắng có thể được khắc phục bằng cách thực hiện các như sau: boong mở, thẻ chỉnh sửa, nhấp vào thẻ, chọn nút radio "Kiểu dáng", thêm thành viên "không gian trắng: pre;" đến lớp thẻ.

3. Các câu hỏi phỏng vấn mã hóa trong khi bạn đang học

CÁI NÀY RẤT QUAN TRỌNG.

Bắt đầu thực hiện các câu hỏi phỏng vấn mã hóa trong khi bạn đang học các cấu trúc và thuật toán dữ liệu.

Bạn cần áp dụng những gì bạn đang học để giải quyết các vấn đề, hoặc bạn sẽ quên. Tôi đã phạm sai lầm này.

Khi bạn đã học một chủ đề và cảm thấy hơi thoải mái với nó, ví dụ, danh sách được liên kết:linked lists:

  1. Mở một trong những cuốn sách phỏng vấn mã hóa (hoặc các trang web vấn đề mã hóa, được liệt kê bên dưới)
  2. Thực hiện 2 hoặc 3 câu hỏi liên quan đến danh sách liên kết.
  3. Chuyển sang chủ đề học tập tiếp theo.
  4. Sau đó, quay lại và làm 2 hoặc 3 vấn đề danh sách được liên kết khác.
  5. Làm điều này với mỗi chủ đề mới bạn học.

Tiếp tục làm vấn đề trong khi bạn đang học tất cả những thứ này, không phải sau đó.

Bạn không được thuê để biết kiến ​​thức, nhưng cách bạn áp dụng kiến ​​thức.

Có nhiều tài nguyên cho điều này, được liệt kê dưới đây. Tiếp tục đi.

4. Tập trung

Có rất nhiều phiền nhiễu có thể mất thời gian quý giá. Tập trung và tập trung là khó khăn. Bật một số nhạc mà không có lời bài hát và bạn sẽ có thể tập trung khá tốt.

Những gì bạn sẽ không thấy được bảo hiểm

Đây là những công nghệ phổ biến nhưng không phải là một phần của kế hoạch nghiên cứu này:

  • SQL
  • JavaScript
  • HTML, CSS và các công nghệ mặt trước khác

Kế hoạch hàng ngày

Khóa học này đi qua rất nhiều môn học. Mỗi người có thể sẽ mất một vài ngày, hoặc thậm chí một tuần hoặc hơn. Nó phụ thuộc vào lịch trình của bạn.

Mỗi ngày, lấy chủ đề tiếp theo trong danh sách, xem một số video về chủ đề đó và sau đó viết một triển khai cấu trúc dữ liệu hoặc thuật toán đó trong ngôn ngữ bạn đã chọn cho khóa học này.

Bạn có thể xem mã của tôi ở đây:

  • C
  • C++
  • Python

Bạn không cần phải ghi nhớ mọi thuật toán. Bạn chỉ cần có khả năng hiểu nó đủ để có thể viết triển khai của riêng bạn.

Thực hành câu hỏi mã hóa

Why is this here? I'm not ready to interview.

Sau đó quay lại và đọc cái này.

Tại sao bạn cần thực hành thực hiện các vấn đề lập trình:

  • Nhận dạng sự cố và nơi các cấu trúc và thuật toán dữ liệu phù hợp phù hợp với
  • Thu thập các yêu cầu cho vấn đề
  • Nói theo cách của bạn thông qua vấn đề như bạn sẽ làm trong cuộc phỏng vấn
  • Mã hóa trên bảng trắng hoặc giấy, không phải máy tính
  • Đến với độ phức tạp về thời gian và không gian cho các giải pháp của bạn (xem Big-O bên dưới)
  • Kiểm tra các giải pháp của bạn

Có một giới thiệu tuyệt vời cho giải quyết vấn đề giao tiếp, có phương pháp trong một cuộc phỏng vấn. Bạn cũng sẽ nhận được điều này từ các cuốn sách phỏng vấn lập trình, nhưng tôi đã tìm thấy điều này

Viết mã trên bảng trắng hoặc giấy, không phải máy tính. Kiểm tra với một số đầu vào mẫu. Sau đó nhập nó và kiểm tra nó trên máy tính.

Nếu bạn không có bảng trắng ở nhà, hãy chọn một tấm vẽ lớn từ một cửa hàng nghệ thuật. Bạn có thể ngồi trên ghế dài và luyện tập. Đây là "bảng trắng sofa" của tôi. Tôi đã thêm cây bút trong bức ảnh chỉ cho tỷ lệ. Nếu bạn sử dụng bút, bạn sẽ ước mình có thể xóa. Nhanh chóng lộn xộn. Tôi sử dụng bút chì và cục tẩy.I use a pencil and eraser.

Thực hành câu hỏi mã hóa không phải là ghi nhớ câu trả lời cho các vấn đề lập trình.

Vấn đề mã hóa

Đừng quên sách phỏng vấn mã hóa chính của bạn ở đây.

Giải quyết các vấn đề:

  • Cách tìm giải pháp
  • Cách mổ xẻ một tuyên bố vấn đề TopCoder

Mã hóa các video câu hỏi phỏng vấn:

  • Ideserve (88 video)
  • Tushar Roy (5 danh sách phát)
    • Siêu cho các giải pháp vấn đề
  • Nick White - Giải pháp LeetCode (187 Video)
    • Giải thích tốt về giải pháp và mã
    • Bạn có thể xem một số trong một thời gian ngắn
  • Fishercoder - Giải pháp LeetCode

Các trang web thách thức/thực hành:

  • LeetCode
    • Trang web vấn đề mã hóa yêu thích của tôi. Đó là giá trị tiền đăng ký trong 1-2 tháng bạn có thể sẽ chuẩn bị.
    • Xem video Nick White và Fishercoder ở trên để đi bộ mã.
  • Hackerrank
  • Topcoder
  • Codeforces
  • Codility
  • Geek cho các chuyên viên máy tính
  • Phỏng vấn
  • AlgoExpert
    • Được tạo bởi Google Engineers, đây cũng là một nguồn tài nguyên tuyệt vời để trau dồi kỹ năng của bạn.
  • Dự án Euler
    • rất tập trung toán học, và không thực sự phù hợp cho các cuộc phỏng vấn mã hóa

Bắt đầu nào

Được rồi, nói đủ, hãy học!

Nhưng đừng quên làm vấn đề mã hóa từ trên cao trong khi bạn học!

Phân tích độ phức tạp thuật toán / phân tích Big-O / Asmptotic

  • Không có gì để thực hiện ở đây, bạn chỉ đang xem video và ghi chú! Yay!
  • Có rất nhiều video ở đây. Chỉ cần xem đủ cho đến khi bạn hiểu nó. Bạn luôn có thể quay lại và xem xét.
  • Đừng lo lắng nếu bạn không hiểu tất cả các toán học đằng sau nó.
  • Bạn chỉ cần hiểu làm thế nào để thể hiện sự phức tạp của một thuật toán về mặt lớn.
  • Harvard CS50 - Ký hiệu tiệm cận (Video)
  • Các ký hiệu O lớn (Hướng dẫn nhanh chung) (Video)
  • Big O ký hiệu (và Omega và Theta) - Giải thích toán học tốt nhất (Video)
  • Skiena (video)
  • UC Berkeley Big O (Video)
  • Phân tích khấu hao (video)
  • TopCoder (bao gồm các mối quan hệ tái phát và định lý chủ):
    • Độ phức tạp tính toán: Phần 1
    • Độ phức tạp tính toán: Phần 2
  • Gian lận
  • [Đánh giá] Big-O ký hiệu trong 5 phút (video)

Chà, đó là đủ về điều đó.

Khi bạn trải qua "bẻ khóa cuộc phỏng vấn mã hóa", có một chương về điều này và cuối cùng có một bài kiểm tra để xem liệu bạn có thể xác định được độ phức tạp thời gian chạy của các thuật toán khác nhau không. Đó là một siêu đánh giá và kiểm tra.

Cấu trúc dữ liệu

  • Mảng

    • Về mảng:
      • Mảng (video)
      • UC Berkeley CS61B - Mảng tuyến tính và đa chiều (video) (bắt đầu xem từ 15M 32s)
      • Mảng động (video)
      • Mảng lởm chởm (video)
    • Thực hiện một vectơ (mảng có thể thay đổi với thay đổi kích thước tự động):
      • Thực hành mã hóa bằng các mảng và con trỏ, và toán hướng dẫn để nhảy đến một chỉ mục thay vì sử dụng lập chỉ mục.
      • Mảng dữ liệu thô mới với bộ nhớ được phân bổ
        • có thể phân bổ mảng int dưới mui xe, chỉ không sử dụng các tính năng của nó
        • Bắt đầu với 16 hoặc nếu số bắt đầu lớn hơn, sử dụng công suất 2 - 16, 32, 64, 128
      • Kích thước () - Số lượng vật phẩm
      • dung lượng () - số lượng mặt hàng nó có thể giữ
      • is_empty ()
      • AT (INDEX) - Trả về mục tại chỉ mục đã cho, thổi lên nếu chỉ mục ra khỏi giới hạn
      • Đẩy (mục)
      • Chèn (chỉ mục, mục) - Chèn mục tại chỉ mục, dịch chuyển giá trị của chỉ mục đó và các phần tử theo bên phải
      • PUREND (Mục) - Có thể sử dụng Chèn ở trên tại INDEX 0
      • pop () - Xóa khỏi cuối, giá trị trả về
      • Xóa (INDEX) - Xóa mục tại INDEX, chuyển tất cả các yếu tố theo dõi còn lại
      • Xóa (mục) - tìm kiếm giá trị và loại bỏ chỉ mục giữ nó (ngay cả khi ở nhiều nơi)
      • Tìm (mục) - tìm kiếm giá trị và trả về chỉ mục đầu tiên với giá trị đó, -1 nếu không tìm thấy
      • thay đổi kích thước (new_capacity) // chức năng riêng tư
        • Khi bạn đạt đến dung lượng, thay đổi kích thước để tăng gấp đôi kích thước
        • Khi bật một mặt hàng, nếu kích thước là 1/4 công suất, hãy thay đổi kích thước một nửa
    • Thời gian
      • O (1) để thêm/xóa ở cuối (được khấu hao để phân bổ để biết thêm không gian), chỉ mục hoặc cập nhật
      • O (n) để chèn/loại bỏ ở nơi khác
    • Không gian
      • tiếp giáp với bộ nhớ, vì vậy sự gần gũi giúp hiệu suất
      • Không gian cần thiết = (công suất mảng, là> = n) * Kích thước của vật phẩm, nhưng ngay cả khi 2n, vẫn o (n)
  • Danh sách liên kết

    • Sự mô tả:
      • Danh sách liên kết đơn lẻ (video)
      • CS 61B - Danh sách được liên kết 1 (Video)
      • CS 61B - Danh sách được liên kết 2 (Video)
      • [Đánh giá] Danh sách được liên kết trong 4 phút (video)
    • Mã C (Video) - Không phải toàn bộ video, chỉ là các phần về phân bổ nút và phân bổ bộ nhớ nút
    • Danh sách được liên kết vs mảng:
      • Danh sách liên kết lõi vs mảng (video)
      • Trong danh sách liên kết thế giới thực vs mảng (video)
    • Tại sao bạn nên tránh danh sách được liên kết (video)
    • GOTCHA: Bạn cần con trỏ đến kiến ​​thức con trỏ: (khi bạn chuyển một con trỏ đến một hàm có thể thay đổi địa chỉ nơi các điểm con trỏ đó) Trang này chỉ để nắm bắt PTR thành PTR. Tôi không đề xuất danh sách này phong cách truyền tải. Khả năng đọc và khả năng bảo trì bị ảnh hưởng do sự thông minh.
      • Con trỏ đến gợi ý
    • Thực hiện (tôi đã làm với con trỏ đuôi & không có):
      • Kích thước () - Trả về số yếu tố dữ liệu trong danh sách
      • trống () - bool trả về đúng nếu trống
      • value_at (index) - Trả về giá trị của mục thứ n (bắt đầu từ 0 cho đầu tiên)
      • PUSH_FRONT (Giá trị) - Thêm một mục vào mặt trước của danh sách
      • pop_front () - Xóa mục trước và trả về giá trị của nó
      • push_back (giá trị) - Thêm một mục ở cuối
      • pop_back () - Xóa mục cuối và trả về giá trị của nó
      • front () - Nhận giá trị của mặt hàng phía trước
      • Back () - Nhận giá trị của mục cuối
      • Chèn (chỉ mục, giá trị) - Giá trị chèn tại chỉ mục, vì vậy mục hiện tại ở chỉ mục đó được chỉ ra bởi mục mới tại INDEX
      • ERASE (INDEX) - Xóa nút tại chỉ mục đã cho
      • value_n_from_end (n) - Trả về giá trị của nút ở vị trí thứ n từ cuối danh sách
      • Reverse () - đảo ngược danh sách
      • remove_value (giá trị) - Xóa mục đầu tiên trong danh sách với giá trị này
    • Danh sách liên kết gấp đôi
      • Mô tả (Video)
      • Không cần phải thực hiện
  • Cây rơm

    • Stacks (Video)
    • [Đánh giá] Stacks trong 3 phút (video)
    • Sẽ không thực hiện. Thực hiện với mảng là tầm thường
  • Xếp hàng

    • Hàng đợi (Video)
    • Bộ đệm tròn/FIFO
    • [Đánh giá] Hàng đợi trong 3 phút (video)
    • Thực hiện bằng danh sách liên kết, với con trỏ đuôi:
      • Enqueue (Giá trị) - Thêm giá trị tại vị trí tại đuôi
      • Dequeue () - Trả về giá trị và loại bỏ phần tử được thêm gần đây nhất (phía trước)
      • empty()
    • Thực hiện bằng cách sử dụng mảng có kích thước cố định:
      • Enqueue (Giá trị) - Thêm mục ở cuối lưu trữ có sẵn
      • Dequeue () - Trả về giá trị và loại bỏ phần tử được thêm gần đây nhất
      • empty()
      • full()
    • Phí tổn:
      • Một triển khai xấu bằng cách sử dụng danh sách được liên kết trong đó bạn enqueue ở đầu và dequeue ở đuôi sẽ là o (n) vì bạn cần phần tử tiếp theo, gây ra sự đi ngang đầy đủ mỗi lần
      • Enqueue: O (1) (được khấu hao, danh sách được liên kết và mảng [thăm dò])
      • Dequeue: O (1) (danh sách và mảng được liên kết)
      • trống: O (1) (danh sách được liên kết và mảng)
  • Bàn băm

    • Video:

      • Băm với chuỗi (video)
      • Bảng nhân đôi, Karp-Rabin (Video)
      • Địa chỉ mở, băm mật mã (video)
      • Pycon 2010: Từ điển Mighty (Video)
      • PYCON 2017: Từ điển thậm chí Mightier (Video)
      • .
      • (Nâng cao) Băm hoàn hảo (Video)
      • [Đánh giá] Bảng băm trong 4 phút (video)
    • Các khóa học trực tuyến:

      • Bảng băm cốt lõi (video)
      • Cấu trúc dữ liệu (video)
      • Vấn đề về danh bạ điện thoại (video)
      • Bảng băm phân tán:
        • Tải lên ngay lập tức và tối ưu hóa lưu trữ trong Dropbox (Video)
        • Bảng băm phân tán (video)
    • Thực hiện với mảng bằng cách sử dụng thăm dò tuyến tính

      • Hash (k, m) - m là kích thước của bảng băm
      • Thêm (khóa, giá trị) - Nếu khóa đã tồn tại, giá trị cập nhật
      • exists(key)
      • get(key)
      • remove(key)

Thêm kiến ​​thức

  • Tìm kiếm nhị phân

    • Tìm kiếm nhị phân (video)
    • Tìm kiếm nhị phân (video)
    • chi tiết
    • bản vẽ thiết kế
    • [Đánh giá] Tìm kiếm nhị phân trong 4 phút (video)
    • Thực hiện:
      • Tìm kiếm nhị phân (trên mảng số nguyên được sắp xếp)
      • Tìm kiếm nhị phân bằng cách sử dụng đệ quy
  • Hoạt động bitwise

    • BITS SHATION - Bạn nên biết nhiều sức mạnh của 2 từ (2^1 đến 2^16 và 2^32)
    • Nhận được sự hiểu biết thực sự tốt về các bit thao túng với: &, |, ^, ~, >>, <
      • từ ngữ
      • Giới thiệu tốt: thao tác bit (video)
      • C Hướng dẫn lập trình 2-10: Các toán tử bitwise (video)
      • Thao tác bit
      • Hoạt động bitwise
      • Bithacks
      • Twiddler bit
      • TWIDDLER BIT TWIDDLER
      • Bit Hacks (Video)
      • Hoạt động thực hành
    • 2 giây và 1 bổ sung
      • Nhị phân: Cán và trừ (tại sao chúng tôi sử dụng bổ sung của Two) (video)
      • 1S bổ sung
      • 2S bổ sung
    • Đếm bộ bit
      • 4 cách để đếm bit trong một byte (video)
      • Đếm bit
      • Cách đếm số lượng bit đặt trong một số nguyên 32 bit
    • Giá trị hoán đổi:
      • Tráo đổi
    • Giá trị tuyệt đối:
      • Số nguyên tuyệt đối

Cây

  • Cây - Giới thiệu

    • Giới thiệu với cây (video)
    • Tree Transversal (Video)
    • BFS (Tìm kiếm đầu tiên) và DFS (Tìm kiếm sâu đầu tiên) (Video)
      • Ghi chú của BFS:
        • Đơn hàng cấp độ (BFS, sử dụng hàng đợi)
        • Độ phức tạp về thời gian: O (n)
        • Độ phức tạp không gian: Tốt nhất: O (1), Tệ nhất: O (N/2) = O (N)
      • Ghi chú DFS:
        • Độ phức tạp về thời gian: O (n)
        • Độ phức tạp không gian: Tốt nhất: O (1), Tệ nhất: O (N/2) = O (N)
        • Ghi chú DFS:
        • Độ phức tạp không gian: Tốt nhất: O (log n) - AVG. Chiều cao của cây tồi tệ nhất: O (n)
        • Inorder (DFS: trái, bản thân, phải)
    • Bưu điện (DFS: trái, phải, bản thân)
    • đặt hàng trước (DFS: tự, trái, phải)
    • [Đánh giá] Tìm kiếm đầu tiên trong 4 phút (video)
  • [Đánh giá] Tìm kiếm chiều sâu đầu tiên trong 4 phút (video)

    • [Đánh giá] Tree Traversal (danh sách phát) trong 11 phút (video)
    • Cây tìm kiếm nhị phân: BSTS
    • Đánh giá cây tìm kiếm nhị phân (video)
    • Giới thiệu (Video)
      • MIT (Video)
      • C/C ++:
      • Cây tìm kiếm nhị phân - triển khai trong C/C ++ (Video)
      • Triển khai BST - Phân bổ bộ nhớ trong Stack và Heap (Video)
      • Tìm phần tử tối đa và tối đa trong cây tìm kiếm nhị phân (video)
      • Tìm chiều cao của cây nhị phân (video)
      • Trạng thái truyền tải cây nhị phân-Chiến lược đầu tiên và chiều sâu đầu tiên (Video)
      • Cây nhị phân: Cấp bậc giao tiếp (Video)
      • Trạng thái truyền tải cây nhị phân: đặt hàng trước, inorder, postorder (video)
      • Kiểm tra xem cây nhị phân có phải là cây tìm kiếm nhị phân hay không (video)
    • Xóa một nút khỏi cây tìm kiếm nhị phân (video)
      • Người kế thừa thứ tự trong một cây tìm kiếm nhị phân (video)
      • Thực hiện:
      • chèn // chèn giá trị vào cây
      • get_node_count // Nhận số lượng các giá trị được lưu trữ
      • print_values ​​// in các giá trị trong cây, từ tối thiểu đến tối đa
      • xóa_tree
      • is_in_tree // trả về true nếu giá trị được đưa ra trong cây
      • get_height // Trả về chiều cao trong các nút (chiều cao của nút là 1)
      • get_min // trả về giá trị tối thiểu được lưu trữ trong cây
      • get_max // trả về giá trị tối đa được lưu trữ trong cây
      • is_binary_search_tree
  • Xóa_Value

    • get_successor // trả về giá trị cao nhất tiếp theo trong cây sau khi giá trị, -1 nếu không có
    • Hàng đợi / Hàng đợi ưu tiên / đống nhị phân
    • Cây tìm kiếm nhị phân: BSTS
    • Đánh giá cây tìm kiếm nhị phân (video)
    • Giới thiệu (Video)
    • MIT (Video)
    • C/C ++:
    • Cây tìm kiếm nhị phân - triển khai trong C/C ++ (Video)
    • Triển khai BST - Phân bổ bộ nhớ trong Stack và Heap (Video)
    • Tìm phần tử tối đa và tối đa trong cây tìm kiếm nhị phân (video)
    • Tìm chiều cao của cây nhị phân (video)
    • Trạng thái truyền tải cây nhị phân-Chiến lược đầu tiên và chiều sâu đầu tiên (Video)
    • Cây nhị phân: Cấp bậc giao tiếp (Video)
    • Trạng thái truyền tải cây nhị phân: đặt hàng trước, inorder, postorder (video)
    • Kiểm tra xem cây nhị phân có phải là cây tìm kiếm nhị phân hay không (video)
    • Xóa một nút khỏi cây tìm kiếm nhị phân (video)
      • Người kế thừa thứ tự trong một cây tìm kiếm nhị phân (video)
      • Thực hiện:
      • chèn // chèn giá trị vào cây
      • get_node_count // Nhận số lượng các giá trị được lưu trữ
      • print_values ​​// in các giá trị trong cây, từ tối thiểu đến tối đa
      • xóa_tree
      • is_in_tree // trả về true nếu giá trị được đưa ra trong cây
      • get_height // Trả về chiều cao trong các nút (chiều cao của nút là 1)
      • get_min // trả về giá trị tối thiểu được lưu trữ trong cây
      • get_max // trả về giá trị tối đa được lưu trữ trong cây

is_binary_search_tree

  • Xóa_Value

    • get_successor // trả về giá trị cao nhất tiếp theo trong cây sau khi giá trị, -1 nếu không có
      • Hàng đợi / Hàng đợi ưu tiên / đống nhị phân
    • được hiển thị như một cây, nhưng thường là tuyến tính trong lưu trữ (mảng, danh sách được liên kết)
      • Đống
      • Cây nhị phân (video)
      • Cây nhị phân (video)
      • Nhận xét về chiều cao cây (Video)
    • Các hoạt động cơ bản (video)
      • Hoàn thành cây nhị phân (video)
      • Mã giả (video)
  • Sắp xếp Heap - Nhảy để bắt đầu (Video)

  • Sắp xếp heap (video)

    • Xây dựng một đống (video)
    • MIT: Thoát và đống (Video)
    • Bài giảng CS 61B 24: Hàng đợi ưu tiên (Video)
    • Thời gian tuyến tính BuildHeap (Max-Heap)
    • [Đánh giá] Heap (danh sách phát) trong 13 phút (video)
  • Thực hiện tối đa-heap:

    • chèn
    • Sift_up - Cần chèn
    • GET_MAX - Trả về mục tối đa mà không cần xóa nó
    • get_size () - Số phần tử trả về được lưu trữ
  • is_empty () - Trả về true nếu heap không chứa các phần tử

    • Trích xuất_max - Trả về mục tối đa, xóa nó
    • Sift_down - Cần thiết cho Trích xuất_max
    • Xóa (x) - Xóa vật phẩm tại Index X
    • Heapify - Tạo một đống từ một mảng các phần tử, cần thiết cho Heap_Sort
    • Heap_Sort () - Lấy một mảng chưa được phân loại và biến nó thành một mảng được sắp xếp bằng cách sử dụng một đống tối đa hoặc min
  • Sắp xếp

  • Ghi chú:

  • Thực hiện các loại và biết trường hợp tốt nhất/trường hợp xấu nhất, độ phức tạp trung bình của mỗi:

  • Không có loại bong bóng - thật là khủng khiếp - o (n^2), ngoại trừ khi n

  • Tính ổn định trong các thuật toán sắp xếp ("là Sumpsort ổn định?")

  • Sắp xếp thuật toán ổn định

  • Sự ổn định trong các thuật toán sắp xếp

  • Sắp xếp thuật toán - sự ổn định

    • Những thuật toán nào có thể được sử dụng trong danh sách được liên kết? Cái nào trên mảng? Cái nào trên cả hai?
    • Tôi không khuyên bạn nên sắp xếp một danh sách được liên kết, nhưng Merge sắp xếp là có thể thực hiện được.
    • Hợp nhất sắp xếp cho danh sách được liên kết
  • Đối với Heapsort, xem cấu trúc dữ liệu heap ở trên. Sắp xếp đống là tuyệt vời, nhưng không ổn định

    • Sedgewick - Mergesort (5 video)
    • Sedgewick - Mergesort (5 video)
    • 1. Mergesort
  • 2. Mergesort dưới cùng

    • 3. Sắp xếp sự phức tạp
    • 4. So sánh
    • 5. Sự ổn định
    • Sedgewick - Quicksort (4 video)
    • 1. Quicksort
    • 2. Lựa chọn
  • Thực hiện:

    • Mergesort: O (n log n) Trung bình và trường hợp xấu nhất
    • Quicksort O (n log n) Trường hợp trung bình
    • Sắp xếp lựa chọn và sắp xếp chèn là cả O (n^2) trung bình và trường hợp xấu nhất
    • Đối với Heapsort, hãy xem Cấu trúc dữ liệu HEAP ở trên
  • Không bắt buộc, nhưng tôi đã đề xuất chúng:

    • Sedgewick - Sắp xếp radix (6 video)
      • 1. Chuỗi trong Java
      • 2. Đếm được lập chỉ mục chính
      • 3. Sắp xếp radix chuỗi đầu tiên ít có ý nghĩa
      • 4. Sắp xếp radix chuỗi đầu tiên có ý nghĩa nhất
      • 5. 3 chiều radix quicksort
      • 6. Mảng hậu tố
    • Sắp xếp radix
    • Sắp xếp radix (Video)
    • Sắp xếp radix, tính sắp xếp (các ràng buộc thời gian tuyến tính) (video)
    • Ngẫu nhiên: Ma trận nhân, QuickSort, Thuật toán của Freivalds (Video)
    • Sắp xếp trong thời gian tuyến tính (video)

Tóm lại, đây là một đại diện trực quan của 15 thuật toán sắp xếp. Nếu bạn cần thêm chi tiết về chủ đề này, hãy xem phần "Sắp xếp" chi tiết bổ sung về một số chủ đề

Đồ thị

Đồ thị có thể được sử dụng để thể hiện nhiều vấn đề trong khoa học máy tính, vì vậy phần này dài, giống như cây và phân loại.

  • Notes:

    • Có 4 cách cơ bản để biểu thị một biểu đồ trong bộ nhớ:
      • Đối tượng và gợi ý
      • ma trận kề
      • Danh sách kề
      • Bản đồ kề
    • Làm quen với từng đại diện và ưu và nhược điểm của nó
    • BFS và DFS - Biết sự phức tạp tính toán của họ, sự đánh đổi của họ và cách thực hiện chúng trong mã thực
    • Khi được hỏi một câu hỏi, trước tiên hãy tìm giải pháp dựa trên đồ thị, sau đó tiếp tục nếu không có
  • MIT (Video):

    • Tìm kiếm đầu tiên
    • Tìm kiếm chiều sâu đầu tiên
  • Bài giảng Skiena - Giới thiệu tuyệt vời:

    • CSE373 2020 - Bài giảng 10 - Cấu trúc dữ liệu đồ thị (Video)
    • CSE373 2020 - Bài giảng 11 - Biểu đồ truyền tải (Video)
    • CSE373 2020 - Bài giảng 12 - Tìm kiếm đầu tiên (Video)
    • CSE373 2020 - Bài giảng 13 - Cây kéo dài tối thiểu (Video)
    • CSE373 2020 - Bài giảng 14 - Cây kéo dài tối thiểu (không) (Video)
    • CSE373 2020 - Bài giảng 15 - Thuật toán đồ thị (không phải 2) (video)
  • Đồ thị (đánh giá và nhiều hơn nữa):

    • 6.006 Bài báo đường ngắn nhất (Video)
    • 6.006 Dijkstra (Video)
    • 6,006 Bellman-Ford (Video)
    • 6,006 Tăng tốc DIJKSTRA (Video)
    • Aduni: Thuật toán đồ thị I - Sắp xếp tôpô, cây bao trùm tối thiểu, thuật toán của Prim - Bài giảng 6 (Video)
    • ADUNI: Thuật toán đồ thị II - DFS, BFS, Thuật toán của Kruskal, Cấu trúc dữ liệu của Union Find - Bài giảng 7 (Video)
    • Aduni: Thuật toán đồ thị III: Đường dẫn ngắn nhất - Bài giảng 8 (Video)
    • Aduni: Đồ thị ALG. IV: Giới thiệu về thuật toán hình học - Bài giảng 9 (Video)
    • CS 61B 2014: Đồ thị có trọng số (Video)
    • Thuật toán tham lam: Cây bao gồm tối thiểu (Video)
    • Các thành phần kết nối mạnh mẽ thuật toán thuật toán thuật toán Kosaraju (Video)
    • [Đánh giá] Thuật toán đường dẫn ngắn nhất (danh sách phát) trong 16 phút (video)
    • [Đánh giá] Cây kéo dài tối thiểu (danh sách phát) trong 4 phút (video)
  • Khóa học đầy đủ Coursera:

    • Thuật toán trên đồ thị (video)
  • Tôi sẽ thực hiện:

    • DFS có danh sách liền kề (đệ quy)
    • DFS có danh sách liền kề (lặp với ngăn xếp)
    • DFS với ma trận liền kề (đệ quy)
    • DFS với ma trận liền kề (lặp với ngăn xếp)
    • BFS có danh sách liền kề
    • BFS với ma trận liền kề
    • Đường ngắn nhất nguồn (Dijkstra)
    • Cây bao trùm tối thiểu
    • Các thuật toán dựa trên DFS (xem video Aduni ở trên):
      • Kiểm tra chu kỳ (cần thiết cho sắp xếp tôpô, vì chúng tôi sẽ kiểm tra chu kỳ trước khi bắt đầu)
      • Loại cấu trúc liên kết
      • đếm các thành phần được kết nối trong một biểu đồ
      • Liệt kê các thành phần được kết nối mạnh mẽ
      • Kiểm tra đồ thị bipartite

Thậm chí nhiều kiến ​​thức

  • Đệ quy

    • Các bài giảng của Stanford về đệ quy & backtracking:
      • Bài giảng 8 | Lập trình trừu tượng (video)
      • Bài giảng 9 | Lập trình trừu tượng (video)
      • Bài giảng 10 | Lập trình trừu tượng (video)
      • Bài giảng 11 | Lập trình trừu tượng (video)
    • Khi nào là thích hợp để sử dụng nó?
    • Làm thế nào là đệ quy đuôi tốt hơn không?
      • Đệ quy đuôi là gì tại sao nó lại tệ như vậy?
      • Đệ quy đuôi (video)
    • 5 bước đơn giản để giải quyết bất kỳ vấn đề đệ quy (video)

    Backtracking Blueprint: Java Python

  • Lập trình năng động

    • Bạn có thể sẽ không thấy bất kỳ vấn đề lập trình năng động nào trong cuộc phỏng vấn của bạn, nhưng đáng để có thể nhận ra một vấn đề là một ứng cử viên cho lập trình động.
    • Chủ đề này có thể khá khó khăn, vì mỗi vấn đề hòa tan DP phải được định nghĩa là mối quan hệ đệ quy, và đưa ra nó có thể khó khăn.
    • Tôi khuyên bạn nên xem xét nhiều ví dụ về các vấn đề DP cho đến khi bạn có một sự hiểu biết vững chắc về mô hình liên quan.
    • Video:
      • Skiena: CSE373 2020 - Bài giảng 19 - Giới thiệu về lập trình động (Video)
      • Skiena: CSE373 2020 - Bài giảng 20 - Chỉnh sửa khoảng cách (Video)
      • Skiena: CSE373 2020 - Bài giảng 20 - Khoảng cách chỉnh sửa (tiếp theo) (Video)
      • Skiena: CSE373 2020 - Bài giảng 21 - Lập trình động (Video)
      • Skiena: CSE373 2020 - Bài giảng 21 - Lập trình và đánh giá động (Video)
      • Simonson: Lập trình động 0 (bắt đầu lúc 59:18) (video)
      • Simonson: Lập trình động I - Bài giảng 11 (Video)
      • Simonson: Lập trình động II - Bài giảng 12 (Video)
      • Danh sách các vấn đề DP riêng lẻ (mỗi vấn đề ngắn): Lập trình động (Video)
    • Ghi chú bài giảng của Yale:
      • Lập trình năng động
    • Coursera:
      • Bài toán cấu trúc thứ cấp RNA (Video)
      • Thuật toán lập trình động (video)
      • Minh họa thuật toán DP (video)
      • Thời gian chạy của thuật toán DP (video)
      • DP so với triển khai đệ quy (Video)
      • Căn chỉnh trình tự toàn cầu (Video)
      • Căn chỉnh trình tự cặp cục bộ (Video)
  • Mô hình thiết kế

    • Đánh giá nhanh (video)
    • Tìm hiểu các mẫu này:
      • chiến lược
      • singleton
      • bộ chuyển đổi
      • nguyên mẫu
      • người trang trí
      • khách thăm quan
      • nhà máy, nhà máy trừu tượng
      • mặt tiền
      • Người quan sát
      • Ủy quyền
      • đại biểu
      • yêu cầu
      • tiểu bang
      • Memento
      • người lặp lại
      • tổng hợp
      • Trọng lượng bay
    • Loạt video (27 video)
    • Sách: Các mẫu thiết kế đầu tiên
      • Tôi biết cuốn sách kinh điển là "Các mẫu thiết kế: các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng", nhưng đầu tiên là tuyệt vời cho người mới bắt đầu.
    • Tài liệu tham khảo tiện dụng: 101 mẫu và mẹo thiết kế cho các nhà phát triển
  • Tổ hợp (n chọn k) & xác suất

    • Kỹ năng toán học: Cách tìm giai thừa, hoán vị và kết hợp (chọn) (video)
    • Làm cho trường học: Xác suất (video)
    • Làm trường học: nhiều xác suất và chuỗi Markov (video)
    • Khan Academy:
      • Bố cục khóa học:
        • Xác suất lý thuyết cơ bản
      • Chỉ các video - 41 (mỗi cái đều đơn giản và mỗi cái đều ngắn):
        • Xác suất giải thích (Video)
  • NP, thuật toán gần đúng NP và gần đúng

    • Biết về các lớp học nổi tiếng nhất về các vấn đề hoàn thành NP, chẳng hạn như nhân viên bán hàng du lịch và vấn đề knapsack, và có thể nhận ra chúng khi một người phỏng vấn hỏi bạn để ngụy trang.
    • Biết NP hoàn thành có nghĩa là gì.
    • Độ phức tạp tính toán (Video)
    • Simonson:
      • Algs tham lam. Ii & giới thiệu về tính hoàn chỉnh của NP (Video)
      • NP Hoàn thành II & Giảm (Video)
      • NP hoàn thành III (Video)
      • NP hoàn thành IV (Video)
    • Skiena:
      • CSE373 2020 - Bài giảng 23 - Tính hoàn thiện của NP (Video)
      • CSE373 2020 - Bài giảng 24 - Tính thỏa mãn (Video)
      • CSE373 2020 - Bài giảng 25 - Tính hoàn thành của NP (Video)
      • CSE373 2020 - Bài giảng 26 - Thử thách hoàn thành NP (Video)
    • Sự phức tạp: P, NP, NP-Complete, Giảm (Video)
    • Độ phức tạp: Thuật toán gần đúng (video)
    • Độ phức tạp: Thuật toán tham số cố định (Video)
    • Peter Norvig thảo luận về các giải pháp gần như tối ưu cho vấn đề nhân viên bán hàng du lịch:
      • Notebook Jupyter
    • Trang 1048 - 1140 trong CLRS nếu bạn có nó.
  • Cách máy tính xử lý một chương trình

    • Cách CPU thực hiện một chương trình (video)
    • Cách tính toán máy tính - ALU (Video)
    • Đăng ký và RAM (Video)
    • Đơn vị xử lý trung tâm (CPU) (Video)
    • Hướng dẫn và Chương trình (Video)
  • Bộ nhớ cache

    • Bộ nhớ cache lru:
      • The Magic of LRU Cache (100 ngày của Google Dev) (Video)
      • Thực hiện LRU (Video)
      • LeetCode - 146 LRU Cache (C ++) (Video)
    • Bộ đệm CPU:
      • MIT 6.004 L15: Phân cấp bộ nhớ (Video)
      • MIT 6.004 L16: Sự cố bộ đệm (Video)
  • Quá trình và chủ đề

    • Khoa học máy tính 162 - Hệ điều hành (25 video):
      • Đối với các quy trình và chủ đề, xem video 1-11
      • Hệ điều hành và lập trình hệ thống (Video)
    • Sự khác biệt giữa một quá trình và một chủ đề là gì?
    • Bìa:
      • Các quy trình, chủ đề, vấn đề đồng thời
        • Sự khác biệt giữa các quy trình và chủ đề
        • Quá trình
        • Chủ đề
        • Khóa
        • Mutexes
        • Semaphores
        • Màn hình
        • Họ làm việc như thế nào?
        • Bế tắc
        • Sinh dục
      • Hoạt động CPU, ngắt, chuyển đổi ngữ cảnh
      • Các cấu trúc đồng thời hiện đại với bộ xử lý đa lõi
      • Phân trang, phân đoạn và bộ nhớ ảo (video)
      • Ngắt (video)
      • Nhu cầu tài nguyên quy trình (bộ nhớ: mã, lưu trữ tĩnh, ngăn xếp, heap và cả mô tả tệp, I/O)
      • Nhu cầu tài nguyên luồng (cổ phiếu ở trên (trừ Stack) với các luồng khác trong cùng một quy trình nhưng mỗi chủ đề có PC, bộ đếm ngăn xếp, thanh ghi và ngăn xếp riêng))
      • Forking thực sự sao chép trên Write (chỉ đọc) cho đến khi quá trình mới ghi vào bộ nhớ, sau đó nó thực hiện một bản sao đầy đủ.
      • Chuyển đổi ngữ cảnh
        • Làm thế nào chuyển đổi ngữ cảnh được bắt đầu bởi hệ điều hành và phần cứng cơ bản?
    • Chủ đề trong C ++ (sê -ri - 10 video)
    • CS 377 Spring '14: Hệ điều hành của Đại học Massachusetts
    • Đồng thời trong Python (Video):
      • Loạt ngắn về chủ đề
      • Chủ đề Python
      • Hiểu Python Gil (2010)
        • tài liệu tham khảo
      • David Beazley - Đồng thời Python từ đầu: Sống! - Pycon 2015
      • Keynote David Beazley - Chủ đề quan tâm (Python Asyncio)
      • Mutex trong Python
  • Kiểm tra

    • Để che:
      • Cách kiểm tra đơn vị hoạt động
      • Đối tượng giả là gì
      • Kiểm tra tích hợp là gì
      • Tiêm phụ thuộc là gì
    • Kiểm tra phần mềm Agile với James Bach (Video)
    • Bài giảng mở của James Bach về kiểm tra phần mềm (Video)
    • Steve Freeman - Phát triển theo hướng thử nghiệm (đó không phải là ý nghĩa của chúng tôi) (video)
      • slide
    • Tiêm phụ thuộc:
      • video
      • Tao thử nghiệm
    • Cách viết bài kiểm tra
  • Tìm kiếm và thao tác chuỗi

    • Sedgewick - mảng hậu tố (video)
    • Sedgewick - Tìm kiếm Subring (Video)
      • 1. Giới thiệu về tìm kiếm chuỗi con
      • 2. Tìm kiếm cơ sở vũ phu
      • 3. Knuth-Morris Pratt
      • 4. Boyer-Moore
      • 5. Rabin-Karp
    • Mẫu tìm kiếm trong văn bản (video)

    Nếu bạn cần thêm chi tiết về chủ đề này, hãy xem phần "Kết hợp chuỗi" chi tiết bổ sung về một số chủ đề.

  • Cố gắng

    • Lưu ý có nhiều loại cố gắng khác nhau. Một số có tiền tố, một số không và một số sử dụng chuỗi thay vì bit để theo dõi đường dẫn
    • Tôi đọc qua mã, nhưng sẽ không thực hiện
    • Sedgewick - cố gắng (3 video)
      • 1. R Way cố gắng
      • 2. Ternary tìm kiếm cố gắng
      • 3. Hoạt động dựa trên nhân vật
    • Ghi chú về cấu trúc dữ liệu và kỹ thuật lập trình
    • Video khóa học ngắn:
      • Giới thiệu về Tries (Video)
      • Hiệu suất của các thử (Video)
      • Thực hiện Trie (Video)
    • Trie: một cấu trúc dữ liệu bị bỏ quên
    • Topcoder - Sử dụng các thử
    • Bài giảng Stanford (Trường hợp sử dụng trong thế giới thực) (video)
    • MIT, cấu trúc dữ liệu nâng cao, chuỗi (có thể khá tối nghĩa về nửa chừng) (video)
  • Số điểm nổi

    • 8 -bit đơn giản: Biểu diễn số điểm nổi - 1 (Video - Có một lỗi trong tính toán - xem mô tả video)
  • Unicode

    • Tối thiểu tuyệt đối mọi nhà phát triển phần mềm hoàn toàn, tích cực phải biết về các bộ unicode và nhân vật
    • Điều mà mọi lập trình viên hoàn toàn cần biết về mã hóa và bộ ký tự để làm việc với văn bản
  • Endianness

    • Endian lớn và nhỏ
    • Big Endian vs Little Endian (Video)
    • Endian lớn và nhỏ bên trong/ra (video)
      • Nói chuyện rất kỹ thuật cho các nhà phát triển kernel. Đừng lo lắng nếu hầu hết đều ở trên đầu bạn.
      • Nửa đầu là đủ.
  • Kết nối mạng

    • Nếu bạn có kinh nghiệm kết nối mạng hoặc muốn trở thành kỹ sư hoặc kỹ sư vận hành độ tin cậy, hãy mong đợi câu hỏi
    • Nếu không, điều này chỉ là tốt để biết
    • Học viện Khan
    • UDP và TCP: So sánh các giao thức vận chuyển (video)
    • TCP/IP và mô hình OSI đã giải thích! (video)
    • Truyền gói qua internet. Mạng & Hướng dẫn TCP/IP. (video)
    • Http (video)
    • SSL và HTTPS (Video)
    • SSL/TLS (Video)
    • Http 2.0 (video)
    • Sê -ri video (21 video) (Video)
    • Subnetting DemyStified - Phần 5 ký hiệu CIDR (Video)
    • Ổ cắm:
      • Java - ổ cắm - Giới thiệu (Video)
      • Lập trình ổ cắm (Video)

Đánh giá cuối cùng

This section will have shorter videos that you can watch pretty quickly to review most of the important concepts.
It's nice if you want a refresher often.

  • Loạt các video chủ đề ngắn 2-3 phút (23 video)
    • Video
  • Loạt video chủ đề ngắn 2-5 phút - Michael Sambol (38 video):
    • Video
  • Loạt video chủ đề ngắn 2-5 phút - Michael Sambol (38 video):
  • Video Sedgewick - Thuật toán I

Video Sedgewick - Thuật toán II

  • Cập nhật sơ yếu lý lịch của bạn
  • Xem sơ yếu lý lịch thông tin chuẩn bị trong các cuốn sách: "Phá vỡ cuộc phỏng vấn mã hóa" và "các cuộc phỏng vấn lập trình tiếp xúc"
    • Tôi không biết điều này quan trọng như thế nào (bạn có thể thực hiện nghiên cứu của riêng mình) nhưng đây là một bài viết về việc làm cho sơ yếu lý lịch ATS của bạn tuân thủ:
  • Cách tạo hoặc kiểm tra xem sơ yếu lý lịch của bạn có tuân thủ ATS không
    • "Đây là những gì một bản lý lịch tốt nên trông như thế" của Gayle McDowell (tác giả của Cracking The Inving Interview),
  • Lưu ý của tác giả: "Đây là bản lý lịch tập trung vào Mỹ. CVS cho Ấn Độ và các quốc gia khác có những kỳ vọng khác nhau, mặc dù nhiều điểm sẽ giống nhau."
    • "Hướng dẫn sơ yếu lý lịch từng bước" bởi Sổ tay phỏng vấn công nghệ

Hướng dẫn chi tiết về cách thiết lập sơ yếu lý lịch của bạn từ đầu, viết nội dung sơ yếu lý lịch hiệu quả, tối ưu hóa nó và kiểm tra sơ yếu lý lịch của bạn

  • Tìm việc làm

Các trang web để tìm việc làm

  • Quy trình phỏng vấn & chuẩn bị phỏng vấn chung
  • Cách vượt qua cuộc phỏng vấn kỹ thuật vào năm 2021
  • Demystifying tuyển dụng công nghệ
    • Làm thế nào để có được một công việc tại Big 4:
    • Cách nhận công việc tại Big 4 - Amazon, Facebook, Google & Microsoft (Video)
  • Làm thế nào để có được một công việc tại Big 4.1 (video tiếp theo)
    • Phá vỡ bộ phỏng vấn mã hóa 1:
    • Gayle L McDowell - Khủng hoảng cuộc phỏng vấn mã hóa (video)
  • Cracking Cuộc phỏng vấn mã hóa với tác giả Gayle Laakmann McDowell (Video)
    • Phá vỡ cuộc phỏng vấn mã hóa Facebook:
    • Tiếp cận
  • Vấn đề hướng dẫn
    • Các khóa học chuẩn bị:
      • Phỏng vấn kỹ sư phần mềm Unleashed (khóa học trả phí):
    • Tìm hiểu làm thế nào để làm cho bản thân sẵn sàng cho các cuộc phỏng vấn kỹ sư phần mềm từ một cựu người phỏng vấn của Google.
      • Python cho các cấu trúc dữ liệu, thuật toán và các cuộc phỏng vấn (khóa học trả phí):
    • Một khóa học chuẩn bị phỏng vấn trung tâm Python bao gồm các cấu trúc dữ liệu, thuật toán, phỏng vấn giả và nhiều hơn nữa.
      • Giới thiệu về cấu trúc dữ liệu và thuật toán bằng cách sử dụng python (khóa học miễn phí udacity):
    • Một khóa học dữ liệu và thuật toán trung tâm python miễn phí.
      • Cấu trúc dữ liệu và thuật toán nanodegree! (Udacity đã trả nanodegree):
    • Nhận thực hành thực hành với hơn 100 cấu trúc dữ liệu và các bài tập và hướng dẫn thuật toán từ một người cố vấn chuyên dụng để giúp bạn chuẩn bị cho các cuộc phỏng vấn và các kịch bản tại chỗ.
      • Grokking cuộc phỏng vấn hành vi (Khóa học miễn phí giáo dục):

Các cuộc phỏng vấn giả:

  • Gainlo.co: Những người phỏng vấn giả từ các công ty lớn - Tôi đã sử dụng điều này và nó giúp tôi thư giãn cho màn hình điện thoại và phỏng vấn tại chỗ
  • Pramp: Các cuộc phỏng vấn giả từ/với các đồng nghiệp-Mô hình phỏng vấn thực hành ngang hàng
  • Phỏng vấn.

Đang suy nghĩ khi cuộc phỏng vấn đến

Hãy nghĩ về khoảng 20 câu hỏi phỏng vấn mà bạn sẽ nhận được, cùng với các dòng của các mục dưới đây. Có ít nhất một câu trả lời cho mỗi. Có một câu chuyện, không chỉ là dữ liệu, về một cái gì đó bạn đã hoàn thành.

  • Tại sao bạn muốn công việc này?

  • Một vấn đề khó khăn mà bạn đã giải quyết là gì?

  • Những thách thức lớn nhất phải đối mặt?

  • Thiết kế tốt nhất/tồi tệ nhất được nhìn thấy?

  • Ý tưởng cải thiện một sản phẩm hiện có

  • Làm thế nào để bạn làm việc tốt nhất, với tư cách là một cá nhân và là một phần của một nhóm?

  • Kỹ năng hoặc kinh nghiệm nào của bạn sẽ là tài sản trong vai trò và tại sao?

  • Bạn đã thích điều gì nhất ở [Công việc X / Project Y]?

  • Thử thách lớn nhất mà bạn gặp phải ở [Công việc X / Project Y] là gì?

  • Lỗi khó nhất mà bạn phải đối mặt ở [Công việc X / Project Y] là gì?

  • Bạn đã học được gì ở [Công việc X / Project Y]?

  • Bạn sẽ làm gì tốt hơn ở [Công việc X / Project Y]?

  • Nếu bạn thấy khó có thể đưa ra câu trả lời tốt về các loại câu hỏi phỏng vấn này, đây là một số ý tưởng:

    • Câu hỏi phỏng vấn chung và câu trả lời của họ

Có câu hỏi cho người phỏng vấn

Một số của tôi (tôi đã có thể biết câu trả lời, nhưng muốn ý kiến ​​của họ hoặc quan điểm nhóm của họ):

  • Đội của bạn lớn như thế nào?
  • Chu kỳ dev của bạn trông như thế nào? Bạn có làm thác nước/chạy nước rút/Agile không?
  • Có phải là thời hạn chung không? Hay có sự linh hoạt?
  • Các quyết định được đưa ra trong nhóm của bạn như thế nào?
  • Bạn có bao nhiêu cuộc họp mỗi tuần?
  • Bạn có cảm thấy môi trường làm việc của bạn giúp bạn tập trung?
  • Bạn đang làm gì?
  • Bạn thích nó chỗ nào?
  • Cuộc sống công việc như thế nào?
  • Cân bằng công việc/cuộc sống như thế nào?

Khi bạn đã có công việc

Congratulations!

Tiếp tục học hỏi.

Bạn chưa bao giờ thực sự làm được.


*****************************************************************************************************
*****************************************************************************************************

Everything below this point is optional. It is NOT needed for an entry-level interview.
However, by studying these, you'll get greater exposure to more CS concepts, and will be better prepared for
any software engineering job. You'll be a much more well-rounded software engineer.

*****************************************************************************************************
*****************************************************************************************************


Sách bổ sung

These are here so you can dive into a topic you find interesting.

  • Môi trường lập trình unix
    • Một người già nhưng một goodie
  • Dòng lệnh Linux: Giới thiệu đầy đủ
    • Một lựa chọn hiện đại
  • Sê -ri TCP/IP minh họa
  • Đầu tiên các mẫu thiết kế đầu tiên
    • Giới thiệu nhẹ nhàng về các mẫu thiết kế
  • Các mẫu thiết kế: Các yếu tố của phần mềm có thể sử dụng lại-Phương án đối tượng D
    • AKA cuốn sách "Gang of Four", hoặc GOF
    • Sách mô hình thiết kế kinh điển
  • Hướng dẫn thiết kế thuật toán (Skiena)
    • Như một đánh giá và nhận dạng vấn đề
    • Phần danh mục thuật toán vượt xa phạm vi khó khăn mà bạn sẽ nhận được trong một cuộc phỏng vấn
    • Cuốn sách này có 2 phần:
      • Sách giáo khoa lớp về cấu trúc dữ liệu và thuật toán
        • Ưu điểm:
          • Là một đánh giá tốt vì bất kỳ cuốn sách giáo khoa thuật toán nào cũng sẽ
          • Những câu chuyện hay từ kinh nghiệm của anh ấy để giải quyết các vấn đề trong ngành công nghiệp và học viện
          • Ví dụ về mã trong C
        • Nhược điểm:
          • Có thể dày đặc hoặc không thể xuyên thủng như CLR, và trong một số trường hợp, CLR có thể là một lựa chọn tốt hơn cho một số đối tượng
          • Chương 7, 8, 9 có thể đau đớn khi cố gắng theo dõi, vì một số mục không được giải thích tốt hoặc cần nhiều não hơn tôi có
          • Đừng hiểu lầm tôi: Tôi thích Skiena, phong cách giảng dạy và phong cách của anh ấy, nhưng tôi có thể không phải là chất liệu Stony Brook
      • Danh mục thuật toán:
        • Đây là lý do thực sự bạn mua cuốn sách này.
        • Cuốn sách này tốt hơn như một tài liệu tham khảo thuật toán, và không phải là thứ bạn đọc để che.
    • Có thể thuê nó trên Kindle
    • Câu trả lời:
      • Các giải pháp
    • Errata
  • Viết mã tuyệt vời: Tập 1: Hiểu máy
    • Cuốn sách được xuất bản năm 2004, và hơi lỗi thời, nhưng đó là một nguồn tài nguyên tuyệt vời để hiểu một cách ngắn gọn máy tính
    • Tác giả đã phát minh ra HLA, vì vậy hãy đề cập và ví dụ trong HLA với một hạt muối. Không được sử dụng rộng rãi, nhưng các ví dụ tốt về việc lắp ráp trông như thế nào
    • Các chương này đáng để đọc để cung cấp cho bạn một nền tảng tốt đẹp:
      • Chương 2 - Đại diện số
      • Chương 3 - Các hoạt động số học và bit nhị phân
      • Chương 4 - Đại diện điểm nổi
      • Chương 5 - Đại diện nhân vật
      • Chương 6 - Tổ chức và truy cập bộ nhớ
      • Chương 7 - Kiểu dữ liệu tổng hợp và đối tượng bộ nhớ
      • Chương 9 - Kiến trúc CPU
      • Chương 10 - Kiến trúc bộ hướng dẫn
      • Chương 11 - Kiến trúc và tổ chức bộ nhớ
  • Giới thiệu về thuật toán
    • Quan trọng: Đọc cuốn sách này sẽ chỉ có giá trị hạn chế. Cuốn sách này là một đánh giá tuyệt vời về các thuật toán và cấu trúc dữ liệu, nhưng sẽ không dạy bạn cách viết mã tốt. Bạn phải có khả năng mã hóa một giải pháp tốt một cách hiệu quả Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently
    • AKA CLR, đôi khi là CLR, vì Stein đã trễ trò chơi
  • Kiến trúc máy tính, Phiên bản thứ sáu: Cách tiếp cận định lượng
    • Đối với một sự phong phú hơn, cập nhật hơn (2017), nhưng điều trị lâu hơn

Thiết kế hệ thống, khả năng mở rộng, xử lý dữ liệu

Bạn có thể mong đợi các câu hỏi thiết kế hệ thống nếu bạn có hơn 4 năm kinh nghiệm.

  • Khả năng mở rộng và thiết kế hệ thống là những chủ đề rất lớn với nhiều chủ đề và tài nguyên, vì có rất nhiều điều cần xem xét khi thiết kế một hệ thống phần mềm/phần cứng có thể mở rộng. Mong đợi sẽ dành khá nhiều thời gian cho việc này
  • Cân nhắc:
    • Khả năng mở rộng
      • Chắt lọc các bộ dữ liệu lớn cho các giá trị đơn lẻ
      • Chuyển đổi một tập dữ liệu sang một tập dữ liệu khác
      • Xử lý một lượng lớn dữ liệu
    • Thiết kế hệ thống
      • Bộ tính năng
      • giao diện
      • Phân cấp lớp
      • Thiết kế một hệ thống dưới những ràng buộc nhất định
      • Đơn giản và mạnh mẽ
      • sự đánh đổi
      • Phân tích hiệu suất và tối ưu hóa
  • Bắt đầu từ đây: Kim Primer thiết kế hệ thống: The System Design Primer
  • Thiết kế hệ thống từ HiredIntech
  • Làm thế nào để tôi chuẩn bị trả lời các câu hỏi thiết kế trong một cuộc phỏng vấn kỹ thuật?
  • 8 điều bạn cần biết trước khi phỏng vấn thiết kế hệ thống
  • Bình thường hóa cơ sở dữ liệu - 1NF, 2NF, 3NF và 4NF (video)
  • Phỏng vấn thiết kế hệ thống - Có rất nhiều tài nguyên trong này. Nhìn qua các bài viết và ví dụ. Tôi đặt một số trong số chúng dưới đây
  • Cách phỏng vấn thiết kế hệ thống
  • Những con số mà mọi người nên biết
  • Mất bao lâu để thực hiện chuyển đổi ngữ cảnh?
  • Giao dịch trên các trung tâm dữ liệu (video)
  • Giới thiệu tiếng Anh đơn giản về Định lý Cap
  • MIT 6.824: Hệ thống phân tán, Mùa xuân 2020 (20 video)
  • Thuật toán đồng thuận:
    • PAXOS - Thỏa thuận Paxos - Máy tính (Video)
    • RAFT - Giới thiệu về Thuật toán đồng thuận phân tán bè (Video)
      • Giấy dễ đọc
      • Infographic
  • Băm phù hợp
  • Các mẫu NoQuery
  • Khả năng mở rộng:
    • Bạn không cần tất cả những thứ này. Chỉ cần chọn một vài điều mà bạn quan tâm.
    • Tổng quan tuyệt vời (video)
    • Sê -ri ngắn:
      • Nhân bản
      • Cơ sở dữ liệu
      • Bộ nhớ cache
      • Không đồng bộ
    • Kiến trúc web có thể mở rộng và các hệ thống phân tán
    • Fallacies của điện toán phân tán được giải thích
    • Jeff Dean - Xây dựng hệ thống phần mềm tại Google và các bài học kinh nghiệm (Video)
    • Giới thiệu về hệ thống kiến ​​trúc cho quy mô
    • Mở rộng các trò chơi di động cho đối tượng toàn cầu bằng cách sử dụng ứng dụng và dữ liệu đám mây (Video)
    • Cách Google thực hiện kỹ thuật quy mô hành tinh cho Infra quy mô hành tinh (Video)
    • Tầm quan trọng của các thuật toán
    • Sharding
    • Kỹ thuật cho trò chơi dài - Keynote Astrid Atkinson (Video)
    • 7 năm bài học về khả năng mở rộng YouTube trong 30 phút
      • video
    • Làm thế nào paypal quy mô lên hàng tỷ giao dịch hàng ngày chỉ bằng cách sử dụng 8Vms
    • Cách xóa các bản sao trong các bộ dữ liệu lớn
    • Một cái nhìn bên trong quy mô và văn hóa kỹ thuật của Etsy với Jon Cowie (Video)
    • Điều gì đã dẫn Amazon đến kiến ​​trúc microservice của riêng mình
    • Nén hay không nén, đó là câu hỏi của Uber
    • Khi nào nên sử dụng xử lý truy vấn gần đúng?
    • Chuyển đổi của Google từ Trung tâm dữ liệu đơn, chuyển đổi chuyển đổi, sang kiến ​​trúc nhiều bản địa
    • Công nghệ tối ưu hóa hình ảnh phục vụ hàng triệu yêu cầu mỗi ngày
    • Một kiến ​​trúc Patreon ngắn
    • Tinder: Làm thế nào để một trong những công cụ khuyến nghị lớn nhất quyết định ai bạn sẽ thấy tiếp theo?
    • Thiết kế bộ nhớ cache hiện đại
    • Truyền phát video trực tiếp ở quy mô Facebook
    • Hướng dẫn của người mới bắt đầu để mở rộng tới 11 triệu người dùng trên AWS của Amazon
    • Chế độ xem 360 độ của toàn bộ ngăn xếp Netflix
    • Độ trễ ở khắp mọi nơi và bạn tốn kém khi bạn bán hàng - làm thế nào để nghiền nát nó
    • Những gì quyền lực Instagram: Hàng trăm trường hợp, hàng chục công nghệ
    • Kiến trúc Salesforce - Cách họ xử lý 1,3 tỷ giao dịch mỗi ngày
    • Kiến trúc của ESPN ở quy mô - hoạt động ở mức 100.000 duh nuh nuhs mỗi giây
    • Xem "Tin nhắn, tuần tự hóa và hệ thống xếp hàng" bên dưới để biết thông tin về một số công nghệ có thể dán các dịch vụ cùng nhau
    • Twitter:
      • O'Reilly MySQL CE 2011: Jeremy Cole, "Dữ liệu lớn và nhỏ tại @TWitter" (Video)
      • Thời gian ở quy mô
    • Để biết nhiều hơn nữa, hãy xem loạt video "Khai thác bộ dữ liệu lớn" trong phần Video Series
  • Thực hành quy trình thiết kế hệ thống: Dưới đây là một số ý tưởng để thử làm việc trên giấy, mỗi tài liệu có một số tài liệu về cách xử lý trong thế giới thực:
    • Đánh giá: Primer thiết kế hệ thống
    • Thiết kế hệ thống từ HiredIntech
    • gian lận
    • lưu lượng:
      1. Hiểu vấn đề và phạm vi:
        • Xác định các trường hợp sử dụng, với sự giúp đỡ của người phỏng vấn
        • Đề xuất các tính năng bổ sung
        • Xóa các mục mà người phỏng vấn cho là không có phạm vi
        • Giả sử có mức độ sẵn sàng cao, thêm như một trường hợp sử dụng
      2. Hãy suy nghĩ về những ràng buộc:
        • Hỏi có bao nhiêu yêu cầu mỗi tháng
        • Hỏi xem có bao nhiêu yêu cầu mỗi giây (họ có thể tình nguyện hoặc khiến bạn làm toán)
        • Ước tính lần đọc so với tỷ lệ phần trăm viết
        • Hãy ghi nhớ quy tắc 80/20 khi ước tính
        • Bao nhiêu dữ liệu được viết mỗi giây
        • Tổng lưu trữ cần thiết trong 5 năm
        • Bao nhiêu dữ liệu đọc mỗi giây
      3. Thiết kế trừu tượng:
        • Các lớp (dịch vụ, dữ liệu, bộ nhớ đệm)
        • Cơ sở hạ tầng: Cân bằng tải, nhắn tin
        • Tổng quan thô về bất kỳ thuật toán chính nào điều khiển dịch vụ
        • Xem xét tắc nghẽn và xác định các giải pháp
    • Bài tập:
      • Thiết kế một hệ thống tạo ID độc đáo ngẫu nhiên
      • Thiết kế cơ sở dữ liệu giá trị khóa
      • Thiết kế một hệ thống chia sẻ hình ảnh
      • Thiết kế một hệ thống khuyến nghị
      • Thiết kế một hệ thống rút ngắn URL: Được sao chép từ trên cao
      • Thiết kế một hệ thống bộ nhớ cache

Học thêm

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.

  • Trình biên dịch

    • Cách trình biên dịch hoạt động trong ~ 1 phút (video)
    • Harvard CS50 - Trình biên dịch (Video)
    • C ++ (Video)
    • Hiểu tối ưu hóa trình biên dịch (C ++) (video)
  • Emacs và VI (M)

    • Làm quen với một trình chỉnh sửa mã dựa trên UNIX
    • vi (m):
      • Chỉnh sửa với VIM 01 - cài đặt, thiết lập và chế độ (video)
      • Cuộc phiêu lưu của vim
      • Bộ 4 video:
        • Trình chỉnh sửa VI/VIM - Bài 1
        • Biên tập viên VI/VIM - Bài 2
        • Biên tập viên VI/VIM - Bài 3
        • Biên tập viên VI/VIM - Bài 4
      • Sử dụng VI thay vì Emacs
    • Emacs:
      • Hướng dẫn cơ bản của Emacs (Video)
      • Bộ 3 (video):
        • Hướng dẫn Emacs (Người mới bắt đầu) -Part 1- Các lệnh tệp, Cut/Sao chép/Dán, lệnh con trỏ
        • Hướng dẫn Emacs (Người mới bắt đầu) -Part 2- Quản lý bộ đệm, Tìm kiếm, M-X GREP và RGREP Chế độ
        • Hướng dẫn Emacs (người mới bắt đầu) -Part 3- Biểu thức, câu lệnh, ~/.emacs Tệp và gói
      • Chế độ xấu xa: Hoặc, cách tôi học cách ngừng lo lắng và yêu Emacs (video)
      • Viết các chương trình C với Emacs
    • Hướng dẫn dành cho người mới bắt đầu tuyệt đối về Emacs (video của David Wilson)
    • Hướng dẫn dành cho người mới bắt đầu tuyệt đối về Emacs (Ghi chú của David Wilson)
  • Công cụ dòng lệnh UNIX

    • Tôi điền vào danh sách dưới đây từ các công cụ tốt.
    • bash
    • con mèo
    • grep
    • SED
    • awk
    • Curl hoặc wget
    • loại
    • tr
    • uniq
    • Strace
    • TCPDUMP
  • Lý thuyết thông tin (video)

    • Học viện Khan
    • Thông tin thêm về các quy trình Markov:
      • Tạo văn bản core Markov
      • Triển khai Core Markov tạo văn bản
      • Project = Markov tạo văn bản đi qua
    • Xem thêm trong loạt thông tin và entropy MIT 6.050J bên dưới
  • Mã chẵn lẻ & Hamming (Video)

    • Giới thiệu
    • Ngang bằng
    • Mã Hamming:
      • Phát hiện lỗi
      • Sửa lỗi
    • Kiểm tra lỗi
  • Sự hỗn loạn

    • Cũng xem video bên dưới
    • Đảm bảo xem các video lý thuyết thông tin trước tiên
    • Lý thuyết thông tin, Claude Shannon, entropy, dự phòng, nén dữ liệu & bit (video)
  • Mật mã

    • Cũng xem video bên dưới
    • Đảm bảo xem các video lý thuyết thông tin trước tiên
    • Lý thuyết thông tin, Claude Shannon, entropy, dự phòng, nén dữ liệu & bit (video)
    • Mật mã
    • Khan Academy Series
  • Cryptography: Chức năng băm

    • Đảm bảo xem các video lý thuyết thông tin trước tiên
    • Lý thuyết thông tin, Claude Shannon, entropy, dự phòng, nén dữ liệu & bit (video)
      • Cryptography: Chức năng băm
      • Mật mã: Mã hóa
      • Nén
      • Máy tính (Video):
      • Entropy trong nén
      • Cây lộn ngược (cây Huffman)
    • Thêm bit/trit - cây Huffman
    • Nén thanh lịch trong văn bản (phương pháp LZ 77)
  • Nén văn bản đáp ứng xác suất

    • Video đầu máy nén
      • (Tùy chọn) Các nhà phát triển Google Live: GZIP là không đủ!
      • Bảo mật máy tính
      • MIT (23 video)
      • Giới thiệu, mô hình mối đe dọa
      • Kiểm soát tấn công tấn công
      • Khai thác và phòng thủ tràn bộ đệm
      • Tách đặc quyền
      • Khả năng
      • Mã tự nhiên Sandboxing
      • Mô hình bảo mật web
      • Đảm bảo các ứng dụng web
      • Thực thi tượng trưng
  • An ninh mạng

    • Giao thức mạng
    • Các cuộc tấn công kênh phụ
    • Thu gom rác thải
  • GC trong Python (Video)

    • Deep Dive Java: Bộ sưu tập rác là tốt!
    • Deep Dive Python: Bộ sưu tập rác trong Cpython (Video)
  • Lập trình song song

    • Coursera (Scala)
      • Python hiệu quả cho điện toán song song hiệu suất cao (Video)
    • Tin nhắn, tuần tự hóa và hệ thống xếp hàng
      • Thrift
    • Hướng dẫn
      • Bộ đệm giao thức
    • Hướng dẫn
      • Python hiệu quả cho điện toán song song hiệu suất cao (Video)
    • Tin nhắn, tuần tự hóa và hệ thống xếp hàng
    • Thrift
    • Hướng dẫn
      • Bộ đệm giao thức
    • Hướng dẫn
      • GRPC
    • GRPC 101 cho các nhà phát triển Java (Video)
      • Redis
    • Amazon Sqs (Hàng đợi)
    • Amazon SNS (Pub-Sub)
    • Thỏ
    • Bắt đầu
  • A*

    • Rau cần tây
    • Những bước đầu tiên với cần tây
  • Zeromq

    • Giới thiệu - Đọc hướng dẫn
    • ActiveMq
    • Kafka
    • Tin nhắn
    • Avro
  • Một thuật toán tìm kiếm

    • A* Pathfinding (E01: Giải thích thuật toán) (Video)
    • Biến đổi Fourier nhanh
    • Một hướng dẫn tương tác cho biến đổi Fourier
    • Python hiệu quả cho điện toán song song hiệu suất cao (Video)
    • Tin nhắn, tuần tự hóa và hệ thống xếp hàng
  • Thrift

    • Hướng dẫn
  • Bộ đệm giao thức

    • Hướng dẫn
    • GRPC
    • GRPC 101 cho các nhà phát triển Java (Video)
  • Redis

    • Amazon Sqs (Hàng đợi)
    • Amazon SNS (Pub-Sub)
  • Thỏ

    • Bắt đầu
  • Rau cần tây

    • Những bước đầu tiên với cần tây

    • Zeromq

    • Giới thiệu - Đọc hướng dẫn

      • SPLAY TREE
      • Các chức năng tìm kiếm và chèn, bỏ qua xóa
    • Tôi muốn tìm hiểu thêm về B-Tree vì nó được sử dụng rộng rãi với các bộ dữ liệu rất lớn

    • Cây tìm kiếm nhị phân tự cân bằng

    • Cây avl

      • Trong thực tế: Từ những gì tôi có thể nói, những thứ này không được sử dụng nhiều trong thực tế, nhưng tôi có thể thấy chúng sẽ ở đâu: cây AVL là một cấu trúc khác hỗ trợ tìm kiếm, chèn và loại bỏ O (log n). Nó cân bằng cứng hơn so với các cây đỏ đỏ, dẫn đến việc chèn và loại bỏ chậm hơn nhưng thu hồi nhanh hơn. Điều này làm cho nó hấp dẫn đối với các cấu trúc dữ liệu có thể được xây dựng một lần và được tải mà không cần xây dựng lại, chẳng hạn như từ điển ngôn ngữ (hoặc từ điển chương trình, chẳng hạn như các opcode của trình biên dịch hoặc trình thông dịch)
      • MIT AVL Cây / Sắp xếp AVL (Video)
      • Cây AVL (Video)
      • Triển khai cây AVL (Video)
      • Chia và hợp nhất
    • Cây splay

      • Trong thực tế: Cây splay thường được sử dụng trong việc triển khai bộ nhớ cache, bộ phân bổ bộ nhớ, bộ định tuyến, bộ sưu tập rác, nén dữ liệu, dây thừng (thay thế chuỗi được sử dụng cho các chuỗi văn bản dài), trong Windows NT (trong bộ nhớ ảo, kết nối mạng và hệ thống tệp Mã) vv
      • CS 61B: Cây splay (video)
      • Bài giảng của MIT: Cây splay:
        • Nhận được rất toán học, nhưng chắc chắn xem 10 phút cuối cùng.
        • Video
    • Cây đỏ/đen

      • Đây là một bản dịch của một cây 2-3 (xem bên dưới).
      • Trong thực tế: Cây đỏ đỏ cung cấp các bảo đảm trong trường hợp xấu nhất cho thời gian chèn, thời gian xóa và thời gian tìm kiếm. Điều này không chỉ làm cho chúng có giá trị trong các ứng dụng nhạy cảm với thời gian như các ứng dụng thời gian thực, mà nó còn làm cho chúng có giá trị các khối xây dựng trong các cấu trúc dữ liệu khác cung cấp bảo đảm trong trường hợp xấu nhất; Ví dụ, nhiều cấu trúc dữ liệu được sử dụng trong hình học tính toán có thể dựa trên các cây đen đỏ và bộ lập lịch hoàn toàn công bằng được sử dụng trong các hạt Linux hiện tại sử dụng các cây Black Red. Trong phiên bản 8 của Java, bộ sưu tập Hashmap đã được sửa đổi sao cho thay vì sử dụng danh sách liên kết để lưu trữ các yếu tố giống hệt
      • Aduni - Thuật toán - Bài giảng 4 (Liên kết nhảy đến điểm bắt đầu) (Video)
      • Aduni - Thuật toán - Bài giảng 5 (Video)
      • Cây đen đỏ
      • Giới thiệu về tìm kiếm nhị phân và cây đen đỏ
      • [Đánh giá] Cây đen đỏ (danh sách phát) trong 30 phút (video)
    • 2-3 cây tìm kiếm

      • Trong thực tế: 2-3 cây có chèn nhanh hơn với chi phí tìm kiếm chậm hơn (vì chiều cao hơn so với cây AVL).
      • Bạn sẽ sử dụng 2-3 cây rất hiếm khi vì việc triển khai của nó liên quan đến các loại nút khác nhau. Thay vào đó, mọi người sử dụng cây đen đỏ.
      • Trực giác và định nghĩa 23 cây (video)
      • Chế độ xem nhị phân của 23 cây
      • 2-3 cây (đọc thuộc sinh viên) (video)
    • 2-3-4 cây (còn gọi là 2-4 cây)

      • Trong thực tế: Cứ mỗi 2-4 cây, có những cây xanh đỏ tương ứng với các yếu tố dữ liệu theo cùng một thứ tự. Các hoạt động chèn và xóa trên 2-4 cây cũng tương đương với việc lật màu và xoay trong các cây đỏ đỏ. Điều này làm cho 2-4 cây trở thành một công cụ quan trọng để hiểu logic đằng sau cây đỏ đỏ, và đây là lý do tại sao nhiều văn bản thuật toán giới thiệu giới thiệu 2-4 cây ngay trước khi cây đỏ đỏ, mặc dù 2-4 cây thường không được sử dụng trong thực tiễn.2-4 trees are not often used in practice.
      • Bài giảng CS 61B 26: Cây tìm kiếm cân bằng (Video)
      • Từ dưới lên 234 cây (video)
      • Từ trên xuống 234 cây (video)
    • Cây n-ary (k-ary, m-ary)

      • Lưu ý: N hoặc K là yếu tố phân nhánh (nhánh tối đa)
      • Cây nhị phân là một cây 2 ary, với hệ số phân nhánh = 2
      • 2-3 cây là 3-ary
      • Cây k-ary
    • B-Trees

      • Sự thật thú vị: Đó là một bí ẩn, nhưng B có thể đại diện cho Boeing, cân bằng hoặc Bayer (đồng phát minh).
      • Trong thực tế: cây B được sử dụng rộng rãi trong cơ sở dữ liệu. Hầu hết các hệ thống tập tin hiện đại sử dụng B-cây (hoặc biến thể). Ngoài việc sử dụng trong cơ sở dữ liệu, cây B cũng được sử dụng trong các hệ thống tập tin để cho phép truy cập ngẫu nhiên nhanh chóng vào một khối tùy ý trong một tệp cụ thể. Vấn đề cơ bản là biến khối tệp mà tôi địa chỉ thành một khối đĩa (hoặc có lẽ thành địa chỉ đầu xi lanh)
      • B-Tree
      • Cơ sở dữ liệu B-Tree
      • Giới thiệu về B-cây (Video)
      • Định nghĩa và chèn B-cây (Video)
      • Xóa B-Tree (Video)
      • MIT 6.851 - Các mô hình phân cấp bộ nhớ (Video) - Bao gồm các cây B có bộ đệm, cấu trúc dữ liệu rất thú vị - 37 phút đầu tiên rất kỹ thuật, có thể được bỏ qua (B là kích thước khối, kích thước dòng bộ đệm)
      • [Đánh giá] B-cây (danh sách phát) trong 26 phút (video)
  • Cây K-D

    • Tuyệt vời để tìm số lượng điểm trong một hình chữ nhật hoặc đối tượng kích thước cao hơn
    • Phù hợp tốt cho những người hàng xóm gần nhất
    • Knn K-D Tree ATTERITHM (VIDEO)
  • Bỏ qua danh sách

    • "Đây là một phần của cấu trúc dữ liệu sùng bái" - Skiena
    • Ngẫu nhiên: Bỏ qua danh sách (video)
    • Cho hoạt hình và chi tiết hơn một chút
  • Lưu lượng mạng

    • Ford-Fulkerson trong 5 phút-Ví dụ từng bước (Video)
    • Thuật toán Ford-Fulkerson (Video)
    • Luồng mạng (video)
  • Setoint Sets & Union Find

    • UCB 61B - Bộ phân tách; Sắp xếp và lựa chọn (video)
    • Thuật toán Sedgewick - Union -Find (6 video)
  • Toán học để xử lý nhanh

    • Số học số nguyên, phép nhân Karatsuba (Video)
    • Định lý còn lại của Trung Quốc (được sử dụng trong mật mã) (video)
  • Treap

    • Sự kết hợp của một cây tìm kiếm nhị phân và một đống
    • Treap
    • Sự kết hợp của một cây tìm kiếm nhị phân và một đống
    • Cấu trúc dữ liệu: Treaps giải thích (video)
  • Các ứng dụng trong các hoạt động đã thiết lập

    • Lập trình tuyến tính (Video)
    • Lập trình tuyến tính
    • Tìm chi phí tối thiểu
    • Tìm giá trị tối đa
  • Giải các phương trình tuyến tính bằng Python - Thuật toán Simplex

    • Hình học, Hull Convex (Video)
    • Đồ thị alg. IV: Giới thiệu về thuật toán hình học - Bài giảng 9
    • Thuật toán hình học: Graham & Jarvis - Bài giảng 10
  • Chia & Conquer: Hull Convex, phát hiện trung bình

    • Toán rời rạc
    • Khoa học máy tính 70, 001 - Mùa xuân 2015 - Toán học và lý thuyết xác suất riêng biệt
    • Toán học rời rạc của Shai Simonson (19 video)

Toán học rời rạc bởi iit ropar nptel

I added these to reinforce some ideas already presented above, but didn't want to include them
above because it's just too much. It's easy to overdo it on a subject.
You want to get hired in this century, right?

  • Chi tiết bổ sung về một số môn học

    • CHẤT RẮN
    • Nguyên tắc vững chắc của Bob Martin về thiết kế đối tượng và thiết kế Agile (Video)
      • S - Nguyên tắc trách nhiệm duy nhất | Trách nhiệm duy nhất cho từng đối tượng
    • hương vị nhiều hơn
      • S - Nguyên tắc trách nhiệm duy nhất | Trách nhiệm duy nhất cho từng đối tượng
    • hương vị nhiều hơn
      • S - Nguyên tắc trách nhiệm duy nhất | Trách nhiệm duy nhất cho từng đối tượng
    • hương vị nhiều hơn
      • O - Nguyên tắc mở/đóng | Trên các đối tượng cấp sản xuất đã sẵn sàng để mở rộng nhưng không phải để sửa đổi
      • S - Nguyên tắc trách nhiệm duy nhất | Trách nhiệm duy nhất cho từng đối tượng
    • hương vị nhiều hơn
      • O - Nguyên tắc mở/đóng | Trên các đối tượng cấp sản xuất đã sẵn sàng để mở rộng nhưng không phải để sửa đổi
      • S - Nguyên tắc trách nhiệm duy nhất | Trách nhiệm duy nhất cho từng đối tượng
  • Union-Find

    • hương vị nhiều hơn
    • O - Nguyên tắc mở/đóng | Trên các đối tượng cấp sản xuất đã sẵn sàng để mở rộng nhưng không phải để sửa đổi
    • L - Nguyên tắc thay thế Liskov | Lớp cơ sở và lớp có nguồn gốc theo nguyên tắc của
    • I - Nguyên tắc phân biệt giao diện | khách hàng không nên bị buộc phải thực hiện các giao diện mà họ không sử dụng
    • Nguyên tắc phân biệt giao diện trong 5 phút (video)
    • Nguyên tắc đảo ngược d -Dependency | Giảm sự phụ thuộc trong thành phần của các đối tượng.
  • Tại sao nguyên tắc đảo ngược phụ thuộc và tại sao nó lại quan trọng (videos)

    • Tổng quan
    • Thực hiện ngây thơ
    • Cây
    • Liên minh theo cấp bậc
    • Nén đường
    • Tùy chọn phân tích
    • Lập trình động hơn (Video)
  • 6,006: Lập trình động I: Fibonacci, đường dẫn ngắn nhất (videos)

    • 6,006: Lập trình động II: Biện minh văn bản, Blackjack
    • 6,006: DP III: dấu ngoặc đơn, chỉnh sửa khoảng cách, ba lô
  • 6,006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.Probability (mathy, and go slowly, which is good for mathy things) (videos):

    • 6.046: Lập trình động & DP nâng cao
    • 6.046: Lập trình động: Đường dẫn ngắn nhất toàn cặp
    • 6.046: Lập trình động (đọc thuộc sinh viên)
    • Xử lý đồ thị nâng cao (Video)
    • Thuật toán phân tán đồng bộ: phá vỡ đối xứng. Đường ngắn nhất kéo dài cây
    • Thuật toán phân tán không đồng bộ: các đường ngắn nhất
    • Xác suất MIT (Mathy và Go Dần, điều này tốt cho những thứ toán học) (video):
    • MIT 6.042J - Giới thiệu xác suất
  • MIT 6.042J - Xác suất có điều kiện

  • MIT 6.042J - Độc lập

    • MIT 6.042J - Biến ngẫu nhiên
      • MIT 6.042J - Kỳ vọng tôi
      • MIT 6.042J - Kỳ vọng II
      • MIT 6.042J - Độ lệch lớn
      • MIT 6.042J - Đi bộ ngẫu nhiên
      • Simonson: Thuật toán gần đúng (video)
    • Chuỗi khớp
      • Rabin-Karp (Video):
    • Thuật toán Rabin Karps
      • Tiền đề phòng
      • Tối ưu hóa: Thực hiện và phân tích
    • Bảng nhân đôi, karp-rabin
      • Băm lăn, phân tích khấu hao
      • Knuth-Morris-Pratt (KMP):
      • TTHE KNUTH-MORRIS-PRATT (KMP) Chuỗi phù hợp với thuật toán
  • Thuật toán tìm kiếm chuỗi boyer

    • Thuật toán tìm kiếm chuỗi boyer-moore
      • Chuỗi nâng cao Tìm kiếm Boyer-Moore-Horspool Thuật toán (Video)
      • Coursera: Các thuật toán trên chuỗi
    • Bắt đầu tuyệt vời, nhưng đến khi nó vượt qua KMP, nó trở nên phức tạp hơn
      • Giải thích tốt về những nỗ lực
      • có thể được bỏ qua
    • Sắp xếp
      • Các bài giảng của Stanford về phân loại:
      • Bài giảng 15 | Lập trình trừu tượng (video)

Bài giảng 16 | Lập trình trừu tượng (video)

Shai Simonson, Aduni.org:

  • Thuật toán - Sắp xếp - Bài giảng 2 (Video)

  • Thuật toán - Sắp xếp II - Bài giảng 3 (Video)

  • Steven Skiena Bài giảng về Sắp xếp:

  • CSE373 2020 - Mergesort/Quicksort (Video)

  • CSE373 2020 - Sắp xếp tuyến tính (Video)

  • Video Series

  • Ngồi lại và tận hưởng.

  • Danh sách các vấn đề lập trình động riêng lẻ (mỗi vấn đề ngắn)

  • Kiến trúc x86, lắp ráp, ứng dụng (11 video)

  • MIT 18.06 Đại số tuyến tính, Mùa xuân 2005 (35 video)

  • Xuất sắc - Tính toán MIT được xem xét lại: Tính toán biến duy nhất

  • Bài giảng Skiena từ Hướng dẫn thiết kế thuật toán - CSE373 2020 - Phân tích thuật toán (26 video)

  • UC Berkeley 61B (Mùa xuân 2014): Cấu trúc dữ liệu (25 video)

  • UC Berkeley 61B (mùa thu 2006): Cấu trúc dữ liệu (39 video)

  • MIT 6.042J: Toán học cho khoa học máy tính, mùa thu 2010 (25 video)

  • MIT 6.046: Thiết kế và phân tích thuật toán (34 video)

  • MIT 6.824: Hệ thống phân tán, Mùa xuân 2020 (20 video)

  • MIT 6.851: Cấu trúc dữ liệu nâng cao (22 video)

  • MIT 6.854: Thuật toán nâng cao, Mùa xuân 2016 (24 video)

  • Harvard Compsci 224: Thuật toán nâng cao (25 video)

  • MIT 6.858 Bảo mật hệ thống máy tính, mùa thu 2014

  • Stanford: Mô hình lập trình (27 video)

  • Giới thiệu về mật mã của Christof Paar

    • Trang web khóa học cùng với các slide và bộ vấn đề
  • Khai thác bộ dữ liệu lớn - Đại học Stanford (94 video)

  • Lý thuyết đồ thị của Sarada Herke (67 video)

Khóa học khoa học máy tính

  • Thư mục của các khóa học CS trực tuyến
  • Thư mục của các khóa học CS (nhiều bài giảng trực tuyến)

Thực hiện thuật toán

  • Thực hiện nhiều thuật toán của Đại học Princeton

Giấy tờ

  • Tình yêu giấy tờ cổ điển?
  • 1978: Truyền đạt các quy trình tuần tự
    • thực hiện trong Go
  • 2003: Hệ thống tệp Google
    • được thay thế bởi Colossus vào năm 2012
  • 2004: MapReduce: Xử lý dữ liệu đơn giản trên các cụm lớn
    • Chủ yếu được thay thế bằng đám mây DataFlow?
  • 2006: BigTable: Một hệ thống lưu trữ phân tán cho dữ liệu có cấu trúc
  • 2006: Dịch vụ khóa mũm mĩm cho các hệ thống phân tán được kết hợp lỏng lẻo
  • 2007: Dynamo: Cửa hàng giá trị khóa có sẵn cao của Amazon
    • Giấy Dynamo đã khởi động cuộc cách mạng Noql
  • 2007: Những gì mọi lập trình viên nên biết về bộ nhớ (rất dài và tác giả khuyến khích bỏ qua một số phần)
  • 2012: Địa chỉ
    • giấy
    • video
  • 2013: Spanner: Cơ sở dữ liệu phân phối toàn cầu của Google:
    • giấy
    • video
  • 2013: Spanner: Cơ sở dữ liệu phân phối toàn cầu của Google:
  • 2015: Đường ống liên tục tại Google
  • 2015: Tính khả dụng cao ở quy mô lớn: Xây dựng cơ sở hạ tầng dữ liệu Google Google cho quảng cáo
  • 2015: Cách các nhà phát triển tìm kiếm mã: Một nghiên cứu trường hợp

Thêm giấy tờ: 1.000 bài báo

CC-BY-SA-4.0