Mở đăng ký khóa học Fullstack qua Zoom. Tham khảo tại đây

Thư Viện Câu Hỏi Phỏng Vấn

Tổng hợp các câu hỏi tuyển dụng thực tế theo nhiều cấp độ từ Entry đến Expert để bạn tự tin chinh phục nhà tuyển dụng.

Interactive Practice Tổng cộng 4,442 câu hỏi độc bản

Luyện Tập Phỏng Vấn Thử

Mô phỏng áp lực phỏng vấn thật với đồng hồ đếm ngược từng câu, tự đánh giá phản xạ và đo lường độ sẵn sàng của bạn.

Vui lòng đăng nhập để tham gia luyện tập và lưu tiến độ phỏng vấn.
451

Sự khác biệt giữa thuộc tính CommandTimeout và ConnectionTimeout trong ADO.NET là gì và làm thế nào để cấu hình chúng một cách hợp lý?

Junior

ConnectionTimeout là thời gian chờ tối đa để thiết lập kết nối ban đầu tới Server (mặc định là 15 giây), được cấu hình trong Connection String. CommandTimeout là thời gian chờ tối đa để thực thi một câu lệnh SQL (mặc định là 30 giây), được cấu hình trên đối tượng SqlCommand. Trong thực tế, bạn nên đặt ConnectionTimeout ngắn để phát hiện sớm lỗi mạng, và điều chỉnh CommandTimeout dựa trên độ phức tạp của câu truy vấn để tránh treo ứng dụng khi gặp các câu lệnh SQL chạy quá lâu.

452

Trong Kotlin, tại sao việc sử dụng 'lateinit' lại được coi là một công cụ mạnh mẽ nhưng tiềm ẩn rủi ro, và làm thế nào để kiểm tra trạng thái khởi tạo của nó một cách an toàn?

Junior

Bản chất của lateinit

'lateinit' cho phép khai báo một thuộc tính không null mà không cần khởi tạo ngay tại thời điểm định nghĩa. Điều này cực kỳ hữu ích trong các framework như Android (ví dụ: khởi tạo View trong onCreate) hoặc Dependency Injection.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
453

Sự khác biệt giữa 'val' và 'const val' trong Kotlin là gì, và tại sao việc chọn sai có thể ảnh hưởng đến hiệu năng trong các dự án Enterprise?

Junior

Khác biệt cốt lõi

  • 'val': Là biến chỉ đọc (read-only). Giá trị của nó được xác định tại thời điểm runtime.
  • 'const val': Là hằng số biên dịch (compile-time constant). Giá trị của nó phải được biết tại thời điểm biên dịch.

Ảnh hưởng hiệu năng

  • 'const val' được thay thế trực tiếp bằng giá trị thực tế tại nơi sử dụng (inlining), giúp giảm thiểu việc truy cập bộ nhớ hoặc gọi hàm getter.
  • 'val' thông thường sẽ tạo ra một phương thức getter ẩn, gây ra overhead nhỏ khi truy cập.

Quy tắc áp dụng

  • Sử dụng 'const val' cho các giá trị cố định như cấu hình, key, hoặc các giá trị không bao giờ thay đổi trong suốt vòng đời ứng dụng.
  • Sử dụng 'val' khi giá trị phụ thuộc vào logic tính toán hoặc kết quả từ hàm khác tại runtime.

Lưu ý

'const val' chỉ có thể được khai báo ở cấp độ file (top-level) hoặc bên trong 'object' / 'companion object'.

454

Cơ chế 'Delegated Properties' trong Kotlin là gì và tại sao việc sử dụng 'by lazy' lại giúp tối ưu hóa tài nguyên hệ thống?

Junior

Cơ chế Delegated Properties

Delegation cho phép chuyển giao logic của việc truy cập (getter/setter) của một thuộc tính cho một đối tượng khác. Điều này giúp tách biệt logic quản lý dữ liệu khỏi logic nghiệp vụ.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
455

Trong Kotlin, sự khác biệt giữa 'map' và 'flatMap' khi xử lý các tập hợp dữ liệu (Collections) là gì, và khi nào nên ưu tiên sử dụng cái nào?

Junior

Bản chất

  • 'map': Biến đổi từng phần tử trong một tập hợp thành một giá trị khác. Kết quả là một tập hợp mới có cùng số lượng phần tử.
  • 'flatMap': Biến đổi từng phần tử thành một tập hợp con, sau đó gộp (flatten) tất cả các tập hợp con đó thành một tập hợp duy nhất.

Khi nào sử dụng?

  • Sử dụng 'map' khi bạn cần chuyển đổi kiểu dữ liệu 1-1 (ví dụ: chuyển danh sách User thành danh sách tên User).
  • Sử dụng 'flatMap' khi mỗi phần tử chứa một danh sách con và bạn muốn lấy ra tất cả các phần tử con đó thành một danh sách phẳng (ví dụ: lấy danh sách tất cả các đơn hàng từ danh sách khách hàng).

Tối ưu hóa

Trong các hệ thống Enterprise xử lý dữ liệu lớn, việc sử dụng 'flatMap' không hợp lý có thể gây tốn bộ nhớ do tạo ra nhiều tập hợp trung gian. Hãy cân nhắc sử dụng 'Sequence' để xử lý dữ liệu theo cơ chế lazy evaluation.

456

Tại sao việc sử dụng 'String' nối chuỗi bằng toán tử '+' trong vòng lặp lại không được khuyến khích trong Kotlin, và giải pháp thay thế tối ưu là gì?

Junior

Vấn đề hiệu năng

Trong Java/Kotlin, 'String' là bất biến (immutable). Mỗi khi bạn dùng toán tử '+', một đối tượng 'String' mới sẽ được tạo ra trong bộ nhớ. Nếu thực hiện trong vòng lặp lớn, nó sẽ tạo ra hàng nghìn đối tượng thừa, gây áp lực lên Garbage Collection (GC).

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
457

Sự khác biệt giữa hai phương thức .width() và .css('width') trong jQuery là gì và tại sao việc chọn sai phương thức có thể dẫn đến lỗi tính toán giao diện?

Junior

Bản chất vấn đề

Junior lập trình viên thường nhầm lẫn giữa việc lấy kích thước phần tử DOM thông qua thuộc tính CSS hay thông qua các phương thức đo lường nội tại của jQuery. Sự khác biệt cốt lõi nằm ở đơn vị trả về và cách tính toán các thành phần trong Box Model (Padding, Border).

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
458

Làm thế nào để sử dụng phương thức .filter() và .not() trong jQuery một cách hiệu quả để lọc tập hợp DOM thay vì dùng vòng lặp thủ công?

Junior

Bản chất vấn đề

Khi thao tác với một tập hợp nhiều phần tử DOM (ví dụ: danh sách các hàng trong bảng), Junior thường viết vòng lặp $.each() kết hợp với câu lệnh điều kiện if để tìm kiếm phần tử thỏa mãn. Cách làm này làm giảm hiệu năng và mã nguồn trở nên cồng kềnh, không tận dụng được cơ chế Native Filtering của jQuery.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
459

Tại sao việc sử dụng phương thức .load() trong jQuery để nạp nội dung HTML trực tiếp vào DOM cần phải được cân nhắc kỹ lưỡng trong các ứng dụng Enterprise hiện đại?

Junior

Bản chất vấn đề

Phương thức .load() của jQuery là một tiện ích ngắn gọn để tải dữ liệu HTML từ một URL và chèn nó vào một phần tử DOM được chọn. Mặc dù tiện lợi, việc lạm dụng phương thức này trong các ứng dụng web quy mô lớn có thể dẫn đến các vấn đề về bảo mật, khó khăn trong quản lý trạng thái và hiệu năng.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
460

Làm thế nào để tối ưu hóa hiệu năng khi thực hiện thao tác ẩn/hiện (Toggle/Fade/Slide) hàng loạt các phần tử DOM bằng jQuery?

Junior

Bản chất vấn đề

Các hiệu ứng chuyển động như .fadeIn(), .fadeOut(), .slideToggle() trong jQuery thực hiện thay đổi thuộc tính CSS liên tục qua từng khung hình (Frames) sử dụng hàm setTimeout hoặc requestAnimationFrame. Khi áp dụng các hiệu ứng này đồng thời cho một số lượng lớn phần tử DOM (ví dụ: danh sách hàng trăm sản phẩm), trình duyệt sẽ gặp hiện tượng tụt khung hình (Jank/Lag) do tắc nghẽn luồng chính (Main Thread).

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
461

Làm thế nào để thực hiện việc hủy bỏ (Abort) một yêu cầu AJAX đang chạy trong jQuery khi người dùng thực hiện hành động chuyển trang hoặc bấm nút hủy?

Junior

Bản chất vấn đề

Khi phát triển ứng dụng web, việc người dùng thực hiện các hành động liên tục như tìm kiếm thời gian thực (Live Search) hoặc bấm nút gửi form nhiều lần có thể tạo ra các yêu cầu AJAX dư thừa. Nếu không hủy bỏ các yêu cầu cũ, ứng dụng có thể gặp tình trạng Race Conditions, phản hồi cũ ghi đè lên phản hồi mới hoặc gây lãng phí tài nguyên mạng.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
462

Trong Swift, sự khác biệt giữa struct và class là gì và khi nào bạn nên ưu tiên sử dụng struct thay vì class trong các dự án iOS Enterprise?

Junior

Phân tích bản chất

  • Struct (Value Type): Khi gán hoặc truyền, dữ liệu được sao chép. Mỗi instance có dữ liệu độc lập, giúp tránh các tác động ngoài ý muốn (side effects) trong môi trường đa luồng.
  • Class (Reference Type): Khi gán hoặc truyền, chỉ có tham chiếu (địa chỉ bộ nhớ) được chuyển đi. Nhiều biến có thể cùng trỏ đến một đối tượng, dễ dẫn đến lỗi thay đổi dữ liệu không kiểm soát.

Khi nào nên sử dụng Struct?

  • Dùng cho các mô hình dữ liệu (Data Models), cấu hình (Configuration), hoặc các thành phần logic nhỏ không yêu cầu quản lý vòng đời phức tạp.
  • Ưu tiên Struct vì tính an toàn (thread-safety) và hiệu năng (cấp phát trên stack nhanh hơn heap).

Ví dụ

struct UserProfile {
    var name: String
    var age: Int
}

Lưu ý thực chiến

Sử dụng Struct giúp giảm thiểu Retain Cycle và các lỗi liên quan đến quản lý bộ nhớ, vốn là nguyên nhân phổ biến gây crash ứng dụng.

463

Tại sao việc sử dụng GCD (Grand Central Dispatch) để thực hiện các tác vụ nặng trên Main Queue lại là một lỗi nghiêm trọng trong phát triển ứng dụng iOS?

Junior

Bản chất vấn đề

  • Main Queue là nơi xử lý các sự kiện giao diện (UI Events), vẽ màn hình (Rendering) và tương tác người dùng. Nếu thực hiện tác vụ nặng (như xử lý ảnh, parsing JSON lớn, truy vấn database) trên Main Queue, luồng này sẽ bị chặn (block).
  • Hậu quả: Ứng dụng bị treo (frozen), khung hình giảm (dropped frames), dẫn đến trải nghiệm người dùng kém và hệ điều hành có thể tiêu diệt ứng dụng nếu nó không phản hồi quá lâu (Watchdog timeout).

Giải pháp

Luôn đẩy các tác vụ nặng vào Background Queue và chỉ cập nhật UI trên Main Queue.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
464

Trong kiến trúc MVVM, làm thế nào để đảm bảo ViewModel không bị phụ thuộc trực tiếp vào các thành phần UIKit, giúp việc Unit Testing trở nên dễ dàng hơn?

Junior

Phương pháp thực hiện

  • Tách biệt logic: ViewModel chỉ nên chứa logic xử lý dữ liệu, không được import UIKit hoặc gọi các thuộc tính như UIButton, UILabel.
  • Data Binding: Sử dụng các cơ chế như Combine, Closure hoặc Delegate để truyền tải thay đổi dữ liệu từ ViewModel sang View.
  • Dependency Injection: Tiêm các dịch vụ (Services) thông qua Protocol vào ViewModel thay vì khởi tạo trực tiếp bên trong.

Ví dụ

protocol DataServiceProtocol {
    func fetchData() -> String
}

class UserViewModel {
    private let service: DataServiceProtocol
    init(service: DataServiceProtocol) {
        self.service = service
    }
}

Lưu ý thực chiến

Khi ViewModel không phụ thuộc vào UIKit, bạn có thể dễ dàng tạo các Mock Object để giả lập dữ liệu trong Unit Test mà không cần chạy giả lập (Simulator).

465

Cơ chế của Protocol-Oriented Programming (POP) trong Swift khác biệt thế nào so với Object-Oriented Programming (OOP) truyền thống và tại sao nó được khuyến khích trong iOS?

Junior

So sánh

  • OOP: Dựa trên kế thừa (Inheritance). Một lớp con chỉ có thể kế thừa từ một lớp cha duy nhất, dễ dẫn đến cây kế thừa cồng kềnh (Massive Base Class).
  • POP: Dựa trên giao thức (Protocol). Một đối tượng có thể tuân thủ nhiều giao thức, cho phép tái sử dụng code linh hoạt thông qua Protocol Extensions.

Tại sao nên dùng POP?

  • Giảm thiểu sự phụ thuộc chặt chẽ (tight coupling).
  • Cho phép định nghĩa hành vi mặc định cho các đối tượng khác nhau mà không cần quan hệ cha-con.

Ví dụ

protocol Loggable {
    func log()
}
extension Loggable {
    func log() { print("Logging action") }
}

Lưu ý thực chiến

Trong các dự án Enterprise, POP giúp code trở nên modular, dễ bảo trì và dễ mở rộng tính năng mà không làm thay đổi cấu trúc phân cấp đối tượng.

High-Ticket Mentoring
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?

Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.

AI Resume Scanner
Kiểm Tra CV Chuẩn ATS Miễn Phí

Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.

vừa nâng cấp PRO khóa 1 phút trước   Tìm hiểu khóa học