- 博客(121)
- 资源 (2)
- 收藏
- 关注
原创 linux docker实践
linux docker实践1.查看centos系统是否满足为64位、系统内核版本为 3.10 以上uname -r2.安装dockeryum -y install docker3.启动和绑定系统重启时重启dockersystemctl start docker #启动systemctl status docker #查看状态systemctl enable docker.service #系统重启时重启docker4.下载相应镜像和运行容器迁移至这篇文章..
2021-01-28 09:53:13 247
原创 docker搭建分布式服务架构
docker_demo集成dubbo,redis,rabbitmq,mysql中间件的分布式架构用于docker例子中#概要设计:1.搭建zk,redis,mysql,rabbitmq,dubbo-admin,jenkins,nginx中间件服务2.俩台业务服务器A和B,A负责提供dubbo接口包括数据库操作,redis操作,发送mq,B负责调用dubbo接口并保留http接口和消费MQ3.使用nginx作为网关层,暴露B服务的http接口4.后台有dubbo后台,jenkins后台,r
2021-01-27 19:10:04 652
原创 springboot自定义指定类型的数据序列化方式
近期,IOS团队反馈反参中如果存在BigDecimal类型数据,反序列化时会出现丢失精度问题,需要后台把所有BigDecimal类型转变为String类型。环境java JDK1.8springboot 2.3.0.RELEASE设计概要:主要思路是配置自定义的Bigdeciaml类型的json序列化,重现com.fasterxml.jackson.databind.ser.BeanSerializerModifier的changeProperties方法,对指定类型设置自定义的序列化方
2020-12-18 14:36:02 2463
原创 java那些事儿-并发应用1
系统业务中当遇到需要调用多个系统或时长的动作时,我们会使用多线程处理。常见的方法是使用ASE的invokeAll或invokeAny方法。如果有个场景是需要多线程去掉各种微服务去校验参数,那么上面的方法就不能高效支持了。下面写了自己根据invokeAny改造的方法。下面的工具可以实现快速高效的多线程调多个微服务去校验参数,并且当其中一个失败时,其他的线程将会中断,以减小机器开销。注意:java.util.concurrent.Future#cancel只会打标,真正的线程中断需要依赖具体的业务支持。
2020-11-05 20:43:24 203
原创 java那些事儿-unsafe
想了一下,有必要专门开一个专题,说一下unsafe类。sun.misc.Unsafe类包含了很多JNI(java native interface)方法,我们可以使用包中的本地方法(native 方法)实现很多并发的工具类或方法。比如常见的原子类(atomicInterger,atomicLong等等),AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)等,都使用了unsafe的cas方法和其他方法。下面就说一下unsafe类中常用的方法。
2020-11-02 19:04:17 433
原创 简单了解java四种引用和ThreadLocal内存泄露的事
此篇文字只简单阐述下java的四种引用类型和这四种引用存在的目的和应用场景java的四种引用 引用类型 强引用 软引用 java.lang.ref.SoftReference 弱引用 java.lang.ref.WeakReference 虚引用java.lang.ref.PhantomReference 四种引用的出现的背景和应用场景 在JDK1.1版本中,只有一种引用的概念(强引用):TestBean testBeanReference=new TestBean();.
2020-10-27 16:34:30 279
转载 很详细的强引用、软引用、弱引用、虚引用-他们的特点及应用场景
强引用强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfM moryError错误,使程序异常终止,也不会靠随意回收具有强引用 对象来解决内存不足的问题。软引用软引用是用来描述一些还有用但并非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。/** * 软引用何时被收集 * 运行参数 -Xmx2.
2020-10-26 18:21:20 22257
原创 重新对transient关键字的认识
在java语言种,transient关键字用于标记在序列化过程中某变量不需要持久化到磁盘里。但是有几点需要注意:transient只作用于实现Serializable的序列化,不适用于实现Externalizable 不管有没有transient修饰,静态变量static都不能被序列化(Serializable的序列化) 经验证阿里的fastjson默认也是不会序列化transient修饰的变量,但是会序列化静态变量底层原理(引用别的博客的一句总结):serialization就是把对象的状态
2020-10-26 11:41:57 21689
原创 记一次服务器磁盘无可用空间问题的解决方案
问题回顾:有一天突然发现A系统上传文件报500错误no space disk leaf.环境:linux服务器 tomcat7问题定位:根据tomcat的异常说明在上传文件时linux服务器本地磁盘不足,随后便登录到服务器上查看使用df -h 发现目录/export使用了近24G的磁盘,但是用户 du -chs /export发现只有3.5G大小。根本对不上。怀疑是隐藏文件过大导致,使用命令du -chs .[!.]* * 发现只有一个4K的隐藏文件。最后查资料后,使用lsof命令.
2020-10-23 19:54:36 22185
原创 zookeeper 学习笔记
虚拟机环境:linux centos6.5 jdk1.81.环境安装[集群版]下载zookeeper-3.4.14.tar.gz 并解压到linux某一路径下即可 copy conf/zoo_sample.cfg配置为conf/zoo.cfg zoo.cfg属性介绍: tickTime:客户端与服务器或者服务器与服务器之间维持心跳,也就是每个tickTime时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制Flower跟Leader的通信时间,默认情况.
2020-09-08 19:48:26 93036
原创 一次生产环境的NoHttpResponseException异常的排查记录
环境:jdk1.8+tomcat8+httpclient4.5.2主要现象:项目偶发出现org.apache.http.NoHttpResponseException: The target server failed to respond异常定位原因:查阅资料,此异常属于长连接keep-Alive的一种异常现象。当服务端某连接闲置超过keep-Alive超时时间后,服务端会关闭连接,进行四次挥手。如果此时,客户端再次拿此连接来访问服务端就会报NoHttpResponseExceptio
2020-07-10 19:20:11 100144 1
转载 zookeeper实现分布式锁(公平锁|非公平锁)
配置类,读取properties中的配置属性import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.PropertySource;import org.springframework.stereotype.Component; /** * zk 配置信息 * @aut
2020-06-08 11:18:19 93384
原创 Json寻址工具类
在项目使用中,经常使用json的反序列化获取某个值,如果某个值的路径比较深,除了编写工作量变大和风险扩大外,还有就是代码不够整洁。抽空写了个根据地址寻址json内容中的某个值的工具类。说明:1.工具类使用google Gson,有兴趣的可以使用其他json序列号工具改造。大概流程都一样 private static final String JSON_ARRAY_FORMAT...
2020-04-15 17:05:52 93221
转载 JAVA8新特性
接口的默认方法(Default Methods for Interfaces)Java 8使我们能够通过使用default关键字向接口添加非抽象方法实现。 此功能也称为虚拟扩展方法。第一个例子:interface Formula{ double calculate(int a); default double sqrt(int a) { ret...
2020-04-02 11:21:04 93546
转载 OutOfMemoryError (OOM)解决思路-资料版
我们都知道JVM的内存管理是自动化的,Java语言的程序指针也不需要开发人员手工释放,JVM的GC会自动的进行回收,但是,如果编程不当,JVM仍然会发生内存泄露,导致Java程序产生了 OutOfMemoryError(OOM)错误。产生OutOfMemoryError错误的原因包括:java.lang.OutOfMemoryError: Java heap space...
2020-01-14 16:24:08 93523 1
转载 java内存模型JMM理解整理
什么是JMM JMM即为JAVA 内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM从java 5开始的JSR-133发布后,已经...
2020-01-07 14:44:03 93085
原创 【备忘录系列】springboot2 https 单向和双向证书 配置到内嵌tomcat
一、环境springboot :2.1.3.RELEASEtomcat:springboot内嵌tomcat二、基础概念:1.证书类型介绍:.DER .CER,文件是二进制格式,只保存证书,不保存私钥。 .PEM,一般是文本格式,可保存证书,可保存私钥。 .CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。 .PFX .P12,二进制格式,同时...
2019-09-26 18:08:43 93856 1
原创 CentOS-6.5-x86_64-minimal mini linux 无界面版 修改分辨率
进入到/boot/grub/目录下,然后就可以看到里面有个名为menu.lst的文件,用vim将其打开,可以看到以下内容:如果没有vga 添加即可其中这个vga=788就是控制你的分辨率与色彩模式的,你可以把它改成你的显示器支持的你喜欢的任意模式。数字对应的含义如下:色深 640×480 800×600 1024×768 1280×1024 256...
2019-09-18 16:21:44 93400
原创 【VMWARE】克隆linux centos6.5 网络修复笔记
一、克隆linux后,由于每个虚拟机的网卡都有唯一的id,需要以下步骤进行修改:rm -rf /etc/udev/rules.d/70-persistent-net.rules删除文件,然后reboot重启,系统会自动生成一个新的。 rm -rf /etc/sysconfig/network-scripts/ifcfg-eth0 修改eth0网卡的配置,我这里是需要修改静态ip...
2019-09-16 14:37:22 93048
转载 如何正确的关闭线程池?
首先看源码中的一句注释:A pool that is no longer referenced in a program and has no remaining threads will be shutdown automatically.如果程序中不再持有线程池的引用,并且线程池中没有线程时,线程池将会自动关闭。线程池自动关闭的两个条件:1、线程池的引用不可达;2、线程池中没有...
2019-07-30 15:31:46 93985
转载 Redis Cluster集群
一、redis-cluster设计Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有 节点连接。其redis-cluster架构图如下:其结构特点: 1、所有的redis节点彼此互联(PING-PONG机...
2019-06-10 14:20:39 92996
原创 Java SPI,ServiceLoader.load方法详解
SPI的全名为Service Provider Interface,当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。原理...
2019-06-06 11:13:41 103518 1
转载 在 Java 的反射中,Class.forName 和 ClassLoader 的区别
在java中Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制字节流”,获取到二进制流后放到JVM中。Class.forName()方法实际上也是调用的CLassLoader来实现的。Class.forName(String classNam...
2019-06-05 20:47:21 93211
转载 深度分析Java的ClassLoader机制
为了更好的理解类的加载机制,我们来深入研究一下ClassLoader和他的loadClass()方法。源码分析public abstract class ClassLoaderClassLoader类是一个抽象类,sun公司是这么解释这个类的:/** * A class loader is an object that is responsible for loading c...
2019-06-05 20:42:31 93367
转载 springmvc DispatcherServlet 源码分析
初始化流程HttpServletBean在init方法中, 首先将Servlet配置的参数使用BeanWrapper设置到DispatcherServlet中, 然后调用initServletBean子类通过这个方法进行初始化FrameworkServlet入口方法是initServletBean, 里面核心方法有两句: 初始化WebApplicationContext; 初始...
2019-06-04 18:46:14 92965
转载 图解LinkedHashMap原理
LinkedHashMap使用与实现先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟:LinkedHashMap结构.png2.1 应用场景HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map<String, String> ha...
2019-04-26 18:23:03 93161 2
转载 只需两步获取任何小程序源码
最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了一个滴滴他们家的青桔单车小程序的前端实现,过程一言难尽,差不多两周时间过去了,发现小程序的坑远比想象的要多的多!!在实际练手中,完全是黑盒的,看到人家上线的小程序的效果,纯靠推测,部分效果在绞尽脑汁后能做出大致的实现,但是有些细节,费劲全力都没能做出来。很想一窥源码,查看究竟,看看大厂的前端大神们是如何规避了小程序的各...
2019-03-21 14:09:12 94045
原创 JAVA知识点梳理列表
零:java三大特性五大原则资料:http://www.cnblogs.com/hnrainll/archive/2012/09/18/2690846.html一、jdk1.arraylist,linkList;hashmap线性安全?为什么?解决方案?都不是线性安全,解决方案:用Collections.synchronizedList(List<T> list)方法包...
2019-02-26 18:24:57 93124
原创 SEO学习探讨
H标签使用的SEO建议1、每个网页只能拥有一个<h1>标签。2、<h1>用来修饰网页的主标题,一般是网页的标题,文章标题,<h1>中部署主关键词。<h1>尽量靠近在html中的<body>标签,越近越好,以便让搜索引擎最快的领略主题。3、<h2>表示一个段落的标题,或者说副标题,部署长尾关键词。4、<h3...
2018-12-17 10:59:15 93851
转载 Spring中bean的生命周期
Spring 中bean 的生命周期短暂吗?在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取...
2018-07-18 17:43:20 93058
转载 cpu使用率低负载高
cpu低而负载高也就是说等待磁盘I/O完成的进程过多,就会导致队列长度过大,这样就体现到负载过大了,但实际是此时cpu被分配去执行别的任务或空闲,具体场景有如下几种。场景一:磁盘读写请求过多就会导致大量I/O等待上面说过,cpu的工作效率要高于磁盘,而进程在cpu上面运行需要访问磁盘文件,这个时候cpu会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候会切换到其他进程或者空闲,这个任务就会转...
2018-06-17 17:42:11 94365
转载 JDK1.8前多线程并发下HashMap会发生死循环
在JDK1.8之前的版本中,HashMap的底层实现是数组+链表。当调用HashMap的put方法添加元素时,如果新元素的hash值或key在原Map中不存在,会检查容量size有没有超过设定的threshold,如果超过则需要进行扩容,扩容的容量是原数组的两倍,具体代码如下:void addEntry(int hash, K key, V value, int bucketIndex) {//检...
2018-06-07 20:48:04 109825 2
转载 使用Fiddler抓到包后分析
在 fiddler4使用教程中已经介绍了Fiddler的原理和软件界面。本文主要针对Fiddler的抓包处理。Fiddler抓取HTTP请求。抓包是Fiddler的最基本的应用,以本博客为例,启动Fiddler之后,在浏览器中输入http://blog.csdn.net/chaoyu168键入回车之后,在Fiddler的web session界面捕获到的HTTP请求如下图所示: 各字段的详细说明已...
2018-04-12 15:37:01 95856
转载 19个MySQL性能优化要点解析
以下就是跟大家分享的19个MySQL性能优化主要要点,一起学习学习。1、为查询优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容
2018-03-06 16:04:23 93131 2
转载 git提交到HEAD detached导致代码丢失;找回方法和分析
背景今天线上出现bug, 在切换到旧版本的时候,由于误操作导致本地代码丢失,找回巨费时,特记录如下;bug产生原因首先在master分支上开发,线上出现bug且回到旧版本的tag,这时master分支上有一部分代码修改但未提交。当前在master上:执行git status 有未提交的代码git status当前在master上:执行git tag查看标
2018-01-09 21:01:39 101140 5
hibernate-validator 5.3.5.Final jar
2017-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人