View profile

#234 - Kỹ thuật bypass Cloudflare

Grokking Vietnam
Grokking Vietnam
Trong số này, chúng ta cùng tìm hiểu về:
  • Design Patterns of Event-driven Architecture 
  • The Difficult Life of the Data Lead
  • Cách bypass Cloudflare
  • Lời giải bài Find Two Non-overlapping Sub-arrays Each With Target Sum.
  • Tech Talk:  “𝑨𝒑𝒑𝒍𝒊𝒄𝒂𝒕𝒊𝒐𝒏 𝒐𝒇 𝒑𝒓𝒐𝒃𝒂𝒃𝒊𝒍𝒊𝒔𝒕𝒊𝒄 𝒅𝒂𝒕𝒂 𝒔𝒕𝒓𝒖𝒄𝒕𝒖𝒓𝒆𝒔 𝒂𝒏𝒅 𝒂𝒍𝒈𝒐𝒓𝒊𝒕𝒉𝒎𝒔 𝒊𝒏 𝒎𝒐𝒅𝒆𝒓𝒏 𝒅𝒂𝒕𝒂 𝒔𝒚𝒔𝒕𝒆𝒎𝒔”
Ngoài ra các bạn vẫn có thể tiếp tục đặt mua ấn phẩm Dijkstra tập 2 tại đây.

News
Tech Talk
Những bài viết hay
Góc Lập Trình
Đề ra tuần này: Last Stone Weight II
(by ndaadn)
Cho một mảng các số nguyên dương stones, với stones[i] là trọng lượng của viên đá thứ i.
Ta chọn hai hòn đá bất kỳ, có trọng lượng lần lượt là x, y và đập hai hòn đá vào nhau. Giả sử x <= y, kết quả của việc đập là:
Nếu x == y, cả hai hòn đá đều nát vụn
Nếu x < y, ta thu được một hòn đá nhỏ hơn có trọng lượng mới là (y - x)
Ta cứ đập như vậy cho tới khi ta chỉ còn nhiều nhất một hòn đá.
Hãy trả lại trọng lượng nhỏ nhất có thể của hòn đá cuối cùng. Nếu không còn hòn đá nào, trả lại 0.
Ví dụ:
Input: arr = [7,3,4,7], target = 7
Output: 2
Giải thích: các mảng con thỏa mãn là ([7], [3,4] và[7]), tuy nhiên ta sẽ chọn mảng con thứ nhất và thứ 3 vì chúng có tổng số phần tử ít nhất.
Lời giải đề bài tuần trước Find Two Non-overlapping Sub-arrays Each With Target Sum
(by phucnh)
Để tìm mảng con có tổng bằng một số cho trước, ta có hai cách tiếp cận i) sử dụng tổng tiền tố (prefix sum) hoặc ii) cửa số trượt (sliding window) nếu mảng chỉ chứa số dương. Trên thực tế, ta có thể giải bài này bằng cả 2 cách tiếp cận, xin giới thiệu tới bạn đọc phương pháp dựa trên cách tiếp cận tổng tiền tố.
Để tìm mảng con có tổng bằng một số target cho trước bằng tổng tiền tố, ta thực hiện theo các bước như sau:
1. Duyệt mảng và tính tổng tiền tố, lưu vào bảng băm prefixSums chứa cặp <key=prefixSum, value=index>
2. Duyệt mảng lần thứ hai, nếu ta đã gặp tổng tiền tố bằng (prefixSum - target), ta tìm thấy mảng con cần tìm là nums[index - prefixSums.get(prefixSum at index - target)…index]
Bạn đọc có thể tham khảo ví dụ sau:
index. -1  0  1  2  3  4
nums. n/a 2  1  2  2  1
psum. 0   2  3  5  7  8
Các mảng con có tổng bằng 3 được bôi đỏ, và ta có 
- psum[1] - 3 = 3 - 3 = 0, bằng psum[-1]
- psum[4] - 3 = 8 - 3 = 5, bằng psum[2]
Trong bài này, do tất các các số đều là số dương (>= 1), nên tổng tiền tố là duy nhất. Áp dụng cách làm trên, ta có thể tìm thấy mảng con kết thúc tại vị trí index. Tương tự, ta cũng đồng thời tìm được mảng con bắt đầu tại vị trí index bằng cách kiểm tra tổng tiền tố (prefixSum + target) trong bảng băm.
Ta có giải thuật như sau:
Độ phức tạp về thời gian và không gian của giải thuật đều là O(n), với n là độ dài của mảng đầu vào.
Code & Tools
  • Data Studio - BI tool giúp xây dựng các Dashboards và Reports trực quan và miễn phí của Google
  • Wasmtime: A fast and secure runtime for WebAssembly
  • Seaborn:  a library for making statistical graphics in Python
Feedback
Bạn đánh giá nội dung số newsletter này thế nào?
(1 = Rất tệ / 5 = Rất tốt)
👎 1 —— 2 —— 3 —— 4 —— 5 👍 
(Việc đánh giá của các bạn là rất quan trọng, sẽ giúp chúng tôi liên tục cải thiện nội dung newsletter tốt hơn)
Grokking mang lại cho các bạn những kiến thức mới mẻ và hữu ích thông qua:
  • Tech Talk: Là một hoạt động thường xuyên của Grokking từ những ngày đầu thành lập. Tại đây các diễn giả chia sẻ kiến thức xoay quanh Computer Science và Software Engineer. Các buổi Tech Talk đều được record và upload lên kênh youtube của Grokking.
  • Grokking Knowledge Graph: Tập hợp những nguồn kiến thức phong phú với hơn 1000 bài viết chọn lọc, các đầu sách, khóa học, v.v… Các bài viết đều được gán nhãn để giúp bạn đọc dễ dàng tìm kiếm.
  • Webinar: Là chương trình kết nối các kỹ sư Việt Nam và các kỹ sư đang làm việc tại các công ty công nghệ hàng đầu thế giới.
  • Dijkstra: Một ấn phẩm được xuất bản bởi các thành viên của Grokking. Với những bài viết đào sâu vào kỹ thuật và kiến thức khoa học máy tính.
  • Kipalog: Nền tảng chia sẻ kiến thức dành cho các lập trình viên.
  • Newsletter: Những bài viết hay về công nghệ sẽ được gửi tới bạn hàng tuần qua email.
Chúc các bạn sẽ tìm được nhiều điều mới mẻ khi đến với Grokking và xin hẹn gặp lại các bạn vào tuần sau.
Quotes
“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.”
― Linus Torvalds
Did you enjoy this issue? Yes No
Grokking Vietnam
Grokking Vietnam

Cảm ơn bạn đã dành thời gian đọc newsletter kỳ này và chúng tôi hi vọng rằng bạn đã khám phá ra một số điều mới mẻ từ các bài viết trên. Các bạn có thể đọc lại các số cũ tại website newsletter.grokking.org

In order to unsubscribe, click here.
If you were forwarded this newsletter and you like it, you can subscribe here.
Created with Revue by Twitter.
Viet Nam