语言的底层技术抽象

可能你用过很多语言,也可能你对他们很熟悉,那么对于开发者而言,语言的底层技术是什么?

c是一个语言的最小集合,如果你去看最早一版的c教程《The C Programming Language》,你会发现它的几个特点:

  1. 最接近机器的语言
  2. 语言的最小+最全集合

其它的语言,比如:java,python,lua,php,都是在c语言的基础上构建起来的,当然,它们提供了更多的语言特性,比如:元数据、反射、容器等。

那么,c的核心是什么?大概是函数。

假设我们定义了2个函数:

void a() {…}

void b() {…}

单从需求上来讲,可以将函数拓展成lambda表达式、或者是右值(被赋值给某个变量)、当作某个类的方法(本质上也是函数,只是函数名称有它新的规则)。

如果考虑a 调用b,那么这个就会变得有趣:

a调用b 它是由3部分组成:a、调用、b(a和b都可以是一组函数、调用可以认为是引用)。

对于a,b而言,这里面有要分两种情况:

如果b先出现,比如:有一组接口实现字符串的接口,那么a直接参考接口文档,调用即可。

如果a先出现,比如:chrome浏览器,它是可以写插件的,它的方式就是插件必须按照某种方式来写(协议)才能被集成到chrome里面;spring boot 容器,如果想注入到spring boot 里面,必须使用注解注入,比如:@Bean,@Controller,@Service等。

本质上来讲,a能成功调用b,是遵循某种协议的,一点协议有了,其实a和b谁先出现都可以。若是没有协议,那么显然会变得有些复杂。这里面体现了接口协议设计的重要性。

对于调用来讲,就比较有意思了。你会发现调用这个操作上也能做手脚,变得复杂。调用只能被拦截(AOP),否则就会影响a 和b,给它们增加负担。

无论拦截做到a,还是b端,ab至少有一个是被自动加载的(假设加载者为容器,所谓自动加载,就是生命周期被托管,只有这样,ab的容器,才能对调用做手脚。

一般对调用做手脚,应用场景为:b调用前后的日志打印、调用b的性能监控等;这里面有几种方案:b上加注解(spring boot)、按b的名字的前后缀(测试用例),b所在的包名称等等,主要是基于b的属性找规律;如果是加注解,则需要语言支持反射功能(java很早就有反射功能,真是有远见)。

总之,现在你看到的很多语言的特性,都可以抽象为a调用b这个场景,只是复杂化了。

生命的最小单位是生物

本文内容源自《人体简史》对细胞的介绍,纯靠脑洞展开。

生命的定义:生命的最小单位是生物,生物是由一个或多个细胞组成,能够新陈代谢,维持恒定性,可以成长,回应刺激,可以繁殖甚至演化,以适应外界环境,继续繁殖并产生后代[1]

人体由30亿个细胞组成,细胞是人体的最小单元。从细胞这么小的个体(细胞的平均直径在5—200微米之间。),组成人这么大的个体,绝对不是量变到质变那么简单。

拿汽车举例子,汽车没有生命,但是它是由很多个零件组成,小到螺丝,大到轮胎、底板,那些零件和细胞比,唯一的差别就是它们的大小相差太大,而且细胞小且有生命。既然是生命,就会和汽车零件有天壤之别。

汽车零件的组成方式是符合机械工程、力学等原理,但是多个细胞的拼装,生物学上尚未知晓其内在原理。这里面可以看出几点:

  1. 细胞的拼装,不像汽车零件的组装那么简单,一是由于细胞本身内部结构比较复杂,不像汽车零件(基本就是集中化学元素的叠加)。二是细胞之间的组合形式不像汽车零件靠的是力的传导。
  2. 细胞的尺度属于微观世界。微观世界有它不一样的运作规律,大尺度上的一些理论对它们不适用。其实,从细胞这个尺度往下,它们的工作方式已经不是那么显而易见了。或许,大尺度上你可以用公式推导,但是小尺度上,一个是确实比较复杂,另外一个就是,实验或者观察的装置到达了他们的极限。

如果想了解,细胞及细胞堆的工作原理,可能需要从下面几个方面着手:

  1. 改进实验的仪器。毕竟,微观上我们是“可以”观察的,但也许细胞级别的尺度,是人类的极限,不过不要紧,我们还有其它办法。
  2. 对细胞从宏观上做不同的实验,以推测微观上的原理。如果第1步行不通,那么只能“另辟蹊径”了。
  3. 科技的发展,给了我们有能力更好用计算机模拟细胞的工作。此办法原理就是基于抽象的公式推导,大胆的猜想,就好比天文学,不用做实现,纯想象。

礼物

我们住的城市叫番市,也就200万人左右的规模,属于四、五线城市,虽然现在已经是2010年,但是整个城市的氛围也就2000年左右的水平。

经济马马虎虎,外地人口不多。

而十六寺则位于城市和农村交接的地方,市里一直想把十六寺改造成旅游景点,奈何游客一直很少。

每年过年爸妈都会来这里烧香,但是我每次都不参加。

所以对十六寺,我倒不熟。

但我同学李悦就不一样了,他们家在寺庙里有捐过钱。

所谓捐钱,就是比如寺庙里面要翻修墙面,那么你可以捐钱,用来维修一面墙,墙维修好之后,会在一个角落里刻上你的名字。

我们扫码预约了之后,就进了寺庙的大院子。

今天我们来的早,又是非周末,所以寺庙里面没有什么游客。

但见院子中央有一个和尚,约摸30多岁,正在扫地。

“你好,师傅,请问玄叶和尚今天可在寺内?”

李悦直接跑过去问道。

“你好,施主,我就是玄叶。请问你有事吗?”

玄叶和尚见到李悦,把扫帚加载手臂上,双手一合,答道。

玄叶说话的声音很轻,但是我却能将每个字听的很清楚,有点惊到我了。

“我爸爸让我过来送一样礼物给你。”

李悦说罢,将手里的包裹举起来。

“请随我来。”

玄叶微微一笑,做了个请的手势。

东西

“妈,我走了,今天不回来吃饭。”

我冲着正在洗菜的妈妈说到。

“今天又去哪里?不要弄太晚,早点回来。”

每次出门,我妈总是那几句词。

今天约好了同学去看望一位高人。

我的同学叫李悦,他和我住在一个辖区,从小到大,都在同一个学校,他们家人脉很广,每次有什么厉害的人物,总能第一时间想到我。

“今天我们去的地方叫十六寺,我爸让我去给一个叫玄叶的和尚送样东西,其它我不知道,但我总感觉这个叫玄叶的和尚不简单,所以叫上你,你不是学风水的嘛,说不定能有点收获。”

我刚上同学的车,他就迫不及待的和我说道。

“送东西寄快递不就好了嘛,为啥还要你送”

我好奇的问道。

“我也不是很清楚,不过既然让我送,自然有我爸的道理,反正送东西也不是第一次了。”

“那送的东西是啥?”

“我也不知道,哈哈。”

“搞的这么神秘,必有妖。”

虽然有点好奇,但还是没有继续往下问。

开篇

周老六单姓周,真名周老六。

一般名字中含数字的,通常和家里的排行有关系。

周老六家中排行第三,上面还有两个姐姐,分别叫周老大,和周老二。

至于为什么叫老六,据说当年,他父亲特别想要一个儿子,没想到生到他这里就是男孩,他爸觉得这事儿特顺,故给他起名为老六。

周老六从小就受父母宠爱,有好吃的、好穿的,都紧着他。

家中两个姐姐大他好几岁,所以也一起惯着他。现在不是有种说法,叫“妈宝男”,不过在我看来,他属于“四宝男”。

四个人的呵护,让周老六从小就一帆风顺。

小时候上学,早上起来晚了,不是爸妈帮忙请假,就是两个姐姐让他多睡一会儿,所以打小周老六就不明白烦恼是什么。

老话说的好,“不是没烦恼,只是年龄少”。这不,时间一下子来到了2010年。

周老六从寒江大学风水学专业毕业,一直闲在家,爸妈自然是不会催他找工作的,但他总觉得应该做点什么。

大家一定好奇,为什么我对周老六这么熟?没错,我就是周老六,下面我将用第一人称讲述我的故事。

《Java 8 实战》读书笔记

Java  8较之Java 6确实提供了很多新的功能,有些功能实际上是沿用了一些第三方库,比如:Google Guava。核心是函数式编程,其它的功能都是为了支持这个核心功能而提供的。

java 8 实战

一些写代码的思路

  1. 开源软件那么多,能用现成的,绝不重新造轮子。我们要做的,首先是整合,然后才是重新创造。
  2. 歌手界,姚贝娜和周杰伦代表了两种方向,一个是演绎,一个是原创。能做到顶级的,都是很牛逼的。
  3. 自我定位也包含了一种设计,比如在安态的工作,要面对业务、IT高层、限制非常多的开发环境,要有设计、要有架构。
  4. 始终相信行业间,抽象层次高了以后,是相通的,就像第2点说的那样。多学学能看见的牛人,他们在干什么。