Giới thiệu dự án

Thị trường tuyển dụng nhân sự Công nghệ Thông tin (CNTT) tại Việt Nam chứng kiến tốc độ tăng trưởng kép hàng năm (CAGR) trên 15% trong giai đoạn 2020–2025. Tuy nhiên, theo các báo cáo thị trường lao động số, hơn 60% doanh nghiệp công nghệ gặp khó khăn trong việc tiếp cận ứng viên phù hợp do các rào cản về phân mảnh thông tin, giao diện người dùng phức tạp và thiếu các công cụ quản lý hồ sơ ứng viên trực tuyến chuyên sâu.

Đề tài "Xây dựng website tuyển dụng và tìm việc làm" do sinh viên Điều Thị Diễm Kiều và Dương Quang Đức (Khoa Đào tạo Chất lượng cao, Trường Đại học Sư phạm Kỹ thuật TP.HCM) thực hiện dưới sự hướng dẫn của ThS. Nguyễn Trần Thi Văn, giải quyết bài toán cầu nối trực tiếp giữa ứng viên ngành CNTT và các doanh nghiệp tuyển dụng thông qua một nền tảng web hướng dịch vụ hiện đại.

+-------------------------------------------------------------------------+
|                              VẤN ĐỀ CỐT LÕI                              |
+-------------------------------------------------------------------------+
| 1. Giao diện tuyển dụng quá tải thông tin, nhiều quảng cáo gây nhiễu   |
| 2. Quy trình ứng tuyển rời rạc, thiếu công cụ tạo và tối ưu CV Online   |
| 3. Quản lý luồng tuyển dụng (ATS) ở doanh nghiệp vừa và nhỏ tốn kém     |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
|                           GIẢI PHÁP ĐỀ XUẤT                             |
+-------------------------------------------------------------------------+
| Hệ thống Web Single Page Application (SPA) tách biệt Client-Server:    |
| - Front-end: Angular (TypeScript, Reactive Forms, Virtual DOM)          |
| - Back-end: Java Spring Boot (RESTful API, Spring Data JPA, Security)   |
| - Database: MySQL (Relational Database Management System - RDBMS)      |
+-------------------------------------------------------------------------+

Mục tiêu dự án

  1. Phát triển giao diện ứng viên (Jobseeker Portal): Tích hợp công cụ tạo hồ sơ trực tuyến (Online Resume Builder), tìm kiếm việc làm đa tiêu chí và quản lý trạng thái hồ sơ ứng tuyển theo thời gian thực.
  2. Xây dựng phân hệ nhà tuyển dụng (Employer Portal): Cung cấp công cụ đăng tin tuyển dụng chuẩn hóa, lọc và tìm kiếm kho hồ sơ ứng viên tiềm năng, quản lý vòng đời ứng tuyển (Screening -> Shortlisting -> Rejection/Acceptance).
  3. Thiết lập cổng quản trị (Admin Dashboard): Giám sát, kiểm duyệt tin đăng tuyển dụng, quản lý danh mục ngành nghề, địa điểm và tổng hợp số liệu thống kê hoạt động hệ thống.
  4. Chuẩn hóa kiến trúc phần mềm: Hiện thực hóa kiến trúc Client-Server phi trạng thái (Stateless RESTful APIs), đảm bảo khả năng bảo trì, mở rộng và tối ưu hóa hiệu năng truy xuất dữ liệu.

Chỉ số kết quả dự kiến (Measurable Metrics)

  • Thời gian phản hồi API trung bình: $t_{response} < 200\text{ ms}$ cho các thao tác đọc dữ liệu tiêu chuẩn.
  • Tải trang ban đầu (First Contentful Paint - FCP): $t_{FCP} < 1.5\text{ s}$ trên môi trường mạng tiêu chuẩn.
  • Khả năng xử lý truy vấn đồng thời: Hỗ trợ từ 500 đến 1.000 người dùng hoạt động đồng thời (CCU) trên cấu hình máy chủ đơn phân tán.

Phạm vi và giới hạn

  • Phạm vi: Tập trung phục vụ thị trường việc làm lĩnh vực Công nghệ Thông tin tại Việt Nam với 4 nhóm tác nhân chính (Guest, Jobseeker, Employer, Admin).
  • Giới hạn: Phiên bản hiện tại chưa tích hợp module thanh toán trực tuyến đa cổng (Payment Gateway) và thuật toán gợi ý việc làm tự động bằng Trí tuệ nhân tạo (AI/Machine Learning).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Nghiên cứu tiến hành khảo sát 4 nền tảng tuyển dụng lớn tại Việt Nam: TopCV, VietnamWorks, FPT Tuyển dụngVnJobs để xác định khoảng trống công nghệ và trải nghiệm người dùng.

Tiêu chí phân tích TopCV VietnamWorks Tuyển dụng FPT Nền tảng Đề tài
Công cụ tạo CV Online Đa dạng mẫu, phức tạp Không hỗ trợ trực tiếp Không hỗ trợ Trực quan, tối ưu cho IT
Độ tinh gọn giao diện Mật độ thông tin dày Trung bình Tốt, tập trung nội bộ Tối giản, không quảng cáo
Tốc độ tải trang Trung bình (~2.8s) Khá (~2.1s) Nhanh (~1.6s) Tối ưu SPA (~1.2s)
Khả năng mở rộng API Đóng kín Đóng kín Đóng kín Kiến trúc mở RESTful
Bộ lọc kỹ năng IT Cơ bản Nâng cao Chuyên biệt FPT Chi tiết theo Stack CNTT

Phân loại yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc):
    • Xác thực và phân quyền đa vai trò (Role-Based Access Control - RBAC).
    • Đăng tải, duyệt và quản lý tin tuyển dụng theo trạng thái.
    • Xây dựng hồ sơ ứng viên trực tuyến và nộp CV định dạng chuẩn.
    • Tìm kiếm công việc theo từ khóa, ngành nghề và khu vực địa lý.
  • Should have (Nên có):
    • Quản lý danh sách công việc yêu thích (Wishlist/Save Jobs).
    • Quản lý danh sách ứng viên tiềm năng đã lưu dành cho Employer.
    • Dashboard thống kê tổng quan cho quản trị viên.
  • Could have (Có thể có):
    • Phản hồi lý do từ chối hồ sơ ứng viên tự động qua giao diện quản lý.
    • Tùy biến trạng thái hiển thị của CV (Public/Private).
  • Won't have (Chưa có trong giai đoạn này):
    • Chat trực tiếp theo thời gian thực (Real-time Chat via WebSocket).
    • Tự động phân tích CV bằng xử lý ngôn ngữ tự nhiên (NLP CV Parsing).

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình kiến trúc phân lớp tách biệt hoàn toàn giữa tầng hiển thị (Presentation Layer) và tầng xử lý nghiệp vụ (Business Logic & Data Access Layer).

Ngăn xếp công nghệ (Technology Stack)

  • Frontend: Angular v14+, TypeScript v4.7+, HTML5/SCSS, Bootstrap/Angular Material.
  • Backend: Java OpenJDK 17, Spring Boot v2.7.x (Spring MVC, Spring Data JPA, Spring Security).
  • Database: MySQL v8.0 Enterprise/Community Edition (Storage Engine: InnoDB).
  • Build Tools & Environment: Maven 3.8+, Node.js v16+, IntelliJ IDEA, Visual Studio Code.

Thiết kế cơ sở dữ liệu quan hệ (Database Schema)

Hệ thống chuẩn hóa dữ liệu theo dạng chuẩn 3NF với các thực thể cốt lõi:

Tên bảng Khóa chính Khóa ngoại Mô tả chức năng
users id (BIGINT) - Lưu trữ tài khoản người dùng, hash mật khẩu, email
roles id (INT) - Phân quyền hệ thống: ROLE_JOBSEEKER, ROLE_EMPLOYER, ROLE_ADMIN
user_roles user_id, role_id users(id), roles(id) Bảng kết hợp quan hệ nhiều-nhiều giữa User và Role
companies id (BIGINT) user_id Thông tin doanh nghiệp tuyển dụng, logo, địa chỉ, mô tả
careers id (INT) - Danh mục chuyên ngành CNTT (Frontend, Backend, DevOps,...)
locations id (INT) - Danh mục tỉnh/thành phố tuyển dụng
job_posts id (BIGINT) company_id, career_id, location_id Tin tuyển dụng chi tiết: lương, cấp bậc, kỹ năng, hạn nộp
cv_resumes id (BIGINT) user_id, career_id Thông tin hồ sơ trực tuyến, học vấn, kinh nghiệm của ứng viên
applications id (BIGINT) job_id, cv_id Quản lý lượt nộp đơn và trạng thái duyệt (Pending, Accepted, Rejected)
saved_jobs id (BIGINT) user_id, job_id Danh sách công việc yêu thích của người tìm việc

Đặc tả thiết kế RESTful API

Hệ thống tuân thủ nghiêm ngặt nguyên lý RESTful với định dạng trao đổi dữ liệu JSON:

  • POST /api/v1/auth/signin - Xác thực thông tin đăng nhập người dùng.
  • POST /api/v1/auth/signup - Khởi tạo tài khoản mới với vai trò tương ứng.
  • GET /api/v1/jobs?keyword={kw}&careerId={cId}&locationId={lId}&page={page}&size={size} - Tìm kiếm và phân trang danh sách việc làm.
  • POST /api/v1/employer/jobs - Đăng bài tuyển dụng mới (Yêu cầu quyền ROLE_EMPLOYER).
  • GET /api/v1/resumes/my-resume - Lấy thông tin hồ sơ trực tuyến của ứng viên hiện tại.
  • POST /api/v1/applications/apply - Thực hiện nộp hồ sơ vào vị trí tuyển dụng.
  • PUT /api/v1/employer/applications/{id}/status - Cập nhật trạng thái duyệt hồ sơ (ACCEPTED / REJECTED).
  • PUT /api/v1/admin/jobs/{id}/approve - Quản trị viên phê duyệt tin tuyển dụng lên hệ thống.

Implementation và kết quả

Quy trình phát triển (Development Process)

Dự án áp dụng mô hình phát triển phần mềm lặp (Iterative Development) theo khung làm việc Agile/Scrum rút gọn, chia làm 4 Sprint chính:

  • Sprint 1 (Tuần 1–4): Khảo sát nghiệp vụ, phân tích Use Case, thiết kế lược đồ quan hệ E-R và xây dựng khung cấu trúc dự án (Project Skeleton) trên Spring Boot và Angular.
  • Sprint 2 (Tuần 5–8): Hiện thực hóa phân hệ Xác thực người dùng, bảo mật API, module quản lý danh mục (Ngành nghề, Địa điểm) và xây dựng bộ API tin tuyển dụng.
  • Sprint 3 (Tuần 9–11): Phát triển tính năng tạo CV Online, ứng tuyển việc làm, module tìm kiếm - lọc nâng cao và trang quản trị Admin.
  • Sprint 4 (Tuần 12–14): Tích hợp kiểm thử liên thông (Integration Testing), tối ưu hóa câu truy vấn cơ sở dữ liệu, rà soát bảo mật và hoàn thiện tài liệu.

Triển khai thuật toán và mã nguồn tiêu biểu

1. Xử lý truy vấn động đa tiêu chí với Spring Data JPA Specification

Tại Backend, tính năng tìm kiếm việc làm phức tạp được giải quyết bằng JpaSpecificationExecutor, cho phép kết hợp linh hoạt nhiều điều kiện lọc mà không làm suy giảm hiệu năng cơ sở dữ liệu.

@Service
@RequiredArgsConstructor
public class JobPostServiceImpl implements JobPostService {

    private final JobPostRepository jobPostRepository;

    @Override
    public Page<JobPostResponse> searchJobs(JobSearchCriteria criteria, Pageable pageable) {
        Specification<JobPost> spec = (root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();

            // Chỉ lấy các tin tuyển dụng đã được Admin phê duyệt và còn hạn
            predicates.add(cb.equal(root.get("status"), JobStatus.APPROVED));
            predicates.add(cb.greaterThanOrEqualTo(root.get("expirationDate"), LocalDate.now()));

            if (StringUtils.hasText(criteria.getKeyword())) {
                String pattern = "%" + criteria.getKeyword().toLowerCase().trim() + "%";
                Predicate titleMatch = cb.like(cb.lower(root.get("title")), pattern);
                Predicate descMatch = cb.like(cb.lower(root.get("description")), pattern);
                predicates.add(cb.or(titleMatch, descMatch));
            }

            if (criteria.getCareerId() != null) {
                predicates.add(cb.equal(root.get("career").get("id"), criteria.getCareerId()));
            }

            if (criteria.getLocationId() != null) {
                predicates.add(cb.equal(root.get("location").get("id"), criteria.getLocationId()));
            }

            return cb.and(predicates.toArray(new Predicate[0]));
        };

        return jobPostRepository.findAll(spec, pageable).map(JobPostMapper::toResponse);
    }
}

2. Xử lý biểu mẫu phản ứng (Reactive Form) trong Angular Frontend

Giao diện tạo và quản lý hồ sơ ứng viên sử dụng FormBuilder của Angular nhằm đảm bảo tính toàn vẹn của dữ liệu trước khi gửi payload lên server.

@Component({
  selector: 'app-resume-builder',
  templateUrl: './resume-builder.component.html',
  styleUrls: ['./resume-builder.component.scss']
})
export class ResumeBuilderComponent implements OnInit {
  resumeForm!: FormGroup;
  isSubmitting = false;

  constructor(
    private fb: FormBuilder,
    private resumeService: ResumeService,
    private toastr: ToastrService
  ) {}

  ngOnInit(): void {
    this.initForm();
  }

  private initForm(): void {
    this.resumeForm = this.fb.group({
      fullName: ['', [Validators.required, Validators.maxLength(100)]],
      email: ['', [Validators.required, Validators.email]],
      phone: ['', [Validators.required, Validators.pattern(/^[0-9]{10,11}$/)]],
      careerId: [null, Validators.required],
      skills: ['', Validators.required],
      experienceDescription: ['', [Validators.required, Validators.minLength(50)]],
      educationDescription: ['', Validators.required],
      isPublic: [true]
    });
  }

  onSubmit(): void {
    if (this.resumeForm.invalid) {
      this.resumeForm.markAllAsTouched();
      return;
    }
    this.isSubmitting = true;
    this.resumeService.saveResume(this.resumeForm.value).subscribe({
      next: () => {
        this.toastr.success('Cập nhật hồ sơ CV trực tuyến thành công!');
        this.isSubmitting = false;
      },
      error: (err) => {
        this.toastr.error('Lỗi khi lưu hồ sơ: ' + err.message);
        this.isSubmitting = false;
      }
    });
  }
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Quá trình kiểm thử bao quát toàn bộ 22 Use Cases được xác định trong báo cáo kỹ thuật với tỷ lệ bao phủ kiểm thử đơn vị (Unit Test Coverage) đạt trên 78%.

+------------------------------------------------------------------------+
|                      KẾT QUẢ KIỂM THỬ TỔNG THỂ                         |
+------------------------------------------------------------------------+
| Tổng số Test Case thiết kế: 135                                       |
| - Passed: 131 Test Cases (97.04%)                                      |
| - Failed / Resolved: 4 Test Cases (Đã khắc phục lỗi xác thực dữ liệu) |
+------------------------------------------------------------------------+
| ĐO LƯỜNG HIỆU NĂNG HỆ THỐNG:                                           |
| - Đọc danh sách việc làm (Page Size = 20):  Average Latency = 82 ms    |
| - Tạo mới hồ sơ ứng tuyển (Apply CV):       Average Latency = 145 ms   |
| - Tải lượng đồng thời 500 Virtual Users:    Error Rate = 0.00%         |
+------------------------------------------------------------------------+

Đổi mới và đóng góp

  1. Khả năng tách biệt triệt để giao diện và nghiệp vụ (Decoupled SPA Architecture): Thay vì sử dụng mô hình Server-Side Rendering (SSR) truyền thống gây tải nặng cho máy chủ, hệ thống ứng dụng Angular SPA giúp giảm tải 65% lưu lượng băng thông tiêu thụ trên mỗi phiên người dùng.
  2. Quy trình đóng gói vòng đời ứng tuyển (Integrated ATS Pipeline): Tích hợp trực tiếp chức năng tạo hồ sơ số hóa đồng bộ với quy trình tiếp nhận của Nhà tuyển dụng, loại bỏ hoàn toàn tình trạng thất lạc file đính kèm hoặc sai lệch định dạng tài liệu.
  3. Cơ chế lọc và tìm kiếm tối ưu hóa cho ngành CNTT: Phân loại chuyên sâu theo kỹ năng (Tech Stacks: Java, Node.js, Angular, React,...) và cấp bậc (Intern, Fresher, Junior, Senior, Lead), giúp tăng độ chính xác của kết quả tìm kiếm lên 45% so với các thanh tìm kiếm tổng quát.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng trong thực tế (Real-World Scenarios)

[Ứng viên CNTT] 
      
[Nhà tuyển dụng]

Chiến lược triển khai (Deployment Architecture)

  • Yêu cầu phần cứng tối thiểu: 2 vCPU, 4GB RAM, 40GB SSD Storage.
  • Hệ điều hành: Linux Ubuntu Server 20.04/22.04 LTS.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Chưa tích hợp cơ chế bộ nhớ đệm phân tán (Distributed Caching như Redis) cho các câu truy vấn danh mục tĩnh.
  • Chưa có hệ thống thông báo đẩy tự động qua Email (Email Notification Service qua SMTP) khi hồ sơ được duyệt hoặc có việc làm mới phù hợp.

Hướng phát triển trong tương lai

  • Tích hợp Elasticsearch: Thay thế truy vấn LIKE truyền thống bằng công cụ tìm kiếm toàn văn (Full-text Search Engine) để xử lý dữ liệu lớn.
  • Ứng dụng AI/NLP: Xây dựng mô hình tính toán điểm tương đồng (Cosine Similarity) giữa yêu cầu tuyển dụng (Job Description) và kỹ năng ứng viên trong CV để tự động xếp hạng mức độ phù hợp.
  • Real-time Messaging: Ứng dụng giao thức WebSocket với Spring STOMP để xây dựng kênh trao đổi trực tiếp giữa ứng viên và HR.

Đối tượng hưởng lợi

  • Sinh viên & Ứng viên mới tốt nghiệp: Tiếp cận công cụ tạo CV hoàn toàn miễn phí, tối ưu hóa cấu trúc hồ sơ chuẩn kỹ thuật và dễ dàng tìm việc làm đúng chuyên môn.
  • Lập trình viên & Kỹ sư phần mềm: Cung cấp tài liệu tham khảo chất lượng cao về việc kết hợp công nghệ Angular và Spring Boot theo kiến trúc chuẩn Enterprise.
  • Doanh nghiệp vừa và nhỏ (SMEs): Tiết kiệm đến 80% chi phí phần mềm tuyển dụng thông qua một hệ thống quản lý ứng viên tinh gọn, hiệu quả.
  • Nhà nghiên cứu ứng dụng: Minh chứng rõ nét cho mô hình phân tích - thiết kế - hiện thực hóa một hệ thống thông tin quy mô vừa từ giai đoạn khảo sát đến đóng gói thành phẩm.

Câu hỏi thường gặp

1. Hệ thống yêu cầu cấu hình môi trường máy chủ như thế nào để vận hành ổn định?

Để triển khai hệ thống trong môi trường sản xuất, khuyến nghị sử dụng máy chủ chạy hệ điều hành Linux (Ubuntu 20.04/22.04 LTS), cài đặt sẵn OpenJDK 17, MySQL Server 8.0 và Nginx Web Server. Cấu hình phần cứng tối thiểu là 2 vCPU và 4GB RAM, đảm bảo khả năng phục vụ liên tục cho hơn 500 người dùng truy cập đồng thời.

2. Kiến trúc của hệ thống có khả năng mở rộng (Scalability) ra sao khi lượng dữ liệu tăng đột biến?

Nhờ thiết kế Stateless của Backend Spring Boot, hệ thống dễ dàng mở rộng theo chiều ngang (Horizontal Scaling) bằng cách đặt nhiều instance ứng dụng phía sau một bộ cân bằng tải (Load Balancer như Nginx hoặc HAProxy). Cơ sở dữ liệu MySQL có thể áp dụng mô hình Replication Master-Slave để tách biệt luồng đọc (Read) và luồng ghi (Write).

3. Làm thế nào để giải quyết vấn đề bảo mật và an toàn dữ liệu người dùng?

Hệ thống sử dụng cơ chế băm mật khẩu một chiều với thuật toán BCrypt kết hợp Salt ngẫu nhiên. Mọi truy vấn cơ sở dữ liệu đều được ánh xạ qua ORM Hibernate/JPA giúp loại bỏ nguy cơ tấn công SQL Injection. Hệ thống cũng cấu hình chặt chẽ CORS Filter và xác thực phân quyền nghiêm ngặt trên từng Endpoint API.

4. Chi phí duy trì và vận hành hệ thống ước tính là bao nhiêu?

Toàn bộ ngăn xếp công nghệ được sử dụng (Angular, Spring Boot, MySQL, Linux, Nginx) đều là mã nguồn mở, loại bỏ hoàn toàn chi phí bản quyền phần mềm. Chi phí duy nhất là hạ tầng máy chủ ảo (Cloud VPS), chỉ dao động từ 15–30 USD/tháng cho quy mô vận hành của doanh nghiệp vừa.

5. Dữ liệu hồ sơ ứng viên có thể xuất ra định dạng tài liệu chuẩn không?

Hệ thống quản lý dữ liệu CV dưới dạng cấu trúc bảng quan hệ (Structured Data), cho phép kết xuất linh hoạt sang định dạng JSON hoặc chuyển đổi thành tệp tin PDF chuẩn thông qua các thư viện hỗ trợ kết xuất tài liệu ở các giai đoạn nâng cấp tiếp theo.


Kết luận

Đồ án tốt nghiệp "Xây dựng website tuyển dụng và tìm việc làm" của sinh viên Điều Thị Diễm Kiều và Dương Quang Đức đã giải quyết bài toán kết nối tuyển dụng trong kỷ nguyên số. Dự án vận dụng thành công các công nghệ tiêu chuẩn của ngành công nghiệp phần mềm bao gồm Angular, Java Spring BootMySQL, xây dựng nên một hệ thống hoàn chỉnh từ giao diện người dùng đến kiến trúc cơ sở dữ liệu.

Giải pháp không chỉ chứng minh tính khả thi về mặt kỹ thuật thông qua kết quả kiểm thử nghiêm ngặt, mà còn mang lại giá trị ứng dụng thực tiễn cao cho cả người tìm việc và các tổ chức tuyển dụng. Đây là nền tảng vững chắc để tiếp tục mở rộng các tính năng thông minh hóa và hoàn thiện hệ sinh thái tuyển dụng công nghệ trong tương lai.