Danh sách câu hỏi của đề

Câu hỏi: SDN302 Server-Side development with NodeJS, Express, and MongoDB – Bộ ôn tập thi lại số 2

50 câu trắc nghiệm kèm lời giải của môn Server-Side development with NodeJS, Express, and MongoDB, xếp đúng thứ tự trong đề. Trang 3/3 — câu 41–50.

Danh sách câu hỏi

50/50 câuHết danh sách
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 →
ANoSQL databases guarantee immediate data consistency across all nodes
BNoSQL databases support flexible schemas for rapidly changing data
CNoSQL databases enforce foreign key constraints for data integrity
DNoSQL databases are optimized for complex joins across multiple tables
Lời giải
Đáp án đúng: "NoSQL databases support flexible schemas for rapidly changing data". Ứng dụng phân tích thời gian thực nhận dữ liệu sự kiện liên tục, cấu trúc hay thay đổi (thêm trường, đổi thuộc tính theo từng loại sự kiện). MongoDB lưu document BSON không bắt buộc mọi document trong collection giống nhau, nên ghi được dữ liệu mới mà không phải chạy migration đổi bảng, lại mở rộng ngang bằng sharding. "NoSQL databases guarantee immediate data consistency across all nodes" sai vì nhiều hệ NoSQL chọn tính nhất quán cuối cùng (eventual consistency) để đổi lấy tính sẵn sàng; ngay MongoDB đọc từ secondary cũng có thể thấy dữ liệu cũ. "NoSQL databases enforce foreign key constraints for data integrity" sai vì MongoDB không có ràng buộc khoá ngoại, đó là thế mạnh của SQL. "NoSQL databases are optimized for complex joins across multiple tables" cũng là đặc điểm của SQL; MongoDB có $lookup nhưng khuyến khích nhúng dữ liệu để tránh join.
Mở trang câu hỏi này →
43Which runtime environment allows JavaScript to run on the server side?4 lựa chọnDễ100% trả lời đúng
AAngular
BNodeJS
CReact
DVueJS
Lời giải
Đáp án đúng: "NodeJS". Node.js là môi trường chạy JavaScript ngoài trình duyệt, dựng trên engine V8 kèm thư viện libuv lo I/O bất đồng bộ và vòng lặp sự kiện, cung cấp các module như http, fs để viết máy chủ web; Express và NestJS đều chạy trên nó. "Angular" là framework giao diện của Google chạy trong trình duyệt để dựng ứng dụng một trang. "React" là thư viện dựng giao diện theo component, chạy ở trình duyệt; nó có thể render phía máy chủ nhưng khi đó chính Node.js mới là môi trường chạy. "VueJS" là framework giao diện kiểu tiến dần (progressive) cho phía client, không phải runtime phía máy chủ.
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 →
45What are not limitations of Indexes in MongoDB?4 lựa chọnTrung bình50% trả lời đúng
AIndexes can take up a significant amount of disk space, especially for large collections or indexes with many fields.
BIndexes can slow down write operations, as MongoDB needs to update the index whenever a document is inserted, updated, or deleted.
CIndexes can become fragmented over time, which can reduce their effectiveness. MongoDB provides tools to analyze and optimize indexes to address this issue.
DIndexes can query on large collections by reducing the number of documents that need to be examined
Lời giải
Đáp án đúng: "Indexes can query on large collections by reducing the number of documents that need to be examined". Câu hỏi tìm điều không phải hạn chế của index, và đây là lợi ích chứ không phải hạn chế: index là cấu trúc B-tree sắp theo trường được đánh chỉ mục, giúp MongoDB đi thẳng tới các document khớp thay vì quét cả collection (COLLSCAN), nên số document phải xét giảm mạnh trên collection lớn. "Indexes can take up a significant amount of disk space" là hạn chế thật vì mỗi index chiếm dung lượng đĩa và RAM, càng nhiều trường càng tốn, nên không được chọn. "Indexes can slow down write operations" cũng là hạn chế thật vì mỗi lần insert, update, delete MongoDB phải cập nhật cả các index liên quan. "Indexes can become fragmented over time" cũng nêu một hạn chế: index phân mảnh làm giảm hiệu quả và cần công cụ phân tích, tối ưu, nên không phải đáp án.
Mở trang câu hỏi này →
46What is Express.js?4 lựa chọnDễ100% trả lời đúng
AA database management system.
BA front-end framework for designing UI.
CA back-end web application framework for Node.js.
DA text editor for coding.
Lời giải
Đáp án đúng: "A back-end web application framework for Node.js.". Express là framework phía máy chủ, chạy trên Node.js, dùng để dựng ứng dụng web và API: nó cung cấp định tuyến theo phương thức và đường dẫn, chuỗi middleware, các tiện ích như res.json, res.status, res.render và khả năng gắn view engine. Express nhận request HTTP và trả response, nằm ở tầng back-end của hệ thống. "A database management system." sai vì Express không lưu trữ dữ liệu; muốn có cơ sở dữ liệu phải kết nối thêm MongoDB qua Mongoose, hoặc PostgreSQL, MySQL. "A front-end framework for designing UI." sai vì giao diện chạy trên trình duyệt là phần của React, Vue hay Angular; Express chạy trên máy chủ, cùng lắm là render HTML qua template. "A text editor for coding." sai vì trình soạn mã là những công cụ như VS Code; Express là một gói npm mà mã của bạn require vào.
Mở trang câu hỏi này →
47Which statement best describes CORS?4 lựa chọnTrung bình67% trả lời đúng
AA mechanism to handle authentication tokens
BA protocol for file uploads
CA security feature that controls cross-origin requests
DA database query language
Lời giải
Đáp án đúng: "A security feature that controls cross-origin requests". CORS là cơ chế bảo mật của trình duyệt nới lỏng có kiểm soát chính sách cùng nguồn gốc: trước request khác origin, trình duyệt có thể gửi preflight bằng phương thức OPTIONS, và máy chủ trả các header như Access-Control-Allow-Origin, Access-Control-Allow-Methods để quyết định trang nào được đọc phản hồi; ở Express thường cấu hình bằng gói cors. "A mechanism to handle authentication tokens" sai vì xử lý token là việc của JWT, Passport; CORS chỉ quyết định origin nào được gọi, có thể cho phép gửi header Authorization nhưng không kiểm tra token. "A protocol for file uploads" sai vì tải tệp dùng multipart/form-data và thư viện như multer. "A database query language" sai vì CORS không liên quan tới cơ sở dữ liệu; ngôn ngữ truy vấn là SQL hay cú pháp truy vấn của MongoDB.
Mở trang câu hỏi này →
AEncrypt user data
BAuthenticate and authorize users
CPerform database operations
DSend push notifications
Lời giải
Đáp án đúng: "Authenticate and authorize users". JWT là chuỗi gồm header, payload và chữ ký (signature) nối bằng dấu chấm; máy chủ ký token khi người dùng đăng nhập, client gửi lại trong header Authorization dạng Bearer, máy chủ dùng jwt.verify kiểm chữ ký để xác thực danh tính và đọc các claim như vai trò để phân quyền mà không cần tra phiên. "Encrypt user data" sai vì JWT thông thường chỉ được ký, payload chỉ mã hoá base64url nên ai cũng đọc được; mã hoá thật là chuẩn riêng JWE. "Perform database operations" sai vì token không truy vấn hay ghi cơ sở dữ liệu. "Send push notifications" là việc của dịch vụ như Firebase Cloud Messaging, không liên quan JWT.
Mở trang câu hỏi này →
49Which of the following is a valid use of populate()?4 lựa chọnTrung bình67% trả lời đúng
AModel.find().populate('field')
BModel.insert().populate('field')
CModel.delete().populate('field')
DModel.update().populate('field')
Lời giải

Đáp án đúng: "Model.find().populate('field')". populate() là phương thức của Query trong Mongoose: nó thay ObjectId trong trường có ref bằng tài liệu được tham chiếu sau khi truy vấn đọc chạy xong, nên gắn sau find(), findOne() hay findById() là cách dùng chuẩn, ví dụ Post.find().populate('author'). "Model.insert().populate('field')" sai vì Mongoose không có Model.insert(); chèn dùng create() hay insertMany(), và thao tác chèn không trả Query để populate. "Model.delete().populate('field')" sai vì không có Model.delete(); xoá dùng deleteOne() hay deleteMany(), chúng trả về số tài liệu bị xoá chứ không có tài liệu để điền tham chiếu. "Model.update().populate('field')" sai vì update() đã bị bỏ ở các bản Mongoose mới, và lệnh cập nhật chỉ trả kết quả kiểu số bản ghi khớp và bị sửa; muốn nhận tài liệu sau khi sửa thì dùng findOneAndUpdate().

Mở trang câu hỏi này →
50In Node.js, which function is used to read a file asynchronously?4 lựa chọnTrung bình67% trả lời đúng
Afs.readFileSync()
Bfs.readFile()
Cfs.open()
Dfs.load()
Lời giải
Đáp án đúng: "fs.readFile()". Hàm fs.readFile đọc toàn bộ nội dung tệp theo kiểu bất đồng bộ: nó giao việc đọc cho hệ thống bên dưới rồi trả quyền điều khiển ngay, khi đọc xong mới gọi callback với hai đối số err và data; nhờ vậy vòng lặp sự kiện (event loop) không bị chặn và máy chủ vẫn phục vụ request khác. Bản dùng Promise là fs.promises.readFile đi kèm await. "fs.readFileSync()" cũng đọc tệp nhưng đồng bộ, chặn cả tiến trình cho tới khi đọc xong và trả nội dung trực tiếp, nên không phải câu trả lời. "fs.open()" cũng bất đồng bộ nhưng chỉ mở tệp và trả về file descriptor, muốn lấy nội dung còn phải gọi thêm fs.read. "fs.load()" không tồn tại trong module fs của Node.js.
Mở trang câu hỏi này →