avatar
每次苹果更新iOS# Apple - 家有苹果
l*g
1
最近Amazon面试好像喜欢问LRU (least recently used cache)的设计
我用doubly-linked list 和 hashtable 实现了一个简单的LRU, 抛砖引玉,供大家做
参考。祝大家都顺利拿到offer.
using System;
using System.Collections.Generic;
namespace LRU
{
public class Cache
{
public class Container
{
public Object obj;
public Container next;
public Container prev;
public Container(object o)
{
this.obj = o;
}
}
private const int MaxSize = 100;
private Container start;
private Container end;
private Dictionary lookupTable;
public Cache()
{
lookupTable = new Dictionary();
}
public void PutObj(object obj)
{
Container newNode;
if (lookupTable.TryGetValue(obj, out newNode))
{
// object already exists in cache. no need to cache it again.
return;
}
newNode = new Container(obj);
if (lookupTable.Count == MaxSize)
{
// Purge 20% of the cache
for (int i = 0; i < MaxSize / 5; i++)
{
lookupTable.Remove(start.obj);

start = start.next;
start.prev = default(Container);
}
GC.Collect();
}
if (lookupTable.Count < 1)
{
end = start = newNode;
}
else
{
end.next = newNode;
newNode.prev = end;
end = end.next;
}
lookupTable.Add(obj, newNode);
}
public Container GetObj(Object obj)
{
Container tmpNode;
if (!lookupTable.TryGetValue(obj, out tmpNode))
{
// If the object doesn't exist in cache
return default(Container);
}
// if the object is at the end of cache list, no need to shift its position.
if (tmpNode != end)
{
if (tmpNode == start)
{
start = start.next;
start.prev = default(Container);
}
else
{
tmpNode.prev.next = tmpNode.next;
tmpNode.next.prev = tmpNode.prev;
}
tmpNode.prev = end;
end.next = tmpNode;
end = end.next;
end.next = default(Container);
}
return tmpNode;
}
}
}
avatar
w*e
2
看到版上经常有人在问到底该申请哪个卡,发个贴列出几点供参考:
开卡:UA只需要消费一次就给50000点,开附卡再加5000点,一年花两万五额外10000点
蓝宝石则需要在三个月内花够三千给40000点
【UA胜,开卡bonus多】
积分:UA买UA机票2X,其他X1
蓝宝石旅行(机票/租车/酒店等)/吃饭都是2X,其他X1,每年额外7%奖励
【蓝宝石胜,积分累积快】
灵活性:UA只能转UA里程,坐UA航班有好处,如第一件行李免费托运等
蓝宝石可以1:1转到UA/Southwest/British Airways/Korean Air还有酒店等
【蓝宝石胜,灵活性大】
境外:Explorer 3%,蓝宝石没有foreign transaction fee
年费:都是$95,第一年免
两张卡都是Chase家的好卡,主要还是看消费习惯决定选哪一张,比如:常飞UA的很明
显优先考虑Explorer,不仅2X还免行李费,偶尔还有额外里程奖励;飞行没有特别固定
航空公司的,蓝宝石的灵活性2X明显更适合你
UA需要从里程账户里登入才可能看到65000而不是40000的offer
https://creditcards.chase.com/credit-cards/united-airlines-credit-card.aspx
https://creditcards.chase.com/sapphire/credit-cards/sapphire-preferred-card/
avatar
f*s
3
想给孩子做,让他用来写中文,可是用inserting textbook inserting shapes等等花
了不少时间做出来的不好用。。。 哪里能下载,或者大家有做好的经验吗?
avatar
S*E
4
第一件事
就是把那些新“feature”禁用掉
比如Home键,现在操作搞得多复杂,learning curve越来越steep,还经常误触发。
怀念乔布斯时代,有次发布操作系统说zero new feature,就是说把老版本做得更顺畅
是第一位的
这种不停加没用反而烦人的“feature”,灰常像烙印的马工风格
avatar
E*n
5
用minheap + hastable行吗?
这样可以在log n时间里找到时间最久的,然后删除

【在 l*****g 的大作中提到】
: 最近Amazon面试好像喜欢问LRU (least recently used cache)的设计
: 我用doubly-linked list 和 hashtable 实现了一个简单的LRU, 抛砖引玉,供大家做
: 参考。祝大家都顺利拿到offer.
: using System;
: using System.Collections.Generic;
: namespace LRU
: {
: public class Cache
: {
: public class Container

avatar
k*t
6
为什么我的UA explore有foreign transaction fee,不公平呀~~~~

【在 w*****e 的大作中提到】
: 看到版上经常有人在问到底该申请哪个卡,发个贴列出几点供参考:
: 开卡:UA只需要消费一次就给50000点,开附卡再加5000点,一年花两万五额外10000点
: 蓝宝石则需要在三个月内花够三千给40000点
: 【UA胜,开卡bonus多】
: 积分:UA买UA机票2X,其他X1
: 蓝宝石旅行(机票/租车/酒店等)/吃饭都是2X,其他X1,每年额外7%奖励
: 【蓝宝石胜,积分累积快】
: 灵活性:UA只能转UA里程,坐UA航班有好处,如第一件行李免费托运等
: 蓝宝石可以1:1转到UA/Southwest/British Airways/Korean Air还有酒店等
: 【蓝宝石胜,灵活性大】

avatar
p*n
8
我最不爽的就是把“slide to unlock”这个功能去掉了, 这是哪个傻逼想出来的主意
,这笔债得算到老印头上。
avatar
l*g
9
用doubly linked list + hashtable, 找时间最久的object和任意一个object, 时间都
是O(1)
用min-heap当然也可以,不过你得给每个object加额外的timestamp,需要对timestamp
做很多比较操作
另外,因为min-heap里的element的index一直在变动,而hashtable却需要存比较固定
的index(或reference)来search, 所以这个min-heap不适合用常用的array来implement
;而只能用tree来implement;那样,跟doubly linked list相比就更没有优势,因为
min-heap的tree node需要保存
3个指针(left, right, parent).
综合起来,还是doubly linked list简单的多

【在 E***n 的大作中提到】
: 用minheap + hastable行吗?
: 这样可以在log n时间里找到时间最久的,然后删除

avatar
w*e
10
不好意思,没有的是club卡不是explorer卡,我改一下

【在 k****t 的大作中提到】
: 为什么我的UA explore有foreign transaction fee,不公平呀~~~~
avatar
r*a
11
give me your email, I have a spreadsheet which allows you to generate "Miao
Hong" for kids to trace Chinese characters

【在 f*********s 的大作中提到】
: 想给孩子做,让他用来写中文,可是用inserting textbook inserting shapes等等花
: 了不少时间做出来的不好用。。。 哪里能下载,或者大家有做好的经验吗?

avatar
H*o
12
严重同意

【在 p*********n 的大作中提到】
: 我最不爽的就是把“slide to unlock”这个功能去掉了, 这是哪个傻逼想出来的主意
: ,这笔债得算到老印头上。

avatar
a*7
13
why double linked list. Will single list work?
avatar
F*n
14
记得ua没有境外费的

【在 w*****e 的大作中提到】
: 看到版上经常有人在问到底该申请哪个卡,发个贴列出几点供参考:
: 开卡:UA只需要消费一次就给50000点,开附卡再加5000点,一年花两万五额外10000点
: 蓝宝石则需要在三个月内花够三千给40000点
: 【UA胜,开卡bonus多】
: 积分:UA买UA机票2X,其他X1
: 蓝宝石旅行(机票/租车/酒店等)/吃饭都是2X,其他X1,每年额外7%奖励
: 【蓝宝石胜,积分累积快】
: 灵活性:UA只能转UA里程,坐UA航班有好处,如第一件行李免费托运等
: 蓝宝石可以1:1转到UA/Southwest/British Airways/Korean Air还有酒店等
: 【蓝宝石胜,灵活性大】

avatar
n*1
15
我前2天还发帖子问了,有个网站可以:hanlexon.com
avatar
o*o
16
Acrobat就是被这帮狗屁不通的烙印从经典一步一步改成狗屎。windows也是一样。
avatar
r*e
17
single list can not delete element in O(1) given a pointer to the element

【在 a******7 的大作中提到】
: why double linked list. Will single list work?
avatar
o*o
19
Taptic engine和air pod就是这样傻逼不解决任何问题的feature。完全是研发能力下
降的表现,这个狗屎taptic比技术成熟的小电机大了有十倍,提升微不足道,只是为了
省称一项新功能功能,砍掉了电池。
avatar
C*y
20
单链表不好删除,需要知道前一个node的地址
如果不考虑效率,可以先把要删除的节点拷贝出来,然后把后一个节点拷贝到要删除的
节点,再删除后一个节点,比较麻烦

【在 a******7 的大作中提到】
: why double linked list. Will single list work?
avatar
F*n
21
Thanks。我记错了。这几张chase卡是没有境外费的:
Hyatt Visa, British Airways Visa, Priority Club Rewards Visa Signature, Pres
idential Plus MasterCard, Chase Sapphire Preferred, Marriott Rewards Premier
和 United Mileage Plus Club Visa

【在 w*****e 的大作中提到】
: club年费$395那张卡没有境外费,explorer有的
: https://creditcards.chase.com/Compare.aspx?list=7,23,3,4

avatar
P*P
22
我直接越狱禁止更新。
avatar
a*7
23
I see. Single list can be delete in O(1) except the last node. Thank you,
guys.
avatar
w*e
24
开始也记混了club跟explorer,谢谢补充其他无境外费的卡

Pres
Premier

【在 F****n 的大作中提到】
: Thanks。我记错了。这几张chase卡是没有境外费的:
: Hyatt Visa, British Airways Visa, Priority Club Rewards Visa Signature, Pres
: idential Plus MasterCard, Chase Sapphire Preferred, Marriott Rewards Premier
: 和 United Mileage Plus Club Visa

avatar
i*x
25
iphone7完全用不上啊。举起手机就亮屏了,如果再开启轻触解锁,轻轻一摸就进入主
屏了

【在 p*********n 的大作中提到】
: 我最不爽的就是把“slide to unlock”这个功能去掉了, 这是哪个傻逼想出来的主意
: ,这笔债得算到老印头上。

avatar
E*n
26
但是使用doubly linked list每插入一个元素,需要O(n)时间,
而minheap,插入新的元素只需要O(log n)时间(reheap)

timestamp
implement

【在 l*****g 的大作中提到】
: 用doubly linked list + hashtable, 找时间最久的object和任意一个object, 时间都
: 是O(1)
: 用min-heap当然也可以,不过你得给每个object加额外的timestamp,需要对timestamp
: 做很多比较操作
: 另外,因为min-heap里的element的index一直在变动,而hashtable却需要存比较固定
: 的index(或reference)来search, 所以这个min-heap不适合用常用的array来implement
: ;而只能用tree来implement;那样,跟doubly linked list相比就更没有优势,因为
: min-heap的tree node需要保存
: 3个指针(left, right, parent).
: 综合起来,还是doubly linked list简单的多

avatar
j*f
27
对 习惯了很方便

【在 i****x 的大作中提到】
: iphone7完全用不上啊。举起手机就亮屏了,如果再开启轻触解锁,轻轻一摸就进入主
: 屏了

avatar
g*n
28
LRU cache的insert都在头部。。。
按照LRU的常规做法,getObj之后要移到list的头上吧。。。
avatar
t*6
29
Slide to unlock是果子multi touch的精髓;从一个区域放大到整个屏幕是这个精髓的
升级;把这个功能去掉变为点按home键是某二货想出来的损招。

【在 p*********n 的大作中提到】
: 我最不爽的就是把“slide to unlock”这个功能去掉了, 这是哪个傻逼想出来的主意
: ,这笔债得算到老印头上。

avatar
s*i
30
用single linkedlist也可以阿,就是datastrcture 不那么decent,你保存每次维护2
个pointer, prev, current,不就可以了?还省空间
avatar
t*6
31
家里的老人一直问我如何可以把这个功能观点,为了省电。我只好把小圆点放出来然后
把震动调到最低。
其实多费了多少电我不知道,但是在彻底取消掉home键之前搞出个这么个破烂玩意儿说
明果子决策圈问题很大。苹果在macbook上做这个勉强可以理解因为空间不够,要做轻
要做薄。手机上完全足够空间(因为上一代产品一点儿问题都没有),这个决定的直接
结果就是系统一旦崩溃连home键都要失灵。
Old home button still works, why bother with something that does not add
anything but cause more problem?

【在 o**o 的大作中提到】
: Taptic engine和air pod就是这样傻逼不解决任何问题的feature。完全是研发能力下
: 降的表现,这个狗屎taptic比技术成熟的小电机大了有十倍,提升微不足道,只是为了
: 省称一项新功能功能,砍掉了电池。

avatar
g*n
32
LRU cache,如果已经满了 要insert一个新的 就要把lru(tail)那个干掉。。。
不是double link的话 就不知道下次哪个是tail了。。。

2

【在 s*i 的大作中提到】
: 用single linkedlist也可以阿,就是datastrcture 不那么decent,你保存每次维护2
: 个pointer, prev, current,不就可以了?还省空间

avatar
t*6
33
同理 airpod
丑不说,卖那么贵,没有提升任何使用体验
需要蓝牙耳机我自己不能买一个?

【在 o**o 的大作中提到】
: Taptic engine和air pod就是这样傻逼不解决任何问题的feature。完全是研发能力下
: 降的表现,这个狗屎taptic比技术成熟的小电机大了有十倍,提升微不足道,只是为了
: 省称一项新功能功能,砍掉了电池。

avatar
l*g
34
在这个特殊case里,插入元素总是发生在最后,所以你保存一个end指针就可以了,插
入就是O(1)时间

【在 E***n 的大作中提到】
: 但是使用doubly linked list每插入一个元素,需要O(n)时间,
: 而minheap,插入新的元素只需要O(log n)时间(reheap)
:
: timestamp
: implement

avatar
b*t
35
为了防水

【在 t******6 的大作中提到】
: 家里的老人一直问我如何可以把这个功能观点,为了省电。我只好把小圆点放出来然后
: 把震动调到最低。
: 其实多费了多少电我不知道,但是在彻底取消掉home键之前搞出个这么个破烂玩意儿说
: 明果子决策圈问题很大。苹果在macbook上做这个勉强可以理解因为空间不够,要做轻
: 要做薄。手机上完全足够空间(因为上一代产品一点儿问题都没有),这个决定的直接
: 结果就是系统一旦崩溃连home键都要失灵。
: Old home button still works, why bother with something that does not add
: anything but cause more problem?

avatar
f*w
36
LRU 按理该是怎么操作的? 我看你的代码每次删掉 20%的数据 这样对么? 按我
的理解 应该每次只有一个被踢出去才对
avatar
s*i
37
thanks. ic .

【在 g*****n 的大作中提到】
: LRU cache,如果已经满了 要insert一个新的 就要把lru(tail)那个干掉。。。
: 不是double link的话 就不知道下次哪个是tail了。。。
:
: 2

avatar
l*g
39
这个属于设计细节,我觉得无关对错
等cache满了之后,如果你选择每加一个踢出去一个,当然可以,但那样cache就会始终
处于满负荷的状态。所以不妨等满了之后,清掉一定比例的obsolete data.

【在 f*****w 的大作中提到】
: LRU 按理该是怎么操作的? 我看你的代码每次删掉 20%的数据 这样对么? 按我
: 的理解 应该每次只有一个被踢出去才对

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。