02 2018 档案
学习protobuf 感想
摘要:前俩篇博文是从大牛的博客抄过来的, 写的都很好. 这里还写简单写下自己的感想: 1. 和json比, protobuff编码后的体积小很多, 这是肯定的. 都源自于protobuff内部的一系列特殊的编码方式. 而且这些编码的性能都很高, 由很少的简单数学计算和位运算组成. 2. 和Jackson比
阅读全文
Protocol Buffer 序列化原理大揭秘 - 为什么Protocol Buffer性能这么好?
摘要:前言 习惯用 Json、XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json、XML 真的强!太!多! 由于 Google出品,我相信Protocol Buff
阅读全文
Google Protocol Buffer 的使用和原理
摘要:简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,
阅读全文
Java 序列化的高级认识
摘要:转自: https://www.ibm.com/developerworks/cn/java/j-lo-serial/ 引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serial
阅读全文
一天学习两个设计模式之Facade模式(外观模式,结构型模式)
摘要:程序这东西随着时间推移,程序会越来越大,程序中的类越来越多,而且他们之间相互关联,这会导致程序结构变得越来越复杂。因此我们在使用他们时候,必须要弄清楚他们之间的关系才能使用他们。 特别是在调用大型程序进行处理时候,我们需要弄清楚错综复杂的关系。不过与其这么做不如为这个大程序准备一个"窗口"。这样,我
阅读全文
23种设计模式(1)-Facade设计模式
摘要:前记 曾经我遇见的一个需求是这样的,接口A有个方法void methodA(),类B需要实现接口A的methodA()方法,并且在类B中需要把methodA()方法内部处理逻辑获得的结果利用C类实例的某个方法进行持久化操作。由于技术功力尚浅,开始我左思右想就是不能实现这个需求。开始纠结于两个难题:1
阅读全文
protobuf和protostuff的区别
摘要:在我们的开发过程中,序列化是经常需要处理的问题,比如在做分布式访问数据时,或者是在做redis缓存存储数据时,如果我们涉及的知识面不够广的话,可能会简单的使用JDK的序列化,也即在需要序列化的类上implements Serializable接口去实现序列化,我想说的是这种方式在小系统中尚且可以用一
阅读全文
数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
摘要:一、数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。 √: 可能出现 ×: 不会出现 脏读 不
阅读全文
谈谈HashMap线程不安全的体现
摘要:原文出处: Hosee HashMap的原理以及如何实现,之前在JDK7与JDK8中HashMap的实现中已经说明了。 那么,为什么说HashMap是线程不安全的呢?它在多线程环境下,会发生什么情况呢? 1. resize死循环 我们都知道HashMap初始容量大小为16,一般来说,当有数据要插入时
阅读全文
Lombok自定义annotation扩展含Intellij插件
摘要:Lombok简介 Lombok(https://projectlombok.org/) 提供了以注解的形式为java对象增加属性和方法,这使得原来冗长的java源文件变的简洁(不需要再使用ide去生成getter和setter方法,不过ide需要插件支持才能识别lombok自动添加的getter/s
阅读全文
lombok的使用和原理
摘要:一、项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法 lombok项目的产生就是为了省去我们手动创建getter和setter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成gett
阅读全文
CGLIB介绍
摘要:一、什么是CGLIB? CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。 二、CGLIB原理 CGLIB原理:动态生成一个要
阅读全文
Cglib及其基本使用
摘要:前言 最近一直在看Spring源码,其实我之前一直知道AOP的基本实现原理: 如果针对接口做代理默认使用的是JDK自带的Proxy+InvocationHandler 如果针对类做代理使用的是Cglib 即使针对接口做代理,也可以将代理方式配置成走Cglib的 之后要看AOP源码了,Proxy+In
阅读全文
Spring的两种代理JDK和CGLIB的区别浅谈
摘要:一、原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1、如果目标对象实现了接口,默认情况下会采用JDK的动态
阅读全文
动态代理:JDK动态代理和CGLIB代理的区别
摘要:代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法、实际执行的是被代理类的方法。 而AOP,是通过动态代理实现的。 一、简单来说: JDK动态代理只能对实现了接口的类生成代理,而不能针对类 CGLIB是针对类实现代理,主要是对指定的类生
阅读全文
spring启动component-scan类扫描加载,以及@Resource,postConstruct等等注解的解析生效源码
摘要:spring里IOC的原理就不详细写了, 如果想要搞清楚自动扫描组件是如何实现的,还有@Resouce @PostConstruct等注解的工作原理,最好可以先搞清楚整个IOC容器的运作原理再来分析这个过程. IOC容器里的bean的生命周期如下: 1. beanDefinition 的解析 2.
阅读全文
spring启动component-scan类扫描加载过程---源码分析
摘要:最近因为写书的事情,一段时间没有写博客了,有朋友最近问到了spring加载类的过程,尤其是基于annotation注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些
阅读全文
spring源码分析之spring-core asm概述
摘要:ASM是什么? ASM is an all purpose Java bytecode manipulation and analysis framework. It can be used to modify existing classes or dynamically generate cla
阅读全文