随笔分类 - JAVA
软/弱/虚引用
摘要:https://www.jianshu.com/p/825cca41d962 引用的本质是,可以把jvm内存当做一个大的池化技术,池化技术最重要的是逐出策略。那么,这三种引用对应的逐出策略是不一样的,具体可以看上面链接里的介绍。简单来说,强引用的逐出策略是,如果一个对象没有了强引用,就逐出。软引用是
阅读全文
网络timeout区分
摘要:ConnectTimeout 连接建立时间,三次握手完成时间 SocketTimeout 数据传输过程中数据包之间间隔的最大时间 下面重点说下SocketTimeout,比如有如下图所示的http请求 虽然报文(“abc”)返回总共用了6秒,如果SocketTimeout设置成4秒,实际程序执行的时
阅读全文
Java的Finalizer引发的内存溢出
摘要:转自 http://ju.outofmemory.cn/entry/74671 本文介绍的是Java里一个内建的概念,Finalizer。你可能对它对数家珍,但也可能从未听闻过,这得看你有没有花时间完整地看过一遍java.lang.Object类了。在java.lang.Object里面就有一个fi
阅读全文
PreparedStatement是如何大幅度提高性能的
摘要:本文讲述了如何正确的使用prepared statements。为什么它可以让你的应用程序运行的更快,和同样的让数据库操作变的更快。 为什么Prepared Statements非常重要?如何正确的使用它? 数据库有着非常艰苦的工作。它们接受来自众多并发的客户端所发出的SQL查询,并尽可能快的执行查
阅读全文
分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket
摘要:业务背景介绍 对于web应用的限流,光看标题,似乎过于抽象,难以理解,那我们还是以具体的某一个应用场景来引入这个话题吧。 在日常生活中,我们肯定收到过不少不少这样的短信,“双11约吗?,千款….”,“您有幸获得唱读卡,赶快戳链接…”。这种类型的短信是属于推广性质的短信。为什么我要说这个呢?听我慢慢道
阅读全文
Mybatis中的update动态SQL语句
摘要:Mybatis中的CRUD操作(增删改查)中,简单的SQL操作比较直观,如查找操作: 其中id对应同名java文件中的方法,resultMap对应的自定义的数据类型(当使用java自带类型就更容易了,比如java.lang.String之类的)。 但是涉及到更新操作时,可能不需要对所有字段更新,这时
阅读全文
java基本数据类型与封装类型详解(int和Integer区别)
摘要:int是java提供的8种原始数据类型之一。 Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型)。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,
阅读全文
InvocationHandler中invoke方法中的第一个参数proxy的用途
摘要:最近在研究Java的动态代理时对InvocationHandler中invoke方法中的第一个参数一直不理解它的用处,某度搜索也搜不出结果,最后终于在stackoverflow上找到了答案。 这是原文的链接:http://stackoverflow.com/questions/22930195/un
阅读全文
Mybatis类型转换介绍
摘要:1.1 目录 1.2 建立TypeHandler 1.2.1 TypeHandler接口 1.2.2 BaseTypeHandler抽象类 1.3 注册TypeHandler 1.4 Mybatis自动获取TypeHandler 1.5 Mybatis中自动注册的TypeHandler 1.2 建立
阅读全文
关于SimpleDateFormat安全的时间格式化线程安全问题
摘要:想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多
阅读全文
学习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
阅读全文
protobuf和protostuff的区别
摘要:在我们的开发过程中,序列化是经常需要处理的问题,比如在做分布式访问数据时,或者是在做redis缓存存储数据时,如果我们涉及的知识面不够广的话,可能会简单的使用JDK的序列化,也即在需要序列化的类上implements 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
阅读全文