06/12/2018, 16:01

Các câu hỏi và trả lời phỏng vấn với Node.js (Phần 1)

Node.js (hay còn được gọi là Node hay Nodejs) là một framework JavaScript nhẹ và hiệu quả, event-driven để xây dựng các ứng dụng web JS. Bài viết này sẽ tổng hợp các câu hỏi phỏng vấn Nodejs cùng với các câu trả lời trên c-sharpcorner.com . Câu hỏi 1: Tôi có thể cài đặt ...

Node.js (hay còn được gọi là Node hay Nodejs) là một framework JavaScript nhẹ và hiệu quả,event-driven để xây dựng các ứng dụng web JS. Bài viết này sẽ tổng hợp các câu hỏi phỏng vấn Nodejs cùng với các câu trả lời trên c-sharpcorner.com.

Câu hỏi 1: Tôi có thể cài đặt Node.js ở đâu?

Trả lời:

Chúng ta có thể tải Node.js từ đây.

Sau khi cài đặt thành công, hãy nhìn vào vị trí cài đặt, bạn sẽ thấy ba phần quan trọng.

  1. Node.exc File này để bắt đầu Node.js JavaScript engine. Bạn có thể chạy bấy kì file JavaScript nào với tẹp này
  2. npm.cmd được sử dụng để quản lý Node.js Package.
  3. node_module Thư mục này chứa Package Node.js cài đặt. Package hoạt động như một thư viện.

Xác minh cài đặt Node.js

Sau khi cài đặt thành công Node.js, bạn có thể kiểm tra xem nó có hoạt động hay không bằng cách:

Mở Command Prompt và viết lệnh sau.

Tiếp theo, thông báo Node.js sẽ xuất hiện. Sau khi hiển thị, hãy viết tiếp:

Sau đó bấm ENTER:

Để xem chi tiết hơn

Câu hỏi 2: Node.js là gì?

Trả lời:

Node.js là server-side JavaScript platform được xây dựng trên Google Chrome’s JavaScript V8 engine. Đó là một ứng dụng mã nguồn mở và cross platform để phát triển các ứng dụng networking server side . Bất kỳ ai cũng có thể phát triển ứng dụng Node.js bằng cách sử dụng JavaScript và có thể chạy trên Microsoft Windows, Linux hoặc OS X.

Node.js không phải là một ngôn ngữ mới và cũng không phải là một Framework được xây dựng trên JavaScript. Nó được xây dựng trên Chrome’s JavaScript Runtime, do đó, code được viết và thực thi rất giống với trình duyệt.

Các tính năng của Node.js

Dưới đây là một số tính năng quan trọng của Node.js.

  • Nhanh chóng thực thi code
  • Khả năng mở rộng cao: Node.js sử dụng một mô hình single thread cho event looping. Events phản hồi với server mà không chặn các hoạt động khác. Điều này làm Node.js có khả năng mở rộng cao. Các servers truyền thống tạo một số lượng giới hạn các luồng để xử lý yêu cầu và Node.js tạo một single thread cung cấp dịch vụ cho số lượng lớn yêu cầu.
  • Event Driven và bất đồng bộ: Tất cả API của Node.js không đồng bộ. Điều này có nghĩa là server có thể chuyển tiếp lần gọi API tiếp theo mà không cần đợi dữ liệu trả về của các yêu cầu trước đó.
  • Không Buffering : Node.js không bao giờ buffers dữ liệu.

Nhiều người trong chúng ta đang có nhiều nhầm lẫn về Node.js. Nó không phải là một web server như Apache. Node.js cung cấp một cách mới để thực thi code. Đó là JavaScript runtime Node.js cung cấp cơ sở để tạo một HTTP server và có thể lưu trữ ứng dụng trên đó.

Để xem chi tiết hơn

Câu hỏi 3: Các tính năng chính của Node.js là gì?

Trả lời:

Dưới đây là các tính năng chính của Node.js:

  • Real time Data intensive. Ví dụ Multiplayer Games, Stock Trading, Chat App etc.
  • Máy chủ có khả năng mở rộng cao cho các ứng dụng Web. Ví dụ – E-Commerce, Social Media, REST API etc.
  • Xây dựng network applications nhanh và có thể mở rộng. Ví dụ – Proxy Server, Backend web services, HTTP Web Server etc.

Các đặc tính chính của Node.js

  • Node.js version 6 tập trung vào cải tiến hiệu năng, tăng độ tin cậy và bảo mật tốt hơn cho 3,5 triệu người dùng.
  • Event driven và không đồng bộ.
  • Node.js đang nổi lên như một platform phổ biến được sử dụng cho các ứng dụng Web, IoT, mobile, phát triển ứng dụng doanh nghiệp và kiến ​​trúc dịch vụ vi mô.
  • Lập trình viên full stack JavaScript có thể sử dụng nó cho front end, back end, mobile và IoT projects.
  • Node.js v6 được trang bị với v8 JavaScript engine 5.0, đây là một cải tiến củaECMAScript 2015 (ES6) support. 93% các tính năng ES6 hiện nay được hỗ trợ trong bản phát hành Node.js v6.
  • Rất nhanh.
  • Single Threaded nhưng khả năng mở rộng cao.

Để xem chi tiết hơn

Câu hỏi 4: Lợi ích của Node.js là gì?

Trả lời:

Node.js là mã nguồn mở, cross-platform runtime environment cho ứng dụng server-side và networking. Ứng dụng Node.js được viết bằng JavaScript và có thể chạy trong Node.js runtime trên OS X, Microsoft Windows, Linux, FreeBSD, NonStop và IBM.

Ưu điểm

  1. Phát triển web được thực hiên bằng một ngôn ngữ dynamic (JavaScript) trên một máy ảo vô cùng nhanh (V8). Nó nhanh hơn Ruby, Python, hay Perl.
  2. Khả năng xử lý hàng ngàn kết nối đồng thời với chi phí tối thiểu trên một tiến trình duy nhất.
  3. JavaScript hoàn hảo cho event loops với các lớp function objectsclosures đầu tiên. Mọi người đều đã biết cách sử dụng theo hướng này khi sử dụng nó trong trình duyệt để phản hồi lại các sự kiện do người dùng đầu.
  4. Nhiều người đã biết JavaScript, ngay cả những người không muốn làm lập trình viên. Nó được cho là ngôn ngữ lập trình phổ biến nhất.
  5. Sử dụng JavaScript trên web server cũng như trình duyệt làm giảm sự không phù hợp đối kháng giữa hai môi trường lập trình, có thể truyền đạt cấu trúc dữ liệu thông qua JSON hoạt động như nhau ở cả hai mặt của phương trình. Code xác nhận form trùng lặp có thể được chia sẻ giữa server client và vân vân.

Để xem chi tiết hơn

Câu hỏi 5: Giải thích REPL trong Node.js ?

Trả lời:

REPL viết tắt của Read Eval Print Loop, một chương trình đơn giản tiếp nhận các commands, đánh giá nó và in các kết quả. Nó đại diện cho một môi trường máy tính như Unix/Linux shell hoặc một giao diện điều khiển window, trong đó chúng ta có thể nhập lệnh và hệ thống đáp ứng với output. REPL thực hiện các công việc sau:

  • READ : Đọc dữ liệu input từ người dùng, phân tích nó vào cấu trúc dữ liệu JavaScript và lưu trữ nó trong bộ nhớ.
  • EVAL : Thực thi cấu trúc dữ liệu.
  • PRINT : In kết quả
  • LOOP : Lặp command cho đến khi người dùng nhấn Ctrl + C hai lần.

Để xem chi tiết hơn

Câu hỏi 6: Closure là gì?

Trả lời:

Closure là một hàm được xác định trong một phạm vi khác, có quyền truy cập vào tất cả các biến trong phạm vi bên ngoài. Một Closure cho chúng ta một môi trường tự do để các hàm bên ngoài truy cập các hàm và biến bên trong mà không có bất kỳ hạn chế về phạm vi truy cập.

Closure là biến cục bộ của một hàm, giữ lại sau khi hàm đã trả về; Hoặc đó là một stack-frame mà không phải deallocated khi hàm trả về. Một Closure là một hàm bên trong có quyền truy cập vào phạm vi của biến trong hàm bên ngoài. Closure có 3 phạm vi: Đầu tiên là truy cập vào phạm vi của nó (các biến được định nghĩa trong ngoặc nhọn) và thứ hai là truy cập các biến của hàm bên ngoài và thứ ba là truy cập các biến toàn cầu.

Những điểm cần nhớ về Closure

  •  Closure được sử dụng bất cứ khi nào bạn sử dụng một hàm bên trong một hàm khác.
  • Closure trong JavaScript giống như giữ một bản sao của tất cả các biến địa phương.
  • Một Closure được tạo ra chỉ khi nhập vào một hàm và các biến cục bộ được thêm vào Closure .
  • Một tập các biến cục bộ mới được lưu giữ mỗi lần một hàm với Closure được gọi.
  • Closure là thuật ngữ cho cả hai hàm cùng với các biến được lưu.

Để xem chi tiết hơn

Câu hỏi 7: NPM là gì? Nhu cầu của NPM trong Node.js là gì?

Trả lời:

NPM viết tắt của Node.js Package Management. Nó đi kèm với Node.js platform và cho phép chúng ta cài đặt các packages khác nhau cho Node.js. Packages này quản lý và hỗ trợ các lệnh khác nhau để cài đặt và gỡ bỏ các modules. Một lưu ý quan trọng cần có : file package.json hoặc thư mục node_modules để cài đặt các modules cục bộ. Một điểm hay về npm là nó lưu trữ tại cục bộ tất cả các dependencies. Ví dụ, nếu module X sử dụng module A phiên bản 1.0, và module Y sử dụng module A phiên bản 1.5, thì cả X và Y sẽ có các bản sao cục bộ riêng của nó về module A.

Trong khi làm việc trên một ứng dụng node.js tôi gặp phải nhiều trường hợp, nơi tôi cần để viết một vài thư viện. Gần đây, tôi nghĩ các thư viện này có thể hữu ích cho người khác. Sau đó, tôi phát hiện ra package NPM.

Để xem chi tiết hơn

Câu hỏi 8: Giải thích cấu trúc event loop của NodeJS.

Trả lời:

  1. Khi một yêu cầu gửi đến, nó được xếp vào hàng đợi trong EventLoop với Closure  JavaScript bao gồm sự kiện (request,response) và callback tương ứng.
  2. Sự kiện này sau đó được trao cho một worker thread nếu công việc có vẻ mất nhiều thời gian để hoàn thành, đó là từ C++ Thread Pool, được xử lý bởi thư viện libuv
  3. Một khi công việc được hoàn thành, callback tương ứng được kích hoạt để trả về response cho Main thread.
  4. Event Loop trả lại response cho khách hàng.

Ví dụ:

Nó thực hiện theo trình tự sau::  

  1. Code của chúng ta nói với node để làm hai tác vụ, read() và write(), sau đó nhận phần còn lại.
  2. Các hoạt động read(), write() sau đó được xếp vào hàng đợi trong Event Loop và được phân phối tới worker thread.
  3. Khi các worker threads hoàn thành với công việc được giao, nó sẽ kích hoạt callbacks để trả về response cho Event Loop.
  4. Event Loop trả lại response cho khách hàng.

Các callback của read() và write() sẽ được thực hiện theo thứ tự mà nó hoàn thành đầu tiên. Nhưng lưu ý chỉ có một trong những callback đó được thực hiện tại một thời điểm, để Node đảm bảo rằng không có một deadlock hoặc race condition. Vì vậy chắc chắn NodeJS cung cấp Non-blocking IO.

Hãy lấy môi trường bưu điện làm ví dụ cho NodeJS.

Khi chúng tôi đăng (request) điều gì đó, Ông chủ (Node) yêu cầu người đưa thư giao (phải hoàn thành công việc) lá thư tới địa chỉ tương ứng.

Một khi những người đưa thư đang giao lá thư, từng người một sẽ báo cáo với ông chủ rằng nó đã hoàn thành.

Ông chủ có thể chỉ định một số công việc cho người đưa thư nếu thời điểm báo cáo anh ta đang không có công việc.

Để xem chi tiết hơn

Câu hỏi 9: Giải thích Node Package Manager.

Trả lời:

Node Package Manager là một tiện ích Command line. Nó cho phép bạn tìm, cài đặt, gỡ bỏ, publish và làm nhiều thứ khác liên quan đến Node Packaged Modules.  Node package Manager cung cấp một liên kết giữa Node Package Registry và môi trường phát triển. Node Package Manager liệt kê một số tùy chọn Command line.

Option Description Example
Search Timf Module packages trong repository npm search express
Install Cài đặt một package sử dụng package.json npm install
Install -g Cài đặt một package trông một phạm vị có thể truy cập được global npm installexpress –g
remove Loại bỏ một module npm remove express
pack Packages the module defined by the package.json file into a .tgz file (giữ nguyên bản dịch) npmpack
view Hiển thị chi tiết module npm view express
publish Publish the moduledefined by a package.json file to the registry ( giữ nguyên bản dịch) npmpublish
unpublish Unpublishes a module you have published ( giữ nguyên bản dịch) npmunpublishMyModule
owner Cho phép bạn thêm, loại bỏ và liệt kê các sở hữu của 1 package trong repository. npm add neerajMyModule

npmrmneerajMyModule

npm Is MyModule

Để xem chi tiết hơn

Câu hỏi 10: Giải thích Process Object trong Node.js.

Trả lời:

Process object là global object trong Node. Nó có thể được truy cập từ bất cứ đâu. Nó là một thể hiện của EventEmitter. Mỗi Node.js có một tập hợp các chức năng tích hợp, có thể truy cập thông qua global process object. Process object cung cấp các tiêu chuẩn input/output (stdio) stdin, stdout và stderr (như trong C / C ++) như sau:

  • stdin :Một luồng có thể đọc để đọc dữ liệu nhập từ người dùng.
  • stdout : Một luồng ghi, đồng bộ hoặc không đồng bộ.
  • stderr : A blocking synchronous writable stream intended for error messages.( giữ nguyên bản dịch )

Chức năng stdout hoặc non-blocking là: console.log, console.info, util.puts, util.print và Stderr. Các functons blocking là: console.warn, console.error, util.debug và process.stdin (một luồng có thể đọc để nhận được input của người dùng).

Thuộc tính của Process Object:

Process.title

Theo mặc định, một process title là NODE nhưng bạn có thể thay đổi nó.

Để xem chi tiết hơn

Câu hỏi 11: Giải thích một số khái niệm trong Node.js.

Trả lời:

Node.js sử dụng một số khái niệm sau:

  1. Debugger: Statement inserting debugger. Trong code của Javascript sẽ giúp kích hoạt break point.
  2. Modules: Node.js hỗ trợ hệ thống module loading đơn giản.
  3. Console: Console module cung cấp tính năng debugging tương tự trong Javascript console bằng trình duyệt.
  4. Streaming:  Bằng các object khác nhau trong Nodejs. Nó là abstract interface implemented.
  5. Cluster: Nó cho phép tạo các tiến trình con chia sẻ server port dễ dàng.
  6. DNS: DNS module contains functions.
  7. Add-ons: It is a dynamically linked shared object.
  8. Domain: Cung cấp cách để xử lí nhiều hoạt động IO khác nhau trong một single group.
  9. Buffer: Tương tự như mảng số nguyên nhưng có kích thước cố định tương ứng.
  10. Global: Có thể được sử dụng cho tất cả các modul.
  11. Net : It provides asynchronous network wrapper.
  12. Call backs : Nó được gọi khi một tác được giao hoàn thành.
  13. Error handling: Hỗ trợ nhiều loại lỗi.
  14. Crypto: It provides cryptographic functionality that includes a set of wrappers for Open SSL’s hash.

Để xem chi tiết hơn

Câu hỏi 12: Cluster Server Object trong Node.JS là gì?

Trả lời:

Một trường hợp đặc biệt của Node chạy trong một single thread. Cluster module cho phép bạn tạo các tiến trình con mà tất cả các cổng máy chủ chia sẻ. Khi bạn gọi server.listen() trong một worker, nó sẽ tuần tự hóa đối số và chuyển yêu cầu tới tiến trình chính. Nếu quá trình chính đã nhận lệnh từ một máy chủ tương ứng yêu cầu của worker, sau đó chuyển trình xử lý tới máy chủ.

Vậy nếu nó chưa nhận lệnh từ máy nào tương ứng với yêu cầu đó thì nó sẽ tạo ra một và chuyển trình xử lí tới worker.

Cluster Events

  • fork
  • online
  • listening
  • disconnect

Fork: the fork event được kích hoạt khi master cố gắng fork một child mới. Nó nhận một đối tượng worker.

Online: the online event được kích hoạt khi master nhận được thông báo một child bị ràng buộc hoàn toàn. Nó nhận được một đối tượng worker.

Listening: Khi worker thực hiện hành động yêu cầu một listen() như HTTP server. Sự kiện này phát ra hai đối số, một là đối tượng worker và đối tượng chỉ chứa giá trị địa chỉ, cổng và địa chỉ của kết nối. 

Disconnect: được gọi khi một child bị ngắt kết nối khỏi cluster. Điều đó có thể xảy ra hoặc thông qua một quá trình hoặc exit event.

Để xem chi tiết hơn

Câu hỏi 13: Tại sao chúng ta sử dụng Node.js và Node.js hoạt động như thế nào?

Trả lời:

Node.js được thiết kế đặc biệt để xây dựng các ứng dụng network nhanh, hiệu quả, có khả năng mở rộng và sử dụng mô hình event-driven, non-blocking I/O để tối đa hóa hiệu quả. Chức năng callback là những gì Node gọi một hàm listener và nó được gọi bởi server bất cứ khi nào có một yêu cầu mới.

Nó hoạt động thế nào?

Sau đây mô tả cách Node.js hoạt động:

  • Sử dụng trình duyệt web để yêu cầu “about.html” trên một server web Node.js.
  • Server Node chấp nhận yêu cầu của bạn và gọi một hàm để lấy file đó từ disk.
  • Mặc dù server Node đang đợi file được trích xuất, nó vẫn sẽ phục vụ yêu cầu tiếp theo.
  • Khi file được lấy ra, có một hàm callback chèn vào hàng đợi của server Node.
  • Server Node thực hiện hàm đó trong trường hợp này sẽ hiển thị trang HTML và gửi về trình duyệt để hiển thị cho người dùng.

Platforms cho Node.js

  • Chạy trên OSX, Linux, and Windows.
  • Cài đặt đơn giản trên Windows and MacOSX.(chỉ cần click).

Để xem chi tiết hơn

Câu hỏi 14: Giải thích hàm Process.nextTick () trong Node.js.

Trả lời:

Hàm Process.nextTick () thường chạy trước khi bất kỳ sự kiện I/O được kích hoạt. Như chúng ta đã biết, mỗi ứng dụng Node chạy trên single thread, nói cách khác, chỉ có một tác vụ hoặc sự kiện được xử lý bởi event loop Node. Trong một event loop một queue callbacks được xử lý bởi Node trên mỗi Tick của event loop. Trên vòng lặp tiếp theo gần đó event sẽ gọi các callbacks này.

Các hàm Process.nextTick () trì hoãn cho đến khi có một stack hoàn toàn mới. Bạn có thể gọi nhiều hàm như bạn muốn trong stack hiện tại. Khi event loop đang tìm kiếm một sự kiện mới để thực hiện, hàm nextTick sẽ nằm trong queue và sẽ thực hiện toàn bộ một stack mới. Các hàm Process.nextTick () trì hoãn hoạt động cho đến khi thông qua tiếp event loop gần đó.

Để xem chi tiết hơn

Câu hỏi 15: Giải thích Colors Module trong Node.js.

Trả lời:

Colors module sử dụng color.js thông dụng. Vì Colors module không phải là một module tích hợp trong node.js nên chúng ta cần phải cài đặt nó bằng node package manager (npm).

npm install colors

Khi lệnh đã được thực hiện thành công, bạn sẽ tìm thấy.

Trong trường hợp của tôi, nó cho thấy rằng colors module đã được cài đặt thành công trong ứng dụng và đã sẵn sàng để sử dụng.

Điều tuyệt vời của colors module là chúng ta có thể làm đẹp output với nhiều màu sắc khác nhau. Đây là liên kết đến colors module trong NPM.

Colors

Hãy thực hiện một vài ví dụ nhỏ để hiểu colors module hoạt động như thế nào với node.js. Hãy xem ví dụ sau đây.

Trong dòng thứ hai chúng ta đang tải các colors module vào ứng dụng. Sau khi tải xong, có thể sử dụng nó. Hãy xem phần thân của hàm createServer (). Module này cho phép thoải mái sử dụng một màu kết hợp với thuộc tính (.) của đối tượng.

Giống như “, sring” .colorname

Trong ví dụ này chúng ta sử dụng màu đỏ bằng cách đưa ra (.) sau đối tượng. Xem ví dụ:

Không chỉ màu đỏ, chúng ta có thể dùng nhiều màu sắc theo cùng một cách. Đây là việc sử dụng các colors module.

Cách dùng

Package này mở rộng global String prototype với getters bổ sung có sử dụng. Các style có sẵn là,

  • Nhấn mạnh
    bold, italic, underline, inverse
  • Màu sắc
    yellow, cyan, white, magenta, green, red, grey, blue
  • Trình từ
    rainbow, zebra, random

Vì vậy, hãy thử một ví dụ khác.

Kết quả:

Để xem chi tiết hơn

Câu hỏi 16: NodeJS Module là gì?

Trả lời:

Một module đóng gói code có liên quan vào một đơn vị code. Khi tạo một module, điều này có thể được hiểu là di chuyển tất cả các chức năng liên quan vào một file. Node module chạy trong phạm vi riêng của nó để không xung đột với các module khác. Node cung cấp khả năng truy cập “toàn cầu” để giúp tạo điều kiện cho khả năng tương tác module. Hai mục chính mà chúng ta quan tâm ở đây là require và export. Bạn require các module khác mà bạn muốn sử dụng và module của bạn export bất kỳ thứ gì cần được public. Hãy xem một ví dụ với file test.js:

Để xem chi tiết hơn

Câu hỏi 17: Đối tượng Cluster Worker trong Node.js là gì?

Trả lời:

Một Worker Object là một script chạy trong một background nền và không chặn các quá trình code khác gắn liền với trang. Một Worker Object chứa tất cả các thông tin và phương thức public về một worker. Master có thể sử dụng “cluster.workers”. Nếu một worker ném một exception và không xử lý exception, exception sẽ tạo ra một sự kiện mà bạn có thể listen là sự kiện onerror.

Worker.id

Một id duy nhất được cung cấp cho mỗi worker. Id duy nhất này nằm trong “id”. Trong khi một worker còn hoạt động, trên cơ sở id duy nhất này chúng ta có thể nhận được các chỉ số từ cluster.workers.

Worker.process

Worker được tạo ra bằng cách sử dụng “child_process.fork ()”, đối tượng trả về từ hàm này được lưu trữ dưới dạng “.process”. Các Node con là toàn bộ các thể hiện mới của V8. Cho phép khởi động ít nhất 30ms và 10mb cho mỗi Node mới. Lớp ChildProcess không nhằm mục đích sử dụng trực tiếp. Sử dụng method  “spawn ()” hoặc “fork ()” để tạo ra các trường hợp xử lý con.

Methods cho Worker Class

  • Worker
    send(message,[sendHandle])
  • Worker.kill()
    This function kills the workers.
  • Worker
    Disconnect()

Để xem chi tiết hơn

Techtalk via c-sharpcorner.com

0