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.960/20.347 câuCòn 14.387
A{{loop}}
B{{foreach}}
C{{#if}}
D{{logic}}
Lời giải

Đáp án đúng: "{{#

Lời giải
if
}
}
". Handlebars

có sẵn một nhóm block helper gồm if, unless, each, with, cùng các helper lookup và log; block helper được mở bằng dấu thăng ngay sau hai ngoặc nhọn và đóng bằng dấu gạch chéo, nội dung bên trong khối if chỉ hiển thị khi giá trị truyền vào là truthy. "{{loop}}" không phải helper có sẵn; lặp trong Handlebars dùng each. "{{

Lời giải
foreach
}
}
"

là cách đặt tên quen thuộc của PHP hay C#, Handlebars không định nghĩa, muốn có phải tự đăng ký bằng Handlebars.registerHelper. "{{logic}}" không tồn tại; Handlebars cố tình hạn chế logic trong template, chỉ cung cấp vài helper điều kiện và lặp đơn giản.

Mở trang câu hỏi này →
AMongoose adds structure to MongoDB documents through schemas.
BMongoose is an Object Relational Mapping (ORM) tool.
CMongoose provides an Object Document Mapping (ODM) system.
DMongoose enforces a strict schema on all documents stored in MongoDB.
Lời giải
Đáp án đúng gồm hai ý: "Mongoose adds structure to MongoDB documents through schemas." và "Mongoose provides an Object Document Mapping (ODM) system.". MongoDB tự nó không bắt buộc cấu trúc cho tài liệu; Mongoose thêm lớp schema mô tả trường, kiểu, giá trị mặc định, validator, rồi ánh xạ mỗi tài liệu thành đối tượng JavaScript có method, đó chính là ODM, ánh xạ giữa đối tượng và tài liệu. "Mongoose is an Object Relational Mapping (ORM) tool." sai vì ORM dành cho cơ sở dữ liệu quan hệ có bảng và khoá ngoại, như Sequelize với PostgreSQL, còn MongoDB lưu tài liệu. "Mongoose enforces a strict schema on all documents stored in MongoDB." sai vì schema chỉ có hiệu lực với dữ liệu đi qua model Mongoose; ứng dụng khác hay mongosh vẫn ghi tài liệu tuỳ ý vào cùng collection, và chế độ strict cũng chỉ bỏ các trường lạ khi lưu qua Mongoose.
Mở trang câu hỏi này →
AEncrypt database queries
BStore server logs
CTrack client-side session information
DMinify JavaScript code
Lời giải
Đáp án đúng: "Track client-side session information". Cookie là mẩu dữ liệu nhỏ máy chủ gửi qua header Set-Cookie, trình duyệt lưu lại và tự gửi kèm trong header Cookie ở mỗi request tới cùng tên miền; nhờ đó HTTP vốn không trạng thái (stateless) vẫn nhận ra người dùng, ví dụ express-session đặt cookie connect.sid chứa mã phiên, hoặc cookie lưu tuỳ chọn ngôn ngữ, giỏ hàng. "Encrypt database queries" sai vì cookie không tham gia vào truy vấn cơ sở dữ liệu, và mã hoá đường truyền là việc của TLS. "Store server logs" sai vì log được ghi ở phía máy chủ bằng công cụ như morgan hay winston, còn cookie chỉ chứa vài KB và nằm ở trình duyệt. "Minify JavaScript code" là việc của công cụ build như Terser, esbuild, không liên quan tới cookie.
Mở trang câu hỏi này →
Abody-parser
Bmulter
Cexpress-upload
Dfs-upload
Lời giải
Đáp án đúng: "multer". multer là middleware Express chuyên xử lý body dạng multipart/form-data, kiểu mã hoá mà form và client dùng khi gửi tệp; nó tách các phần tệp, lưu ra đĩa hoặc bộ nhớ, rồi gắn thông tin vào req.file hoặc req.files, ví dụ qua upload.single('avatar'). "body-parser" chỉ phân tích JSON, urlencoded, text và raw, chính tài liệu của nó nói không xử lý multipart. "express-upload" không phải gói chuẩn được dùng rộng rãi; gói gần tên là express-fileupload có tồn tại nhưng ít phổ biến hơn multer. "fs-upload" không phải thư viện tải tệp phổ biến nào cho Express; module fs chỉ thao tác tệp trên đĩa, không đọc được body multipart của request.
Mở trang câu hỏi này →
Anpm is a package manager for JavaScript
Bnpm can be used to install, share, and distribute code
Cnpm is only used for managing dependencies in Node.js
Dnpm cannot be used for managing scripts
Lời giải
Đáp án đúng gồm hai ý: "npm is a package manager for JavaScript" và "npm can be used to install, share, and distribute code". npm là trình quản lý gói (package manager) đi kèm Node.js, gồm công cụ dòng lệnh và kho npm registry: npm install tải gói theo package.json, npm publish đưa gói của mình lên kho để người khác cài và dùng lại. "npm is only used for managing dependencies in Node.js" sai ở chữ only: npm còn quản lý gói cho mã chạy ở trình duyệt (React, Vue được cài bằng npm rồi đóng gói bằng bundler), chạy script, kiểm tra lỗ hổng bằng npm audit. "npm cannot be used for managing scripts" sai vì mục scripts trong package.json cho phép định nghĩa lệnh như start, test, build và chạy chúng bằng npm run build hoặc npm test.
Mở trang câu hỏi này →
Đề bài
const express = require('express');
const mongoose = require('mongoose');
const app = express();

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });

Đề bài
const userSchema = new mongoose.Schema({ name: String });
const User = mongoose.model('User', userSchema);
app.get('/api/users/search', async (req, res) => {
  const { name } = req.query;
  const users = await User.find({ name: new RegExp(name, 'i') });
  res.json(users);
});
app.listen(3000);

Assume the database has users: { name: "Alice" }, { name: "Bob" }, { name: "Alan" }.

A[{ name: "Alice" }, { name: "Alan" }]
B[{ name: "Alice" }, { name: "Bob" }, { name: "Alan" }]
C[]
DThrows an error due to invalid regex
Lời giải
Đáp án đúng: "[{ name: "Alice" }, { name: "Alan" }]". Lần theo mã: request GET tới /api/users/search?name=al làm req.query có name bằng al; route tạo new RegExp(name, 'i'), tức biểu thức chính quy al với cờ i không phân biệt hoa thường, rồi User.find lọc các tài liệu có name chứa chuỗi al ở bất kỳ vị trí nào. Alice bắt đầu bằng Al nên khớp, Alan cũng bắt đầu bằng Al nên khớp, Bob không chứa al nên bị loại; res.json trả mảng hai tài liệu (thực tế mỗi tài liệu còn kèm _id và __v, ở đây được lược đi). "[{ name: "Alice" }, { name: "Bob" }, { name: "Alan" }]" sai vì Bob không khớp mẫu. "[]" chỉ xảy ra nếu bỏ cờ i, khi đó al thường không khớp Al hoa; ở đây cờ i có mặt. "Throws an error due to invalid regex" sai vì al là mẫu hợp lệ, RegExp chỉ ném lỗi khi chuỗi có cú pháp hỏng như dấu ngoặc mở mà không đóng.
Mở trang câu hỏi này →
Amongoose.createSchema()
Bmongoose.newSchema()
Cmongoose.Schema
Dmongoose.model
Lời giải
Đáp án đúng: "mongoose.Schema". Schema là một lớp (constructor) mà Mongoose cung cấp, nên định nghĩa schema bằng cách khởi tạo nó: new mongoose.Schema với đối tượng mô tả các trường như name kiểu String, age kiểu Number cùng các ràng buộc. Schema chỉ mô tả cấu trúc và quy tắc; sau đó mới dùng nó để tạo model. "mongoose.createSchema()" không tồn tại trong API của Mongoose. "mongoose.newSchema()" cũng không tồn tại; từ new phải là toán tử new của JavaScript đứng trước mongoose.Schema chứ không gộp vào tên hàm. "mongoose.model" là hàm dùng ở bước sau, nhận tên và một schema đã có để biên dịch thành Model gắn với collection, nên nó tạo model chứ không định nghĩa schema.
Mở trang câu hỏi này →
5948What type of database is MongoDB?4 lựa chọn
ASQL
BNoSQL
CRelational
DHierarchical
Lời giải
Đáp án đúng: "NoSQL". MongoDB là cơ sở dữ liệu NoSQL hướng tài liệu (document-oriented): dữ liệu lưu thành tài liệu BSON (dạng nhị phân của JSON) trong collection, mỗi tài liệu có thể có cấu trúc khác nhau, không cần lược đồ bảng cố định, và truy vấn bằng đối tượng lọc với toán tử như $gt, $in thay vì câu lệnh SQL. "SQL" sai vì MongoDB không dùng ngôn ngữ SQL và không tổ chức dữ liệu thành bảng, hàng, cột. "Relational" sai vì cơ sở dữ liệu quan hệ như MySQL, PostgreSQL ràng buộc bảng bằng khoá ngoại và phép JOIN, còn MongoDB liên kết bằng tài liệu nhúng hoặc ObjectId tham chiếu. "Hierarchical" chỉ mô hình phân cấp kiểu cây cổ điển, mỗi bản ghi có đúng một cha; tài liệu MongoDB có thể lồng nhau nhưng mô hình tổng thể không phải cây cha – con cứng nhắc đó.
Mở trang câu hỏi này →
Anode init
Bnpm init
Cnpm install
Dnode install
Lời giải
Đáp án đúng: "npm init". Lệnh npm init khởi tạo một dự án Node.js bằng cách hỏi lần lượt tên, phiên bản, mô tả, tệp entry point, lệnh test… rồi ghi ra tệp package.json, nơi lưu thông tin dự án, các script và danh sách phụ thuộc; thêm cờ -y để nhận mọi giá trị mặc định mà không phải trả lời. "node init" sai vì lệnh node dùng để chạy tệp JavaScript, chẳng hạn node app.js, nó sẽ coi init như tên một tệp cần chạy chứ không tạo dự án. "npm install" dùng để cài các gói phụ thuộc đã ghi trong package.json hoặc cài thêm một gói cụ thể; nó dựa trên dự án sẵn có chứ không phải lệnh khởi tạo dự án. "node install" không phải lệnh nào của Node.js; việc cài gói thuộc về npm chứ không thuộc về runtime node.
Mở trang câu hỏi này →
Đề bài
const express = require('express');
const app = express();
const logger = (req, res, next) => {
  req.log = `${req.method} ${req.url}`;
  next();
};
const restrict = (req, res, next) => {
  if (!req.query.token) {
    res.status(403).send('Forbidden');
  } else {
    next();
  }
};
app.use(logger);
app.get('/profile', restrict, (req, res) => {
  res.json({ log: req.log, user: 'Alice' });
});
app.listen(3000);
A{ log: 'GET /profile', user: 'Alice' }
B403 status with 'Forbidden'
C{ user: 'Alice' }
DThrows an error due to undefined `req.log`
Lời giải
Đáp án đúng: "{ log: 'GET /profile', user: 'Alice' }". Lần theo mã: app.use(logger) chạy với mọi yêu cầu, gán req.log bằng method nối với url rồi gọi next(); route GET /profile có middleware restrict đứng trước handler, vì yêu cầu kèm ?token=xyz nên req.query.token là xyz, khác rỗng, restrict gọi next(); handler cuối trả res.json với log lấy từ req.log và user là Alice. Cần nói thẳng một chi tiết: req.url ở middleware gắn tại gốc vẫn giữ chuỗi truy vấn, nên giá trị log thực tế là GET /profile?token=xyz; dù vậy phương án này đúng cấu trúc phản hồi và đúng luồng chạy, nên vẫn là lựa chọn đúng. "403 status with 'Forbidden'" chỉ xảy ra khi thiếu token. "{ user: 'Alice' }" sai vì handler có đưa trường log vào JSON. "Throws an error due to undefined `req.log`" sai vì logger chạy trước và đã gán req.log.
Mở trang câu hỏi này →
AFunctions executed between request arrival and final response
BFiles storing database credentials
CHTML templates for rendering pages
DMethods used only for authentication
Lời giải
Đáp án đúng: "Functions executed between request arrival and final response". Middleware trong Express là hàm nhận req, res, next, chạy theo thứ tự khai báo bằng app.use hay trong route, sau khi request tới và trước khi phản hồi cuối được gửi; mỗi hàm có thể đọc, sửa req và res, kết thúc chu trình bằng res.send, hoặc gọi next() để chuyển cho hàm kế tiếp, ví dụ express.json(), cors() hay hàm ghi log. "Files storing database credentials" sai vì thông tin kết nối thường nằm trong tệp .env hay tệp cấu hình, không phải middleware. "HTML templates for rendering pages" là view của template engine như EJS, Pug, được gọi qua res.render. "Methods used only for authentication" sai ở chữ only: xác thực chỉ là một ứng dụng của middleware, bên cạnh phân tích body, CORS, ghi log, xử lý lỗi.
Mở trang câu hỏi này →
ATo store user credentials securely on the server
BTo allow the client to access protected resources on behalf of the user
CTo validate the client’s redirect URI during authorization
DTo refresh the user’s session without re-authentication
Lời giải
Đáp án đúng: "To allow the client to access protected resources on behalf of the user". Trong OAuth 2.0, sau khi người dùng đồng ý trên authorization server, ứng dụng client nhận access token (mã truy cập) và gửi nó trong header Authorization dạng Bearer khi gọi resource server; token mang phạm vi quyền (scope) và thời hạn ngắn, cho phép client thay mặt người dùng truy cập tài nguyên được bảo vệ mà không cần biết mật khẩu của họ. "To store user credentials securely on the server" sai vì mục đích của OAuth là tránh việc chia sẻ thông tin đăng nhập, token không phải nơi chứa mật khẩu. "To validate the client’s redirect URI during authorization" là việc authorization server tự làm bằng cách so redirect URI với danh sách đã đăng ký, diễn ra trước khi có access token. "To refresh the user’s session without re-authentication" là vai trò của refresh token, loại token dùng để xin access token mới khi token cũ hết hạn.
Mở trang câu hỏi này →
ADesigned for traditional monolith applications
BFocused on real-time messaging systems
CLightweight and optimized for serverless environments
DBuilt-in NoSQL database engine
Lời giải
Đáp án đúng: "Lightweight and optimized for serverless environments". Hono là web framework nhỏ gọn dựng trên chuẩn Web (Request, Response, Fetch API), chạy được trên nhiều runtime như Cloudflare Workers, Deno, Bun, AWS Lambda và cả Node.js; bộ định tuyến nhanh, gói rất nhẹ và khởi động nhanh nên hợp với môi trường serverless và edge, nơi mỗi lần khởi động lạnh đều tốn thời gian. "Designed for traditional monolith applications" sai vì thế mạnh của Hono là chạy gọn ở edge, không phải phục vụ ứng dụng nguyên khối truyền thống, dù vẫn có thể dùng làm máy chủ thường. "Focused on real-time messaging systems" sai vì Hono là framework HTTP tổng quát; có hỗ trợ WebSocket qua helper nhưng nhắn tin thời gian thực không phải trọng tâm. "Built-in NoSQL database engine" sai vì Hono không kèm cơ sở dữ liệu nào, dữ liệu phải lấy từ dịch vụ ngoài.
Mở trang câu hỏi này →
ATo manage database connections.
BTo create HTTP servers and make HTTP requests.
CTo handle file system operations.
DTo compile and run TypeScript code.
Lời giải
Đáp án đúng: "To create HTTP servers and make HTTP requests.". Module lõi http của Node.js cung cấp http.createServer() để dựng máy chủ lắng nghe yêu cầu, với callback nhận req và res, và http.request() hoặc http.get() để gửi yêu cầu HTTP tới máy chủ khác; Express thực chất được xây trên chính module này. "To manage database connections." sai vì kết nối cơ sở dữ liệu do driver riêng như mongodb hay mongoose lo. "To handle file system operations." là việc của module fs, như fs.readFile hay fs.writeFile. "To compile and run TypeScript code." sai vì Node.js không dùng module http để biên dịch TypeScript; việc đó do trình biên dịch tsc hoặc công cụ như ts-node đảm nhận.
Mở trang câu hỏi này →
AThe file was uploaded successfully
BThe request did not contain a file
CThe file is too large
DThe server rejected the file type
Lời giải
Đáp án đúng: "The request did not contain a file". Khi gắn upload.single('avatar') vào route, multer chỉ tạo đối tượng req.file nếu request multipart thật sự có một tệp trong trường avatar; không có tệp nào được gửi thì multer vẫn cho request đi tiếp và req.file là undefined, nên route nên kiểm tra điều này để trả lỗi 400. "The file was uploaded successfully" ngược lại: tải lên thành công thì req.file là một đối tượng có fieldname, originalname, mimetype, size và path hoặc buffer. "The file is too large" sai vì vượt limits.fileSize khiến multer gọi next với MulterError mã LIMIT_FILE_SIZE, request chuyển sang middleware xử lý lỗi chứ không tới route với req.file undefined. "The server rejected the file type" thường được làm trong fileFilter bằng cách trả về lỗi; nếu fileFilter chỉ gọi callback với false thì tệp bị bỏ qua và req.file cũng undefined, nhưng đó là trường hợp do chính lập trình viên cấu hình, còn ý nghĩa trực tiếp của req.file undefined là không có tệp đi kèm request.
Mở trang câu hỏi này →
ADatabase that runs the same everywhere
BMongoDB stores data in flexible, JSON-like documents
CMongoDB is a distributed database at its core, allowing you to intelligently put data where you want it
DMongoDB is a relational SQL
Lời giải
Đáp án đúng: "MongoDB is a relational SQL". Câu hỏi tìm phát biểu sai, và đây là phát biểu sai vì MongoDB là cơ sở dữ liệu NoSQL hướng tài liệu, không tổ chức dữ liệu thành bảng quan hệ và không dùng ngôn ngữ SQL; nó truy vấn bằng MQL với các hàm như find() và aggregate(). "Database that runs the same everywhere" là khẩu hiệu đúng của MongoDB, vì cùng một hệ chạy được trên máy cá nhân, máy chủ riêng hay đám mây Atlas, nên không được chọn. "MongoDB stores data in flexible, JSON-like documents" đúng vì dữ liệu lưu thành document BSON có cấu trúc linh hoạt, nên cũng không được chọn. "MongoDB is a distributed database at its core" cũng đúng vì MongoDB được thiết kế sẵn cho replica set (sao chép dữ liệu) và sharding (chia dữ liệu theo khoá phân mảnh lên nhiều máy), cho phép đặt dữ liệu ở nơi mong muốn, nên không phải phát biểu sai.
Mở trang câu hỏi này →
Đề bài
const mongoose = require('mongoose');
const userSchema = new mongoose.____({
  name: String,
  age: Number
});
AModel
BSchema
CDocument
DCollection
Lời giải

Đáp án đúng: "Schema". Hàm khởi tạo mongoose.Schema nhận một đối tượng mô tả các trường và kiểu, ở đây name là String và age là Number, nên chỗ trống phải điền Schema để có new mongoose.Schema(...); schema chỉ là bản thiết kế cấu trúc và quy tắc kiểm tra dữ liệu. "Model" sai vì model được tạo từ schema bằng mongoose.model('User', userSchema), không khởi tạo bằng new với đối tượng định nghĩa trường. "Document" là một bản ghi cụ thể, tức một thể hiện của model, ví dụ tạo bằng new User(...). "Collection" là tập hợp tài liệu trong MongoDB mà model ánh xạ tới, Mongoose tự đặt tên theo model, không dùng để khai báo schema.

Mở trang câu hỏi này →
Đề bài
const express = require('express');
const app = express();

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

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

app.listen(3000, () => {
  console.log('Server running on port 3000');
});
AThe /users endpoint handles GET requests.
BThe /users endpoint handles POST requests.
CThe /users endpoint handles PUT requests.
DThe /users endpoint handles DELETE requests.
Lời giải
Đáp án đúng gồm hai ý: "The /users endpoint handles GET requests." và "The /users endpoint handles POST requests.". Lần theo mã: app được tạo từ express(), dòng app.get('/users', …) đăng ký một handler chỉ chạy khi request dùng phương thức GET tới /users và trả chuỗi GET request to the /users endpoint; dòng app.post('/users', …) đăng ký handler thứ hai cho cùng đường dẫn nhưng chỉ khớp phương thức POST; cuối cùng app.listen(3000) mở cổng 3000. Express khớp route theo cả phương thức lẫn đường dẫn, nên một URL có thể có nhiều handler khác nhau. "The /users endpoint handles PUT requests." sai vì không có app.put nào, request PUT tới /users rơi xuống xử lý mặc định và nhận 404 với thông báo Cannot PUT /users. "The /users endpoint handles DELETE requests." sai tương tự vì thiếu app.delete, request DELETE cũng nhận 404.
Mở trang câu hỏi này →
AGET
BPUT
CDELETE
DPOST
Lời giải
Đáp án đúng: "PUT". Theo ngữ nghĩa HTTP dùng trong REST, PUT gửi biểu diễn mới của một tài nguyên tới URL của nó, ví dụ PUT /users/5 kèm body chứa dữ liệu cập nhật, để thay thế trạng thái hiện có; PUT có tính idempotent (lặp lại nhiều lần cho cùng kết quả). Ngoài ra còn PATCH dành cho cập nhật một phần, nhưng PATCH không có trong danh sách. "GET" chỉ đọc tài nguyên và không được làm thay đổi dữ liệu trên máy chủ. "DELETE" xoá tài nguyên chứ không cập nhật nó. "POST" theo quy ước dùng để tạo tài nguyên mới trong một tập hợp, như POST /users; về kỹ thuật POST có thể làm nhiều việc, nhưng khi phân vai CRUD chuẩn thì cập nhật tài nguyên đã có thuộc về PUT.
Mở trang câu hỏi này →
AarticleRouter.route('/:id').delete(articleController.delete)
BarticleRouter.route('/').delete(articleController.delete)
CarticleRouter.route('/:id').get(articleController.delete)
DarticleRouter.route('/:id').post(articleController.delete)
Lời giải
Đáp án đúng: "articleRouter.route('/:id').delete(articleController.delete)". Xoá một bài viết cụ thể cần hai điều: method HTTP DELETE theo quy ước REST, và tham số đường dẫn :id để biết bài nào; router.route('/:id') gom các handler của cùng một đường dẫn, .delete(...) gắn handler cho method DELETE, còn trong controller lấy id qua req.params.id. "articleRouter.route('/').delete(articleController.delete)" thiếu :id nên đường dẫn trỏ tới cả tập bài viết, không xác định được bài cần xoá. "articleRouter.route('/:id').get(articleController.delete)" gắn handler xoá vào GET, trái ngữ nghĩa REST vì GET phải an toàn, chỉ đọc. "articleRouter.route('/:id').post(articleController.delete)" dùng POST vốn dành cho tạo mới, nên yêu cầu DELETE tới /:id sẽ không khớp route này.
Mở trang câu hỏi này →