Challenge - 5 Problems
Shared Memory Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate1:30remaining
What does SharedArrayBuffer enable in Node.js?
Which of the following best describes the purpose of SharedArrayBuffer in Node.js?
Attempts:
2 left
💡 Hint
Think about how threads can communicate without copying data.
✗ Incorrect
SharedArrayBuffer provides a way for multiple threads to access the same memory area, enabling fast communication without copying data.
❓ component_behavior
intermediate1:30remaining
What is the output of this Node.js code using SharedArrayBuffer?
Consider the following code snippet. What will be logged to the console?
Node.js
const sab = new SharedArrayBuffer(4); const int32 = new Int32Array(sab); int32[0] = 42; console.log(int32[0]);
Attempts:
2 left
💡 Hint
Check how Int32Array views the SharedArrayBuffer.
✗ Incorrect
The Int32Array views the SharedArrayBuffer as an array of 32-bit integers. Setting int32[0] to 42 stores that value, so logging it outputs 42.
📝 Syntax
advanced2:00remaining
Which option correctly creates a SharedArrayBuffer of 16 bytes and a Uint8Array view?
Select the code snippet that correctly creates a SharedArrayBuffer of 16 bytes and a Uint8Array view over it.
Attempts:
2 left
💡 Hint
Remember the correct syntax for constructors in JavaScript.
✗ Incorrect
Option D correctly uses the new keyword and passes the buffer to the typed array constructor.
🔧 Debug
advanced2:00remaining
Why does this code throw a RangeError?
Given the code below, why does it throw a RangeError?
Node.js
const sab = new SharedArrayBuffer(8); const view = new Int32Array(sab, 4, 2); console.log(view.length);
Attempts:
2 left
💡 Hint
Calculate total bytes needed: byteOffset + length * bytes per element.
✗ Incorrect
The Int32Array elements are 4 bytes each. Starting at byte 4 with length 2 requires 8 bytes total, but the buffer size is only 8 bytes, so it tries to access beyond the buffer.
❓ state_output
expert2:30remaining
What is the final value of sharedArray[0] after two workers increment it?
Assume two worker threads share a SharedArrayBuffer with an Int32Array view named sharedArray. Each worker runs this code once:
Atomics.add(sharedArray, 0, 1);
If the initial value of sharedArray[0] is 0, what is the final value after both workers finish?
Attempts:
2 left
💡 Hint
Atomics methods ensure safe updates even with multiple threads.
✗ Incorrect
Using Atomics.add guarantees atomic increments, so both increments are counted, resulting in 2.