Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh cuộc Cách mạng công nghiệp 4.0 phát triển mạnh mẽ, nhu cầu tìm kiếm việc làm của người lao động cũng như nhu cầu tuyển dụng nhân sự của các tổ chức, doanh nghiệp ngày càng gia tăng. Sự bùng nổ của công nghệ thông tin đã thúc đẩy sự ra đời của hàng loạt website tuyển dụng trực tuyến tại Việt Nam như Timviecnhanh, Itviec, CareerBuilder, TopCV, Jobsgo hay Timviec365. Tuy nhiên, sự phân mảnh thông tin giữa các nền tảng này đã dẫn đến nhiều bất cập thực tiễn:

  • Đối với người tìm việc: Sự xuất hiện của quá nhiều trang web tuyển dụng khiến ứng viên gặp khó khăn trong việc chọn lựa kênh tìm kiếm phù hợp. Khi không tìm thấy vị trí mong muốn trên một website, họ buộc phải chuyển sang nền tảng khác và lặp lại toàn bộ quy trình tìm kiếm từ đầu. Mỗi website lại sở hữu công cụ tìm kiếm, bộ lọc và quy chuẩn hiển thị bài đăng khác nhau; thậm chí cùng một vị trí tuyển dụng của một công ty có thể xuất hiện trên nhiều trang với các điều khoản không đồng nhất, gây hoang mang cho người lao động.
  • Đối với doanh nghiệp: Các doanh nghiệp vừa và nhỏ, mới thành lập gặp nhiều bất lợi trong việc tiếp cận ứng viên tiềm năng do khó cạnh tranh độ phủ truyền thông với các tập đoàn lớn. Ngoại trừ LinkedIn, thị trường tuyển dụng trong nước có rất ít hệ thống tổng hợp thông tin hồ sơ ứng viên để hỗ trợ nhà tuyển dụng chủ động tìm kiếm nhân tài.
  • Đối với công tác nghiên cứu và đào tạo: Thị trường hiện thiếu một tập dữ liệu chuẩn hóa bằng tiếng Việt tổng hợp thông tin việc làm từ các website để phục vụ việc huấn luyện các thuật toán học máy (Machine Learning). Các mô hình này đóng vai trò quan trọng trong việc dự báo xu hướng nhu cầu lao động tương lai, giúp học sinh, sinh viên định hướng nghề nghiệp rõ ràng và hỗ trợ các cơ sở giáo dục điều chỉnh chương trình đào tạo bám sát thực tiễn.

Trước thực trạng đó, đồ án tốt nghiệp ngành Công nghệ thông tin của nhóm tác giả Trần Phương Nam và Nguyễn Thị Ngọc Trân (Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh, thực hiện từ ngày 22/02/2020 đến ngày 01/07/2020 dưới sự hướng dẫn của TS. Huỳnh Xuân Phụng) đã xác định các mục tiêu và nhiệm vụ nghiên cứu cụ thể:

Mục tiêu nghiên cứu:

  1. Tìm hiểu các công nghệ lập trình hiện đại gồm Spring Framework, hệ quản trị cơ sở dữ liệu MySQL và nền tảng Angular 9 để xây dựng một website tuyển dụng việc làm hoàn chỉnh cho cả ứng viên lẫn doanh nghiệp.
  2. Thiết kế và phát triển hệ thống crawler tự động tổng hợp bài đăng việc làm từ các cổng thông tin việc làm phổ biến tại Việt Nam thông qua thư viện Jsoup và Crawler4j.
  3. Xây dựng tập dữ liệu việc làm tổng hợp phục vụ cộng đồng nghiên cứu học máy.

Nhiệm vụ nghiên cứu:

  1. Khảo sát thực trạng hoạt động và những khó khăn mà các website việc làm hiện nay đang đối mặt, từ đó thiết kế giao diện đơn giản, dễ sử dụng cho mọi đối tượng.
  2. Khảo sát cấu trúc tổ chức dữ liệu từ 5 website việc làm phổ biến tại Việt Nam gồm: Jobsgo, TopCV, CareerBuilder, Timviecnhanh và Timviec365; phân tích và thiết kế hệ thống cơ sở dữ liệu đáp ứng yêu cầu lưu trữ và vận hành của hệ thống crawler.
  3. Xây dựng trang web tổng hợp việc làm tích hợp cơ chế gợi ý việc làm và ứng viên, bảo đảm tính hợp pháp trong việc xuất trích dữ liệu và cung cấp tập dữ liệu tổng hợp cho cộng đồng nghiên cứu máy học.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Hệ thống thông tin việc làm trực tuyến, kỹ thuật bóc tách dữ liệu web (web crawling/scraping) và quy trình kết nối tuyển dụng giữa ứng viên và doanh nghiệp.
  • Phạm vi dữ liệu: Khảo sát và thu thập thông tin tuyển dụng từ 5 website việc làm tại Việt Nam (Timviecnhanh, Timviec365, TopCV, CareerBuilder, Jobsgo); đồng thời tham khảo mô hình tổng hợp việc làm của nền tảng Jobstreet.
  • Phạm vi thời gian: Đề tài được triển khai và hoàn thành trong học kỳ II năm học 2019 - 2020 (từ tháng 02/2020 đến tháng 07/2020).

Cơ sở lý thuyết và phương pháp

Đồ án kết hợp nghiên cứu lý thuyết về kiến trúc phần mềm hướng dịch vụ, quy trình xử lý dữ liệu web tự động và kỹ thuật xây dựng ứng dụng web phân tán.

Nền tảng công nghệ và khung lý thuyết

  1. Spring Framework và Spring Boot: Nhóm tác giả áp dụng Spring Framework – nền tảng Java cung cấp bộ chứa đảo ngược điều khiển (Inversion of Control - IoC) và cho phép lập trình với các đối tượng Java thuần (POJO) nhằm giảm bớt sự phụ thuộc vào cấu hình phức tạp của EJB. Module Web được xây dựng theo mô hình MVC. Dự án sử dụng Spring Boot nằm trên tầng thực thi (IO Execution layer) của Spring IO Framework. Spring Boot cung cấp các bộ chứa nhúng (embedded containers) như Apache Tomcat hoặc Jetty, cho phép ứng dụng khởi chạy độc lập dưới dạng tệp thực thi java -jar mà không cần triển khai tệp WAR lên web server riêng biệt, đồng thời tự động cấu hình tối đa để loại bỏ nhu cầu cấu hình XML.
  2. Hệ quản trị cơ sở dữ liệu MySQL: Là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở sử dụng ngôn ngữ truy vấn có cấu trúc SQL. Nhóm tác giả lựa chọn MySQL nhờ tính khả chuyển cao trên nhiều hệ điều hành, khả năng bảo mật, đảm bảo tính toàn vẹn dữ liệu, tốc độ truy xuất ổn định và sự phù hợp đối với các ứng dụng web kết nối qua Internet.
  3. Nền tảng Angular 9: Framework mã nguồn mở dựa trên TypeScript do Google phát triển để xây dựng ứng dụng trang đơn (Single Page Application - SPA). Angular 9 sử dụng cây cấu trúc thành phần (component hierarchy) thay cho controller hay scope, áp dụng cơ chế liên kết thuộc tính [ ] (property binding) và liên kết sự kiện ( ) (event binding), hỗ trợ cơ chế nạp chậm (lazy loading) và phân tách dự án thành các module, service, model rõ ràng. Giao diện được bổ trợ bởi hai thư viện ng-bootstrap và Material Design for Bootstrap (MDB).
  4. Công nghệ thu thập dữ liệu web (Web Crawling & Scraping): Tác giả làm rõ ranh giới kỹ thuật giữa hai phương thức thu thập dữ liệu web:
Tiêu chí Web Scraping Web Crawling
Bản chất Trích xuất dữ liệu cụ thể từ nhiều nguồn khác nhau trên web Tải toàn bộ các trang (pages) từ trên web xuống
Quy mô Có thể thực hiện trên bất kỳ quy mô nào Đa phần thực hiện trên quy mô lớn
Cơ chế chống trùng lặp Có thể không có Là một thành phần quan trọng bắt buộc
Thành phần yêu cầu Cần cả crawl agent và parser Chỉ cần crawl agent

Để triển khai hệ thống trích xuất, đồ án sử dụng hai công cụ:

  • Crawler4j: Thư viện web crawler mã nguồn mở cho Java, hỗ trợ thiết lập hệ thống thu thập dữ liệu đa luồng (multi-threaded). Kiến trúc gồm hai lớp chính: Crawler class (kế thừa WebCrawler, ghi đè hàm shouldVisit để lọc URL và hàm visit để xử lý nội dung tải về) và Controller class (quản trị các seed URL, thư mục lưu trữ và số lượng luồng chạy song song).
  • Jsoup: Thư viện Java HTML Parser cung cấp API phân tích cấu trúc DOM, cho phép tìm kiếm, trích xuất và thao tác dữ liệu thông qua các bộ chọn CSS (CSS selectors) tương tự jQuery.

Phương pháp nghiên cứu thực tế

  • Phương pháp phân tích - tổng hợp: Khảo sát quy trình nghiệp vụ thực tế của các website tuyển dụng quy mô lớn tại Việt Nam; nghiên cứu mô hình tổng hợp thông tin của Jobstreet; tổng hợp các giải pháp từ mã nguồn mở trên GitHub.
  • Phương pháp mô hình hóa hướng đối tượng (UML): Xác định các tác nhân (actor), xây dựng biểu đồ use case, biểu đồ luồng dữ liệu (DFD) và thiết kế biểu đồ tuần tự (sequence diagram) cho các quy trình nghiệp vụ chính.
  • Phương pháp thiết kế cơ sở dữ liệu: Xây dựng sơ đồ thực thể mối quan hệ (ERD) và chuẩn hóa thành 21 bảng quan hệ trong CSDL MySQL.

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc phân tầng (multi-tier architecture), tách biệt rõ ràng giữa giao diện người dùng, dịch vụ xử lý nghiệp vụ, dịch vụ thu thập dữ liệu và tầng lưu trữ.

+-----------------------------------------------------------------------------------+
|                                 CLIENT (Front-End)                                |
|           Angular 9 | ng-bootstrap | Material Design for Bootstrap (MDB)          |
|  [Guest Component]        [Candidate Component]         [Employer Component]      |
+-----------------------------------------------------------------------------------+
                               RESTful API (JSON / HTTP)
+-----------------------------------------------------------------------------------+
|                                SERVER (Back-End)                                  |
|                                   Spring Boot                                     |
+-----------------------------------------------------------------------------------+
+----------------------------+                     +--------------------------------+
|      CRAWLER SYSTEM        |                     |      DATABASE (Persistence)    |
| (TopCV, CareerBuilder,...) |                     |           (21 Bảng)            |
+----------------------------+                     +--------------------------------+

Kiến trúc hệ thống và cấu trúc phần mềm

  1. Hệ thống Front-end (Angular 9): Ứng dụng chia tách giao diện thành 3 nhóm người dùng: khách (guest bao gồm candidate guest và employer guest), ứng viên (candidate) và nhà tuyển dụng (employer). Client giao tiếp với máy chủ thông qua giao thức HTTP/REST API. Cấu trúc thư mục mã nguồn front-end được phân bổ theo chuẩn Angular:

    • _helpers: Chứa các bộ tiền xử lý logic xác thực và ủy quyền (authentication helper, interceptor).
    • _models: Định nghĩa các lớp đối tượng dữ liệu cho candidate, employer, bài đăng.
    • services: Chứa các service xử lý kết nối API cho ứng viên, nhà tuyển dụng và đăng nhập mạng xã hội.
    • components: Chứa các component giao diện người dùng, áp dụng kỹ thuật tải nạp chậm (lazy loading) để tối ưu hiệu năng tải trang.
    • shared: Định nghĩa các component và module dùng chung (shared module).
    • Routing app-component: Quản lý định tuyến liên kết toàn bộ ứng dụng.
  2. Hệ thống Back-end (Spring Boot): Hệ thống máy chủ tiếp nhận và phản hồi các RESTful API từ client, xử lý logic nghiệp vụ và truy vấn CSDL. Cấu trúc mã nguồn back-end được tổ chức thành các gói (package) chuyên biệt:

    • config: Thiết lập cấu hình hệ thống và các bean của ứng dụng.
    • constraint: Định nghĩa các chú thích ràng buộc tùy chỉnh (custom constraint annotations).
    • controller: Tiếp nhận request HTTP, điều phối luồng xử lý và trả về phản hồi RESTful.
    • dao và repository: Đảm nhiệm việc truy xuất dữ liệu từ CSDL MySQL thông qua các câu truy vấn.
    • dto và payload: Các đối tượng chuyển giao dữ liệu giữa client và server.
    • event: Xử lý các luồng sự kiện trong hệ thống.
    • exception: Bắt và xử lý tập trung các ngoại lệ phát sinh.
    • model: Định nghĩa cấu trúc các thực thể dữ liệu ánh xạ từ cơ sở dữ liệu.
    • security: Quản lý cơ chế an ninh, xác thực danh tính và phân quyền người dùng.
    • util: Cung cấp các tiện ích xử lý nghiệp vụ bổ trợ.
  3. Phân hệ Crawler dữ liệu (Crawler4j & Jsoup): Phân hệ hoạt động độc lập nhằm lấy dữ liệu việc làm từ các nguồn đã định cấu hình. Kiến trúc gồm:

    • CrawlerController.java: Khởi tạo và thiết lập các tham số vận hành cho crawler (seed URLs, số luồng thực thi, thư mục lưu trữ).
    • CrawlerFactory.java: Khởi tạo kết nối dữ liệu giữa hệ thống crawler và CSDL MySQL.
    • MyWebCrawler.java: Thiết lập bộ lọc URL, phân tích cú pháp HTML dựa trên các selector đặc thù của từng website để trích xuất các trường dữ liệu cần thiết.
    • Package service: Tiếp nhận dữ liệu đã phân tích, lọc sạch và thực hiện lưu trữ hoặc cập nhật vào CSDL.

Thiết kế cơ sở dữ liệu

Cơ sở dữ liệu của hệ thống được xây dựng trên MySQL với 21 bảng quan hệ, bảo đảm lưu trữ đầy đủ các thông tin của người dùng, nhà tuyển dụng, bài đăng và dữ liệu thu thập từ bên ngoài:

Tên bảng Khóa chính (PK) Các trường dữ liệu chính Quan hệ / Khóa ngoại (FK)
user id (BIGINT) email, password, name, email_verified, provider, provider_id, image_url Liên kết với role qua bảng user_roles
candidate id (BIGINT) dob, gender, phone_number, work_title, yearsofexperience, expectedsalary FK account_id trỏ về user.id; FK cv_id trỏ về files.id
employer id (BIGINT) companyname, description, establishmentdate, industry, main_address, phone_number, website_urrl FK account_id trỏ về user.id
job_post id (BIGINT) job_title, job_description, min_salary, max_salary, requiredexperienceyears, source_url, source_website, expiration_date FK posted_by trỏ về user.id; FK joblocation_id; FK job_type_id
job_type id (BIGINT) job_type_name Lưu trữ loại hình việc làm (full-time, part-time...)
joblocation id (BIGINT) city_province, street_address Lưu trữ địa điểm làm việc
confirmationtoken token_id (BIGINT) confirmation_token, created_date FK user_id trỏ về user.id (dùng cho xác thực email)
password_reset_token id (BIGINT) token, expiry_date FK user_id trỏ về user.id (dùng khi quên mật khẩu)
education id (BIGINT) major, university_college, gpa, start_date, completion_date FK candidate_id trỏ về candidate.id
experience id (BIGINT) company_name, job_title, description, start_date, end_date FK candidate_id trỏ về candidate.id
files id (BIGINT) file_name, file_type, data (LONGBLOB) Lưu trữ tệp tin tải lên (CV, tài liệu)
industry id (BIGINT) industryname Danh mục ngành nghề
role id (BIGINT) name (VARCHAR(20)) Vai trò người dùng trong hệ thống
user_roles PK kép user_id, role_id Bảng trung gian phân quyền đa - đa
saved_job_post PK kép candidate_id, jobpost_id Bảng lưu bài đăng quan tâm của ứng viên
saved_candidate PK kép candidate_id, employer_id Bảng lưu hồ sơ ứng viên tiềm năng của nhà tuyển dụng
jobpost_industry PK kép jobpost_id, industry_id Ánh xạ bài đăng tuyển dụng với các ngành nghề
employer_history PK kép candidate_id, employer_id, view_date Lịch sử nhà tuyển dụng xem hồ sơ ứng viên
candidate_job_type PK kép candidate_id, jobtype_id Phân loại hình việc làm mong muốn của ứng viên
candidate_industry PK kép candidate_id, industry_id Ngành nghề mong muốn của ứng viên
candidate_history PK kép candidate_id, jobpost_id, view_date Lịch sử ứng viên xem bài đăng tuyển dụng

Cơ chế xác thực người dùng

Hệ thống thiết kế 3 kịch bản xác thực thông qua biểu đồ tuần tự (Sequence Diagram):

  • Xác thực email: Sau khi người dùng đăng ký, một mã thông báo (confirmationtoken) được tạo tự động và gửi qua email để người dùng kích hoạt tài khoản.
  • Đăng nhập mạng xã hội: Tích hợp xác thực thông qua tài khoản Facebook và Gmail (Google) bằng giao thức OAuth2, tự động trích xuất thông tin người dùng từ nhà cung cấp (provider, provider_id) để đăng ký/đăng nhập.
  • Đăng nhập truyền thống: Kiểm tra thông tin định danh email và password đối soát trực tiếp trong CSDL MySQL, trả về mã trạng thái và chuyển hướng đến trang chủ nếu hợp lệ.

Nội dung chính theo từng chương

Chương 1: Khảo sát hiện trạng

Chương mở đầu phân tích bối cảnh phát triển của thị trường tuyển dụng trực tuyến tại Việt Nam trong kỷ nguyên công nghệ 4.0. Tác giả chỉ rõ những khó khăn của ứng viên khi phải duyệt qua nhiều trang web độc lập, hạn chế của các doanh nghiệp nhỏ khi thiếu nền tảng tổng hợp ứng viên tiềm năng, và đặc biệt là sự thiếu hụt tập dữ liệu tuyển dụng tiếng Việt cho cộng đồng học máy. Từ đó, chương xác định mục tiêu, 3 nhiệm vụ trọng tâm, công nghệ sử dụng (Spring Boot, Angular 9, MySQL, Jsoup, Crawler4j), phạm vi nghiên cứu (thu thập dữ liệu từ 5 trang: Timviecnhanh, Timviec365, TopCV, CareerBuilder, Jobsgo; tham khảo Jobstreet) và các phương pháp nghiên cứu áp dụng.

Chương 2: Giới thiệu về Spring Framework, MySQL, Angular và Web crawling

Nội dung chương tập trung giới thiệu cơ sở lý thuyết và công nghệ nền tảng:

  • Phân tích kiến trúc Spring Framework, vị trí của Spring Boot tại tầng thực thi (IO Execution layer) cùng các ưu điểm nổi bật (không cần cấu hình XML, tích hợp web server Tomcat/Jetty nhúng, tự động cấu hình).
  • Đánh giá hệ quản trị cơ sở dữ liệu MySQL: ưu điểm về tốc độ, tính bảo mật, sự ổn định, tính toàn vẹn dữ liệu và lý do lựa chọn so với các CSDL khác.
  • Giới thiệu framework Angular và phiên bản Angular 9: mô hình kiến trúc component, TypeScript, cú pháp liên kết dữ liệu hai chiều và kỹ thuật lazy loading.
  • Trình bày tổng quan về Web crawling, phân biệt chi tiết giữa Web crawling và Web scraping (Bảng 2.1), cơ chế trích xuất HTML của Jsoup và cấu trúc bộ thu thập đa luồng của thư viện Crawler4j (với hai thành phần chính: Crawler class và Controller class).

Chương 3: XÁC ĐỊNH YÊU CẦU

Chương 3 đi sâu vào phân tích bài toán nghiệp vụ tuyển dụng và mô hình hóa chức năng hệ thống:

  • Phân tích quy trình nghiệp vụ của nhà tuyển dụng (Employer): Quản lý tài khoản (cập nhật thông tin doanh nghiệp, tải lên logo), Quản lý việc làm (xem, thêm, sửa, xóa bài đăng), Quản lý hồ sơ ứng viên (xem, lưu, xóa hồ sơ ứng viên ứng tuyển).
  • Phân tích quy trình nghiệp vụ của ứng viên (Candidate): Quản lý tài khoản (thông tin cá nhân, học vấn, kinh nghiệm, tải lên tệp CV), Xem và tìm kiếm việc làm, Xem thông tin nhà tuyển dụng.
  • Mô hình hóa hệ thống với 4 tác nhân chính: Guest (người dùng chưa đăng nhập vai ứng viên), Eguest (người dùng chưa đăng nhập vai nhà tuyển dụng), Employer (doanh nghiệp) và Candidate (ứng viên).
  • Lập bảng danh mục 13 use case chính của hệ thống:
Mã UC Tên Use Case Mô tả chức năng
UC01 Sign Up Đăng ký tài khoản người dùng
UC02 Sign In Đăng nhập vào hệ thống
UC03 Update Profile Cập nhật hồ sơ cá nhân / doanh nghiệp
UC04 Search Job Post Tìm kiếm bài đăng tuyển dụng theo bộ lọc
UC05 Manage Job Posts Quản lý danh sách bài đăng tuyển dụng
UC06 Save Potential Candidate Lưu hồ sơ ứng viên tiềm năng
UC07 Save Favorite Job Post Lưu bài đăng việc làm yêu thích
UC08 Remove Saved Job Post Xóa bài đăng đã lưu khỏi danh sách
UC09 Remove Saved Candidate Xóa hồ sơ ứng viên đã lưu
UC10 View Job Post Xem chi tiết thông tin bài đăng
UC11 View Employer Xem trang thông tin chi tiết của doanh nghiệp
UC12 View Candidate Profile Xem chi tiết hồ sơ năng lực của ứng viên
UC13 Log Out Đăng xuất khỏi hệ thống
  • Đặc tả chi tiết các use case trọng yếu: Đăng ký (UC01), Đăng nhập (UC02), Lưu ứng viên tiềm năng (UC06), Tìm kiếm việc làm (UC04) bao gồm các luồng sự kiện cơ bản, điều kiện tiên quyết và điều kiện kết thúc.

Chương 4: THIẾT KẾ PHẦN MỀM

Chương 4 trình bày toàn diện thiết kế kỹ thuật của hệ thống:

  • Thiết kế kiến trúc tổng thể 3 phần (Front-end Angular 9, Back-end Spring Boot RESTful API, hệ thống Crawler).
  • Đặc tả cấu trúc tổ chức mã nguồn chi tiết cho tầng Front-end (các thư mục _helpers, _models, services, components, shared) và tầng Back-end (12 gói chức năng từ config, controller, repository đến security).
  • Thiết kế chi tiết cấu trúc phân hệ crawler với các tệp điều khiển: CrawlerController.java, CrawlerFactory.java, MyWebCrawler.java và package service.
  • Thiết kế dữ liệu: Bản vẽ lược đồ quan hệ CSDL và bảng đặc tả chi tiết 21 bảng dữ liệu với đầy đủ tên trường, kiểu dữ liệu, độ dài, khóa chính, khóa ngoại và chỉ mục ràng buộc.
  • Thiết kế biểu đồ tuần tự cho 3 tiến trình cốt lõi: Xác thực tài khoản qua email, Đăng nhập mạng xã hội (Facebook, Gmail) và Đăng nhập bằng email/mật khẩu truyền thống.

Chương 5: THIẾT KẾ GIAO DIỆN

Chương 5 hiện thực hóa các yêu cầu nghiệp vụ thông qua thiết kế luồng màn hình (screen flow) và layout chi tiết:

  • Luồng màn hình phía doanh nghiệp (Employer) gồm 11 màn hình từ SCC01 đến SCC11: E-guest Dashboard (SCC01), Login (SCC02), Sign Up (SCC03), Employer Dashboard (SCC04), Manage Job (SCC05), Post Job (SCC06), View History (SCC07), Manage Account (SCC08), Saved Candidate (SCC09), Recommend Candidate (SCC10) và Candidate Screen (SCC11).
  • Luồng màn hình phía ứng viên (Candidate) gồm các màn hình cơ sở: Guest Dashboard (SCE01), Login (SCE02), Sign Up (SCE03), Candidate Dashboard (SCE04), Jobs Screen, Manage Profile...
  • Trình bày đặc tả chi tiết và hình ảnh layout của các màn hình quan trọng: màn hình quản lý bài đăng tuyển dụng (Manage Job Screen), màn hình đăng tin tuyển dụng (Post Job Screen), màn hình quản trị tài khoản (Manage Account Screen) và màn hình quản lý hồ sơ ứng viên (Manage Profile Screen).

Chương 6: KẾT QUẢ SO SÁNH, THỰC NGHIỆM, PHÂN TÍCH

Chương trình bày việc hoàn thiện hai khối thành phần chính của đồ án:

  • Hệ thống back-end: Hiện thực hóa toàn bộ các dịch vụ RESTful API bằng Spring Boot, thiết lập cấu hình bảo mật Spring Security, tích hợp các bộ phân tích Jsoup và thư viện Crawler4j kết nối cơ sở dữ liệu MySQL, đảm bảo khả năng tiếp nhận và phản hồi dữ liệu cho các tác vụ của người dùng và crawler.
  • Hệ thống front-end: Xây dựng hoàn chỉnh các giao diện người dùng bằng Angular 9, tích hợp hai thư viện ng-bootstrap và MDB, hiện thực hóa các chức năng tìm kiếm, phân trang, quản lý tài khoản và gợi ý việc làm/ứng viên theo luồng màn hình đã thiết kế.

Chương 7: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Chương kết luận tổng kết các kết quả đạt được đối chiếu với mục tiêu ban đầu và đề xuất các định hướng phát triển nhằm nâng cao năng lực ứng dụng trong tương lai.


Kết quả và đóng góp

Kết quả đạt được

Đồ án đã hoàn thành các sản phẩm và khối lượng công việc theo đúng nhiệm vụ được giao:

  1. Sản phẩm phần mềm hoàn chỉnh:
    • Xây dựng thành công website tổng hợp việc làm với đầy đủ các phân hệ chức năng cho 2 nhóm đối tượng chính (ứng viên và nhà tuyển dụng).
    • Triển khai phân hệ crawler đa luồng tự động bóc tách và chuẩn hóa thông tin tuyển dụng từ 5 trang web việc làm lớn tại Việt Nam: Timviecnhanh, Timviec365, TopCV, CareerBuilder và Jobsgo.
    • Hiện thực hóa cơ chế gợi ý (recommendation) hai chiều: gợi ý việc làm phù hợp cho ứng viên dựa trên mong muốn, năng lực cá nhân; gợi ý ứng viên tiềm năng cho doanh nghiệp dựa trên yêu cầu của bài đăng tuyển dụng.
    • Hỗ trợ đa dạng phương thức xác thực: đăng nhập thông qua tài khoản mạng xã hội (Facebook, Gmail) hoặc tài khoản đăng ký theo hệ thống (có gửi email xác nhận và hỗ trợ khôi phục mật khẩu).
  2. Tập dữ liệu tuyển dụng chuẩn hóa:
    • Xây dựng được tập dữ liệu tổng hợp việc làm tiếng Việt được cấu trúc hóa trong cơ sở dữ liệu MySQL gồm 21 bảng, tạo nền tảng dữ liệu phục vụ nghiên cứu cho cộng đồng học máy.
  3. Hiện vật bàn giao:
    • Toàn bộ mã nguồn hệ thống (source code) front-end (Angular 9) và back-end (Spring Boot, Crawler module).
    • Cơ sở dữ liệu và tập dữ liệu việc làm tổng hợp.
    • Báo cáo thuyết minh đồ án tốt nghiệp đầy đủ.

Đóng góp của đề tài

  • Về mặt kỹ thuật: Đề tài đã đề xuất và triển khai thành công một giải pháp tích hợp giữa framework ứng dụng doanh nghiệp (Spring Boot), framework giao diện đơn trang hiện đại (Angular 9) và các công cụ khai phá dữ liệu web mã nguồn mở (Crawler4j, Jsoup) để giải quyết bài toán phân mảnh dữ liệu việc làm.
  • Về mặt xã hội và học thuật: Cung cấp giải pháp cầu nối giúp người tìm việc giảm thiểu thời gian tra cứu phân tán và hỗ trợ doanh nghiệp tiếp cận nguồn hồ sơ ứng viên; đồng thời bước đầu tạo lập nguồn tài nguyên dữ liệu tuyển dụng thực tế bằng tiếng Việt, phục vụ mục tiêu huấn luyện các thuật toán học máy nhằm dự báo xu hướng thị trường lao động.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế

Dựa trên phạm vi và nội dung trình bày trong văn bản đồ án, hệ thống tồn tại một số hạn chế:

  • Nguồn thu thập dữ liệu mới chỉ giới hạn ở 5 website việc làm được định sẵn (Timviecnhanh, Timviec365, TopCV, CareerBuilder, Jobsgo); chưa có cơ chế cấu hình tự động mở rộng thêm các website mới mà không cần can thiệp viết thêm mã nguồn phân tích bộ chọn HTML.
  • Tính ổn định của module crawler phụ thuộc trực tiếp vào cấu trúc mã nguồn HTML của các trang web nguồn; khi các website này thay đổi giao diện hoặc cấu trúc thẻ DOM, hệ thống parser sẽ cần phải cập nhật lại bộ lọc tương ứng.
  • Việc áp dụng các thuật toán máy học trên tập dữ liệu mới dừng lại ở bước tạo lập dữ liệu ban đầu, chưa tích hợp trực tiếp các mô hình học máy phức tạp lên giao diện trực tuyến tại thời điểm báo cáo.

Hướng phát triển

Nhóm tác giả định hướng các nội dung mở rộng tiếp theo:

  • Hoàn thiện và tích hợp sâu các thuật toán học máy trực tiếp trên tập dữ liệu việc làm đã xây dựng để nâng cao độ chính xác của tính năng dự báo nhu cầu việc làm và gợi ý nghề nghiệp.
  • Mở rộng phạm vi thu thập dữ liệu tới nhiều trang web tuyển dụng khác tại Việt Nam và tối ưu hóa hiệu năng của các luồng crawler.
  • Nâng cấp các giải pháp tự động nhận diện sự thay đổi cấu trúc trang để giảm thiểu sự phụ thuộc vào các HTML selector cố định khi bóc tách dữ liệu.

Giá trị tham khảo

Báo cáo đồ án tốt nghiệp này mang lại giá trị tham khảo thiết thực cho các đối tượng sau:

  • Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm: Đồ án là tài liệu tham khảo cụ thể về quy trình xây dựng ứng dụng web quy mô lớn theo mô hình full-stack hiện đại: tích hợp Spring Boot (Java) ở phía back-end với Angular 9 (TypeScript) ở phía front-end thông qua kiến trúc RESTful API.
  • Người làm đề tài về Web Crawling / Data Extraction: Cung cấp tài liệu tham khảo chi tiết về cách thiết lập bộ thu thập dữ liệu đa luồng bằng Crawler4j kết hợp bộ phân tích HTML Jsoup trong hệ sinh thái Java, đặc biệt là kinh nghiệm bóc tách dữ liệu thực tế từ các website tuyển dụng tiếng Việt.
  • Người nghiên cứu phân tích dữ liệu tuyển dụng và học máy: Cung cấp mô hình thiết kế cơ sở dữ liệu quan hệ hoàn chỉnh (21 bảng) chuẩn hóa các thực thể tuyển dụng (người dùng, ứng viên, doanh nghiệp, kỹ năng, kinh nghiệm, học vấn, bài đăng việc làm), có thể tái sử dụng ngay trong các đề tài nghiên cứu phân tích thị trường lao động.

Các phần nội dung có giá trị tham khảo kỹ thuật cao nhất trong tài liệu gồm:

  • Thiết kế cơ sở dữ liệu với 21 bảng quan hệ chi tiết tại Chương 4.
  • Cấu trúc module hóa của hệ thống Spring Boot, Angular 9 và Crawler tại Chương 4.
  • Quy trình phân tích use case và thiết kế luồng màn hình (screen flow) trực quan tại Chương 3 và Chương 5.

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

1. Hệ thống thực hiện thu thập dữ liệu việc làm từ những trang web cụ thể nào tại Việt Nam?
Hệ thống crawler của đồ án được cấu hình để tự động thu thập và chuẩn hóa dữ liệu từ 5 website tuyển dụng phổ biến tại Việt Nam bao gồm: Timviecnhanh, Timviec365, TopCV, CareerBuilder và Jobsgo. Ngoài ra, nhóm tác giả có tham khảo cách thức tổ chức thông tin tổng hợp từ website Jobstreet.

2. Phân hệ crawler trong đồ án được xây dựng dựa trên những công cụ, thư viện nào và hoạt động ra sao?
Phân hệ crawler được viết bằng ngôn ngữ Java, sử dụng hai thư viện chính là Crawler4j và Jsoup. Trong đó, Crawler4j đảm nhiệm việc khởi tạo crawler đa luồng thông qua CrawlerController và MyWebCrawler để tải nội dung các trang web dựa trên các seed URL; sau đó Jsoup được sử dụng để phân tích cú pháp HTML (parse HTML) dựa trên các bộ chọn (selectors) nhằm trích xuất thông tin việc làm và lưu trữ vào CSDL MySQL.

3. Cơ sở dữ liệu của hệ thống được tổ chức như thế nào và gồm bao nhiêu bảng?
Cơ sở dữ liệu của hệ thống được xây dựng trên hệ quản trị cơ sở dữ liệu MySQL, bao gồm 21 bảng quan hệ. Các bảng chính bao gồm: user, candidate, employer, job_post, job_type, joblocation, education, experience, files, industry, role, user_roles, confirmationtoken, password_reset_token cùng các bảng trung gian lưu lịch sử và liên kết quan hệ nhiều - nhiều giữa ứng viên, nhà tuyển dụng và bài đăng.

4. Đồ án hỗ trợ những phương thức xác thực và quản lý tài khoản người dùng nào?
Hệ thống hỗ trợ 3 phương thức xác thực chính: đăng nhập truyền thống bằng email và mật khẩu (với cơ chế xác thực tài khoản qua email bằng token lưu trong bảng confirmationtoken và khôi phục mật khẩu qua password_reset_token), cùng với hai phương thức đăng nhập nhanh thông qua tài khoản mạng xã hội là Facebook và Gmail (Google) sử dụng giao thức OAuth2.

5. Sản phẩm bàn giao của đồ án tốt nghiệp bao gồm những gì?
Theo văn bản nhiệm vụ đồ án tốt nghiệp, sản phẩm bàn giao của đề tài bao gồm 3 thành phần chính: Toàn bộ mã nguồn chương trình (Source code) của ứng dụng web và module crawler, Tập dữ liệu việc làm tổng hợp (dùng cho các thuật toán học máy) và Báo cáo thuyết minh đồ án tốt nghiệp.


Kết luận

Đồ án tốt nghiệp "Xây dựng website tổng hợp việc làm" của sinh viên Trần Phương Nam và Nguyễn Thị Ngọc Trân đã giải quyết bài toán phân mảnh thông tin trên thị trường tuyển dụng trực tuyến tại Việt Nam bằng việc phát triển một hệ thống tích hợp hoàn chỉnh. Ứng dụng kết hợp kiến trúc phân tầng giữa Spring Boot, Angular 9, MySQL cùng hệ thống bóc tách dữ liệu đa luồng Crawler4j và Jsoup, đáp ứng đầy đủ các quy trình nghiệp vụ cho cả ứng viên lẫn doanh nghiệp. Đồng thời, công trình đã xây dựng thành công tập dữ liệu việc làm tổng hợp chuẩn hóa, tạo tiền đề dữ liệu thiết thực phục vụ cho việc nghiên cứu và ứng dụng các thuật toán học máy trong phân tích thị trường lao động.