Nếu thuật toán của bạn là chính xác, vấn đề là bạn mất bao lâu để viết nó? [đóng cửa]


11

Gần đây tôi phát hiện ra rằng Facebook có một thách thức lập trình rằng nếu hoàn thành chính xác, bạn sẽ tự động nhận được một cuộc phỏng vấn qua điện thoại.

Có một thử thách mẫu yêu cầu bạn viết một thuật toán có thể giải bài toán loại Tháp Hà Nội . Cho một số chốt và đĩa, một cấu hình ban đầu và cuối cùng; Thuật toán của bạn phải xác định các bước ít nhất có thể để đi đến cấu hình cuối cùng và xuất các bước.

Thử thách mẫu này cung cấp cho bạn giới hạn thời gian 45 phút nhưng cho phép bạn vẫn kiểm tra mã của mình để xem liệu nó có vượt qua khi giới hạn thời gian của bạn hết hạn hay không.

Tôi không biết bất kỳ giải pháp toán học dễ thương nào có thể giải quyết nó và tôi không muốn tìm kiếm một giải pháp nào vì tôi nghĩ đó sẽ là gian lận. Vì vậy, tôi đã cố gắng tự mình giải quyết thử thách tốt nhất có thể.

Tôi đã có thể tạo ra một thuật toán hoạt động và thông qua. Tuy nhiên, tôi đã mất hơn 4 giờ để thực hiện, lâu hơn nhiều so với yêu cầu 45 phút. Vì nó khiến tôi mất nhiều thời gian hơn so với thời gian quy định, tôi đã không thử thách thực tế.

Điều này khiến tôi băn khoăn, mặc dù trong thực tế, nó có thực sự khiến tôi mất nhiều thời gian như vậy không? Ý tôi là đây là một dấu hiệu cho thấy tôi sẽ không thể có được một công việc tại một nơi như thế này (không chỉ Facebook, mà cả Google, Fog Creek, v.v.) và cần phải hạ thấp nguyện vọng của tôi, hoặc thực tế là tôi đã thực sự vượt qua trong nỗ lực đầu tiên của tôi mặc dù mất quá nhiều thời gian có tốt không?


12
Nó quan trọng ở đây - điều đó có đủ thực sự với bạn không?

2
Tại sao bạn tin rằng việc không làm việc cho một tên tuổi lớn ngụ ý rằng bạn hạ thấp nguyện vọng của mình?
mouviciel

@mouviciel Tôi không có nghĩa chính xác là tôi khao khát làm việc với một tên tuổi lớn nhưng giống như làm việc cho một công ty trong đó lập trình là vai trò chính so với làm việc tại một công ty làm việc khác như bán lẻ mà không ai hiểu bạn làm gì.
JD Isaacks

5
LOL tại phần mềm Fog Creek được bao gồm với Facebook và Google.
georgiecasey

Câu trả lời:


42

Trong thực tế nó không vấn đề bao lâu nó sẽ đưa bạn. Một vấn đề có thể giải quyết vấn đề trong 45 phút là - tất cả những thứ khác bằng nhau - năng suất gấp năm lần so với một người mất 4 giờ, và do đó hấp dẫn hơn đối với một nhà tuyển dụng.

Điều đó nói rằng, bạn không nói lý do tại sao bạn mất bốn giờ để giải quyết vấn đề này.

  • Bạn đã ở mức tốt nhất (được nuôi dưỡng tốt, không mệt mỏi, tập trung đầy đủ)?
  • Là vấn đề được chỉ định rõ, hoặc bạn cần phải tự nghiên cứu thêm?
  • Bạn đã phải học những điều mới để làm điều này?
  • Các công cụ có quen thuộc hay không?
  • Vân vân.

Bất kỳ và tất cả những điều này có thể ảnh hưởng đến thời gian bạn cần và điều thực sự quan trọng hơn là có thể giải quyết vấn đề khi chịu áp lực, không được nói mọi thứ và với các công cụ trong tay, vì điều đó SILL xảy ra trong sự nghiệp của bạn và nó thường ở một điểm rất quan trọng đối với ai đó cho dù bạn có thành công hay không.


Cảm ơn câu trả lời của bạn. Để trả lời tại sao tôi phải mất nhiều thời gian, một phần là do tôi gặp một chút khó khăn trong việc hiểu những gì tôi thực sự cần phải làm, một khi tôi hiểu phần đó, tôi vẫn phải suy nghĩ một chút để đưa ra kế hoạch. Ví dụ: nếu một đĩa đang chặn đĩa tôi muốn di chuyển và tôi cần di chuyển nó trước, tôi nên di chuyển nó đến đâu. Phần lập trình thực sự là phần ngắn nhất, nhưng tất cả đều được thêm vào thời gian.
JD Isaacks

@JohnIsaacks Vì vậy, vấn đề là bạn không quen thuộc với Tháp Hà Nội. Hầu hết các lập trình viên mà tôi biết đã được giới thiệu về nó khi được dạy về đệ quy (mỗi chuyển động của đĩa về cơ bản là "di chuyển đĩa phía trên tôi đến một chốt trống", ánh xạ độc đáo để đệ quy). Bạn đã nhận được giáo dục chính thức và nếu vậy ở mức độ nào?

@ ThorbjørnRavnAndersen, tôi không học lập trình nào ở trường. Tôi tự học, tôi học được trong công việc, bằng sách vở, thử nghiệm, v.v. Tôi không quen với trò chơi này (ngoại trừ việc nhớ một trò chơi tương tự được chơi trong hành tinh vượn), tôi phải biết Google gọi là "Tháp Hà Nội." Tôi hiểu sự đệ quy (ít nhất là tôi nghĩ tôi làm) và tôi đã sử dụng nó ở đây. Nhưng chỉ đơn giản là giải câu đố sẽ dễ dàng hơn nhiều đối với tôi, phần khó hơn là "Mô hình nào sẽ mang lại số lần di chuyển ít nhất có thể mỗi lần."
JD Isaacks

Lập trình @JohnIsaacks giống như chơi piano - bạn có thể tự mình làm tốt, nhưng để thực sự giỏi, bạn cần được dạy cách làm mọi thứ đúng bởi một giáo viên có kinh nghiệm. Bạn có thể giải thích làm thế nào bạn có thể giải câu đố nhưng tìm phần "tối ưu" không?

Tôi có thể tạo một hàm đệ quy di chuyển một mảnh vào vị trí, di chuyển bất kỳ mảnh chặn nào ra khỏi đường đi, sau đó bắt đầu lại với mảnh tiếp theo. Bắt đầu với phần lớn nhất và làm việc cho đến phần nhỏ nhất cuối cùng. Phần "là tối ưu" đến từ khi bạn di chuyển một phần chặn. Tùy thuộc vào nơi bạn di chuyển nó, nó có thể tạo thêm các bước không cần thiết. Ví dụ, di chuyển 1 lên 3 sau đó sẽ chặn 3 và cần phải di chuyển ra khỏi đường một lần nữa khi đến lúc di chuyển 3. nhưng tùy thuộc vào cấu hình hiện tại, điều này có thể không tránh được.
JD Isaacks

13

Điều đó không quan trọng, đối với một công ty đang tìm kiếm các nhà phát triển chung có dòng tiền tốt , bởi vì nhanh hơn có nghĩa là nhiều công việc có thể được thực hiện. Tuy nhiên, trong nhiều trường hợp khác (Tôi sẽ tranh luận trong hầu hết trường hợp, trên thực tế), nó không quan trọng như nhiều như bạn có khả năng giải quyết vấn đề , và bạn khả năng để giải quyết chúng tốt .

Tôi có thể nghĩ về năm loại người giải quyết vấn đề khác nhau:

Những người...

  1. ... Có thể giải quyết vấn đề nhanh chóng , với giải pháp sạch và hiệu quả.
  2. ... Có thể giải quyết vấn đề nhanh chóng , nhưng với một giải pháp bẩn và không hiệu quả.
  3. ... Có thể giải quyết vấn đề chậm , nhưng kết thúc bằng một giải pháp sạch và hiệu quả.
  4. ... Có thể giải quyết vấn đề chậm , nhưng kết thúc bằng một giải pháp bẩn và không hiệu quả.
  5. ... Không thể giải quyết vấn đề, nhanh hay chậm.

Một bài kiểm tra theo kiểu Facebook rõ ràng loại bỏ các ứng cử viên # 3, # 4 và # 5 vì nó có giới hạn về thời gian, vì vậy chúng tôi biết rằng bài kiểm tra này dành cho các nhà tuyển dụng đã xác định rằng họ chỉ nên thuê ứng viên số 1 hoặc có thể # 2 ( tùy thuộc vào sàng lọc thêm).

Vài ví dụ:

  • Một nhà tuyển dụng như Facebook chỉ có thể tìm kiếm các lập trình viên số 1 mà thôi, vì họ có thể trả mức lương khổng lồ cho các lập trình viên siêu sao.
  • Nhà tuyển dụng có doanh số bán hàng một lần lớn (như một số cửa hàng thiết kế web) có thể chỉ muốn nhà phát triển số 2 , rẻ hơn so với nhà phát triển số 1 hiệu quả tương đương.
  • Chủ lao động có miền vấn đề chuyên biệt (như viết phần mềm khởi tạo khoản vay), có thể chấp nhận nhà phát triển số 3 so với nhà phát triển số 1 , vì nhà phát triển thiên tài hai cấp có thể rất đắt, hoặc họ có thể khó tìm.
  • Chủ lao động không quan tâm hoặc có ngân sách hạn chế vì nhiều lý do có thể ổn với nhà phát triển số 4 .
  • Các nhà phát triển số 5 được thuê bởi các công ty không biết họ đang tìm kiếm gì và không thể sàng lọc những người nộp đơn đó.

5

Tháp Hà Nội? Đó là một trong những bài tập lập trình đầu tiên tôi có trong khóa học năm thứ nhất tại trường đại học (ngay sau Fibonacci - vâng, tôi có các lớp học với một trong những thứ lập trình chức năng đó :). Và tôi thậm chí không về khoa học máy tính, tôi về kỹ thuật máy tính.

Tuy nhiên, hầu hết những người được gọi là 'lập trình viên' không thể viết loại thuật toán này một cách chính xác, bởi vì hầu hết các lập trình viên đều rất tệ. (tìm kiếm fizzbuzz để thêm niềm vui)

Dù sao, một khi bạn đã vượt qua một ngưỡng nhất định, tôi nghĩ rằng kỹ năng lập trình của bạn không quan trọng bằng khả năng hoàn thành các dự án của bạn, khả năng phục hồi của bạn trước những khó khăn, v.v. Và dường như bạn chắc chắn đã vượt qua nó.

Chắc chắn, Facebook muốn thuê các nhà phát triển hàng đầu, nhưng tôi không biết họ hy vọng sẽ kiếm được bao nhiêu trong số các trò chơi đó. Tôi nghĩ rằng họ chỉ không muốn mất thời gian với những lập trình viên tồi tệ.

Một mẹo tôi luôn nghe là nếu bạn muốn được thuê bởi một công ty công nghệ tuyệt vời, hãy thử tham gia vào các dự án nguồn mở. Ngoài ra, hãy cố gắng để có được một thực tập.


3

Khi có rất nhiều nguồn cung (nhiều lập trình viên) và một ít nhu cầu (ít công việc lập trình), các nhà tuyển dụng có thể có nhu cầu như họ mong muốn. Như một vấn đề thực tế, họ phải đòi hỏi, nếu không họ sẽ dành nhiều thời gian để phỏng vấn mọi người thay vì hoàn thành bất kỳ công việc nào. Vì vậy, họ đang cho các ứng viên những bài kiểm tra cực kỳ khó khăn để có được một danh sách ngắn càng nhanh càng tốt, và để đảm bảo rằng họ sẽ phỏng vấn những người không chỉ giỏi, thậm chí không giỏi, mà thực sự lôi cuốn .

Vì vậy, việc bạn không hoàn thành bài kiểm tra trong khung thời gian quy định không có nghĩa là bạn là một lập trình viên tồi; bạn không thể phù hợp với định nghĩa về những gì facebook cho là lôi cuốn. Theo tôi, điều đó không sao cả.


0

Thời gian trôi đi nhưng đừng hiểu rằng bạn ngu ngốc nếu bạn mất nhiều thời gian hơn. Rất nhiều người có những thứ "thuộc lòng". Họ thực hành áp dụng các kỹ thuật như đệ quy đến mức nó trở thành bản chất 2cd. Không phải là họ thông minh hơn, họ chỉ thực hành đến mức 2cd và bạn cũng có thể!

Xét bài toán sau: 2 + 2 =?

Nếu bạn biết ngay câu trả lời là 4 thì không phải vì bạn thông minh mà vì đó là bản chất 2cd. Một đứa trẻ học thêm có thể bị buộc phải trải qua các thao tác cơ bản nhất là đếm để có câu trả lời. Nhưng đứa trẻ đó có thể có khả năng vượt qua người lớn.


-1

Mọi người không thực sự quan tâm bạn dành bao nhiêu thời gian để làm một cái gì đó; chỉ cần đáp ứng thời hạn của bạn và tất cả đều tốt.


7
Vì vậy, khi thời hạn là "45 phút kể từ bây giờ" và bạn hoàn thành bốn giờ sau đó, mọi người sẽ quan tâm.

1
Ý nghĩa của Mehrdad là bạn có thể làm việc ngoài giờ để đáp ứng thời hạn: D
quant_dev

1
Nếu bạn phải làm thêm giờ để làm những việc mà các nhà phát triển khác sẽ không cần làm thêm giờ - bạn sẽ không còn điểm dừng nào để rút tiền khi người hâm mộ thực sự chạm vào quạt ...
diễn ra vào

-1

Nó khá căng thẳng, Nó sẽ yêu cầu tôi đọc về tòa tháp Hà Nội -15 phút, khởi động IDE, tạo một giải pháp trống -5 phút, vì vậy chỉ mất 25 phút để giải quyết vấn đề. Đơn giản chỉ cần viết mã với tất cả các hệ thống ống nước như các lớp an toàn với thiết kế giao diện tốt cũng sẽ cần một chút thời gian -10 phút, vì vậy chỉ còn 15 phút cho ý tưởng thực tế. Tùy thuộc vào tòa tháp trên Hà Nội là gì, nó có thể là đủ, bit có thể không. Và đôi khi, tôi chỉ cần để vấn đề tự giải quyết trong khi tôi đang giải quyết các vấn đề khác, vì tôi không thấy giải pháp ngay tại chỗ. Vì vậy, nó được giải quyết miễn phí trong một chuỗi song song, nhưng nó không xảy ra ngay lập tức.

Dù sao, đó là một trong những công ty lớn nhất, vì vậy họ có thể làm bất cứ điều gì họ muốn. Nhưng giới hạn thời gian là một trong những yếu tố tồi tệ nhất trong các cuộc phỏng vấn IMHO, tôi luôn cảm thấy bị ép, vội vàng, không thể làm mọi thứ sạch sẽ và không thể tập trung vào tất cả các chi tiết rất quan trọng khi thực sự làm việc. :) Chắc chắn bạn có thể giải quyết các giải pháp nhanh chóng, như, đặt quyền truy cập cho quản trị viên để mọi thứ hoạt động + 'SELECT * FROM pass WHERE usr == ' + user_input, nhưng đối với bất kỳ tác vụ an toàn và được viết tốt nào tôi sẽ tự hào, tôi sẽ cần một chút thời gian và 45 phút thực sự khá căng thẳng.


1
Tôi nghĩ họ muốn những người chỉ cần nhớ vấn đề Tháp Hà Nội là gì (đó là một tác phẩm kinh điển).
quant_dev

Bắt đầu IDE của bạn và tạo một dự án trống mất năm phút? Nếu bạn chưa biết Towers Of Hà Nội, ít nhất hãy thực hiện chúng theo thứ tự ngược lại để IDE đang tải (từ một máy ảo qua internet) trong khi bạn đang nghiên cứu!
Bryan Boettcher

Trong một thử nghiệm như thế này, họ không nhất thiết phải tìm kiếm "thiết kế giao diện tốt" và "hệ thống ống nước" - tôi mong rằng họ muốn thấy sự hiểu biết của bạn về vấn đề và khả năng hình thành thuật toán để giải quyết nó. Nếu ngôn ngữ không phải là một ràng buộc, sử dụng một cái gì đó như Java và Eclipse là điều cuối cùng tôi sẽ làm. Tôi sẽ sử dụng Python và trình soạn thảo văn bản tối thiểu / IDE nhỏ gọn. (Không nói rằng bạn sẽ tự mình sử dụng Java; chỉ cần nói ...)
thỉnh thoảng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.