1. 关于语义化版本规则(Semver)的领悟

    前言 以前一直忽视了版本号规则的重要性,这两天改了一个bug让我深刻的领悟了遵守语义化版本规则(semver)的重要性。尤其是当自己需要造轮子给别人用的时候,如果没有遵循语义化版本规则,是很容易给别人留坑的。。。 简述 首先稍微解释下语义化本本规则,这套规则其实在网上也是到处被搬运(吐槽一波,非常讨厌这种搬运语法啊规则啊这些知识点而不说明出处的行为)。其实这套规则的出处是来自semver的官网。具体的概念文档里解释的很清楚,这里就不赘述了。 问题 问题来源于我对node里ejs的一…

    Node.js, Semver阅读全文

  2. 关于Firefox中链接点击弹出空白标签页的问题分析

    前言 昨天突然有好心人提醒我说我的网站某些链接在firefox中打开时会弹出 about:blank 的空白页面。本来自己在测试的时候没怎么考虑浏览器的兼容问题,毕竟自己总共也没写几个标签。不过研究了一下发现前端这一行做起来还真挺麻烦的。 问题 原先的代码是这样的,有一个a标签,类似这样: <a href="javascript:void(0);" target="_blank" onclick="somefunction()&q…

    HTML, JavaScript阅读全文

  3. Java中日期处理的一些坑

    前言 记录下最近在用java处理日期格式的时候遇到的一些坑,虽然是挺简单的一些点,但是如果不了解清楚在使用的时候还是会走很多弯路的。 相关类 Java8 之后,涉及日期处理的类基本都分到了 java.time 包下,非常清楚,功能也做了强化。而在这之前,如果我们要处理日期,就只能组合的使用 java.util 以及 java.text 这两个包,感觉十分凌乱。当然,以后我们就不用再纠结这些了,直接用 java.time 包就行了。这个包下有众多类,不过一般在做日期转换的时候主要关注下面这…

    Java阅读全文

  4. SLF4J框架理解与分析

    前言 这两天在看设计模式相关的书,正好看到了门面模式,感觉不太能领悟它的精髓,就想找一些例子来看,突然发现这个slf4j框架不就是一个门面(facade /fəˈsɑ:d/)么,干脆就直接拿来看一看了,正好也把java的日志系统也了解了解。 日志系统 不谈那些比较复杂的分布式日志系统,这里主要讨论的是单机常用的那些日志框架。现在在Java生态中存在的日志框架也是挺多的了,初来乍到看起来有点懵,其实所谓的日志框架主要分两种: * 一种是日志框架门面(facade),用来统一一个共同的接…

    Java, SLF4J阅读全文

  5. 原生AspectJ用法分析以及Spring-AOP原理分析

    前言 前两天看了一些关于spring aop以及AspectJ的文章,但是总是感觉非常的乱,有的说spring aop跟aspectj相互独立,有的说spring aop依赖于aspectj,有的甚至直接把两者混为一谈。很多专门讲Aspectj的文章也只是搬运了AspectJ的语法,就那么一两点东西,讲来讲去也没有什么新意。甚至很多甚至都是面向IDE编程(教你怎么安装插件,点击菜单),对AspectJ的使用方式和工作原理都不去分析,离开了IDE的支持甚至连编译都不会了。我认为咱们这些码农平时习…

    Java, AspectJ阅读全文

  6. Lombok原理分析与功能实现

    前言 这两天没什么重要的事情做,但是想着还要春招总觉得得学点什么才行,正巧想起来前几次面试的时候面试官总喜欢问一些框架的底层实现,但是我学东西比较倾向于用到啥学啥,因此在这些方面吃了很大的亏。而且其实很多框架也多而杂,代码起来费劲,无非就是几套设计模式套一套,用到的东西其实也就那么些,感觉没啥新意。刚这两天读"深入理解JVM"的时候突然想起来有个叫Lombok的东西以前一直不能理解他的实现原理,现在正好趁着闲暇的时间研究研究。 Lombok 代码 Lombok是一…

    Java, Lombok阅读全文

  7. Java类加载原理与ClassLoader使用总结

    前言 说来好笑,不知道怎么我就来搞Java了。虽说大学也码了三年多的代码,但是七七八八乱糟糟的东西搞得有点多,对Java的理解也只能算是hello world,这让我感觉非常慌,尤其是看到招聘网上的一堆JD都要求深入理解JVM,再对比下自己真是自惭形秽。这一两个月没什么事情,感觉是时候要补充点知识了。。。 双亲委派模型 类加载这个概念应该算是Java语言的一种创新,目的是为了将类的加载过程与虚拟机解耦,达到”通过类的全限定名来获取描述此类的二进制字节流“的目的。实现这个功能的代码模块就是…

    Java阅读全文

  8. LLT工作总结与Gherkin语法解析器简单应用

    前言 这几天产品线这里要搞LLT(Low level Test)重点工作,保障版本的高质量发布。工作当然包括一系列的规范、培训、编码、检视,不过具体看下来主要还是提取了下面的一些度量要点: 1. 保证LLT运行不挂(废话) 2. 清零无效LLT代码 3. 保证LLT对代码的覆盖率 4. 保证LLT对需求的覆盖率 清零无效LLT代码,意思是指通过一些检查工具,检查出LLT代码中没有使用断言的测试,或者是那种假装使用了断言的测试代码("assert(true);")…

    Java, Cucumber, Gherkin阅读全文

  9. Shell解析处理XML方法汇总

    前言 前几天干活的时候遇到一个需要解析处理xml文件的一个需求,当时考虑到逻辑比较复杂,因此用java慢慢搞了搞。不过这个需求经常会变,每次变化之后都要重新找到jar包的代码,改了之后还要替换原来的jar包,一来不方便修改,二来不方便统一保存代码,三来也不方便查看jar包的功能。 其实对于这种比较灵活的功能,最方便高效的做法是采用一些脚本语言,比如python,ruby等等,开发效率高,而且也能处理一些复杂逻辑。但是由于种种原因,工作中有的机器没有安装这些语言的解释器。因此不得已,研究了一波用…

    Shell, Linux, Tools, XML阅读全文

  10. Linux下定时任务配置深入理解

    前言 关于定时任务的配置其实是一个老掉牙的问题了,为什么我又要总结一遍呢?我想大概有以下几点原因。首先,大多数文章都聚焦于cron语法,而比较忽视具体的操作步骤。其次,很多文章都介绍的比较凌乱,层次不是很清楚。而且,当我理清楚linux下定时任务配置的一套流程之后,深刻的觉得他的设计真的是很周到的。不过最重要的一点大概就是我非常不喜欢那种堆砌命令用法的文章,好像Linux就是他写的一样,东一块说明,西一块说明,谁都不知道这些说明是谁说的,从哪里来的,是不是以讹传讹,可信度有多少,是不是已经不被…

    Linux, Shell, Cron阅读全文