- Thẻ DOCTYPE là gì? Tại sao cần khai báo DOCTYPE?
DOCTYPE (Document Type Declaration) khai báo phiên bản HTML đang dùng và phải nằm ở dòng đầu tiên. HTML5 chỉ cần một dòng: Nó quyết định browser render ở standards mode hay quirks mode. Thiếu DOCTYPE → quirks mode, và khác biệt lớn nhất là…
- Cascade trong CSS nghĩa là gì?
Cascade là thuật toán chọn ra giá trị thắng khi nhiều khai báo cùng nhắm vào một thuộc tính của một element. Thứ tự xét, từ trên xuống — dừng ngay khi phân định được: 1. Origin + !important: !important của user agent !important của…
- Sự khác biệt giữa var, let và const là gì?
var, let và const đều khai báo biến trong JavaScript, nhưng khác nhau về scope, hành vi khai báo lại, và khả năng gán lại giá trị. - var có function scope — biến "lan" ra toàn bộ function chứa nó, bất kể nó được…
- TypeScript là gì và tại sao nên dùng TypeScript thay JavaScript?
TypeScript là superset của JavaScript có kiểu tĩnh, biên dịch ra JavaScript thuần. Cùng đoạn đó trong JavaScript chạy bình thường và trả về '0102' — một bug âm thầm chỉ lộ ra khi người dùng gặp. Bốn lợi ích, xếp theo mức tác động…
- JSX là gì và tại sao React sử dụng nó?
JSX là cú pháp cho phép viết thẻ giống HTML ngay trong file JavaScript. Nó không phải là một ngôn ngữ riêng — trình duyệt hoàn toàn không hiểu JSX, mà Babel hoặc SWC dịch nó thành lời gọi hàm trước khi code chạy. Hình…
- App Router khác Pages Router trong Next.js như thế nào?
Sự khác biệt chính bao gồm: - Kiến trúc (Architecture): App Router (Next.js 13+) dùng thư mục app/ và hỗ trợ React Server Components mặc định. Pages Router dùng thư mục pages/ nơi mọi component được xử lý như Client Component. - Data Fetching: App…
- Redux Toolkit (RTK) là gì? Tại sao nên dùng RTK thay vì Redux thuần?
RTK là cách duy nhất được khuyến nghị để viết Redux hiện đại — createSlice gộp actions+reducer, Immer cho phép write mutable syntax, RTK Query thay thế thunk cho data fetching. Redux Toolkit (RTK) là bộ công cụ chính thức và là cách duy nhất…
- Node.js là gì? Điểm khác biệt với JavaScript trên trình duyệt?
Node.js là runtime cho phép chạy JavaScript ngoài trình duyệt, ở phía server hoặc công cụ dòng lệnh, được xây dựng trên V8 engine của Chrome và thư viện libuv để xử lý I/O bất đồng bộ. Khác với JavaScript trên trình duyệt vốn bị…
- Câu lệnh SELECT cơ bản trong SQL như thế nào?
Mẹo hiểu SELECT: SQL không chạy theo thứ tự bạn viết, mà theo thứ tự thực thi: FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT Hệ quả quan trọng: alias đặt trong SELECT (vd…
- Webpack là gì? Vai trò trong modern web development?
Webpack là module bundler gộp toàn bộ asset (JS, CSS, ảnh) thành các file bundle đã tối ưu. Khái niệm cốt lõi: - Entry — điểm bắt đầu của dependency graph, thường là src/index.js. - Output — nơi ghi bundle ra, ví dụ dist/bundle.js. -…
- CI/CD là gì? Sự khác biệt giữa CI và CD?
CI (Continuous Integration): tự động build và test mỗi lần push hoặc mở PR, bắt lỗi lúc còn dễ sửa. CD (Continuous Delivery): CI xanh thì tự deploy lên staging, còn lên production vẫn cần người duyệt. Continuous Deployment: deploy thẳng lên production, không cần…
- Docker là gì? Tại sao hữu ích trong development và deployment?
Docker đóng gói app cùng dependency vào container để chạy giống nhau ở mọi môi trường. Container khác VM: VM ảo hoá phần cứng nên nặng, có OS riêng và boot tính bằng phút; container dùng chung kernel của host nên nhẹ, khởi động tính…
- Jest là gì? Các tính năng chính của Jest?
Jest là JavaScript testing framework từ Meta, phổ biến nhất trong hệ sinh thái JS — zero-config với Create React App và Next.js, hỗ trợ TypeScript qua ts-jest hoặc babel-jest. Tính năng chính: - Test isolation — mỗi test file chạy trong environment riêng (jsdom…
- Core Web Vitals là gì? Ba metrics chính là gì?
Core Web Vitals là bộ ba chỉ số của Google đo trải nghiệm người dùng thực, là yếu tố SEO ranking từ 2021. - LCP (Largest Contentful Paint) — tốc độ loading: thời điểm render phần tử lớn nhất trong viewport. Good <2.5s, poor 4s.…
- XSS (Cross-Site Scripting) là gì? Các loại XSS và cách phòng chống?
XSS là lỗ hổng cho phép attacker inject script độc hại chạy trong browser của nạn nhân — đánh cắp session, redirect user, sửa nội dung trang. - Stored XSS — script được lưu vào DB (comment, profile), tấn công mọi user xem trang. -…
- Thiết kế hệ thống chat real-time như thế nào?
- Git Flow là gì? Có những branching strategy nào phổ biến?
Git Flow có 5 loại branch: main (production), develop (tích hợp code), feature/ (tính năng mới), release/ (chuẩn bị release), hotfix/ (sửa lỗi khẩn cấp). Trunk-based Development là hướng ngược lại: commit thẳng vào main với feature flags, phù hợp team CI/CD mature. Thực tế…
- Go (Golang) là gì? Tại sao nên học Go?
Go là ngôn ngữ lập trình do Google tạo ra (2009), biên dịch (compiled), statically typed, cú pháp đơn giản. Ưu điểm: tốc độ gần C/C++, concurrency mạnh (goroutines), binary đơn (không cần runtime), stdlib phong phú, phù hợp cho microservices, cloud tools, APIs.
- SEO là gì? Tại sao frontend developer cần hiểu SEO?
SEO (Search Engine Optimization) là tối ưu hoá website để đạt thứ hạng cao trên Google, Bing, và các công cụ tìm kiếm. 68% online experiences bắt đầu từ search engine — frontend developer ảnh hưởng trực tiếp đến khả năng index và rank của…
- Hãy giới thiệu về bản thân bạn.
Người phỏng vấn muốn nghe: một bản tóm tắt 60-90 giây liên quan đến công việc, không phải tiểu sử đời tư. Công thức "hiện tại → quá khứ → tương lai": bạn đang làm gì, đã làm được gì nổi bật, và vì sao…
- Single Responsibility Principle (SRP) là gì và tại sao nó quan trọng?
SRP quy định mỗi class/module chỉ nên có một lý do để thay đổi, tức là chỉ chịu trách nhiệm cho một chức năng duy nhất. Ví dụ trong TypeScript: Lợi ích: code dễ test, dễ maintain. Dấu hiệu vi phạm: class có nhiều method…
- Apache Kafka là gì và tại sao nó được sử dụng phổ biến trong hệ thống phân tán?
Kafka là distributed event streaming platform cho phép xử lý dữ liệu real-time với throughput cao, latency thấp và khả năng replay message — lý do chính khiến nó phổ biến trong hệ thống phân tán. Apache Kafka được LinkedIn phát triển và open-source năm…
- Redis là gì và tại sao nó có tốc độ cực nhanh?
Redis (Remote Dictionary Server) là in-memory data structure store, thường được dùng làm cache, message broker, và session store. Redis nhanh vì toàn bộ data được lưu trong RAM — tốc độ đọc/ghi RAM nhanh hơn disk hàng nghìn lần. Ngoài ra, Redis dùng I/O…
- Mô hình OSI 7 tầng là gì? Mỗi tầng có chức năng gì?
Mô hình OSI (Open Systems Interconnection) chia giao tiếp mạng thành 7 tầng từ dưới lên: Physical (truyền bit qua cáp/sóng), Data Link (đóng gói frame, MAC address, phát hiện lỗi), Network (định tuyến gói tin qua IP), Transport (kiểm soát luồng & lỗi, TCP/UDP),…
- Process và Thread khác nhau thế nào? Khi nào nên dùng multi-process vs multi-thread?
Process là đơn vị thực thi độc lập với không gian bộ nhớ riêng (virtual address space, heap, stack, file descriptors). Thread là đơn vị thực thi nhẹ hơn bên trong process: các thread cùng process chia sẻ heap/code/file descriptors nhưng có stack riêng. Tạo…
- Cloud Computing là gì? Phân biệt IaaS, PaaS và SaaS.
Cloud Computing là mô hình cung cấp tài nguyên công nghệ thông tin (máy chủ, lưu trữ, mạng, phần mềm) qua internet theo mô hình dùng bao nhiêu trả bấy nhiêu (pay-as-you-go), thay vì tự đầu tư hạ tầng vật lý. IaaS (Infrastructure as a…
- Java là gì và vì sao đến nay vẫn được dùng rộng rãi?
Java là ngôn ngữ hướng đối tượng, strongly-typed, biên dịch ra bytecode và chạy trên JVM. Cùng một file .class có thể chạy trên nhiều hệ điều hành mà không cần biên dịch lại — đó là "Write Once, Run Anywhere" từ 1995, nay do…
- Spring Boot là gì và có những ưu điểm gì?
Spring Boot là framework tạo app Java/Spring nhanh, ít cấu hình, dựng trên Spring Framework để bỏ phần lớn XML và boilerplate. Gồm 3 phần chính: 1. Auto-configuration — tự cấu hình theo dependency có sẵn (thêm Tomcat → tự set up web server). 2.…
- PHP là gì và tên viết tắt này có nghĩa là gì?
PHP viết tắt của Hypertext Preprocessor, là ngôn ngữ lập trình phía server dùng để tạo trang web động. Khi người dùng truy cập một trang PHP, server sẽ thực thi mã PHP rồi trả về HTML cho trình duyệt. Khác với JavaScript chạy trên…
- Laravel là gì và nó giải quyết những vấn đề gì?
Laravel là framework PHP hiện đại với cú pháp gọn đẹp và bộ công cụ phong phú cho phép phát triển ứng dụng nhanh. Nó giải quyết các vấn đề phổ biến: routing (ánh xạ URL), templating (engine Blade), truy cập database (Eloquent ORM), xác…
- Value type và reference type khác nhau như thế nào trong C#?
Value type và reference type khác nhau ở cách biến lưu dữ liệu: biến value type chứa giá trị, biến reference type chứa reference trỏ tới object trên heap. Hãy hình dung value type như bản photo — mỗi người giữ bản sao riêng. Reference…
- Sự khác nhau giữa `var`, `dynamic`, và `final` trong Dart là gì?
var cho phép Dart tự suy luận kiểu dữ liệu một lần lúc khai báo và không thể thay đổi kiểu sau đó. dynamic cho phép kiểu thay đổi trong runtime, bỏ qua kiểm tra kiểu tĩnh. final tạo biến không thể gán lại sau…
- RabbitMQ là gì và khi nào nên dùng nó?
RabbitMQ là message broker mã nguồn mở, cho phép các ứng dụng giao tiếp bất đồng bộ thông qua một broker trung gian thay vì gọi trực tiếp lẫn nhau. Dùng khi cần decouple các service, xử lý tác vụ nền như gửi email, resize…
- `val` và `var` trong Kotlin khác nhau như thế nào?
val khai báo biến chỉ đọc, không thể gán lại sau khi khởi tạo (tương tự final trong Java), còn var khai báo biến có thể thay đổi giá trị. Dùng val làm mặc định giúp code an toàn hơn và phù hợp với nguyên…
- Python quản lý bộ nhớ như thế nào?
Python dùng hai cơ chế: (1) Reference counting — mỗi object đếm số tham chiếu, về 0 thì giải phóng ngay (2) Garbage Collector (module gc) — phát hiện và thu hồi circular references mà reference counting không xử lý được (3) Memory Pool (PyMalloc)…
- Vue.js là gì? Khác React/Angular thế nào?
Vue.js là progressive JavaScript framework để xây dựng UI. (1) So với React: Vue có template syntax rõ ràng hơn, two-way binding tích hợp sẵn, learning curve thấp hơn; React dùng JSX, unidirectional flow, hệ sinh thái lớn hơn (2) So với Angular: Vue nhẹ…
- NestJS là gì? Tại sao nên dùng NestJS thay vì Express thuần?
NestJS là framework Node.js TypeScript-first lấy cảm hứng từ Angular, tổ chức code theo Modules, Controllers và Providers (thường là Services) với Dependency Injection tích hợp sẵn. Nó không thay thế Express/Fastify mà chạy trên một trong hai adapter đó và thêm lớp abstraction để…
- Angular là gì? Khác AngularJS, React và Vue như thế nào?
Angular là framework frontend full-featured dùng TypeScript để xây dựng SPA, enterprise app và hybrid-rendered web app. AngularJS là dòng 1.x cũ, khác kiến trúc hoàn toàn và không nên gọi lẫn với Angular hiện đại. So với React/Vue, Angular opinionated hơn: có DI, Router,…
- LLM (Large Language Model) là gì và hoạt động như thế nào?
LLM là mô hình ngôn ngữ dựa trên kiến trúc Transformer, được pre-train trên lượng lớn text corpus (hàng trăm tỷ đến hàng nghìn tỷ token). Cốt lõi của LLM là dự đoán token tiếp theo (next-token prediction) dựa trên chuỗi token đầu vào —…
- Mixture of Experts (MoE) là gì? Khác gì dense model?
- React Native khác gì so với ReactJS?
ReactJS là thư viện JavaScript render ra DOM trong browser, output là HTML/CSS. React Native là framework dùng cùng model component + JSX nhưng render ra native UI components (UIView trên iOS, ViewGroup/Android.View trên Android), không có DOM, không có HTML tag. Khác biệt cụ…
- FastAPI là gì và khi nào nên dùng?
FastAPI là framework Python để xây dựng HTTP API, dựa trên type hints, Starlette và Pydantic. Nó phù hợp khi cần API typed, tài liệu OpenAPI tự động, validation rõ ràng, hiệu năng tốt và developer experience dễ chịu. Nên dùng FastAPI cho REST API,…
- PostgreSQL là gì và khi nào nên chọn?
PostgreSQL là relational database (cơ sở dữ liệu quan hệ) mã nguồn mở — dữ liệu nằm trong các bảng có cột rõ ràng và ràng buộc chặt chẽ. Điểm mạnh chính: SQL chuẩn, transaction ACID (làm là đúng và đủ, không nửa vời), nhiều…
- MongoDB là gì và khi nào nên chọn?
MongoDB là document database: thay vì bẻ dữ liệu thành nhiều bảng, nó lưu cả một "cục" dữ liệu liên quan trong một document (giống một object JSON) nằm trong collection. Bên dưới, document được lưu dạng BSON. Nên chọn khi: - Dữ liệu vốn…
- Khi nhận một bài coding interview, nên trình bày theo flow nào để interviewer dễ đánh giá?
Flow tốt nhất là: 1. Nhắc lại đề bằng lời của mình để xác nhận hiểu đúng. 2. Hỏi constraints (kích thước input, mảng đã sort chưa, có duplicate không, xử lý null/empty). 3. Đưa ra brute force trước để có baseline. 4. Chỉ ra…
- Khi có nhiều solution đúng, nên chọn solution nào trong phỏng vấn?
- Trước khi code nên hỏi interviewer những câu hỏi làm rõ nào?
Hỏi đúng câu cho thấy bạn làm việc như một kỹ sư thực thụ, không vội lao vào code khi yêu cầu còn mơ hồ. Hãy luôn có sẵn bộ câu hỏi checklist: 1. Dữ liệu đầu vào (Input): Có thể rỗng (empty) hay null…
- Code trong interview nên tối ưu cho tốc độ gõ hay cho dễ đọc?
Dễ đọc thắng, vì interviewer phải hiểu code của bạn để chấm. Vài quy tắc đơn giản mà hiệu quả: đặt tên biến có nghĩa (left, right, freq thay vì i, j, m); tách helper function khi một khối làm việc rõ ràng; tránh one-liner…
- Django là gì và khi nào nên chọn nó?
Django là web framework Python kiểu "batteries-included" — ORM, admin, auth, form, template, migration đều có sẵn. Cài xong là gần như đủ đồ để dựng một app production, không phải đi gom 5–7 thư viện rời rồi tự ráp lại. Hợp với: app server-rendered…
- Ruby là gì? Điểm nổi bật so với các ngôn ngữ khác?
Ruby (Matz, 1995) là ngôn ngữ thông dịch, dynamic typing, thuần hướng đối tượng, theo triết lý "developer happiness" — code đọc gần như tiếng Anh. Khác biệt so với ngôn ngữ khác: - Mọi thứ đều là object — kể cả 5 hay nil…