Các câu hỏi thường gặp về MongoDB của các thành viên chuyên gia có kinh nghiệm về MongoDB Những câu hỏi và câu trả lời này sẽ giúp bạn củng cố các kỹ năng kỹ thuật của mình, chuẩn bị cho bài kiểm tra công việc mới và nhanh chóng sửa đổi các khái niệm
Câu hỏi phỏng vấn MongoDB từ JavaTPointcom
Các câu hỏi phỏng vấn MongoDB đã được thiết kế đặc biệt để giúp bạn làm quen với bản chất của các câu hỏi mà bạn có thể gặp phải trong cuộc phỏng vấn về chủ đề MongoDB
Điều này nghe có vẻ tầm thường và trên thực tế, nó không quan trọng với ECMAscript 6 giới thiệu một hàm
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
0 mới cho mục đích chính xác này. Tuy nhiên, trước ECMAScript 6, điều này phức tạp hơn một chút, vì không cung cấp phương thức tương đương với phương thức function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
0Vấn đề là, trong đặc tả ECMAScript, các số nguyên chỉ tồn tại về mặt khái niệm; . e. , các giá trị số luôn được lưu trữ dưới dạng giá trị dấu phẩy động
Với ý nghĩ đó, giải pháp tiền ECMAScript-6 đơn giản và rõ ràng nhất [cũng đủ mạnh để trả về
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
2 ngay cả khi một giá trị không phải là số như chuỗi hoặc function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
0 được truyền cho hàm] sẽ là cách sử dụng sau đây của function isInteger[x] { return [x ^ 0] === x; }
Giải pháp sau đây cũng sẽ hoạt động, mặc dù không thanh lịch như giải pháp trên
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
Hàm sau [hoặc với
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
1 hoặc function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
2 thay cho function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
3] cũng có vẻ hữu ích, nhưng kết quả không hoàn toàn giống với hai hàm trênfunction isInteger[x] { return Math.round[x] === x; }
Sự khác biệt là, các giải pháp dựa trên
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
4 này trả về function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
5 cho function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
6 và function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
7, trong khi các giải pháp khác [và đặc biệt là function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
0 của ES6] trả về function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
2Một giải pháp không chính xác khá phổ biến khác là như sau
function isInteger[x] { return [x ^ 0] === x; }
1Mặc dù cách tiếp cận dựa trên
function isInteger[x] { return Math.round[x] === x; }
0 này sẽ hoạt động tốt với nhiều giá trị của function isInteger[x] { return Math.round[x] === x; }
1, nhưng khi function isInteger[x] { return Math.round[x] === x; }
1 trở nên khá lớn, nó sẽ không hoạt động bình thường. Vấn đề là function isInteger[x] { return Math.round[x] === x; }
3 buộc tham số đầu tiên của nó thành một chuỗi trước khi phân tích các chữ số. Do đó, khi số trở nên đủ lớn, biểu diễn chuỗi của nó sẽ được trình bày ở dạng hàm mũ [e. g. , function isInteger[x] { return Math.round[x] === x; }
4]. Theo đó, sau đó, function isInteger[x] { return Math.round[x] === x; }
3 sẽ cố gắng phân tích cú pháp function isInteger[x] { return Math.round[x] === x; }
4, nhưng sẽ ngừng phân tích cú pháp khi đến ký tự function isInteger[x] { return Math.round[x] === x; }
7 và do đó sẽ trả về giá trị là function isInteger[x] { return Math.round[x] === x; }
8. Quan sát JavaScript là ngôn ngữ chính thức của tất cả các trình duyệt web hiện đại. Như vậy, các câu hỏi JavaScript xuất hiện trong tất cả các loại phỏng vấn nhà phát triển
Bài viết này không nói về các thư viện JavaScript mới nhất, các phương pháp phát triển phổ biến hoặc bất kỳ. Thay vào đó, đó là về 3 điều thường xuất hiện trong các cuộc phỏng vấn khi thảo luận về JavaScript. Bản thân tôi đã được hỏi những câu hỏi này và bạn bè của tôi đã nói với tôi rằng họ cũng đã được hỏi như vậy
Tất nhiên đây không phải là 3 điều duy nhất bạn nên học trước khi phỏng vấn JavaScript — có một số bạn có thể chuẩn bị tốt hơn cho cuộc phỏng vấn sắp tới — nhưng dưới đây là 3 câu hỏi mà người phỏng vấn có thể hỏi để đánh giá mức độ bạn biết và hiểu về JavaScript
Vậy hãy bắt đầu. Lưu ý rằng chúng tôi sẽ sử dụng vanilla JavaScript trong các ví dụ bên dưới, vì người phỏng vấn của bạn thường muốn xem bạn hiểu JavaScript và DOM đến mức nào mà không cần sự trợ giúp của các thư viện như jQuery
Câu hỏi 1. ủy quyền sự kiện
Khi xây dựng một ứng dụng, đôi khi bạn cần đính kèm trình xử lý sự kiện vào các nút, văn bản hoặc hình ảnh trên trang để thực hiện một số hành động khi người dùng tương tác với phần tử đó.
Nếu chúng tôi lấy một danh sách việc cần làm đơn giản làm ví dụ, người phỏng vấn có thể cho bạn biết rằng họ muốn một hành động xảy ra khi người dùng nhấp vào một trong các mục trong danh sách. Và họ muốn bạn triển khai chức năng này trong JavaScript với giả sử mã HTML sau
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
1Bạn có thể muốn làm điều gì đó như sau để đính kèm trình xử lý sự kiện vào các phần tử
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
2Mặc dù điều này hoạt động về mặt kỹ thuật, nhưng vấn đề là bạn đang đính kèm một trình xử lý sự kiện vào từng mục riêng lẻ. Điều này tốt cho 4 yếu tố, nhưng nếu ai đó thêm 10.000 mục [họ có thể có rất nhiều việc phải làm] vào danh sách việc cần làm của họ thì sao? . Điều này không hiệu quả lắm
Trong một cuộc phỏng vấn, tốt nhất trước tiên bạn nên hỏi người phỏng vấn số lượng phần tử tối đa mà người dùng có thể nhập là bao nhiêu. Ví dụ: nếu nó không bao giờ có thể lớn hơn 10, thì đoạn mã trên sẽ hoạt động tốt. Nhưng nếu không có giới hạn về số lượng mục mà người dùng có thể nhập, thì bạn sẽ muốn sử dụng một giải pháp hiệu quả hơn
Nếu ứng dụng của bạn có thể kết thúc với hàng trăm trình xử lý sự kiện, thì giải pháp hiệu quả hơn là thực sự đính kèm một trình xử lý sự kiện vào toàn bộ vùng chứa và sau đó có thể truy cập từng mục khi nó thực sự được nhấp vào. Điều này được gọi là ủy quyền sự kiện và nó hiệu quả hơn nhiều so với việc đính kèm các trình xử lý sự kiện riêng biệt
Đây là mã cho ủy quyền sự kiện
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
3Câu hỏi 2. Sử dụng một bao đóng trong một vòng lặp
Câu kết đôi khi được đưa ra trong một cuộc phỏng vấn để người phỏng vấn có thể đánh giá mức độ quen thuộc của bạn với ngôn ngữ và liệu bạn có biết khi nào nên thực hiện câu kết
Về cơ bản, một bao đóng là khi một biến nằm ngoài phạm vi của nó. Bao đóng có thể được sử dụng cho những thứ như và tạo. Một câu hỏi phỏng vấn phổ biến liên quan đến việc sử dụng bao đóng là như thế này
Viết hàm lặp qua danh sách các số nguyên và in chỉ số của từng phần tử sau 3 giây trì hoãn
Một triển khai phổ biến [không chính xác] mà tôi đã thấy cho vấn đề này trông giống như thế này
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
4Nếu bạn chạy chương trình này, bạn sẽ thấy rằng bạn thực sự nhận được 4 bản in ra mỗi lần thay vì 0, 1, 2, 3 như mong đợi sau 3 giây trì hoãn
Để xác định chính xác lý do tại sao điều này xảy ra, sẽ rất hữu ích nếu bạn hiểu lý do tại sao điều này xảy ra trong JavaScript, đây chính xác là điều mà người phỏng vấn đang cố gắng kiểm tra
Lý do cho điều này là vì hàm
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
5 tạo ra một hàm [bao đóng] có quyền truy cập vào phạm vi bên ngoài của nó, đó là vòng lặp chứa chỉ mục function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
6. Sau 3 giây trôi qua, hàm được thực thi và nó in ra giá trị của function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
6, giá trị này ở cuối vòng lặp là 4 vì nó quay vòng qua 0, 1, 2, 3, 4 và cuối cùng vòng lặp dừng ở 4Thực tế, có một số cách để viết chính xác hàm cho vấn đề này. Dưới đây là hai trong số họ
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
5function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
6Câu hỏi số 3. ra mắt
Có một số sự kiện trình duyệt có thể kích hoạt nhiều lần trong một khoảng thời gian ngắn rất nhanh, chẳng hạn như thay đổi kích thước cửa sổ hoặc cuộn trang xuống. Ví dụ: nếu bạn đính kèm trình lắng nghe sự kiện vào sự kiện cuộn cửa sổ và người dùng liên tục cuộn xuống trang rất nhanh, thì sự kiện của bạn có thể kích hoạt hàng nghìn lần trong khoảng thời gian 3 giây. Điều này có thể gây ra một số vấn đề hiệu suất nghiêm trọng
Nếu bạn đang thảo luận về việc xây dựng một ứng dụng trong một cuộc phỏng vấn và các sự kiện như cuộn, thay đổi kích thước cửa sổ hoặc nhấn phím xuất hiện, hãy đảm bảo đề cập đến việc gỡ lỗi và/hoặc điều chỉnh như một cách để cải thiện tốc độ và hiệu suất của trang. Một ví dụ thực tế được lấy từ bài đăng của khách này trên thủ thuật css
Năm 2011, một vấn đề xuất hiện trên trang web Twitter. khi bạn đang cuộn xuống nguồn cấp dữ liệu Twitter của mình, nó trở nên chậm và không phản hồi. John Resig đã xuất bản một bài đăng trên blog về vấn đề giải thích ý tưởng tồi tệ như thế nào khi gắn trực tiếp các chức năng đắt tiền vào sự kiện21function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
Gỡ lỗi là một cách để giải quyết vấn đề này bằng cách giới hạn thời gian cần trôi qua cho đến khi một chức năng được gọi lại. Do đó, việc triển khai gỡ lỗi chính xác sẽ nhóm một số lời gọi hàm thành một và chỉ thực hiện nó một lần sau một thời gian đã trôi qua. Đây là một triển khai bằng JavaScript đơn giản sử dụng các chủ đề như phạm vi, bao đóng, điều này và các sự kiện định thời
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
8Chức năng này — khi bao quanh một sự kiện — sẽ chỉ thực thi sau một khoảng thời gian nhất định đã trôi qua
Bạn sẽ sử dụng chức năng này như vậy
function isInteger[x] { return [typeof x === 'number'] && [x % 1 === 0]; }
9Điều tiết là một kỹ thuật khác tương tự như gỡ lỗi, ngoại trừ việc thay vì đợi một khoảng thời gian trôi qua trước khi gọi hàm, điều tiết chỉ phân bổ các lệnh gọi hàm trong một khoảng thời gian dài hơn. Vì vậy, nếu một sự kiện xảy ra 10 lần trong vòng 100 mili giây, thì việc điều chỉnh có thể trải ra từng lệnh gọi hàm để được thực thi 2 giây một lần thay vì kích hoạt tất cả trong vòng 100 mili giây
Để biết thêm thông tin về gỡ lỗi và điều tiết, các bài viết và hướng dẫn sau đây có thể hữu ích
- Sự khác biệt giữa điều chỉnh và gỡ lỗi
- Ví dụ về điều chỉnh và gỡ lỗi
- Bài đăng trên blog của Remy Sharp về các cuộc gọi chức năng Throttling
Nếu bạn thích đọc bài viết này, thì bạn có thể thích đọc các hướng dẫn về JavaScript và giải quyết một số thách thức về mã hóa JavaScript mà tôi lưu trữ trên Coderbyte. Tôi muốn nghe những gì bạn nghĩ
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
Giám đốc điều hành & Người sáng lập tại Coderbyte
Nếu bài viết này hữu ích, hãy tweet nó
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu