ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN TỐT NGHIỆP NGÀNH : CÔNG NGHỆ THÔNG TIN CHUYÊN NGÀNH: CÔNG NGHỆ PHẦN MỀM ĐỀ TÀI : XÂY DỰNG WEBSITE TÌM KIẾM VIỆC LÀM TẠI ĐÀ NẴNG Giáo viên hướng dẫn: TS VÕ ĐỨC HOÀNG Sinh viên thực hiện: NGÔ NGỌC KHÁNH Số thẻ sinh viên : 1021 50106 Lớp : 15 T 2 Đà Nẵng, 12 / 2019 PHI Ế U DUY Ệ T Đ Ồ ÁN T Ố T NGHI Ệ P I Ph ầ n dành cho Sinh viên 1 H ọ và tên: NGÔ NG Ọ C KHÁNH 2 Mã Sinh viên: 1021 50106 3 L ớ p: 15 T 2 4 Tên đ ề tài: Xây d ự ng website Tìm ki ế m Vi ệ c làm t ạ i Đà N ẵ ng 5 S ố đi ệ n tho ạ i: 0 359700903 6 E - mail: ngockhanh 2197 @gmail com 7 H ọ và tên GVHD: TS VÕ Đ Ứ C HOÀNG II Ph ầ n dành cho H ộ i đ ồ ng STT N ộ i dung đánh giá K ế t lu ậ n 1 Trình bày báo cáo theo đúng m ẫ u qui đ ị nh c ủ a Khoa 2 Không có s ự sao chép n ộ i dung báo cáo và chương trình đã có 3 Biên d ị ch mã ngu ồ n và ch ạ y đư ợ c chương trình 4 Có k ị ch b ả n th ự c hi ệ n v ớ i d ữ li ệ u th ử nghi ệ m 5 K ế t qu ả th ự c hi ệ n chương trình đúng theo báo cáo 6 Có s ự đóng góp, phát tri ể n c ủ a tác gi ả trong đ ồ án Ý ki ế n khác: K ế t lu ậ n: Đ ạ t yêu c ầ u Ph ả i s ử a ch ữ a l ạ i Không đ ạ t yêu c ầ u Đà N ẵ ng, ngày 20 tháng 12 năm 2019 Ch ủ t ị ch H ộ i đ ồ ng (Ký và ghi h ọ tên) Cán b ộ duy ệ t ki ể m tra (Ký và ghi h ọ tên) NHẬN XÉT CỦA NGƯỜI HƯỚNG DẪN Đà N ẵ ng, ngày 20 tháng 12 năm 2019 Ngư ờ i hư ớ ng d ẫ n (Ký và ghi h ọ tên) iv TÓM TẮT Tên đề tài : Xây d ự ng website Tìm ki ế m Vi ệ c làm t ạ i Đà N ẵ ng Sinh viên thực hiện : Ngô Ngọc Khánh Số thẻ SV : 1021 50106 Lớp: 15T2 Người hướng dẫn : TS Võ Đức Hoàng Ngày nay với sự phát triển mạnh mẽ của nền kinh tế hội nhập đã tạo ra cho chúng ta rất nhiều những cơ hội việc làm khác nhau Tuy vậy những năm gần đây nguồn lực lao động ở nước ta rất dồi dào và rất rẻ song tỷ lệ thất nghiệp vẫn cò n khá cao Vấn để đặt ra là làm thể nào để kết nối người lao động đến được với những cơ hội việc làm đó Hiện nay đã và đang tồn tại rất nhiều những hình thức giúp cho người lao động và nhà tuyển dụng tìm được đến với nhau Tiêu biểu của những hình thức nà y là: các trung tâm tư vấn và giới thiệu việc làm, hội chợ việc làm, các hình thức quảng cáo, tờ rơi, báo chí Tuy nhiên những hình thức này ra đời theo chiều hướng tự phát, thiếu tổ chức nên đã mang lại nhiều bất cập, đôi khi là rào cản giữa nhà tuyển dụng và các ứng viên tìm việc vì một số lý do sau đây: Mất thời gian chờ đợi vì phải thông qua khâu trung gian là nhà môi giới Ứng viên và nhà tuyển dụng phải mất kinh phí Sự thiếu tin tưởng ở các hình thức này Do vậy trong đợt báo cáo này em chọn đề tài: “Website việc là m Đà Nẵng” để củng cố kiến thức đã học trong trường, nâng cao kỹ năng làm bài cũng như tiếp cận trực tiếp với thực tế phục vụ công tác sau này Website cũng còn nhằm mục đích giúp cho các trung tâm và người kinh doanh giảm đi phần nào công việc phải thực hiện thủ công như trước đây v ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN CỘNG HÒA XÃ HÔI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: NGÔ NGỌC KHÁNH Số thẻ sinh viên: 1021 50106 Lớp: 15T2 Khoa: Công nghệ thông tin Ngành: Công nghệ phần mềm 1 Tên đề tài đồ án: Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng Đề tài thuộc diện: ☐ Có ký kết thỏa thuận sở hữu trí tuệ đối với kết quả thực hiện 2 Các số liệu và dữ liệu ban đầu: Không có 3 Nội dung các phần thuyết minh và tính toán: Nội dung của thuyết minh gồm: Mở đầu: Phần mở đầu của luận văn, giới thiệu về nhu cầu thực tế và lý do thực hiện đề tài, đồng thời giới thiệu sơ lược về đề tài và mục tiêu phải đạt được Chương 1 Cơ sở lý thuyết: trình bày những lý thuyết học được và đã áp dụng vào hệ thống Chương 2 Phân tích và thiết kế: trình bày các hồ sơ phân tích và hồ sơ thiết kế trong xây dựng hệ thống và luồng hoạt động của hệ thống Chương 3 Triển khai và đánh giá kết quả: mô tả cách cài đặt, phận hành hệ thống và đánh giá kết quả đạt được 4 Các bản vẽ, đồ thị ( g hi rõ các loại và kích thước bản vẽ ): Không có 5 Họ tên người hướng dẫn: TS VÕ ĐỨC HOÀNG 6 Ngày giao nhiệm vụ đồ án: 01 /09 / 2019 7 Ngày hoàn thành đồ án: 30 /12 / 2019 Đà Nẵng, ngày 20 tháng 12 năm 201 9 Trưởng Bộ môn …………………… Người hướng dẫn vi LỜI CẢM ƠN Đầu tiên em xin gửi lời cảm ơn chân thành nhất đến tất cả các thầy cô khoa Công nghệ Thông tin – Trường Đại học Bách khoa , Đại học Đà Nẵng đã tận tình dạy bảo và dìu dắt em trong suốt năm năm h ọc vừa qua tại trường Em xin chân thành cảm ơn T hầy Võ Đức Hoà ng , người đã tận tình hướng dẫn, cũng như đã tạo mọi điều kiện để em có thể hoàn thành đồ án tốt nghiệp này Nếu như không nhờ những lời hướng dẫn, những đánh giá và chỉ bảo sâu sắc của thầy thì em nghĩ việc hoàn thành đồ án tốt nghiệp của em sẽ khó khăn h ơn rất nhiều Một lần nữa em xin chân thành cảm ơn thầy Đồ án được thực hiện trong khoảng thời gian 3 tháng Bước đầu đi vào thực tế, tìm hiểu lĩnh vực ứng dụng web, với kiến thức còn hạn chế và nhiều bỡ ngỡ Do vậy, không thể tránh khỏi những thiếu sót, em rất mong nhận được những ý kiến đóng góp quý báu của quý thầy cô và các bạn để kiến thức trong lĩnh vực này của em được hoàn thiện hơn Sau cùng, em xin kính chúc quý thầy cô trong Khoa Công nghệ Thông tin và T hầy Võ Đức Hoàng thật dồi dào sức khỏe, niề m tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến thức cho thế hệ mai sau Trân trọng! Đà Nẵng, ngày 20 tháng 12 năm 2019 Ngô Ngọc Khánh vii LỜI CAM ĐOAN Em xin cam đoan : 1 Nội dung trong đồ án này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của Thầy Võ Đức Hoàng 2 Các tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố 3 Nếu có những sao chép không hợp lệ, vi phạm, tôi xin chịu hoàn toàn trách nhiệm Sinh viên th ực hiện Ngô Ngọc Khánh viii MỤC LỤC LỜI CẢM ƠN i LỜI CAM ĐOAN ii i MỤC LỤC iv DANH SÁCH HÌNH ẢNH vii DANH SÁCH CÁC BẢNG x DANH SÁCH CÁC KÝ HIỆU, CHỮ VIẾT TẮT xi TỔNG QUAN ĐỀ TÀI 1 1 Tổng quan về đề tài 1 2 Mục đích và tóm tắt sơ lược về đề tài 1 3 Môi trường, công cụ 1 4 Bố cục của đồ án 2 CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 3 1 1 Tổng quan về các ngôn ngữ phía Server 3 1 1 1 Framework Node js 3 1 1 2 Framework Express js 5 1 1 3 Tiêu chuẩn JWT ( JSON Web Token ) 6 1 1 4 Hệ quản trị cơ sở dữ liệu MongoDB 8 1 1 5 Môi trường lập trình Visual Studio Code 9 1 2 Tổng quan về các ngôn ngữ phía Client 9 1 2 1 Thư viện React js 9 1 2 2 Thư viện Redux js 11 1 3 Kết chương 13 ix CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ H Ệ THỐNG 14 2 1 Giới thiệu 14 2 1 1 Mục đích và đối tượng 15 2 1 2 Mô tả chung 15 2 1 3 Yêu cầu giao diện 16 2 1 4 Yêu cầu phi chức năng 17 2 2 Thiết kế hệ thống 17 2 2 1 Các tác nhân trong hệ thống 17 2 2 2 Các biểu đồ 17 2 2 3 Thiết kế cơ sở dữ liệu 32 2 3 Kết chương 37 CHƯƠNG 3 TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 38 3 1 Triển khai hệ thống 38 3 1 1 Môi trường triển khai 38 3 1 2 Hệ quản trị cơ sở dữ liệu: MongoDB 38 3 2 Kết quả thực nghiệm 39 3 3 Nhận xét và đánh giá kết quả 54 3 4 Kết chương 54 KẾT LUẬN VÀ HƯỚNG PH ÁT TRIỂN 55 1 Kết quả đạt được 55 2 Những điều chưa đạt được 56 3 Hướng nghiên cứu và phát triển 56 TÀI LIỆU THAM KHẢO 57 x DANH SÁCH HÌNH ẢNH Hình 1 1 : Mô tả cách hoạt động của Node 4 Hình 1 2 : Cấu trúc của ExpressJS 5 Hình 1 3 : Virtual DOM 10 Hình 1 4 : Cấu trúc của Redux 13 Hình 2 1 : Usecase tổng quát 18 Hình 2 2 : Usecase Quản trị viên (Admin) 19 Hình 2 3 : Usecase người tìm việc 20 Hình 2 4 : Usecase nhà tuyển dụng 21 Hình 2 6 : Biểu đồ tuần tự chức năng đăng nhập 27 Hình 2 7 : Biểu đồ tuần tự chức năng đăng ký 28 Hình 2 8 : Biểu đồ tuần tự chức apply công việc 29 Hình 2 9 : Biểu đồ tuần tự chức năng lưu công việc 30 Hình 2 10 : Biểu đồ tuần tự chức năng follow công ty 30 4 Hình 2 14 : Cơ sở dữ liệu của hệ thống 33 Hình 3 1 : Cài đặt Nodejs và Npm 38 Hình 3 2 : Kiểm node version tra cài đặt bằng lệnh 38 Hình 3 3 : Cài đặt hệ quản trị cơ sở dữ liệu Mongodb 39 Hình 3 4 : Giao diện trang đăng nhập 39 Hình 3 5 : Giao diện trang đăng ký người tìm việc 40 Hình 3 6 : Giao diện trang đăng ký nhà tuyển dụng 41 Hình 3 7 : Giao diện trang chủ 42 Hình 3 8 : Giao diện trang liên hệ 42 Hình 3 9 : Giao diện trang giới thiệu 43 xi Hình 3 10 : Giao diện trang nhà tuyển dụng 43 Hình 3 11 : Giao diện trang việc làm 44 Hình 3 12 : G iao diện trang thêm mới công việc 45 Hình 3 13 : G iao diện trang thay đổi mật khẩu 45 Hình 3 14 : Giao diện trang chi tiết nhà tuyển dụng 46 Hình 3 15 : Giao diện dashboard người tìm việc 46 Hình 3 16 : Giao diện trang danh sách các công ty đã follow 47 Hình 3 17 : Giao diện trang d anh sách các việc làm đã apply 47 Hình 3 18 : Giao diện trang chi tiết việc làm 48 Hình 3 19 : Giao diện trang dashboard công ty 48 Hình 3 20 : Giao diện trang quản lý việc làm của nhà tuyển dụng 49 Hình 3 21 : Màn hình gửi yêu cầu tìm việc thành công 49 Hình 3 22 : Màn hình hiển thị danh sách các việc làm đã lưu 50 xii DANH SÁCH CÁC BẢNG Bảng 2 1 : Ca sử dụng đăng nhập 22 Bảng 2 2 : Ca sử dụng đăng xuất 22 Bảng 2 3 : Ca sử dụng đăng ký nhà tuyển dụng 23 Bảng 2 4 : Ca sử dụng đăng ký người tìm việc 23 Bảng 2 5 : Ca sử dụng gửi yêu cầu tìm việc 24 Bảng 2 6 : Ca sử dụng thêm mới một công việc 24 Bảng 2 7 : Ca sử dụng quản lý việc làm của nhà tuyển dụng 25 Bảng 2 8 : Ca sử dụng cập nhật profile 25 Bảng 2 9 : Ca sử dụng lưu việc làm 26 Bảng 2 10 : Bảng user 34 Bảng 2 11 : Bảng Jobseeker (Người tìm việc ) 34 Bảng 2 12 : Bảng Company ( Nhà tuyển dụng ) 35 Bảng 2 13 : Bảng Job ( Việc làm ) 35 Bảng 2 14 : Bảng category ( danh sách ngành nghề ) 36 Bảng 2 15 : Bảng applications (bảng CV ) 37 Bảng 3 1 : Đánh giá kết quả 54 xiii DANH SÁCH CÁC KÝ HIỆU, CHỮ VIẾT TẮT Từ viết tắt Diễn giải JWT JSON WEB TOKEN API A pplication P rogramming I nterface MVC Model - View - Controller I/O Input / Outut Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 1 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 1 TỔNG QUAN VỀ ĐỀ TÀI 1 Tổng quan về đề tài Ngày nay với sự phát triển mạnh mẽ của nền kinh tế hội nhập đã tạo ra cho chúng ta rất nhiều những cơ hội việc làm khác nhau Tuy vậy những năm gần đây nguồn lực lao động ở nước ta rất dồi dào và rất rẻ song tỷ lệ thất nghiệp vẫn còn khá cao Vấn để đặt ra là làm thể nào để kết nối người lao động đến được với những cơ hội việc làm đó Hiện nay đã và đang tồn tại rất nhiều những hình thức giúp cho người lao động và nhà tuyển dụng tìm được đến với nhau Tiêu biểu của những hình thức này là: các trung tâm tư v ấn và giới thiệu việc làm, hội chợ việc làm, các hình thức quảng cáo, tờ rơi, báo chí Tuy nhiên những hình thức này ra đời theo chiều hướng tự phát, thiếu tổ chức nên đã mang lại nhiều bất cập, đôi khi là rào cản giữa nhà tuyển dụng và các ứng viên tìm việ c vì một số lý do sau đây: + Mất thời gian chờ đợi vì phải thông qua khâu trung gian là nhà môi giới + Ứng viên và nhà tuyển dụng phải mất kinh phí + Sự thiếu tin tưởng ở các hình thức này 2 Mục đích và tóm tắt sơ lược về đề tài 2 1 Mục đích Website là cầu nối trung gian giữa người lao động và nhà tuyển dụng, qua đó giúp cho hai bên vừa giảm được chi phí đi lại, vừa giúp đạt hiệu quả trong quá trình tìm kiếm việc làm cũng như tìm kiếm ứng viên phù hợp với yêu cầu của công ty 2 2 Phân tích khó khăn của hiện trạng Mặc dù đây là một nội dung không mới và cũng đã có rất nhiều website hỗ trợ các dịch vụ này Nhưng cách giải quyết vấn đề thì lại hoàn toàn mới bởi hệ thống được xây dựng trên nền tảng hỗ trợ đa người dùng với phương thức hoạt động của một mô hình cổ ng thông tin điện tử Đây chính là điều mà nhiều website với phương thức hoạt động truyền thống chưa làm được 2 3 Kịch bản của đề tài Website là cầu nối trung gian giữa người lao động và nhà tuyển dụng Nhà tuyển dụng có thể đăng những công việc mà họ muốn tu yển dụng và người tìm việc sẽ ứng tuyển vào những công việc mà phù hợp với họ Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 2 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 2 3 Môi trường, công cụ Môi trường triển khai: Website Hệ điều hành: Được cấu hình trên hệ điều hành Linux Phạm vi sử dụng: Có thể sử dụng trên tất cả trình duyệt Sản phẩm được viết theo mô hình Client - Server Ngôn ng ữ lập trình: React js, Node js Hệ quản trị cơ sở dữ liệu: MongoDB 4 Bố cục của đồ án Đồ án bao gồm các nội dung sau: - Mở đầu - Chương 1: Cơ sở lý thuyết 1 1 Tổng quan về các ngôn ngữ phía Server 1 2 T ổng quan về các ngôn ngữ phía Client - Chương 2: Phân tích thiết kế hệ thống 2 1 Giới thiệu 2 2 Thiết kế hệ thống 2 3 Kết chương - Chương 3: Triển khai và đánh gia kết quả 3 1 Triển khai hệ thống 3 2 Kết quả thực nghiệm 3 3 Nhận xét và đánh giá kết quả 3 4 Kết chương - Kết luận và hướng phát triển Kết quả đạt được Những điều chưa đạt được Hướng nghiên cứu và phát triển Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 3 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 3 CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 1 1 Tổng quan về các ngôn ngữ phía Server 1 1 1 Framework Node js 1 1 1 1 Định nghĩa Node js Node js là một JavaScript runtime được build dựa trên Chrome’s V8 JavaScript engine Node js sử dụng mô hình event - driven, non - blocking I/O khiến nó trở nên nhẹ và hiệu quả V8 engine là một JavaScript engine mã nguồn mở chạy trên các trình duyệt Chrome, Opera và Vivaldi Nó được thiết kế tập trung vào hiệu năng và chịu trách nhiệm cho việc dịch mã JavaScript sang mã máy để máy tính có thể hiểu và chạy được Nhưng bạn cũng nên tránh nhầm lẫn rằng Node chạy trên trình duyệt Cha đẻ của Node dựa trên V8 engine, cải tiến một số tính năng chẳng hạn file system API, thư viện HTTP và một số phương thức liên quan đến hệ điều hành Điều đó có nghĩa là Node js là một chương trình giúp ta có thể chạy code JavaScript trên máy tính, nói cách khác nó là một JavaScript runtime 1 1 1 2 Mô hình hoạt động của Node js Để cho dễ hiểu, khi bạn connect đến một server truyền thống, chẳng hạn Apache, nó sẽ sinh ra một thread mới để xử lý request Ở các ngôn ngữ như PHP hay Ruby, mỗi một phép toán I/O (ví dụ truy cập database) sẽ chặn execution trên code của bạn cho đến kh i phép toán đó hoàn thành Nói cách khác, server sẽ đợi cho đến khi database được duyệt xong mới xử lý kết quả Nếu có những request mới, server lại tiếp tục sinh những thread mới để xử lý chúng Điều này dẫn đến nguy cơ kém hiệu quả, khi một lượng lớn thr ead được tạo ra sẽ khiến cho hệ thống trở nên chậm chạp, tệ hơn nữa có thể khiến site bị sập Cách thông thường để giải quyết tình trạng này là bổ sung thêm server Node js, mặt khác là single - threaded Nó cũng thuộc dạng event - driven hay nói cách khác tất cả những gì xảy ra trong Node là để phản hồi lại với một sự kiện Ví dụ, khi một request được gửi đến, server bắt đầu xử lý nó Nếu nó gặp phải phép toán I/O, thay vì đợi cho phép toán này kết thúc, nó sẽ đăng ký một callback trước khi tiếp tục xử lý even t tiếp theo Khi phép toán I/O kết thúc, server sẽ chạy callback và tiếp tục làm việc trên request ban đầu Ở tầng bên dưới, Node sử dụng thư viện libuv để thực hiện hoạt động asynchronous (non - blocking) này Mô hình hoạt động này của Node Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 4 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 4 giúp server có t hể xử lý một lượng lớn kết nối đến đồng thời Quan điểm truyền thống để scale một Node app là clone nó và để instance được clone chia sẻ công việc Node js thậm chí có module buit - in sẵn để giúp bạn thực hiện chiến lược clone này trên một server duy nhất 1 1 1 3 Hình dưới đây mô tả cách hoạt động của Node Hình 1 1 : Mô tả cách hoạt động của Node 1 1 1 4 Thế mạnh của Node js? Bên cạnh tốc độ và khả năng mở rộng, việc dùng JavaScript trên server và trình duyệt giúp cho bạn đỡ phải chuyển đổi giữa các ngôn ngữ Bạn có thể làm bất cứ thứ gì với duy nhất một ngôn ngữ Một điểm mạnh nữa của Node đó là nó cực thích hợp với JSON JSON được coi là lý tưởng khi được sử dụng bởi một chương trình JavaScript Khi làm việc với Node, dữ li ệu có thể chuyển qua các tầng layer mà không cần phải reformat Cuối cùng, JavaScript thực sự quá phổ biến, điều này giúp cho việc chuyển sang phát triển Node app dễ dàng hơn so với những ngôn ngữ phía server khác Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 5 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 5 1 1 2 Framework Express js 1 1 2 1 ExpressJS là gì Express js là một Framework nhỏ, nhưng linh hoạt được xây dựng trên nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ nên các bạn không phải lo lắng khi làm việ c với Framework này Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn Chứ không làm giảm tốc độ của NodeJS Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng ExpressJS như một core function, chẳng hạn: SailsJS, MEAN, 1 1 2 2 Cấu trúc của ExpressJS Hình 1 2 : Cấu trúc của ExpressJS Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 6 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 6 1 1 3 Tiêu chuẩn JWT ( JSON Web Token ) 1 1 3 1 JSON Web Token là gì? JSON Web Mã (JWT) là một chuẩn mở (RFC 7519) định nghĩa một cách nhỏ gọn và khép kín để truyền một cách an toàn thông tin giữa các bên dưới dạng đối tượng JSON Thông tin này có thể được xác minh và đáng tin cậy vì nó có chứa chữ ký số JWTs có thể được ký bằng một thuật toán bí mật (với thuật toán HMAC) hoặc một public / p rivate key sử dụng mã hoá RSA Một ví dụ về JWT Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 eyJleHAiOjEzODY4OTkxM zEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3 YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU 5IiwiaWF0IjoxMzg2 ODk4OTUxfQ uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_I WuA5MaMo Thoạt trông phức tạp là thế nhưng nếu hiểu, cấu trúc của một JWT chỉ đơn giản như sau: Nói một cách khác, JWT là sự kết hợp (bởi dấu ) một Object Header dưới định dạng JSON được encode base64, một payload object dưới định dạng JSOn được encode base64 và một Signature cho URI cũng được mã hóa base64 nốt 1 1 3 2 Giải thích thêm về 3 thành phần của JWT Header Header bao gồm hai phần chí nh: loại token (mặc định là JWT - Thông tin này cho biết đây là một Token JWT) và thuật toán đã dùng để mã hóa (HMAC SHA256 - HS256 hoặc RSA) { "alg": "HS256", "typ": "JWT" } Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 7 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 7 Payload Payload chứa các claims Claims là một các biểu thức về một thực thể (chẳng hạn user) và một số metadata phụ trợ Có 3 loại claims thường gặp trong Payload: reserved, public và private claims Reserved claims Đây là một số metadata được định nghĩa trước, trong đó một số metadata là bắt buộc, số còn lại nên tuân theo để JWT hợp lệ và đầy đủ thông tin: iss (issuer), iat (issued - at time) exp (expiration time), sub (subject), aud (audience), jti (Unique Identifier cho JWT, Can be used to prevent the JWT from being replayed This is helpful for a one time use token ) Public Clai ms Claims được cộng đồng công nhận và sử dụng rộng rãi Private Claims Claims tự định nghĩa (không được trùng với Reserved Claims và Public Claims), được tạo ra để chia sẻ thông tin giữa 2 parties đã thỏa thuận và thống nhất trước đó Signature Chữ ký Sign ature trong JWT là một chuỗi được mã hóa bởi header, payload cùng với một chuỗi bí mật theo nguyên tắc sau: HMACSHA256 ( base64UrlEncode(header) + " " + base64UrlEncode(payload), secret ) Do bản thân Signature đã bao gồm cả header và payload nên Sign ature có thể dùng để kiểm tra tính toàn vẹn của dữ liệu khi truyền tải Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 8 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 8 1 1 4 Hệ quản trị cơ sở dữ liệu MongoDB 1 1 4 1 Khái niệm MongoDB là một chương trình cơ sở dữ liệu mã nguồn mở được thiết kế theo kiểu hướng đối tượng trong đó các bảng được cấu trúc một cách linh hoạt cho phép các dữ liệu lưu trên bảng không cần phải tuân theo một dạng cấu trúc nhất định nào Chính do cấu trúc linh hoạt này nên MongoDB có thể được dùng để lưu trữ các dữ liệu có cấu trúc phức tạp và đa dạng và không cố định (hay còn gọi là Big Data) 1 1 4 2 Lợi thế của MongoDB so với các cơ sở dữ liệu dạng quan hệ(RDBMS) - Ít Schema hơn: MongoDB là một cơ sở dữ liệu dựa trên Document, trong đó một Collection giữ các Document khác nhau Số trường, nội dung và kích cỡ của Document này có thể khác với Do cument khác - Cấu trúc của một đối tượng là rõ ràng - Không có các Join phức tạp - Khả năng truy vấn sâu hơn MongoDB hỗ trợ các truy vấn động trên các Document bởi sử dụng một ngôn ngữ truy vấn dựa trên Document mà mạnh mẽ như SQL - MongoDB dễ dàn g để mở rộng - Việc chuyển đổi/ánh xạ của các đối tượng ứng dụng đến các đối tượng cơ sở dữ liệu là không cần thiết - Sử dụng bộ nhớ nội tại để lưu giữ phần công việc, giúp truy cập dữ liệu nhanh hơn 1 1 4 3 Một số đặc điểm của MongoDB - Kho lưu định hướng D ocument: Dữ liệu được lưu trong các tài liệu kiểu JSON Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 9 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 9 - Lập chỉ mục trên bất kỳ thuộc tính nào - Các truy vấn đa dạng - Cập nhật nhanh hơn 1 1 5 Môi trường lập trình Visual Studio Code Visual Studio Code là sản phẩm của Microsoft, ra mắt vào tháng 4 năm 2015 ở hội nghị Build Đặc điểm nổi bật là đơn giản, gọn nhẹ, dễ dàng cài đặt Visual Studio Code có thể cài đặt được trên cả Windows, Linux và Mac OS và hỗ trợ nhiều ngôn ngữ 1 2 Tổng quan về các ngôn ngữ phía Client 1 2 1 Thư viện React js 1 2 1 1 Giới thiệu React js là một thư viện Javascript đang nổi lên trong những năm gần đây với xu hướng Single Page Application Trong khi những framework khác cố gắng hướng đến một mô hình MVC hoàn thiện thì React nổi bật với sự đơn giản và dễ dàng phối hợp với những thư viện Javas cript khác Nếu như AngularJS là một Framework cho phép nhúng code javasscript trong code html thông qua các attribute như ng - model, ng - repeat thì với react là một library cho phép nhúng code html trong code javascript nhờ vào JSX, bạn có thể dễ dàng lồn g các đoạn HTML vào trong JS Tích hợp giữa javascript và HTML vào trong JSX làm cho các component dễ hiểu hơn Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 10 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 10 1 2 1 2 React là gì? React là một thư viện UI phát triển tại Facebook để hỗ trợ việc xây dựng những thành phần (components) UI có tính tương tác cao, có trạng thái và có thể sử dụng lại được React được sử dụng tại Facebook trong production, và www instagram com được viết hoàn toàn trên React Một trong những điểm hấp dẫn của React là thư viện này không chỉ hoạt động trên phía client, mà còn được render trên server và có thể kết nối với nhau React so sánh sự thay đổi giữa các giá trị của lần render này với lần render trước và cập nhật ít thay đổi nhất trên DOM Trươc khi đến cài đặt và cấu hình, chúng ta sẽ đi đến một số khái niệm cơ bản: 1 2 1 3 Virtual DOM: C ông nghệ DOM ảo giúp tăng hiệu năng cho ứng dụng Việc chỉ node gốc mới có trạng thái và khi nó thay đổi sẽ tái cấu trúc lại toàn bộ, đồng nghĩa với việc DOM tree cũng sẽ phải thay đổi một phần, điều này sẽ ảnh hưởng đến tốc độ xử lý React JS sử dụng Virt ual DOM (DOM ảo) để cải thiện vấn đề này Virtual DOM là một object Javascript, mỗi object chứa đầy đủ thông tin cần thiết để tạo ra một DOM, khi dữ liệu thay đổi nó sẽ tính toán sự thay đổi giữa object và tree thật, điều này sẽ giúp tối ưu hoá việc re - rend er DOM tree thật Hình 1 3 : Virtual DOM Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 11 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 11 React sử dụng cơ chế one - way data binding – luồng dữ liệu 1 chiều Dữ liệu được truyền từ parent đến child thông qua props Luồng dữ liệu đơn giản giúp chúng ta dễ dàn g kiểm soát cũng như sửa lỗi Với các đặc điểm ở trên, React dùng để xây dựng các ứng dụng lớn mà dữ liệu của chúng thay đổi liên tục theo thời gian Dữ liệu thay đổi thì hầu hết kèm theo sự thay đổi về giao diện Ví dụ như Facebook: trên Newsfeed của bạn cùng lúc sẽ có các status khác nhau và mỗi status lại có số like, share, comment liên tục thay đổi Khi đó React sẽ rất hữu ích để sử dụng 1 2 2 Thư viện Redux js 1 2 2 1 Giới thiệu Redux là một thư viện Javascript giúp tạo ra thành một lớp quản lý trạng thái của ứng dụng Được dựa trên nền tảng tư tưởng của kiến trúc Flux do Facebook giới thiệu, do vậy Redux thường là bộ đôi kết hợp hoàn hảo với React (React Js và React Native) 1 2 2 2 Nguyên Lý hoạt động Nguyên lý đầu tiên của Redux là tất cả mọi thứ mà thay đổi trong ứng dụng, bao gồm dữ liệu và trạng thái giao diên – UI state, được lưu trong đối tượng gọi là state hoặc state tree Ttrong quá trình hoạt động của ứng dụng, bị phụ thuộc khá nhiều yếu tố: dữ liệu từ máy chủ ban đầu, thao tác của người dùng (nhập dữ liệu, click menu, button ), dữ liệu cập nhật từ máy chủ, dữ liệu được tính toán trong ứng dụng (Ví dụ: tính toán số dư tài khoản dựa trên biến động của tỉ giá) những yếu tố này còn gọi là nguồn dữ liệu Những nguồn dữ liệu này đến từ những nơi khác nhau, bất kỳ k hi nào, khiến cho ứng dụng của chúng ta rất khó kiểm soát, chúng tác động đến những thành phần đơn lẻ, hoặc nhiều thành phần trên ứng dụng, hoặc hiệu ứng dây chuyền Chính vì sự phức tạp đó, là vấn đề mà Redux muốn giải quyết, tất cả các nguồn dữ liệu cần phải được quản lý và tạo thành một nguồn duy nhất, tin cậy Nguyên lý thứ 2: state chỉ được phép đọc, Cách duy nhất để thay đổi State của ứng dụng là phát một Action (là 1 object mô tả những gì xảy ra) Trạng thái của ứng Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 12 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 12 dụng không được phép thay đổi “trực tiếp”, trạng thái cũng chỉ là một đối tượng mà thôi, nên việc thay đổi là được Tuy nhiên, với Redux hay Flux thì trạng thái chỉ thay đổi khi và chỉ khi có một sự kiện xảy ra, giống như ra trận thì chỉ được phép nghe lời từ chỉ huy, mọi tin tức tình báo đ ều được gởi tới chỉ huy, nếu không có lệnh từ chỉ huy thì tất cả không được phép manh động Nguyên lý thứ 3: sử dụng pure function nhận tham số là state trước đó và action và trả về state tiếp theo Hàm này gọi là reducer, (pure function là hàm trả về giá trị phụ thuộc duy nhất vào giá trị của tham số, pure function có tập các tham số thì giá trị trả về cũng là một tập tương tự như thế) Việc thay đổi trạng thái của ứng dụng, được thực hiện thông qua các hàm thuần tuý Đưa vào giá trị sự kiện, trạng thái hi ện tại và hàm trả về trạng thái tiếp theo Dù tương lai ứng dụng của bạn có thể rất lớn, nhưng các hàm reducer này thì chỉ cần nhỏ gọn thay đổi trên từng lá của cây trạng thái, và chúng hoàn toàn có thể kết hợp với nhau tạo thành chuỗi sự kiện Ví dụ: ngườ i click vào menu (một sự kiện => thay đổi trạng thái), sau đó router cũng cần thay đổi để phù hợp với ngữ cảnh Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 13 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 13 1 2 2 3 Cấu trúc của redux Hình 1 4 : Cấu trúc của Redux 1 3 Kết chương Qua những nội dung đã nêu ở chương 1, chúng ta đã có một cái nhìn tổng quát về mặt cơ sở lý thuyết cũng như những công nghệ được áp dụng trong đồ án Tiết kiệm lưu lượng tải server là một trong những lợi thế hàng đầu của ngôn ngữ lập trình javascript Javascript cho phép người dùng xác nhận đầu vào trước khi gửi tới server Bên cạnh đó, JavaScript sẽ phản hồi ngay tới khách truy cập mà không cần phải chờ được cho trang web tải lại, nhất là trong trường hợp họ đã quên nhập thứ gì đó Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 14 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 14 CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 2 1 Giới thiệu Hệ thống cung cấp giao diện web, người dùng có thể dễ dàng tương tác, trung gian giữa người tìm việc và nhà tuyển dụng Các chức năng cơ bản của hệ thống như sau: - Đăng ký tài khoản cho nhà tuyển dụng và người tìm việc - Đăng nhập, gửi yêu cầu cho admin về các vấn đ ề về website và việc làm - Xem danh sách các công việc và các công ty tuyển dụng - Quản lý việc làm và thông tin cá nhân của mình - Ứng tuyển vào công việc phù hợp với mình - Tìm kiếm và lưu những công việc - Tìm kiếm và lưu những công ty tuyển d ụng - Theo d õi những nhà tuyển dụ ng - Gửi mail cho nhà tuyển dụng khi ứng tuyển vào công việc của họ - Thêm , xóa , sửa những công việc của nhà tuyển dụng - Admin quản lý danh sách việc làm - Admin quản lý danh sách người dùng - Admin quản lý danh sách việc làm, ngành nghề Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 15 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 15 2 1 1 Mục đích và đối tượng - Mục đích Hệ thống được xây dựng nhằm mục đích tạo ra môi trường trung gian giữ a người tìm việc và nhà tuyển dụ ng Qua đó giúp họ có thể kết nối với nhau để người tìm việc vừa tìm được những công việc phù hợp, đồng thời nhà tuyển dụng cũng tìm được những ứng viên tốt cho công ty của họ - Đối tượng Hệ thống phục vụ cho tất cả mội người có nhu cầu tìm công việc tốt tại Đà Nẵng 2 1 2 Mô tả chung 2 1 2 1 Tổng quan: Hi ệ n nay v ẫ n chưa có công c ụ nào uy tín giúp ngư ờ i tìm vi ệ c có th ể tìm đư ợ c nh ữ ng công vi ệ c, công ty uy tín , vì thế website tìm kiếm việc làm ra đời Hệ thống ra đời và ứng dụng thực tế có thể giúp người dùng thoải mái ngồi tại nhà mà cũng có thể tìm kiếm được những công việc tốt và phù hợp 2 1 2 2 Kịch bản của đề tà i M ỗ i m ộ t nhà tuy ể n d ụ ng có th ể đăng ký m ộ t tài kho ả n đ ể r ồ i đăng lên nh ữ ng công vi ệ c mà h ọ mu ố n tuy ể n Còn nh ữ ng ngư ờ i tìm vi ệ c cũng đăng ký m ộ t tài kho ả n ngư ờ i dùng và ứ ng tuy ể n vào nh ữ ng công vi ệ c c ủ a công ty đó 2 1 2 3 Lớp người dùng và đặc điểm Hệ thống phân biệt ba đối tượng người dùng là : quản trị chính hệ thống, người tìm việc và nhà tuyển dụng Ba đối tượng người dùng này sẽ có các chức năng khác nhau tùy theo cấp độ Quản trị chính hệ thống sẽ có quyền thêm, xóa, sửa những công việc hay người dùng , và họ có thể thêm hay xóa những việc làm hay ngành nghề Người tìm việc thì đăng nhập vào hệ thống để tìm kiếm những công ty hay việc làm phù hợp với họ Nhà tuyển dụng thì đăng bài tuyển dụng để người tìm việc ứng tuyển Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 16 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 16 2 1 2 4 Môi trường , công cụ - Môi trư ờ ng tri ể n khai: Website - H ệ đi ề u hành: Đư ợ c c ấ u hình trên h ệ đi ề u hành Linux - Ph ạ m vi s ử d ụ ng: Có thê s ử d ụ ng trên t ấ t c ả trình duy ệ t - S ả n ph ẩ m đư ợ c vi ế t theo mô hình Client - Server - Ngôn ng ữ l ậ p trình: React js, Node js - H ệ qu ả n tr ị cơ s ở d ữ li ệ u: MongoDB 2 1 3 Yêu cầu giao diện - Giao diện người dùng Giao diện dễ nhìn, trực quan và hiển thị được đầy đủ thông tin nhất Giao diện chia thành nhiều khu vực, nhưng phải đảm bảo sự thống nhất và không gây rối mắt khi thao tác - Giao diện của thành viên G iao diện phải có đầy đủ các phím chức năng, trực quan và dễ dàng sử dụng nhất Hiển thị đầy đủ thông tin nhưng không rườm rà phức tạp - Giao diện quản trị viên Giao diện quản trị viên phải cung cấp cái nhìn tổng quan nhất của hệ thống như danh sách các địa điểm, danh sách người dùng và đầy đủ các phím chức năng Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 17 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 17 2 1 4 Yêu cầu phi chức năng 2 1 4 1 Hiệu suất Hệ thống phải đạt độ ổn định tương đối, đáp ứng tốc độ tải trang nhất định với lượng truy cập không lớn Hệ thống đảm bảo được sự tối ưu trong việc tải các thành phầ n của trang, không gây lãng phí tài nguyên 2 1 4 2 Yêu cầu an toàn Hệ thống hoạt động độc lập, không phụ thuộc vào bất kỳ phần mềm nào, không ảnh hưởng đến các phần mềm khác 2 1 4 3 Yêu cầu bảo mật Hệ thống đảm bảo các thông tin người dùng phải được bảo mật nhất, không sử dụng các thư viện Javascript không rõ nguồn gốc Mật khẩu người dùng không được truyền dưới dạng plain - text Mật khẩu lưu xuống cơ sở dữ liệu phải được mã hóa một chiều và không thể dịch ngược 2 1 4 4 Yêu cầu chất lượng Hệ thống phải đảm bảo chất lượng tốt, h oạt động tốt, ít các lỗi cơ bản Tiết kiệm được dung lượng web, giảm băng thông Chỉ sử dụng các thư viện cần thiết và sử dụng đúng chỗ 2 2 Thiết kế hệ thống 2 2 1 Các tác nhân trong hệ thống Hệ thống có các tác nhân sau: - Quản trị viên (Admin) - Người tìm việc - Nhà tuyển dụng 2 2 2 Các b iểu đồ 2 2 2 1 Biểu đồ ca sử dụng a Biểu đồ ca sử dụng tổng quát Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 18 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 18 Hình 2 1 : Usecase tổng quát Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 19 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 19 b Biểu đồ ca sử dụng quản trị hệ thống (Admin) Hình 2 2 : Usecase Quản trị viên (Admin) Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 20 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 20 c Biểu đồ ca sử dụng người tìm việc Hình 2 3 : Usecase người tìm việc Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 21 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 21 d Biểu đồ ca sử dụng nhà tuyển dụng Hình 2 4 : Usecase nhà tuyển dụng Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 22 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 22 2 2 2 2 Đặt tả ca sử dụng Bảng 2 1 : Ca sử dụng đăng nhập Tên Use - case Đăng nhập Tác nhân Tất cả tác nhân Use - case liên quan Không có Usecase liên quan Mô tả chung Cho phép tất cả người dùng đăng nhập vào hệ thống Điều kiện trước Không có Điều kiện sau Thành công: Đăng nhập vào hệ thống website Thất bại: Hiển thị thông báo lỗi và trở về đăng nhập Bảng 2 2 : Ca s ử dụng đăng xuất Tên Use - case Đăng xuất Tác nhân Tất cả tác nhân Use - case liên quan Đăng nhập Mô tả chung Cho phép tất cả người dùng đăng xuất khỏi hệ thống Điều kiện trước Đã đăng nhập vào hệ thống Điều kiện sau Thành công: Chuyển hướng sang trang đăng nhập Thất bại: Hiển thị thông báo lỗi và tự động đăng xuất và chuyển hướng sang trang đăng nhập Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 23 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 23 Bảng 2 3 : Ca sử dụng đăng ký nhà tuyển dụng Tên Use - case Đăng ký n hà tuyển dụng Tác nhân Nhà tuyển dụng Use - case liên quan Không có Usecase liên quan Mô tả chung Cho phép nhà tuyển dụng đăng ký tài khoản Điều kiện trước Không có Điều kiện sau Thành công: Chuyển hướng sang trang đăng nhập Thất bại: Hiển thị thông báo lỗi và chuyển hướng sang trang đăng ký Bảng 2 4 : Ca sử đăng ký người tìm việc Tên Use - case Đăng ký người tìm việc Tác nhân Người tìm việc Use - case liên quan Không có Usecase liên quan Mô tả chung Cho phép người tìm việc đăng ký tài khoản Điều kiện trước Không có Điều kiện sau Thành công: Chuyển hướng sang trang đăng nhập Thất bại: Hiển thị thông báo lỗi và chuyển hướng sang trang đăng ký Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 24 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 24 Bảng 2 5 : Ca sử dụng gửi yêu cầu tìm việc Tên Use - case Gửi yêu cầu tìm việc Tác nhân Nhà tuyển dụng, người tìm việc Use - case liên quan Không có Usecase liên quan Mô tả chung Cho phép Nhà tuyển dụng, người tìm việc có thể gửi yêu cầu đến admin của hệ thống Điều kiện trước Không có Điều kiện sau Sau khi gửi thành công thông báo cho người dùng biết và yêu cầu kiểm tra mail nếu nhận được phản hồi Bảng 2 6 : Ca sử dụng thêm một công việc mới Tên Use - case Thêm mới một công việc Tác nhân Nhà tuyển dụng Use - case liên quan Đăng nhập , Đăng ký Mô tả chung Nhà tuyển dụng có thể thêm mới một công việc mà họ muốn tuyển Điều kiện trước Đã đăng nhập vào hệ thống Điều kiện sau Sau khi thêm thành công sẽ chuyển hướng sang trang quản lý việc làm của nhà tuyển dụng đó Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 25 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 25 Bảng 2 7 : Ca sử dụng quản lý việc làm của nhà tuyển dụng Tên Use - case Quản lý việc làm Tác nhân Nhà tuyển dụng Use - case liên quan Đăng nhập ,Thêm mới công việc Mô tả chung Cho phép nhà tuyển dụng có thể sửa, xóa những công việc mà họ muốn Điều kiện trước Đã đăng nhập vào hệ thống Điều kiện sau Sau khi thao tác thành công sẽ hiện thông báo Bảng 2 8 : Ca sử dụng cập nhật thông tin cá nhân Tên Use - case Cập nhật thông tin cá nhân Tác nhân Nhà tuyển dụng, Người tìm việc Use - case liên quan Đăng nhập Mô tả chung 1 Cho phép nhà tuyển dụng cập nhật ảnh đại diện và thông tin của công ty 2 Cho phép người tìm việc cập nhật ảnh đại diện và thông tin của họ Điều kiện trước Đã đăng nhập Điều kiện sau Sau khi sửa thành công thì thông báo thành công Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 26 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 26 Bảng 2 9 : Ca sử lưu công việc Tên Use - case Lưu công việc Tác nhân Người tìm việc Use - case liên quan Đăng nhập Mô tả chung Cho phép người tìm việc có thể lưu những công việc mà họ yêu thích Điều kiện trước Đã đăng nhập Điều kiện sau Sau khi lưu thành công sẽ xuất hiện thông báo Bảng 2 10: Ca sử theo dõi công ty Tên Use - case Theo dõi công ty Tác nhân Người tìm việc Use - case liên quan Đăng nhập Mô tả chung Cho phép người tìm việc có thể theo dõi một nhà tuyển dụng mà họ yêu thích Điều kiện trước Đã đăng nhập Điều kiện sau Sau khi theo dõi thành công sẽ xuất hiện thông báo Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 27 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 27 Bảng 2 11: Ca sử ứng tuyển công việc Tên Use - case Ứng tuyển một công việc Tác nhân Người tìm việc Use - case liên quan Đăng nhập Mô tả chung Cho phép người tìm ứng tuyển vào một công việc mà họ muốn ứng tuyển Điều kiện trước Đã đăng nhập Điều kiện sau Sau khi ứng tuyển thành công sẽ xuất hiện thông báo yêu cầu kiểm tra mail nếu có phản hồi 2 2 2 3 Biểu đồ tuần tự a Chức năng đăng nhập Hình 2 5 : Biểu đồ tuần tự chức năng đăng nhập Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 28 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 28 b Chức năng đăng ký người dùng Hình 2 6 : Biểu đồ tuần tự chức năng đăng ký Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 29 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 29 c Chức năng ứng tuyển việc làm Hình 2 7 : Biểu đồ tuần tự chức năng ứng tuyển việc làm Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 30 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 30 d Chức năng lưu công việc Hình 2 8 : Biểu đồ tuần tự chức năng lưu công việc Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 31 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 31 e Chức năng theo dõi công ty Hình 2 10 : Biểu đồ tuần tự chức năng theo dõi công ty Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 32 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 32 2 2 3 Thiết kế cơ sở dữ liệu 2 2 3 1 Mô tả cơ sở dữ liệu Cơ sở dữ liệu được thiết kế sao cho tối ưu nhất, thể hiện mối quan hệ giữa các bảng, tránh việc dư thừa dữ liệu Liên hệ qua thực tế, các bảng trong cơ sở dữ liệu cần phải lưu các đối tượng liên quan đến yêu cầu lưu trữ của đồ án Cơ sở dữ liệu của hệ thống sẽ gồm các bảng sau: - Users - Jobs - Company - Seeker - Category - Application - Tokens - Roles Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 33 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 33 Mối quan hệ giữa các bảng đư ợc thể hiện thông qua hình sau: Hình 2 9 : Cơ sở dữ liệu của hệ thống Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 34 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 34 2 2 3 2 Nội dung các bảng dữ liệu Bảng 2 10 : Bảng Users (Người dùng) Tên cột Giải thích Kiểu dữ liệu Maxlength Ghi chú _ id Mã người dùng Char 255 Khóa chính email Đại chỉ email Char 255 password Mật khẩu Char 255 address Địa chỉ Char 5000 birthday Ngày sinh Datetime avatar Ảnh đại diện Char 255 phone Số điện thoại Char 11 roles Quyền người dùng Char 10 status Trạng thái Char 10 created Thời gian tạo Datetime updated Thời gian cập nhật Datetime Bảng 2 11 : Bảng Jobseeker ( Người tìm việc ) Tên cột Giải thích Kiểu dữ liệu Maxlength Ghi chú id Mã người tìm việc Char 255 Khóa chính userId Mã người dùng Char 255 Khóa ngoại saved_jobs Danh sách việc làm đã lưu Array applied_jobs Danh sách việc làm đã Array Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 35 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 35 ứng tuyển follow_compan y Danh sách công ty đã theo dõi Array skills Kỹ năng Char 5000 experience Kinh nghiệm Char 5000 education Bằng cấp Char 5000 title Ngành nghề Char 255 created Thời gian tạo Datetime updated Thời gian cập nhật Datetime Bảng 2 12 : Bảng Company (Nhà tuyển dụng ) Tên cột Giải thích Kiểu dữ liệu Maxlength Ghi chú id Mã nhà tuyển dụng Char 255 Khóa chính category_id Mã ngành nghề Char 255 Khóa ngoại userId Mã người dùng Char 255 Khóa ngoại available_jobs Số lượng việc làm Int numberFollow Số lượng theo dõi Int position Vị trí công ty Char 5000 name Tên công ty Char 255 created Thời gian tạo Datetime updated Thời gian cập nhật Datetime Bảng 2 13 : Bảng Job (Việc làm ) Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 36 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 36 Tên cột Giải thích Kiểu dữ liệu Maxlength Ghi chú id Mã việc làm Int 255 Khóa chính company_id Mã công ty Char 255 Khóa ngoại category_id Mã ngành nghề Char 255 benefit Quyền lợi được hưởng Char 5000 numberPerson Số lượng cần tuyển Int position Vị trí cần tuyển Char 5000 jobType Hình thức làm việc Char 255 status Trạng thái việc làm Char 255 title Tiêu đề công việc Char 5000 salary Lương Char 255 description Mô tả công việc Char 5000 dueDate Ngày hết hạn Datetime contactInformatio n Thông tin liên hệ Char 5000 requirement Yêu cầu công việc Char 5000 isApplied Danh sách các ứng viên đã ứng tuyển Array created Thời gian tạo Datetime updated Thời gian cập nhật Datetime Bảng 2 14 : Bảng Category ( danh sách các ngành nghề ) Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 37 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 37 Tên cột Giải thích Kiểu dữ liệu Maxlength Ghi chú id Mã ngành nghề Int 255 Khóa chính name Tên ngành nghề Char 5000 description M ô tả Char 5000 created Thời gian tạo Datetime updated Thời gian cập nhật Datetime Bảng 2 15 : Bảng Application ( Bảng thông tin ứng tuyển ) Tên cột Giải thích Kiểu dữ liệu Maxlength Ghi chú id Mã đơn ứng tuyển Int 255 Khóa chính seeker_id Mã người tìm việc Char 255 Khóa ngoại job_id Mã công việc Char 255 Khóa ngoại fullname Tên người tìm việc Char 255 Email Email Char 255 message Nội dung ứng tuyển Char 5000 created Thời gian tạo Datetime updated Thời gian cập nhật Datetime 2 3 Kết chương Qua chương này chúng ta đã nắm rõ được bài toán mà hệ thống phải giải quyết, thông qua các bước phân tích, cấu trúc hệ thống, các luồng xử lý trong hệ thống được biểu diễn rõ ràng và chi tiết Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 38 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 38 CHƯƠNG 3 TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 3 1 Triển khai hệ thống 3 1 1 Môi trường triển khai Hệ thống triển khai trên nền web, chạy được trên các trình duyệt có kết nối internet như Chrome, Firefox, Internet Explorer - Hệ điều hành: Được cấu hình trên hệ điều hành Linux - Phạm vi sử dụng: Có thê sử dụng trên tất cả trình duyệt - Sản phẩm được viết theo mô hình Client - Server - Ngôn ngữ lập trình: React js, Node js 3 1 2 Hệ quản trị cơ sở dữ liệu: MongoDB 3 1 2 1 Cài đặt Nodejs a Cài đặt Nodejs và Npm : Hình 3 1 : Cài đặt Nodejs và Npm b Kiểm tra cài đặt bằng lệnh : Hình 3 2 : Kiểm node version tra cài đặt bằng lệnh Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 39 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 39 3 1 2 2 Cài đặt hệ quản trị cơ sở dữ liệu Mongodb Hình 3 3 : Cài đặt hệ quản trị cơ sở dữ liệu Mongodb 3 2 Kết quả thực nghiệm 3 2 1 Giao diện người dùng Hình 3 4 : Giao diện trang đăng nhập Đây là giao diện trang đăng nhập Khi người tìm việc và nhà tuyển dụng đã đăng ký một tài khoản thì họ có thể đăng nhập vào website Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 40 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 40 Hình 3 5 : Giao diện trang đăng ký người tìm việc Người tìm việc có thể đăng ký một tài khoản để có thể xem được những công việc và ứng tuyển những công việc mà họ muốn Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 41 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 41 Hình 3 6 : Giao diện trang đăng ký nhà tuyển dụng Nhà tuyển dụng có thể đăng ký một tài khoản để có thể đăng những công việc mà họ muốn tuyển và quản lý những công việc của họ Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 42 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 42 Hình 3 7 : Giao diện màn hình trang chủ Khi vừa mới truy cập vào website sẽ xuất hiện danh sách những công việc và danh sách những nhà tuyển dụng Hình 3 8 : Giao diện trang liên hệ Khi người tìm việc hay nhà tuyển dụng có yêu cầu gì thì họ sẽ gửi yêu cầu đó đến admin thông qua email Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 43 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 43 Hình 3 9 : Giao diện trang giới thiệu Giao diện trang giới thiệu về website Hình 3 10 : Giao diện trang nhà tuyển dụng Ngư ời tìm việc có thể xem và tìm kiếm thông tin của những nhà tuyển dụng Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 44 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 44 Hình 3 11 : Giao diện trang việc làm Người tìm việc có thể xem và tìm kiếm những công việc mà họ muốn ứng tuyển Họ có thể xem công việc theo ngành nghề và theo địa điểm tuyển dụng Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 45 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 45 Hình 3 12 : Giao diện trang thêm mới công việc Trong trang dashboard của nhà tuyển dụng, họ có thể thêm những công việc mà họ muốn tuyển Hình 3 13 : Giao diện trang thay đổi mật khẩu Trong trang dashboard của nhà tuyển dụng, họ có thay đổi mật khẩu Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 46 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 46 Hình 3 14 : Màn hình chi tiết nhà tuyển dụng Đây là giao diện trang chi tiết của một nhà tuyển dụng Hình 3 15 : Màn hình chính trang dashboard người tìm việc Trang dashboard chính của người tìm việc Họ có thể thay đổi thông tin cá nhân Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 47 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 47 Hình 3 16 : Màn hình trang danh sách các công ty theo dõi Đây là danh sách những công ty mà người tìm việc đã theo dõi Hình 3 17 : Màn hình các việc làm đã nộp Đây là danh sách những công việc mà người tìm việc đã ứng tuyển vào Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 48 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 48 Hình 3 18 : Màn hình chi tiết việc làm Đây là trang chi tiết việc làm của một nhà tuyển dụng Hình 3 19 : Màn hình chính dashboard công ty Trang màn hình dashboard của nhà tuyển dụng Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 49 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 49 Hình 3 20 : Màn hình trang quản lý việc làm của nhà tuyển dụng Giao diện trang quản lý danh sách những công việc đang đăng, việc hết hạn và những công việc đã được ứng tuyển Hình 3 21 : Màn hình gửi yêu cầu tìm việc thành công Thông báo khi gửi yêu cầu đến admin thành công Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 50 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 50 Hình 3 22 : Màn hình hiển thị danh sách việc làm đã lưu Danh sách những việc làm đã lưu của người tìm việc Hình 3 23 : Màn hình trang chủ admin Giao diện trang quản lý admin Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 51 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 51 Hình 3 24 : Màn hình danh sách những ngành nghề Hình 3 25 : Màn hình danh sách những đơn ứng tuyển Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 52 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 52 Hình 3 26 : Màn hình danh sách những việc làm Hình 3 26 : Màn hình danh sách những công ty và người tìm việc Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 53 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 53 Hình 3 27 : Màn hình tạo một ngành nghề mới Hình 3 28 : Màn hình tạo một công việc mới Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 54 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 54 3 3 Nhận xét và đánh giá kết quả Bảng 3 1 : Đánh giá kết quả Chức năng Tình trạng Mô tả Đăng ký tài khoản và đăng nhập, đăng xuất Hoàn thành Gửi yêu cầu cho admin Hoàn thành Xem danh sách việc làm Hoàn thành Xem danh sách công ty Hoàn thành Gửi email cho nhà tuyển dụng Hoàn thành Gửi email cho user yêu cầu Hoàn thành Quản lý thông tin cá nhân và cập nhật thông tin Hoàn thành Quản lý việc làm của nhà tuyển dụng Hoàn thành Tìm kiếm công ty Hoàn thành Tìm kiếm việc làm Hoàn thành Theo dõi một công ty Hoàn thành Lưu một công việc Hoàn thành Ứng tuyển một công việc Hoàn thành Quản trị hệ thống quản lý người dùng và việc làm Hoàn thành 3 4 Kết chương Chương này đã cung cấp được các bước triển khai thực tế của đồ án, các hình ảnh về sản phẩm lúc hoạt động thực tế Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 55 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 55 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 1 Kết quả đạt được Trong thời gian tìm hiểu, nghiên cứu cơ sở lý thuyết và triển khai ứng dụng công nghệ, đồ án đã đạt được những kết quả sau: a Về mặt lý thuyết, đồ án đã đạt được : - Hiểu được lý thuyết cơ bản của lập trình web - Các bước triển khai hệ thống để hoàn thiện một sản phầm trên thực tế - Tìm hiểu nhu cầu của người dùng về tìm kiếm việc làm - Phân tích thiết kế hệ thống, các luồng hoạt động cũng như các ca hoạt động cho một ứng dụng web nhiều chức năng - Cách ứng dụng framework vào một dự án b Về mặt thực tiễn ứng dụng, đồ án đã đạt được: Cung cấ p được một ứng dụng thực tế giúp cho các nhà tuyển dụng và người tìm việc có thể kết nối với nhau Hệ thống đã hoàn thiện các chức năng như: - Đăng ký tài khoản và đăng nhập, đăng xuất - Gửi yêu cầu cho admin - Xem danh sách việc làm - Xem danh sách công ty - Gửi email cho nhà tuyển dụng - Gửi email cho user yêu cầu - Quản lý thông tin cá nhân và cập nhật thông tin cá nhân - Quản lý việc làm của nhà tuyển dụng - Tìm kiếm công ty - Tìm kiếm việc làm - Theo dõi một công ty - Lưu một công việc - Ứng tuyển một công việc - Quản trị hệ thống quản người dùng và việc làm Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 56 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 56 2 Những điều chưa đạt được - Giao diện người dùng còn khá đơn giản - Chưa ứng dụng AI vào việc tìm kiếm những việc làm thích hợp - Nhà tuyển dụng chưa tự tìm kiếm được những ứng viên mà họ muốn - Chức năng còn chưa bảo mật 3 Hướng nghiên cứu và phát triển Một số số hướng nghiên cứu và phát triển của đề tài như sau: - Cải thiện giao diện người dùng - Hoàn thiện các tính năng đang có của hệ thống - Tăng tính bảo mật hơn - Bổ sung chức năng cho nhà tuyển dụng có thể tự tìm kiếm ứng viên - Mở rộng phạm vi của website Xây dựng website Tìm kiếm Việc làm tại Đà Nẵng 57 SVTH : Ngô Ngọc Khánh GVHD : TS Võ Đưc Hoàng 57 TÀI LIỆU THAM KHẢO [1] Trang chủ NodeJS : https://nodejs org/en/ [2] Trang chủ ReactJS : https://reactjs org/ [3] Trang Stackoverflow: http://stackoverflow com/ [4] Trang chia sẻ kiến thức công nghệ Viblo : https:// viblo asia / [5] Trang chủ Redux: https:// redux js org [6] Kết hợp giữa ReactJs và NodeJS: https:// techtalk vn/cach - ket - hop - nodejs - o - back - end - voi - reactjs - tren - front - end html [7] Trang chủ Mongooes : https:// /mongoosejs com
Tổng quan về đề tài
Ngày nay với sự phát triển mạnh mẽ của nền kinh tế hội nhập đã tạo ra cho chúng ta rất nhiều những cơ hội việc làm khác nhau Tuy vậy những năm gần đây nguồn lực lao động ở nước ta rất dồi dào và rất rẻ song tỷ lệ thất nghiệp vẫn còn khá cao Vấn để đặt ra là làm thể nào để kết nối người lao động đến được với những cơ hội việc làm đó Hiện nay đã và đang tồn tại rất nhiều những hình thức giúp cho người lao động và nhà tuyển dụng tìm được đến với nhau Tiêu biểu của những hình thức này là: các trung tâm tư vấn và giới thiệu việc làm, hội chợ việc làm, các hình thức quảng cáo, tờ rơi, báo chí.Tuy nhiên những hình thức này ra đời theo chiều hướng tự phát, thiếu tổ chức nên đã mang lại nhiều bất cập, đôi khi là rào cản giữa nhà tuyển dụng và các ứng viên tìm việc vì một số lý do sau đây:
+ Mất thời gian chờ đợi vì phải thông qua khâu trung gian là nhà môi giới
+ Ứng viên và nhà tuyển dụng phải mất kinh phí
+ Sự thiếu tin tưởng ở các hình thức này.
Mục đích và tóm tắt sơ lược về đề tài
Website là cầu nối trung gian giữa người lao động và nhà tuyển dụng, qua đó giúp cho hai bên vừa giảm được chi phí đi lại, vừa giúp đạt hiệu quả trong quá trình tìm kiếm việc làm cũng như tìm kiếm ứng viên phù hợp với yêu cầu của công ty
2.2 Phân tích khó khăn của hiện trạng
Mặc dù đây là một nội dung không mới và cũng đã có rất nhiều website hỗ trợ các dịch vụ này Nhưng cách giải quyết vấn đề thì lại hoàn toàn mới bởi hệ thống được xây dựng trên nền tảng hỗ trợ đa người dùng với phương thức hoạt động của một mô hình cổng thông tin điện tử Đây chính là điều mà nhiều website với phương thức hoạt động truyền thống chưa làm được
2.3 Kịch bản của đề tài
Website là cầu nối trung gian giữa người lao động và nhà tuyển dụng Nhà tuyển dụng có thể đăng những công việc mà họ muốn tuyển dụng và người tìm việc sẽ
Môi trường, công cụ
Môi trường triển khai: Website
Hệ điều hành: Được cấu hình trên hệ điều hành Linux
Phạm vi sử dụng: Có thể sử dụng trên tất cả trình duyệt
Sản phẩm được viết theo mô hình Client-Server
Ngôn ngữ lập trình: React.js, Node.js
Hệ quản trị cơ sở dữ liệu: MongoDB
Bố cục của đồ án
Đồ án bao gồm các nội dung sau:
- Chương 1: Cơ sở lý thuyết
1.1 Tổng quan về các ngôn ngữ phía Server
1.2 Tổng quan về các ngôn ngữ phía Client
- Chương 2: Phân tích thiết kế hệ thống
- Chương 3: Triển khai và đánh gia kết quả
3.3 Nhận xét và đánh giá kết quả
- Kết luận và hướng phát triển
Những điều chưa đạt được
Hướng nghiên cứu và phát triển
CƠ SỞ LÝ THUYẾT
Tổng quan về các ngôn ngữ phía Client
- Chương 2: Phân tích thiết kế hệ thống
Kết chương
- Chương 3: Triển khai và đánh gia kết quả
3.3 Nhận xét và đánh giá kết quả
- Kết luận và hướng phát triển
Những điều chưa đạt được
Hướng nghiên cứu và phát triển
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 1.1 Tổng quan về các ngôn ngữ phía Server
Node.js là một JavaScript runtime được build dựa trên Chrome’s V8 JavaScript engine Node.js sử dụng mô hình event-driven, non-blocking I/O khiến nó trở nên nhẹ và hiệu quả
V8 engine là một JavaScript engine mã nguồn mở chạy trên các trình duyệt Chrome, Opera và Vivaldi Nó được thiết kế tập trung vào hiệu năng và chịu trách nhiệm cho việc dịch mã JavaScript sang mã máy để máy tính có thể hiểu và chạy được Nhưng bạn cũng nên tránh nhầm lẫn rằng Node chạy trên trình duyệt Cha đẻ của Node dựa trên V8 engine, cải tiến một số tính năng chẳng hạn file system API, thư viện HTTP và một số phương thức liên quan đến hệ điều hành Điều đó có nghĩa là Node.js là một chương trình giúp ta có thể chạy code JavaScript trên máy tính, nói cách khác nó là một JavaScript runtime
1.1.1.2 Mô hình hoạt động của Node.js Để cho dễ hiểu, khi bạn connect đến một server truyền thống, chẳng hạn Apache, nó sẽ sinh ra một thread mới để xử lý request Ở các ngôn ngữ như PHP hay Ruby, mỗi một phép toán I/O (ví dụ truy cập database) sẽ chặn execution trên code của bạn cho đến khi phép toán đó hoàn thành Nói cách khác, server sẽ đợi cho đến khi database được duyệt xong mới xử lý kết quả Nếu có những request mới, server lại tiếp tục sinh những thread mới để xử lý chúng Điều này dẫn đến nguy cơ kém hiệu quả, khi một lượng lớn thread được tạo ra sẽ khiến cho hệ thống trở nên chậm chạp, tệ hơn nữa có thể khiến site bị sập Cách thông thường để giải quyết tình trạng này là bổ sung thêm server
Node.js, mặt khác là single-threaded Nó cũng thuộc dạng event-driven hay nói cách khác tất cả những gì xảy ra trong Node là để phản hồi lại với một sự kiện Ví dụ, khi một request được gửi đến, server bắt đầu xử lý nó Nếu nó gặp phải phép toán I/O, thay vì đợi cho phép toán này kết thúc, nó sẽ đăng ký một callback trước khi tiếp tục xử lý event tiếp theo Khi phép toán I/O kết thúc, server sẽ chạy callback và tiếp tục giúp server có thể xử lý một lượng lớn kết nối đến đồng thời Quan điểm truyền thống để scale một Node app là clone nó và để instance được clone chia sẻ công việc Node.js thậm chí có module buit-in sẵn để giúp bạn thực hiện chiến lược clone này trên một server duy nhất
1.1.1.3 Hình dưới đây mô tả cách hoạt động của Node
Hình 1.1: Mô tả cách hoạt động của Node 1.1.1.4 Thế mạnh của Node.js?
Bên cạnh tốc độ và khả năng mở rộng, việc dùng JavaScript trên server và trình duyệt giúp cho bạn đỡ phải chuyển đổi giữa các ngôn ngữ Bạn có thể làm bất cứ thứ gì với duy nhất một ngôn ngữ
Một điểm mạnh nữa của Node đó là nó cực thích hợp với JSON JSON được coi là lý tưởng khi được sử dụng bởi một chương trình JavaScript Khi làm việc với Node, dữ liệu có thể chuyển qua các tầng layer mà không cần phải reformat
Cuối cùng, JavaScript thực sự quá phổ biến, điều này giúp cho việc chuyển sang phát triển Node app dễ dàng hơn so với những ngôn ngữ phía server khác
Express js là một Framework nhỏ, nhưng linh hoạt được xây dựng trên nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile
Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ nên các bạn không phải lo lắng khi làm việc với Framework này
Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn Chứ không làm giảm tốc độ của NodeJS
Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng ExpressJS như một core function, chẳng hạn: SailsJS, MEAN,
Hình 1.2: Cấu trúc của ExpressJS
1.1.3 Tiêu chuẩn JWT (JSON Web Token)
1.1.3.1 JSON Web Token là gì?
JSON Web Mã (JWT) là một chuẩn mở (RFC 7519) định nghĩa một cách nhỏ gọn và khép kín để truyền một cách an toàn thông tin giữa các bên dưới dạng đối tượng JSON Thông tin này có thể được xác minh và đáng tin cậy vì nó có chứa chữ ký số JWTs có thể được ký bằng một thuật toán bí mật (với thuật toán HMAC) hoặc một public / private key sử dụng mã hoá RSA
Một ví dụ về JWT Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEzODY4OTkxM zEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3 YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU 5IiwiaWF0IjoxMzg2ODk4OTUxfQ.uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_I WuA5MaMo
Thoạt trông phức tạp là thế nhưng nếu hiểu, cấu trúc của một JWT chỉ đơn giản như sau:
..
Nói một cách khác, JWT là sự kết hợp (bởi dấu ) một Object Header dưới định dạng JSON được encode base64, một payload object dưới định dạng JSOn được encode base64 và một Signature cho URI cũng được mã hóa base64 nốt
1.1.3.2 Giải thích thêm về 3 thành phần của JWT
Header bao gồm hai phần chính: loại token (mặc định là JWT - Thông tin này cho biết đây là một Token JWT) và thuật toán đã dùng để mã hóa (HMAC SHA256 - HS256 hoặc RSA)
Payload chứa các claims Claims là một các biểu thức về một thực thể (chẳng hạn user) và một số metadata phụ trợ Có 3 loại claims thường gặp trong Payload: reserved, public và private claims
Reserved claims Đây là một số metadata được định nghĩa trước, trong đó một số metadata là bắt buộc, số còn lại nên tuân theo để JWT hợp lệ và đầy đủ thông tin: iss (issuer), iat (issued-at time) exp (expiration time), sub (subject), aud (audience), jti (Unique Identifier cho JWT, Can be used to prevent the JWT from being replayed This is helpful for a one time use token.)
Claims được cộng đồng công nhận và sử dụng rộng rãi
Claims tự định nghĩa (không được trùng với Reserved Claims và Public Claims), được tạo ra để chia sẻ thông tin giữa 2 parties đã thỏa thuận và thống nhất trước đó
Chữ ký Signature trong JWT là một chuỗi được mã hóa bởi header, payload cùng với một chuỗi bí mật theo nguyên tắc sau:
HMACSHA256 ( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret
Do bản thân Signature đã bao gồm cả header và payload nên Signature có thể dùng để kiểm tra tính toàn vẹn của dữ liệu khi truyền tải
1.1.4 Hệ quản trị cơ sở dữ liệu MongoDB
TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
Kết chương
- Kết luận và hướng phát triển
Những điều chưa đạt được
Hướng nghiên cứu và phát triển
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 1.1 Tổng quan về các ngôn ngữ phía Server
Node.js là một JavaScript runtime được build dựa trên Chrome’s V8 JavaScript engine Node.js sử dụng mô hình event-driven, non-blocking I/O khiến nó trở nên nhẹ và hiệu quả
V8 engine là một JavaScript engine mã nguồn mở chạy trên các trình duyệt Chrome, Opera và Vivaldi Nó được thiết kế tập trung vào hiệu năng và chịu trách nhiệm cho việc dịch mã JavaScript sang mã máy để máy tính có thể hiểu và chạy được Nhưng bạn cũng nên tránh nhầm lẫn rằng Node chạy trên trình duyệt Cha đẻ của Node dựa trên V8 engine, cải tiến một số tính năng chẳng hạn file system API, thư viện HTTP và một số phương thức liên quan đến hệ điều hành Điều đó có nghĩa là Node.js là một chương trình giúp ta có thể chạy code JavaScript trên máy tính, nói cách khác nó là một JavaScript runtime
1.1.1.2 Mô hình hoạt động của Node.js Để cho dễ hiểu, khi bạn connect đến một server truyền thống, chẳng hạn Apache, nó sẽ sinh ra một thread mới để xử lý request Ở các ngôn ngữ như PHP hay Ruby, mỗi một phép toán I/O (ví dụ truy cập database) sẽ chặn execution trên code của bạn cho đến khi phép toán đó hoàn thành Nói cách khác, server sẽ đợi cho đến khi database được duyệt xong mới xử lý kết quả Nếu có những request mới, server lại tiếp tục sinh những thread mới để xử lý chúng Điều này dẫn đến nguy cơ kém hiệu quả, khi một lượng lớn thread được tạo ra sẽ khiến cho hệ thống trở nên chậm chạp, tệ hơn nữa có thể khiến site bị sập Cách thông thường để giải quyết tình trạng này là bổ sung thêm server
Node.js, mặt khác là single-threaded Nó cũng thuộc dạng event-driven hay nói cách khác tất cả những gì xảy ra trong Node là để phản hồi lại với một sự kiện Ví dụ, khi một request được gửi đến, server bắt đầu xử lý nó Nếu nó gặp phải phép toán I/O, thay vì đợi cho phép toán này kết thúc, nó sẽ đăng ký một callback trước khi tiếp tục xử lý event tiếp theo Khi phép toán I/O kết thúc, server sẽ chạy callback và tiếp tục giúp server có thể xử lý một lượng lớn kết nối đến đồng thời Quan điểm truyền thống để scale một Node app là clone nó và để instance được clone chia sẻ công việc Node.js thậm chí có module buit-in sẵn để giúp bạn thực hiện chiến lược clone này trên một server duy nhất
1.1.1.3 Hình dưới đây mô tả cách hoạt động của Node
Hình 1.1: Mô tả cách hoạt động của Node 1.1.1.4 Thế mạnh của Node.js?
Bên cạnh tốc độ và khả năng mở rộng, việc dùng JavaScript trên server và trình duyệt giúp cho bạn đỡ phải chuyển đổi giữa các ngôn ngữ Bạn có thể làm bất cứ thứ gì với duy nhất một ngôn ngữ
Một điểm mạnh nữa của Node đó là nó cực thích hợp với JSON JSON được coi là lý tưởng khi được sử dụng bởi một chương trình JavaScript Khi làm việc với Node, dữ liệu có thể chuyển qua các tầng layer mà không cần phải reformat
Cuối cùng, JavaScript thực sự quá phổ biến, điều này giúp cho việc chuyển sang phát triển Node app dễ dàng hơn so với những ngôn ngữ phía server khác
Express js là một Framework nhỏ, nhưng linh hoạt được xây dựng trên nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile
Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ nên các bạn không phải lo lắng khi làm việc với Framework này
Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn Chứ không làm giảm tốc độ của NodeJS
Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng ExpressJS như một core function, chẳng hạn: SailsJS, MEAN,
Hình 1.2: Cấu trúc của ExpressJS
1.1.3 Tiêu chuẩn JWT (JSON Web Token)
1.1.3.1 JSON Web Token là gì?
JSON Web Mã (JWT) là một chuẩn mở (RFC 7519) định nghĩa một cách nhỏ gọn và khép kín để truyền một cách an toàn thông tin giữa các bên dưới dạng đối tượng JSON Thông tin này có thể được xác minh và đáng tin cậy vì nó có chứa chữ ký số JWTs có thể được ký bằng một thuật toán bí mật (với thuật toán HMAC) hoặc một public / private key sử dụng mã hoá RSA
Một ví dụ về JWT Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEzODY4OTkxM zEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3 YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU 5IiwiaWF0IjoxMzg2ODk4OTUxfQ.uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_I WuA5MaMo
Thoạt trông phức tạp là thế nhưng nếu hiểu, cấu trúc của một JWT chỉ đơn giản như sau:
..
Nói một cách khác, JWT là sự kết hợp (bởi dấu ) một Object Header dưới định dạng JSON được encode base64, một payload object dưới định dạng JSOn được encode base64 và một Signature cho URI cũng được mã hóa base64 nốt
1.1.3.2 Giải thích thêm về 3 thành phần của JWT
Header bao gồm hai phần chính: loại token (mặc định là JWT - Thông tin này cho biết đây là một Token JWT) và thuật toán đã dùng để mã hóa (HMAC SHA256 - HS256 hoặc RSA)
Payload chứa các claims Claims là một các biểu thức về một thực thể (chẳng hạn user) và một số metadata phụ trợ Có 3 loại claims thường gặp trong Payload: reserved, public và private claims
Reserved claims Đây là một số metadata được định nghĩa trước, trong đó một số metadata là bắt buộc, số còn lại nên tuân theo để JWT hợp lệ và đầy đủ thông tin: iss (issuer), iat (issued-at time) exp (expiration time), sub (subject), aud (audience), jti (Unique Identifier cho JWT, Can be used to prevent the JWT from being replayed This is helpful for a one time use token.)
Claims được cộng đồng công nhận và sử dụng rộng rãi
Claims tự định nghĩa (không được trùng với Reserved Claims và Public Claims), được tạo ra để chia sẻ thông tin giữa 2 parties đã thỏa thuận và thống nhất trước đó
Chữ ký Signature trong JWT là một chuỗi được mã hóa bởi header, payload cùng với một chuỗi bí mật theo nguyên tắc sau:
HMACSHA256 ( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret
Do bản thân Signature đã bao gồm cả header và payload nên Signature có thể dùng để kiểm tra tính toàn vẹn của dữ liệu khi truyền tải
1.1.4 Hệ quản trị cơ sở dữ liệu MongoDB
Kết quả đạt được
Trong thời gian tìm hiểu, nghiên cứu cơ sở lý thuyết và triển khai ứng dụng công nghệ, đồ án đã đạt được những kết quả sau: a Về mặt lý thuyết, đồ án đã đạt được:
- Hiểu được lý thuyết cơ bản của lập trình web
- Các bước triển khai hệ thống để hoàn thiện một sản phầm trên thực tế
- Tìm hiểu nhu cầu của người dùng về tìm kiếm việc làm
- Phân tích thiết kế hệ thống, các luồng hoạt động cũng như các ca hoạt động cho một ứng dụng web nhiều chức năng
- Cách ứng dụng framework vào một dự án b Về mặt thực tiễn ứng dụng, đồ án đã đạt được:
Cung cấp được một ứng dụng thực tế giúp cho các nhà tuyển dụng và người tìm việc có thể kết nối với nhau
Hệ thống đã hoàn thiện các chức năng như:
- Đăng ký tài khoản và đăng nhập, đăng xuất
- Gửi yêu cầu cho admin
- Xem danh sách việc làm
- Xem danh sách công ty
- Gửi email cho nhà tuyển dụng
- Gửi email cho user yêu cầu
- Quản lý thông tin cá nhân và cập nhật thông tin cá nhân
- Quản lý việc làm của nhà tuyển dụng
- Theo dõi một công ty
- Ứng tuyển một công việc
- Quản trị hệ thống quản người dùng và việc làm.
Những điều chưa đạt được
- Giao diện người dùng còn khá đơn giản
- Chưa ứng dụng AI vào việc tìm kiếm những việc làm thích hợp
- Nhà tuyển dụng chưa tự tìm kiếm được những ứng viên mà họ muốn
- Chức năng còn chưa bảo mật.
Hướng nghiên cứu và phát triển
Một số số hướng nghiên cứu và phát triển của đề tài như sau:
- Cải thiện giao diện người dùng
- Hoàn thiện các tính năng đang có của hệ thống
- Tăng tính bảo mật hơn
- Bổ sung chức năng cho nhà tuyển dụng có thể tự tìm kiếm ứng viên
- Mở rộng phạm vi của website.