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.

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ì?

Đâ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: //github.com/jwasham/coding-interview-university bằng cách nhấp vào nút Fork. //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 //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: //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: &, |, ^, ~, >>,

Bài Viết Liên Quan

Chủ Đề