Pulpcode

捕获,搅碎,拼接,吞咽

0%

很长一段时间我只知道java的泛型使用了被成为“类型擦除”的技术,但是具体的原因和实现细节一直不清楚,最近仔细“研究”了一下,发现了许多有趣的地方。其实有关泛型的知识我已经在组内做过一次分享。但我还是觉得有些地方讲的不够透彻,所以我打算把分享的一部分内容提取出来写成博客,串讲清楚其中的几个知识点,所以就有了这篇:《java为什么要用类型擦除实现泛型? 》

为什么需要泛型?

试想你需要一个简单的容器类,或者说句柄类,比如要存放一个苹果的篮子,那你可以这样简单的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Fruit{}
class Apple extends Fruit{}

class Bucket{
private Apple apple;

public void set(Apple apple){
this.apple = apple;
}

public Apple get(){
return this.apple;
}
}

这样一个简单的篮子就实现了,但问题是它只能存放苹果,之后又出现了另外的一大堆水果类,那你就不得不为这些水果类分别实现容器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Fruit{}
class Apple extends Fruit{}
class Banana extends Fruit{}
class Orange extends Fruit{}

class BucketApple{
private Apple apple;

public void set(Apple apple){
this.apple = apple;
}

public Apple get(){
return this.apple;
}
}

class BucketBanana{
private Banana banana;

public void set(Banana banana){
this.banana = banana;
}

public Banana get(){
return this.banana;
}
}
class BucketOrange{
private Orange orange;

public void set(Orange orange){
this.orange = orange;
}

public Orange get(){
return this.orange;
}
}

然后你发现你其实在做大量的重复劳动。所以你幻想你的语言编译器要是支持某一种功能,能够帮你自动生成这些代码就好了。

不过在祈求让编译器帮你生成这些代码之前,你突然想到了Object能够引用任何类型的对象,所以你只要写一个Object类型的Bucket就可以存放任何类型了。

阅读全文 »

所谓的性价比学习前端技术,主要是指作为一个后端的研发工程师,能够很容易的搭建一个好看得体的页面,比如可能是一个给公司内部员工使用的工具,或者是一个自己的博客页面。只要保证正常的美观大方和易用性即可。这篇博客的目的本质上是不用花太多的时间和精力,要搭建出这样一个系统,所需要的技术点和材料的总结。所以文本不用考虑到兼容和性能的问题,或者是更高深的用户体验,或者是爬虫与反爬(这些性价比不高或者不在讨论范围)。

自维护模板

我只要懂一些javascritp,css,html的知识就可以了,但是当我在开始开发一个工具的时候,并不会从头开始写,因为这样工作量很大,而且做出来的东西也很丑(毕竟不是真正的fe),这样会给人一种很随便不专业的感觉,当然也不会直接从网上直接down下来一个html模板就用,因为有很多页面元素你根本用不到,你要选择去摘除他们,同时这也会给人留下“随便从网上抄来然后改了一改”的感觉。

所以最好是自己平时就维护好一个基本的模板布局,这个模板布局提供最基础的功能,然后在真正需要做一个web工具,或者是博客的时候,直接拿出来,稍作加工就好,这样你的开发效率就会很高。你会把注意力集中在设计上,而非找工具,试工具。这就是所谓的“早做准备”。同时维护的不仅仅是一个页面模板,还有一些常用的操作交互代码,毕竟你不是写前端的,所以这些知识可能很快就被你忘了。
比如一个实用的布局样式可能看起来是这样的:

cpff-frame

上边的边框和左边的边框都会提供一些选择项来连接到相应的功能,中间部分就是主要的展示区域。

阅读全文 »

我是从去年的时候,开始了解一些咖啡相关的知识的,基本上算是抱着装逼的态度。因为我在高中的时候,有一次在喝雀巢那种袋装速溶咖啡冲剂的时候,被一个喝瓶装雀巢咖啡的同学给鄙视了,虽然最后我发现他那也不是啥正经咖啡。所以说,你说你开法拉利,我是开不起我认了,但是你喝个咖啡,“和尚喝得,为何我喝不得?”所以最终,我开始尝试喝咖啡。

受不了苦

很小的时候,我就一直好奇,为啥会有人爱吃苦瓜,爱喝茶,爱喝咖啡,因为这就感觉像有人跟你说,他爱吃药一样。之后,我在一本叫做《品尝的科学》的科普书中读到,其实每一个人的味蕾对于苦味的敏感度是不一样的,所以确实有些食物或者饮料什么的,对于你而言,可能苦的完全无法忍受,但对另一些人而言,就是美味了。当然很多人并不是说自己爱吃苦,所以去吃苦。吃苦的很大一部分原因是这些苦味的东西,本身还能给他们带来别的物质,比如像啤酒,咖啡这种能给人带来兴奋的东西,同时他们又能忍受这种苦味。不过确实有的人就是抖m型的,喜欢这种苦味的刺激,因为苦味的东西,大部分是有毒的植物,源于生物碱,人们在进化中早已对苦味产生了特殊的生物警觉。毕竟人的味蕾就那么多,能刺激自然不会放过。

而且我还发现了一个问题,就是好一点的茶叶或是咖啡,喝起来真的不苦,像我们小时喝茶的时候,必放两块冰糖,否则苦的让人想吐。的确是因为那确实不是什么好茶叶。所以如果你给自己冲了一杯单品咖啡,还要靠加奶加糖来掩盖苦味的话,那也确实不是什么好豆子。

阅读全文 »

信息熵本身是信息论之父克劳德·香农提出的对信息量化的方式,类似你读了一本书,那么这本书有多少的信息量,用信息熵就可以来表述。

即使你没有听过信息熵这个词,你一定听过热力学中的“熵”,这个熵用来度量“体系混乱程度”。简单的来说,你一定记得在能量守恒定律中学到的, 在孤立系统中,体系与环境没有能量交换,体系总是自发地像混乱度增大的方向变化,总使整个系统的熵值增大。所以说如果整个宇宙是一个孤立的系统,那么可以说宇宙的熵也是越来越大的。

信息熵的概念和这个有些关联关系,但也不完全相同,并且还有很多有趣的东西,我们之前学到的很多知识都可以用信息熵的思路去解读。

比如“信息的基本作用是消除人们对事物的不确定性。”。所以我们在交流的时候,或者说在传递信息的时候,其实是在消除这种不确定性。
但是有些事情其实是很确定的,比如你对我说:”太阳从东方升起“,那这句话就没什么信息量,因为这是大家都知道的事情。所以可以说这句话没有消除任何的不确定性,所以它的信息熵很低。也就是说,一句话的信息熵越高,那么它所包含的信息量就越大。这看上去和物理学中的熵有点相反,因为信息就是负熵Negtrophy。所以“信息数据”越集中的地方熵值越小(确定性很高), “信息数据”越分散的地方熵值越大(确定性很低)。两者是没有矛盾的。

那么我们如果从提高信息熵的角度来分析问题,将会有很多思路。但是你可能认为我这篇博客就是要告诉你说话要有含量,有内容。然而事实上并没有那么简单,否则我这篇博客的信息熵很低。

阅读全文 »

最近我翻箱子的时候,翻出来了一个3d眼镜,这个眼镜应该是我买投影仪的时候送的,因为一直对3d电影不感冒,所以并没有太在意这个东西。不过处于好奇,我还是想感受下用3d眼镜看投影的感觉,所以找了一个3d电影(红蓝的那种)试试,可惜带上眼镜之后,并没有效果,而且我发现这个眼镜是要充电的。

我记得我在电影院使用的3d眼镜并没有充电,那种夹片式的更不可能被充电了,而且电影院看到的电影也不是红蓝的,所以我突然明白这些3d眼镜使用的技术并不相同。之后出于好奇我在网上查阅了相关资料,发现了很多有意思的内容,这里打算分享出来。

3d电影的原理

其实3d电影并不是什么新鲜事物,我记得我在小学的时候,从某本讲恐龙的科普书《可怕的科学系列》。里面就有一段故事是关于一起去看3d电影的。所以3d电影这个技术应该早就有了。而且不谈3d电影,3d技术本身的视觉原理,应该早就被人类发现了。只不过基于条件的限制,一直没有实施罢了。

阅读全文 »

这部电影我在去年的时候看过一遍,最近又重温了一遍,才发现它的精妙之处。

总的来说科恩兄弟的处女作就定义了自己的导演风格和基调。比如在开场那段德州风景中侦探的独白和《老无所依》很类似。

其实我看的第一部科恩兄弟的电影应该是《老无所依》,这部电影可以说是刷新了我对电影的认知,因为之前无论是看,《阿甘正传》,《肖申克的救赎》,《教父》,好像都是从故事中能得到一些道理,做一些总结和概括的话。但是对于科恩兄弟的电影,看完之后你就忍不住想问自己,这电影到底讲了个啥?或者说到底想表达啥?总感觉自己没看懂。很多人强行解释说,科恩兄弟想表达生活的无力感和不确定感,这还是在用旧的思路来解释。其实如果你看多了科恩兄弟的电影,就会明白,科恩兄弟不想给你什么启发或者是什么道理,你从这部电影得到了什么启发是你自己的事,电影本身就是想给你讲个好故事而已。

simple-blood

阅读全文 »

这里详细分析一下提里昂兰尼斯特的聪明过人之处,本文将从电视剧的截图和书中的桥段来逐步分析 ,主要涉及第一季,因为第一季和原著的相似度最高。之所以要结合小说分析,是因为小说才能体现马丁老爷子到底刻画了怎样一个人物。剧集后期你会发现,小恶魔明显智商下线,天天喝酒出谋划策没有存在感。编剧已经偏离了原著而赶工。所以马丁老爷子“拖延症”是有理由的。毕竟一部好的小说,需要仔细打磨。

让我们先看看,在酒馆凯特琳绑架小恶魔时书中的桥段,看看双方是如何斗智斗勇的:

“我们要把他带回临冬城去。”她说,提利昂听了心想:要是这样的话,或许……当时他已趁短暂余暇环顾四周,对当下情形更有掌握。眼前所见不至于让他绝望。噢,那史塔克女人反应倒是机敏,这无庸置疑。她先逼他们公开承认自家主子对她父亲的誓约,然后再请他们拔刀相助,何况她又是区区一个弱女子。没错,这招厉害。然而她也没有赢得太彻底。据他约略估算,饭厅里将近有五十个人。凯特琳·史塔克不过说动了十来个,其他人有的困惑,有的害怕,还有的冷漠。提利昂注意到,佛雷家那群人只有两个准备响应,而他们眼看带头的没动静,便又很快坐回去了。若不是不敢,否则他还真想偷笑。

在这一段,凯特琳先是一个个问自己家族的封臣,然后在请他们拔刀相助。因为自己没有足够的力量去逮捕小恶魔,但是小恶魔也很聪明,首先他并没有硬碰硬,而且也没有慌张,或是乖乖就范,他先冷静的分析了局势,就是虽然她家的封臣很多,但是响应她去抓小恶魔的没有几个。

阅读全文 »