volatile作用 volatile主要是为了解决多线程内存不可见问题。 对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题。 其次是为了保证代码的有序性。 虚拟机在编译的时候,是有可能把代码的顺序进行重排序的,不一定会按照我们写的代码的顺序来执行,对于有些代码进行重排序之后,虽然对变量的值 […]
volatile作用 volatile主要是为了解决多线程内存不可见问题。 对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题。 其次是为了保证代码的有序性。 虚拟机在编译的时候,是有可能把代码的顺序进行重排序的,不一定会按照我们写的代码的顺序来执行,对于有些代码进行重排序之后,虽然对变量的值 […]
ConcurrentHashMap数据结构 ConcurrentHashMap的数据结构(数组+链表+红黑树),桶中的结构可能是链表,也可能是红黑树,红黑树是为了提高查找效率。具体是链表还是红黑树,要看binCount是否大于等于转化为红黑树的阈值。 ConcurrentHashMap继承关系 public class […]
背景 之前要写一个项目,根据配置以及前端入参来调用具体的接口执行对应的任务,需要校验前端的入参是否是指定的数据类型,防止调用后续接口时出现异常。 然后看了下JAVA自带的方法以及Spring、Apache等相关jar包中的方法,发现没有合适的我想用的方法,于是就自己写了一个工具类。 可以判断的数据类型 这个工具类可以判 […]
准备工作 环境准备 JAVA版本 java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) […]
文档 什么是文档 在大多数应用中,多数实体或对象可以被序列化为包含键值对的 JSON 对象。 一个 键 可以是一个字段或字段的名称,一个 值 可以是一个字符串,一个数字,一个布尔值, 另一个对象,一些数组值,或一些其它特殊类型诸如表示日期的字符串,或代表一个地理位置的对象: { "name": "John Smith" […]
背景&痛点 通过ES进行查询,如果需要新增查询条件,则每次都需要进行硬编码,然后实现对应的查询功能。这样不仅开发工作量大,而且如果有多个不同的索引对象需要进行同样的查询,则需要开发多次,代码复用性不高。 想要解决这个问题,那么就需要一种能够模块化、配置化的解决方案。 解决方案 思路一:配置参数 通过配置参数的方 […]
Elasticsearch基本概念 Elasticsearch是基于Lucene的全文检索库,本质也是存储数据,很多概念与传统关系型数据库类似。 传统关系型数据库与Elasticsearch进行概念对比 Elasticsearch 传统关系型数据库 indices(索引库) Databases(数据库) type(类型 […]
功能: 实现根据freemarker模板生成对应的PDF文件; 可以指定文字、位置、页数生成指定的印章(图片),可以指定印章大小; 指定字体、字体大小、文字方向、颜色等生成文字水印 maven依赖: <dependency> <groupId>org.xhtmlrenderer< […]
安装 安装SVN服务器端(Setup-Subversion-X.X.XX.msi): 下载地址:http://sourceforge.net/projects/win32svn/files/?source=navbar 按照自己的电脑系统下载对应的文件,下载成功后直接下一步到结束 然后打开dos窗口输入svn或者svn […]
背景 SpringBoot和SpringCloud的版本需要对应,不然会因为jar包版本不兼容导致一系列奇怪的问题。因为官方不会保证SpringBoot和SpringCloud不同版本的兼容性。 大版本对应 SpringCloud版本 SpringBoot版本 Hoxton 2.2.x Greenwich 2.1.x […]
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否,知否?应是绿肥红瘦。