(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM(Đồ án tốt nghiệp) Xây dựng website quản lý việc làm của phòng Quan hệ doanh nghiệp tại Trường Đại học Sư phạm Kỹ thuật TP.HCM
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA ĐÀO TẠO CHẤT LƯỢNG CAO
Ngành: CÔNG NGHỆ THÔNG TIN
GVHD: THS NGUYỄN MINH ĐẠO
Trang 2i
LỜI CẢM ƠN
Lời đầu tiên, cho phép nhóm em được gửi lời cảm ơn chân thành đến thầy Nguyễn Minh Đạo, người đã phụ trách hướng dẫn nhóm chúng em trong việc thực hiện và hoàn thành bài báo cáo một cách tốt và hiệu quả nhất Những sự chỉ dạy, nhật xét, đóng góp ý kiến từ thầy đã góp phần rất quan trọng trong việc giúp chúng em hoàn hành đề tài một cách hoàn thiện nhất
Cảm ơn các thầy cô trong khoa Công Nghệ Thông Tin đã luôn nhiệt tình, cống hiến, tận tình giải đáp các thắc mắc của chúng em Bên cạnh đó, chúng em xin được cảm ơn các bạn cùng khóa, các anh chị khóa trên đã không ngần ngại chia sẻ các thông tin, kinh nghiệm bổ ích giúp chúng em hoàn thiện hơn đề tài của mình Báo cáo được thực hiện trong một khoảng thời gian có hạn, cùng với những hạn chế về mặt kiến thức nên việc sai sót là điều không thể tránh khỏi trong quá trình thực hiện Chúng em kính mong nhận được những lời nhận xét, ý kiến đóng góp quý báo từ quý Thầy Cô để chúng em có thêm kinh nghiệm và hoàn thành tốt hơn những đề tài sau này
Chúng em xin chân thành cảm ơn !
Trang 3- Tìm hiểu về nghiệp vụ quản lý việc làm sẵn có hiện nay Từ đó có cái nhìn tổng quát về nghiệp vụ quản lý việc làm, nghiên cứu xây dựng trang web việc làm với nghiệp vụ đã tìm hiểu
2 Các vấn đề phát sinh
- Phía khách hàng thay đổi một số nghiệp vụ trong quá trình xây dựng website
- Không hiểu rõ mong muốn của khách hàng
3 Các phương pháp giải quyết vấn đề
- Tái sử dụng và thêm một số chức năng để phù hợp với nghiệp vụ thay đổi
- Tiến hành nhiều cuộc thảo luận để giải quyết vần đề được đưa ra
4 Kết quả đạt được
- Website quản lý việc làm cung cấp nguồn nhân lực cho trường
- Xây dựng được hệ thống dễ dàng bảo trì, phát triển và mở rộng
Trang 4iii
TÓM TẮT BẰNG TIẾNG ANH
1 Research issues
- Learn about Single page application (Angular), Spring Boot and MongoDB
to solve the problem of service delivery system using API for the job
website of the Business Relations Department
- Learn about job management profession available today From there, there is
an overview of the job management profession
2 Problems arise
- The client side changes some operations during the construction of the website
- Not understanding what the customer wants
3 Problem Solving Methods
- Reuse and add some functionality to accommodate changing business
- Conduct a lot of discussions to solve the problem raised
4 Results achieved
- Job management website provides human resources for the school
- Build a system that is easy to maintain, develop and expand
Trang 5iv
MỤC LỤC
LỜI CẢM ƠN i
TÓM TẮT BẰNG TIẾNG VIỆT ii
TÓM TẮT BẰNG TIẾNG ANH iii
MỤC LỤC iv
DANH MỤC TỪ VIẾT TẮT viii
DANH MỤC BẢNG ix
DANH MỤC HÌNH ẢNH xii
CHƯƠNG 1 TỔNG QUAN 1
Tính cấp thiết của đề tài 1
Mục đích của đề tài 1
Đối tượng và phạm vi nghiên cứu 2
Kết quả dự kiến đạt được 2
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 3
Ngôn ngữ lập trình Java 3
2.1.1 Java và lịch sử phát triển 3
2.1.2 Java Reflection 3
Spring Framework 4
2.2.1 Tổng quan về Spring 4
2.2.2 Lịch sử phát triển 5
2.2.3 Một số khái niệm chính 6
2.2.4 Các module 8
Spring Boot 10
2.3.1 Tổng quan về Spring Boot 10
2.3.2 Tạo một Spring Boot Application 10
RESTful API 11
2.4.1 Giới thiệu 11
2.4.2 Xây dựng RESTful WebService 11
Trang 6v
Angular 12
2.5.1 Tổng quan về Angular 12
2.5.2 So sánh Angular, ReactJS và VueJS 13
MongoDB 15
2.6.1 Giới thiệu 15
2.6.2 Đặc trưng 15
2.6.3 Ưu điểm 16
2.6.4 Khuyết điểm 17
Các kỹ thuật và thư viện khác 17
2.7.1 Aspose Cells 17
2.7.2 Aspose word 17
2.7.3 Json Web Token 18
2.7.4 Ngx-charts 19
CHƯƠNG 3 KHẢO SÁT HIỆN TRẠNG VÀ XÁC ĐỊNH YÊU CẦU 20
Khảo sát hiện trạng 20
3.1.1 Careerlink 20
3.1.2 Topdev 21
3.1.3 So sánh Careerlink và Topdev 24
Xác định yêu cầu 25
3.2.1 Yêu cầu chức năng 25
3.2.2 Yêu cầu phi chức năng 28
CHƯƠNG 4 MÔ HÌNH HÓA YÊU CẦU 29
Định nghĩa các usecase 29
4.1.1 Actor 29
4.1.2 Use case 30
Usecase diagram 35
Đặc tả usecase 36
Trang 7vi 4.3.1 Usecase Admin quản lý thông tin tuyển dụng (Manage employment
information) 36
4.3.2 Usecase quản lý người tìm việc (Manage job seeker) 39
4.3.3 Usecase quản lý nhà tuyển dụng (Manage employer) 43
4.3.4 Usecase quản lý CV (Manage CV) 46
4.3.5 Usecase ứng tuyển thông tin tuyển dụng (Apply for employment infomation) 49
4.3.6 Usecase hủy ứng tuyển thông tin tuyển dụng (Apply for employment infomation) 50
4.3.7 Usecase nhà tuyển dụng đăng tin tuyển dụng “Post employment information” 51
CHƯƠNG 5 THIẾT KẾ PHẦN MỀM 53
Thiết kế lược đồ tuần tự 53
5.1.1 Lược đồ tuần tự “ứng tuyển việc làm” 53
5.1.2 Lược đồ tuần tự “hủy ứng tuyển việc làm” 54
5.1.3 Lược đồ tuần tự “duyệt CV đã ứng tuyển” 55
5.1.4 Lược đồ tuần tự “lưu thông tin tuyển dụng quan tâm” 56
5.1.5 Lược đồ tuần tự “hủy lưu thông tin tuyển dụng quan tâm” 56
5.1.6 Lược đồ tuần tự “xóa tất cả thông tin tuyển dụng quan tâm” 57
5.1.7 Lược đồ tuần tự “xóa CV” 58
5.1.8 Lược đồ tuần tự “tạo tài khoản sinh viên” 58
5.1.9 Lược đồ tuần tự “cập nhật tài khoản sinh viên” 59
5.1.10 Lược đồ tuần tự “thay đổi trạng thái tài khoản sinh viên” 60
Thiết kế Database 61
5.2.1 Collection – các collection chính 61
5.2.2 Một số collection quản lý khác 76
5.2.3 Document 82
Thiết kế lược đồ lớp 86
Thiết kế giao diện 87
Trang 8vii
5.4.1 Màn hình client 87
5.4.2 Màn hình admin 101
5.4.3 Màn hình sinh viên 110
5.4.4 Màn hình nhà tuyển dụng 117
CHƯƠNG 6 CÀI ĐẶT VÀ KIỂM THỬ ỨNG DỤNG 123
Cài đặt ứng dụng 123
6.1.1 Thư viện và môi trường phát triển 123
6.1.2 Lệnh cài đặt và chạy chương trình 123
6.1.3 Các bước cài đặt 123
Kiểm thử phần mềm 124
6.2.1 Mục tiêu kiểm thử 124
6.2.2 Chức năng ứng tuyển/ hủy ứng tuyển công việc 124
6.2.3 Chức năng gửi mail hàng loạt 125
CHƯƠNG 7 KẾT LUẬN 126
Kết quả đạt được 126
Ưu điểm và nhược điểm 126
7.2.1 Ưu điểm 126
7.2.2 Nhược điểm 127
7.2.3 Khó khăn 127
Kinh nghiệm đạt được 127
Hướng phát triển trong tương lai 128
TÀI LIỆU THAM KHẢO 129
Trang 9IoC Inversion of Control
HTTP Hyper Text Transfer Protocol
API Application Programming Interface
Trang 10ix
DANH MỤC BẢNG
Bảng 2.1 Ưu khuyết điểm của DI 8
Bảng 2.2 Bảng các kiểu MINE trong RESTful API 12
Bảng 3.1 So sánh CareerLink và Topdev 24
Bảng 4.1 Actor 29
Bảng 4.2 Usecase 30
Bảng 4.5 Đặc tả usecase thêm thông tin tuyển dụng 36
Bảng 4.6 Đặc tả usecase cập nhật thông tin tuyển dụng 37
Bảng 4.7 Đặc tả use case tìm kiếm thông tin tuyển dụng 38
Bảng 4.8 Đặc tả usecase thêm mới người tìm việc 40
Bảng 4.9 Đặc tả usecase cập nhật thông tin người tìm việc 41
Bảng 4.10 Đặc tả usecase tìm kiếm người tìm việc 42
Bảng 4.11 Đặc tả usecase thêm nhà tuyển dụng 43
Bảng 4.12 Đặc tả usecase cập nhật nhà tuyển dụng 44
Bảng 4.13 Đặc tả usecase tìm kiếm nhà tuyển dụng 45
Bảng 4.14 Đặc tả usecase thêm mới CV 46
Bảng 4.15 Đặc tả usecase cập nhật CV 47
Bảng 4.16 Đặc tả usecase tìm kiếm CV 48
Bảng 4.17 Đặc tả usecase ứng tuyển thông tin tuyển dụng 49
Bảng 4.18 Đặc tả usecase ứng tuyển thông tin tuyển dụng 50
Bảng 4.19 Đặc tả usecase Nhà tuyển dụng đăng tin tuyển dụng 51
Bảng 5.1 Đặc tả collection CV 62
Bảng 5.2 Đặc tả collection Thông Tin Tuyển Dụng 63
Bảng 5.3 Đặc tả collection Nhà tuyển dụng 65
Bảng 5.4 Đặc tả collection Khoa 66
Bảng 5.5 Đặc tả collection Lĩnh vực 67
Bảng 5.6 Đặc tả collection Ngành đào tạo 67
Bảng 5.7 Đặc tả collection Sinh Viên 68
Bảng 5.8 Đặc tả collection Vị trí công việc 69
Bảng 5.9 Đặc tả collection Thỏa thuận người dùng 69
Bảng 5.10 Đặc tả collection Tài khoản 70
Bảng 5.11 Đặc tả collection Thông tin tuyển dụng quan tâm 70
Bảng 5.12 Đặc tả collection Câu hỏi khảo sát danh nghiệp 71
Bảng 5.13 Đặc tả collection Câu hỏi khảo sát sinh viên 72
Bảng 5.14 Đặc tả collection Kết quả khảo sát sinh viên 73
Bảng 5.15 Đặc tả collection Kết quả khảo sát doanh nghiệp 74
Trang 11x
Bảng 5.16 Đặc tả collection Tỉnh thành 77
Bảng 5.17 Đặc tả collection Quận huyện 77
Bảng 5.18 Đặc tả collection Confirmation token 78
Bảng 5.19 Đặc tả collection Email template 78
Bảng 5.20 Đặc tả collection Thông tin liên hệ 79
Bảng 5.21 Đặc tả collection MyFile 79
Bảng 5.22 Đặc tả collection Banner 80
Bảng 5.23 Đặc tả collection Side banner 80
Bảng 5.24 Đặc tả collection Quy định 81
Bảng 5.25 Đặc tả Document Hồ sơ ứng tuyển 83
Bảng 5.26 Đặc tả Document Thông tin liên hệ công ty 83
Bảng 5.27 Đặc tả Document Thông tin tuyển dụng sơ lược 84
Bảng 5.28 Đặc tả Document Nhà tuyển dụng sơ lược 84
Bảng 5.29 Đặc tả Document Quá trình học tập 84
Bảng 5.30 Đặc tả Document Quá trình làm việc 85
Bảng 5.31 Đặc tả Document Nơi làm việc 85
Bảng 5.32 Mô tả màn hình đăng ký nhà tuyển dụng 88
Bảng 5.33 Mô tả màn hình đăng ký sinh viên 89
Bảng 5.34 Mô tả màn hình homepage 92
Bảng 5.35 Mô tả màn hình danh sách công việc 93
Bảng 5.36 Mô tả màn hình chi tiết công việc 96
Bảng 5.37 Mô tả màn hình danh sách cv người tìm việc 98
Bảng 5.38 Mô tả màn hình chi tiết CV người tìm việc 100
Bảng 5.40 Danh sách màn hình admin 101
Bảng 5.41 Mô tả màn hình tài khoản nhà tuyển dụng 101
Bảng 5.42 Mô tả màn hình thêm mới tài khoản nhà tuyển dụng 103
Bảng 5.43 Mô tả màn hình cập nhật/xem chi tiết tài khoản nhà tuyển dụng 105
Bảng 5.44 Mô tả màn hình danh email template 107
Bảng 5.45 Mô tả màn hình thêm mới email template 109
Bảng 5.46 Mô tả màn hình sender email 109
Bảng 5.49 Danh sách màn hình sinh viên 110
Bảng 5.50 Mô tả màn hình cập nhật tài khoản sinh viên 111
Bảng 5.51 Mô tả màn hình danh sách danh sách CV sinh viên 112
Bảng 5.52 Mô tả màn hình thêm mới CV sinh viên 115
Bảng 5.53 Mô tả màn hình danh sách công việc đã ứng tuyển 116
Bảng 5.56 Danh sách màn hình nhà tuyển dụng 117
Trang 12xi
Bảng 5.58 Mô tả màn hình danh sách công việc 118
Bảng 5.59 Mô tả màn hình thêm mới công việc 121
Bảng 6.1 Danh sách thư viện và môi trường phát triển cần thiết trong sản phẩm 123 Bảng 6.2 Danh sách các lệnh cài đặt và chạy chương trình 123
Bảng 6.4 Kiểm thử chức năng ứng tuyển/hủy ứng tuyển công việc 124
Bảng 6.5 Kiểm tra chức năng gửi mail hàng loạt 125
Bảng 7.1 Khó khăn về công nghệ 127
Bảng 7.2 Khó khăn về quy trình thực hiện 127
Trang 13xii
DANH MỤC HÌNH ẢNH
Hình 3.1 Trang chủ website Topdev 23
Hình 3.2 Chức năng của webiste Topdev 23
Hình 4.1 Usecase quản lý thông tin tuyển dụng 36
Hình 4.2 Usecase add thông tin tuyển dụng 36
Hình 4.3 Update thông tin tuyển dụng 37
Hình 4.4 Use case tìm kiếm thông tin tuyển dụng 38
Hình 4.5 Usecase quản lý người tìm việc 39
Hình 4.6 Usecase thêm người tìm việc 40
Hình 4.7 Usecase cập nhật người tìm việc 41
Hình 4.8 Usecase tìm kiếm người tìm việc 42
Hình 4.9 Usecase quản lý nhà tuyển dụng 43
Hình 4.10 Usecase thêm nhà tuyển dụng 43
Hình 4.11 Usecase cập nhật nhà tuyển dụng 44
Hình 4.12 Usecase tìm kiếm nhà tuyển dụng 45
Hình 4.13 Usecase quản lý CV 46
Hình 4.14 Usecase thêm mới CV 46
Hình 4.15 Usecase cập nhật CV 47
Hình 4.16 Usecase tìm kiếm CV 48
Hình 4.17 Usecase ứng tuyển thông tin tuyển dụng 49
Hình 4.18 Usecase hủy ứng tuyển thông tin tuyển dụng 50
Hình 4.19 Usecase nhà tuyển dụng đăng tin tuyển dụng 51
Hình 5.1 Lược đồ tuần tự "ứng tuyển việc làm" 53
Hình 5.2 Lược đồ tuần tự "hủy ứng tuyển việc làm" 54
Hình 5.3 Lược đồ tuần tự "duyệt CV đã ứng tuyển" 55
Hình 5.4 Lược đồ tuần tự "lưu thông tin tuyển dụng quan tâm" 56
Hình 5.5 Lược đồ tuần tự " hủy lưu thông tin tuyển dụng quan tâm" 57
Hình 5.6 Lược đồ tuần tự “xóa tất cả thông tin tuyển dụng quan tâm” 57
Hình 5.7 Lược đồ tuần tự “xóa CV” 58
Hình 5.8 Lược đồ tuần tự “tạo tài khoản sinh viên” 59
Hình 5.9 Lược đồ tuần tự “cập nhật tài khoản sinh viên” 60
Hình 5.10 Lược đồ tuần tự “thay đổi trạng thái tài khoản sinh viên” 60
Hình 5.11 Database diagram - các collection chính 61
Hình 5.12 Database diagram - một số collection khác 76
Hình 5.13 Database diagram – document 82
Hình 5.14 Sơ đồ lớp 86
Trang 14xiii
Hình 5.15 Màn hình đăng ký nhà tuyền dụng 87
Hình 5.16 Màn hình đăng ký sinh viên 89
Hình 5.17 Màn hình homepage 91
Hình 5.18 Màn hình danh sách công việc 93
Hình 5.19 Màn hình chi tiết công việc 95
Hình 5.20 Màn hình danh sách cv người tìm việc 97
Hình 5.21 Màn hình chi tiết CV người tìm việc 100
Hình 5.22 Màn hình tài khoản nhà tuyển dụng 101
Hình 5.23 Màn hình thêm mới nhà tuyển dụng 103
Hình 5.24 Màn hình cập nhật/xem chi tiết nhà tuyển dụng 105
Hình 5.25 Màn hình danh sách email template 107
Hình 5.26 Màn hình thêm mới email template 108
Hình 5.27 Màn hình sender email 109
Hình 5.28 Màn hình cập nhật tài khoản sinh viên 111
Hình 5.29 Màn hình danh sách CV sinh viên 112
Hình 5.30 Màn hình thêm mới CV sinh viên 114
Hình 5.31 Màn hình danh sách công việc ứng tuyển 116
Hình 5.32 Màn hình danh sách công việc 118
Hình 5.33 Màn hình thêm mới công việc 120
Hình 6.1 Các thư mục trong “quan-ly-viec-lam” 124
Trang 151
CHƯƠNG 1 TỔNG QUAN Tính cấp thiết của đề tài
Từ khóa tìm kiếm việc làm đang là một từ khóa rất là nổi, và chắc hẳn ai trong
chúng ta cũng phải tìm kiếm đến nó Trên mạng có rất nhiều trang web nổi tiếng và
uy tín giúp ta tìm các công việc theo đúng nhu cầu của ta như: timviecnhanh, topcv, , các trang web này hầu hết đều có các chức năng giống nhau như tìm kiếm việc làm, tìm kiếm công ty, ứng tuyển online, các công ty có thể vào đây để tìm các ứng viên cho công ty mình thông qua các CV mà họ viết, ngoài ra các trang web còn chứa rất nhiều tin tức, các mẹo hay, bổ ích liên quan đến tìm việc
Với sự hứng thú với hệ thống như thế này, và hiện tại học tập tại TTCNPM của trường Đại học sư phạm kỹ thuật TPHCM Chúng em quyết định thử thách bản thân tạo ra một hệ thống tương tự với các chức năng trên và bổ sung thêm một số chức năng hữu ích cần thiết
Hệ thống trang web dự tính xây dựng giống như một sợi dây liên kết giữa các nhà tuyển dụng với sinh viên tìm việc của trường Hệ thống cung cấp các chức năng như tìm kiếm việc làm thông qua các từ khóa tên công việc, ngành nghề để giúp cho người dùng có thể tìm kiếm được công việc theo nhu cầu của mình Ngoài ra trang web còn thêm chức năng quản lý các CV của mình và ứng tuyển các CV đấy vào các công việc mà mình ứng tuyển Công ty có thể đăng tuyển các CV các công việc cho công ty mình
Mục đích của đề tài
Đề tài “XÂY DỰNG WEBSITE QUẢN LÝ VIỆC LÀM PHÒNG DOANH NGHIỆP CỦA TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM” đặt ra 2 vấn
đề trọng tâm về mục tiêu mà sinh viên nghiên cứu cần thực hiện được bao gồm:
Vấn đề đầu tiên đưa ra về yếu tố lý thuyết, sinh viên thực hiện cần có kết quả nghiên cứu chuyên môn và hiểu được tổng quan và khả năng ứng dụng của từng thành phần trong mô hình Java Spring Boot và Angular nói chung Với từng thành phần của Java Spring Boot và Angular hiểu xác định được các đặc trưng về nguyên tắc hoạt động, thành phần hoặc mô hình Thư viện được xây dựng dựa trên ngôn ngữ lập trình Javascript đạt được sự phổ biến đến lập trình viên như: Java Spring Boot – xây dựng Server, Angular – xây dựng ứng dụng phía người dùng, MongoDB – cơ sở dữ liệu Song song với việc hiểu về các thành phần tiêu biểu của Java Spring Boot và Angular sinh viên cũng cần phải có thêm tìm hiểu về các thư viện, mã nguồn module giúp ích trong quá trình xây dựng ứng dụng Web thực tế
Trang 162 Vấn đề thứ hai của đề tài đặt ra về ứng dụng mô hình Java Spring Boot và Angular vào xây dựng một sản phẩm cụ thể, ở đây là “Website tìm việc làm” Sản phẩm hoàn thành phải là một ứng dụng Web được xây dựng có đầy đủ các thành phần của mô hình Java Spring Boot và Angular và đáp ứng thêm các yêu cầu về ứng dụng tạo CV, ứng tuyển, đăng tin tuyển dụng, , và một số tính năng khác có thể áp dụng trong thực tế cũng như khả năng nâng cấp hoặc tiếp tục phát triển tính năng trong tương lai
Đối tượng và phạm vi nghiên cứu
Đề tài được thực hiện nghiên cứu xoay quanh hai nhóm đối tượng trọng tâm
bao gồm: nhóm đối tượng về kiến thức công nghệ và nhóm đối tượng có nhu cầu tìm việc làm, tuyển dụng nhân sự
Trong đó nhóm đối tượng về kiến thức công nghệ bao gồm 4 đối tượng nghiên cứu bắt buộc là: Spring Boot, thư viện Angular, cơ sở dữ liệu MongoDB Kết hợp thêm trong nhóm đối tượng nghiên cứu về kiến thức công nghệ là một số thư viện Javascript có giá trị ứng dụng như JWT (Json Web Token), charts cũng cần được nghiên cứu cho các ứng dụng về doanh thu cũng như mức độ ưa thích của sản phẩm
Nhóm đối tượng có nhu cầu tìm việc làm, tuyển dụng nhân sự bao gồm kiến thức về kinh nghiệm cũng như các đánh giá về trải nghiệm người dùng trên một trang web về tìm kiếm việc làm cụ thể
Phạm vi nghiên cứu đề ra ở mức độ tổng quát, người thực hiện đề tài hiểu được các kiến thức chung của nội dung nghiên cứu và áp dụng được từng nội dung kiến thức vào sản phẩm thực tế, không đặt nặng các lý thuyết nặng nề không mang tính ứng dụng
Kết quả dự kiến đạt được
Hiểu được các kiến thức về chức năng, cách thức hoạt động của Java Spring Boot và Angular trong việc xây dựng website
Xây dựng hoàn thành một website tìm kiếm việc làm với những kiến thức đã tìm hiểu
Trang 17[1]
Cú pháp Java được vay mượn nhiều từ C và C++ nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tính năng xử lý cấp thấp hơn Do đó việc viết một chương trình bằng Java dễ hơn, đơn giản hơn, đỡ tốn công sửa lỗi hơn
Java được khởi đầu bởi James - Gosling và bạn đồng nghiệp ở Sun Microsystems năm 1991 Ban đầu ngôn ngữ này được gọi là Oak (có nghĩa là cây sồi)
do bên ngoài cơ quan của ông Gosling có trồng nhiều loại cây này
Java được phát hành vào năm 1994 Sau khi Oracle mua lại công ty Sun Microsystems năm 2009 - 2010, Oracle đã mô tả họ là "người quản lý công nghệ Java với cam kết không ngừng để bồi dưỡng một cộng đồng tham gia và minh bạch" Lịch sử phiên bản java:
• Java SE 6 (còn gọi là Mustang), được công bố 11 tháng 12 năm 2006
• Java SE 7 (còn gọi là Dolphin), được bắt đầu từ tháng 8 năm 2006 và công bố ngày 28 tháng 7 năm 2011
[2]
Trang 184 Reflection là kĩ thuật rất cần thiết để lấy các thông tin của một kiểu dữ liệu Dựa vào đó ta có thể kích hoạt (gọi các phương thức) hoặc tạo thể hiện của kiểu dữ liệu
đó Một ứng dụng quan trọng của reflection mà chúng ta có thể biết là Java Bean Nhờ đó, các IDE (như NetBeans) hoặc các framework có thể lấy được các thông tin
và thiết lập giá trị cho các đối tượng trong môi trường run-time
Các lớp được dùng trong reflection nằm trong hai package là java.lang và java.lang.reflect Package java.lang.reflect bao gồm ba lớp chính mà chúng ta cần biết là Constructor, Field và Method:
- Class: Lớp này đại diện cho các lớp, interface và chứa các phương thức dùng
để lấy các đối tượng kiểu Constructor, Field, Method
- Accessible Object: Các kiểm tra về phạm vi truy xuất (public, private,
protected) của field, method, constructor sẽ được bỏ qua Nhờ đó chúng ta có thể dùng reflection để thay đổi, thực thi các thành phần này mà không cần quan tâm đến phạm vi truy xuất của nó
- Constructor: Chứa các thông tin về một constructor của lớp
- Field: chứa các thông tin về một field của lớp, interface
- Method: chứa các thông tin về một phương thức của lớp, interface
Hình 2.1 Kiến trúc tổng quát Java Reflection API
Spring Framework
2.2.1 Tổng quan về Spring
Spring framework, hay ngắn hơn là Spring, là một cấu trúc dùng để xây dựng chương trình ứng dụng mã nguồn mở dành cho ngôn ngữ lập trình Java Phiên bản đầu tiên của nó do Rod Johnson viết và đã được ông xuất bản cùng với quyển sách đầu tay Expert One-on-One JavaEE Design and Development (Nhà xuất bản Wrox Press, Tháng 10 năm 2002) [7]
Trang 195 Kiến trúc của Spring framework được ra mắt công chúng lần đầu tiên hồi tháng
6 năm 2003 dưới Giấy phép Apache - phiên bản 2.0 Phiên bản 1.0 đánh dấu mốc thành đạt đầu tiên được xuất bản vào tháng 3 năm 2004 và tiếp đó vào tháng 9 năm
2004, tháng 3 năm 2005 [7]
Tuy Spring framework không bắt buộc người ta phải tuân theo một mô hình lập trình cụ thể nào, song nó lan truyền rộng rải trong cộng đồng những người viết chương trình dùng Java, như một hình thức chủ yếu thay thế cho mô hình Enterprise Java Bean Theo thiết kế, bộ framework này giải phóng lập trình viên dùng Java, cho phép
họ nhiều quyền tự do hơn và đồng thời cung cấp một giải pháp tiện lợi, đầy đủ dẫn chứng bằng tài liệu, dễ dàng sử dụng, phù hợp với những thực hành thông dụng trong công nghệ phần mềm
Bên cạnh những đặc trưng nền tảng của Spring framework là những cái có thể dùng được trong bất cứ một chương trình ứng dụng Java nào, rất nhiều các mở rộng
và tiến bộ trong việc kiến tạo các trình ứng dụng dành cho nền tảng mạng web based application) dựa trên nền Java Enterprise cũng tồn tại nữa Spring framework nổi tiếng cũng một phần do chính đặc thù kể trên và được giới thương mại công nhận như một nền tảng kiến trúc có tầm quan trọng trong chiến lược kiến tạo phần mềm
(web-2.2.2 Lịch sử phát triển
Phần đầu tiên của Spring framework ban đầu nguyên được Rod Johnson viết vào năm 2000 Vào năm 2001, những mô hình lập trình cho các trình ứng dụng Web được đại đa số sử dụng đều do Java Servlet API và Enterprise Java Bean cung cấp [7].
Năm 2003 thành lập dự án phát tại Sourceforge để phát triển Spring Sau khi phát triển trên nền tảng ban đầu hơn một năm họ đã phát hành phiên bản đầu tiên (1.0) vào tháng 3 năm 2004
Spring framework đã làm cho những kỹ thuật vốn không được biết đến mấy trở nên những kỹ thuật được mọi người ưa chuộng trong một thời gian ngắn ngủi Một trong Method method = c.getMethod("printHello", String.class); method.invoke(instance, "World"); Hello World 10 những kỹ thuật nổi tiếng hơn cả
là kỹ thuật “đảo ngược quyền điều khiển” (Inversion of Control, IoC)
Năm 2005 cho thấy mức độ hưởng ứng nâng cao hơn những năm trước, nguyên
do cũng vì những phiên bản mới được giới thiệu với những cột mốc đáng kể và những tính năng mới được thêm vào Diễn đàn Spring (Spring Forum) ra đời cuối năm 2004 cũng góp phần không nhỏ trong việc nâng cao tính phổ biến của bộ framework và từ
đó đến nay đã sinh trưởng trở thành một nguồn thông tin quan trọng, giúp đỡ cho người sử dụng
Trang 206 Vào tháng 12 năm 2005, hội thảo đầu tiên về Spring Framework đã được tổ chức tại Miami, Florida thu hút 300 nhà phát triển trong 3 ngày và tiếp theo đó cuộc hội thảo ở Antwerp vào tháng 6 năm 2006, thu hút hơn 400 người
2.2.3 Một số khái niệm chính
Hai trong những thành phần chủ chốt và là nền tảng tạo nên sức mạnh của Spring chính là IoC và DI
1.1.1 Inversion of Control (IoC)
IoC Container trong Spring được xây dựng dựa trên nguyên lý Inversion of Control (đảo ngược điều khiển) đã xuất hiện khá lâu trong các mẫu hình thiết kế (design pattern), và được phổ biến rộng rãi nhờ Robert C Martin và Martin Fowler
Khái niệm Control Flow (tạm dịch là luồng thực thi) được sử dụng cho trình tự thực hiện các câu lệnh, chỉ thị hoặc lời gọi hàm trong một chương trình, khi chương trình này thực thi
Do chương trình ngày càng phức tạp, nên các lập trình viên áp dụng phương pháp lập trình hướng đối tượng nhằm phân loại, chia tách các chức năng và gom thành các đối tượng Các lập trình viên còn tạo dựng các thư viện tạo sẵn để có thể sử dụng lại Luồng thực thi của chương trình, trong những tình huống cần xem xét ở mức tổng thể, không còn quan tâm đến các bước thực thi câu lệnh cụ thể nữa, mà chỉ xem xét đến quá trình gọi phương thức của các đối tượng trong ứng dụng cũng như các đối tượng của thư viện dựng sẵn
Các lập trình viên, khi xây dựng ứng dụng từ đầu, đã thực hiện hai nhiệm vụ: trực tiếp điều khiển luồng thực thi của chương trình và xây dựng các chức năng để đáp ứng nghiệp vụ của ứng dụng Thực tế, có nhiều chương trình hoặc bộ phận trong chương trình có luồng thực thi rất giống nhau, chẳng hạn phần tương tác với HTTP trong các ứng dụng web, phần unit testing trong các ứng dụng,… Việc trực tiếp tạo dựng và kiểm soát luồng thực thi của chương trình lặp đi lặp lại khi xây dựng nhiều ứng dụng sẽ làm mất nhiều công sức, chi phí, tạo ra sự nhàm chán và dễ phát sinh lỗi Điều này tạo ra động lực cũng như môi trường để nguyên lý đảo ngược điều khiển nảy nở và phát triển
Trang 217
Hình 2.2 Mô hình ứng dụng áp dụng IoC
Như vậy, khái niệm “đảo ngược” ở đây chính là chuyển nhiệm vụ kiểm soát lưu trình thực thi từ ứng dụng cho một thành phần chuyên trách (thường là một thư viện phần mềm khung – framework – dựng sẵn ở bên ngoài) Ứng dụng chính chúng ta quan tâm phát triển không kiểm soát việc điều khiển luồng thực thi nữa, mà chỉ tập trung vào việc định nghĩa chức năng Thư viện phần mềm khung chuyên trách kiểm soát điều khiển sẽ dựa trên mô tả trong cấu hình của ứng dụng để thay mặt ứng dụng điều phối luồng thực thi trong chương trình
Dễ dàng nhận thấy thư viện phần mềm khung này khác với các thư viện thông thường ở chỗ: thư viện thông thường cung cấp các chức năng và chờ được ứng dụng gọi đến, còn thư viện phần mềm khung tạo dựng luồng thực thi và gọi đến các chức năng của ứng dụng
Nói một cách ngắn gọn IoC là một design pattern và tập hợp các kỹ thuật lập trình liên quan, trong đó luồng thực thi của một hệ thống bị đảo ngược so với cách tương tác truyền thống IoC trong Spring cũng hoàn toàn mang ý nghĩa như trên Trong Spring các đối tượng chính để xây dựng ứng dụng thì được quản lý bởi Spring IoC container Và IoC container gọi các đối tượng đó là các bean Một bean chỉ đơn giản là một đối tượng được khởi tạo và quản lý bởi Spring IoC container
1.1.2 Dependency Injection (DI)
Với cách code thông thường, các module cấp cao sẽ gọi các module cấp thấp Module cấp cao sẽ phụ thuộc và module cấp thấp, điều đó tạo ra các dependency Khi module cấp thấp thay đổi, module cấp cao phải thay đổi theo Một thay đổi sẽ kéo theo hàng loạt thay đổi, giảm khả năng bảo trì của code
Trang 228
Vì thế DI ra đời, Hiện nay, một số DI container như Unity, StructureMap v…v,
hỗ trợ trong việc cài đặt và áp dụng Dependency Injection vào code, tuy nhiên vẫn có thể gọi chúng là IoC Container, ý nghĩa tương tự nhau [1]
➢ Có thể hiểu Dependency Injection một cách đơn giản như sau:
• Các module không giao tiếp với nhau mà thông qua interface
• Module cấp thấp sẽ implement interface
• Module cấp cao sẽ gọi module cấp thấp thông qua interface
• Việc khởi tạo các module cấp thấp do DI container thực hiện
• Interface Injection: Class cần inject sẽ implement 1 interface Interface này
chứa 1 hàm tên Inject Container sẽ injection dependency vào 1 class thông qua việc gọi hàm Inject của interface đó Đây là cách rườm rà và ít được sử
dụng nhất
➢ Ưu khuyết điểm của DI:
Bảng 2.1 Ưu khuyết điểm của DI
• Giảm sự kết dính giữa các module
• Code dễ bảo trì, dễ thay thế module
• Rất dễ test và viết Unit Test
• Dễ dàng thấy quan hệ giữa các
module (Vì các dependecy đều
được inject vào constructor)
• Khái niệm DI khá “khó tiêu”, các developer mới sẽ gặp khó khăn khi học
• Sử dụng interface nên đôi khi sẽ khó debug, do không biết chính xác module nào được gọi
• Các object được khởi tạo toàn bộ ngay từ đầu, có thể làm giảm performance
• Làm tăng độ phức tạp của code
2.2.4 Các module
Spring được xây dựng với 7 module chính. [8]
Trang 239
Hình 2.3 Các module của Spring Framework
Spring Core: Core package là phần cơ bản nhất của Spring, cung cấp những
đặc tính như IoC (Inversion of Control) và DI (Dependency Injection) Khái niệm cơ bản là BeanFactory, một cài đặt của Factory pattern, cho phép “móc nối” sự phụ thuộc giữa các đối tượng trong file cấu hình
Spring Context: Spring context là một file cấu hình để cung cấp thông tin ngữ
cảnh của Spring Spring context cung cấp các service như JNDI access, EJB integration, e-mail, internalization, validation, và scheduling functionality
Spring AOP (Aspect – Oriented Programming): Spring AOP module tích
hợp chức năng lập trình hướng khía cạnh vào Spring framework thông qua cấu hình của nó Spring AOP module cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong bất kỳ ứng dụng nào sử dụng Spring Với Spring AOP chúng ta có thể tích hợp declarative transaction management vào trong ứng dụng mà không cần dựa vào EJB component Spring AOP module cũng đưa lập trình metadata vào trong Spring Sử dụng cái này chúng ta có thể thêm annotation vào source code để hướng dẫn Spring nơi và làm thế nào để liên hệ với aspect
Spring DAO (Data Access Object): Tầng JDBC và DAO đưa ra một cây phân
cấp exception để quản lý kết nối đến database, điều khiển exception và thông báo lỗi được ném bởi vendor của database Tầng exception đơn giản điều khiển lỗi và giảm khối lượng code mà chúng ta cần viết như mở và đóng kết nối Hình 2.6: Các module của Spring framework 15 Module này cũng cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong ứng dụng Spring
Trang 2410
Spring ORM (Object Relational Mapping): Spring có thể tích hợp với một
vài ORM framework để cung cấp Object Relation tool bao gồm: JDO, Hibernate, OJB và iBatis SQL Maps
Spring Web: Nằm trên application context module, cung cấp context cho các
ứng dụng web Spring cũng hỗ trợ tích hợp với Struts, JSF và Webwork Web module cũng làm giảm bớt các công việc điều khiển nhiều request và gắn các tham số của request vào các đối tượng domain
Spring MVC: MVC Framework thì cài đặt đầy đủ đặc tính của MVC pattern
để xây dựng các ứng dụng Web MVC framework thì cấu hình thông qua giao diện
và chứa được một số kỹ thuật view bao gồm: JSP, Velocity, Tiles và generation of PDF và Excel file
Spring Boot
2.3.1 Tổng quan về Spring Boot
Spring Boot là một module của Spring Framework cung cấp các tính năng RAD (Rapid Aplication Development) để phát triển ứng dụng nhanh Nếu như trước đây, công đoạn khởi tạo một dự án Spring khá vất vả từ việc khai báo các dependency trong file pom.xml cho đến cấu hình bằng XML hoặc annotation phức tạp, thì giờ đây với Spring Boot, chúng ta có thể tạo các ứng dụng Spring một cách nhanh chóng và cấu hình cũng đơn giản hơn
Dưới đây là một số tính năng nổi bật của Spring Boot:
• Có các tính năng của Spring Framework
• Tạo ứng dụng độc lập, có thể chạy bằng java-jar (cho cả java web)
• Cung cấp một loạt các tính năng phi chức năng phổ biến cho các dự án lớn như những trực tiếp Web Server như Tomcat, Jetty, …
• Cấu hình ít, tự động cấu hình bất kỳ khi nào có thể (giảm thời gian viết code, tăng năng xuất)
• Không yêu cầu XML config
• Cung cấp nhiều plugin
• Chuẩn cho Microservices (Cloud support; giảm việc setup, config; các thư viện hỗ trợ…)
2.3.2 Tạo một Spring Boot Application
Java 1.8 trở lên
Gradle 2.3+ hoặc Maven 3.0+
Trang 2511 Spring Framework 5.x.x.BUILD-SNAPSHOT
IDE hỗ trợ Spring Tool Suit
RESTful API
2.4.1 Giới thiệu
RESTful API là một dạng tiêu chuẩn được sử dụng trong việc thiết kế API cho ứng dụng web để giúp quản lý resource một cách dễ dàng nhất Chủ yếu quản lý các tài nguyên hệ thống như: Tệp văn bản, ảnh, âm thanh, video hoặc dữ liệu động… Trong đó phải kể đến là các tài nguyên được định dạng và được truyền tải thông qua HTTP
Hình 2.4 Cách thức hoạt động RESTful API 2.4.2 Xây dựng RESTful WebService
Quy tắc xây để tạo ra một ứng dụng WebService tuân thủ 4 quy tắc thiết kế cơ bản sau:
1) Sử dụng các pương thức HTTP một cách rõ ràng
• Bạn muốn thực hiện các thao tác trên dữ liệu cần lưu ý các thao tác sau:
• Để tạo một tài nguyên trên máy chủ, bạn cần sử dụng phương thức POST
• Để truy xuất tài nguyên, sử dụng GET
• Để thay đổi trạng thái tài nguyên hoặc cập nhật nó, sử dụng PUT
• Để hủy bỏ hoặc xóa một tài nguyên, sử dụng DELETE
2) Phi trạng thái
• Một đặc điểm của REST là phi trạng thái (stateless), có nghĩa là nó không lưu trữ thông tin của client Chẳng hạn bạn vừa gửi yêu cầu để xem trang thứ 2 của tài liệu, và bây giờ bạn muốn xem trang tiếp theo REST không lưu trữ lại
Trang 2612 thông tin rằng trước đó nó đã phục vụ bạn Điều đó có nghĩa là REST không quản lý phiên làm việc (Session)
3) Hiển thị cấu trúc thư mục như các URLs
• Rest đưa ra một cấu trúc để người dùng có thể truy cập vào tài nguyên của nó thông qua các URL, tài nguyên ở đây là tất cả những cái mà bạn có thể gọi tên được (Video, ảnh, báo cáo thời tiết,…)
• Một vài nguyên tắc bổ sung để lưu ý trong khi nói về cấu trúc địa chỉ của RESTfull Web Service là:
• Giấu đuôi các tài liệu mở rộng của bản gốc trong máy chủ (.jsp, php, asp) nếu
có, vì vậy bạn có thể giấu một số thứ mà không cần thay đổi địa chỉ URLs
• Để mọi thứ là chữ thường
• Thay thế các khoảng trống bằng gạch chân hoặc gạch nối (một trong hai loại)
• Tránh các chuỗi yêu cầu càng nhiều càng tốt
• Thay vì sử dụng mã (404 Not Found) khi yêu cầu địa chỉ cho một đường dẫn, luôn luôn cung cấp một trang mặc định hoặc tài nguyên như một phản hồi 4) Truyền tải JavaScript Object Notation (JSON), XML hoặc cả hai
• Khi client gửi một yêu cầu tới Web Service nó thường dược truyền tải dưới dạng XML hoặc JSON và thông thường nhận về với hình thức tương tự Đôi khi Client cũng có thể chỉ định kiểu dữ liệu nhận về mà nó mong muốn (JSON hoặc XML, …), các chỉ định này được gọi là các kiểu MINE, nó được gửi kèm trên phần HEADER của request
• Dưới đây là các kiểu MINE phổ biến thường sử dụng với REST service
Bảng 2.2 Bảng các kiểu MINE trong RESTful API
Trang 2713 Một trong những tính năng chính của Angular 2 là khả năng phát triển cho nhiều nền tảng: web, di động và máy tính để bàn gốc (trong khi AngularJS không có hỗ trợ
di động)
Angular được tạo ra để xây dựng các ứng dụng web động, thường được sử dụng
để tạo các ứng dụng một trang (SPA) Angular là một nền tảng miễn phí và được hàng nghìn nhà phát triển trên khắp thế giới ưa chuộng [9]
2.5.2 So sánh Angular, ReactJS và VueJS
2.5.2.1 Lịch sử phát triển
Angular, được phát triển bởi Google, được phát hành lần đầu tiên vào năm 2010,
là phiên bản lâu đời nhất trong số đó Nó là một khung JavaScript dựa trên TypeScript Một sự thay đổi đáng kể đã xảy ra vào năm 2016 khi phát hành Angular 2 (và việc loại bỏ “JS” khỏi tên ban đầu - AngularJS) Angular 2+ được gọi là Angular Mặc dù AngularJS (phiên bản 1) vẫn được cập nhật, chúng tôi sẽ tập trung thảo luận vào Angular Phiên bản ổn định mới nhất là Angular 7, được phát hành vào tháng 10 năm
3, hiện đang trong giai đoạn tạo mẫu và đang có kế hoạch chuyển sang TypeScript
Trang 2814
2.5.2.2 Mức độ phổ biến
Hình 2.5 So sánh mức độ phổ biến Angular, ReactJS và VueJS
2.5.2.3 Tóm lại
Angular là framework hoàn thiện nhất trong số các framework, có sự hỗ trợ tốt
về mặt người đóng góp và là một gói hoàn chỉnh Tuy nhiên, đường cong học tập rất dốc và các khái niệm về phát triển trong Angular có thể gây khó khăn cho các nhà phát triển mới Angular là một lựa chọn tốt cho các công ty có đội ngũ lớn và các nhà phát triển đã sử dụng TypeScript
React vừa đủ tuổi để trưởng thành và có số lượng đóng góp khổng lồ từ cộng đồng Nó đang được chấp nhận rộng rãi Thị trường việc làm cho React thực sự tốt
và tương lai cho khung công tác này có vẻ tươi sáng React có vẻ như là một lựa chọn tốt cho những người bắt đầu với các khung JavaScript front-end, các công ty khởi nghiệp và các nhà phát triển thích sự linh hoạt Khả năng tích hợp liền mạch với các khung công tác khác mang lại cho nó một lợi thế lớn cho những ai muốn có một số tính linh hoạt trong mã của họ
Vue là người mới tham gia đấu trường, không có sự hậu thuẫn của một công ty lớn Tuy nhiên, nó đã hoạt động rất tốt trong vài năm qua khi trở thành đối thủ cạnh tranh mạnh mẽ của Angular và React Điều này có lẽ đóng một vai trò nhất định khi rất nhiều gã khổng lồ Trung Quốc như Alibaba và Baidu chọn Vue làm khung JavaScript front-end chính của họ Tuy nhiên, vẫn còn phải xem nó hoạt động như
Trang 2915 thế nào trong tương lai và người ta có lý do để thận trọng với nó Vue nên là lựa chọn của bạn nếu bạn thích sự đơn giản, nhưng cũng thích sự linh hoạt.
MongoDB hệ quản trị cơ sở dữ liệu mã nguồn mở (open-source) thuộc họ cơ sở
dữ liệu phi quan hệ (NoSQL) [3]
MongoDB được phát triển từ năm 2007 bởi một tổ chức tên là MongoDB Inc
có trụ sở tại New York Tại thời điểm đó MongoDB được phát triển như là một nền tảng dịch vụ (Platform as a services - PAAS) Đến năm 2009 MongoDB đã được chính thức giới thiệu trên thị trường như một máy chủ cơ sở dữ liệu mã nguồn mở (open-source database server) được duy trì và phát triển bởi tổ chức MongoDB Inc Tại thời điểm đó đã có nhiều tổ chức lớn và vừa như SourceForge, Foursquare, eBay
sử dụng MongoDB để phát triển cơ sở dữ liệu của họ
MongoDB được xây dựng theo hướng là một cơ sở dữ liệu hướng đối tượng vì vậy nó không có các ràng buộc toàn vẹn dữ liệu như ở các Cơ sở dữ liệu quan hệ mà cho phép lưu trữ dữ liệu linh hoạt (stores data in flexible) có dữ liệu khác nhau trong cùng một Collection (tương đương với Table ở SQL) Do chính đặc thù này mà MongoDB có thể được sử dụng để lưu các dữ liệu đa dạng và phức tạp mà không bị hạn chế khi có thay đổi về cấu trúc lưu dữ liệu
MongoDB là một cơ sở dữ liệu phân tán vì vậy nó sẽ có những đặc trưng của
cơ sở dữ liệu phân tán như: tính sẵn sàng cao, khả năng mở rộng theo chiều ngang,
Trang 3016
• Document - tài liệu: là đơn vị cơ bản của dữ liệu trong MongoDB, một document tương đương với một dòng trong bảng của SQL Mỗi một document đều có cấu trúc là một đoạn chuỗi json độc lập
• Collection: là tập hợp các document có các thuộc tính tương tự nhau Collection tương đương với một bảng (Table) trong SQL Điểm khác nhau
rõ rệt nhất ở đây chính là việc bảng trong SQL có cấu trúc được quy định sẵn và dữ liệu vào luôn phải tuân theo cấu trúc đó, còn Collection có thể tiếp nhận tự do mọi document có các thuộc tính khác nhau vào mà không hề phát sinh lỗi
• Database: là các cơ sở dữ liệu độc lập lẫn nhau của MongoDB, một Database của MongoDB bao gồm một hay nhiều Collection và các cài đặt, phân quyền kèm theo Database đó
• _id: là một khóa định danh đặc biệt được quy định tự động bởi MongoDB khi thêm một Document vào Collection _id của bất cứ Document nào đều luôn là duy nhất trong Collection chứa document đó
• Index - chỉ mục: là một cấu trúc dữ liệu thu thập thông tin về các trường (field) trong Document của Collection từ đó mà nó giúp cho các câu truy vấn (query) đến các trường này tăng đáng kể tốc độ truy vấn Tuy nhiên việc tạo thêm các Index cũng làm tăng đáng kể dung lượng bộ nhớ tiêu hao cho Database MongoDB Trường _id là trường chỉ mục luôn luôn được khởi tạo mặc định bởi MongoDB khi thêm mới một Document
• Query - truy vấn: cũng giống như tất cả cơ sở dữ liệu khác, MongoDB hỗ trợ truy vấn dữ liệu và nhà phát triển của cơ sở dữ liệu này cũng đã cung cấp
số lượng lớn các câu lệnh bổ trợ giúp đơn giản hóa việc truy vấn dữ liệu hơn rất nhiều lần so với các ngôn ngữ truy vấn dữ liệu truyền thống mà vẫn đảm bảo được tốc độ truy vấn nhanh
2.6.3 Ưu điểm
Lược đồ dữ liệu linh hoạt, do là cơ sở dữ liệu NoSQL tổ chức dữ liệu theo kiểu Document Database nên có thể tùy ý lưu các Document với các thuộc tính và kích thước Document khác nhau và cùng một Collection của MongoDB
Tốc độ truy vấn dữ liệu nhanh, có thể tăng tốc độ truy vấn dữ liệu ở các trường (field) thông thường bằng cách khởi tạo Index cho trường tương ứng đó
Khả năng mở rộng cơ sở dữ liệu lớn
Phù hợp cho xu hướng Big Data trên toàn thế giới cũng như dễ dàng được lựa chọn với các ứng dụng thời gian thực (real-time)
Trang 3117 Được hỗ trợ bởi nhiều thư viện Javascript và có thể ứng dụng cho nhiều nền tảng, ngôn ngữ khác nhau
2.6.4 Khuyết điểm
Là cơ sở dữ liệu không có cấu trúc nên không còn các ràng buộc khóa ngoại, khóa chính như cơ sở dữ liệu quan hệ Từ đó các vấn đề về toàn vẹn dữ liệu phải được chuyển đến cho Server ứng dụng xử lý thay Các vấn đề về sai dữ liệu đầu vào thường không được MongoDB cảnh báo do không có ràng buộc nào quy định
Tiêu tốn nhiều tài nguyên trong quá trình xử lý cũng như tiêu tốn bộ nhớ cho việc khởi tạo thêm các Index tăng tốc độ truy vấn
Các kỹ thuật và thư viện khác
2.7.1 Aspose Cells
Aspose.Cells cho Java là một class library để tạo và quản lý các bảng tính Microsoft Excel trong các ứng dụng Java, độc lập với Microsoft Office Automation hoặc các sản phẩm khác
Aspose.Cells for Java là một API xử lý bảng Excel xuất sắc đã cho phép các nhà phát triển Java nhúng khả năng đọc, viết và thao tác các bảng tính Excel từ trong các ứng dụng Java của riêng họ mà không cần dựa vào Microsoft Excel
Aspose.Cells cho Java là một API phong phú, có thể mở rộng và tính năng phong phú, cung cấp nhiều chức năng vượt xa khả năng xuất dữ liệu đơn giản của các thành phần khác có sẵn trên thị trường Aspose.Cells cho Java cung cấp khả năng xuất dữ liệu, định dạng bảng tính đến mức hạt nhất, nhập hình ảnh, tạo biểu đồ, áp dụng và tính toán các công thức phức tạp, luồng dữ liệu Excel và lưu kết quả theo các định dạng khác nhau
2.7.2 Aspose word
Aspose.Words for NET là một class library tiên tiến để thực hiện một loạt các tác vụ xử lý văn bản trong các ứng dụng NET, không cần tự động hóa hoặc các sản phẩm Microsoft Office trên máy chủ phát triển
Aspose.Words for NET là một API xử lý văn bản tiên tiến cho phép bạn thực hiện một loạt các tác vụ xử lý văn bản trực tiếp trong các ứng dụng Java
Aspose.Words for NET hỗ trợ DOC, OOXML, RTF, HTML, OpenDocument, PDF, XPS, EPUB và các định dạng khác Với Aspose.Words có thể xem, tạo, sửa đổi, chuyển đổi, hiển thị và in tài liệu mà không cần sử dụng Microsoft Word
Trang 3218
2.7.3 Json Web Token
JWT (Json Web Token) là một mã thông báo tiêu chuẩn mở được sử dụng để trao đổi thông tin với các yêu cầu HTTP Thông tin này được xác minh và đánh dấu đáng tin cậy dựa trên signature JWT có nhiều lợi thế hơn các session
• Không có trạng thái (stateless), thông tin không được lưu trữ trên máy chủ
• Dễ phát triển, mở rộng
• Hiệu suất tốt hơn do máy chủ đọc thông tin trong yêu cầu (nếu sử dụng phiên, hệ thống phải truy vấn thông tin trong lưu trữ hoặc cơ sở dữ liệu)
Hình 2.6 Cấu trúc Json web token
Phần Signature sẽ được mã hóa bằng HMAC hoặc RSA
HMAC: Người tạo JWT (người phát hành mã thông báo) và người nhận JWT (người xác minh mã thông báo) đã sử dụng cùng một secret key để mã hóa và kiểm tra
RSA sử dụng 1 cặp khóa, đối tượng khởi tạo JWT sử dụng khóa riêng để mã hóa, bộ thu JWT sử dụng puclic key để kiểm tra
Vì vậy, với HMAC cả hai bên phải chia sẻ một secret key với nhau và JWT bên nhận hoàn toàn có thể tạo ra một mã JWT hợp lệ khác dựa trên khóa bí mật đó Đối với RSA, người nhận sử dụng public key để kiểm tra nhưng không thể khởi tạo JWT mới dựa trên khóa đó Do đó, mã hóa sử dụng RSA giúp bảo mật signature tốt hơn khi chia sẻ JWT với nhiều đối tượng khác nhau
Trong dự án, JWT được áp dụng để xác thực và ủy quyền
Trang 3319
2.7.4 Ngx-charts
Ngx-chart là thư viện biểu đồ cho Angular, nó bao bọc thư viện JavaScript D3
và sử dụng Angular để kết xuất và tạo hoạt ảnh cho các phần tử SVG Đây là một trong những thư viện biểu đồ phổ biến nhất để phát triển ứng dụng Angular vì nó giúp hiển thị biểu đồ dễ dàng hơn rất nhiều và cung cấp các khả năng khác mà nền tảng Angular mang lại như AoT, Universal, v.v Ngx-chart là một thư viện mạnh mẽ và dễ
sử dụng trong các ứng dụng Angular [7]
Trong dự án, biểu đồ ngx được áp dụng để trình bày dữ liệu thống kê cho trang quản trị
Trang 3420
CHƯƠNG 3 KHẢO SÁT HIỆN TRẠNG VÀ
XÁC ĐỊNH YÊU CẦU Khảo sát hiện trạng
3.1.1 Careerlink
3.1.1.1 Giới thiệu
Được thành lập vào năm 2006, CareerLink.vn đã từng bước trở thành cầu nối vững chắc giữa người lao động và nhà tuyển dụng Chuyên cung cấp dịch vụ tìm kiếm nhân sự quản lý cấp cao, và dịch vụ tuyển dụng trực tuyến Qua đó, nhà tuyển dụng
sẽ hài lòng với việc tìm được ứng viên phù hợp nhu cầu, còn người tìm việc sẽ thỏa mãn với khát vọng vươn tới đỉnh cao sự nghiệp [5]
CareerLink.vn hiện đang là website tuyển dụng có tới 100,000 người truy cập mỗi ngày Với lượng truy cập lớn, dữ liệu hồ sơ ứng viên đa dạng và phong phú đạt trình độ cao, website là công cụ hỗ trợ đắc lực trong công tác tuyển dụng của công
ty Đặc biệt là đối với các đơn vị thường hay tuyển dụng và tuyển dụng nhiều vị trí trong năm thì đây chính là dịch vụ hữu hiệu và khá tiết kiệm chi phí
Đăng tuyển công việc là một công cụ đơn giản và hữu ích cho việc tuyển dụng Với sự hỗ trợ tận tâm, nhiệt tình của bộ phận chăm sóc khách hàng, công việc của bạn sẽ được đăng lên website một cách rõ ràng, nhanh chóng và thuận lợi nhất
3.1.1.2 Chức năng website
Hình 3.1 Website CareerLink
Trang 3521
Hình 3.2 Chức năng của website Career Link
3.1.1.3 Điểm mạnh
- Giao diện thân thiện, dễ sử dụng
- Có đầy đủ các tính năng để người người tuyển dụng đăng tin và tìm được hồ
sơ ứng viên phù hợp và người dùng dễ dàng tạo CV ứng tuyển công việc
- Tích hợp cơ sở dữ liệu Hồ sơ của CareerLink
- Hỗ trợ đa ngôn ngữ: tiếng anh, tiếng việt
Trang 3622 Mạng lưới bao gồm tất cả các hoạt động và giá trị mà bất kỳ nhân lực công nghệ nào cũng có thể cần, làm việc cùng và giải trí, bao gồm các sự kiện công nghệ, cộng đồng công nghệ, trang web công nghệ, diễn đàn, v.v Dựa trên mạng lưới này, Topdev
đã đạt được 95% công nghệ các cộng đồng ở Việt Nam
Sau gần 5 năm hoạt động, TopDev đã trở thành:
• Nền tảng tuyển dụng CNTT hàng đầu tại Việt Nam với hơn 2.000 khách hàng và hơn 300.000 hồ sơ Developer
• Đơn vị duy nhất tại Việt Nam giúp xây dựng Thương hiệu Nhà tuyển dụng cho hàng trăm công ty CNTT tại Việt Nam
• Đơn vị uy tín nhất xuất bản các phân tích và báo cáo thị trường CNTT & nhân lực IT tại Việt Nam
• Đơn vị tổ chức của hai sự kiện Công nghệ có ảnh hưởng nhất tại Việt Nam: Vietnam Mobile Day & Vietnam Web Summit
Hình 3.3 Giới thiệu Topdev
Trang 3723
3.1.2.2 Chức năng website
Hình 3.1 Trang chủ website Topdev
Chức năng chính của trang tìm kiếm việc làm Topdev
Hình 3.2 Chức năng của webiste Topdev
Trang 3824
3.1.2.3 Điểm mạnh
- Giao diện thân thiện, dễ sử dụng
- Có đầy đủ các tính năng để người người tuyển dụng đăng tin và tìm được hồ
sơ ứng viên phù hợp và người dùng dễ dàng tạo CV ứng tuyển công việc
- Tích hợp cơ sở dữ liệu Hồ sơ của CareerLink
- Hỗ trợ đa ngôn ngữ: tiếng anh, tiếng việt
Gói Regular: 1.490.000 VND
Gói Extra: 2.020.000 VND
Gói Premium: 8.700.000 VND
Chức năng Có đầy đủ chức năng của
trang web tìm việc
Có đầy đủ chức năng của trang web tìm việc
Chất lượng CV Sàng lọc CV trước khi
gửi sang Nhà tuyển dụng, tránh nhận CV rác
Không
Thời hạn sử dụng tin
đăng
01 năm kể từ ngày đặt mua
06 tháng – 01 năm
Trang 3925
Nguồn CV ứng viên 02 nguồn CV (tin Basic
Plus & Distinction) – Nguồn tự nhiên – Nguồn do TopDev giới thiệu
Nguồn tự nhiên và
Thời gian hiển thị mỗi tin
đăng (đối với gói
Enterprise trở lên)
Tổng: 60 ngày 30 ngày chính thức + 30 ngày bảo hảnh
Trung bình 30 ngày
Xác định yêu cầu
Với kết quả thu thập và kiểm tra các hệ thống hiện tại, giúp chúng em có góc nhìn tổng quát về nghiệp vụ tìm việc làm hiện nay, giúp giải quyết được nhu cầu việc làm cho sinh viên của trường ĐH Sư Phạm Kỹ Thuật TP.HCM và nhà tuyển dụng một cách hiệu quả Hệ thống sẽ bao gồm các phần sau:
• Phần trang admin quản lý xét duyệt các tài khoản sinh viên, quản lý các tin đăng, bài đăng, xem được các báo cáo thống kê
• Phần trang end-user dành cho sinh viên có thể tìm kiếm nhà tuyển dụng, việc làm, lưu việc làm quan tâm, và ứng tuyển việc làm Đối với nhà tuyển dụng có thể đăng tin việc làm và xét duyệt hồ sơ ứng viên
• Các trang xây dựng với giao diện thân thiện, dễ sử dụng, đáp ứng nhanh chóng như cầu của người dùng
3.2.1 Yêu cầu chức năng
3.2.1.1 Yêu cầu chức năng nghiệp vụ
a Người tìm việc
- Quản lý thông tin cá nhân
• Đăng ký tài khoản
• Chỉnh sửa thông tin cá nhân
- Xem danh sách công việc
- Xem chi tiết công việc
- Xem chi tiết nhà tuyển dụng
Trang 4026
- Ứng tuyển, hủy ứng tuyển công việc
- Lưu, hủy công việc quan tâm
- Tìm kiếm việc làm, nhà tuyển dụng
b Nhà tuyển dụng
- Quản lý thông tin cá nhân
• Đăng ký tài khoản
• Cập nhật thông tin cá nhân
• Quên mật khẩu
• Verify tài khoản
- Quản lý tin đăng
• Tạo mới tin đăng
• Xem, sửa, xóa tin đăng
- Xem danh sách CV đã ứng tuyển
- Duyệt, hủy duyệt hồ sơ ứng tuyển
- Xem chi tiết ứng viên
- Tìm kiếm ứng viên
c Người quản trị
- Quản lý tỉnh thành
• Xem danh sách, tìm kiếm tỉnh thành
• Thêm mới, xóa, cập nhật tỉnh thành
- Quản lý quận huyện
• Xem danh sách, tìm kiếm quận huyện
• Thêm mới, xóa, cập nhật quận huyện
- Quản lý quy định
• Xem danh sách, tìm kiếm quy định
• Thêm mới, xóa, cập nhật quy định
- Quản lý thông tin liên hệ
• Xem danh sách, tìm kiếm thông tin liên hệ
• Thêm mới, xóa, cập nhật thông tin liên hệ
- Quản lý ngành
• Xem danh sách, tìm kiếm ngành
• Thêm mới, xóa, cập nhật ngành
- Quản lý khoa
• Xem danh sách, tìm kiếm khoa
• mới, xóa, cập nhật khoa
- Quản lý vị trí công việc
• Xem danh sách, tìm kiếm vị trí công việc