diff --git a/packages/quiz/are-you-familiar-with-styling-svg/en-US.mdx b/packages/quiz/are-you-familiar-with-styling-svg/en-US.mdx
new file mode 100644
index 000000000..64c8b5595
--- /dev/null
+++ b/packages/quiz/are-you-familiar-with-styling-svg/en-US.mdx
@@ -0,0 +1,25 @@
+---
+title: Are you familiar with styling SVG?
+---
+
+There are several ways to color shapes (including specifying attributes on the object) using inline CSS, an embedded CSS section, or an external CSS file. Most SVGs you find on the web uses inline CSS, but there are advantages and disadvantages associated with each type.
+
+Basic coloring can be done by setting two attributes on the node: `fill` and `stroke`. `fill` sets the color inside the object and `stroke` sets the color of the line drawn around the object. You can use the same CSS color naming schemes that you use in HTML, whether that's color names (that is `red`), RGB values (that is `rgb(255,0,0)`), Hex values, RGBA values, etc.
+
+```html
+
+```
+
+The above `fill="purple"` is an example of a _presentational attribute_. Interestingly, and unlike inline styles like `style="fill: purple"` which also happens to be an attribute, presentational attributes can be [overridden by CSS](https://css-tricks.com/presentation-attributes-vs-inline-styles/) styles defined in a stylesheet. Hence if you did something like `svg { fill: blue; }` it will override the purple fill that has been defined.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/are-you-familiar-with-styling-svg/metadata.json b/packages/quiz/are-you-familiar-with-styling-svg/metadata.json
new file mode 100644
index 000000000..4015015cc
--- /dev/null
+++ b/packages/quiz/are-you-familiar-with-styling-svg/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "are-you-familiar-with-styling-svg",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/can-you-describe-the-main-difference-between-a-foreach-loop-and-a-map-loop-and-why-you-would-pick-one-versus-the-other/en-US.mdx b/packages/quiz/can-you-describe-the-main-difference-between-a-foreach-loop-and-a-map-loop-and-why-you-would-pick-one-versus-the-other/en-US.mdx
new file mode 100644
index 000000000..0bdc8a9cc
--- /dev/null
+++ b/packages/quiz/can-you-describe-the-main-difference-between-a-foreach-loop-and-a-map-loop-and-why-you-would-pick-one-versus-the-other/en-US.mdx
@@ -0,0 +1,41 @@
+---
+title: Can you describe the main difference between a `.forEach` loop and a `.map()` loop?
+subtitle: Why you would pick one versus the other?
+---
+
+To understand the differences between the two, let's look at what each function does.
+
+## `forEach`
+
+- Iterates through the elements in an array.
+- Executes a callback for each element.
+- Does not return a value.
+
+```js
+const a = [1, 2, 3];
+const doubled = a.forEach((num, index) => {
+ // Do something with num and/or index.
+});
+
+// doubled = undefined
+```
+
+## `map`
+
+- Iterates through the elements in an array.
+- "Maps" each element to a new element by calling the function on each element, creating a new array as a result.
+
+```js
+const a = [1, 2, 3];
+const doubled = a.map((num) => {
+ return num * 2;
+});
+
+// doubled = [2, 4, 6]
+```
+
+The main difference between `.forEach` and `.map()` is that `.map()` returns a new array. If you need the result, but do not wish to mutate the original array, `.map()` is the clear choice. If you simply need to iterate over an array, `forEach` is a fine choice.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/can-you-describe-the-main-difference-between-a-foreach-loop-and-a-map-loop-and-why-you-would-pick-one-versus-the-other/metadata.json b/packages/quiz/can-you-describe-the-main-difference-between-a-foreach-loop-and-a-map-loop-and-why-you-would-pick-one-versus-the-other/metadata.json
new file mode 100644
index 000000000..11ac5ebd6
--- /dev/null
+++ b/packages/quiz/can-you-describe-the-main-difference-between-a-foreach-loop-and-a-map-loop-and-why-you-would-pick-one-versus-the-other/metadata.json
@@ -0,0 +1,15 @@
+{
+ "slug": "can-you-describe-the-main-difference-between-a-foreach-loop-and-a-map-loop-and-why-you-would-pick-one-versus-the-other",
+ "languages": [],
+ "companies": [
+ "twitter"
+ ],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/can-you-explain-the-difference-between-coding-a-website-to-be-responsive-versus-using-a-mobile-first-strategy/en-US.mdx b/packages/quiz/can-you-explain-the-difference-between-coding-a-website-to-be-responsive-versus-using-a-mobile-first-strategy/en-US.mdx
new file mode 100644
index 000000000..3dfa7fa44
--- /dev/null
+++ b/packages/quiz/can-you-explain-the-difference-between-coding-a-website-to-be-responsive-versus-using-a-mobile-first-strategy/en-US.mdx
@@ -0,0 +1,42 @@
+---
+title: Can you explain the difference between coding a website to be responsive versus using a mobile-first strategy?
+---
+
+These two approaches are not mutually exclusive. Making a website responsive means that some elements will respond by adapting its size or other functionality according to the device's screen size, typically the viewport width, through CSS media queries, for example, making the font size smaller on smaller devices.
+
+```css
+@media (min-width: 768px) {
+ .my-class {
+ font-size: 24px;
+ }
+}
+
+@media (max-width: 767px) {
+ .my-class {
+ font-size: 12px;
+ }
+}
+```
+
+A mobile-first strategy is also responsive, however it agrees we should default and define all the styles for mobile devices, and only add specific responsive rules to other devices later. Following the previous example:
+
+```css
+.my-class {
+ font-size: 12px;
+}
+
+@media (min-width: 768px) {
+ .my-class {
+ font-size: 24px;
+ }
+}
+```
+
+A mobile-first strategy has the following main advantages:
+
+- It's more performant on mobile devices, since all the rules applied for them don't have to be validated against any media queries.
+- Mobile-first designs are more likely to be usable on larger devices (will just appear more stretched, but still usable). However, the reverse is not the case.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/can-you-explain-the-difference-between-coding-a-website-to-be-responsive-versus-using-a-mobile-first-strategy/metadata.json b/packages/quiz/can-you-explain-the-difference-between-coding-a-website-to-be-responsive-versus-using-a-mobile-first-strategy/metadata.json
new file mode 100644
index 000000000..280cbf1c7
--- /dev/null
+++ b/packages/quiz/can-you-explain-the-difference-between-coding-a-website-to-be-responsive-versus-using-a-mobile-first-strategy/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "can-you-explain-the-difference-between-coding-a-website-to-be-responsive-versus-using-a-mobile-first-strategy",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/can-you-give-an-example-for-destructuring-an-object-or-an-array/en-US.mdx b/packages/quiz/can-you-give-an-example-for-destructuring-an-object-or-an-array/en-US.mdx
new file mode 100644
index 000000000..ed5e9aa99
--- /dev/null
+++ b/packages/quiz/can-you-give-an-example-for-destructuring-an-object-or-an-array/en-US.mdx
@@ -0,0 +1,42 @@
+---
+title: Can you give an example for destructuring an object or an array?
+---
+
+Destructuring is an expression available in ES2015 which enables a succinct and convenient way to extract values of Objects or Arrays and place them into distinct variables.
+
+## Array destructuring
+
+```js
+// Variable assignment.
+const foo = ['one', 'two', 'three'];
+
+const [one, two, three] = foo;
+console.log(one); // "one"
+console.log(two); // "two"
+console.log(three); // "three"
+```
+
+```js
+// Swapping variables
+let a = 1;
+let b = 3;
+
+[a, b] = [b, a];
+console.log(a); // 3
+console.log(b); // 1
+```
+
+## Object destructuring
+
+```js
+// Variable assignment.
+const o = { p: 42, q: true };
+const { p, q } = o;
+
+console.log(p); // 42
+console.log(q); // true
+```
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/can-you-give-an-example-for-destructuring-an-object-or-an-array/metadata.json b/packages/quiz/can-you-give-an-example-for-destructuring-an-object-or-an-array/metadata.json
new file mode 100644
index 000000000..cec49cca1
--- /dev/null
+++ b/packages/quiz/can-you-give-an-example-for-destructuring-an-object-or-an-array/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "can-you-give-an-example-for-destructuring-an-object-or-an-array",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/can-you-give-an-example-of-a-curry-function-and-why-this-syntax-offers-an-advantage/en-US.mdx b/packages/quiz/can-you-give-an-example-of-a-curry-function-and-why-this-syntax-offers-an-advantage/en-US.mdx
new file mode 100644
index 000000000..dc1159400
--- /dev/null
+++ b/packages/quiz/can-you-give-an-example-of-a-curry-function-and-why-this-syntax-offers-an-advantage/en-US.mdx
@@ -0,0 +1,37 @@
+---
+title: Can you give an example of a curry function and why this syntax offers an advantage?
+---
+
+Currying is a pattern where a function with more than one parameter is broken into multiple functions that, when called in series, will accumulate all of the required parameters one at a time. This technique can be useful for making code written in a functional style easier to read and compose. It's important to note that for a function to be curried, it needs to start out as one function, then broken out into a sequence of functions that each accepts one parameter.
+
+```js
+function curry(fn) {
+ if (fn.length === 0) {
+ return fn;
+ }
+
+ function _curried(depth, args) {
+ return function (newArgument) {
+ if (depth - 1 === 0) {
+ return fn(...args, newArgument);
+ }
+ return _curried(depth - 1, [...args, newArgument]);
+ };
+ }
+
+ return _curried(fn.length, []);
+}
+
+function add(a, b) {
+ return a + b;
+}
+
+var curriedAdd = curry(add);
+var addFive = curriedAdd(5);
+
+var result = [0, 1, 2, 3, 4, 5].map(addFive); // [5, 6, 7, 8, 9, 10]
+```
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/can-you-give-an-example-of-a-curry-function-and-why-this-syntax-offers-an-advantage/metadata.json b/packages/quiz/can-you-give-an-example-of-a-curry-function-and-why-this-syntax-offers-an-advantage/metadata.json
new file mode 100644
index 000000000..c5047a7e8
--- /dev/null
+++ b/packages/quiz/can-you-give-an-example-of-a-curry-function-and-why-this-syntax-offers-an-advantage/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "can-you-give-an-example-of-a-curry-function-and-why-this-syntax-offers-an-advantage",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/can-you-give-an-example-of-an-media-property-other-than-screen/en-US.mdx b/packages/quiz/can-you-give-an-example-of-an-media-property-other-than-screen/en-US.mdx
new file mode 100644
index 000000000..c082e99ac
--- /dev/null
+++ b/packages/quiz/can-you-give-an-example-of-an-media-property-other-than-screen/en-US.mdx
@@ -0,0 +1,24 @@
+---
+title: Can you give an example of an `@media` property other than `screen`?
+---
+
+There are four types of `@media` properties (including `screen`):
+
+- `all`: for all media type devices
+- `print`: for printers
+- `speech`: for screen readers that "reads" the page out loud
+- `screen`: for computer screens, tablets, smart-phones etc.
+
+Here is an example of `print` media type's usage:
+
+```css
+@media print {
+ body {
+ color: black;
+ }
+}
+```
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/can-you-give-an-example-of-an-media-property-other-than-screen/metadata.json b/packages/quiz/can-you-give-an-example-of-an-media-property-other-than-screen/metadata.json
new file mode 100644
index 000000000..5bcfd2a05
--- /dev/null
+++ b/packages/quiz/can-you-give-an-example-of-an-media-property-other-than-screen/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "can-you-give-an-example-of-an-media-property-other-than-screen",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/can-you-offer-a-use-case-for-the-new-arrow-greater-function-syntax-how-does-this-new-syntax-differ-from-other-functions/en-US.mdx b/packages/quiz/can-you-offer-a-use-case-for-the-new-arrow-greater-function-syntax-how-does-this-new-syntax-differ-from-other-functions/en-US.mdx
new file mode 100644
index 000000000..cf04491c6
--- /dev/null
+++ b/packages/quiz/can-you-offer-a-use-case-for-the-new-arrow-greater-function-syntax-how-does-this-new-syntax-differ-from-other-functions/en-US.mdx
@@ -0,0 +1,10 @@
+---
+title: Can you offer a use case for the new arrow => function syntax?
+subtitle: How does this new syntax differ from other functions?
+---
+
+One obvious benefit of arrow functions is to simplify the syntax needed to create functions, without a need for the `function` keyword. The `this` within arrow functions is also bound to the enclosing scope which is different compared to regular functions where the `this` is determined by the object calling it. Lexically-scoped `this` is useful when invoking callbacks especially in React components.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/can-you-offer-a-use-case-for-the-new-arrow-greater-function-syntax-how-does-this-new-syntax-differ-from-other-functions/metadata.json b/packages/quiz/can-you-offer-a-use-case-for-the-new-arrow-greater-function-syntax-how-does-this-new-syntax-differ-from-other-functions/metadata.json
new file mode 100644
index 000000000..458b4cc9c
--- /dev/null
+++ b/packages/quiz/can-you-offer-a-use-case-for-the-new-arrow-greater-function-syntax-how-does-this-new-syntax-differ-from-other-functions/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "can-you-offer-a-use-case-for-the-new-arrow-greater-function-syntax-how-does-this-new-syntax-differ-from-other-functions",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "high",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/create-a-for-loop-that-iterates-up-to-100-while-outputting-fizz-at-multiples-of-3-buzz-at-multiples-of-5-and-fizzbuzz-at-multiples-of-3-and-5/en-US.mdx b/packages/quiz/create-a-for-loop-that-iterates-up-to-100-while-outputting-fizz-at-multiples-of-3-buzz-at-multiples-of-5-and-fizzbuzz-at-multiples-of-3-and-5/en-US.mdx
new file mode 100644
index 000000000..790d9687c
--- /dev/null
+++ b/packages/quiz/create-a-for-loop-that-iterates-up-to-100-while-outputting-fizz-at-multiples-of-3-buzz-at-multiples-of-5-and-fizzbuzz-at-multiples-of-3-and-5/en-US.mdx
@@ -0,0 +1,19 @@
+---
+title: Create a for loop that iterates up to `100` while outputting **"fizz"** at multiples of `3`, **"buzz"** at multiples of `5` and **"fizzbuzz"** at multiples of `3` and `5`
+---
+
+Check out this version of FizzBuzz by [Paul Irish](https://gist.github.com/jaysonrowe/1592432#gistcomment-790724).
+
+```js
+for (let i = 1; i <= 100; i++) {
+ let f = i % 3 == 0,
+ b = i % 5 == 0;
+ console.log(f ? (b ? 'FizzBuzz' : 'Fizz') : b ? 'Buzz' : i);
+}
+```
+
+It is not advisable to write the above during interviews though. Just stick with the long but clear approach. For more wacky versions of FizzBuzz, check out the reference link below.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/create-a-for-loop-that-iterates-up-to-100-while-outputting-fizz-at-multiples-of-3-buzz-at-multiples-of-5-and-fizzbuzz-at-multiples-of-3-and-5/metadata.json b/packages/quiz/create-a-for-loop-that-iterates-up-to-100-while-outputting-fizz-at-multiples-of-3-buzz-at-multiples-of-5-and-fizzbuzz-at-multiples-of-3-and-5/metadata.json
new file mode 100644
index 000000000..3700e2390
--- /dev/null
+++ b/packages/quiz/create-a-for-loop-that-iterates-up-to-100-while-outputting-fizz-at-multiples-of-3-buzz-at-multiples-of-5-and-fizzbuzz-at-multiples-of-3-and-5/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "create-a-for-loop-that-iterates-up-to-100-while-outputting-fizz-at-multiples-of-3-buzz-at-multiples-of-5-and-fizzbuzz-at-multiples-of-3-and-5",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/css-link-between-head-and-js-script-just-before-body/en-US.mdx b/packages/quiz/css-link-between-head-and-js-script-just-before-body/en-US.mdx
new file mode 100644
index 000000000..6d71668d6
--- /dev/null
+++ b/packages/quiz/css-link-between-head-and-js-script-just-before-body/en-US.mdx
@@ -0,0 +1,28 @@
+---
+title: Why is it generally a good idea to position CSS ``s between `
` and JS `
+
+
+```
+
+```js
+// File loaded from https://example.com?callback=printData
+printData({ name: 'John Doe' });
+```
+
+The client has to have the `printData` function in its global scope and the function will be executed by the client when the response from the cross-origin domain is received.
+
+JSONP can be unsafe and has some security implications. As JSONP is really JavaScript, it can do everything else JavaScript can do, so you need to trust the provider of the JSONP data.
+
+These days, [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) is the recommended approach and JSONP is seen as a hack.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-how-jsonp-works-and-how-its-not-really-ajax/metadata.json b/packages/quiz/explain-how-jsonp-works-and-how-its-not-really-ajax/metadata.json
new file mode 100644
index 000000000..6df745319
--- /dev/null
+++ b/packages/quiz/explain-how-jsonp-works-and-how-its-not-really-ajax/metadata.json
@@ -0,0 +1,15 @@
+{
+ "slug": "explain-how-jsonp-works-and-how-its-not-really-ajax",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript",
+ "network",
+ "security"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-how-prototypal-inheritance-works/en-US.mdx b/packages/quiz/explain-how-prototypal-inheritance-works/en-US.mdx
new file mode 100644
index 000000000..f6fea8e30
--- /dev/null
+++ b/packages/quiz/explain-how-prototypal-inheritance-works/en-US.mdx
@@ -0,0 +1,81 @@
+---
+title: Explain how prototypal inheritance works
+---
+
+This is an extremely common JavaScript interview question. All JavaScript objects have a `__proto__` property with the exception of objects created with `Object.create(null)`, that is a reference to another object, which is called the object's "prototype". When a property is accessed on an object and if the property is not found on that object, the JavaScript engine looks at the object's `__proto__`, and the `__proto__`'s `__proto__` and so on, until it finds the property defined on one of the `__proto__`s or until it reaches the end of the prototype chain. This behavior simulates classical inheritance, but it is really more of [delegation than inheritance](https://davidwalsh.name/javascript-objects).
+
+## Example of Prototypal Inheritance
+
+```js
+function Parent() {
+ this.name = 'Parent';
+}
+
+Parent.prototype.greet = function () {
+ console.log('Hello from ' + this.name);
+};
+
+const child = Object.create(Parent.prototype);
+
+// Call parent constructor with child
+Parent.call(child);
+
+child.cry = function () {
+ console.log('waaaaaahhhh!');
+};
+
+child.cry();
+// waaaaaahhhh!
+
+child.greet();
+// hello from Parent
+
+child.constructor;
+// ƒ Parent() {
+// this.name = 'Parent';
+// }
+
+child.constructor.name;
+// 'Parent'
+```
+
+Things to note are:
+
+- `.greet` is not defined on the _child_, so the engine goes up the prototype chain and finds `.greet` off the inherited from _Parent_.
+- We need to call `Object.create` in one of following ways for the prototype methods to be inherited:
+ - Object.create(Parent.prototype);
+ - Object.create(new Parent(null));
+ - Object.create(objLiteral);
+ - Currently, `child.constructor` is pointing to the `Parent`:
+
+If we'd like to correct this, one option would be to do:
+
+```js
+function Parent() {
+ this.name = 'Parent';
+}
+
+Parent.prototype.greet = function () {
+ console.log('Hello from ' + this.name);
+};
+
+function Child() {
+ Parent.call(this);
+ this.name = 'Child';
+}
+
+Child.prototype = Object.create(Parent.prototype);
+Child.prototype.constructor = Child;
+
+const child = new Child();
+
+child.greet();
+// hello from Child
+
+child.constructor.name;
+// 'Child'
+```
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-how-prototypal-inheritance-works/metadata.json b/packages/quiz/explain-how-prototypal-inheritance-works/metadata.json
new file mode 100644
index 000000000..768f274e6
--- /dev/null
+++ b/packages/quiz/explain-how-prototypal-inheritance-works/metadata.json
@@ -0,0 +1,14 @@
+{
+ "slug": "explain-how-prototypal-inheritance-works",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "high",
+ "difficulty": "medium",
+ "ranking": 1
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-how-this-works-in-javascript/en-US.mdx b/packages/quiz/explain-how-this-works-in-javascript/en-US.mdx
new file mode 100644
index 000000000..0185565dc
--- /dev/null
+++ b/packages/quiz/explain-how-this-works-in-javascript/en-US.mdx
@@ -0,0 +1,22 @@
+---
+title: Explain how `this` works in JavaScript
+---
+
+There's no simple explanation for `this`; it is one of the most confusing concepts in JavaScript. A hand-wavey explanation is that the value of `this` depends on how the function is called. Having read many explanations on `this` online, [Arnav Aggrawal](https://medium.com/@arnav_aggarwal)'s explanation was the clearest. The following rules are applied:
+
+1. If the `new` keyword is used when calling the function, `this` inside the function is a brand new object.
+1. If `apply`, `call`, or `bind` are used to call/create a function, `this` inside the function is the object that is passed in as the argument.
+1. If a function is called as a method, such as `obj.method()` — `this` is the object that the function is a property of.
+1. If a function is invoked as a free function invocation, meaning it was invoked without any of the conditions present above, `this` is the global object. In a browser, it is the `window` object. If in strict mode (`'use strict'`), `this` will be `undefined` instead of the global object.
+1. If multiple of the above rules apply, the rule that is higher wins and will set the `this` value.
+1. If the function is an ES2015 arrow function, it ignores all the rules above and receives the `this` value of its surrounding scope at the time it is created.
+
+For an in-depth explanation, do check out his [article on Medium](https://codeburst.io/the-simple-rules-to-this-in-javascript-35d97f31bde3).
+
+#### Can you give an example of one of the ways that working with this has changed in ES2015?
+
+ES2015 allows you to use [arrow functions](http://2ality.com/2017/12/alternate-this.html#arrow-functions) which uses the [enclosing lexical scope](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_separate_this). This is usually convenient, but does prevent the caller from controlling context via `.call` or `.apply`—the consequences being that a library such as `jQuery` will not properly bind `this` in your event handler functions. Thus, it's important to keep this in mind when refactoring large legacy applications.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-how-this-works-in-javascript/metadata.json b/packages/quiz/explain-how-this-works-in-javascript/metadata.json
new file mode 100644
index 000000000..3ef5759aa
--- /dev/null
+++ b/packages/quiz/explain-how-this-works-in-javascript/metadata.json
@@ -0,0 +1,15 @@
+{
+ "slug": "explain-how-this-works-in-javascript",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "high",
+ "difficulty": "medium",
+ "featured": true,
+ "ranking": 1
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-the-difference-between-mutable-and-immutable-objects/en-US.mdx b/packages/quiz/explain-the-difference-between-mutable-and-immutable-objects/en-US.mdx
new file mode 100644
index 000000000..e1ef736ad
--- /dev/null
+++ b/packages/quiz/explain-the-difference-between-mutable-and-immutable-objects/en-US.mdx
@@ -0,0 +1,85 @@
+---
+title: Explain the difference between mutable and immutable objects
+---
+
+Immutability is a core principle in functional programming and has lots to offer to object-oriented programs as well. A mutable object is an object whose state can be modified after it is created. An immutable object is an object whose state cannot be modified after it is created.
+
+## What is an example of an immutable object in JavaScript?
+
+In JavaScript, some built-in types (numbers, strings) are immutable, but custom objects are generally mutable.
+
+Some built-in immutable JavaScript objects are `Math`, `Date`.
+
+Here are a few ways to add/simulate immutability on plain JavaScript objects.
+
+### Object Constant Properties
+
+By combining `writable: false` and `configurable: false`, you can essentially create a constant (cannot be changed, redefined or deleted) as an object property, like:
+
+```js
+let myObject = {};
+Object.defineProperty(myObject, 'number', {
+ value: 42,
+ writable: false,
+ configurable: false,
+});
+console.log(myObject.number); // 42
+myObject.number = 43;
+console.log(myObject.number); // 42
+```
+
+### Prevent Extensions
+
+If you want to prevent an object from having new properties added to it, but otherwise leave the rest of the object's properties alone, call `Object.preventExtensions(...)`:
+
+```js
+let myObject = {
+ a: 2,
+};
+
+Object.preventExtensions(myObject);
+
+myObject.b = 3;
+myObject.b; // undefined
+```
+
+In non-strict mode, the creation of `b` fails silently. In strict mode, it throws a `TypeError`.
+
+### Seal
+
+`Object.seal()` creates a "sealed" object, which means it takes an existing object and essentially calls `Object.preventExtensions()` on it, but also marks all its existing properties as `configurable: false`.
+
+So, not only can you not add any more properties, but you also cannot reconfigure or delete any existing properties (though you can still modify their values).
+
+### Freeze
+
+`Object.freeze()` creates a frozen object, which means it takes an existing object and essentially calls `Object.seal()` on it, but it also marks all "data accessor" properties as writable:false, so that their values cannot be changed.
+
+This approach is the highest level of immutability that you can attain for an object itself, as it prevents any changes to the object or to any of its direct properties (though, as mentioned above, the contents of any referenced other objects are unaffected).
+
+```js
+let immutableObject = Object.freeze({});
+```
+
+Freezing an object does not allow new properties to be added to an object and prevents users from removing or altering the existing properties. `Object.freeze()` preserves the enumerability, configurability, writability and the prototype of the object. It returns the passed object and does not create a frozen copy.
+
+## What are the pros and cons of immutability?
+
+### Pros
+
+- Easier change detection: Object equality can be determined in a performant and easy manner through referential equality. This is useful for comparing object differences in React and Redux.
+- Less complicated: Programs with immutable objects are less complicated to think about, since you don't need to worry about how an object may evolve over time.
+- Easy sharing via references: One copy of an object is just as good as another, so you can cache objects or reuse the same object multiple times.
+- Thread-safe: Immutable objects can be safely used between threads in a multi-threaded environment since there is no risk of them being modified in other concurrently running threads.
+- Less memory needed: Using libraries like [Immer](https://immerjs.github.io/immer/) and [Immutable.js](https://immutable-js.com/), objects are modified using structural sharing and less memory is needed for having multiple objects with similar structures.
+- No need for defensive copying: Defensive copies are no longer necessary when immutable objects are returning from or passed to functions, since there is no possibility an immutable object will be modified by it.
+
+### Cons
+
+- Complex to create yourself: Naive implementations of immutable data structures and its operations can result in extremely poor performance because new objects are created each time. It is recommended to use libraries for efficient immutable data structures and operations that leverage on structural sharing.
+- Potential negative performance: Allocation (and deallocation) of many small objects rather than modifying existing ones can cause a performance impact. The complexity of either the allocator or the garbage collector usually depends on the number of objects on the heap.
+- Complexity for cyclic data structures: Cyclic data structures such as graphs are difficult to build. If you have two objects which can't be modified after initialization, how can you get them to point to each other?
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-the-difference-between-mutable-and-immutable-objects/metadata.json b/packages/quiz/explain-the-difference-between-mutable-and-immutable-objects/metadata.json
new file mode 100644
index 000000000..e8bb134d4
--- /dev/null
+++ b/packages/quiz/explain-the-difference-between-mutable-and-immutable-objects/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "explain-the-difference-between-mutable-and-immutable-objects",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-the-difference-between-synchronous-and-asynchronous-functions/en-US.mdx b/packages/quiz/explain-the-difference-between-synchronous-and-asynchronous-functions/en-US.mdx
new file mode 100644
index 000000000..022692d9c
--- /dev/null
+++ b/packages/quiz/explain-the-difference-between-synchronous-and-asynchronous-functions/en-US.mdx
@@ -0,0 +1,11 @@
+---
+title: Explain the difference between synchronous and asynchronous functions
+---
+
+Synchronous functions are blocking while asynchronous functions are not. In synchronous functions, statements complete before the next statement is run. In this case, the program is evaluated exactly in order of the statements and execution of the program is paused if one of the statements take a very long time.
+
+Asynchronous functions usually accept a callback as a parameter and execution continue on the next line immediately after the asynchronous function is invoked. The callback is only invoked when the asynchronous operation is complete and the call stack is empty. Heavy duty operations such as loading data from a web server or querying a database should be done asynchronously so that the main thread can continue executing other operations instead of blocking until that long operation to complete (in the case of browsers, the UI will freeze).
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-the-difference-between-synchronous-and-asynchronous-functions/metadata.json b/packages/quiz/explain-the-difference-between-synchronous-and-asynchronous-functions/metadata.json
new file mode 100644
index 000000000..f5c84dd70
--- /dev/null
+++ b/packages/quiz/explain-the-difference-between-synchronous-and-asynchronous-functions/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "explain-the-difference-between-synchronous-and-asynchronous-functions",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "high",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-the-differences-on-the-usage-of-foo-between-function-foo-and-var-foo-function/en-US.mdx b/packages/quiz/explain-the-differences-on-the-usage-of-foo-between-function-foo-and-var-foo-function/en-US.mdx
new file mode 100644
index 000000000..fee126570
--- /dev/null
+++ b/packages/quiz/explain-the-differences-on-the-usage-of-foo-between-function-foo-and-var-foo-function/en-US.mdx
@@ -0,0 +1,27 @@
+---
+title: Explain the differences on the usage of `foo` between `function foo() {}` and `var foo = function() {}`
+---
+
+The former is a function declaration while the latter is a function expression. The key difference is that function declarations have its body hoisted but the bodies of function expressions are not (they have the same hoisting behavior as variables). For more explanation on hoisting, refer to the question on [hoisting](/questions/quiz/explain-hoisting). If you try to invoke a function expression before it is defined, you will get an `Uncaught TypeError: XXX is not a function` error.
+
+## Function Declaration
+
+```js
+foo(); // 'FOOOOO'
+function foo() {
+ console.log('FOOOOO');
+}
+```
+
+## Function Expression
+
+```js
+foo(); // Uncaught TypeError: foo is not a function
+var foo = function () {
+ console.log('FOOOOO');
+};
+```
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-the-differences-on-the-usage-of-foo-between-function-foo-and-var-foo-function/metadata.json b/packages/quiz/explain-the-differences-on-the-usage-of-foo-between-function-foo-and-var-foo-function/metadata.json
new file mode 100644
index 000000000..a78218415
--- /dev/null
+++ b/packages/quiz/explain-the-differences-on-the-usage-of-foo-between-function-foo-and-var-foo-function/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "explain-the-differences-on-the-usage-of-foo-between-function-foo-and-var-foo-function",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-the-same-origin-policy-with-regards-to-javascript/en-US.mdx b/packages/quiz/explain-the-same-origin-policy-with-regards-to-javascript/en-US.mdx
new file mode 100644
index 000000000..f6598cb69
--- /dev/null
+++ b/packages/quiz/explain-the-same-origin-policy-with-regards-to-javascript/en-US.mdx
@@ -0,0 +1,9 @@
+---
+title: Explain the same-origin policy with regards to JavaScript
+---
+
+The same-origin policy prevents JavaScript from making requests across domain boundaries. An origin is defined as a combination of URI scheme, hostname, and port number. This policy prevents a malicious script on one page from obtaining access to sensitive data on another web page through that page's Document Object Model.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-the-same-origin-policy-with-regards-to-javascript/metadata.json b/packages/quiz/explain-the-same-origin-policy-with-regards-to-javascript/metadata.json
new file mode 100644
index 000000000..48841e810
--- /dev/null
+++ b/packages/quiz/explain-the-same-origin-policy-with-regards-to-javascript/metadata.json
@@ -0,0 +1,14 @@
+{
+ "slug": "explain-the-same-origin-policy-with-regards-to-javascript",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript",
+ "network"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-what-a-single-page-app-is-and-how-to-make-one-seo-friendly/en-US.mdx b/packages/quiz/explain-what-a-single-page-app-is-and-how-to-make-one-seo-friendly/en-US.mdx
new file mode 100644
index 000000000..570886403
--- /dev/null
+++ b/packages/quiz/explain-what-a-single-page-app-is-and-how-to-make-one-seo-friendly/en-US.mdx
@@ -0,0 +1,23 @@
+---
+title: Explain what a single page app is and how to make one SEO-friendly
+---
+
+Web developers these days refer to the products they build as web apps, rather than websites. While there is no strict difference between the two terms, web apps tend to be highly interactive and dynamic, allowing the user to perform actions and receive a response to their action. Traditionally, the browser receives HTML from the server and renders it. When the user navigates to another URL, a full-page refresh is required and the server sends fresh new HTML to the new page. This is called server-side rendering.
+
+However, in modern SPAs, client-side rendering is used instead. The browser loads the initial page from the server, along with the scripts (frameworks, libraries, app code) and stylesheets required for the whole app. When the user navigates to other pages, a page refresh is not triggered. The URL of the page is updated via the [HTML5 History API](https://developer.mozilla.org/en-US/docs/Web/API/History_API). New data required for the new page, usually in JSON format, is retrieved by the browser via [AJAX](https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started) requests to the server. The SPA then dynamically updates the page with the data via JavaScript, which it has already downloaded in the initial page load. This model is similar to how native mobile apps work.
+
+## Pros
+
+- The app feels more responsive and users do not see the flash between page navigations due to full-page refreshes.
+- Fewer HTTP requests are made to the server, as the same assets do not have to be downloaded again for each page load.
+- Clear separation of the concerns between the client and the server; you can easily build new clients for different platforms (e.g. mobile, chatbots, smart watches) without having to modify the server code. You can also modify the technology stack on the client and server independently, as long as the API contract is not broken.
+
+## Cons
+
+- Heavier initial page load due to the loading of framework, app code, and assets required for multiple pages.
+- There's an additional step to be done on your server which is to configure it to route all requests to a single entry point and allow client-side routing to take over from there.
+- SPAs are reliant on JavaScript to render content, but not all search engines execute JavaScript during crawling, and they may see empty content on your page. This inadvertently hurts the Search Engine Optimization (SEO) of your app. However, most of the time, when you are building apps, SEO is not the most important factor, as not all the content needs to be indexable by search engines. To overcome this, you can either server-side render your app or use services such as [Prerender](https://prerender.io/) to "render your javascript in a browser, save the static HTML, and return that to the crawlers".
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-what-a-single-page-app-is-and-how-to-make-one-seo-friendly/metadata.json b/packages/quiz/explain-what-a-single-page-app-is-and-how-to-make-one-seo-friendly/metadata.json
new file mode 100644
index 000000000..7bb79a948
--- /dev/null
+++ b/packages/quiz/explain-what-a-single-page-app-is-and-how-to-make-one-seo-friendly/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "explain-what-a-single-page-app-is-and-how-to-make-one-seo-friendly",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-why-the-following-doesnt-work-as-an-iife-function-foo--what-needs-to-be-changed-to-properly-make-it-an-iife/en-US.mdx b/packages/quiz/explain-why-the-following-doesnt-work-as-an-iife-function-foo--what-needs-to-be-changed-to-properly-make-it-an-iife/en-US.mdx
new file mode 100644
index 000000000..e558051fe
--- /dev/null
+++ b/packages/quiz/explain-why-the-following-doesnt-work-as-an-iife-function-foo--what-needs-to-be-changed-to-properly-make-it-an-iife/en-US.mdx
@@ -0,0 +1,21 @@
+---
+title: "Explain why the following doesn't work as an IIFE: `function foo(){ }();`. What needs to be changed to properly make it an IIFE?"
+---
+
+IIFE stands for Immediately Invoked Function Expressions. The JavaScript parser reads `function foo(){ }();` as `function foo(){ }` and `();`, where the former is a _function declaration_ and the latter (a pair of parentheses) is an attempt at calling a function but there is no name specified, hence it throws `Uncaught SyntaxError: Unexpected token )`.
+
+Here are two ways to fix it that involves adding more parentheses: `(function foo(){ })()` and `(function foo(){ }())`. Statements that begin with `function` are considered to be _function declarations_; by wrapping this function within `()`, it becomes a _function expression_ which can then be executed with the subsequent `()`. These functions are not exposed in the global scope and you can even omit its name if you do not need to reference itself within the body.
+
+You might also use `void` operator: `void function foo(){ }();`. Unfortunately, there is one issue with such approach. The evaluation of given expression is always `undefined`, so if your IIFE function returns anything, you can't use it. An example:
+
+```js
+const foo = void (function bar() {
+ return 'foo';
+})();
+
+console.log(foo); // undefined
+```
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/explain-why-the-following-doesnt-work-as-an-iife-function-foo--what-needs-to-be-changed-to-properly-make-it-an-iife/metadata.json b/packages/quiz/explain-why-the-following-doesnt-work-as-an-iife-function-foo--what-needs-to-be-changed-to-properly-make-it-an-iife/metadata.json
new file mode 100644
index 000000000..4a0611cc6
--- /dev/null
+++ b/packages/quiz/explain-why-the-following-doesnt-work-as-an-iife-function-foo--what-needs-to-be-changed-to-properly-make-it-an-iife/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "explain-why-the-following-doesnt-work-as-an-iife-function-foo--what-needs-to-be-changed-to-properly-make-it-an-iife",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/explain-your-understanding-of-the-box-model-and-how-you-would-tell-the-browser-in-css-to-render-your-layout-in-different-box-models/en-US.mdx b/packages/quiz/explain-your-understanding-of-the-box-model-and-how-you-would-tell-the-browser-in-css-to-render-your-layout-in-different-box-models/en-US.mdx
new file mode 100644
index 000000000..1eb5a260e
--- /dev/null
+++ b/packages/quiz/explain-your-understanding-of-the-box-model-and-how-you-would-tell-the-browser-in-css-to-render-your-layout-in-different-box-models/en-US.mdx
@@ -0,0 +1,36 @@
+---
+title: Explain your understanding of the box model and how you would tell the browser in CSS to render your layout in different box models.
+---
+
+The CSS box model describes the rectangular boxes that are generated for elements in the document tree and laid out according to the visual formatting model. Each box has a content area (e.g. text, an image, etc.) and optional surrounding `padding`, `border`, and `margin` areas.
+
+The CSS box model is responsible for calculating:
+
+- How much space a block element takes up.
+- Whether or not borders and/or margins overlap, or collapse.
+- A box's dimensions.
+
+## Box Model Rules
+
+- The dimensions of a block element are calculated by `width`, `height`, `padding`, `border`s.
+- If no `height` is specified, a block element will be as high as the content it contains, plus `padding` (unless there are floats, for which, see [describe floats and how they work](/questions/quiz/describe-floats-and-how-they-work)).
+- If no `width` is specified, a non-`float`-ed block element will expand to fit the width of its parent minus the `padding`, unless it has a `max-width` property set, in which case it will be no wider than the specified maximum width.
+ - Some block-level elements (e.g. `table`, `figure`, and `input`) have inherent or default width values, and may not expand to fill the full width of their parent container.
+ - Note: `span` is an inline-level element and does not have a default width, so it will not expand to fit.
+- The `height` of an element is calculated by the content's `height`.
+- The `width` of an element is calculated by the content's `width`.
+- By default (`box-sizing: content-box`), `padding`s and `border`s are not part of the `width` and `height` of an element.
+
+Note that `margin`s are not counted towards the actual size of the box. It affects the total space that the box will take up on the page, but only the space outside the box. The box's area stops at the `border` — it does not extend into the `margin`.
+
+## Extra
+
+Look up the `box-sizing` property, which affects how the total heights and widths of elements are calculated.
+
+- `box-sizing: content-box`: This is the default value of `box-sizing` and adheres to the rules above.
+- `box-sizing: border-box`: The `width` and `height` will include the content, padding and border, but not including the margin. This is a much more intuitive way to think about boxes and hence many CSS frameworks set `* { box-sizing: border-box; }` globally, so that all elements use such a box model by default. See the [question on `box-sizing: border-box`](/questions/css/what-does-box-sizing-border-box-do-what-are-its-advantages) for more information.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
+- [The box model | MDN](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model#the_standard_css_box_model)
diff --git a/packages/quiz/explain-your-understanding-of-the-box-model-and-how-you-would-tell-the-browser-in-css-to-render-your-layout-in-different-box-models/metadata.json b/packages/quiz/explain-your-understanding-of-the-box-model-and-how-you-would-tell-the-browser-in-css-to-render-your-layout-in-different-box-models/metadata.json
new file mode 100644
index 000000000..6d56b057a
--- /dev/null
+++ b/packages/quiz/explain-your-understanding-of-the-box-model-and-how-you-would-tell-the-browser-in-css-to-render-your-layout-in-different-box-models/metadata.json
@@ -0,0 +1,19 @@
+{
+ "slug": "explain-your-understanding-of-the-box-model-and-how-you-would-tell-the-browser-in-css-to-render-your-layout-in-different-box-models",
+ "languages": [],
+ "companies": [
+ "amazon",
+ "google",
+ "linkedin"
+ ],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "high",
+ "difficulty": "medium",
+ "featured": true,
+ "ranking": 1
+}
\ No newline at end of file
diff --git a/packages/quiz/have-you-ever-used-a-grid-system-and-if-so-what-do-you-prefer/en-US.mdx b/packages/quiz/have-you-ever-used-a-grid-system-and-if-so-what-do-you-prefer/en-US.mdx
new file mode 100644
index 000000000..006df9e3b
--- /dev/null
+++ b/packages/quiz/have-you-ever-used-a-grid-system-and-if-so-what-do-you-prefer/en-US.mdx
@@ -0,0 +1,13 @@
+---
+title: Have you ever used a grid system, and if so, what do you prefer?
+---
+
+Before Flex became popular (around 2014), the `float`-based grid system was the most reliable because it still has the most browser support among the alternative existing systems (flex, grid). Bootstrap was using the `float` approach until Bootstrap 4 which switched to the `flex`-based approach.
+
+Today, `flex` is the recommended approach for building grid systems and has [decent browser support (99.64%)](https://caniuse.com/#search=flex).
+
+For the adventurous, they can look into [CSS Grid Layout](https://css-tricks.com/snippets/css/complete-guide-grid/), which uses the shiny new `grid` property. Grid is a two-dimensional grid-based layout system as compared to Flexbox, which is one-dimensional.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/have-you-ever-used-a-grid-system-and-if-so-what-do-you-prefer/metadata.json b/packages/quiz/have-you-ever-used-a-grid-system-and-if-so-what-do-you-prefer/metadata.json
new file mode 100644
index 000000000..f797853c5
--- /dev/null
+++ b/packages/quiz/have-you-ever-used-a-grid-system-and-if-so-what-do-you-prefer/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "have-you-ever-used-a-grid-system-and-if-so-what-do-you-prefer",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/have-you-ever-worked-with-retina-graphics-if-so-when-and-what-techniques-did-you-use/en-US.mdx b/packages/quiz/have-you-ever-worked-with-retina-graphics-if-so-when-and-what-techniques-did-you-use/en-US.mdx
new file mode 100644
index 000000000..40bf3da24
--- /dev/null
+++ b/packages/quiz/have-you-ever-worked-with-retina-graphics-if-so-when-and-what-techniques-did-you-use/en-US.mdx
@@ -0,0 +1,36 @@
+---
+title: Have you ever worked with retina graphics?
+subtitle: If so, when and what techniques did you use?
+---
+
+_Retina_ is just a marketing term to refer to high resolution screens with a pixel ratio bigger than 1. The key thing to know is that using a pixel ratio means these displays are emulating a lower resolution screen in order to show elements with the same size. Nowadays we consider all mobile devices _retina_ defacto displays.
+
+Browsers by default render DOM elements according to the device resolution, except for images.
+
+In order to have crisp, good-looking graphics that make the best of retina displays we need to use high resolution images whenever possible. However using always the highest resolution images will have an impact on performance as more bytes will need to be sent over the wire.
+
+To overcome this problem, we can use responsive images, as specified in HTML5. It requires making available different resolution files of the same image to the browser and let it decide which image is best, using the html attribute `srcset` and optionally `sizes`, for instance:
+
+```html
+
+
+
+```
+
+It is important to note that browsers which don't support HTML5's `srcset` (i.e. IE11) will ignore it and use `src` instead. If we really need to support IE11 and we want to provide this feature for performance reasons, we can use a JavaScript polyfill, e.g. Picturefill (link in the references).
+
+For icons, to use SVGs where possible, as they render very crisply regardless of resolution.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/have-you-ever-worked-with-retina-graphics-if-so-when-and-what-techniques-did-you-use/metadata.json b/packages/quiz/have-you-ever-worked-with-retina-graphics-if-so-when-and-what-techniques-did-you-use/metadata.json
new file mode 100644
index 000000000..d81c7839e
--- /dev/null
+++ b/packages/quiz/have-you-ever-worked-with-retina-graphics-if-so-when-and-what-techniques-did-you-use/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "have-you-ever-worked-with-retina-graphics-if-so-when-and-what-techniques-did-you-use",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/have-you-played-around-with-the-new-css-flexbox-or-grid-specs/en-US.mdx b/packages/quiz/have-you-played-around-with-the-new-css-flexbox-or-grid-specs/en-US.mdx
new file mode 100644
index 000000000..4dd17f876
--- /dev/null
+++ b/packages/quiz/have-you-played-around-with-the-new-css-flexbox-or-grid-specs/en-US.mdx
@@ -0,0 +1,13 @@
+---
+title: Have you played around with the new CSS Flexbox or Grid specs?
+---
+
+Flexbox is mainly meant for 1-dimensional layouts while Grid is meant for 2-dimensional layouts.
+
+Flexbox solves many common problems in CSS, such as vertical centering of elements within a container, sticky footer, etc. famous CSS frameworks like Bootstrap and Bulma are based on Flexbox, and Flexbox is still the tested and proven way to create layouts.
+
+Grid is by far the most intuitive approach for creating grid-based layouts but browser support is not that wide at the moment. Many layout problems can already be solved with Flexbox, so there's not a huge need for Grid.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/have-you-played-around-with-the-new-css-flexbox-or-grid-specs/metadata.json b/packages/quiz/have-you-played-around-with-the-new-css-flexbox-or-grid-specs/metadata.json
new file mode 100644
index 000000000..31c712d55
--- /dev/null
+++ b/packages/quiz/have-you-played-around-with-the-new-css-flexbox-or-grid-specs/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "have-you-played-around-with-the-new-css-flexbox-or-grid-specs",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "high",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/have-you-used-or-implemented-media-queries-or-mobile-specific-layouts-css/en-US.mdx b/packages/quiz/have-you-used-or-implemented-media-queries-or-mobile-specific-layouts-css/en-US.mdx
new file mode 100644
index 000000000..e2dac9e62
--- /dev/null
+++ b/packages/quiz/have-you-used-or-implemented-media-queries-or-mobile-specific-layouts-css/en-US.mdx
@@ -0,0 +1,9 @@
+---
+title: Have you used or implemented media queries or mobile-specific layouts/CSS?
+---
+
+An example would be transforming a stacked pill navigation into a fixed-bottom tab navigation beyond a certain breakpoint.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/have-you-used-or-implemented-media-queries-or-mobile-specific-layouts-css/metadata.json b/packages/quiz/have-you-used-or-implemented-media-queries-or-mobile-specific-layouts-css/metadata.json
new file mode 100644
index 000000000..d24aa6715
--- /dev/null
+++ b/packages/quiz/have-you-used-or-implemented-media-queries-or-mobile-specific-layouts-css/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "have-you-used-or-implemented-media-queries-or-mobile-specific-layouts-css",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/how-can-you-share-code-between-files/en-US.mdx b/packages/quiz/how-can-you-share-code-between-files/en-US.mdx
new file mode 100644
index 000000000..533ff0e40
--- /dev/null
+++ b/packages/quiz/how-can-you-share-code-between-files/en-US.mdx
@@ -0,0 +1,15 @@
+---
+title: How can you share code between files?
+---
+
+This depends on the JavaScript environment.
+
+On the client (browser environment), as long as the variables/functions are declared in the global scope (`window`), all scripts can refer to them. Alternatively, adopt the Asynchronous Module Definition (AMD) via RequireJS for a more modular approach.
+
+On the server (Node.js), the common way has been to use CommonJS. Each file is treated as a module and it can export variables and functions by attaching them to the `module.exports` object.
+
+ES2015 defines a module syntax which aims to replace both AMD and CommonJS. This will eventually be supported in both browser and Node environments.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/how-can-you-share-code-between-files/metadata.json b/packages/quiz/how-can-you-share-code-between-files/metadata.json
new file mode 100644
index 000000000..7e785f569
--- /dev/null
+++ b/packages/quiz/how-can-you-share-code-between-files/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "how-can-you-share-code-between-files",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/how-do-you-organize-your-code-module-pattern-classical-inheritance/en-US.mdx b/packages/quiz/how-do-you-organize-your-code-module-pattern-classical-inheritance/en-US.mdx
new file mode 100644
index 000000000..3fc84be5b
--- /dev/null
+++ b/packages/quiz/how-do-you-organize-your-code-module-pattern-classical-inheritance/en-US.mdx
@@ -0,0 +1,14 @@
+---
+title: How do you organize your code?
+subtitle: Do you use module pattern, classical inheritance, something else?
+---
+
+In the past, developers used Backbone for my models which encourages a more OOP approach, creating Backbone models and attaching methods to them.
+
+The module pattern is still great, but these days, developers prefer using React/Redux which utilize a single-directional data flow based on Flux architecture. It is common now to represent an app's data model using plain objects and write utility pure functions to manipulate these objects. State is manipulated using actions and reducers like in any other Redux application.
+
+Avoid using classical inheritance where possible. When and if you do, stick to [these rules](https://medium.com/@dan_abramov/how-to-use-classes-and-sleep-at-night-9af8de78ccb4).
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/how-do-you-organize-your-code-module-pattern-classical-inheritance/metadata.json b/packages/quiz/how-do-you-organize-your-code-module-pattern-classical-inheritance/metadata.json
new file mode 100644
index 000000000..7510484d8
--- /dev/null
+++ b/packages/quiz/how-do-you-organize-your-code-module-pattern-classical-inheritance/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "how-do-you-organize-your-code-module-pattern-classical-inheritance",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/how-do-you-serve-a-page-with-content-in-multiple-languages/en-US.mdx b/packages/quiz/how-do-you-serve-a-page-with-content-in-multiple-languages/en-US.mdx
new file mode 100644
index 000000000..9d295bb9b
--- /dev/null
+++ b/packages/quiz/how-do-you-serve-a-page-with-content-in-multiple-languages/en-US.mdx
@@ -0,0 +1,20 @@
+---
+title: How do you serve a page with content in multiple languages?
+---
+
+> Assumption: The question is about how to serve a page with content available in multiple languages and the content within the page should be displayed only in one consistent language.
+
+Serving a page in different languages is one of the aspects of internationalization (i18n).
+
+When an HTTP request is made to a server, the requesting user agent usually sends information about language preferences, such as in the `Accept-Language` header. The server can then use this information to return a version of the document in the appropriate language if such an alternative is available. The returned HTML document should also declare the `lang` attribute in the `` tag, such as `...`.
+
+To let a search engine know that the same content is available in different languages, `` tags with the `rel="alternate"` and `hreflang="..."` attributes should be used. E.g. ``.
+
+## Rendering
+
+- **Server-side rendering:** The HTML markup will contain string placeholders and content for the specific language will be fetched from configuration in code or a translation service. The server then dynamically generates the HTML page with content in that particular language.
+- **Client-side rendering:** The appropriate locale strings will be fetched and combined with the JavaScript-based views.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/html-questions)
diff --git a/packages/quiz/how-do-you-serve-a-page-with-content-in-multiple-languages/metadata.json b/packages/quiz/how-do-you-serve-a-page-with-content-in-multiple-languages/metadata.json
new file mode 100644
index 000000000..59dc972de
--- /dev/null
+++ b/packages/quiz/how-do-you-serve-a-page-with-content-in-multiple-languages/metadata.json
@@ -0,0 +1,14 @@
+{
+ "slug": "how-do-you-serve-a-page-with-content-in-multiple-languages",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "html",
+ "i18n"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/how-do-you-serve-your-pages-for-feature-constrained-browsers-what-techniques-processes-do-you-use/en-US.mdx b/packages/quiz/how-do-you-serve-your-pages-for-feature-constrained-browsers-what-techniques-processes-do-you-use/en-US.mdx
new file mode 100644
index 000000000..4789c45d5
--- /dev/null
+++ b/packages/quiz/how-do-you-serve-your-pages-for-feature-constrained-browsers-what-techniques-processes-do-you-use/en-US.mdx
@@ -0,0 +1,17 @@
+---
+title: How do you serve your pages for feature-constrained browsers?
+subtitle: What techniques/processes do you use?
+---
+
+## Techniques
+
+- Graceful degradation: The practice of building an application for modern browsers while ensuring it remains functional in older browsers.
+- Progressive enhancement: The practice of building an application for a base level of user experience, but adding functional enhancements when a browser supports it.
+- Use [caniuse.com](https://caniuse.com/) to check for feature support.
+- Autoprefixer for automatic vendor prefix insertion.
+- Feature detection using [Modernizr](https://modernizr.com/).
+- Use CSS Feature queries via [`@support``](https://developer.mozilla.org/en-US/docs/Web/CSS/@supports)
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/how-do-you-serve-your-pages-for-feature-constrained-browsers-what-techniques-processes-do-you-use/metadata.json b/packages/quiz/how-do-you-serve-your-pages-for-feature-constrained-browsers-what-techniques-processes-do-you-use/metadata.json
new file mode 100644
index 000000000..97094753f
--- /dev/null
+++ b/packages/quiz/how-do-you-serve-your-pages-for-feature-constrained-browsers-what-techniques-processes-do-you-use/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "how-do-you-serve-your-pages-for-feature-constrained-browsers-what-techniques-processes-do-you-use",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/how-is-responsive-design-different-from-adaptive-design/en-US.mdx b/packages/quiz/how-is-responsive-design-different-from-adaptive-design/en-US.mdx
new file mode 100644
index 000000000..f69c30289
--- /dev/null
+++ b/packages/quiz/how-is-responsive-design-different-from-adaptive-design/en-US.mdx
@@ -0,0 +1,18 @@
+---
+title: How is responsive design different from adaptive design?
+---
+
+Both responsive and adaptive design attempt to optimize the user experience across different devices, adjusting for different viewport sizes, resolutions, usage contexts, control mechanisms, and so on.
+
+Responsive design works on the principle of flexibility - a single fluid website that can look good on any device. Responsive websites use media queries, flexible grids, and responsive images to create a user experience that flexes and changes based on a multitude of factors. Like a single ball growing or shrinking to fit through several different hoops.
+
+Adaptive design is more like the modern definition of progressive enhancement. Instead of one flexible design, adaptive design detects the device and other features and then provides the appropriate feature and layout based on a predefined set of viewport sizes and other characteristics. The site detects the type of device used and delivers the pre-set layout for that device. Instead of a single ball going through several different-sized hoops, you'd have several different balls to use depending on the hoop size.
+
+Both have these methods have some issues that need to be weighed:
+
+- Responsive design can be quite challenging, as you're essentially using a single albeit responsive layout to fit all situations. How to set the media query breakpoints is one such challenge. Do you use standardized breakpoint values? Or, do you use breakpoints that make sense to your particular layout? What if that layout changes?
+- Adaptive design generally requires user agent sniffing, or DPI detection, etc., all of which can prove unreliable.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/how-is-responsive-design-different-from-adaptive-design/metadata.json b/packages/quiz/how-is-responsive-design-different-from-adaptive-design/metadata.json
new file mode 100644
index 000000000..441466977
--- /dev/null
+++ b/packages/quiz/how-is-responsive-design-different-from-adaptive-design/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "how-is-responsive-design-different-from-adaptive-design",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/how-would-you-approach-fixing-browser-specific-styling-issues/en-US.mdx b/packages/quiz/how-would-you-approach-fixing-browser-specific-styling-issues/en-US.mdx
new file mode 100644
index 000000000..289931a66
--- /dev/null
+++ b/packages/quiz/how-would-you-approach-fixing-browser-specific-styling-issues/en-US.mdx
@@ -0,0 +1,13 @@
+---
+title: How would you approach fixing browser-specific styling issues?
+---
+
+- After identifying the issue and the offending browser, use a separate style sheet that only loads when that specific browser is being used. This technique requires server-side rendering though.
+- Use libraries like Bootstrap that already handles these styling issues for you.
+- Use `autoprefixer` to automatically add vendor prefixes to your code.
+- Use Reset CSS or Normalize.css.
+- If you're using PostCSS (or a similar CSS transpilation library), there may be plugins which allow you to opt in to using modern CSS syntax (and even W3C proposals) that will transform those sections of your code into equivalent backward-compatible code that will work in the targets you've used.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/how-would-you-approach-fixing-browser-specific-styling-issues/metadata.json b/packages/quiz/how-would-you-approach-fixing-browser-specific-styling-issues/metadata.json
new file mode 100644
index 000000000..aefba6ef4
--- /dev/null
+++ b/packages/quiz/how-would-you-approach-fixing-browser-specific-styling-issues/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "how-would-you-approach-fixing-browser-specific-styling-issues",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/html5-as-an-open-web-platform-building-blocks/en-US.mdx b/packages/quiz/html5-as-an-open-web-platform-building-blocks/en-US.mdx
new file mode 100644
index 000000000..fa1735287
--- /dev/null
+++ b/packages/quiz/html5-as-an-open-web-platform-building-blocks/en-US.mdx
@@ -0,0 +1,16 @@
+---
+title: Consider HTML5 as an open web platform. What are the building blocks of HTML5?
+---
+
+- **Semantics**: HTML tags describe the content.
+- **Styling**: Customizing appearance of HTML tags
+- **Connectivity**: Communicate with the server in new and innovative ways.
+- **Offline and storage**: Allows webpages to store data on the client-side locally and operate offline more efficiently.
+- **Multimedia**: Makes video and audio first-class citizens in the Open Web.
+- **2D/3D graphics and effects**: Allows a much more diverse range of presentation options.
+- **Performance** and integration: Provides greater speed optimization and better usage of computer hardware.
+- **Device access**: Allows for the usage of various input and output devices.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/html-questions)
diff --git a/packages/quiz/html5-as-an-open-web-platform-building-blocks/metadata.json b/packages/quiz/html5-as-an-open-web-platform-building-blocks/metadata.json
new file mode 100644
index 000000000..34d1b292f
--- /dev/null
+++ b/packages/quiz/html5-as-an-open-web-platform-building-blocks/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "html5-as-an-open-web-platform-building-blocks",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "html"
+ ],
+ "importance": "low",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/is-there-any-reason-youd-want-to-use-translate-instead-of-absolute-positioning-or-vice-versa-and-why/en-US.mdx b/packages/quiz/is-there-any-reason-youd-want-to-use-translate-instead-of-absolute-positioning-or-vice-versa-and-why/en-US.mdx
new file mode 100644
index 000000000..efa1d6052
--- /dev/null
+++ b/packages/quiz/is-there-any-reason-youd-want-to-use-translate-instead-of-absolute-positioning-or-vice-versa-and-why/en-US.mdx
@@ -0,0 +1,11 @@
+---
+title: Is there any reason you'd want to use `translate()` instead of `absolute` positioning, or vice-versa? And why?
+---
+
+`translate()` is a possible value of the CSS `transform` property. When using `translate()`, the element still occupies its original space (sort of like `position: relative`). But when changing the absolute positioning of elements, the elements are removed from the flow of the page and the positioning of the surrounding elements will be affected. Hence the page layout will have to be recalculated.
+
+Changing `transform` or `opacity` does not trigger browser reflows or repaints but does trigger compositions; On the other hand, changing the absolute positioning triggers `reflow`. `transform` causes the browser to create a GPU layer for the element but changing absolute positioning properties uses the CPU. Hence `translate()` is more efficient and will result in shorter paint times for smoother animations.
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/css-questions)
diff --git a/packages/quiz/is-there-any-reason-youd-want-to-use-translate-instead-of-absolute-positioning-or-vice-versa-and-why/metadata.json b/packages/quiz/is-there-any-reason-youd-want-to-use-translate-instead-of-absolute-positioning-or-vice-versa-and-why/metadata.json
new file mode 100644
index 000000000..73883a578
--- /dev/null
+++ b/packages/quiz/is-there-any-reason-youd-want-to-use-translate-instead-of-absolute-positioning-or-vice-versa-and-why/metadata.json
@@ -0,0 +1,14 @@
+{
+ "slug": "is-there-any-reason-youd-want-to-use-translate-instead-of-absolute-positioning-or-vice-versa-and-why",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "css",
+ "performance"
+ ],
+ "importance": "high",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/what-advantage-is-there-for-using-the-arrow-syntax-for-a-method-in-a-constructor/en-US.mdx b/packages/quiz/what-advantage-is-there-for-using-the-arrow-syntax-for-a-method-in-a-constructor/en-US.mdx
new file mode 100644
index 000000000..475036d63
--- /dev/null
+++ b/packages/quiz/what-advantage-is-there-for-using-the-arrow-syntax-for-a-method-in-a-constructor/en-US.mdx
@@ -0,0 +1,47 @@
+---
+title: What advantage is there for using the arrow syntax for a method in a constructor?
+---
+
+The main advantage of using an arrow function as a method inside a constructor is that the value of `this` gets set at the time of the function creation and can't change after that. So, when the constructor is used to create a new object, `this` will always refer to that object. For example, let's say we have a `Person` constructor that takes a first name as an argument has two methods to `console.log` that name, one as a regular function and one as an arrow function:
+
+```js
+const Person = function (firstName) {
+ this.firstName = firstName;
+ this.sayName1 = function () {
+ console.log(this.firstName);
+ };
+ this.sayName2 = () => {
+ console.log(this.firstName);
+ };
+};
+
+const john = new Person('John');
+const dave = new Person('Dave');
+
+john.sayName1(); // John
+john.sayName2(); // John
+
+// The regular function can have its 'this' value changed, but the arrow function cannot
+john.sayName1.call(dave); // Dave (because "this" is now the dave object)
+john.sayName2.call(dave); // John
+
+john.sayName1.apply(dave); // Dave (because 'this' is now the dave object)
+john.sayName2.apply(dave); // John
+
+john.sayName1.bind(dave)(); // Dave (because 'this' is now the dave object)
+john.sayName2.bind(dave)(); // John
+
+var sayNameFromWindow1 = john.sayName1;
+sayNameFromWindow1(); // undefined (because 'this' is now the window object)
+
+var sayNameFromWindow2 = john.sayName2;
+sayNameFromWindow2(); // John
+```
+
+The main takeaway here is that `this` can be changed for a normal function, but the context always stays the same for an arrow function. So even if you are passing around your arrow function to different parts of your application, you wouldn't have to worry about the context changing.
+
+This can be particularly helpful in React class components. If you define a class method for something such as a click handler using a normal function, and then you pass that click handler down into a child component as a prop, you will need to also bind `this` in the constructor of the parent component. If you instead use an arrow function, there is no need to also bind "this", as the method will automatically get its "this" value from its enclosing lexical context. (See this article for an excellent demonstration and sample code: https://medium.com/@machnicki/handle-events-in-react-with-arrow-functions-ede88184bbb)
+
+## References
+
+- [Front End Interview Handbook](https://www.frontendinterviewhandbook.com/javascript-questions)
diff --git a/packages/quiz/what-advantage-is-there-for-using-the-arrow-syntax-for-a-method-in-a-constructor/metadata.json b/packages/quiz/what-advantage-is-there-for-using-the-arrow-syntax-for-a-method-in-a-constructor/metadata.json
new file mode 100644
index 000000000..6a10fd2f8
--- /dev/null
+++ b/packages/quiz/what-advantage-is-there-for-using-the-arrow-syntax-for-a-method-in-a-constructor/metadata.json
@@ -0,0 +1,13 @@
+{
+ "slug": "what-advantage-is-there-for-using-the-arrow-syntax-for-a-method-in-a-constructor",
+ "languages": [],
+ "companies": [],
+ "premium": false,
+ "duration": 5,
+ "published": true,
+ "topics": [
+ "javascript"
+ ],
+ "importance": "mid",
+ "difficulty": "medium"
+}
\ No newline at end of file
diff --git a/packages/quiz/what-are-data-attributes-good-for/en-US.mdx b/packages/quiz/what-are-data-attributes-good-for/en-US.mdx
new file mode 100644
index 000000000..704907add
--- /dev/null
+++ b/packages/quiz/what-are-data-attributes-good-for/en-US.mdx
@@ -0,0 +1,23 @@
+---
+title: What are `data-` attributes good for?
+---
+
+Before JavaScript frameworks became popular, developers used `data-` attributes to store extra data within the DOM itself, without other hacks such as non-standard attributes, extra properties on the DOM. It is intended to store custom data private to the page or application, for when there are no more appropriate attributes or elements.
+
+Another common use case for `data-` attributes is to store information used by third-party libraries or frameworks. For example, the Bootstrap library uses data attributes to cause `