1 TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO THỰC TẬP LẬP TRÌNH BACK END NODEJS Công ty thực tập Công ty cổ phần ITR VN Người phụ trách Hồ Khắc Minh Thực tập sinh Phan Tiến Lào[.]
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Trang 2LỜI MỞ ĐẦU
Lập trình back-end là một trong những lựa chọn nghề nghiệp xu hướng, phổ biến với cácbạn học khoa học máy tính hoặc kỹ thuật phần mềm, công nghệ thông tin nói chung Lập trìnhviên back-end được coi là một vị trí việc làm nhiều triển vọng do nhu cầu tuyển dụng được dựđoán sẽ tiếp tục tăng lên trong tương lai
Ngày nay, chỉ tính riêng hướng nghề nghiệp trở thành lập trình viên thì bạn cũng đã córất nhiều lựa chọn, chẳng hạn như phân theo định hướng sản phẩm thì có lập trình viên web, lậptrình viên game, lập trình viên phần mềm, ứng dụng; hoặc theo ngôn ngữ lập trình thì có lậptrình Java, PHP, Lập trình back-end là một mảng khá rộng và nhiều triển vọng nhưng songsong với đó cũng sẽ có những áp lực nhất định, đòi hỏi nhiều ở sự sáng tạo
Lập trình phần mềm là xu hướng nên có thể có nhiều cơ hội tuyển dụng và thăng tiếnhơn Vì lý do này, em quyết định chọn lập trình back-end làm định hướng cho việc học tập củamình
Sau ba năm học tập trên trường, do mong muốn có thêm kinh nghiệm thực tế, cũng nhưmuốn được tham gia làm back-end trong một môi trường chuyên nghiệp, em có dự định là sẽthực tập trong kì này Vì vậy, em quyết định chọn ITR VN - một môi trường lý tưởng, hiện đại,chuyên nghiệp - là nơi sẽ giúp em thực hiện được dự định này
Trang 3Đặc biệt cảm ơn anh Hồ Khắc Minh đã training Back-end, hướng dẫn, giúp đỡ cho chúng
em tận tình cả những khó khăn trong công việc, đến những khó khăn việc làm quen với môi
trường mới; cảm ơn anh Hoàng Khang, đã support anh Minh, hỗ trợ giải đáp nhiều câu hỏi của
chúng em khi anh Minh đang rất bận để có thể làm ra một sản phẩm trong thời gian qua
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điềukiện em làm bài báo cáo này
<Phan Tiến Lào>
<TpHCM, 1/10/2022>
Trang 5NHẬN XÉT CỦA KHOA
Trang 6MỤC LỤC
Chương 1: Giới thiệu công ty thực tập 6
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 8
2.1 Các công cụ làm việc và structure dự án của công ty 8 2.2 Tìm hiểu ngôn ngữ javascript 9
1 Giới thiệu về các project 17
Chương 1: Giới thiệu công ty thực tập
1 Giới thiệu công ty ITR VN
ITR là người bạn đồng hành của các startup, công ty và nhà sản xuất trong hành trìnhbiến những ý tưởng sáng tạo thành hiện thực
Trang 7Xây dựng một sản phẩm sáng tạo có thể là một thách thức vì nó liên quan đến mộtloạt các quy trình phát triển và quản lý Được hỗ trợ với nhiều năm kinh nghiệmtrong ngành công nghiệp ICT, ITR biết cách giúp khách hàng thúc đẩy các quy trìnhnày để cung cấp sản phẩm của họ cho thế giới ở mức chất lượng cao.
2 Sản phẩm của công ty
ITR VN là công ty đồng hành với những startup đến từ Silicon Valley Với độingũ các lập trình viên có tính cạnh tranh toàn cầu từ nhiều mảng khác nhau nhưSoftware, Filmware, Hardware, AI, … Công ty luôn xây dựng các dự án lớn và quantrọng về mảng sức khỏe (MedTech and Digital Health) bao gồm cả phát triển phầncứng, phát triển hệ thống nhúng, ứng dụng di động, giao diện người dùng và AI
Nhờ những thành tựu từ những sản phẩm thành công, ITR VN liên kết đượcthương hiệu lớn trên toàn thế giới về chăm sóc sức khỏe như Biotricity Ngoài racông ty cũng sở hữu các sản phẩm dự án thành công khác nhau được sử dụng rôngrãi trên thế giới
Trang 8Chương 2: Nội dung thực tập
Đợt thực tập nhằm mục đích giúp sinh viên thực tập được đào tạo toàn diện lập trìnhback-end, đồng thời rèn luyện những kỹ năng mềm như làm việc nhóm, thuyết trình, giao tiếp.Tại công ty, sinh viên có cơ hội được học tập, khám phá và làm việc trong một môi trường pháttriển phần mềm chuyên nghiệp
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian : 1 ngày
Nội dung : Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và phát triên(như đã nhắc đến ở trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức củacông ty
Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công tynhư thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng slack trong côngviệc…
Được giới thiệu bản thân trước nhiều phòng ban khác nhau trong công ty
Kết quả : Hiểu thêm về công ty ITR VN, quá trình thành lập và phát triển Có thêm các
kỹ năng về việc sử dụng email trong công việc, làm việc có kế hoạch, có kỷ luật, có tráchnhiệm hơn
2 Nghiên cứu kỹ thuật
1
2
2.1 Các công cụ làm việc và structure dự án của công ty
Thời gian : 4 ngày
Nội dung : Tìm hiểu về các công cụ sẽ được sử dụng trong quá trình làm việc.
Trong thời gian này, mentor đã hướng dẫn thực tập sinh tìm hiểu về các công cụ
sẽ giúp ích cho trong công việc sau này
Được mentor giới thiệu tới quy trình và cách sắp xếp structure của dự án ở công
ty, mentor giải thích rõ ràng từng thành phần và cách hoạt dộng của chúng
Trang 9Thực hiện : Thực hành sử dụng các phần mềm đã nêu trên và code bài toán mà
mentor đưa ra với structure được mentor giới thiệu
Kết quả : Lập trình sử dụng các công cụ miễn phí, làm quen và áp dụng structure của
công ty
2.2 Tìm hiểu ngôn ngữ javascript
Thời gian : 5 ngày
Nội dung : Được training về ngôn ngữ javascript từ cơ bản đến nâng cao.
- Các kiểu dữ liệu trong javascript
Các kiến thức cơ bản ủa javascript, dựa trên document của javascript mentor chỉdẫn các phần cốt lõi và quan trọng nhất của javascript
- Life Cycle :
Học luồng chạy của một file javascript cơ bản
Thực hiện :
- Tham gia đầy đủ các buổi training của công ty
- Làm các bài thực hành, kiểm tra về kiến thức đã học
Kết quả :
- Nắm được kiến thức cốt lõi của javascript
- Ngoài ra còn được biết thêm một số quy tắc trong việc viết code sao cho đúngchuẩn, dễ đọc, dễ hiểu
2.3 Event Loop
Thời gian : 1 tuần
Nội dung: Các kiến thức nâng cao của javascript.
- Asynchronous.
Năm được các khái niệm về Asynchronous và Synchronous, nắm được điểm mạn
và điểm yếu của từng cái và cách hoạt động của nó
Ngoài ra, trainer còn cung cấp cho thực tập sinh những ví dụ thực tế để thực tậpsinh có thể dễ dàng hình dung hơn
Trang 10Nắm rõ cách hoạt động của promise.
Thực hiện :
- Tham gia đầy đủ các buổi training
- Làm các bài tập thực hành
- Tìm kiếm tài liệu trên mạng để tìm hiểu thêm
- Viết file markdown để lưu lại những kiến thức cần nhớ
Kết quả :
- Hiểu được khái niệm Event Loop trong javascript
2.4 Timestamp
Thời gian : 1 tuần
Nội dung : Giới thiệu về cách áp dụng và cách hoạt động của timestamp và các thư
Thực hiện :
- Tham gia đầy đủ các buổi training
- Hoàn thiện bài tập mà anh mentor giao và trình bày trong buổi họp
- Viết file markdown để lưu lại những kiến thức cần nhớ
Kết quả:
- Tiếp thu được kinh nghiệm trong việc viết API là phải thận trọng, kĩ càng
Trang 112.5 Lodash
Thời gian : 1 tuần
Nội dung : Giới thiệu về thư viện Lodash và cách sử dụng để xử lí dữ liệu.
- Lodash:
Là một thư viện dùng để xử lí hầu hết các kiểu dữ liệu trong javascript, đặc biệt làmảng và object
- Giới thiệu về các hàm thông dụng của thư viện
Được mentor hướng dẫn và giới thiệu kỹ càng về các hàm của thư viện lodash.Hiểu được cách dùng lodash trong các trường hợp xử lí dữ liệu
Thực hiện :
- Xử lí dữ liệu trong database
- Làm bài tập xử lí mảng, object
- Tham gia đầy đủ các buổi training và các bài tập được giao
- Viết file markdown để lưu lại những kiến thức cần nhớ
Kết quả:
- Thông hiểu cấu trúc của dữ liệu, cách xử lí dữ liệu, cách trả về dữ liệu để phù hợp cho phíafront-end
2.6 Expressjs
Thời gian : 1 tuần
Nội dung : Giới thiệu về framework Expressjs và cách sử dụng để xây dựng API.
- Expressjs:
Là một khung ứng dụng web back-end để xây dựng các API RESTful với Node.js
- Hướng dẫn xây dựng cấu trúc một project back-end
Được mentor hướng dẫn sử dụng router để xây dựng cấu trúc file trong mộtproject back-end để dễ xây dựng và phát triển
- Giải thích các thành phần của API
- Hướng dẫn sử dụng Insomnia để test API
Thực hiện :
- Xử lí dữ liệu trong database
- Làm bài tập viết API
Trang 12- Tham gia đầy đủ các buổi training và các bài tập được giao.
- Viết file markdown để lưu lại những kiến thức cần nhớ
Kết quả:
- Tiếp thu được nhiều kinh nghiệm trong việc viết API
2.7 GraphQL
Thời gian : 1 tuần
Nội dung : Giới thiệu về GraphQL và cách sử dụng để load data.
- GraphQL:
GraphQL là ngôn ngữ thao tác và truy vấn dữ liệu nguồn mở cho API, cung cấpcho client 1 cách thức dễ dàng để request chính xác những gì họ cần, giúp việcphát triển API dễ dàng hơn theo thời gian
- Mô tả tổ chức của GraphQL
API GraphQL được tổ chức theo types và fields, truy cập toàn bộ dữ liệu của bạn
từ một endpoint duy nhất
Thực hiện :
- Tạo một server để sử dụng GraphQL
- Tham gia đầy đủ các buổi training và các bài tập được giao
- Viết file markdown để lưu lại những kiến thức cần nhớ
Kết quả:
- Học được cách sử dụng GraphQL
- Hiểu được cách tăng hiệu năng, tốc độ cho một server
2.8 MongoDB
Thời gian : 1 tuần
Nội dung : Giới thiệu về database NoSql MongoDB và thư viện mongoose.
- MongoDB:
MongoDB là một database hướng tài liệu (document), một dạng NoSQL database
Vì thế, MongoDB sẽ tránh cấu trúc table-based của relational database để thíchứng với các tài liệu như JSON có một schema rất linh hoạt
- Mongoose:
Trang 13Mongoose là một framework JavaScript được sử dụng trong ứng dụng Node.js vớidatabase là MongoDB.
- Giải thích về cấu trúc dữ liệu trong MongoDB
- Các câu lệnh query dữ liệu thường được sử dụng trong MongoDB
- Tạo đường dẫn với các document với nhau:
Mongoose hỗ trợ một phương thức để join-like là populate()
Thực hiện :
- Tạo một server để sử dụng MongoDB
- Tham gia đầy đủ các buổi training và các bài tập được giao
- Viết file markdown để lưu lại những kiến thức cần nhớ
Kết quả:
- Thông hiểu về các database NoSql và cách sử dụng
- Hiểu được bản chất của populate() trong Mongoose
2.9 Redis
Thời gian : 1 tuần
Nội dung : Giới thiệu về database Redis.
- Giải thích về cấu trúc dữ liệu trong Redis
- Các câu lệnh query dữ liệu thường được sử dụng trong Redis
- Giải thích các trường hợp sử dụng redis và điểm yếu của nó
Redis thường được sử dụng làm bộ nhớ đệm tại vì truy cập dữ liệu Redis rấtnhanh Nếu bị sập nguồn hoặc mất điện thì dữ liệu trong redis sẽ mất hết
Thực hiện :
- Tạo một server để sử dụng Redis
- Luyện tập các câu lệnh thông dụng trong redis
- Tham gia đầy đủ các buổi training và các bài tập được giao
- Viết file markdown để lưu lại những kiến thức cần nhớ
Trang 14- Luyện tập viết unit test cho các bài tập cũ được giao
- Tham gia đầy đủ các buổi training
- Viết file markdown để lưu lại những kiến thức cần nhớ
Kết quả:
- Việc viết test không phải chỉ dành cho tester mà đó cũng là nghĩa vụ của một dev Viết test
sẽ làm cho code của mình chính xác hơn
3 Thực hiện project
Sau khi được training và thực hành, thực tập sinh đã nắm được những kiến thực cơ bản
về các framework và database Mentor đã yêu cầu thực tập sinh làm một project nhỏ chomọi kiến thức được học và mỗi cuối tuần sẽ review project đó
Chi tiết đồ án sẽ được nói ở phần sau
4 Lịch làm việc
Tuần Công việc Người hướng dẫn
Mức độ hoàn thành
Nhận xét của người hướng dẫn
1
- Tìm hiểu về công ty, cách tổ chức của côngty
- Làm quen với các công cụ làm việc trong công ty
- Học cách trao đổi, làm việc qua slack
Anh Hồ Khắc
Trang 15- Tìm hiểu ngôn ngữ lập trình javascript
Trang 16Chương 3: Chi tiết về project
1 Giới thiệu về các project
Với mỗi kiến thức được học, anh mentor yêu cầu thực tập sinh phải làm một project nhỏ
đã áp dụng các kiến thức đó
MongoDB
Viết Schema cho các collection trong MongoDB
Viết các function sử dụng các query của mongoose: create, update, delete, populate, …
Tự viết function populate() bằng ngôn ngữ javascript
Trang 17Dựa vào những kiến thức đã học, viết schema cho một API theo đề bài tập đã cho
Kết quả:
Trang 18Project URL shortener sử dụng Expressjs, MongoDB, Redis
Màn hình đăng nhập:
Màn hình đăng ký:
Trang 19Màn hình chính:
Trang 201 Thực hiện
- Phan Tiến Lào
Và sự giúp đỡ tận tình của anh mentor ITR VN
2 Kế hoạch
- Hoàn thành việc tạo ra một short-link
- Hoàn thành các chức năng authenticaton
- Tạo session cho người đăng nhập
- Đếm số lần click
- Lưu dữ liệu vào database
Kết quả :
- Tất cả đã được thực hiện
Bài tập javascript: Có 12 đồng xu, trong đó có 1 xu giả nặng hơn hoặc nhẹ hơn xu bình
thường, viết code một cái cân để tìm ra đồng xu đó trong 3 lần cân
Kết quả:
Trang 211 là xu thật, 0 là xu giả nhẹ hơn, 2 là xu giả nặng hơn, trả về true là nặng hơn, false là nhẹ hơn
Viết test cho bài tập javascript
Kết quả:
Trang 22TÀI LIỆU THAM KHẢO
Trang 23TỔNG KẾT
Như vậy, chỉ trong vòng hai tháng ngắn ngủi, em đã kịp hoàn thành khoá training end NodeJs Do thời gian có hạn nên vẫn chưa học được nhiều như mong đợi Trong tương lai
back-em sẽ cố gắng để có thể trở thành một developer back-end NodeJS
Chân thành cảm ơn sự giúp đỡ của các anh chị nhóm mentor ITR VN Cảm ơn thầy côphụ trách đã giúp em hoàn thành bài báo cáo này