Lập Trình
Tổng hợp các thông tin, kinh nghiệm hữu ích và mới nhất về lập trình cần học gì, phỏng vấn, mức lương trong ngành IT như thế nào, tìm hiểu ngay!
398 bài viết

Hướng dẫn Java Design Pattern – Transfer Object
Bài viết được sự cho phép của tác giả Giang Phan Transfer Object Pattern là gì? Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Transfer Object đơn giản là một POJO (Plain Old Java Object), chỉ chứa các getter/ setter method và có thể có implement serialize để truyền tải dữ liệu thông qua network. DTO hoàn toàn không chứa behavior/ logic, chỉ được sử dụng để truyền dữ liệu và map dữ liệu từ các Domain Model trước khi truyền tới Client. Trong các ứng dụng đơn giản, các Domain Model thường có thể được sử dụng lại trực tiếp dưới dạng DTO và được truyền trực tiếp đến lớp hiển thị, do đó chỉ có một Data Model thống nhất. Đối với các ứng dụng phức tạp hơn, chúng ta không muốn hiển thị toàn bộ Domain Model cho Client, do đó, việc ánh xạ từ các Domain Model sang DTO là cần thiết. Tìm Java job lương cao trên Station D ngay! Cài đặt Transfer Object Pattern như thế nào? Các thành phần tham gia Transfer Object Pattern: Business Object : là một Business Service, tạo Transfer Object và trả nó về Client khi cần thiết. Nó cũng có thể nhận dữ liệu từ Client trong một Transfer Object và gửi đến Server để cập nhật vào database. Transfer Object : là một POJO, chỉ chứa các getter/ setter method. Client : người sử dụng ứng dụng. CQRS pattern là gì? Ví dụ dễ hiểu về CQRS Pattern Hướng dẫn Java Design Pattern – Builder Ví dụ sử dụng Transfer...

Tại sao bạn nên sử dụng Python Generator
Generator đã là một phần quan trọng của Python kể từ khi được giới thiệu với PEP 255 . Generator function cho phép bạn tuyên bố một function hoạt động giống như một iterator. Chúng cho phép các lập trình tạo ra một iterator một cách nhanh chóng và dễ dàng. Iterator là gì, bạn có thể yêu cầu? Iterator là một đối tượng có thể lặp lại (looped). Nó được sử dụng để phản ánh một container dữ liệu để làm cho nó hoạt động giống như một đối tượng iterable. Có thể bạn đã sử dụng một vài đối tượng có thể lặp lại mỗi ngày: các string , list và từ điển để đặt tên cho một số. Một iterator được định nghĩa bởi một class thực hiện các Iterator Protocol . Giao thức này chỉ ra hai phương pháp trong class: __iter__ và __next__ . Quay lại. Tại sao bạn thậm chí muốn tạo ra iterators? 71 trích đoạn code Python cho các vấn đề hàng ngày của bạn Tiết kiệm không gian bộ nhớ Các iterator không tính toán giá trị của mỗi mục khi khởi tạo. Chúng chỉ tính toán nó khi bạn yêu cầu nó. Đây được gọi là lazy evaluation . Lazy evaluation thực sự hữu ích khi bạn có một bộ dữ liệu cực lớn để tính toán. Nó cho phép bạn sử dụng dữ liệu ngay lập tức, trong khi cả bộ dữ liệu đang được tính. Giả sử chúng ta muốn nhận được tất cả các số nguyên tố nhỏ hơn một số cực đại. Trước tiên chúng ta xác định hàm kiểm tra nếu một số là số nguyên tố: def check_prime(number): for divisor in range(2, int(number ** 0.5) + 1): if number % divisor == 0: return...

So sánh tốc độ List collection và HashSet collection trong C#
Người viết: Tùng NT Mở đầu Lâu nay khi lập trình chúng ta chủ yếu sử dụng kiểu dữ liệu List để thao tác với các collection, mặc dù đây không phải là kiểu collection duy nhất trong .NET nhưng các lập trình viên đã quá quen thuộc với việc sử dụng kiểu List nên thói quen này không phải dễ thay đổi. Trong bài viết này chúng ta sẽ cùng so sánh tốc độ của kiểu List và HashSet (một kiểu collection xuất hiện bắt đầu từ .NET 3.5 ) để biết được khi nào thì nên sử dụng List và khi nào thì nên dùng kiểu HashSet . Kiểu List<T> Kiểu List<T> chứa một danh sách item, truy cập qua chỉ số. Không giống như kiểu mảng là một kiểu cố định kích thước, list tự động tăng kích thước khi cần. Đây chính là lý do tại sao List đôi khi còn được gọi là kiểu mảng động. Cấu trúc bên trong của List thực chất là một mảng, nếu mảng này hết chỗ nó sẽ tạo ra một mảng mới lớn hơn và copy toàn bộ item từ mảng cũ sang mảng mới. Ngày nay thì chúng ta thấy hầu hết lập trình viên đều dùng kiểu List thay vì kiểu mảng. Tuy nhiên trong một số trường hợp nếu item là cố định thì bạn nên dùng kiểu mảng để có performance tốt hơn. Một số phép toán trên kiểu List 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 private static void ListOperation ( ) { var intList = new List < int > ( 100 ) ; intList . Add ( 5 ) ; intList . RemoveAt ( 0...
![[Python cơ bản thường dùng trong công việc] Phần 13 : Restful client](https://img-cdn.stationd.blog/w800-h600/featured/class-trong-python-218x150_20250424085558_d67e1453.png)
[Python cơ bản thường dùng trong công việc] Phần 13 : Restful client
Ngày nay, với sự phong phú của các ứng dụng và nhu cầu kết nối ngày càng lớn thì Restful là một trong những mô hình web service được nhiều công ty sử dụng. Do đó, việc có thể kết nối đến các Restful web service là một kỹ năng cần thiết cho các lập trình viên. Chương này sẽ giới thiệu về một trong những thư viện nổi tiếng nhất trong Python để làm việc với các Restful web service, đó là requests . Website chính thức và các mô tả đầy đủ đều được đề cập tại http://www.python-requests.org/ 13.1. Cài đặt Cài đặt nhanh chóng thông qua pip như sau: $ sudo pip install requests 13.2. Request Hỗ trợ sẵn các phương thức tương ứng cho Http request như GET, POST, PUT, DELETE… import requests r = requests.get('https://api.github.com/events') r = requests.post("http://httpbin.org/post") r = requests.put("http://httpbin.org/put") r = requests.delete("http://httpbin.org/delete") r = requests.head("http://httpbin.org/get") r = requests.options("http://httpbin.org/get") 13.2.1. GET Query string Đối với các request GET , có thể truyền tham số đường dẫn thông qua tham số params khi gọi phương thức get() . Ví dụ: import requests payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://httpbin.org/get", params = payload) print(r.url) (Hiển thị: http://httpbin.org/get?key2=value2&key1= value1) 13.2.2. Request Body Trong hầu hết trường hợp các request như POST, PUT thương cần truyền dữ liệu khi request, có thể sử dụng tham số data để truyền data lên kèm request. Ví dụ: import requests payload = {'key1': 'value1', 'key2': 'value2'} r = requests.post("http://httpbin.org/post", data = payload) Python tuyển dụng nhiều vị trí cần gấp 13.2.3. Upload file Có thể gởi thêm tham số files để upload file kèm theo request. Ví dụ: import requests url = 'http://httpbin.org/post' files = {'file': open('report.xls', 'rb')} r = requests.post(url, files=files) 13.3. Response Sau khi gọi các phương...

Giới thiệu về StoryBook cho dự án FrontEnd
Bài viết được sự cho phép của tác giả Phạm Minh Khoa Storybook là một công cụ thiết kế và phát triển những UI Components cho ứng dụng của bạn trên một môi trường hoàn toàn biệt lập. Storybook mang lại trải nghiệm mới khi thiết kế những UI components tưởng chừng chỉ dừng lại ở khâu design trước khi chuyển sang giai đoạn code Frontend. Ngày nay khi phát triển một dự án, chúng ta dành rất nhiểu thời gian để xây dựng những UI Components. Hơn hết, chúng ta cần chú trọng làm rành mạch các thuộc tính cũng như hiển thị hết các tính năng cần có (props and states) của những Components này…ngay từ điểm khởi đầu …Không thể phủ nhận đó là cái khó trong một dự án Frontend! Dựa vào design ta có thể hoàn thiện một Component, hay thậm chí hoàn thành cả một Page. Nhưng bạn có chắc chắn chất lượng code vừa hoàn thiện đã cover toàn bộ các trường hợp? Những người đồng hành có tái sử dụng được hay bạn không viết lại một cái đã có 80% rồi?… Tất cả liệu đã tường minh?… Storybook đã có ~28k star ở thời điểm này và nó được sử dụng rộng rãi bởi những ông lớn như Airbnb, Coursera, LonelyPlanet. Hãy bắt đầu khai thác lợi ích mà Storybook có thể mang lại. Hãy lấy ví dụ trực quan, hãy tưởng tượng bạn đối mặt với một trong hai trường hợp sau trong dự án Frontend: Trường hợp lý tưởng : Design đã xong 98%, đã có StyleGuide, gần như các phần core là cố định sẽ không có thay đổi lớn nào. Trường hợp éo le : Design mới chỉ hoàn thành 60%, dự án lên kế hoạch làm...

Các thuật toán tìm ước chung lớn nhất trong Java
Bài viết được sự cho phép bởi tác giả Sơn Dương Nằm trong series học thuật toán – cấu trúc dữ liệu và giải thuật , chúng ta cùng nhau tìm hiểu các phương pháp để tìm ước chung lớn nhất, code được minh họa bằng Java . Trước hết, chúng ta cùng nhau tìm hiểu lý thuyết trước đã nhé. Định nghĩa ước chung lớn nhất Trước khi hiểu ước chung lớn nhất, bạn cần phải biết ước số là gì? Đơn giản lắm, ước số của một số nguyên a là số nguyên b khi và chỉ khi số a chia hết cho số b. Ước chung lớn nhất (GCD – Greatest Common Divisor) của hai hay nhiều số nguyên là số lớn nhất trong tập hợp ước chung. Ngược với ước chung lớn nhất là bội số chung nhỏ nhất. Mình sẽ dành riêng bài viết sau để hướng dẫn sử dụng thuật toán để tìm bội số chung nhỏ nhất. Các bạn đón đọc nhé. Ứng dụng thực tế của ước chung lớn nhất (UCLN) Với nhiều ứng dụng thực tế, ước chung lớn nhất không chỉ dùng trong lĩnh vực toán học, mà cả các lĩnh vực khác nữa, liên quan đến nhiều sự vật, hiện tượng trong đời sống. Mình lấy ví dụ minh họa nhé: Tôi chán làm dev, bỏ về quê chăn thỏ làm giàu. Đố bạn biết tôi đang nuôi bao nhiêu con thỏ? Dữ liệu cho bạn đây: Hàng này tôi luôn bỏ ra 6 cây súp lơ, 8 củ cà rốt làm thức ăn cho chúng. Mỗi con thỏ đều được thưởng thức cả súp lơ và cà rốt. Trong đó, số lượng súp lơ và cà rốt ăn được phải bằng nhau. Tất nhiên, không được bỏ thừa...

Python: Top 18 module hữu ích nhất
Bài viết được sự cho phép của tác giả Phạm Văn Nguyên Như các bạn đã biết python có rất nhiều module. Trong bài này là 18 module python tốt nhất mà bạn thực sự nên biết! Đây là các module liên quan đến: web development, machine learning, data science and graphical user interfaces ( phát triển web, học máy, khoa học dữ liệu và giao diện đồ họa người dùng ). Tìm việc làm python lương cao đi làm ngay Đây là những module python phổ biến nhất sẽ làm cho cuộc sống của bạn dễ dàng hơn. Đây là danh sách các module: Web: Requests: https://pypi.org/project/requests/ Django: https://pypi.org/project/Django/ Flask: https://pypi.org/project/Flask/ Twisted: https://twistedmatrix.com/trac/ BeautifulSoup: https://pypi.org/project/beautifulsoup4/ Selenium: https://selenium-python.readthedocs.io/ Data science: Numpy: https://numpy.org/ Pandas: https://pandas.pydata.org/ Matplotlib: https://matplotlib.org/ Nltk: https://www.nltk.org/ Opencv:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html Machine Learning: Tensorflow: https://www.tensorflow.org/ Keras: https://keras.io/ PyTorch: https://pytorch.org/ Sci-kit Learn: https://scikit-learn.org/stable/ GUI: Kivy: https://kivy.org/#home PyQt5: https://pypi.org/project/PyQt5/ Tkinter: https://wiki.python.org/moin/TkInter Ngoài ra còn có: Pygame: https://www.pygame.org/docs/ Bài viết gốc được đăng tải tại nguyenpv.com Có thể bạn quan tâm: Python free variable Học Python: Từ Zero đến Hero (phần 2) Xem thêm Việc làm it đà nẵng , hcm, hà nội hấp dẫn trên Station D

Code PHP làm sao cho sạch (Phần 1)
Giới thiệu Đây là những nguyên lý kỹ thuật phần mềm, được trích từ cuốn sách Clean Code của tác giả Robert C. Martin (thường gọi là Uncle Bob) rất thích hợp cho ngôn ngữ PHP. Tài liệu này không phải là sách hướng dẫn về phong cách viết code, mà là hướng dẫn cách làm thế nào để viết phần mềm dễ đọc, dễ sử dụng lại, và dễ cải tiến trong PHP. Bạn không cần phải tuân theo tất cả các nguyên tắc trong tài liệu này. Đây chỉ đơn giản là những hướng dẫn, nhưng dù sao nó cũng là đúc kết từ nhiều năm kinh nghiệm của tác giả. Repository này lấy cảm hứng từ clean-code-javascript Lưu ý: Dù nhiều lập trình viên còn sử dụng PHP 5, nhưng nhiều ví dụ trong đây chỉ chạy được trên PHP 7.1+. Biến Sử dụng tên biến có ý nghĩa và dễ hiểu Chưa tốt: $ymdstr = $moment->format('y-m-d'); Tốt: $currentDate = $moment->format('y-m-d'); Sử dụng cùng từ vựng cho cùng ột loại biến Chưa tốt: getUserInfo(); getUserData(); getUserRecord(); getUserProfile(); Tốt: getUser(); Đặt tên sao cho dễ tìm kiếm (phần 1) Thường thì chúng ta sẽ đọc code nhiều hơn viết code. Nên điều quan trọng là code chúng ta viết ra phải dễ đọc và dễ tìm kiếm. Nếu không đặt tên biến có ý nghĩa và làm chương trình dễ hiểu, chúng ta sẽ gây khó cho những lập trình viên khác. Do đó mỗi khi đặt tên biến, hàm thì hãy đặt có ý nghĩa. Chưa tốt: // Oh man, 448 là cái giề vậy? $result = $serializer->serialize($data, 448); Tốt: $json = $serializer->serialize($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); Đặt tên sao cho dễ tìm kiếm (phần 2) Chưa tốt: // Lại nữa, 4 nghĩa là cái giề...
![[Python cơ bản thường dùng trong công việc] Phần 14 : Gửi email với SMTP](https://img-cdn.stationd.blog/w800-h600/featured/class-trong-python-218x150_20250424021646_a4456cd9.png)
[Python cơ bản thường dùng trong công việc] Phần 14 : Gửi email với SMTP
SMTP là giao thức gởi mail thông dụng hiện nay. Python hỗ trợ mặc định thư viện smtplib dùng để kết nối đến một SMTP Server và gởi email. Tuy nhiên, việc sử dụng thư viện này sẽ gây khó khăn cho việc định dạng và sử dụng nên chúng ta sẽ sử dụng thư viện sender , là một thư viện giúp định dạng và gởi email đơn giản hơn. 14.1. Cài đặt sender Cài đặt từ pip như sau: $ sudo pip install sender Tuyển dụng lập trình python 14.2. Gởi email đơn giản Để gởi 1 email với sender , bạn cần có tài khoản và một số thông tin của SMTP Server trước khi gởi. Ví dụ đoạn code để gởi 1 email từ SMTP Server của Amazon. from sender import Mail, Message mail = Mail( "smtp.gmail.com", port = 465, username = "example@gmail.com", password = "yourpassword", use_tls = False, use_ssl = True, debug_level = False ) msg = Message("msg subject") msg.fromaddr = ("Vo Duy Tuan", "example@gmail.com") msg.to = "destuser@gmail.com" msg.body = "this is a msg plain text body" msg.html = "<b>this is a msg text body</b>" msg.reply_to = "example@gmail.com" msg.charset = "utf-8" msg.extra_headers = {} msg.mail_options = [] msg.rcpt_options = [] # Send message mail.send(msg) 14.3. Gởi email có đính kèm file Bạn cần sử dụng thêm class Attachment để tạo attachment. from sender import Mail, Message, Attachment mail = Main(...) msg = Message(..) ... # Open attached file and create Attachment object with open("photo01.jpg") as f: file01 = Attachment("photo01.jpg", "image/jpeg", f.read()) msg.attach(file01) # Send message mail.send(msg) 14.4. Tìm hiểu thêm Bạn có thể tìm hiểu thêm về thư viện sender tại website chính thức tại địa chỉ http://sender.readthedocs.org/ << Phần 13 : Restful client Phần 15 : Socket programming >>

File I/O trong Python
Bài viết được sự cho phép của ucode.vn Chắc bạn cũng đã quen thuộc với khái niệm File I/O khi đã học qua C hoặc C++. Và Python cũng hỗ trợ việc đọc và ghi dữ liệu tới các file. In kết quả ra màn hình trong Python Đến đây, chắc bạn đã quá quen thuộc về cách sử dụng của lệnh print. Lệnh này được sử dụng để in kết quả trên màn hình. Hàm này chuyển đổi biểu thức mà bạn đã truyền cho nó thành dạng chuỗi và ghi kết quả trên đầu ra chuẩn Standard Output. Cú pháp của lệnh print là: print "Hoc Python la kha don gian," , "ban co thay vay khong?" Kết quả là: Hoc Python la kha don gian, ban co thay vay khong? Xem thêm việc làm python tuyển dụng từ công ty lớn Đọc input từ bàn phím trong Python Python cung cấp hai hàm đã được xây dựng sẵn để nhận input từ người dùng. Hai hàm đó là: Hàm input() Hàm raw_input() Hàm input() trong Python Hàm này được sử dụng để nhận input từ người dùng. Hàm này giống hàm raw_input(), nhưng với hàm input() này thì bất cứ biểu thức nào được nhập từ người dùng thì nó ước lượng và sau đó trả về kết quả. Ví dụ: str = input ( "Nhap dau vao cua ban: " ); print "Dau vao da nhan la : " , str Code trên sẽ cho kết quả sau tùy thuộc vào input bạn đã nhập: Nhap dau vao cua ban: [x*5 for x in range(2,10,2)] Dau vao da nhan la : [10, 20, 30, 40] Hàm raw_input() trong Python Hàm raw_input() được sử dụng để nhận đầu vào từ người dùng. Nó nhận đầu vào từ...

Top 5 công cụ mã nguồn mở dành cho MySQL administrator
Sử dụng những công cụ tuyệt vời này để cải thiện CLI và web admin, SQL queries, schema migration, sao chép và phục hồi môi trường MySQL open source của bạn. Đối với các database administrators (DBA), việc giữ cho cơ sở dữ liệu chạy ở tốc độ tối đa có thể giống như con quay: tốc độ, tập trung, phản ứng nhanh với cái đầu lạnh và thỉnh thoảng hãy nhờ vả từ người xem hữu ích. Database là trung tâm của sự thành công của hầu hết các ứng dụng. Bởi vì DBA chịu trách nhiệm về dữ liệu của tổ chức, việc tìm kiếm các công cụ đáng tin cậy giúp họ hợp lý hóa quá trình quản lý cơ sở dữ liệu và giảm bớt các công việc bảo trì hàng ngày là rất cần thiết. DBAs cần những công cụ đủ tốt để giữ cho hệ thống của họ hoạt động trơn tru. Vậy các công cụ đáng tin cậy cho các MySQL administrator là gì? Ở đây tôi chia sẻ 5 công cụ mã nguồn mở hàng đầu các MySQL administrator và công dụng của chúng trong việc hỗ trợ các công việc quản trị hàng ngày MySQL. Đối với mỗi công cụ, tôi đã cung cấp liên kết tới kho GitHub và liệt kê số lượng GitHub star tại thời điểm viết. Tại sao không bao giờ nên sử dụng utf8 trong MySQL? MySQL ngoại truyện Mycli Dự án Mycli cung cấp MySQL tự động hoàn thành dòng lệnh và đánh dấu cú pháp. Đây là một trong những công cụ phổ biến nhất của MySQL. Các hạn chế về an ninh chẳng hạn như jump host và xác thực hai yếu tố để lại nhiều MySQL DBA với lệnh chỉ truy cập...

Tại sao Vue.js được nhiều frontend developer lựa chọn?
Bài viết được sự cho phép bởi tác giả Sơn Dương Theo khảo sát State of JavaScript , Vue.js là một front-end framework được nhiều người tìm hiểu nhất. Trong bài viết này, chúng ta cùng tìm hiểu lý do tại sao chọn Vue.JS. Đồng thời, mình cũng sẽ hướng dẫn các bạn cách xây dựng một ứng dụng đơn giản với Vue.js Một JavaScript framework tuyệt vời Như bạn đã biết, Javascript đã có tuổi đời hơn 10 năm, không quá trẻ nhưng cũng không phải là lâu đời nếu so với các ông già gân như Java , C# . Cộng đồng người sử dụng Javascript ngày càng lớn mạnh, do đó mà số lượng JS framework mới ra mắt rất nhiều. Nổi bật nhất trong số đó là React, Vue, Angular và tân binh svelteJS. Bài viết này mình sẽ không so sánh để chọn ra một JS framework tốt nhất, các bạn có thể xem lại bài viết này của mình: React vs Angular vs Vue.js: Lựa chọn nào tốt nhất? Vue.js được xây dựng với cách tiếp cận để nó là một framework nhỏ gọn, linh hoạt và hiệu quả, dễ bảo trì, dễ thực hiện test. Đồng thời, VueJS cũng phải dễ tích hợp vào các công nghệ khác. Tức là nếu bạn đã có sẵn ứng dụng, bạn có thể sử dụng Vue.js để xây dựng giao diện cho một phần của ứng dụng đó mà không nhất thiết phải đập hết cái cũ đi. Ngoài ra, bạn cũng có thể xử lý business logic ngay trên giao diện của ứng dụng với Vue.js. Vue có rất nhiều extension bổ sung giúp bạn làm điều đó. Cũng giống với các front-end framework hiện đại khác, Vue cũng cho phép bạn tạo các component...