#253 - Large Language Model will fundamentally change Software Engineering
Mô hình ngôn ngữ lớn (Large Language Model) sẽ thay đổi ngành công nghệ phần mềm như thế nào
📰Những bài viết hay
Unified Streaming And Batch Pipelines At LinkedIn
(by steven.do)
Trước đây, các kỹ sư tại LinkedIn đã áp dụng kiến trúc Lambda khi tiến hành xây dựng các luồng dữ liệu (data pipeline) xử lý theo dạng streaming và dạng khối (batch), và điều này dẫn đến vấn đề sẽ cần phải duy trì hai codebase khác nhau, với hai cách cài đặt code xử lý data khác nhau để read/write theo batch và streaming data, cũng như phải duy trì và nắm vững được cả 2 engines khác nhau trong quá trình duy trì hoạt động.
Để giải quyết được vấn đề này, các kỹ sư tại LinkedIn đã chuyển hướng sang áp dụng Apache Beam, với kỳ vọng có thể viết logic xử lý trên cùng 1 mã nguồn đáp ứng cho cả xử lý dạng batch và stream. Theo hướng tiếp cận này, họ sẽ tiết kiệm được hơn 94% thời gian xử lý.
Apache Beam là mô hình hợp nhất mã nguồn mở giúp xây dựng các tác vụ xử lý dữ liệu song song đáp ứng cho cả 2 hướng xử lý theo batch và streaming. Bằng cách sử dụng một trong số các open source Beam SDK, người dùng có thể xây dựng một luồng xử lý dữ liệu. Luồng xử lý dữ liệu này sau đó sẽ được thực thi bởi một trong số các back-end xử lý phân tán mà Beam hỗ trợ (Vd: Sazam, Spark, hoặc Apache Flink).
Tại LinkedIn, Sazam được sử dụng trong hàng ngàn ứng dụng xử lý streaming để xử lý hai triệu messages mỗi ngày với yêu cầu chịu tải lớn và khả năng kháng lỗi cao. Đối với các tác vụ xử lý batch, các kỹ sư tại LinkedIn đã sử dụng Spark để xử lý hàng petabyte dữ liệu trong các kho lưu trữ dữ liệu. Để có góc nhìn chi tiết và toàn cảnh hơn về cách thức các kỹ sư tại LinkedIn đã áp dụng Beam, các bạn có thể tham khảo chi tiết tại bài viết.
Scaling our customer review system for peak traffic
(by quangle)
Customer reviews là một trong những hệ thống cốt lõi có lượng truy cập cao tại Booking.com, mang đến những bài đánh giá có điểm số rating, hình ảnh, các feedbacks cần thiết cho khách hàng khi họ tìm kiếm và tiến hành đặt chỗ nghỉ.
Theo ước tính, hệ thống customer-reviews backend phải xử lý hàng chục nghìn requests per second, để đảm bảo tỷ lệ response time dưới 50 ms là 99% (p99 = 50ms) cùng với số lượng records lên đến 250 triệu reviews hiện có, nhóm kỹ sư đánh giá lựa chọn kỹ thuật sharding dữ liệu để chia nhỏ records theo chiến lược chia lấy dư (modulo) của
ACCOMMODATION_ID % NUMBER_OF_SHARDS
ACCOMMODATION_ID: Internal ID của khách sạn, nhà, ...
NUMBER_OF_SHARDS: tổng số lượng shards hiện có trong system
Tuy nhiên, cách tiếp cận modulo sẽ gặp vấn đề khi cần thêm vào node server vật lý (do số lượng records vượt ngưỡng lưu trữ của single node) dẫn đến phải resharding toàn bộ dữ liệu. Lấy ví dụ: hệ thống ban đầu được chia thành 3 shards, khi đó review record có accommodation_id = 10124 sẽ được điều phối về shard = 2 (10124 % 3 = 0), khi thêm mới 1 node lúc này hệ thống sẽ có 4 shards, và review record id 10124 sẽ được điều phối lại vào shard = 0 (10124 % 4 = 0). Quá trình redistributed sẽ ảnh hưởng đến hệ thống hiện tại.
Vậy đội ngũ Booking.com đã giải quyết các bài toán hóc búa trên như thế nào? Mời bạn đọc cùng tham khảo chi tiết bài viết: link
LLMs will fundamentally change software engineering
(by n^4)
Sự phổ biến của ChatGPT cùng các mô hình ngôn ngữ lớn gần đây đã khiến cộng đồng software engineer nảy sinh ra câu hỏi: liệu những công nghệ này có thay thế công việc của Software Engineer (SE) hay không? Hay nó sẽ thay đổi ngành công nghệ phần mềm như thế nào?
Trong bài viết này, tác giả vốn là một lập trình viên hệ thống (System Programming) chia sẻ góc nhìn của mình về vấn đề này. Tác giả liệt kê những tình huống mà tác giả nghĩ LLM (Large Language Model) sẽ giúp software engineer trở nên hiệu quả hơn và cách mà tác giả nghĩ các lập trình viên nên tìm cách thích ứng.
What’s the differences between software engineering and computer science degrees
(by n^4)
Nhiều bạn hẳn đã từng đặt ra câu hỏi: tôi muốn làm Software Engineer, vậy tôi có phải đi học đại học hay không? Hoặc là nếu tôi không học Computer Science, vậy tôi có được tự gọi mình là Software Engineer hay không?
Đây là một chủ đề lớn và có nhiều tranh luận. Trong bài viết hay kỳ này mời bạn cùng tham khảo một góc nhìn được đăng ở StackOverflow: link.
👨💻Góc lập trình
(by ndaadn and phucnh)
Đề ra tuần này: Course Schedule
Có tổng cộng `numCourses` khóa học mà bạn có thể tham gia, được đánh số từ 0 đến numCourses - 1. Bạn được cung cấp một mảng `prerequisites` trong đó `prerequisites[i] = [ai, bi]` cho biết bạn phải tham gia khóa học `bi` trước nếu muốn tham gia `ai`.
Ví dụ: cặp [0, 1], cho biết rằng để học khóa học 0, trước tiên bạn phải học khóa học 1.
Đề bài yêu cầu trả về true nếu bạn có thể hoàn thành tất cả các khóa học. Nếu không, trả về false.
Ví dụ 1:
Input: numCourses = 2, prerequisites = [[1,0]]
Output: true
Ví dụ 2:
Input: numCourses = 2, prerequisites = [[1,0],[0,1]]
Output: false
Giải thích: Có 2 khóa học, để học khóa 1 cần hoàn thành khóa 0 trước, và để học khóa 0 cần hoàn thành khóa 1 trước. Chính vì vậy kết quả là false.
Lời giải tuần trước: Backspace String Compare
Sử dụng hai stack để lưu trữ xâu ký tự ban đầu.
Thực hiện duyệt qua từng ký tự trong xâu, nếu ký tự đó không phải là "#" thì đẩy vào stack, ngược lại thì lấy ra ký tự trên đỉnh của stack (nếu stack không rỗng).
Sau khi đã xử lý xong cả hai xâu, ta so sánh các phần tử trong hai stack để kiểm tra xem hai xâu có giống nhau hay không.
class Solution {
public boolean backspaceCompare(String s, String t) {
Stack<Character> stackS = new Stack<>();
Stack<Character> stackT = new Stack<>();
// Xử lý xâu s
for (char c : s.toCharArray()) {
if (c != '#') {
stackS.push(c);
} else if (!stackS.isEmpty()) {
stackS.pop();
}
}
// Xử lý xâu t
for (char c : t.toCharArray()) {
if (c != '#') {
stackT.push(c);
} else if (!stackT.isEmpty()) {
stackT.pop();
}
}
// So sánh hai stack
while (!stackS.isEmpty() && !stackT.isEmpty()) {
if (stackS.pop() != stackT.pop()) {
return false;
}
}
return stackS.isEmpty() && stackT.isEmpty();
}
}
Độ phức tạp thuật toán của giải thuật là O(N+M) với N, M lần lượt là độ dài của chuỗi s và t.
🛠️Code & Tools
filegpt.app: Trợ lý ảo trên nền tảng GPT giúp tóm tắt nội dung các file và text xoay quanh một chủ đề nào đó.
Quotes
“Two kinds of people are good at foreseeing danger: those who have learned at their own expense, and the clever people who learn a great deal at the expense of others.”
Sazam -> Samza
Admin coi phim hơi nhiều nha :>
Làm sao để đọc bài thế mọi người, mình vào link chỉ thấy giới thiệu bài khác.