Tất cả câu hỏi

Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.

5.700/20.347 câuCòn 14.647
AAcquire
BAnalyze
CPrepare
DReport
Lời giải
Đáp án đúng: "Prepare". Quy trình khoa học dữ liệu thường chia năm bước: thu thập (Acquire), chuẩn bị (Prepare), phân tích (Analyze), báo cáo (Report) và hành động (Act); bước chuẩn bị gồm khám phá dữ liệu để hiểu bản chất của nó rồi tiền xử lý như làm sạch, xử lý giá trị thiếu, chuẩn hoá, chọn và biến đổi đặc trưng, tức là đưa dữ liệu thô về dạng mà mô hình dùng được. "Acquire" chỉ là xác định và lấy dữ liệu về từ các nguồn, dữ liệu lúc đó vẫn còn thô. "Analyze" là bước chọn kỹ thuật phân tích, dựng và đánh giá mô hình, vốn đòi hỏi dữ liệu đã được chuẩn bị xong từ trước. "Report" là trình bày kết quả và phát hiện cho người ra quyết định, nằm ở cuối quy trình nên không còn biến đổi dữ liệu thô nữa.
Mở trang câu hỏi này →
AFlume
BSqoop
CPig
DHive
Lời giải
Đáp án đúng: "Sqoop". Sqoop (ghép từ SQL-to-Hadoop) là công cụ hệ sinh thái Hadoop chuyên chuyển dữ liệu hàng loạt (bulk transfer) giữa Hadoop và cơ sở dữ liệu quan hệ: lệnh import đọc bảng từ MySQL, Oracle qua JDBC rồi ghi vào HDFS, Hive hoặc HBase, lệnh export đẩy kết quả ngược về bảng quan hệ, và bên dưới nó chạy thành các tác vụ MapReduce song song. "Flume" cũng đưa dữ liệu vào Hadoop nhưng dành cho dữ liệu luồng như log sự kiện, gom từ nhiều nguồn sinh liên tục chứ không đọc bảng quan hệ. "Pig" là nền tảng xử lý với ngôn ngữ dòng dữ liệu Pig Latin, dùng để biến đổi dữ liệu đã nằm trong Hadoop chứ không phải cầu nối với cơ sở dữ liệu quan hệ. "Hive" là kho dữ liệu cho phép truy vấn dữ liệu trên HDFS bằng HiveQL giống SQL; nó thường là đích mà Sqoop nạp dữ liệu vào, bản thân không chuyên chuyển dữ liệu từ cơ sở dữ liệu quan hệ.
Mở trang câu hỏi này →
Đề bài
const { MongoClient } = require('mongodb');
async function run() {
  const client = new MongoClient('mongodb://localhost:27017');
  try {
    await client.connect();
    const db = client.db('test');
    const collection = db.collection('products');
    await collection.insertOne({ name: 'Laptop', price: 1000 });
    const result = await collection.findOne({ price: { $gte: 500 } });
    console.log(result.name);
  } finally {
    await client.close();
  }
}
run();

Assume the `products` collection is initially empty.

ALaptop
Bundefined
CThrows an error due to connection failure
Dnull
Lời giải
Đáp án đúng: "Laptop". Lần theo mã: client.connect() mở kết nối tới máy chủ cục bộ, client.db('test').collection('products') lấy collection products đang rỗng; insertOne chèn tài liệu có name là Laptop và price là 1000; findOne với điều kiện price $gte 500 tìm tài liệu đầu tiên có giá lớn hơn hoặc bằng 500, chính là tài liệu vừa chèn vì 1000 thoả điều kiện; console.log(result.name) in Laptop, rồi khối finally đóng kết nối. "undefined" chỉ xảy ra khi tài liệu tìm được không có trường name. "Throws an error due to connection failure" sai vì mã chạy với máy chủ MongoDB ở localhost hoạt động bình thường, không có dấu hiệu lỗi kết nối. "null" là giá trị findOne trả về khi không có tài liệu khớp, nhưng ở đây có tài liệu khớp, và lệnh in result.name chứ không in result.
Mở trang câu hỏi này →
ATo simplify database queries
BTo enable load balancing across CPU cores
CTo add SSL encryption
DTo reduce package size
Lời giải
Đáp án đúng: "To enable load balancing across CPU cores". Một tiến trình Node.js chỉ chạy mã JavaScript trên một luồng nên mặc định chỉ dùng một nhân CPU; module cluster cho tiến trình chính (primary) fork ra nhiều worker, thường bằng số nhân lấy từ os.cpus().length, các worker cùng chia sẻ một cổng và kết nối đến được phân phối giữa chúng, nhờ đó tận dụng mọi nhân, và khi một worker chết có thể fork worker mới thay thế. "To simplify database queries" là việc của driver hoặc ODM như Mongoose, không liên quan cluster. "To add SSL encryption" là việc của module https hoặc reverse proxy như Nginx. "To reduce package size" không liên quan, vì cluster là module có sẵn của Node.js và không đụng tới kích thước gói hay node_modules.
Mở trang câu hỏi này →
AHTTPS uses SSL/TLS to secure data transmission
BHTTP is only used for REST APIs
CHTTPS supports XML while HTTP does not
DHTTP is slower due to encryption
Lời giải
Đáp án đúng: "HTTPS uses SSL/TLS to secure data transmission". HTTPS là HTTP chạy trên một kết nối được bảo vệ bằng TLS (thế hệ sau của SSL): trước khi trao đổi dữ liệu, trình duyệt và máy chủ bắt tay, máy chủ đưa chứng chỉ số để chứng minh danh tính, hai bên thống nhất khoá rồi mã hoá toàn bộ request và response, nên kẻ nghe lén không đọc hay sửa được nội dung. HTTP thì gửi dữ liệu dạng rõ. "HTTP is only used for REST APIs" sai vì HTTP là giao thức chung của web, dùng cho trang HTML, ảnh, tệp, SOAP lẫn REST. "HTTPS supports XML while HTTP does not" sai vì cả hai đều chở được mọi định dạng nội dung như HTML, JSON, XML; khác biệt nằm ở lớp bảo mật chứ không ở định dạng. "HTTP is slower due to encryption" đảo ngược sự thật: HTTP không mã hoá gì, chính HTTPS mới tốn thêm chút chi phí bắt tay và mã hoá, dù ngày nay rất nhỏ.
Mở trang câu hỏi này →
ANestJS eliminates the need for middleware for request processing
BNestJS organizes code into reusable modules with controllers and services
CNestJS automatically handles database migrations for MongoDB
DNestJS provides built-in support for real-time WebSocket communication
Lời giải
Đáp án đúng: "NestJS organizes code into reusable modules with controllers and services". Kiến trúc của NestJS xoay quanh module: mỗi lớp gắn @Module() gom controllers (nhận request), providers như service (chứa logic nghiệp vụ) cùng khai báo imports, exports, nhờ đó từng tính năng như users hay auth được đóng gói riêng, tái sử dụng và kiểm thử được nhờ dependency injection; Express thuần chỉ có router và middleware, cấu trúc thư mục do mỗi nhóm tự đặt. "NestJS eliminates the need for middleware" sai vì NestJS vẫn có middleware, mặc định chạy trên chính Express, và còn thêm guard, interceptor, pipe. "NestJS automatically handles database migrations for MongoDB" sai vì Nest không tự chạy migration; việc đó do ORM hay công cụ riêng đảm nhận. "NestJS provides built-in support for real-time WebSocket communication" có phần đúng vì Nest có gói @nestjs/websockets với gateway, nhưng đó là một tính năng phụ trợ, không phải lợi thế của kiến trúc module mà câu hỏi nhắm tới.
Mở trang câu hỏi này →
5687What is the default port for MongoDB?4 lựa chọn
A80
B3000
C27017
D8080
Lời giải
Đáp án đúng: "27017". Tiến trình mongod mặc định lắng nghe cổng TCP 27017, nên chuỗi kết nối quen thuộc là mongodb://localhost:27017; khi chạy vai trò shard hay config server thì có các cổng mặc định khác như 27018, 27019, và có thể đổi bằng tuỳ chọn port khi khởi động. "80" là cổng mặc định của HTTP cho web server, MongoDB không dùng giao thức HTTP để kết nối. "3000" là cổng mà nhiều ví dụ Express và Node.js chọn theo thói quen, không phải mặc định của MongoDB. "8080" thường dùng cho máy chủ web phụ hoặc proxy như Tomcat, cũng không liên quan MongoDB.
Mở trang câu hỏi này →
Arouter.delete('/comments/:id')
Brouter.get('/comments/:id')
Crouter.post('/comments/:id')
Drouter.put('/comments/:id')
Lời giải
Đáp án đúng: "router.delete('/comments/:id')". Quy ước REST gắn hành động với method HTTP: xoá tài nguyên dùng DELETE, và :id là tham số đường dẫn mà handler đọc qua req.params.id để biết bình luận nào cần xoá; trong thực tế còn truyền hàm xử lý làm đối số thứ hai, ví dụ thêm deleteComment sau đường dẫn. "router.get('/comments/:id')" dành cho đọc một bình luận, GET phải an toàn và không đổi dữ liệu. "router.post('/comments/:id')" dùng POST, vốn để tạo mới hoặc gửi dữ liệu cần xử lý, không đúng ngữ nghĩa xoá. "router.put('/comments/:id')" dùng PUT để thay thế toàn bộ hoặc cập nhật tài nguyên, không phải để xoá.
Mở trang câu hỏi này →
Đề bài
const express = require('express');
const app = express();
app.use('/api', (req, res, next) => {
    console.log('Middleware');
    next();
});
app.get('/api', (req, res) => res.send('API'));
app.listen(3000);
AMiddleware API
BOnly the API response if middleware skipped
CLogs middleware then processes GET handler
DCombined output from both functions
Lời giải
Đáp án đúng: "Logs middleware then processes GET handler". Lần theo mã: request GET /api khớp app.use('/api') trước tiên vì nó được khai báo trước, hàm này chạy console.log('Middleware') in Middleware ra console của server rồi gọi next(); Express tìm tiếp và gặp app.get('/api'), handler gọi res.send('API') nên client nhận phản hồi API. Phương án được chọn mô tả đúng trình tự ghi log ở middleware rồi xử lý ở handler GET. Cần nói thẳng về "Middleware API": nó gộp dòng log ở server với nội dung phản hồi HTTP thành một đầu ra, chỉ đúng nếu hiểu output là cả hai nơi, còn trình duyệt thực tế chỉ nhận API. "Only the API response if middleware skipped" sai vì middleware không bị bỏ qua: đường dẫn khớp và nó gọi next() bình thường. "Combined output from both functions" sai vì chỉ handler GET gửi phản hồi, middleware không ghi gì vào response, nên client không nhận đầu ra gộp từ cả hai hàm.
Mở trang câu hỏi này →
AIaaS
BPaaS
CBaaS
DSaaS
Lời giải
Đáp án đúng: "BaaS". BaaS (Backend as a Service, phần phụ trợ như một dịch vụ) cung cấp sẵn các khối phía máy chủ như cơ sở dữ liệu, xác thực người dùng, lưu trữ tệp, thông báo đẩy, và lập trình viên gọi chúng qua API hoặc SDK mà không phải tự viết hay vận hành server; Firebase và Supabase là ví dụ quen thuộc. "IaaS" cho thuê hạ tầng thô như máy ảo, mạng, ổ đĩa, người dùng tự cài và quản lý mọi thứ phía trên. "PaaS" cung cấp nền tảng để triển khai mã ứng dụng của chính mình, như Heroku, nhưng phần backend vẫn do bạn viết. "SaaS" là phần mềm hoàn chỉnh cho người dùng cuối như Gmail, không phải bộ dịch vụ backend dành cho lập trình viên.
Mở trang câu hỏi này →
ATo serve HTML template files
BTo upload files from the client
CTo download and save files to database
DTo render dynamic content using EJS
Lời giải
Đáp án đúng: "To serve HTML template files". Phương thức res.sendFile gửi nguyên nội dung một tệp tĩnh về trình duyệt theo đường dẫn tuyệt đối (hoặc đường dẫn tương đối kèm tuỳ chọn root), tự đặt Content-Type theo đuôi tệp; cách dùng điển hình là trả về một trang HTML có sẵn, như res.sendFile với path.join(__dirname, 'index.html'). Cần nói rõ: sendFile không render template, tệp được gửi y nguyên không chèn dữ liệu nào, nên chữ template trong phương án là cách diễn đạt lỏng, nhưng đây là phương án gần nhất với việc phục vụ tệp HTML. "To upload files from the client" ngược chiều: nhận tệp từ client là việc của middleware như multer, còn sendFile gửi tệp từ máy chủ đi. "To download and save files to database" sai vì sendFile không ghi gì vào cơ sở dữ liệu. "To render dynamic content using EJS" là việc của res.render, hàm chạy template EJS với dữ liệu để sinh HTML động.
Mở trang câu hỏi này →
AHandle file uploads
BConnect to SQL databases
CProvide a web application framework
DCompile TypeScript files
Lời giải
Đáp án đúng: "Provide a web application framework". Express là web framework tối giản dựng trên module http của Node.js: nó cung cấp định tuyến (routing) theo phương thức và đường dẫn như app.get hay app.post, chuỗi middleware xử lý request theo thứ tự, các tiện ích trên req và res như res.json, res.status, res.render, cùng khả năng gắn view engine. Nhờ vậy viết API hay ứng dụng web gọn hơn nhiều so với dùng http trực tiếp. "Handle file uploads" không phải vai trò chính của Express; tải tệp lên được xử lý bằng middleware riêng như multer gắn vào Express. "Connect to SQL databases" là việc của driver hoặc ORM như pg, mysql2, Sequelize; Express không kèm sẵn kết nối cơ sở dữ liệu. "Compile TypeScript files" là việc của trình biên dịch tsc hoặc công cụ như ts-node, không liên quan tới Express.
Mở trang câu hỏi này →
Đề bài
const express = require('express');
const app = express();

app.all('/users', (req, res, next) => {
  console.log('Accessing the /users endpoint...');
  next(); // pass control to the next handler
});

app.delete('/users', (req, res) => {
  res.send('DELETE request to the /users endpoint');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});
AThe response will be 'Accessing the /users endpoint...'
BThe response will be 'DELETE request to the /users endpoint'.
CThe response will be 'GET request to the /users endpoint'.
DThe response will be 'POST request to the /users endpoint'.
Lời giải
Đáp án đúng: "The response will be 'DELETE request to the /users endpoint'.". Lần theo mã: app.all('/users') khớp mọi phương thức HTTP tới /users nên chạy trước, in dòng Accessing the /users endpoint... ra console của server rồi gọi next() để chuyển tiếp; Express duyệt tiếp ngăn xếp route, gặp app.delete('/users') khớp cả đường dẫn lẫn phương thức DELETE, handler này gọi res.send nên client nhận chuỗi DELETE request to the /users endpoint. "The response will be 'Accessing the /users endpoint...'" sai vì console.log chỉ ghi log phía server, không gửi gì về client. "The response will be 'GET request to the /users endpoint'." sai vì mã không có route GET nào, và request ở đây là DELETE. "The response will be 'POST request to the /users endpoint'." sai vì cũng không có route POST, chuỗi đó không xuất hiện trong mã.
Mở trang câu hỏi này →
AEJS
BHandlebars
CPug
DMustache
Lời giải
Đáp án đúng: "EJS". EJS (Embedded JavaScript) nhúng JavaScript thẳng vào HTML bằng cặp thẻ phần trăm: thẻ trơn chạy mã như vòng lặp hay if, thẻ có dấu bằng in giá trị đã thoát ký tự HTML, thẻ có dấu gạch ngang in giá trị thô; trong Express bật bằng app.set('view engine', 'ejs') rồi gọi res.render(). "Handlebars" dùng cú pháp ngoặc nhọn kép cho biến và block helper như each, if. "Pug" không dùng thẻ đánh dấu mà dựa vào thụt lề và tên thẻ viết gọn, chẳng hạn một dòng h1= title. "Mustache" cũng dùng ngoặc nhọn kép, là ngôn ngữ template không logic mà Handlebars kế thừa và mở rộng.
Mở trang câu hỏi này →
AWildcard for simplicity
BWhitelist of trusted domains
CBoth are equally secure
DDisable CORS and use proxies
Lời giải
Đáp án đúng: "Whitelist of trusted domains". Danh sách trắng (whitelist) chỉ cho các origin được liệt kê, ví dụ cấu hình gói cors với tuỳ chọn origin là mảng tên miền frontend của mình, nên trang lạ không đọc được phản hồi API qua trình duyệt của người dùng; đây là nguyên tắc cấp quyền tối thiểu. "Wildcard for simplicity" đặt Access-Control-Allow-Origin bằng ký tự đại diện cho mọi trang đọc phản hồi, tiện cho API công khai nhưng mở rộng bề mặt tấn công, và không dùng được cùng credentials như cookie. "Both are equally secure" sai vì hai cách cho số lượng origin được phép khác hẳn nhau. "Disable CORS and use proxies" là đường vòng chứ không phải cấu hình CORS an toàn hơn: proxy cùng origin có thể dùng trong vài kiến trúc, nhưng câu hỏi so sánh hai cấu hình CORS và hạn chế origin mới trực tiếp tăng an toàn.
Mở trang câu hỏi này →
AdeleteMany
BremoveDocuments
CdeleteOne
DremoveMany
Lời giải
Đáp án đúng: "deleteMany". Phương thức deleteMany nhận một bộ lọc và xoá mọi document khớp điều kiện trong collection, ví dụ deleteMany với status bằng inactive xoá hết người dùng không hoạt động; kết quả trả về có deletedCount cho biết số document đã xoá. Truyền bộ lọc rỗng sẽ xoá toàn bộ document, nên phải cẩn thận. Phương thức này có cả trong MongoDB shell, Node.js driver lẫn model Mongoose. "removeDocuments" không phải phương thức nào của MongoDB. "deleteOne" có thật nhưng chỉ xoá document đầu tiên khớp bộ lọc, dù có nhiều document cùng thoả điều kiện. "removeMany" cũng không tồn tại; thứ có thật trước đây là remove(), đã bị đánh dấu lỗi thời và thay bằng cặp deleteOne, deleteMany.
Mở trang câu hỏi này →
ATo ensure that the cookie can only be accessed by the domain that created it.
BTo prevent the cookie from being sent over an unencrypted connection.
CTo prevent JavaScript code from accessing the cookie, which can help prevent cross-site scripting (XSS) attacks.
DTo set an expiration date for the cookie.
Lời giải
Đáp án đúng: "To prevent JavaScript code from accessing the cookie, which can help prevent cross-site scripting (XSS) attacks.". Cookie gắn cờ HttpOnly vẫn được trình duyệt gửi kèm mọi request tới máy chủ, nhưng không đọc được qua document.cookie trong JavaScript phía trình duyệt; vì vậy nếu trang bị chèn script độc (XSS), kẻ tấn công không lấy được cookie phiên hay token. Trong Express, cờ này đặt bằng tuỳ chọn httpOnly của res.cookie. "To ensure that the cookie can only be accessed by the domain" mô tả thuộc tính Domain cùng chính sách cùng nguồn, không phải HttpOnly. "To prevent the cookie from being sent over an unencrypted connection." là vai trò của cờ Secure, chỉ cho gửi cookie qua HTTPS. "To set an expiration date for the cookie." là việc của thuộc tính Expires hoặc Max-Age.
Mở trang câu hỏi này →
Aexpress.urlencoded()
Bexpress.static()
Cexpress.json()
Dexpress.parse()
Lời giải
Đáp án đúng: "express.json()". express.json() là middleware tích hợp sẵn trong Express từ bản 4.16 (dựa trên body-parser), đọc body của request có Content-Type là application/json, phân tích chuỗi JSON và gán kết quả vào req.body; thiếu nó thì req.body là undefined. Thường khai báo app.use(express.json()) trước các route cần đọc body. "express.urlencoded()" phân tích body dạng application/x-www-form-urlencoded do form HTML gửi, không phải JSON. "express.static()" phục vụ tệp tĩnh như ảnh, CSS từ một thư mục, không động tới body của request. "express.parse()" không tồn tại trong Express, gọi nó sẽ báo lỗi không phải hàm.
Mở trang câu hỏi này →
AFaster time to market
BBuilt-in server scaling
CCustom low-level hardware access
DPre-built authentication modules
Lời giải
Đáp án đúng: "Custom low-level hardware access". Câu hỏi phủ định: cần chọn thứ không phải lợi ích của BaaS (Backend as a Service). BaaS như Firebase hay Supabase gói sẵn hạ tầng sau những API dựng sẵn; đổi lại, người dùng không được chạm vào máy chủ vật lý, hệ điều hành hay phần cứng bên dưới, nên quyền truy cập phần cứng mức thấp tuỳ biến chính là thứ BaaS lấy đi chứ không mang lại. "Faster time to market" là lợi ích thật, vì không phải tự viết cơ sở dữ liệu, xác thực, lưu trữ nên sản phẩm ra mắt sớm hơn. "Built-in server scaling" cũng đúng, nhà cung cấp tự mở rộng tài nguyên khi lượng người dùng tăng. "Pre-built authentication modules" đúng nốt, ví dụ Firebase Authentication có sẵn đăng nhập bằng email, Google, số điện thoại. Ba điều này đều là lợi ích nên không được chọn.
Mở trang câu hỏi này →
5700What are the key features of Node.js?4 lựa chọn
AMultithreaded
BAsynchronous and Event-Driven
CSynchronous and Blocking
DSingle-Threaded but Highly Scalable
Lời giải
Đáp án đúng gồm hai ý: "Asynchronous and Event-Driven" và "Single-Threaded but Highly Scalable". Node.js chạy mã JavaScript trên một luồng chính với vòng lặp sự kiện (event loop): các thao tác I/O như đọc tệp, truy vấn cơ sở dữ liệu, gọi mạng được giao cho hệ điều hành hoặc thư viện libuv xử lý bất đồng bộ, khi xong thì callback hay Promise được đưa lại vào hàng đợi sự kiện; nhờ không chặn luồng để chờ I/O, một tiến trình phục vụ được hàng nghìn kết nối đồng thời. "Multithreaded" sai vì mô hình lập trình của Node.js là đơn luồng; libuv có thread pool nội bộ và module worker_threads cho phép tạo luồng phụ, nhưng đó là công cụ bổ sung chứ không phải đặc điểm cốt lõi. "Synchronous and Blocking" ngược hẳn với triết lý của Node.js; hàm đồng bộ như fs.readFileSync có tồn tại nhưng làm nghẽn event loop và nên tránh trong máy chủ.
Mở trang câu hỏi này →