You are tasked with evolving the schema of a critical, high-traffic database while minimizing downtime and data inconsistency. What strategies would you employ to safely apply schema migrations?

  • Use database migration tools with rollback support.
  • Apply schema changes during off-peak hours.
  • Utilize database versioning and backward-compatible changes.
  • Pause the database for maintenance during schema updates.
Option (1) is a common approach as it allows you to apply changes with rollback capabilities. Option (2) is valid to minimize the impact on users. Option (3) is also important, using versioning and backward-compatible changes ensures a smoother transition. Option (4) is typically not recommended, as it causes downtime.

In what scenarios would you implement custom middleware instead of using built-in middleware in Express.js?

  • Custom middleware should always be avoided, and built-in middleware should be used.
  • Custom middleware is necessary when working with database connections.
  • Custom middleware should be used when you need to perform application-specific logic that isn't covered by built-in middleware.
  • Custom middleware is used only for unit testing purposes.
Custom middleware is implemented in Express.js when you have specific application logic that cannot be handled by built-in middleware. Common scenarios include authentication, request logging, data validation, and handling application-specific errors. Built-in middleware covers common use cases, but custom middleware allows you to tailor the middleware pipeline to your application's unique needs.

How does normalizing database tables impact the Read and Update operations in CRUD?

  • Improves Read performance, may complicate Updates
  • Improves Update performance, may slow down Reads
  • Has no impact on either Read or Update operations
  • Improves both Read and Update operations
Normalizing database tables often improves Read performance by reducing data redundancy. However, it may complicate Update operations since data may be spread across multiple tables, requiring joins. Option 2 is not generally true as normalization tends to have a positive impact on Update operations. Option 4 is an oversimplification.

What does the resolve function do in a JavaScript Promise?

  • It is called when an error occurs.
  • It is called when the Promise is rejected.
  • It is called when the Promise is fulfilled with a value.
  • It is called to cancel the Promise.
The resolve function in a JavaScript Promise is called when the Promise is fulfilled successfully with a value. It signifies that the asynchronous operation inside the Promise has completed successfully, and the value provided in the resolve function is the result.

What is the output of the following code snippet: console.log(1 == '1')?

  • TRUE
  • FALSE
  • undefined
The output of the code snippet is true. In JavaScript, the == operator performs type coercion, so it converts the string '1' to a number before comparing, and 1 is equal to 1.

In what scenario would a package be listed in both dependencies and devDependencies?

  • When the package is a development tool
  • When it's a runtime dependency
  • When it's a peer dependency
  • When it's a transitive dependency
A package can be listed in both dependencies and devDependencies when it's a development tool that is needed during both development and runtime. An example might be a testing library or build tool.

What is the primary use of Streams in Node.js?

  • Managing database connections
  • Handling HTTP requests and responses
  • Storing configuration data
  • Sorting arrays
The primary use of Streams in Node.js is for handling data in a streaming fashion, especially for reading and writing data efficiently. They are commonly used for handling HTTP requests and responses, file I/O, and more, where data can be processed in smaller chunks without loading the entire dataset into memory.

In Express.js, how can you handle errors occurring in asynchronous code within a route handler?

  • try-catch
  • next(error)
  • return error;
  • res.error(error)
In Express.js, you can handle errors occurring in asynchronous code within a route handler by calling next(error). This passes the error to the error-handling middleware or the default error handler, allowing you to centralize error handling. Using a try-catch block won't catch asynchronous errors, and the other options are not standard practices for error handling in Express.js.

Which type of testing focuses on verifying the functionality of individual components in isolation?

  • Unit Testing
  • Integration Testing
  • System Testing
  • Performance Testing
Unit Testing focuses on verifying the functionality of individual components (or units) in isolation. It helps ensure that each component works correctly on its own.

Which of the following is the correct syntax for destructuring an array in JavaScript?

  • let [x, y] = [1, 2];
  • let {x, y} = [1, 2];
  • let (x, y) = [1, 2];
  • let x = [1, 2];
Destructuring an array in JavaScript is done using square brackets []. The correct syntax is let [x, y] = [1, 2];. The other options are either for object destructuring or use incorrect syntax.