Fizzbuzz python geeksforgeek
Gần đây mình có đọc một bài viết khá thú vị được viết cách đây 13 năm của Imran Ghory - đối tác của Blossom Capital. Trong bài viết anh ấy có nói rằng đã từng chứng kiến nhiều người được phỏng vấn bằng cấp cải tiến về khoa học máy tính, IT,. những người này mặc dù có tầm hiểu biết sâu rộng trong ngành, nắm rõ hết các lý thuyết nhưng lại có rất ít kinh nghiệm về viết mã thực tế. Việc tuyển dụng Dev là một công việc không hề đơn giản, mình không nghĩ đến việc hỏi những câu hỏi phức tạp, lằng nhằng, yêu cầu suy nghĩ quá nhiều thời gian là một cách hay để tuyển người, cũng như là việc phủi tay để . Để giải quyết vấn đề này thì ông Imran đã đưa ra một bài kiểm tra đơn giản để chắc chắn rằng những người đang tìm kiếm nó có thể là sự thật hay không, có ý nghĩa đúng không?
Fizz Buzz là trò chơi gì ?Fizz Buzz (không rõ tên văn phòng của công ty mình được lấy từ đây hay không. v ) là một trò chơi cực kỳ đơn giản, trong trò chơi này, một nhóm trẻ ngồi trong một nhóm và đếm từng số theo thứ tự (1,2,3,4,. ) , if that number is multiple of ba, instead because read number, we will say "Fizz", or year, then must say is "Buzz". Nếu một số là bội số của cả ba và năm thì phải nói là "Fizz-Buzz". Kết quả chuỗi sẽ là
Đơn giản mà, đúng không ? Bài toán này trong buổi phỏng vấn sẽ có dạng sau
cỏ khô
Một bài đơn giản nên chắc chắn rằng bất kỳ ai tham gia phỏng vấn đều có thể vượt qua bài này đúng không? Đây là một bài kiểm tra cực kỳ hay vì một vài lý do sau Đầu tiên là bài kiểm tra này có CỰC KÌ nhiều cách để tiếp cận và giải quyết vấn đề. Tẹo mình sẽ hiển thị thử một vài cách, và chắc chắn rằng các bạn đang đọc cũng có thể viết được cả chồng cách nhau. Cách mọi người tiếp cận vấn đề và cách họ xử lý vấn đề sẽ cung cấp cho quá trình phỏng vấn một cái nhìn rõ nhất về cách tư duy cũng như kiểu lập trình của từng người. Họ sẽ cố nhồi tất cả logic vào đoạn mã cho nó chạy rồi sau đó mới bắt đầu sửa lỗi và chỉnh sửa lại mã (như mình vẫn hay làm (dab)) hay họ sẽ lên kế hoạch trước và tính toán những vấn đề có Bên cạnh đó, FizzBuzz còn chứa đựng một vấn đề khá khó khăn để có thể hiện vẻ đẹp tinh khiết trong code, đó là phải kiểm tra nhiều điều kiện. Nếu số hiện tại chia hết cho 3 thì làm 1 việc A, nếu chia hết cho 5 thì làm việc B, nếu chia hết cho cả hai thì làm lại việc C, còn lại thì làm một việc khác Mã thốiỞ đây mình sẽ dùng JavaScript cho dễ hiểu nhé Việc đầu tiên mình sẽ làm là viết một vòng lặp chạy 100 lần
Sau đó chúng ta cần sử dụng cái gì đó để xuất ra kết quả. Trong JavaScript thì chúng ta có thể sử dụng 2 để xuất kết quả ra bảng điều khiển, trong các ngôn ngữ khác hoặc hiển thị ở trang web thì bạn có thể sử dụng bất cứ điều gì để xuất ra cũng được. To in the value of 3, we will write as after
Chạy thử thì đoạn mã của chúng ta sẽ có đầu ra
Theo đề bài thì chúng ta phải cho Fizz hoặc Buzz hiển thị khi không có điều kiện. Do đó chúng ta sẽ nhét chúng vào câu lệnh 4 nhé
đầu ra
Sai rồi thì sửa thôi, nào cùng rạch thêm một ngăn xếp điều kiện nữa nhé ________số 8Mã hủy kinh khủng. < , code it it it repeat as this main is the first icon of code lo lắng. Qúa cồng kềnh, khó đọc khó duy trì mặc dù nó đã đáp ứng được yêu cầu bài toán Chúng ta refactor lại chút nhé thử tái cấu trúcChúng ta có thể sử dụng đến cụm câu lệnh 5 để thu gọn lại nhé 0Cách này ngắn hơn nhiều, tuy nhiên mình vẫn chưa ưng lắm. Nếu bây giờ có yêu cầu muốn thay đổi từ 5 -> 7 thì sao ? . Mình sẽ luôn nhớ là phải sửa tất cả các số 5, đối với đoạn mã nhỏ thế này thì không phải là vấn đề, tuy nhiên với một hệ thống lớn hơn thì việc thay đổi như thế này là một việc không hề được khuyến khích . Lý tưởng nhất thì bạn không nên lặp lại một điều kiện nhiều lần, hay đơn giản là DRY (Don't Repeat Yourself) Vậy thì chúng ta nên làm như thế nào ? Cách của mìnhĐây là cách mà mình làm Đầu tiên mình sẽ tạo ra một biến 6 chỉ chứa một chuỗi trống, biến này sẽ được sử dụng để chứa giá trị cần xuất 2Sau đó mình kiểm tra điều kiện nếu chia hết cho 3 thì mình thêm 'Fizz' vào chuỗi 6, tương tự với điều kiện chia hết cho 5. Đây là hai điều kiện riêng biệt, nên khi chúng giống nhau, tức là chia hết cho cả 3 và 5 thì sẽ có chuỗi 'FizzBuzz' 4Và cuối cùng mình sẽ không kiểm tra lại giá trị của 3 nữa mà mình sẽ kiểm tra xem đầu ra có trống không thì trả về 3, không thì trả về 6 8Đoạn mã này hoàn toàn có thể sử dụng được với mọi con số khác mà bạn có thể nghĩ tới. Thêm 7, 10, 11,. đều được hết, chỉ việc copy câu lệnh 4 thôi, chứ nếu làm theo kiểu 2 thì đúng là ác mộng 0Mình biết là vẫn sẽ có nhiều cách còn đỉnh hơn nhiều, khi còn dùng một dòng cơ. Nếu các bạn có cách nào thì thoải mái comment bên dưới nhé (cúi đầu) Tổng kếtTheo mình nghĩ thì vẫn có nhiều công ty trên thế giới vẫn dùng cách này để phỏng vấn và tuyển dụng. Bên cạnh đó còn rất nhiều bài toán dạng như thế này, thứ không được học ở lớp hay trên mạng mà chủ yếu dựa vào cách tiếp cận và giải quyết vấn đề của cá nhân bạn Mình vẫn thuộc thể loại thấm mẫm rồi vét hết logic vào code, sau đấy mới refactor lại cho đến khi cảm thấy đủ ổn (dab). Nhưng tốt nhất đừng code thối quá, anh Dev duy trì code của em sẽ lắm đấy đấy Cảm ơn các bạn đã đọc. Bạn có giải pháp nào hay hơn thì cứ thoải mái comment để chia sẻ nhé (cúi đầu) Bài viết của Imran Ghory. https. // imranontech. com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/ |