169. LRU - Chrome storage automatic eviction
Share
medium - accepted / - tried
Chrome uses LRU algorithm to evict data when it has to.
Watch this Youtube video for detail explanation, starting from 6:25 to 7:38.
Now you are asked to implement similar - Implement a class LRUStorage
.
- This is of course not to reflect the true implementation in Chrome.
getData
andsetData
should both be treated as data being 'used'.- considering time precision issue, your class needs to accept
getTimestamp
as second argument of constructor function for our tests.
interface OriginData { origin: string lastUsed: number size: number persistent: boolean}interface LRUStorage { capacity: number // to use the data for origin // return size of the data or undefined if not exist getData(origin: string): OriginData | undefined // updating data for origin // return boolean to indicate success or failure // If the total size exceeds capacity, // Least Recently Used non-persistent origin data other than itself should be evicted. setData(origin: string, size: number): boolean // manually clear data for origin clearData(origin: string): void // change data for origin to be persistent // it only handles existing data not the data added later // persistent data cannot be evicted unless manually clear it makePersistent(origin: string): void }