Chia sẻ tài liệu học tập một số môn IT Trường đại học Thủy Lợi (năm 2)

Mình là sinh viên năm cuối Khoa Công nghệ thông tin – Trường đại học Thủy Lợi. Con đường biến ước mơ trở thành lập trình viên của mình cũng trải qua khá nhiều niềm vui, trải nghiệm và những khó khăn.

Từ một sinh viên năm nhất ( 2.6 đến năm 3 là 3.63/4.0). Nên mình hy vọng với những chia sẻ và trải nghiệm kinh nghiệm học tập của mình có thể giúp các bạn học dễ dàng hơn với mọi môn học chuyên ngành IT.

Trong suốt quãng đường là sinh viên mình đã trải qua có những mốc thời gian mà không thể nào quên.  Trong đó là quá trình đi xin tài liệu và học hỏi kinh nghiệm của các anh chị khóa trên. Mà không biết nên xin ai nên mình hy vọng có thể chia sẻ và giúp đỡ được các bạn.

Vì thế, trong chủ đề blog này của mình, mình sẽ chia sẻ free cho các bạn các tài liệu: Bài giảng + Báo cáo + bài tập đã làm + code (exception) các môn học mình đã học từ năm 2 trở đi. Đặc biệt là kỹ năng tìm kiếm tự học đọc tài liệu ngoại ngữ, tìm kiếm google và phương pháp để giải quyết các bài toán lập trình.

Lưu ý: Một số tài liệu mình chia sẻ qua driver nên các bạn comment email bên dưới hoặc gửi yêu cầu xác nhận mình sẽ chia sẻ nhé. Mọi câu hỏi về môn học nào các bạn cứ comment xuống dưới mình sẽ giải đáp:

Bài viết đầu tiên này dành cho các bạn năm 2:

1. Ngôn ngữ lập trình:

+ Bài giảng thầy Thành: https://sites.google.com/site/cse280fall2016/

+ Tham khảo code bạn 57TH4: https://sites.google.com/a/wru.vn/tin-hoc-co-ban/c-co-ban

2. Ngôn ngữ lập trình nâng cao:

+ Bài giảng thầy Tuấn: https://sites.google.com/a/wru.vn/anhtuanly/teaching-courses/ltnc

+ Tham khảo code ôn luyện: https://sites.google.com/a/wru.vn/behuong_57th2_programlanguage/lap-trinh-c

3. Linux và phần mềm mã nguồn mở:

+ Bài giảng của thầy: http://cuongdo.info or http://txnam.net/

+ Bài tập đã làm nộp qua các buổi thực hành: https://drive.google.com/drive/u/0/folders/1Zc1nr6OFKnIY2rmeWarGsJa4tqgH_KMh?ogsrc=32

+ Ôn luyện thi: https://docs.google.com/a/wru.vn/viewer?a=v&pid=sites&srcid=d3J1LnZufHdlYnNpdGUtbGVhcm5lZHxneDo0Y2U2ZmUwNjViZGQ0ZjEz

4. Cấu trúc dữ liệu và giải thuật:

+ Bài giảng thầy Hiển: https://sites.google.com/site/nmhien/ctdl

+ Bài tập kiểm tra: Comment để được tư vấn.

5. Cơ sở dữ liệu:

+ Bài giảng cô Hiền: https://sites.google.com/site/tlucse484/

+ Bài tập lớn: https://sites.google.com/a/wru.vn/behuong_57th2_programlanguage/co_-so_

( Lượt tài liệu của năm 3 mình sẽ để trong blog tiếp theo khi mình có time rảnh nha. Các bạn sinh viên nhớ theo dõi blog của mình để update  mới nhất những chia sẻ và trải nghiệm của mình để thêm kiến thức trở thành lập trình viên siêu nhân nhé.).

Cảm ơn các bạn đã theo dõi và đọc bài viết của mình tới đây. ❤ ❤ :v

 

 

 

 

Advertisements

Learning refactoring (Một phần cấu trúc quan trọng trong TDD-PHPUnit)

Lý do:

Refactoring là viết lại source code một cách khoa học hơn mà vẫn giữ được tính đúng đắn và giá trị về chức năng của source code đó.

Định nghĩa:

Refactoring là thay đổi ở cấu trúc bên trong mà không làm thay đổi hành vi với bên ngoài của hệ thống.

Một số smell và kỹ thuật trong Refactoring:

1. Hàm, phương thức quá dài -> Tách phân chia hàm nhỏ lại.

2. Quá nhiều tham số trong 1 hàm -> Khai báo ít biến, sử dụng công thức tổng hợp.

3. Class quá lớn -> Chia nhỏ thành class con.

Công nghệ refactoring (gồm 6 rule):

1.1  Composing methods: Hạn chế các trùng lặp mở đường cho tương lai.

+ Extract method: Phân tích, xử lý hàm cho ngắn gọn theo từng tính năng nhỏ.

+ Inline method: Thay thế nội dung của phương thức thành các lời gọi tới chính nó.

+ Extract Variable: Tách các biến con trong lệnh gọi thành các biến khai báo bên ngoài ngắn gọn mà mô tả được ý nghĩa của  ó.

+ Inline temp: Gán biến thực sự khi cần thiết.

+ Replace temp with query: Tạo một phương thức toàn cục thay vì một biến toàn cục.

……

2.1 Moving Feature between Object: Cách di chuyển các chức năng một cách an toàn giữa các lớp.

+ Move method: Cùng một hàm thực hiện chức năng tương tự nhau ở trong các lớp -> Di chuyển sang một class duy nhất.

+ Move field: Tương tự move method.

…..

3.1 Organizing Data: Sắp xếp dữ liệu giúp gỡ rỗi trong khi di chuyển các tính năng giữa các đối tượng.

+ Self Encapsulate Field: Truy cập trực tiếp theo phương thức đóng gói dữ liệu.

….

4.2 Simplifying conditional Expressions: Để đơn giản hóa biểu thức có điều kiện.

….

5.1 Simplifying Method call: Làm cho phương thức gọi đơn giản và dễ hiểu hơn.

….

6.1 Dealing with Genneralisation: Xử lý tổng quát (tạo một abstract quản lý các đối tượng.

….

Tham khảo tiếp và chi tiết tại:

https://sourcemaking.com/refactoring/refactorings

https://viblo.asia/p/refactoring-techniques-composing-methods-part-1-6J3ZgDEElmB

Learning TDD-PHPUnint

TDD (Test Driven Development một phương thức làm việc, hay một quy trình viết mã hiện đại.

Lý do áp dụng TDD: Code refactor an toàn, it bug, code gọn gàng và năng suốt.

https://viblo.asia/p/9-loi-ich-cua-test-driven-development-znmMdyE6Gr69

Quy trình test tiến hành qua 4 bước: (Làm sao cho test thành công).

Bước 1: Thinking

Bước 2: Red

Bước 3: Green

Bước 4: Refactor.

Thực hành tại:

http://cyber-dojo.org/kata/edit/hkDpgmMb9e?avatar=deer

Hoặc cài đặt về máy.

Gợi ý thực hành bài tập (Roman number) hướng dẫn tdd hay tại:

Learning Design Patterns (2)

4. Strategy Design Pattern: Thực hiện hành vi của đối tượng -> trừu tượng hóa các đối tượng bằng cách đưa ra cài đặt ở những lớp khác.

Nhắc lại: Sự kế thừa các lớp trong php: – implement : Sử dụng đối với kế thừa interface. – extends: Sử dụng đối với kế thừa trong abstract .

  • Thực hiện: Tạo một interface -> Tao các class kế thừa từ interface-> Tao một class main theo cơ chế switch bắt sự kiện khi nào class kết thừa interface được gọi.? Trong class này tạo một phương thức nội dung gọi tới các phương thức ở trong interface.  ->Thực thi theo cơ chế: Cấp phát vùng nhớ cho class main và thực hiện.
  • Như vậy: Các lớp kế thừa interface đã thực hiện các chức năng của riêng nó, và bị quản lý bởi lớp main. Nên khi có sự thay đổi giá trị ở lớp nào, thì chỉ cần xử lý ở function ở lớp đó. Giúp việc xử lý thực thi thay đổi đơn giản hơn nhiều.

5. Observer Design Patterns: Duy trì một danh sách các phần phụ của nó và thông báo tới chúng một cách tự động khi có sự thay đổi của nó.

  • Triển khai: Gồm 2 đối tượng: Subject và Observer.

+) Subject: Giao diện cho đối tượng dữ liệu. Lưu trữ trạng thái mà đối tượng Observer quan tâm.

+) Observer: Khai báo phương thức chính là update(). Phương thức này có thể truy cập đối tượng Subject mà nó đăng ký. Phải có hàm constructor, khai báo đối tượng Subject mà nó theo dõi.

https://xuanhuu.wordpress.com/2014/10/11/co-ban-observer-pattern/

 

Learning Design Patterns (1)

Design pattern là gì?

 DP là mẫu thiết kế được sử dụng trong lập trình hướng đối tượng(OOP) đưa ra quy tắc tắc chuẩn, quy ước vấn đề chung trong thiết kế phần mềm.

Tính cần thiết sử dụng Design pattern:

+ Cung cấp cấu trúc ở dạng tổng quát => Tăng tốc độ phát triển phần mềm

+ Tính tái sử dụng và bảo trì => Dễ dàng nâng cấp và bảo trì về sau.

+ Tính quy tắc chuẩn => Mọi thành viên trong nhóm có thể hiểu code nhanh, trao đổi và xây dựng dự án hiệu quả.

Có 3 nhóm Design Parttern và các loại DP quan tâm:

– Creational Patterns: Singleton, Factory (Factory Method và Abtract Factory).

– Structural Patterns: Adapter.

– Behavioral Patterns:  Observer, Strategy.

Làm việc với các loại Design Pattern:

1. Factory Design Pattern.

https://viblo.asia/p/design-pattern-trong-php-phan-1-wpVYRPWLv4ng

  • Factory method: giao việc khởi tạo một đối tượng cụ thể cho lớp con.
  • Abstract factory: 1 siêu nhà máy dùng để tạo ra các nhà máy (factory) khác.

2. Singleton: là tạo ra một đối tượng tĩnh được khởi tạo một lần duy nhất. Sau đó, ta có thể tham chiếu tới đối tượng này từ mọi nơi trong chương trình.

– Một lớp chỉ chứa duy nhất một instance được cung cấp một cách toàn cầu từ sự truy cập từ bên ngoài. Một hàm tạo để ngăn chặn việc tạo một dối tượng thông qua từ khóa “new”.

Thực tiễn: Ví dụ một máy quản lý nhiều hệ thống. Với chung một chức năng, thì khi sử dụng singleton thì nó sẽ tới sử dụng chức nó của các máy là khác nhau.

3. Adapter:

– Cầu nối giữa hai interface hoạt động độc lập (không tương thích). => Khi có sự thay đổi API trong việc bảo trì code(là rất cần thiết) nó sẽ trở nên hiệu quả khắc phục được khó khăn nhanh chóng.

https://viblo.asia/p/adapter-pattern-n7prv3mOMKod

Đọc tiếp….

https://huongtlu.wordpress.com/2018/04/19/learning-design-patterns-2/

 

 

Learning Restfull API (1)

– Khái niệm:

+ REST là thiết kế các ứng dụng mạng phân tán sử dụng HTTP như là một giao thức tầng ứng dụng và nó là một mô hình kiến trúc thực sự cho web

+ Restfull api là một tiêu chuẩn dùng trong việc thiết kế các API cho ứng dụng web quản lý các resoure (CRUD).

– Ứng dụng: Restful APi xử lý, xác định và chuẩn hóa các tài nguyên thông qua giao thức HTTP.

Tính chất của Restful: Có 4 loại lệnh được sử dụng để truy xuất tới Restful API là:

+ GET sử dụng để lấy 1 đối tượng. POST để tạo đối tượng. PUT để chỉnh sửa, thay thế 1 đối tượng. DELETE được dùng để xóa bỏ đối tượng.

Hướng dẫn: Tạo môi trường làm việc với Restful API (ở đây là Laravel) -> Làm việc với file api.php- > Test Restful (với phần mềm POSTMAN) chạy test đường dẫn như trên trình duyệt-> Thực hiện -> Kết quả.

 

( Tham khảo thêm bên dưới):

https://viblo.asia/p/lam-nhu-the-nao-de-tao-mot-restful-api-bang-laravel-gGJ59X3DlX2

  • Làm việc trên môi trường docker-composer đã học được từ trước.

+ Nhắc lại: Tạo một folder tên là laradoc (them nội dung vào folder dựa trên hướng dẫn trang chủ). Sau đó tạo một forder tên là public  folder mặc đinh của docker là tên folder chứa nội dung laravel mình cần làm việc.

* Thực hiện:

B1: Tạo một database tên tùy chỉnh

B2: Tạo một Model

B3: Tạo một controller

B4: Tạo và xử lý trong file router/api.php

B5: Chạy trên trình duyệt : localhost/api/tenroute.

 

Skill Learning Vue.js

– Tại sao lại nên dùng Vuejs?

=> Tham khảo tại: https://allaravel.com/tutorials/vuejs-framework/tai-sao-dung-vue-js/

Nói ngắn gọn:

+ Vuejs là tích hợp của những tính năng tốt nhất của những framework phía giao diện người dùng hiện đại.

+ Vuejs xây dựng dựa trên các component giúp module hóa trong việc lập trình HTML, Javascript, CSS, tạo ra các khối giao diện người dùng có thể tái sử dụng. Component vi diệu hơn các đối tượng ở chỗ nó có thể được sử dụng lại trong các template như là một phần tử HTML.

+ Chỉ thị lệnh vủa vuejs được kế thừa theo lối của framework hiện đại như Laravel,..

+ Kiến trúc của vuejs được bố trí theo các file riêng, tạo nên tính hiện đại của framework. Vuejs học tập, kế thừa, triển khai đồng thời còn phát triển xa hơn các framework đàn anh chị trước đó.

– Vuejs là gì?  => Vuejs là một framework hữu dụng cho việc xây dựng phía giao diện người dùng. Nó là tích hợp hiện đại giữa NodeJs và ReactJS (công nghệ mới nổi bật hiện nay).

Làm sao để làm việc được với môi trường của VueJs?

1. Thêm thư viên vuejs: 

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

2. Học hướng dẫn làm việc với Vuejs: 

Trên trang chủ: https://vuejs.org/

Trên youtube: https://www.youtube.com/watch?v=Y05uRiksXXI&list=PL3VM-unCzF8iRyPotjFsgy7EfuCITvr_3

Group thảo luận (fb): https://www.facebook.com/groups/vuejsvietnam/about/

Học trên github: https://github.com/vuejs/awesome-vue#youtube-channels

Học chi tiết về Vuejs: https://allaravel.com/category/tutorials/vuejs-framework/

– Trải nghiệm kiến thức học vuejs ra sao?

+ Học vuejs thông quan  việc thực hành lập trình một biểu đồ số giải một bài toán game kỳ thú:

Mô tả: Game of life hay còn gọi là Life (Cuộc sống) là bài toán thuộc lĩnh vực cellcular automaton được đưa ra bởi John Horton Conway vào năm 1970.

Đây là một trò chơi mà không có người chơi. Sự tiến hóa của trò chơi được xác định bởi trạng thái ban đầu, và không cần thêm đầu vào nữa.

Là mạng lưới các ô (tế bào) tạo nên một không gian hai chiều không giới hạn. Trạng thái của ô: sống hoặc chết. Mỗi tế bào sẽ tương tác với tám hàng xóm (tế bào liền kề). Trạng thái tiếp theo của ô được quyết định theo quy tắc:

  1. Ô đang sống mà có ít hơn hai hàng xóm đang sống sẽ chết
  2. Ô đang sống mà có nhiều hơn 3 hàng xóm đang sống sẽ chết
  3. Ô đang sống mà có 2 hoặc 3 hàng xóm đang sống sẽ tiếp tục sống
  4. Ô chết mà có đúng 3 hàng xóm đang sống sẽ chuyển thành ô sống Mẫu ban đầu là mầm của hệ thống.

+ Một số code khái niệm được giải thích như sau:

* Khai báo kiểu dữ liệu của biến là “let” – từ ES6 trở đi sử dụng kiểu dữ liệu này mà k dùng “var”: Khi được gọi ở các nơi khác nhau nó sẽ trả lại giá trị tương ứng với nơi đó.

* Sử dụng component trong Vuejs: Giúp gom các mã HTML lại để tái sử dụng các module tương tự  -> để xử lý các hành vi. (Chú ý trong component đặt tên không theo chuản w3c).

* Một số cấu trúc  hàm khai báo với Vuejs:

– el: “#tenid” : Khai báo tên id, gọi thực thi tới id trong file HTML.

….