#215 - Grokking phát hành Dijkstra tập 2
Xin chào các bạn độc giả Grokking Newsletter!
Chúng tôi hân hạnh thông báo chính thức phát hành ấn phẩm Dijkstra Tập 2, 4 năm kể từ Dijkstra số đầu tiên.
Trong ấn phẩm này, toàn bộ các bài đều được viết bởi thành viên Grokking. Một số nội dung tiêu biểu từ Dijkstra 2:
Gobench, một benchmark framework được viết bằng Golang.
Bài toán đồng thuận trong hệ thống phân tán và thuật toán Raft.
Memory Abstraction - Làm thế nào để nhiều chương trình có thể truy cập RAM cùng lúc?
Thiết bị I/O và các giao thức I/O căn bản.
Trình biên dịch câu truy vấn.
Làm thế nào để xây dựng Resume chuẩn FANG.
Giới thiệu cuốn Designing Data-Intensive Applications.
Bài toán "Bữa ăn tối của các triết gia".
Mời các bạn đặt hàng tại Dijkstra Tập 2.
Đặc biệt, để cảm ơn sự ủng hộ của các bạn thời gian qua, Grokking xin gửi tặng mã giảm giá 50% JXWZP
dành cho 20 bạn đọc nhanh tay nhất ✨
Qua hơn 70 trang sách, chúng tôi hy vọng sẽ mang lại cho các bạn những kiến thức bổ ích xoay quanh các chủ đề quan trọng như 🔥 Database, 🔥 Network, 🔥 Distributed System, 🔥 Memory, cũng như các lĩnh vực thú vị khác.
Đây là thành quả từ sự nỗ lực rất lớn của đội ngũ tác giả và biên soạn trong suốt thời gian qua 🎉🎉🎉 Grokking xin gửi lời cảm ơn tới các thành viên, và rất mong nhận được sự ủng hộ của các bạn độc giả. 🙏
BBS Dijkstra
Những bài viết hay
Sharing Data Between Microservices in Scale
Chia sẻ dữ liệu giữa các microservice luôn là một bài toán thú vị, đặc biệt là với các hệ thống đòi hỏi khả năng mở rộng cao. Khi đó chúng ta phải cân nhắc sự cân bằng giữa availability và consistency.
Trong bài viết sau giới thiệu 3 phương án: Synchronous, Asynchronous và Hybrid. Mỗi phương án đều có những ưu, nhược điểm khác nhau.
Phương án Synchronous giúp đảm bảo data consistency thì lại có nhược điểm là availability thấp và độ trễ cao.
Phương án Asynchronous giúp tăng availability, nhưng lại có thể gây ra bất đồng bộ giữa các cơ sở dữ liệu của service.
Tùy vào tình huống và bài toán cụ thể mà chúng ta chọn lựa các giải pháp phù hợp. Trong bài viết sau, tác giả đã kể ra một tình huống thực tế xảy ra tại công ty và cách họ đã lựa chọn giải pháp như thế nào. Mời các bạn cùng đọc.
(by lpv)
DeepMind’s AI predicts almost exactly when and where it’s going to rain
Dự báo mưa là một trong những thử thách khó nhất của ngành dự báo thời tiết, và có ý nghĩa quan trọng với nhiều ngành nghề như tổ chức sự kiện ngoài trời, hàng không, dịch vụ cấp cứu. Tuy nhiên rất khó để dự báo được chính xác, vì cần phụ thuộc vào nhiều tiến trình thời tiết như thay đổi nhiệt độ, sự hình thành của mây và gió. Mỗi yếu tố riêng rẽ đã phức tạp, khi kết hợp lại với nhau thì vấn đề lại càng phức tạp hơn.
Một trong những kĩ thuật dự báo hiện nay là sử dụng số lượng lớn giả lập máy tính về vật lý khí quyển. Phương pháp này có thể dự báo dài hạn (forecasting) rất tốt, nhưng lại không thể dự báo chính xác thời tiết trong khoảng vài tiếng đồng hồ sắp tới (nowcasting). Một phương án khác là sử dụng Deep Learning, tuy nhiên thường chỉ có thể dự báo chính xác về một yếu tố như địa điểm, và kém chính xác về yếu tố khác như lượng mưa.
Gần đây, DeepMind đã làm việc với Met Office (Trung tâm Khí tượng Vương quốc Anh) để phát triển DGMR - một công cụ có thể dự đoán mưa trong 90 phút tới dựa trên dữ liệu radar.
Nhiều nước đã cung cấp dữ liệu đo lường radar định kì (radar snapshot) về sự tích tụ và chuyển động của mây.
Dữ liệu được truyền vào một Deep Generative Network. DGMR học để tạo ra radar snapshot giả nhằm bổ sung vào chuỗi các đo lường thật.
Qua so sánh khách quan, DGMR được nhiều nhà dự báo thời tiết đánh giá cao hơn các phương pháp khác. Mời các bạn tìm hiểu tại link bên dưới.
(by philong)
Góc Lập Trình
Đề ra tuần này: Count and Say
Lời giải đề bài tuần trước: Reverse Integer
Đề bài yêu cầu đảo ngược thứ tự chữ số của một số nguyên trong khoảng [-2^31, 2^31 - 1]
, nếu số đảo ngược nằm ngoài khoảng trên, trả về kết quả bằng 0. Ngoài ra không được sử dụng kiểu dữ liệu số nguyên 64-bit.
Lời giải:
Không khó để nhận ra lời giải thông thường cho bài toán này, chúng ta chỉ việc thực hiện đảo ngược vị trí của các chữ số bằng phép chia và chia lấy dư cho 10, và lưu ý kiểm tra xem nó có vượt quá phạm vi số nguyên 32 bit hay không.
Tuy nhiên, có một quan sát khá thú vị có thể giúp tối ưu tốc độ chạy cho chương trình như sau:
Nhìn vào giá trị tối đa của kiểu số nguyên 32 bit là 2,147,483,647 (2^31 - 1), chúng ta thấy:
Trong trường hợp chúng ta bắt đầu thêm chữ số thứ 10, mà giá trị của số đảo ngược đã vượt quá 214,748,364, thì bất kể chữ số thứ 10 là bao nhiêu, số đó sẽ có giá trị vượt quá 2,147,483,647.
Nhưng nếu 9 chữ số đầu tiên không quá 214,748,364, thì chữ số thứ 10 có thể nằm trong khoảng từ 0-7.
Vậy, chúng ta cần đảm bảo rằng chữ số thứ 10 không lớn hơn 7. Thực ra với đề bài lần này, chữ số thứ 10 không thể lớn hơn 7, vì giá trị tối đa của kiểu số nguyên 32-bit là 2,147,483,647, tức là chữ số thứ 10 sau khi đảo ngược sẽ chỉ có thể là 1 hoặc 2.
Quan sát tương tự cũng có thể được thực hiện đối với các số âm.
Mời các bạn tham khảo lời giải tại: https://pastebin.com/SzUz26q5
(by ndaadn)
Tech Talk
Owl | Arushi Aggarwal & Jason Flinn – System@Scale
Việc phân phát các tập tin nhị phân (binary) hay tập dữ liệu lớn (large data object) cho các máy chủ là một trong những chủ đề phổ biến, và được giải quyết bằng các phương pháp như hierarchical caching hay BitTorrent. Mỗi phương pháp có ưu và nhược điểm khác nhau.
Ở video này, các đội ngũ kỹ sư ở Meta giới thiệu về hệ thống phân phát dữ liệu Owl. Đây là một hệ thống được thiết kế dựa trên các ưu và nhược điểm của các giải pháp trước, nhằm tối ưu hóa việc phân phát các tập tin tại Meta. Một vài điểm nổi bật của Owl so với BitTorrent là:
Centralize mảng control plane để tối ưu hóa việc truyền tải dữ liệu nhờ vào thông tin toàn hệ thống thay vì thông tin lân cận từ các peer;
Hỗ trợ nhiều chính sách về caching và selection để tối ưu hóa việc truyền tải và truy vấn dữ liệu;
Hỗ trợ nhiều công cụ để mô phỏng và đo đạc các chính sách về caching và selection cho việc điều chỉnh hệ thống.
(by curioustien)
Code & Tools
FiloDB - Cơ sở dữ liệu phân tán cho time series, hỗ trợ Prometheus;
100 sự kiện web ấn tượng được Chrome developers ghi nhận.
Góc Sponsors
Là một trong những siêu ứng dụng hàng đầu ở khu vực Đông Nam Á, Grab cung cấp đa dạng dịch vụ cho hơn 187 triệu người dùng tại 428 thành phố ở tám quốc gia. Tại Grab, chúng tôi tin rằng nhân tài chính là trái tim của công ty, vì vậy chúng tôi luôn cố gắng tạo ra một môi trường tuyệt vời để tối ưu hoá tiềm năng của các Grabbers.
Những lý do bạn sẽ thích làm việc ở Grab:
Đồng nghiệp thân thiện, chuyên môn cao.
Môi trường làm việc đa quốc gia, cân bằng giữa cuộc sống và công việc (work-life balance)
Được tham gia giải quyết các bài toán khó (high scale, high traffic), với nhiều impact (vài trăm triệu người dùng)
Lương tháng 13 + lương thưởng bonus theo hiệu quả công việc.
Rất nhiều khoá học training đào tạo nội bộ cũng như đào tạo được cung cấp bởi các đối tác như Microsoft, Amazon, ..
Hiện văn phòng R&D của Grab đang tuyển nhiều vị trí như: Backend Developer, Frontend Developer, DevOps Engineer, Lead Software Engineer, ... Bạn có thể tham khảo tại Jobs - Grab Careers để biết thêm chi tiết.
Quotes
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
– Martin Fowler
Bạn đánh giá nội dung số newsletter này thế nào?
(1 = Rất tệ / 5 = Rất tốt)
Đánh giá của các bạn sẽ giúp chúng tôi liên tục cải thiện nội dung Newsletter!