动态代理是 Java
语言中非常经典的一种设计模式,也是所有设计模式中最难理解的一种。本文将通过一个简单的例子模拟 JDK
动态代理实现,让你彻底明白动态代理设计模式的本质。
什么是代理
从字面意思来看,代理比较好理解,无非就是代为处理的意思。举个例子,你在上大学的时候,总是喜欢逃课。因此,你拜托你的同学帮你答到,而自己却窝在宿舍玩游戏… 你的这个同学恰好就充当了代理的作用,代替你去上课。
又一年即将结束,时间过得真的很快,快到不敢静下来细细回忆。小时候觉得二十多岁的人年纪好大,再后来觉得三十岁应该离自己很远吧,没想到自己的三十而立之年来的这么“快”,总感觉自己还很是个小孩,总感觉自己还没长大,实际已经到了上有老下有小的年纪…
19 年最开心的事儿就是当了爸爸,真心的感谢媳妇艰辛付出,感激上天给我们最好的礼物。最不幸的事是父亲得了一场大病,家人辛苦奔波不说父亲也是受尽了病痛的折磨,医院真是最不愿意去的地方。有时候天真的想,如果能让家人健健康康无病无痛,付出多少都会有人愿意吧!
Rust
中字符串和 Java
和 Go
中的表示有很大的区别,刚开始接触的时候有点儿懵,今天花点时间总结备忘一下。
Rust
字符串有两种形式:str
和 String
,str
是内置的原始数据类型,通常是以借用的形式(&str
字符串 slice
)使用,而 String
是标准库提供的一种结构体,内部存储一个 u8
类型的 Vec
:
1 | pub struct String { |
网关做灰度的时候,要控制流量的比例,比如 3:7 的分发流量到两个不同版本的服务上去。刚开始的想法是每次流量过来生成 100 以内的随机数,随机数落在那个区间就转到那个版本的服务上去,但是发现这样无法较精准的保证 3:7 的比例,因为有可能某段时间内生成的随机数大范围的落在某个区间内,比如请求了 100 次,每次生成的随机数都是大于 30 的,这样 70% 比例的服务就承受了 100% 的流量。
接下来想到了第二种解决方案,能够保证 10(基数) 倍的流量比例正好是 3:7,思路如下:
1、生成 0 - 99 的数组(集合)
2、打乱数组(集合)的顺序,为了防止出现某比例的流量集中出现
3、全局的计数器,要考虑原子性
4、从数组(集合)中取出计数器和 100 取余后位置的值
5、判断取到的值落在那个区间
天气暖和了,19 年的跑步计划已经在心中盘算好久了,本打算昨天生日的时候去开始的,结果天公不作美,一直在下小雨。
关于跑步,一开始为了减肥,现在慢慢喜欢上了这项运动。其实跑步很折磨人,总得有个目标才能坚持下来,或是为了能够在朋友圈炫耀,或是享受跑完步之后的大汗淋漓。
我会下载一个跑步软件,戴上耳机,每完成一公里就会提醒我,我也会心中默默给自己设定个目标,十公里或一个小时,每次跑步过程中我都在和自己较劲,想要放弃的时候心中总会默念,再坚持一下,已经完成了三分之二了,已经完成五分之四了……设了一个目标,总会能够达成,即使过程很艰难,但更喜欢达标后的小小满足感。