背景 问题从一杯咖啡开始. 今天我去楼下咖啡机买了一杯「粉黛拿铁」.制作过程中显示: 我取了做好的粉黛拿铁,喝了一口,果然就是一杯热巧克力.咦咦咦,说好的拿铁呢?虽然我对「零点吧」的咖啡评价很高,觉得味道不亚于星爸爸.但是不可否认它确实给了我一杯假的拿铁. 现在很多技术专家好比品鉴咖啡的专家.他们并不需要知道咖啡豆和可可豆的区别,更不知道这两种植物长在树上是什么样子.没关系,这并不影响他们区别一杯咖啡是拿铁.摩卡还是卡布奇诺.就好像工作中遇到团队配合的情况,他们并不需要知道别人团队的产品是怎么实…
自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但是第一个系列还没到开始处理Tinymoe源代码的时候,首先的跟大家讲一讲我设计Tinymoe的故事.为什么这种东西要等到现在才讲呢,因为之前没有文档,将了也是白讲啊.Tinymoe在github的wiki分为两部分,一部分是介绍语法的,另一部分是介绍一个最小的标准库是如何实现出来的,地址在 https://g…
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是没更新就是在家忙着带娃的Hydra. 前几天,正巧赶上组里代码review,一下午下来,感觉整个人都血压拉满了.五花八门的代码让我不禁感叹,代码规范这条道路还是任重而道远- 那么今天就来给大家总结一波Java中的代码作死小技巧,熟练掌握这些小技巧后,保证能让你写出同事看不懂的代码~ 至于为啥要写出同事看不懂的代码,通过这次教训,我发现好处还是挺多的,简单举几个例子: 同事无法轻易修改你的代码,避免团队协作不当引入bug 塑…
文章中引用的代码均来自https://github.com/vczh/tinymoe.   看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了.在正确分析"print sum from 1 to 100"之前,我们首先得分析"phrase sum from (lower bound) to (upper bound)"这样的声明.Tinymoe的函数声明又很多关于block和sentence的配置,不过这里并不打算将所有细节,我会将重点放在如何…
目录 简介 JIT编译器 Tiered Compilation分层编译 OSR(On-Stack Replacement) Deoptimization 常见的编译优化举例 Inlining内联 Branch Prediction分支预测 Loop unswitching Loop unrolling展开 Escape analysis逃逸分析 总结 简介 小师妹已经学完JVM的简单部分了,接下来要进入的是JVM中比较晦涩难懂的概念,这些概念是那么的枯燥乏味,甚至还有点惹人讨厌,但是要想深入理解…
业务背景 首先,业务需求是这样的,从第三方电商平台拉取所有订单,然后保存到公司自己的数据库,需要判断是否有物流信息,如果有物流信息,还需要再进行上传. 而第三方接口返回的数据是 JSON 格式的,其中物流信息却藏的十分深,如下面所示,JSON 节点是这样的: xxxOrder > xxxShippingInfo > xxxShipmentDetails > xxxTrackingInfo > trackingNumber, trackingLink 基本实现 因为第三方接口返回的数…
探究Spring原理 探究IoC原理 首先我们大致了解一下ApplicationContext的加载流程: 我们可以看到,整个过程极为复杂,一句话肯定是无法解释的,所以我们就从ApplicationContext说起吧. 由于Spring的源码极为复杂,因此我们不可能再像了解其他框架那样直接自底向上逐行干源码了(可以自己点开看看,代码量非常之多),我们可以先从一些最基本的接口定义开始讲起,自顶向下逐步瓦解,那么我们来看看ApplicationContext最顶层接口是什么,一直往上,我们会发现有…
文章中引用的代码均来自https://github.com/vczh/tinymoe.   实现Tinymoe的第一步自然是一个词法分析器.词法分析其所作的事情很简单,就是把一份代码分割成若干个token,记录下他们所在文件的位置,以及丢掉不必要的信息.但是Tinymoe是一个按行分割的语言,自然token列表也就是二维的,第一维是行,第二维是每一行的token.在继续讲词法分析器之前,先看看Tinymoe包含多少token: 符号:(.).,.:.&.+.-.*./.\.%.<.>.…
在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些编译原理的知识,尽量让大家可以在创造语言之后,自己写一个原型.在这里我拿我创造的一门很有趣的语言 https://github.com/vczh/tinymoe/ 作为实例. 商业编译器对功能和质量的要求都是很高的,里面大量的东西其实都跟编译原理没关系.一个典型的编译原理的原型有什么特征呢? 性能低 错误信息…
下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the Modules section of the reference documentation. Their maven/gradle coordinates are also described there. 这段话很清晰的告诉我们点击这段话上的链接,专门有关于所有特征和模块以及各模块之间关系的介…