- Tạo ứng dụng Spring Boot bằng Spring Launchizr
- Cấu hình Cassandra trong Spring Boot
- Định cấu hình nhóm kết nối Tomcat trên Spring Boot
- Định tuyến tin nhắn Camel đến Artemis được nhúng bằng WildFly
xin vui lòng làmThuật toán bộ nhớ đệm ít được sử dụng nhất (LFU)Thiết kế và triển khai cấu trúc dữ liệu.
Triển khai lớp LFUCache:
LFUCache(int dung lượng) - Khởi tạo đối tượng int với dung lượng của cấu trúc dữ liệu get(int key) - Nhận giá trị của khóa nếu nó tồn tại trong bộ đệm, nếu không thì trả về -1. void put(int key, int value) - Nếu khóa đã tồn tại, hãy thay đổi giá trị của nó; nếu khóa không tồn tại, hãy chèn cặp khóa-giá trị. Khi bộ đệm đạt đến dung lượng của nó, những mục ít được sử dụng nhất sẽ bị xóa trước khi các mục mới được chèn vào. Trong vấn đề này, khi có sự ràng buộc (tức là hai hoặc nhiều phím có cùng tần suất sử dụng), thì nên loại bỏ phím không được sử dụng gần đây nhất.
Để xác định các khóa ít được sử dụng nhất, bộ đếm mức sử dụng có thể được duy trì cho từng khóa trong bộ đệm.Khóa có số lần sử dụng nhỏ nhất là khóa cũ nhất chưa được sử dụng.
Khi một khóa lần đầu tiên được chèn vào bộ đệm, bộ đếm mức sử dụng của nó được đặt thành 1 (do thao tác đặt). Khi thao tác lấy hoặc đặt được thực hiện trên một phím trong bộ đệm, bộ đếm mức sử dụng sẽ tăng lên.
Các hàm get và put phải chạy với độ phức tạp thời gian trung bình là O(1).
Ví dụ:
Đầu vào: ["LFUCache", "put", "put", "get", "put", "get", "get", "put", "get", "get", "get"] [[2 ], [1, 1], [2, 2], [1], [3, 3], [2], [3], [4, 4], [1], [3], [4]] Đầu ra: [null, null, null, 1, null, -1, 3, null, -1, 3, 4] Giải thích: // cnt(x) = số lần sử dụng của khóa x // cache=[] sẽ hiển thị thứ tự được sử dụng gần đây nhất (ngoài cùng bên trái Phần tử là mới nhất) LFUCache lfu = new LFUCache(2); lfu.put(1, 1); // cache=[1,_], cnt(1)=1 lfu.put(2, 2); cache=[2,1], cnt(2)=1, cnt(1)=1 lfu.get(1); // Trả về 1 // cache=[1,2], cnt(2)=1, cnt (1)=2 lfu.put(3, 3); // Xóa key 2, vì cnt(2)=1, số lần sử dụng là nhỏ nhất // cache=[3,1], cnt(3)=1 , cnt( 1)=2 lfu.get(2); // Trả về -1 (không tìm thấy) lfu.get(3); // Trả về 3 // cache=[3,1], cnt(3)=2, cnt(1)=2 lfu.put(4, 4); // Xóa key 1, cnt của 1 và 3 giống nhau, nhưng 1 lâu nhất không được sử dụng // cache=[4,3], cnt(4)= 1, cnt(3)=2 lfu.get(1); // Trả về -1 (không tìm thấy) lfu.get(3); // Trả về 3 // cache=[3,4], cnt(4)=1, cnt(3)=3 lfu.get(4); // Trả về 4 // cache=[3,4], cnt(4)=2, cnt(3)=3
gợi ý:
0 <= công suất <= 104
0 <= phím <= 105
0 <= giá trị <= 109
Gọi phương thức get và put tối đa 2 * 105 lần
Nguồn: LeetCode
Liên kết: https://leetcode-cn.com/problems/lfu-cache
(1) Thiết kế cấu trúc dữ liệu
Tham khảo ý tưởngCác câu hỏi về thuật toán giống như việc xây dựng Lego: Tôi sẽ hướng dẫn bạn từng bước để tháo dỡ thuật toán LFU.
//Ý tưởng 1——Lớp thiết kế cấu trúc dữ liệu LFUCache { //Dung lượng tối đa của bộ đệm LFU int dung lượng; // Tần số tối thiểu của bộ đệm LFU int minFreq; // Khóa để ánh xạ giá trị HashMap keyToValue; Khóa để ánh xạ tần số HashMap keyToFreq; // tần số để ánh xạ danh sách khóa HashMap> freqToKeys; LFUCache công khai (công suất int) { //Khởi tạo this.capacity = công suất; this.minFreq = 0; this.keyToValue = new HashMap<>(); ; this.freqToKeys = new HashMap<>(); } public int get(int key) { if (keyToValue.containsKey(key) == false) { //Không tìm thấy khóa return -1; } else { // Nếu tìm thấy khóa, tần số của nó sẽ tăng thêm một tăngFreq(key); key); } } public void put(int key, int value) { if (this.capacity <= 0) { return; } if (keyToValue.containsKey(key)) { /*if key đã tồn tại, chỉ cần sửa đổi giá trị tương ứng*/ keyToValue.put(key, value); // Tần suất của khóa tăng lên một tăngFreq(key); } /*Nếu khóa không tồn tại, bạn cần chèn nó* / if (this.capacity <= keyToValue.size()) { //Dung lượng bộ đệm LFU đã đầy, bạn cần loại bỏ khóa tối thiểu freq RemoveMinFreqKey(); } //Thay thế (khóa, giá trị) Thêm vào keyToValue keyToValue.put(key, value); //Thêm (key, 1) vào keyToFreq keyToFreq.put(key, 1); //Cập nhật freqToKeys freqToKeys.putIfAbsent(1, new LinkedHashSet<>() ); .get(1).add(key); // minFreq sau khi chèn khóa mới Nó phải là 1 this.minFreq = 1; } // Thêm một vào tần số của khóa public void tăngFreq(int key) { //Cập nhật keyToFreq int freq = keyToFreq.get(key); 1); // Xóa khóa khỏi danh sách tương ứng với freq freqToKeys.get(freq).remove(key); // Thêm khóa vào freq + 1 freqToKeys.putIfAbsent(freq + 1, new LinkedHashSet<>()); freqToKeys.get(freq + 1).add(key); //Nếu danh sách tương ứng với freq trống, hãy xóa freq này if (freqToKeys.get( freq).isEmpty()) { freqToKeys.remove(freq); //Nếu tần số này Nó xảy ra là minFreq, sau đó cập nhật minFreq if (freq == this.minFreq) { this.minFreq++; } } } // Loại bỏ khóa có tần số nhỏ nhất public void getMinFreqKey() { //Tìm danh sách freq = minFreq từ freqToKeys' LinkedHashSet keyList = freqToKeys.get(this.minFreq); Khóa đầu tiên được thêm vào là khóa cần loại bỏ int RemoveKey = KeysList.iterator().next(); KeysList.remove(removedKey); trống freqToKeys.remove(this.minFreq); /* Không cần cập nhật minFreq tại đây vì những lý do sau: RemoveMinFreqKey() Nó có thể được gọi khi chèn key mới vào put(), và trong code của put(), minFreq sẽ được cập nhật lên 1 khi chèn key mới nên không cần cập nhật minFreq tại đây */ } // Xóa keyToValue đã xóa trong keyToValue .remove(removedKey); // Xóa khóa đã xóa trong keyToFreq keyToFreq.remove(removedKey); Đối tượng LFUCache của bạn sẽ được khởi tạo và gọi như sau: * LFUCache obj = new LFUCache(capacity); * int param_1 = obj.get(key);
Tôi đã đọc về JSR 107 Caching (JCache). Tôi bối rối: theo như tôi biết, mỗi CPU quản lý bộ nhớ đệm của nó (không có bất kỳ sự trợ giúp nào từ hệ điều hành). Vậy tại sao chúng ta cần trình xử lý bộ đệm Java? (Nếu C.
Được rồi, tôi mới làm quen với jQuery. Tôi đã loay hoay một chút ở đây và ở đó và quen với nó. Cuối cùng tôi đã tìm ra nó (nó không khó như một số người nghĩ). Vì vậy, đưa ra liên kết này: http://jqueryui.com/sortable/#dis
Tôi đang sử dụng Struts 2 và Hibernate. Tôi có một bảng đơn giản chứa trường ngày lưu trữ thông tin về thời điểm xảy ra một hành động cụ thể. Giá trị ngày này được hiển thị trong jsp của tôi. Vấn đề tôi gặp phải là ngủ đông nhiều hơn
Tôi hơi không chắc chuyện gì đang xảy ra ở đây, nhưng tôi đang cố gắng giải thích chuyện gì đang xảy ra và có thể viết một câu hỏi hay hơn khi tôi hiểu chính xác mình đang hỏi gì. Tôi vừa cài đặt Varnish và nó có vẻ rất phù hợp với nhu cầu của tôi. Đây là Magneto 2
Sau khi giải quyết vấn đề với Project Euler, tôi tìm thấy mã Haskell sau trong diễn đàn: fillRow115 minLength = cache which cache = ((map fill
Tôi đang cố gắng tìm cách lưu vào bộ đệm hoặc lưu trữ một số gói python nhất định cho mỗi máy tính trên mạng của mình. Tôi đã xem xét các giải pháp sau: pypicache nhưng nó không còn được phát triển tích cực nữa, tác giả khuyên dùng devpi, xem tại đây: https://bitbuc
Một câu hỏi xuất hiện trong đầu là liệu ổ cắm web có thể được lưu vào bộ nhớ đệm ngay từ đầu không? Trong cấu trúc liên kết của tôi, tôi có 2 máy chủ Apache (với Google PageSpee
Tôi khó có thể nhận ra sự khác biệt giữa các vùng bộ đệm (HĐH) khác nhau. Tôi muốn giải thích ngắn gọn về disk\buffer\swap\page cache. Họ sống ở đâu? Sự khác biệt chính giữa chúng là gì? Theo tôi hiểu, bộ đệm trang là một phần của bộ nhớ chính được sử dụng để lưu trữ dữ liệu thu được từ các thiết bị I/O.
1. Câu hỏi yêu cầu bạn thiết kế và triển khai cấu trúc dữ liệu cho thuật toán bộ đệm ít được sử dụng nhất (LFU). Triển khai lớp LFUCache: LFUCache(int energy) - khởi tạo đối tượng với dung lượng của cấu trúc dữ liệu
1. Câu hỏi yêu cầu bạn thiết kế và triển khai cấu trúc dữ liệu thỏa mãn ràng buộc bộ đệm LRU (ít được sử dụng gần đây nhất). Triển khai lớp LRUCache: ① LRUCache(int dung lượng) sử dụng số nguyên dương làm dung lượng dung lượng
Tôi muốn tắt bộ nhớ đệm cho một số trang khi truy cập Chế độ xem này. Nó phù hợp với các trang chỉ truy vấn các đối tượng mô hình. Có vẻ như khi 'Django.middleware.cache.FetchFromCacheMiddleware' được bật
tài liệu là trạng thái phần tử ExePackage Mục đích của thuộc tính Cache là lưu trữ gói mặc định.
Tôi biết docker lưu trữ từng hình ảnh bằng các lớp. Nếu tôi có nhiều người dùng trên một máy chủ phát triển và mọi người đang chạy cùng một Dockerfile nhưng lưu trữ hình ảnh dưới dạng user1_myapp thì lưu nó dưới dạng use.
Sau một vài năm không gặp vấn đề về bộ nhớ đệm trong Codeigniter, tôi đã phát hiện ra một vấn đề. Tôi đã thấy câu hỏi này ở nơi khác nhưng không có giải pháp nào hiệu quả với tôi. Ví dụ: nếu tôi thay đổi một số văn bản html đơn giản trong Xem và tải lên tệp mới và nhấn F5
Tôi đã đọc về Janusgraph Cache trong tài liệu Janusgraph. Về bộ nhớ đệm giao dịch, tôi có một vài nghi ngờ. Tôi đang sử dụng máy chủ janusgrah được nhúng trong ứng dụng của mình. Nếu tôi chỉ đọc ví dụ:
Tôi tự hỏi liệu có bất kỳ lệnh nào từ thiết bị đầu cuối mà tôi có thể sử dụng để phù hợp với việc sử dụng Tệp thực thi > Bộ nhớ đệm/Khởi động lại không hợp lệ trong Android Studio hay không. Cảm ơn bạn! Câu trả lời hay nhấtTheo một nhân viên của JetBrains
Tôi muốn tạo một trình trang trí python cho chức năng bộ nhớ. Ví dụ: nếu @memoization_trang trí def add(a, b, Negative=False): print "Com
Tôi thường sử dụng $(this) trong trình xử lý sự kiện jQuery và không bao giờ lưu nó vào bộ đệm. Nếu tôi thực hiện var $this = $(this); và sử dụng các biến thay vì hàm tạo, liệu mã của tôi có đạt được hiệu suất bổ sung đáng kể nào không?
Vâng, thành thật mà nói, tôi không biết sơn vcl, tôi có thể giải quyết một số vấn đề cơ bản, nhưng tôi không hiểu lắm, đó là lý do tại sao tôi gặp vấn đề. Tôi đang cố gắng thiết lập tính năng ngăn chặn bộ nhớ đệm thông qua yêu cầu http, nhưng yêu cầu này không đi qua DNS mà thông qua Varn
Tôi gặp phải sự cố này khi tải khoảng 4000 người dùng đồng thời trên trang WP của tôi. Đây là cấu hình của tôi: Bộ cân bằng tải F5 ---> Varnish 4, 8 lõi, RAM 32 Gb ---> 9 phụ trợ, 4 lõi, mỗi lõi 16 RA
Tôi là một lập trình viên xuất sắc, rất giỏi!