Tôi chưa được hỏi câu hỏi này.
Thoạt nhìn, có vẻ như một trong số đó là "loại bỏ những kẻ ngốc không đủ năng lực rõ ràng càng sớm càng tốt để bỏ thời gian phỏng vấn có giá trị" loại câu hỏi.
Nhưng nếu bạn xem xét kỹ hơn, thực tế có một số nội dung thú vị trong đó. Vì vậy, nếu tôi là một hỏi câu hỏi đó, đây là những gì tôi sẽ tìm kiếm
- Câu hỏi đó rõ ràng là ngu ngốc, vì đã có là một hàm trong thư viện chuẩn ECMAScript mà không chính xác đó. Và tôi muốn người được phỏng vấn cho biết tôi rằng câu hỏi là ngu ngốc, bởi vì nếu không thì họ là một trong số đó). chức năng tồn tại. Nó cũng rõ ràng là một vấn đề phân tích cú pháp, và nó là thú vị để xem liệu người được phỏng vấn tiếp cận nó như là một vấn đề hacking chuỗi hoặc một vấn đề phân tích cú pháp chính thức và bao nhiêu chi phí hoặc cách tiếp cận tạo ra. Trong trường hợp đặc biệt này, tôi tin rằng việc hack chuỗi là cách tiếp cận đúng, nhưng nó vẫn dẫn đến một câu hỏi tiếp theo tuyệt vời: "Bây giờ làm điều tương tự với trình phân tích cú pháp đệ quy". Bất kỳ lập trình viên nào cũng có thể phác họa trình phân tích cú pháp đệ quy cho vấn đề này trong vòng vài phút.
- Cuối cùng nhưng không kém phần quan trọng, điều này rõ ràng là gấp một lần so với các ký tự của chuỗi. Bây giờ, tôi sẽ không nhất thiết phải mong đợi một lập trình viên mới để phát hiện ra lần này ngay lập tức, nhưng nếu tôi gợi ý rằng có một nếp gấp trong đó, họ có thể phát hiện ra nó và viết lại giải pháp của họ dưới dạng gấp .
- Và tất nhiên, bạn có thể đánh giá tất cả những phẩm chất chung mà loại câu hỏi này cho phép bạn: người phỏng vấn có dừng lại và suy nghĩ về vấn đề này hay anh ta bắt đầu hack. Anh ấy có bắt đầu với các yêu cầu, tài liệu, đặc điểm kỹ thuật, ví dụ, kiểm tra hoặc mã hay không. Liệu anh ta có yêu cầu làm rõ các trường hợp góc (như những gì xảy ra với chuỗi rỗng không, điều gì sẽ xảy ra với một chuỗi chỉ chứa dấu trừ và không có gì khác, khoảng trống, là các chuỗi được đảm bảo là các số nguyên được định dạng tốt, là số không âm một số nguyên được định dạng tốt). Anh ta có thường xuyên sử dụng tập hợp con nghiêm ngặt của ES5 không. Anh ấy có viết mã có thể đọc được không.Anh ta viết
jslint
-friendly đang
Dưới đây là một ví dụ về việc giải quyết vấn đề với một lần (mà trong ECMAScript được gọi reduce
):
"use strict";
function toInteger(s) {
return s.split('').reverse().reduce(function (n, c, i) {
if (c === '-') return -n;
return n + (c.charCodeAt(0) - 48) * Math.pow(10, i);
}, 0);
}
Và đây là một phân tích cú pháp đệ quy-gốc đơn giản mà xây dựng tăng giá trị khi đang bay:
"use strict";
function toInteger(s) {
var input,
output = 0,
sign = 1,
lookahead = function() {
return input.charAt(0);
},
consume = function() {
var res = input.slice(0, 1);
input = input.slice(1, input.length);
return res;
},
isDigit = function (c) {
return /[0-9]/.test(c);
},
signParser = function() {
if (lookahead() === '-') {
sign *= -1;
consume();
}
},
digitParser = function() {
if (!isDigit(lookahead())) return false;
output *= 10;
output += (consume().charCodeAt(0) - 48);
return true;
},
numberParser = function() {
signParser();
while (digitParser());
};
input = s;
numberParser();
if (!input.length === 0) return false;
output *= sign;
return output;
}
Như mọi khi với loại câu hỏi phỏng vấn này, không ai có thể kỳ vọng người được phỏng vấn chỉ viết những chức năng đó xuống trên bảng trắng. Đặc biệt là trình phân tích cú pháp đệ quy. Nhưng IMHO, bất kỳ ai nên đều có thể phác họa ra chức năng sẽ trông như thế nào. Đặc biệt, một trong những nét đẹp của trình phân tích cú pháp đệ quy là chuyển đổi trực tiếp ngữ pháp tự do thành ngữ thành một tập hợp các hàm phân tích cú pháp, và người được phỏng vấn có thể giải thích loại chức năng phân tích cú pháp tương ứng với loại cấu trúc ngữ pháp nào.
phew, có nghĩa là rất nhiều thứ mà bạn có thể thoát ra khỏi một câu hỏi đơn giản như vậy!
'tmpStr = tmpStr.substr (0, tmpStr.length-1);' có vẻ hơi không cần thiết nếu bạn cũng đảo ngược qua 'pos'. –
Nó cũng dường như không xử lý các số âm. –
cảm ơn sự phê bình !! –