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

Thiết kế hệ thống URL Shortening giống Bit.ly chịu tải 6 tỷ click 1 tháng

Thiết kế hệ thống URL Shortening giống Bit.ly chịu tải 6 tỷ click 1 tháng

Bài viết được sự cho phép của tác giả Ngo Thang Chắc hẳn ai trong số chúng ta cũng đã từng dùng 1 số dịch vụ thiết kế URL Shortening (rút gọn link) như Bit.ly hay TinyURL. Đối với 1 software engineer thì việc dùng là 1 chuyện, nhưng làm thế nào để thiết kế được 1 hệ thống chịu tải hàng tỉ click mỗi tháng chắc hẳn cũng nhiều người quan tâm. Hôm nay mình viết bài này để đào sâu vào những hệ thống đó xem họ đã thiết kế như thế nào nhé. Mục tiêu của bài viết Sẽ giúp các bạn có cái nhìn tổng quan về cách thiết kế hệ thống hàng triệu người dùng, hàng tỉ click mỗi tháng nó như thế nào. Từ cách tư duy đến cách tiếp cận bài toán. Có thể tự mình xây dựng được 1 hệ thống URL Shortening giống Bitly, TinyURL. Giúp các bạn có kinh nghiệm đi phỏng vấn vào vị trí system design. Hệ thống URL Shortening là gì? Chắc hẳn cũng có 1 số bạn chưa từng dùng dịch vụ rút gọn link bao giờ. Vậy để mình giải thích ngắn gọn xem URL Shortening là gì đã nhé. URL Shortening (rút gọn link) là 1 dịch vụ giúp chúng ta có thể làm ngắn link gốc lại được. Ví dụ như link gốc của chúng ta là: https://nghethuatcoding.com/2019/05/06/cac-ki-su-grab-da-thiet-ke-he-thong-dan-hoi-su-dung-circuit-breaker-nhu-the-nao/ Sau khi dùng qua rút gọn link thì nó sẽ trở thành thế này: http://bit.ly/2VXBAw4 Bây giờ nếu chúng ta mở link http://bit.ly/2VXBAw4 ở trình duyệt thì nó sẽ chuyển hướng đến link gốc. Tại sao cần dùng rút gọn link? Đây chắc hẳn là câu hỏi mà nhiều người quan tâm. Ví dụ như: cứ gửi link gốc cho người xem chứ cần gì...

By stationd
Top 15 thư viện Python tốt nhất cho Data Science trong 2022

Top 15 thư viện Python tốt nhất cho Data Science trong 2022

Khi Python ngày càng nhận được nhiều sự quan tâm của cộng đồng Data Science trong những năm gần đây, tôi đã muốn tổng hợp cho các data scientists và engineers những thư viện được sử dụng nhiều nhất, dựa trên kinh nghiệm làm việc của bản thân. Và vì tất cả các thư viên đều là nguồn mở, nên chúng tôi đã thêm các commits, số lượng các contributors và các chỉ số khác từ Github với vai trò là các chỉ số proxy thể hiện mức độ nổi tiếng của thư viện đó Việc làm python lương cao trong tháng 1. NumPy (Commits: 15980, Contributors: 522) Khi bắt đầu giải quyết task về khoa học bằng Python, tập hợp phần mềm được thiết kế riêng cho scientific computing trong Python sẽ không thể không hỗ trợ SciPy Stack của Python (đừng nhầm lẫn với thư viện SciPy – là 1 phần của stack này, và cộng đồng của stack này). Tuy nhiên, stack này khá rộng, có hơn cả tá thư viện trong nó và chúng ta thì lại muốn tập trung vào các core packages (đặc biệt là những packages quan trọng nhất). Package cơ bản nhất, khi computation stack về khoa học được xây dựng là NumPy (viết tắt của Numerical Python), cung cấp rất nhiều tính năng hữu ích cho các phần operations trong n-arrays & matrics trong Python. Thư viện này cung cấp khả năng vector hóa các vận hành về toán trong type array NumPy, giúp cải thiện hiệu suất và theo đó là tốc độ execution. 2. SciPy (Commits: 17213, Contributors: 489) SciPy là 1 thư viện phần mềm cho engineering và khoa học. Một lần nữa bạn cần phải hiểu sự khác biệt giữa SciPy Stack và thư viện SciPy. SciPy...

By stationd
Top 10 PHP frameworks dành cho các dự án Web mà bạn cần biết

Top 10 PHP frameworks dành cho các dự án Web mà bạn cần biết

Các bạn hẳn cũng biết việc chọn một framework thích hợp với PHP project của mình sẽ quyết định tính thành bại của nó. Bài viết này chính là nhằm mục đích giúp bạn chọn ra được PHP framework tốt nhất cho sự nghiệp lập trình web của bạn. PHP được xem là một trong những ngôn ngữ script nổi tiếng nhất dành cho server. Ngay từ lúc được khai sinh ra vào 1995, tính phức tạp của web projects đã trở nên quá cao khiến cho việc code từ số không trở nên vô cùng khó khăn. Và như vậy, PHP framework trở thành một biện pháp vô cùng tuyệt vời. Trong bài viết này, chúng tôi sẽ giới thiệu cũng như phân tích và so sánh 10 PHP framework thông dụng nhất để bạn có thể chọn ra một framework thích hợp nhất. Các lợi ích từ việc dùng PHP framework Vì sao có rất nhiều developer lại chọn dùng PHP frameworks? Đơn giản là nó giúp công việc của chúng ta trở nên đơn giản hơn rất nhiều. Và sau đây là một số đặc điểm nổi bật của PHP frameworks: Giúp đẩy nhanh tiến độ cho quá trình phát triển Giúp bạn viết ra code vừa gọn, sạch mà lại tái sử dụng được. Cho phép khả năng mở rộng tùy thuộc vào project của bạn Được thiết kế theo MVC (Model-View-Controller) pattern Phù hợp với cách thức mới để phát triển web, ví dụ như object-oriented programming. Tuy vậy với 10 PHP frameworks thì có sự khác biệt như thế nào giữa chúng? Hãy cùng tôi so sánh và phân tích chúng: Xem tin tuyển lập trình viên PHP đãi ngộ tốt trên Station D FuelPHP framework Là một full-stack PHP framework với khả năng...

By stationd
Bỏ túi cheatsheet dành cho Python newbie

Bỏ túi cheatsheet dành cho Python newbie

Một bài viết ngắn tổng hợp các lệnh Python cơ bản nhất cho lập trình viên mới bắt đầu với Python. Cùng Station D xem qua và lưu về cheatsheet Python này nhé. Biến – Variables Biến trong Python được tạo và hiển thị như sau: name = expression. num = 11 # hiển thị 11 word = "Hello" # hiển thị "Hello" logic = True # hiển thị True my_list = [2, 3, 4] # hiển thị [2, 3, 4] my_tuple = (5, 2) # hiển thị (5, 2) my_dict = {} # hiển thị {} my_set = {4, 5} # hiển thị {4, 5} Chuỗi – Strings Chuỗi trong Python là tập hợp các ký tự và có thể khai báo bởi dấu nháy đơn ‘ hay dấu nháy đôi “ name = "Jeremy" # hiển thị "Jeremy" size = len(name) # hiển thị độ dài 6 ký tự của chuỗi twice = name * 2 # hiển thị "JeremyJeremy" concat = name + "'s" # hiển thị "Jeremy's" check = "e" in name # hiển thị True first = name[0] # hiển thị "J" last = name[-1] # hiển thị "y" subset = name[1:4] # hiển thị "ere" lower = name.lower() # hiển thị "jeremy" upper = name.upper() # hiển thị "JEREMY" Toán tử số học – Arithmetic Toán số có thể sử dụng các ký tự: +, -, /, //, *, **, và %. add = 3 + 7 # hiển thị tổng là 10 sub = 5 - 3 # hiển thị hiệu là 2 mul = 3 * 3 # hiển thị tích là 9 div = 5 / 2 # hiển thị thương là of 2.5 idiv = 5 // 2 # hiển thị kết quả là 2 exp = 2 ** 4...

By stationd
Trigger trong SQL: Cú pháp và cách tạo Trigger SQL

Trigger trong SQL: Cú pháp và cách tạo Trigger SQL

SQL đã quá quen thuộc trong việc quản lý và thao tác cơ sở dữ liệu. Trong SQL, có nhiều công cụ mạnh mẽ để giúp quản lý dữ liệu hiệu quả, và một trong số đó là trigger. Trigger là một khái niệm quan trọng trong SQL, cho phép bạn tự động hóa các quy trình và kiểm soát chặt chẽ hơn các thay đổi xảy ra trong cơ sở dữ liệu của mình. Cùng làm rõ trigger SQL là gì và cú pháp sử dụng Trigger trong SQL. Trigger trong SQL là gì? Trigger là một đoạn mã SQL được thiết lập để tự động chạy khi một sự kiện cụ thể xảy ra trong một bảng hoặc view trong cơ sở dữ liệu. Sự kiện này có thể là một hành động như INSERT , UPDATE , hoặc DELETE . Khi hành động đó xảy ra, trigger sẽ tự động được kích hoạt để thực hiện một chuỗi các hành động đã được định sẵn. Trigger là một loại stored procedure đặc biệt (không có tham số) được thực thi (execute) một cách tự động khi có một sự kiện thay đổi dữ liệu (data modification). Trigger được lưu trữ và quản lý trong Server DB, được dùng trong trường hợp ta muốn kiểm tra các ràng buộc toàn vẹn trong DB. Trigger được sử dụng khi nào? Trigger thường được sử dụng để kiểm tra ràng buộc (check constraints) trên nhiều quan hệ (nhiều bảng/table) hoặc trên nhiều dòng (nhiều record) của bảng. Ngoài ra việc sử dụng Trigger để chương trình có những hàm chạy ngầm nhằm phục vụ nhưng trường hợp hữu hạn và thường không sử dụng cho mục đích kinh doanh hoặc giao dịch. Ngăn chặn việc xóa những dữ liệu quan...

By stationd
Python: Sự khác nhau giữa List và Tuple?

Python: Sự khác nhau giữa List và Tuple?

Bài viết được sự cho phép của tác giả Phạm Văn Nguyên Bạn vừa tìm hiểu về lists và tuples và bạn đang tự hỏi làm thế nào chúng khác nhau? Đây là một câu hỏi phổ biến đáng ngạc nhiên. Cả 2 cũng khá giống nhau. Cả lists và tuples là các kiểu dữ liệu chuỗi có thể lưu trữ một bộ sưu tập các item(mục). Mỗi item được lưu trữ trong một list hoặc một tuple có thể thuộc bất kỳ loại dữ liệu nào. Và bạn cũng có thể truy cập bất kỳ item nào theo chỉ mục của nó. Vì vậy, câu hỏi là, họ có khác nhau không? Và nếu không, tại sao chúng ta có hai loại dữ liệu hoạt động khá giống nhau? Chúng ta không thể sống với lists hoặc tuples? Vâng, chúng ta hãy cố gắng tìm câu trả lời. Sự khác biệt chính giữa list và Tuple Sự khác biệt chính giữa list và tuples là thực tế là list có thể thay đổi (mutability) trong khi bộ dữ liệu là bất biến (immutability) . Điều đó có nghĩa gì, bạn nói gì? Một kiểu dữ liệu có thể thay đổi có nghĩa là một đối tượng python thuộc loại này có thể được sửa đổi. Một đối tượng bất biến không thể. Chúng ta hãy xem điều này có nghĩa là gì. Hãy tạo một list và gán nó cho một biến. >>> a = ["apples", "bananas", "oranges"] Bây giờ hãy xem điều gì xảy ra khi chúng ta cố gắng sửa đổi item(mục) đầu tiên của danh sách. Chúng ta hãy thay đổi apples thành một berries . >>> a[0] = "berries" >>> a ['berries', 'bananas', 'oranges'] Hoàn hảo! mục đầu tiên của a đã thay đổi. Bây...

By stationd
Producer – Consumer và đồng bộ hóa các luồng trong Java

Producer – Consumer và đồng bộ hóa các luồng trong Java

Bài viết được sự cho phép của tác giả Giang Phan Producer/ Consumer là một ví dụ kinh điển về vấn đề đồng hóa các luồng (multi-threading synchronization). Trong bài này tôi sẽ giới thiệu với các bạn vấn đề này và cách giải quyết để giúp các bạn hiểu rõ hơn về Java concurrency và mutli-threading. Xem thêm các việc làm Java lương cao trên Station D Mô tả vấn đề Producer/ Consumer Vấn đề mô tả hai đối tượng nhà sản xuất (Producer) và người tiêu dùng (Consumer), cả hai cùng chia sẻ một bộ đệm có kích thước cố định được sử dụng như một hàng đợi (queue). Producer : công việc của nhà sản xuất là tạo dữ liệu, đưa nó vào bộ đệm và bắt đầu lại. Consumer : công việc người tiêu dùng là tiêu thụ dữ liệu (nghĩa là loại bỏ nó khỏi bộ đệm), từng phần một và xử lý nó. Consumer và Producer hoạt động song song với nhau. Vấn đề là đảm bảo rằng nhà sản xuất không thể thêm dữ liệu vào bộ đệm nếu nó đầy và người tiêu dùng không thể xóa dữ liệu khỏi bộ đệm trống, đồng thời đảm bảo an toàn cho luồng (thread-safe). Giải pháp để giải quyết vấn đề Producer/ Consumer Ý tưởng: Giải pháp cho nhà sản xuất là đi ngủ (wait) nếu bộ đệm đầy. Lần tiếp theo người tiêu dùng xóa một mục khỏi bộ đệm, nó đánh thức (notify) nhà sản xuất, bắt đầu đưa dữ liệu vào bộ đệm. Theo cách tương tự, người tiêu dùng có thể đi ngủ (wait) nếu thấy bộ đệm trống. Lần tiếp theo nhà sản xuất đưa dữ liệu vào bộ đệm, nó đánh thức (notify) người tiêu dùng đang ngủ...

By stationd
Java Developer là gì? Lộ trình để trở thành Java Developer

Java Developer là gì? Lộ trình để trở thành Java Developer

Theo số liệu từ trang LinkedIn – trang mạng xã hội cho doanh nghiệp và thị trường việc làm lớn nhất thế giới, số lượng tin tuyển dụng Java đang đứng thứ 2 chỉ sau tin tuyển dụng Python trên hai thị trường Mỹ và Châu Âu. Nguồn: techrepublic.com Vậy Java Developer là gì? Lộ trình để trở thành một Java Developer đáp ứng được nhu cầu của thị trường việc làm hiện nay? Bài viết này mình sẽ cùng các bạn tìm hiểu và trả lời cho hai câu hỏi trên nhé. Java là gì? Ngôn ngữ lập trình Java được ra đời từ những năm 1990 bởi các lập trình viên đến từ Sun. Nó được tạo ra với phương châm: “Viết code một lần, chạy ở mọi nơi”. Để làm được điều này, đội ngũ phát triển đã tạo ra một máy ảo (Java Virtual Machine – JVM); nhiệm vụ của nó là biên dịch mã nguồn thành bytecode và chạy chương trình. Từ đó thì bạn có thể đem mã nguồn của mình và chạy trên bất cứ môi trường nào, từ Window, Linux, MacOS, … miễn là nó được cài JVM. Nguồn: i.ytimg.com Ưu điểm của Java: Java được kế thừa trực tiếp từ C/C++, dễ tiếp cận và có thể học được nhanh chóng nếu đã có kiến thức về lập trình cơ bản Hiệu suất đáp ứng cao nên được sử dụng cho rất nhiều hệ thống có quy mô lớn. Có thể sử dụng Java để viết ứng dụng chạy trên nhiều nền tảng khác nhau từ PC, Web đến Mobile và các hệ thống nhúng >>> Xem thêm: Java là gì? Tổng quan về ngôn ngữ lập trình java Java Developer là gì? Chắc hẳn bạn đã tự hình dung được...

By stationd
11 tip học Python dành cho các “newbie”

11 tip học Python dành cho các “newbie”

Đâu là cách thức tốt nhất để học Python? Đây có lẽ là một trong những câu hỏi phổ biến nhất mà các “newbie” chân ướt chân ráo bước vào thế giới của Python thắc mắc và tìm hiểu. Chúng tôi tin rằng bước đầu tiên trong việc học bất kỳ ngôn ngữ lập trình nào là đảm bảo rằng bạn hiểu cách học vì đây được cho là kỹ năng quan trọng nhất liên quan đến lập trình máy tính. Tại sao biết cách học quan trọng như vậy? Câu trả lời rất đơn giản: khi ngôn ngữ ngày càng phát triển, các thư viện của ngôn ngữ và các công cụ cũng sẽ được nâng cấp. Biết cách học sẽ rất cần thiết để theo kịp những thay đổi này và trở thành một lập trình viên thành công. Có thể khẳng định rằng Python là ngôn ngữ rất tuyệt vời. Nếu bạn vừa quyết định sẽ “dấn thân” vào cuộc hành trình với đích đến là trở thành một lập trình viên Python “đẳng cấp” thì đây sẽ là một số chiến lược học tập. Hãy cùng Quantrimang tìm hiểu xem nhé! Hãy làm cho Python trở nên gắn bó với bạn Tip #1: Viết code hằng ngày Sự kiên trì là rất quan trọng khi bạn đang học một ngôn ngữ mới. Tip đầu tiên dành cho bạn là nên kiên trì tập viết code mỗi ngày. Khi bạn lặp đi lặp lại một hành động nào đó, bộ não sẽ dần ghi nhớ. Theo thời gian, bạn sẽ thực hiện ngày càng tốt hơn, nhanh hơn, giỏi hơn. Điều này gọi là “Ký ức cơ bắp”. Việc kiên trì viết code hằng ngày sẽ giúp bạn phát triển “cơ bắp” này đấy! Có thể lúc...

By stationd
Cách tuần tự hóa dữ liệu trong Java như Protobuf

Cách tuần tự hóa dữ liệu trong Java như Protobuf

Bài viết được sự cho phép của tác giả Trần Văn Dem Khi dữ liệu được chuyển qua mạng qua các hệ thống rpc, msg queue,internal service,… Tùy vào các hệ thống chúng ta cần serialize dữ liệu thành dạng json hoặc array byte . Tuy nhiên để đảm bảo tốc đố của hệ thống thì phương pháp serialize dữ liệu thành array byte sẽ được sử dụng rộng rãi hơn. Hiện nay việc serialize đã có các công ty lớn tạo ra các thư viện khác nhau với chất lượng và tốc độ rất cao như : Protobuf của google. Thrift của facebook. Kryo một framework mạnh mẽ của java. Việc sử dụng các framework trên là khá dễ dàng nên lập trình viên thường sẽ coi việc serialize dữ liệu là một hộp đen. Điều này khá nguy hiểm vì trên thực tế có những project đội ngũ lập trình thường sẽ không dùng các framework có sẵn vì một số lý do như : nhiều dependency, tốc độ chưa đảm bảo, mất công tạo file (.proto, .thrift) khiến thay đổi các object gây khó khăn. Tại project này sẽ giới thiệu cho mọi người một cách để serialize dữ liệu thành array byte . BIG_ENDIAN VS LITTLE_ENDIAN Để serialize dữ liệu sang dạng array byte trong máy tính chúng ta có 2 cách serialize chính là BIG_ENDIAN và LITTLE_ENDIAN mọi người tham khảo lý thuyế tại wiki: en.wikipedia.org/wiki/Endianness Chúng ta sẽ hiểu đơn gian như sau : BIG_ENDIAN : sẽ ghi dấu trước ghi dữ liệu khác sau LITTLE_ENDIAN : sẽ ghi dữ liệu trước và ghi dấu sau. Ví dụ ta sẽ biến số interger 32 và -32 thành array byte ta code như sau: public class Test { public static void main (String[] args) {...

By stationd
Drupal Developer là gì? Cần học những gì để trở thành Drupal Developer

Drupal Developer là gì? Cần học những gì để trở thành Drupal Developer

Drupal là một hệ quản trị nội dung (CMS) mã nguồn mở viết bằng PHP ; trong hầu hết các bảng xếp hạng về top những CMS platform (nền tảng phát triển) phổ biến thì Drupal thường xuyên có mặt trong top 5. Điều đó cho thấy sự phổ biến và nhu cầu sử dụng rất lớn của CMS PHP này. Ở Việt Nam, nhu cầu tuyển dụng PHP luôn luôn đứng top đầu, và sẽ có nhiều nhà tuyển dụng ưu tiên cho những lập trình viên biết, thành thạo các thư viện, framework như Drupal. Bài viết hôm nay mình sẽ cùng các bạn đi tìm hiểu về CMS platform này và các kiến thức cần có để trở thành 1 Drupal Developer nhé. Drupal là gì? Như đã nói ở trên, Drupal là một hệ quản trị nội dung mã nguồn mở giúp phát triển website từ các blog cá nhân cho tới các trang web của chính phủ, doanh nghiệp, hay các trang thương mại điện tử. Hiểu đơn giản thì với Drupal, bạn có thể tạo ra website bạn cần và có sẵn những ứng dụng giúp thay đổi, chỉnh sửa nội dung website của bạn. Drupal được viết bởi Dries Buytaert – một lập trình viên người Bỉ, và được giới thiệu lần đầu tiên vào năm 2000; hiện tại nó vẫn được tác giả update phiên bản 1 cách đều đặn, mới nhất thì phiên bản Drupal 10 đang được lên kế hoạch ra mắt vào tháng 12 này. Drupal được viết bằng PHP và hoàn toàn miễn phí, vì thế nó được nhiều lập trình viên ưa chuộng. Tính đến tháng 3 năm 2021, cộng đồng Drupal bao gồm hơn 1,39 triệu thành viên, đóng góp hơn 46 nghìn module miễn phí...

By stationd
[Python cơ bản thường dùng trong công việc] Phần 10 : Kết nối Redis

[Python cơ bản thường dùng trong công việc] Phần 10 : Kết nối Redis

Redis là gì? Redis là một memory cache server hỗ trợ persistant data thông dụng nhất hiện nay. Nội dung chương này sẽ hướng dẫn bạn kết nối đến một Redis server (đã được cài đặt sẵn) thông qua thư viện redis-py . 10.1. Cài đặt Có thể xem thêm về hướng dẫn cài đặt thư viện này tại https://github.com/andymccurdy/redis-py Đơn giản cài thông qua pip là: $ sudo pip install redis 10.2 Kết nối đến Redis Để kết nối đến Redis server thì bạn có thể xem ví dụ sau: import redis r = redis.StrictRedis(host='localhost', port=6379, db=0) 10.3. Thực hiện lệnh Thực hiện các lệnh bình thường trên đối tượng redis. Ví dụ: import redis r = redis.StrictRedis(...) r.set('foo', 'bar') print r.get('foo') (Hiển thị 'bar') Tìm việc python không cần kinh nghiệm 10.4. Pipeline Pipeline là kỹ thuật được dùng trong trường hợp bạn muốn tăng performance bởi gộp nhiều lệnh vào một request thay vì mỗi lệnh là một request như thông thường. Xem ví dụ sau để hiểu cách sử dụng pipeline bằng redis-py : import redis r = redis.StrictRedis(...) r.set('foo', 'bar') pipe = r.pipeline() pipe.set('a', 1) pipe.set('b', 2) pipe.set('c', 3) pipe.get('foo') pipe.execute() Sau khi gọi phương thức execute() thì sẽ trả về List tương ứng với các kết quả của từng lệnh. Ví dụ kết quả từ đoạn code trên: [True, True, True, 'bar'] << Phần 9 : Kết nối MySQL Phần 11 : Kết nối Memcached >>

By stationd