-
SLF4J框架理解与分析
前言 这两天在看设计模式相关的书,正好看到了门面模式,感觉不太能领悟它的精髓,就想找一些例子来看,突然发现这个slf4j框架不就是一个门面(facade /fəˈsɑ:d/)么,干脆就直接拿来看一看了,正好也把java的日志系统也了解了解。 日志系统 不谈那些比较复杂的分布式日志系统,这里主要讨论的是单机常用的那些日志框架。现在在Java生态中存在的日志框架也是挺多的了,初来乍到看起来有点懵,其实所谓的日志框架主要分两种: * 一种是日志框架门面(facade),用来统一一个共同的接…
-
原生AspectJ用法分析以及Spring-AOP原理分析
前言 前两天看了一些关于spring aop以及AspectJ的文章,但是总是感觉非常的乱,有的说spring aop跟aspectj相互独立,有的说spring aop依赖于aspectj,有的甚至直接把两者混为一谈。很多专门讲Aspectj的文章也只是搬运了AspectJ的语法,就那么一两点东西,讲来讲去也没有什么新意。甚至很多甚至都是面向IDE编程(教你怎么安装插件,点击菜单),对AspectJ的使用方式和工作原理都不去分析,离开了IDE的支持甚至连编译都不会了。我认为咱们这些码农平时习…
-
Lombok原理分析与功能实现
前言 这两天没什么重要的事情做,但是想着还要春招总觉得得学点什么才行,正巧想起来前几次面试的时候面试官总喜欢问一些框架的底层实现,但是我学东西比较倾向于用到啥学啥,因此在这些方面吃了很大的亏。而且其实很多框架也多而杂,代码起来费劲,无非就是几套设计模式套一套,用到的东西其实也就那么些,感觉没啥新意。刚这两天读"深入理解JVM"的时候突然想起来有个叫Lombok的东西以前一直不能理解他的实现原理,现在正好趁着闲暇的时间研究研究。 Lombok 代码 Lombok是一…
-
Java类加载原理与ClassLoader使用总结
前言 说来好笑,不知道怎么我就来搞Java了。虽说大学也码了三年多的代码,但是七七八八乱糟糟的东西搞得有点多,对Java的理解也只能算是hello world,这让我感觉非常慌,尤其是看到招聘网上的一堆JD都要求深入理解JVM,再对比下自己真是自惭形秽。这一两个月没什么事情,感觉是时候要补充点知识了。。。 双亲委派模型 类加载这个概念应该算是Java语言的一种创新,目的是为了将类的加载过程与虚拟机解耦,达到”通过类的全限定名来获取描述此类的二进制字节流“的目的。实现这个功能的代码模块就是…
-
LLT工作总结与Gherkin语法解析器简单应用
前言 这几天产品线这里要搞LLT(Low level Test)重点工作,保障版本的高质量发布。工作当然包括一系列的规范、培训、编码、检视,不过具体看下来主要还是提取了下面的一些度量要点: 1. 保证LLT运行不挂(废话) 2. 清零无效LLT代码 3. 保证LLT对代码的覆盖率 4. 保证LLT对需求的覆盖率 清零无效LLT代码,意思是指通过一些检查工具,检查出LLT代码中没有使用断言的测试,或者是那种假装使用了断言的测试代码("assert(true);")…
-
字符集与字符编码的强化理解与操作实践
踩坑 最近在工作中遇到了一个说大不大说小不小的问题,就是当我解析一个xml文件的时候,抛出了一个"Invalid byte 2 of 2-byte UTF-8 sequence"的异常,这个异常会导致解析直接退出,显然不能容忍。查阅相关资料稍微定位了一下,大概知道是字符集的问题,仔细一看,xml文件中的确有中文字符,而且当我把这些中文字符删了之后的确又能解析成功。不过我还是不能理解这当中的缘由,不过由于时间原因,当时只是把中文字符删了就草草完工。现在回头想想这个坑还是不能留…
-
写给大忙人的JavaSE8书后习题简析-第二章
Stream API 第一题 编写一个第2.1节中的for循环的并行版本。获取处理器的数量,创造出多个独立的线程,每个都只处理列表的一个片段,然后将他们各自的结果汇总起来。(我们不希望这些线程都更新一个计数器,为什么?) 还是有点麻烦的,线程得传值,得获取运行结果,相比流式计算麻烦太多了。这里为了平均给每个线程分配任务,我们得手动将资源进行拆分,有的是将数据List平均分,我这里是通过取模的结果来进行分配。 我们当然不希望这些线程都更新一个计数器,因为累加的操作不是原子操作,我们得加锁,…
-
Nexus私服配置以及分组的应用
前言 阴差阳错的实习部门分到了Agile Controller Campus的运维(或许吧)部门,部门主要任务大概是控制构建自动化测试的流水线,控制项目各个模块的项目进展以及维护版本一致等。本来指望能进来敲敲代码的,结果发现在这里基本不用写代码,主要是使用内部软件做好项目的配置工作,这倒是我之前一直没有接触过的工作,接触了两天,感觉还是挺有意思的,能从项目的上层了解到整个项目的架构,从整体上理解一个大型团队的工作方式,这里面的学问不比码代码少。 我接到的第一个任务就是一个实际中出现的问题。…
-
写给大忙人的JavaSE8书后习题简析-第一章
lambda表达式 第一题 Arrays.sort方法中的比较器代码的线程与调用sort的线程是同一个吗? 是的,看下源码就知道了。 Arrays.sort默认采用的是TimSort的方法(即传统Mergesort的优化版本)。当用户指定了一个Comparator时,他会同步的回调这个Comparator的compare方法来作为比较的参照,因此显然这里并不存在多线程的问题。 事实上在JDK1.8以后就提供了并行的排序方法Arrays.parallelSort。 不过需要注意的是,经过测…
-
SpringBoot之Thymeleaf用法
Thymeleaf Thymeleaf是最近SpringBoot推荐支持的模板框架,官网在thymeleaf.org这里。 我们为什么要用Thymeleaf来作为模板引擎呢?官网给了我们一个非常令人信服的解释: Thymeleaf is a modern server-side Java template engine for both web and standalone environments.> 基本写法就像下面这样: <table> <thead&…