# [TCTS] FE Test Exam ### Question 1 Where does the visible part of the HTML document live? - [ ] Inside the `<head>` tag - [x] Inside the `<body>` tag - [ ] Anywhere in the HTML document - [ ] Inside any `<script>` tags ### Question 2 Which of the following statements are correct? - [x] The `href` attribute of `<a>` specifies the URL of the page the link goes to - [ ] The `width` and `height` attributes of `<img>` provide the sharpness information for images - [x] The `alt` attribute of `<img>` provides an alternate text for images - [ ] The `src` attribute of `<img>` specifies the source set for images ### Question 3 Which of the following HTML elements are correct? - [ ] `</p>Example Paragraph<p>` - [x] `<P>Example Paragraph</P>` - [x] `<p>Example Paragraph</p>` - [ ] `<p>Example Paragraph<p>` ### Question 4 Which one is correct about CSS solutions? - [ ] styled-components is not a CSS-in-JS solution - [ ] CSS-in-JS externalize styling from JavaScript into standard CSS - [x] With CSS-in-JS, styles can use JS logic - [ ] With CSS modules, it's impossible to use SCSS ### Question 5 What is an example of using TailwindCSS? - [x] `<div class="bg-white p-2">Example</div>` - [ ] `<div style="background: white; padding: 0.5rem">Example</div>` - [ ] `<div class="background: white; padding: 0.5rem">Example</div>` - [ ] `<div style="bg-white p-2">Example</div>` ### Question 6 What is the primary difference between `let` and `const` in JavaScript? - [ ] `let` provides block scope, while `const` does not - [ ] `let` provides global scope, while `const` does not - [ ] `let` can be redeclared, while `const` cannot - [x] `let` can be reassigned, while `const` cannot ### Question 7 Which of the following can be the output of `Array.prototype.find()`? - [x] `undefined` - [ ] The index of an element in the array - [x] An array - [x] An object ### Question 8 Given `array = [1, 2, 3]`. What is the output of `{ ...array }`? - [ ] `{ 0: [1, 2, 3] }` - [ ] `[1, 2, 3]` - [x] `{ 0: 1, 1: 2, 2: 3 }` - [ ] `[ [1, 2, 3] ]` ### Question 9 What are correct about TypeScript? - [x] TypeScript is built on top of JavaScript - [ ] TypeScript is not a superset of JavaScript - [ ] TypeScript performs static type checking at run time - [x] TypeScript allows an interface to extend a class ### Question 10 Which of the following are special types of TypeScript? - [x] `null` - [ ] `string | number` - [x] `undefined` - [ ] `false` ### Question 11 What is the usage of `props` in React? - [ ] To store global data that can change over time - [ ] To manage component-specific data that can change over time - [x] To pass data from parent to child components - [ ] To pass data from child to parent components ### Question 12 What are correct about `state` in React? - [x] State is mutable and can be changed within the component - [ ] State is read-only within the component - [ ] State can be accessed outside the component - [x] State can be shared between sibling components by lifting up the state to a common parent component ### Question 13 Which is NOT a benefit of using React hooks? - [ ] Reuse existing code, share non-visual logic - [ ] More effective state management - [x] Avoid using too much props - [ ] Prevent issue associated with classes ### Question 14 What are correct about using React hooks? - [x] Call hooks at the top level of React functions - [ ] Call hooks inside loops, conditions or nested functions - [x] Call hooks from functional components or custom hooks - [ ] Call hooks in event handlers ### Question 15 When should you use the `useMemo` hook? - [x] In case the dependencies rarely change - [ ] In case the dependencies change frequently - [ ] In case the calculation is fast - [x] In case the calculation is slow ### Question 16 Which hook can be used to avoid props drilling? - [ ] `useState` - [ ] `useCallback` - [x] `useContext` - [ ] `useMemo` ### Question 17 Which solution can be used to share logic? - [x] HOC (Higher-Order Components) - [ ] Profiler - [x] Custom hooks - [ ] Fragments ### Question 18 Which is an ideal solution to build server-rendered applications? - [ ] Create React App - [x] NextJS - [ ] ExpressJS - [ ] NestJS ### Question 19 When should you choose Ant Design as the UI library? - [x] The app requires a consistent and elegant design - [ ] The app requires a modern and responsive design - [x] The app needs unique interfaces with highly-customizable components - [ ] The app needs complex UIs with highly-modular components ### Question 20 Which features are NOT supported by Ant Design? - [ ] Internationalization - [x] App routing - [ ] Theme customization - [x] Rich text editor ### Question 21 Which of the following is the React components foundation of Ant Design? - [ ] react-bootstrap - [x] react-component - [ ] reactstrap - [ ] semantic-ui-react ### Question 22 Which solution can be used to create responsive design? - [x] Media queries - [ ] CSS transitions - [x] Container queries - [x] Popular CSS frameworks (eg: Bootstrap, TailwindCSS...) ### Question 23 Which one should be used in mobile first design? - [ ] `@media only screen and (min-width: 1200px) {...}` - [ ] `@media only screen and (max-width: 1200px) {...}` - [x] `@media only screen and (min-width: 768px) {...}` - [ ] `@media only screen and (max-width: 768px) {...}` ### Question 24 What are the responsibilities of JavaScript module bundler? - [x] Combine many JavaScript files into a single one - [x] Generate a dependency graph of modules - [ ] Add more whitespace, comments to your code - [x] Remove unnecessary characters from your code (eg: whitespace, comments...) ### Question 25 What are correct about source maps? - [ ] Source maps are files whose name ended with `.map` or `.mp` - [x] Source maps can be generated by module bundlers (eg: Vite, webpack) - [ ] Source maps cannot help you debug your code easier - [x] Source maps can be used to map a combined file back to its original state ### Question 26 What are correct about Vite? - [ ] Vite bundles your code with esbuild - [x] Vite provides Hot Module Replacement - [x] Vite supports tree shaking and code splitting - [ ] Vite can only be used with React ### Question 27 What is the main difference between Vite and Create React App? - [x] Vite uses a faster build system and development server, while Create React App has a larger ecosystem - [ ] Vite uses a slower build system and development server, while Create React App has a smaller ecosystem - [ ] Vite has a larger ecosystem, while Create React App uses a faster build system and development server - [ ] Vite has a smaller ecosystem, while Create React App uses a faster build system and development server ### Question 28 What is the default output directory of Vite? - [ ] `src` - [x] `dist` - [ ] `build` - [ ] `lib` ### Question 29 Which of the following tools are used within Vite? - [x] Rollup - [ ] Parcel - [ ] Webpack - [x] esbuild ### Question 30 What are correct about tree shaking and code splitting? - [ ] Code splitting removes unused code from your application - [x] Tree shaking removes unused code from your application - [ ] Tree shaking divides your code into smaller chunks loaded on demand - [x] Code splitting divides your code into smaller chunks loaded on demand ### Question 31 What are the use cases of isolated component development? - [x] Build shared UI components for multiple projects - [ ] Integrate UI components with stable APIs - [x] Work with deeply nested components - [x] Build component library (eg: UI kit) ### Question 32 Where does TypeScript live in the testing trophy? - [x] Static testing - [ ] Unit testing - [ ] Integration testing - [ ] End-to-end (E2E) testing ### Question 33 What are some of best practices in Frontend testing? - [ ] Write as much unit tests as you can - [x] Do not write too many unit tests, focus more on integration tests - [x] Tests should be deterministic - [ ] Do your best to achieve 100% coverage ### Question 34 What are correct about unit tests and integration tests? - [x] One unit test covers only one module while one integration test cover a whole feature - [ ] Unit tests better resemble how users are using your app - [ ] Integration tests often require rewrite after refactoring - [x] Integration tests survive refactoring most of the time ### Question 35 What are the common causes of non-deterministic tests? - [x] Asynchronous behavior - [ ] Testing isolated components - [x] Timezone - [x] Network issues ### Question 36 Which selector should NOT be used in querying DOM elements for tests? - [ ] `[data-testid="loginBtn"]` - [x] `button` - [ ] `[children="Login"]` - [x] `.primary-btn` ### Question 37 Which is NOT a common type of code coverage? - [ ] Branch - [ ] Statement - [ ] Line - [x] Class ### Question 38 What does Gitlab CI/CD help you? - [x] Catch bugs early in the development cycle - [ ] Manage containerized workloads and services - [x] Build, test and deploy your app - [x] Monitor iterative code changes ### Question 39 Which is NOT the responsibility of K8s (Kubernetes)? - [x] Deploy code and build your application - [ ] App discovery and load balancing - [ ] Manage containerized applications - [ ] Horizontal scaling ### Question 40 What are the features of NGINX? - [x] Reverse proxy - [x] Content caching - [x] Load balancer - [ ] Run container applications ### Question 41 What is the primary goal of using Storybook? - [ ] Make UI components more beautiful - [x] Build UI components in isolation - [ ] Write unit test for UI components - [ ] Optimize performance for UI components ### Question 42 What are benefits of using monorepos? - [x] Shared code across projects - [ ] Lower memory and storage requirements - [x] Consistent code standard & style - [x] Simplified dependency management ### Question 43 Which are NOT disadvantages of using monorepos? - [ ] Higher chances of merge conflicts - [ ] Bad performance - [x] Complex code organization - [x] Reduce collaboration among teams ### Question 44 When should you NOT use a monorepo? - [x] Many projects run by different teams on different technologies - [x] The Frontend side changes frequently while everything stays the same on the Backend side - [ ] You want everyone in different teams to be able to view all the code - [x] You want to restrict access to some parts of the project ### Question 45 Which of the following solutions can be used to build monorepos for Frontend? - [x] Yarn workspaces - [x] Nx - [x] Lerna - [x] Bazel ### Question 46 Which of the following are the technologies used in Progressive Web Apps (PWA)? - [x] Service worker - [x] Background synchronization - [ ] Hot module replacement - [x] Push & notification ### Question 47 When should you build a Progressive Web App? - [ ] You want to create a responsive web app - [x] Provide good UX even when the device has network connection problems - [ ] Your users have a good internet connection - [x] Notify user about events happened while the app was not running ### Question 48 Which of the following are NOT recommended when optimizing website performance? - [ ] Reduce the impact of third-party code - [x] Increase JavaScript execution time - [ ] Remove unused JavaScript - [x] Add more dependencies ### Question 49 What are the common causes of a poor CLS (Cumulative Layout Shift)? - [x] Animations on elements - [ ] Pre-loaded content - [x] Images without dimensions - [x] Dynamically injected content ### Question 50 Which solution can be used to optimize LCP (Largest Contentful Paint)? - [x] Optimize image size - [x] Improve server response time - [ ] Enable lazy loading on images rendered above the fold - [x] Defer parsing of non-critical JavaScript ### Question 51 Given the capstone project: <a href="https://git.teko.vn/teko-ui/react-vite-capstone" target="_blank">https://git.teko.vn/teko-ui/react-vite-capstone</a>. The project is bootstrapped with React + Vite + TypeScript. Please use the capstone project and **choose one of the 3 topics below** to do this task. When you finish, compress your repo to the format **<yourname>.zip** (please exclude *node_modules*, *.git* and build folders before compressing), **push the zip file** to this Google Drive: <a href="https://drive.google.com/drive/u/1/folders/1i8Zf_KfsDQeE2dmglgVqqvjQjEtjIs0K" target="_blank">https://drive.google.com/drive/u/1/folders/1i8Zf_KfsDQeE2dmglgVqqvjQjEtjIs0K</a>, and **submit the link to your file**. > Note: You must use **Node 18+** for compatibility (you can use <a href="https://github.com/nvm-sh/nvm" target="_blank">NVM</a> to manage different Node versions if needed). **1. Build a TODO list** - The TODO list has some basic features: add new, view and delete item - There is a text input (to enter the item name) and a button to add new item to the TODO list - Each row in the TODO list has two information (the ordinal number & the item name) and a "Delete" icon - Use Ant Design to build the UI (already installed in the project) - Use React concepts (state, hooks) and event handlers to handle the logic **2. Build a shared Button component** - Build the Button component from scratch (do NOT use any UI libraries like Ant Design, etc), with well-defined component props using TypeScript - The Button component has some types: primary (solid primary-background-color, white text), secondary (white background-color, primary-color text & border). The primary-color is up to your choice - The Button has some UI effects on hover, click. The UI effects are up to your choice - The Button can be disabled (prevent user from clicking on the button) - The Button component uses `onClick` handler to handle `click` event - The Button's styles can be overridden **3. Build a login form with validation** - The form has two fields (username & password) and a "Submit" button - The username field is in text format, required, max length 20 characters - The password field is in password format, required, max length 16 characters and has an eye icon to view hidden password - Clicking on the "Submit" button will validate the form fields and show error messages if any. If all fields are valid, show a popup with success message: "Login successfully with username `<username>`" - Use Ant Design to build the UI (already installed in the project) Feel free to add more styles, functionalities to make better UI/UX if you can.