Việc làm

14/09 · Hồ Chí Minh · Hybrid

.NET Developers (English, Mortgage Systems)

Topicus Vietnam · Backend Developer

Xem mô tả & ứng tuyển trên ITviecMô tả công việc, lương và ứng tuyển nằm ở ITviec.

10 câu hỏi có thể gặp khi phỏng vấn

Chọn theo kỹ năng và cấp của tin (C# & .NET). Gợi ý trả lời do Drama Công Ty biên soạn để bạn ôn nhanh, không phải đề của công ty.

  1. 01Bạn tối ưu hiệu năng một Web API .NET chịu tải cao thế nào?C# & .NET · Senior

    Gợi ý trả lời

    Bắt đầu bằng đo đạc (load test, APM, profiler), sau đó xử lý các điểm nghẽn phổ biến theo thứ tự tác động.

    • I/O: async xuyên suốt, không sync-over-async; dùng connection pool đúng cách.
    • Database: projection, AsNoTracking, index đúng, tránh N+1; với bulk update dùng ExecuteUpdateAsync.
    • Cache: IMemoryCache, distributed cache (Redis), HybridCache từ .NET 9, output caching cho response công khai.
    • Cấp phát bộ nhớ: giảm object tạm trong hot path, dùng Span<T>, ArrayPool, System.Text.Json với source generator.
    • Hạ tầng: response compression, rate limiting middleware, scale ngang khi stateless.

    Luôn so sánh số liệu trước và sau (p95 latency, throughput, CPU, GC). Micro-optimize nên đo bằng BenchmarkDotNet.

    Hay sai: tối ưu code C# trong khi 90% thời gian nằm ở query DB.

    Ôn thêm câu hỏi C# & .NET →
  2. 02Bạn tổ chức một dự án .NET lớn thế nào? Clean Architecture có luôn cần thiết?C# & .NET · Senior

    Gợi ý trả lời

    Mục tiêu là tách nghiệp vụ khỏi chi tiết hạ tầng để dễ test và dễ thay đổi; mức độ tách nên tương xứng với độ phức tạp của dự án.

    Clean Architecture điển hình có các project: Domain (entity, rule), Application (use case, interface), Infrastructure (EF Core, gửi mail, gọi API ngoài), Api (controller hoặc minimal API). Phụ thuộc chỉ hướng vào trong.

    • Dịch vụ CRUD nhỏ thì cách tổ chức theo vertical slice (mỗi tính năng một thư mục) thường gọn hơn và ít boilerplate.
    • Tránh bọc thêm repository chung chung lên EF Core nếu nó chỉ chuyển tiếp lời gọi.
    • MediatR hay CQRS là công cụ, không phải yêu cầu bắt buộc.

    Người phỏng vấn muốn nghe: bạn hiểu trade-off giữa số lớp trừu tượng và tốc độ phát triển, và nêu được lý do cho lựa chọn trong dự án gần nhất.

    Ôn thêm câu hỏi C# & .NET →
  3. 03Phân biệt value type và reference type trong C#. struct khác class thế nào?C# & .NET · Junior

    Gợi ý trả lời

    Value type (int, bool, struct, enum) chứa trực tiếp dữ liệu, gán là sao chép giá trị. Reference type (class, string, mảng, delegate) chứa tham chiếu tới object trên heap, gán là sao chép tham chiếu.

    • Biến cục bộ value type thường nằm trên stack, nhưng nếu là field của class thì nằm trên heap cùng object đó.
    • struct không kế thừa được, hợp với dữ liệu nhỏ, bất biến (toạ độ, tiền tệ). Nên khai báo readonly struct.
    • Ép value type sang object hoặc interface gây boxing, tốn cấp phát.
    var a = new Point(1, 2);  // struct
    var b = a; b.X = 9;       // a.X vẫn là 1
    

    Hay sai: nói "value type luôn nằm trên stack". Hãy nói về ngữ nghĩa sao chép thay vì vị trí bộ nhớ.

    Ôn thêm câu hỏi C# & .NET →
  4. 04async/await hoạt động thế nào? Vì sao không nên dùng .Result hay .Wait()?C# & .NET · Junior

    Gợi ý trả lời

    async/await giúp viết code bất đồng bộ như tuần tự: khi gặp await một tác vụ chưa xong, method trả quyền điều khiển, thread được giải phóng, phần còn lại chạy tiếp khi tác vụ hoàn thành. Trình biên dịch biến method thành một state machine.

    • Async giúp không chặn thread khi chờ I/O (DB, HTTP), nhờ vậy server phục vụ được nhiều request hơn; nó không tự làm code chạy nhanh hơn.
    • Việc nặng về CPU mới cần Task.Run.

    Gọi .Result hoặc .Wait() chặn thread đang chờ. Ở môi trường có SynchronizationContext (WinForms, WPF, ASP.NET cũ) dễ gây deadlock; ở ASP.NET Core gây cạn thread pool khi tải cao.

    Hay sai: dùng async void ngoài event handler, exception sẽ không bắt được. Hãy trả về Task và "async all the way".

    Ôn thêm câu hỏi C# & .NET →
  5. 05Interface và abstract class khác nhau thế nào? Khi nào dùng cái nào?C# & .NET · Junior

    Gợi ý trả lời

    Interface mô tả khả năng (hợp đồng) mà nhiều kiểu không liên quan có thể cùng thực hiện; abstract class là lớp cha dùng chung code và trạng thái cho một họ lớp gần nhau.

    • Một class implement nhiều interface nhưng chỉ kế thừa một class.
    • Abstract class có field, constructor, method có sẵn thân.
    • Từ C# 8 interface có default implementation, nhưng vẫn không có field trạng thái.

    Dùng interface cho các phụ thuộc cần thay thế hoặc mock trong test (IEmailSender, IOrderRepository). Dùng abstract class khi các lớp con thật sự chia sẻ logic, vd. BaseHandler xử lý log và retry chung.

    Người phỏng vấn muốn nghe: bạn ưu tiên composition và interface, chỉ dùng kế thừa khi có quan hệ "là một" rõ ràng.

    Ôn thêm câu hỏi C# & .NET →
  6. 06IEnumerable và IQueryable khác nhau thế nào khi dùng LINQ với Entity Framework?C# & .NET · Junior

    Gợi ý trả lời

    IQueryable giữ biểu thức truy vấn (expression tree) để provider như EF Core dịch thành SQL chạy trên DB. IEnumerable chạy LINQ trong bộ nhớ trên dữ liệu đã tải về.

    // Lọc trong SQL: chỉ tải đơn đã thanh toán
    var paid = db.Orders.Where(o => o.Status == Status.Paid).ToList();
    
    // Tải cả bảng rồi mới lọc trong RAM
    IEnumerable<Order> all = db.Orders;
    var paid2 = all.Where(o => o.Status == Status.Paid).ToList();
    
    • Cả hai đều deferred execution: chỉ chạy khi duyệt hoặc gọi ToList(), Count(), First()...
    • Duyệt cùng một IEnumerable lazy nhiều lần có thể chạy truy vấn nhiều lần.

    Hay sai: gọi ToList() hoặc AsEnumerable() quá sớm rồi mới lọc, phân trang, khiến tải cả bảng về.

    Ôn thêm câu hỏi C# & .NET →
  7. 07Dependency Injection trong ASP.NET Core: phân biệt Transient, Scoped và Singleton.C# & .NET

    Gợi ý trả lời

    ASP.NET Core có DI container sẵn; lifetime quyết định khi nào tạo instance mới.

    • Transient: mỗi lần resolve tạo mới. Hợp với service nhẹ, không trạng thái.
    • Scoped: một instance cho mỗi request (mỗi scope). DbContext mặc định là scoped.
    • Singleton: một instance cho cả vòng đời ứng dụng. Phải thread-safe.
    builder.Services.AddScoped<IOrderService, OrderService>();
    builder.Services.AddSingleton<IClock, SystemClock>();
    

    Hay sai: inject service scoped (như DbContext) vào singleton, gọi là captive dependency: DbContext bị giữ mãi và dùng chung giữa nhiều thread. Môi trường Development sẽ báo lỗi khi validate scope. Nếu singleton cần dữ liệu scoped, hãy inject IServiceScopeFactory và tự tạo scope.

    Ôn thêm câu hỏi C# & .NET →
  8. 08Middleware trong ASP.NET Core là gì? Thứ tự đăng ký có quan trọng không?C# & .NET

    Gợi ý trả lời

    Middleware là các bước nối thành pipeline xử lý request: mỗi bước có thể xử lý, gọi bước kế tiếp, rồi xử lý tiếp response trên đường về. Thứ tự rất quan trọng vì request đi qua đúng theo thứ tự đăng ký.

    app.UseExceptionHandler("/error");
    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseCors();
    app.UseAuthentication();
    app.UseAuthorization();
    app.MapControllers();
    
    • Exception handler phải đứng đầu để bắt lỗi của mọi bước sau.
    • UseAuthentication phải trước UseAuthorization, nếu không user luôn là ẩn danh.
    • Middleware có thể "short-circuit", vd. trả cache hoặc 401 mà không gọi next.

    Người phỏng vấn muốn nghe: bạn từng viết middleware riêng, vd. gắn correlation id hoặc log thời gian xử lý, và phân biệt được middleware với filter của MVC.

    Ôn thêm câu hỏi C# & .NET →
  9. 09Where do you see yourself in three to five years?Phỏng vấn tiếng Anh

    Gợi ý trả lời

    "In three to five years, I see myself as a senior engineer who can design and own a major part of the system. I'd also like to mentor junior developers, because I enjoyed doing that in my current team. To get there, I'm studying system design and taking on more responsibility in technical discussions. I hope to grow in that direction with a company like yours."

    Mẹo: dùng "I see myself…", "I'd like to…", "I hope to…". Mục tiêu nên thực tế và liên quan tới công việc đang ứng tuyển. Người Việt hay nói "I want to become a leader" quá chung chung; nên nói rõ leader làm việc gì.

    Ôn thêm câu hỏi Phỏng vấn tiếng Anh →
  10. 10Vì sao bạn chọn ứng tuyển vào công ty chúng tôi?Câu hỏi hành vi & văn hoá

    Gợi ý trả lời

    Câu này kiểm tra bạn có tìm hiểu không hay chỉ rải CV. Nối ba thứ: công ty, vị trí, và bạn.

    • Tìm hiểu trước: sản phẩm, khách hàng, công nghệ, tin tức gần đây, đánh giá của nhân viên cũ và hiện tại.
    • Chọn một hai điểm cụ thể bạn thật sự quan tâm: sản phẩm bạn từng dùng, bài toán kỹ thuật, quy mô người dùng, văn hoá làm việc.
    • Nối với kinh nghiệm hoặc mục tiêu của bạn.

    Câu mẫu: "Em có dùng ứng dụng của bên mình và thấy phần thanh toán rất mượt. Trong JD có nói team đang mở rộng hệ thống xử lý giao dịch, đúng mảng em đã làm hai năm. Em nghĩ mình đóng góp được ngay và cũng học được nhiều ở quy mô lớn hơn."

    Hay sai: "Vì công ty lớn, lương tốt" hoặc khen chung chung áp vào công ty nào cũng được.

    Ôn thêm câu hỏi Câu hỏi hành vi & văn hoá →

Bạn đã phỏng vấn ở Topicus Vietnam?

Kể lại các vòng và câu hỏi đã gặp (ẩn danh) để người sau ôn đúng trọng tâm.

Chia sẻ kinh nghiệm phỏng vấn