清明的花信
古代有二十四番花信之说,宋朝周辉《清波杂记》中说过:
江南自初春至首夏,有二十四番风信,梅花风最先,楝花风居后。
这二十四番花信与二十四节气有关。每年春日,自小寒至谷雨,一百二十日,八个节气,每五日为一候,计二十四候,人们在每一候内开花的植物中,挑选一种花期最准确的植物为代表,应一种花信,这就是二十四番花信风。
所谓花信风,就是指某种节气时开的花,因为是应花期而来的风,所以叫信风。人们挑选一种花期最准确的花为代表,叫做这一节气中的花信,意即带来开花音讯的风候。
立春:一候迎春、二候樱桃、三候望春
雨水:一候菜花、二候杏花、三候李花
惊蛰:一候桃花、二候棣棠、三候蔷薇
春分:一候海棠、二候梨花、三候木兰
清明:一候桐花、二候麦花、三候柳花
谷雨:一候牡丹、二候酴醾、三候楝花
按照二十四番花信的说法,清明三信是桐花、麦花、柳花,桐花是清明的标志,即所谓花信风
。
古代诗人也常借桐花来照应清明。
家住江南,又过了清明寒食。算年年落尽刺桐花,寒无力。
—— 辛弃疾《满江红·暮春》词
Spring远程命令执行漏洞
这周Spring被爆出存在RCE 0day
漏洞,看目前提供的解决方案以及漏洞触发条件似乎可以大致反推测一下原因。
目前解决方案主要还是过滤请求流量中class.*
、Class.*
、*.class.*
、*.Class.*
等关键字,再关联RCE字样,大致可以猜测漏洞是由RCE故障频发的Java序列化机制导致的,在查找了数篇博客确认后,在spring-framework
的仓库中我发现了这个PR。
https://github.com/spring-projects/spring-framework/pull/28075/files
看代码上的注释以及提交时间,似乎漏洞的原因就很明显了。
Java的对象序列化是遵循对象序列化流协议的,所以可以轻易地分析出流中的信息,并且可以进行篡改。
- 通过修改序列化流中的数据,可以篡改请求中的数据。
- 当篡改的数据不符合序列化对象的格式要求时候,可能会导致在反序列化对象的过程中抛出异常,从而拒绝服务,而频繁的异常又有可能导致CPU Load高等一系列问题。
- 反序列化对象时的运行环境中存在有漏洞的jar包,攻击者通过构造恶意数据流可以达到命令执行的效果,这次Spring漏洞触发场景有
spring-beans-*.jar
、CachedIntrospectionResults.class
就值得深挖原因了。
推荐一些Serialization相关的文章和工具。
- 《Serialization in Java – Java Serialization》
- 《Java Object Serialization》
- 《Look-ahead Java deserialization》
- 《SerialKiller》
- 《对象序列化流协议》
- 《怎么做才能让Java 序列化机制 更安全》
踩坑分享
equal与unique
这周遇到一个很有意思的坑,场景是这样,我们有一张配置表,unique index
是name字段,这个name是可以有中文、英文字母和数字组成的,在每次业务在页面修改提交配置时,服务端会去判断时新增或修改后的name以及判断是否和表中现有数据的name重复了(数据量少,查全量对比),使用的是Object.equal
。有一次业务修改了name中字母的大小写进行了保存,结果问题就来了,Object.equal
会区分大小写,而在向数据库提交时unqie index
不会区分大小写,这就导致了更新失败。
这个问题让我想到了另一个有意思的坑,就是汉字的unicode其实是有很多种类的,常用的CJK
,以及Kangxi Radical
。
可以看到下图我两次在console输入的内容是一样的,但得到的结果却不同。
> console.log('⽹' == '网')
false
> console.log('网' == '网')
true
这是因为第一行两个字分别是Kangxi Radical
和CJK
,第二行两个字都是CJK
。
这可能会导致我们日常在文件转化时文字识别出现问题,比如PDF转Word之后突然少了些字。
文章推荐
The JVM Write Barrier - Card Marking
垃圾收集器在新生代中建立了名为记忆集(Remembered Set)的数据结构,用以避免把整个老年代加进GC Roots扫描范围。事实上并不只是新生代、老年代之间才有跨代引用的问题,所有涉及部分区域收集(Partial GC)行为的垃圾收集器,典型的如G1、ZGC和Shenandoah收集器,都会面临相同的问题。
——《深入理解Java虚拟机》HotSpot的算法细节实现
下面这篇文章主要介绍了记忆集卡精度的实现。
《The JVM Write Barrier - Card Marking》
你最好的一条职业建议是什么?
Twitter上有人发了一个推,说他之前问过一个问题:“你最好的一条职业建议是什么?”,他得到了1300多个答案,最后他整理了12条最好的建议。这些建议,也被人整理成了中文发到了微博:
-
尽可能为别人减少不确定性
- Uber解决了打车的不确定性
- 亚马逊解决了送包裹的不确定性
- 你也可以通过及时更新项目进展来帮老板解决不确定性
-
公司比职位更重要
-
一旦接受了一个任务,无论多小或者多么不起眼,要把它做的特别好,超出别人的预期。这样你就能建立起一个良好的声誉,让别人知道你总能高质量的完成工作。当你建立了这种声誉,你就能得到更多的机会,更大的知名度,以及更大的成功。
-
如果我不能信任你,你再聪明都没用。
-
在你的职业生涯中,陪你走到最后的只有你自己。不是你的公司,不是你的经理,不是你的团队,只有你自己。
在做你所有职业生涯的决定时,优先考虑你自己。 -
影响你职业生涯的三件事:
- 你做什么?(工作)
- 你为谁工作?(客户)
- 和你一起工作的人是谁?(团队)
如果你热爱你的工作、客户和团队,你会非常非常幸运。
-
和一个聪明的能激励你走向伟大的人结婚。
-
要么能学东西,要么能赚钱。
否则果断离职,去找一个这两者至少占一样的工作。 -
如果一个问题你不问,那么答案一定是“不”。
-
选择你的老板。
你有权选择谁当你的老板,而在找工作的过程中很多人没有考虑到这一点。
一个优秀的老板可以为你的职业发展提供极大的助力。 -
学会阐明你所做的事情的商业价值,而不仅仅是你的工作头衔或者项目。
不好的例子:“我是一个数据科学家。我创建了3个自服务数据应用”
更好的例子:“我帮助管理层发现了一个可以节约2300万美元成本的机会” -
职业,本质是一个营销名词,是由那些经营特定类别的梦想的人卖给你的,而他们在贩卖这个梦想时赚了很多钱。
赚钱,承担风险,有冒险精神。
但不要让“职业”来限制自己。
Q.E.D.