Đúng như tiêu đề đã nói, vấn đề phỏng vấn bảng trắng yêu thích của bạn là gì và tại sao nó lại được chứng minh hiệu quả với bạn?
Junior, Senior, Java, C, Javascript, PHP, SQL, mã giả, v.v.
Đúng như tiêu đề đã nói, vấn đề phỏng vấn bảng trắng yêu thích của bạn là gì và tại sao nó lại được chứng minh hiệu quả với bạn?
Junior, Senior, Java, C, Javascript, PHP, SQL, mã giả, v.v.
Câu trả lời:
Tôi yêu cầu ứng viên thiết kế một giải pháp cho một vấn đề tôi thực sự gặp phải trong công việc hàng ngày. Làm như vậy, tôi cố gắng tạo một hộp thoại giữa tôi và ứng viên. Tôi cố gắng thảo luận về thiết kế mà anh ta đang xây dựng như thể tôi chưa bao giờ nghĩ về vấn đề trước đây.
Những gì tôi cố gắng đánh giá là liệu chúng tôi có thể hiểu nhau hay không, và liệu chúng tôi có thể nói về một vấn đề kỹ thuật mà không nhầm lẫn.
(Dành cho nhà phát triển máy tính để bàn java)
Thiết kế API để xử lý lịch sử điều hướng của trình duyệt web (trang trước, trang tiếp theo, liệt kê 10 trang trước) và có thể sử dụng lại ở nhiều phần của ứng dụng (ở đây tôi đưa ra ví dụ cụ thể trong ứng dụng của chúng tôi). Sau đó, phác thảo một thực hiện.
Tôi thích cái này, vì nó đủ đơn giản, dễ minh họa, nó có thể được giải quyết từng bước (thêm các hành vi bổ sung mà không phá vỡ mọi thứ), nó cho phép nói về các trường hợp cạnh và xử lý lỗi, và nó cũng cho phép nói về dữ liệu cấu trúc.
Tôi đã tìm thấy điều này cực kỳ sáng sủa khi phỏng vấn ứng viên và lọc ra những người không có kinh doanh ở đó. Nó tương tự như phức tạp với Fizz Buzz, nhưng tập trung vào các kỹ năng cơ sở dữ liệu.
Assuming the following basic table structure
Documents (DocID, DocDate)
Keywords (KeyWordID, KeyWord)
DocumentKeywords (DocID,KeywordID)
Write a query to return the following:
Part 1: Documents with a DocDate after 4/1/1995
Part 2: Documents that contain the keyword "Blue"
Part 3: Documents that contain the either the keyword "Blue" or "Yellow"
Part 4: Documents that contain the both the keywords "Blue" and "Yellow"
Tôi cho phép họ viết nó trong bất kỳ biến thể SQL nào họ muốn và không quá cầu kỳ về các vấn đề cú pháp nhỏ. Tôi chủ yếu muốn biết rằng họ hiểu các khái niệm DB quan hệ cơ bản.
Hầu hết các ứng viên có thể vượt qua phần 3 mà không có vấn đề gì cả. Bạn sẽ ngạc nhiên khi nhiều người nghĩ rằng câu trả lời cho phần 4 chỉ là thay đổi toán tử từ OR thành AND trong mệnh đề where.
"Vẽ cho tôi trên bảng trắng thiết kế của dự án cuối cùng mà bạn đã làm, mà không tiết lộ cho tôi bất kỳ chi tiết nhạy cảm nào."
Thực hiện strcpy
, strcmp
và bạn bè.
atoi()
.
strdup()
.
strrev()
hoặc thực hiện chức năng đảo ngược chuỗi. Giải pháp bảng trắng của tôi đã gây ấn tượng với họ và tôi đang làm việc.
Yêu thích của tôi bao gồm một vài môn học là đếm số lượng nút trong cây nhị phân được cung cấp giao diện (trong C #):
public interface IBinaryTree<T>
{
IBinaryTree<T> Left
{
get;
}
IBinaryTree<T> Right
{
get;
}
T Data
{
get;
}
// Other properties and methods not germane to this problem.
}
và chỉ để giải trí, đây là cách thực hiện, mặc dù người được phỏng vấn không cần phải thấy điều này.
public sealed class BinaryTree<T> : IBinaryTree<T>
{
private readonly IBinaryTree<T> left;
private readonly IBinaryTree<T> right;
private readonly T data;
public BinaryTree(
IBinaryTree<T> left,
IBinaryTree<T> right,
T data)
{
this.left = left;
this.right = right;
this.data = data;
}
public IBinaryTree<T> Left
{
get
{
return this.left;
}
}
public IBinaryTree<T> Right
{
get
{
return this.right;
}
}
public T Data
{
get
{
return this.data;
}
}
// Other properties and methods not germane to this problem.
}
và lớp trợ lý:
public static class BinaryTreeNodeCounter
{
public static int CountNodes<T>(this IBinaryTree<T> tree)
{
// TODO: What goes here?
}
}
Giải pháp tôi muốn thấy là đây:
public static class BinaryTreeNodeCounter
{
public static int CountNodes<T>(this IBinaryTree<T> tree)
{
return tree == null
? 0
: 1 + tree.Left.CountNodes() + tree.Right.CountNodes();
}
}
Vì nó thể hiện kiến thức về:
Hai câu hỏi đã gợi ra những cuộc thảo luận thú vị về bảng trắng đối với tôi là
Họ bắt đầu đơn giản và sau đó trở nên phức tạp hơn.
Tôi không thích sử dụng câu đố hay câu hỏi thiết kế làm câu hỏi bảng trắng. Tôi thích các câu hỏi đơn giản, đơn giản, kiểm tra khả năng viết một số mã của ứng viên. Yêu thích của tôi là:
1) Viết hàm để đảo ngược danh sách liên kết đơn. (Phải mất một lúc trước khi họ nhận ra họ cần 3 con trỏ.)
2) Cho một cây nhị phân, tìm độ sâu của cây nhị phân. (Câu hỏi này kiểm tra khả năng viết mã đệ quy của họ. Hãy cho tôi kiểm tra xem họ có còn trường hợp cơ sở không.)
3) Viết thủ tục tìm kiếm nhị phân một mảng các số nguyên. (Giống như Jon Bentley nói (trong Lập trình Ngọc trai), nhiều người có xu hướng mắc lỗi khi viết tìm kiếm nhị phân. Sau đó, người ta có thể theo dõi với việc tìm lỗi, viết trường hợp kiểm tra, chạy mã, v.v.)
Chúng tôi đã sử dụng điều này tại một công ty tôi làm việc.
Chúng tôi đưa cho thí sinh một mảnh giấy dùng để theo dõi thời gian. Đó là một bảng thời gian thực sự được sử dụng bởi một hoặc các bộ phận của chúng tôi. Chúng tôi đã yêu cầu ứng viên hướng dẫn chúng tôi trong quá trình thiết kế để tạo ra một công cụ theo dõi thời gian tốt hơn. Không có ranh giới, không nói ngôn ngữ nào, v.v., chỉ muốn xem ứng viên giỏi đến mức nào trong "vòng đời đầy đủ". Nó đã cho chúng tôi một cái nhìn sâu sắc thực sự về cách họ thu thập các yêu cầu. Cách họ cấu trúc các bảng cơ sở dữ liệu, loại UI nào họ có thể làm. Kỹ năng giao tiếp rõ ràng là cần thiết cho nhiệm vụ này. Nó thường được thực hiện trong một căn phòng có nhiều bảng trắng lớn và kéo dài tới 2 giờ.
Chúng tôi đã thuê một số người sử dụng quy trình này và nếu họ thực sự làm tốt nhiệm vụ thì họ đã làm rất tốt cho chúng tôi. Nếu họ là những người ngoài lề và chúng tôi quyết định thuê họ bằng mọi cách (chủ đề riêng biệt) thì họ là những lập trình viên cận biên.
Tôi sử dụng một vấn đề có liên quan đến lĩnh vực lập trình của tôi.
Nếu tôi phát triển các ứng dụng web, tôi muốn xem làm thế nào họ có thể tạo ra một biểu mẫu web để xóa các bản ghi và cách tiếp cận họ có thể thực hiện để xóa bản ghi khỏi cơ sở dữ liệu, ví dụ. Điều này cho tôi biết nếu họ biết các nguyên tắc cơ sở dữ liệu cơ bản, cách họ tương tác với người dùng để xác minh xóa và nếu họ biết xóa mềm là gì.
Tôi không có một yêu thích. Vấn đề tôi chọn sẽ thay đổi rất nhiều tùy thuộc vào công việc.
Tôi không quan tâm liệu họ có thể giải quyết vấn đề hoàn toàn hay không trong một cuộc phỏng vấn, họ sử dụng công nghệ và ngôn ngữ nào, hoặc mã của họ trông như thế nào trên bảng trắng. Tôi đang tìm kiếm một mô hình suy nghĩ; Tôi muốn xem họ có biết suy nghĩ và giải quyết vấn đề không.
Yêu thích của tôi là một người bạn của tôi sử dụng.
Viết cho tôi một hàm để tạo / in / lưu trữ các số nguyên tố "n" đầu tiên và sau đó giải thích cách thức hoạt động và hiệu quả của nó.
Nó hoạt động tốt bởi vì:
Đó là một câu hỏi thuật toán vì vậy nó đòi hỏi người được phỏng vấn phải có khả năng suy nghĩ và sau đó giải thích suy nghĩ của họ - để bạn có thể thấy bộ não của họ hoạt động như thế nào.
Đó là ngôn ngữ độc lập.
Hầu như không ai hiểu đúng hoàn toàn (thông thường trường hợp cạnh họ bỏ lỡ (1 hoặc 2 bình thường) hoặc họ không xử lý các số âm, vì vậy bạn có thể xem cách họ xử lý lỗi và được thông báo rằng họ đã sai.
Hầu hết làm điều đó như một cái sàng đơn giản nhưng rất chậm (ví dụ 80% mọi người sẽ kiểm tra n là số nguyên tố bằng cách chia n cho tất cả các số nguyên nhỏ hơn n), cung cấp cho bạn nhiều phạm vi cho các cuộc hội thoại về cách họ có thể cải thiện thuật toán dựa trên đánh đổi không gian / thời gian, ví dụ: "tại sao bạn chia một số cho 4 nếu bạn đã biết nó không chia hết cho 2?" hoặc "Bạn đã làm việc rằng bạn chỉ cần chia cho tất cả các số nguyên tố nhỏ hơn sqrt (n), nhưng điều đó đòi hỏi bạn phải lưu trữ những số đó ở đâu đó, vậy ý nghĩa của điều đó là gì?")
Không cần họ phải trả lời đúng. Nếu ai đó có thể suy nghĩ và giải thích suy nghĩ của họ thì họ sẽ đi một chặng đường dài để trở thành một ứng cử viên sáng giá.
Một cái gì đó gọi là aff_z, một phần trong các bài kiểm tra C của trường kỹ thuật của tôi và đã được sử dụng như một bài kiểm tra "giả" để học sinh thất bại khi trở về từ kỳ nghỉ (hệ thống chấm điểm của chúng tôi ngụ ý rằng việc không làm bài kiểm tra đã dừng việc chấm bài làm mất hiệu lực toàn bộ bài kiểm tra của bạn. Buộc bạn phải chú ý đến các chi tiết biến thái). Tôi đã tái sử dụng nó một hoặc hai lần trong các cuộc phỏng vấn.
Dù sao thì ... tôi đã quên công thức chính xác nhưng nó giống như thế này ...
Write a function taking a single char parameter named c and returning nothing (void).
You function must satisfy the following requirements:
- if c is bigger or equal to 0, then print 'z' to standard output
- if c is stricly smaller than 0 , then print 'z' to standard output
- in any other case, print the letter 'z' to standard output
Điều đáng buồn là không chỉ một số sinh viên sẽ đưa ra các giải pháp cực kỳ phức tạp khi câu trả lời khá rõ ràng, mà một số thậm chí còn thất bại.
Và tin hay không, nó cũng đã xảy ra trong các cuộc phỏng vấn.
Điều hành nó trong các cuộc phỏng vấn khá thú vị, vì một số ứng viên sẽ bắt đầu viết các nhánh có thể và sau đó nhận ra điều gì là sai (rõ ràng, nếu bạn chỉ hỏi họ bằng miệng, điều đó khá dễ hiểu khi họ nói như vậy ... nhưng nếu bạn viết nó ra, tôi thấy khó hiểu ...)
Thật ngớ ngẩn, nhưng tôi đoán đó là một sàng lọc tối giản (tương tự, khi tuyển dụng các lập trình viên JS, tôi luôn hỏi làm thế nào để khai báo một biến, và sau đó tùy thuộc vào câu trả lời của họ có hay không sử dụng var có làm thay đổi gì không. thành thật.)
variablename = variablevalue;
" , trong khi những người giỏi sẽ chỉ cười trên điện thoại hoặc gặp trực tiếp và nói trực tiếp với tôi về sự khác biệt sẽ xảy ra với hoặc dí dỏm var
).
Nó thực sự phụ thuộc vào những gì bạn đang tìm kiếm, vì một tổ chức thực hiện nhiều công việc web động liên quan đến hình ảnh, tôi có xu hướng muốn hỏi một câu hỏi hình học phù hợp với công việc. Trong mọi trường hợp, tôi có xu hướng hỏi một câu hỏi hình học, vì tôi thấy đây là một bài kiểm tra toán tốt, đẹp và trực quan và có thể cho thấy một ứng viên có khả năng trình bày trực quan công việc và phương pháp làm việc của họ thông qua một vấn đề.
Đối với các ứng viên nâng cao, thỉnh thoảng tôi đưa ra câu hỏi sau:
Hình ảnh này cho thấy một mặt trăng lưỡi liềm. Chiều rộng của lưỡi liềm từ B đến D là 9cm và giữa E và F, 5cm. C là tâm của đường tròn lớn hơn.
a) Hãy tính diện tích của lưỡi liềm.
b) Mô tả các tính toán cần thiết để thay đổi kích thước hình ảnh để phù hợp với vòng tròn bên trong từ bất kỳ kích thước cụ thể nào và đặt nó trong vòng tròn nếu biết điểm trung tâm.
Đối với một câu hỏi dễ hơn, tôi thường đưa ra cùng một loại câu hỏi, nhưng sử dụng ví dụ "hình vuông trong một hình tròn trong hình vuông". Mặc dù điều này rất dễ dàng, vì vậy tôi mong đợi đại số hoàn hảo về nó.
Hơn thế nữa, tôi có xu hướng yêu cầu họ đưa ra một thuật toán để tạo ra tất cả các kết hợp của một tập dữ liệu có độ dài thay đổi.
Các câu trả lời hay nhất của FizzBuzz tôi từng thấy là:
Máy chủ SQL 2008
;WITH mil AS (
SELECT TOP 100 ROW_NUMBER() OVER ( ORDER BY c.column_id ) [n]
FROM master.sys.all_columns as c
CROSS JOIN master.sys.all_columns as c2
)
SELECT CASE WHEN n % 3 = 0 THEN
CASE WHEN n % 5 = 0 THEN 'FizzBuzz' ELSE 'Fizz' END
WHEN n % 5 = 0 THEN 'Buzz'
ELSE CAST(n AS char(6))
END + CHAR(13)
FROM mil
C # (đơn giản)
foreach (int number in Enumerable.Range(1, 100))
{
bool isDivisibleBy3 = (number % 3) == 0;
bool isDivisibleBy5 = (number % 5) == 0;
if (isDivisibleBy3)
Console.Write("Fizz");
if (isDivisibleBy5)
Console.Write("Buzz");
if (!isDivisibleBy3 && !isDivisibleBy5)
Console.Write(number);
Console.WriteLine();
}
C # (thông minh)
Enumerable
.Range(1, 100)
.Select(i =>
i % 15 == 0 ? "FizzBuzz" :
i % 5 == 0 ? "Buzz" :
i % 3 == 0 ? "Fizz" :
i.ToString())
.ToList()
.ForEach(s => Console.WriteLine(s));
Tôi tìm kiếm một vài điều trong các ứng cử viên mà tôi đã phỏng vấn. Vì lý do tôi không thể mô tả trực tuyến, chúng tôi nhận được các ứng cử viên khá nghèo và tôi đã mong đợi điều đó, vì vậy tôi khá dễ dàng với họ. Thậm chí, tôi vẫn tìm:
Nhận thức về thiết kế.
"Hiển thị cho tôi cấu trúc bảng cho chương trình sổ địa chỉ có Danh bạ có tên và họ có thể có nhiều Số điện thoại với mô tả về số (ô / nhà / cơ quan / v.v.)"
Tôi không tìm kiếm một sơ đồ đặc tả UML 2.0 ở đây, một sơ đồ bong bóng đơn giản ở đây là tốt. Miễn là nó hợp lý.
Kiến thức làm việc với cơ sở dữ liệu (ví dụ: SQL)
Kiến thức về kiểm tra
Giả sử một phương thức có chữ ký public IEnumerable<PhoneNumber> GetPhoneNumbers(string lastName)
tồn tại trả về kết quả truy vấn của bạn từ trước đó. Giả sử rằng nếu bạn truyền null vào phương thức, nó sẽ ném NullReferenceException. Viết một bài kiểm tra để chứng minh chức năng này.
Viết bài kiểm tra chứng minh rằng GetPhoneNumbers sẽ trả về số điện thoại nhà là (123)456-7890 cho người có tên cuối cùng là "smith".
Kiến thức về cách viết một số mã
Thực hiện một phương pháp sẽ đáp ứng các yêu cầu của các bài kiểm tra bạn đã viết.
Xem xét số lượng và chất lượng của các ứng viên chúng tôi đã nhận được, tôi đã phỏng vấn tất cả những người từng áp dụng nghiêm túc. Tôi đã thuê không ai.
Tôi thường để họ phác thảo sơ đồ khối của hệ thống cuối cùng mà họ đã làm việc, hỏi về mối quan hệ giữa các khối và hơn là để họ giải thích về khối mà họ đang làm việc / phụ trách. Bạn có thể học được nhiều điều từ bài tập này, như cách người ta nhìn xa hơn phạm vi nhỏ của anh ta, điều quan trọng với anh ta là biết anh ta đang diễn ở đâu, bạn cũng có thể tìm hiểu về vai trò của mình, đó là chìa khóa hay phụ vai trò.
Viết một thuật toán cho bài toán sau: Cho một số n , xuất ra tổng số cây nhị phân (duy nhất) có n nút.
Do đó, với n = 0 và n = 1, câu trả lời là 1. Với n = 2, bạn có 2: nút gốc, và sau đó nút thứ hai ở bên trái hoặc bên phải.
Bạn có thể hiểu rõ hơn về các kỹ thuật thiết kế và để xem liệu họ có nghĩ đến đệ quy hoặc ghi nhớ hoặc giải pháp lập trình động hay không.
[Xem thêm cuộc thảo luận StackOverflow này để biết trường hợp cây tìm kiếm nhị phân có liên quan, nhưng khác nhau.]
Nếu tôi phỏng vấn một nhà phát triển phần mềm, tôi sẽ yêu cầu anh ta thiết kế một phần mềm và mô tả các yêu cầu phần cứng để xóa các mục trùng lặp khỏi một tệp lớn tùy ý chứa tên đầy đủ trên mỗi dòng. Tôi để lại một số phần của mô tả vấn đề mơ hồ có chủ đích. Sau đó, tôi thách thức anh ta xem anh ta có hiểu phân tích và làm rõ các yêu cầu, sự đánh đổi khác nhau, cấu trúc dữ liệu và thuật toán, I / O (lưu trữ thứ cấp), công nghệ phần mềm và phần cứng, khả năng mở rộng, v.v.
Tôi nghĩ rằng đây là một vấn đề nhỏ nhưng đầy thách thức, tiết lộ kiến thức và khả năng của ứng viên trong nhiều lĩnh vực điện toán.
Implement function/method(on c/c++/c# whatever), which calculates n-th item of Fibonacci sequence
Nhiều kẻ có thể mắc kẹt về điều này. Nếu một số giải pháp được đưa ra - thường thì nó sử dụng đệ quy. Sau đó:
Implement the same via 'for'-loop
Không thể cho bạn biết, có bao nhiêu nghiên cứu sinh không hoàn thành cả hai nhiệm vụ - 50% ứng cử viên.
Đó là lý do tại sao tôi thích nó :)
fib(n)=round(power(PHI,n)/SQRT5)
. PHI và SQRT5 là các hằng số biểu thị tỷ lệ vàng (1.618 ...) và căn bậc hai của 5, tương ứng.
Đối với cơ sở dữ liệu tôi đi với:
Bảng: Điều Tên ID 1 sừng Vankin 2 Hoos-Foos 3 Hoos-Foos 4 cú sút nóng 5 Mặt Marvin O'Gravel Balloon 6 Snimm 7 Mặt Marvin O'Gravel Balloon 8 Mặt Marvin O'Gravel Balloon 9 Dave
Viết cho tôi một số SQL sẽ sao chép lại một bảng như thế này dựa trên tên (và tôi không quan tâm ID nào tôi nhận được nhưng cái nào được trả về phải hợp lệ cho tên đó). Vì vậy, bảng một khi SQL chính xác đã được áp dụng cho nó sẽ hiển thị một cái gì đó như:
Bảng: Điều Tên ID 1 sừng Vankin 2 Hoos-Foos 4 cú sút nóng 5 Mặt Marvin O'Gravel Balloon 6 Snimm 9 Dave
Tôi thích nó bởi vì:
(Đây là nơi tôi thấy rằng có một số cách hoàn toàn tầm thường để làm điều này và tôi đã quá phức tạp trong suốt những năm qua).
SELECT min(ID), Name FROM Things GROUP BY Name
sẽ hoạt động, phải không?
HAVING count(Name) > 1
, nhưng sau đó tôi đoán câu trả lời mẫu của bạn nên bỏ qua Bodkin Van Horn, Hot Shot, Snimm và Dave.
DELETE FROM Things WHERE ID NOT IN (SELECT MIN(ID) FROM Things GROUP BY Name)
. Bạn có một giải pháp ưa thích?
Vấn đề bảng trắng C ++ yêu thích của tôi là để ứng viên thực hiện
Vector3 a(1, 0, 0), b(0, 1, 0); // Mathematical 3D vectors
double c = 7.0;
double d = a * c;
Vector3 e = a * b;
Từ đây tôi có thể học
Làm thế nào bạn sẽ đại diện cho một bộ bài 52 tiêu chuẩn? Bất kỳ ngôn ngữ lập trình là tốt. Làm thế nào bạn sẽ xáo trộn các thẻ?
Yêu thích của tôi là bắt đầu với việc hỏi nguyên mẫu của printf. Sau đó được cung cấp một printc API cấp thấp (char c), sẽ in một ký tự, thực hiện printf. Cung cấp tất cả các loại phản hồi thú vị như ngăn xếp là một phần của CPU. Như bạn có thể đoán tôi đến từ nền C và nhúng.
varargs()
hoặc một số chức năng như thế. Tôi có đúng không? Tôi chỉ làm điều đó một lần để nói rằng tôi đã làm điều đó một thời gian trước đây.
Bạn có một cái bát với 200 con cá trong đó. Trong số những con cá này 99% không phải là cá bảy màu. Bạn nên loại bỏ bao nhiêu con cá để 2% số còn lại là cá bảy màu. Chỉ ra công việc của bạn.
Đây là về các yêu cầu khó hiểu. Người ta nói cách này để thay đổi quan điểm nhiều lần trong cùng một câu hỏi. Nó có nghĩa là để xem nếu họ có thể tìm ra những gì đang thực sự xảy ra.
Bạn sẽ ngạc nhiên khi có nhiều người hiểu sai.
answer = 100
. [Giả sử bạn có thể chọn lọc những con cá khác. Nếu loại bỏ cá bảy màu, có những câu trả lời khác.] Câu hỏi hay, bạn sẽ ngạc nhiên khi có ít người xử lý tốt điều đó, mặc dù đó là trò chơi trẻ con dành cho lập trình viên.
Tôi có một vài mục yêu thích, nhưng đây là một cặp đôi gần như luôn luôn xuất hiện. Hầu hết thời gian tôi đang thực hiện các cuộc phỏng vấn kỹ thuật vòng cuối (C ++) để ưu tiên các câu hỏi dài hơn và cởi mở hơn dẫn đến các lĩnh vực mới quan tâm. Không có câu trả lời "đúng", chỉ là mở đầu cho cuộc trò chuyện khác.
1) Thực hiện một con trỏ chia sẻ cơ bản, giải thích về những thiếu sót so với các con trỏ được chia sẻ của tr1 hoặc boost trong việc triển khai, cách sử dụng nó, v.v.
2) Một đánh giá mã. Đối với những người có kinh nghiệm, chúng tôi hy vọng họ có thể tự tin xem xét một số mã được cung cấp cho các vấn đề thiết kế, lỗi, nỗi kinh hoàng mã hóa và các vấn đề về khả năng bảo trì tiềm năng. Ngoài ra, tất nhiên, làm thế nào họ sẽ sửa nó; và đôi khi họ sẽ gửi thông điệp đó cho nhà phát triển cơ sở mà họ đang bắn hạ.
Một câu hỏi mà tôi đã sử dụng kể từ khi nó được sử dụng cho tôi là:
Viết hàm để in tất cả các số từ 1 đến 100.
Một phần lớn lý do mà tôi đã sử dụng nó là do thực tế là sau đó bạn có thể đưa giải pháp đó và di chuyển theo nhiều hướng khác nhau:
Làm thế nào bạn có thể sửa đổi chức năng để in tất cả các số từ 1 đến 1000, 10000 hoặc n ?
Câu trả lời của họ cho những câu hỏi này có thể cung cấp cho bạn cái nhìn sâu sắc về cách họ đáp ứng với các yêu cầu thay đổi cũng như liệu họ có thể nhận ra các cân nhắc về hiệu suất. Một ứng cử viên mạnh có thể trả lời bằng một câu hỏi liên quan đến chức năng cần thiết cho mức độ thường xuyên được gọi.
Di chuyển theo một hướng khác:
Làm thế nào bạn sẽ thay đổi mọi thứ nếu bạn biết chức năng này sẽ được gọi nhiều lần trong một phút và hiệu suất là một mối quan tâm?
Tôi sử dụng điều này như một cách để kiểm tra suy nghĩ bên của họ. Vì việc tính các số nguyên tố có thể chậm khi giá trị tối đa trở nên lớn hơn nên đôi khi có ý nghĩa hơn khi chỉ sử dụng một số loại bảng tra cứu được tính toán hoặc tính toán trước được điều chỉnh trên cơ sở vấn đề bạn đang cố gắng giải quyết.
Đây là một điều để kích thích một số suy nghĩ - Nó đơn giản, liên quan đến một chút toán học và kiểm tra kiến thức của ứng viên về thiết kế máy tính cơ bản (tràn, biểu diễn số, v.v.):
Viết chương trình (hoặc thủ tục) lấy một cặp số nguyên X, Y làm đầu vào và xác định xem X * Y có chia hết cho 10. LƯU Ý QUAN TRỌNG: X và Y có thể đủ lớn để X * Y tràn vào loại số nguyên lớn nhất hiện có trên máy của bạn.
T_BOOL MultipleOfTen(int x, int y)
{
return((x%2==0 || y%2==0) && (x%5==0 || y%5==0));
}
Điền vào phương thức sau: PS Chế độ của một số là số (trong danh sách) có nhiều lần xuất hiện nhất.
public int getMode(List<Integer> numberList) {
}
Đây là để xem effecient là mã của bạn.
Làm thế nào bạn đại diện cho một ma trận dự phòng tương đối lớn ... giả sử 1000x1000 nhưng có nhiều nhất 100 mục nhập khác không?