![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 70
Haozz_1994
万般皆下品,惟有读书高。
展开
-
记录SecureRandom踩坑经历
背景上周工作中有个问题耽搁了很长时间,打算写个博客记录一下,算是一个小复盘。问题我们公司共有三个测试环境,暂且称为test1、test2、test3环境。有一个服务发布在test3环境可以正常使用,没有任何报错,但是发布在test2环境就会报错。代码都是一样的,刚开始是怀疑配置有问题,仔细检查之后没有任何问题。后来借助arthas定位到了问题在于SecureRandom。也是因为这个事情,也专门写了一篇博客记录下arthas的简单实用。SecureRandom使用随机数的话,一般会像这样:pub原创 2020-11-29 23:47:11 · 710 阅读 · 1 评论 -
Arthas简单使用
目录背景安装1、下载Arthas2、启动3、常用命令3.1、dashboard3.2、thread3.3、thread id3.4、 thread -b3.4、thread -n 53.5、 stack 全类名 方法名3.6、 trace 全类名 方法名3.7、 monitor 全类名 方法名背景上周在工作中遇到了一个bug,在服务器上可以复现,但是本地调试无法复现。于是想到了arthas,觉得有必要简单写一篇博客记录下arthas的简单使用。安装1、下载Arthas直接在服务器上:wget h原创 2020-11-29 23:14:38 · 972 阅读 · 0 评论 -
JVM调优
JVM调优原生命令jvisualvmjps:查看所有java应用及进程idjmapjmap -histo PID: 查看内存信息、实例个数jmap -heap PID: 查看堆信息(各个分代空间的大小)jstackjstack 进程id | grep -A 行数 16进制的线程idjinfojinfo -flags PID: 查看JVM启动参数jinfo -sysprops PID:查看JVM启动系统参数jstat功能:可以查看堆内存各部分的使用量,以及加载类的数量命令格式:js原创 2020-07-19 16:19:42 · 216 阅读 · 0 评论 -
canal学习笔记(应用案例)
canal学习笔记(应用案例)文章目录canal学习笔记(应用案例)一. 场景二.建立项目现在MySQL有了,canal服务也有了,就差canal的客户端了。客户端拿到数据可以进行业务处理,这里以java项目为案例。一. 场景以异构数据的同步为例,假设要将MySQL的数据存入redis和es中。以前的方法都是手动在MySQL更新完成后新增redis和es,现在利用canal监听MyS...原创 2020-04-05 01:15:38 · 632 阅读 · 0 评论 -
canal学习笔记(原理与环境搭建)
Canal学习笔记项目canal: [kə’næl]中文翻译为渠道,运河,管道是阿里开源的使用Java开发的用于MySQL数据库增量日志数据的订阅、消费和解析历史背景:早期阿里在杭州和美国双机房部署,存在跨机房数据同步的业务需求,实现方式主要是基于业务trigger(触发器)获取增量变更。从2010年开始,阿里逐渐尝试采用解析数据库日志获取增量变更进行同步,由此衍生出了canal项目...原创 2020-03-29 23:07:23 · 311 阅读 · 0 评论 -
Java中的二进制运算
Java中的二进制运算比特bit,信息量的最小单位,符号b,二级制中的一位数字节byte,表示信息的最小单位,符号B。计算机中的所有数据以字节为单位。 1byte = 8bit1.按位与 & 参与运算的两个数据,按二进制位进行与运算。相同位上两个都为1,结果才为1。1&1=1、1&0=0、0&1=0、0&0=0。 14&3=2...原创 2020-03-29 21:04:04 · 1214 阅读 · 0 评论 -
Map底层之ConcurrentHashMap原理浅析
上一篇文章(HashMap原理浅析)讲解了HashMap的基本原理。这篇文章我们来看一下支持高并发的ConcurrentHashMap。HashMap是线程不安全的,在高并发场景下做插入操作没有可能出现环形链表(具体原理太过烧脑,这里不做分析)。想要避免HashMap 的线程安全问题,可以使用Collections.synchronized(map)方法进行同步化,但是性能比较低下。无论读...原创 2018-08-07 17:21:50 · 234 阅读 · 0 评论 -
SpringBoot+ActiveMQ启动报错:'JmsAutoConfiguration did not match'问题分析
SpringBoot整合ActiveMQ,一切准备工作就绪之后,启动报错如下:java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) com.mysql.jdbc.AbandonedConnectionCleanupThread.run(Abando...原创 2018-11-16 18:30:49 · 7933 阅读 · 5 评论 -
IntelliJ IDEA 安装及破解记录(version: 2017.3.4)
IntelliJ IDEA是非常受欢迎的IDE,它的功能相当强大,不用再多说。上次换工作重新安装IDEA之后,就想着写一篇博客来记录一下安装和破解过程,免得每次都要百度找文章,一直拖到最近才有闲暇。提前声明一下,提倡正版,这篇文章仅供学习参考。 本次安装及破解的IntelliJ IDEA版本如下图: 大家可以到IntelliJ IDEA官网下...原创 2018-11-30 15:46:12 · 1616 阅读 · 0 评论 -
开闭原则浅析
开闭原则(OCP):一个软件实体(类、模块、函数)都应该对扩展开放,对修改封闭。在软件的生命周期内,因为变化、升级和维护等原因都会对原有代码进行修改,可能给原有代码引入错误。此时应尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有代码来实现。看下面一个最简单的代码例子。package com.haozz.demo.fee;import org.springframework.ste...原创 2019-01-08 22:29:27 · 2665 阅读 · 0 评论 -
JVM垃圾回收机制浅谈
一.前世今生可能很多人都把垃圾回收(GC)这项技术作为Java语言的伴生产物。其实GC的历史比Java久远,早在1960年的Lisp语言中就使用了内存动态分配和垃圾回收技术。二.哪些内存需要回收JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、方法区、堆。其中程序计数器、虚拟机栈、本地方法栈这三个区域是线程私有的,他们随线程而生、随线程而死,所以这几个区域的内存分配...原创 2019-02-27 12:38:19 · 213 阅读 · 0 评论 -
ThreadLocal学习
一. 概论多线程访问同一个共享变量时特别容易出现并发问题,特别是在多个线程需要对一个共享变量进行写入时。为了保证线程安全,一般使用者在访问共享变量时需要进行适当的同步,如下图所示: 同步的措施一般是加锁,这就需要使用者对锁有一定的了解,这显然加重了使用者的负担。那么有没有一种方式可以做到,当创建一个变...原创 2019-03-10 22:27:25 · 307 阅读 · 0 评论 -
ElasticSearch学习笔记Ⅰ - 安装
目前公司的项目中使用到了ElasticSearch,而自己之前虽然久闻ES大名,但也只是看了一些相关的杂乱的东西,所以很有必要系统地学习并梳理一下ElasticSearch的整个知识架构。推荐ES官方的QuickStart。一. 简介ElasticSearch是一个分布式、可扩展、实时的搜索与数据分析引擎,它能从项目一开始就赋予你的数据以搜索、分析和探索的能力。它基于Apache Lu...原创 2019-05-13 00:37:58 · 13324 阅读 · 0 评论 -
排序算法之冒泡排序
package com.example.demo.sort;import java.util.Arrays;/** * 冒泡排序 * 相邻元素两两比较, * 每一路结束后会在队尾的有序区域多一个元素 * 一共需要遍历size-1轮 * 时间复杂度O(n²) */public class BubbleSortDemo { public static void ma...原创 2019-08-31 23:34:42 · 139 阅读 · 0 评论 -
排序算法之快速排序
package com.example.demo.sort;import java.util.Arrays;/** * 快速排序 * 分治法: * 每一轮挑选一个基准元素,其他比它大的元素全部移动到右边,比它小的元素全部移动到左边 * 每一轮操作n次,一共需要logn轮,时间复杂度O(nlogn) * 重点在于: * 【基准元素 pivot 的选择】此例中取数组的第一个元素为...原创 2019-08-31 23:35:42 · 162 阅读 · 0 评论 -
Map底层之HashMap原理浅析
1.概述Map<k,v="">是常见的键值对存储接口,Java中存储键值对的数据类型都实现了这个接口,表示映射表。其中有两个核心操作get(Object key)和put(K key, V value),分别用来获取键对应的值以及向映射表中插入键值对。public interface Map<K,V> { ··· V get(Object key)...原创 2018-08-02 18:45:25 · 1021 阅读 · 1 评论 -
Java中extends一定代表继承吗?
Java中继承用哪个关键字表示?extends!没错,这是Java小学生都知道的常识。可是extends有没有别的含义呢?它在任何情况下都一定代表继承吗?不一定。我们知道Collections类有静态方法sort,用于List的排序,该方法要求List中的元素类必须实现Comparable接口。我们来看看源码:...@SuppressWarnings("unchecked")publ...原创 2018-07-18 11:10:25 · 1848 阅读 · 0 评论 -
Java设计模式之动态代理
动态代理的意义在于生成一个占位(又称代理对象),来代理真实对象,从而控制真实对象的访问。我们首先来谈谈什么是代理模式。假设客户带着需求去找公司,显然不会直接和软件工程师谈,而是和商务谈,此时客户会认为商务就代表公司,客户是通过商务去访问软件工程师的。我们就可以认为商务(代理对象)代理了软件工程师(真实对象),因此,代理的作用就是,在真实对象访问之前或者之后加入对应的逻辑,或者根据其他规则控制是否使...原创 2018-05-21 12:39:47 · 2730 阅读 · 0 评论 -
Java设计模式之动态代理(拦截器的应用)
todo原创 2018-05-27 22:38:39 · 2263 阅读 · 0 评论 -
Java设计模式之责任链模式
设计者往往会用拦截器去代替动态代理,然后将拦截器的接口提供给开发者,从而简化开发者的开发难度,但是拦截器可能有多个。举个例子,一个程序员需要请假一周,如果把请假申请单看成一个对象,那么它需要经过项目经理、部门经理、人事等多个角色的审批,每个角色都有机会通过拦截这个申请单进行审批或者修改。这事就要考虑提供项目经理、部门经理和人事的处理逻辑,所以需要提供3个拦截器,二传递的则是请假申请单。当一个对象在...原创 2018-05-27 23:34:48 · 941 阅读 · 0 评论 -
Redis中常用的两个操作工具类
Redis是时下最流行的NoSql数据库,可以用来作为数据库,消息中间件,缓存。而使用最广泛的还是用Redis做缓存。日常学习的话最好在本地安装Redis服务器,不会安装的小伙伴请参考这篇博客:Windows下搭建Redis服务器。这两个工具类是现在的项目中用到的,已经封装好了,因为是通用的,所以贴出来跟大家分享一下。1.CacheFetchUtils增强工具类package com...原创 2018-06-04 16:46:40 · 7317 阅读 · 0 评论 -
ExecutorService深入理解
ExecutorService是Executor直接的扩展接口,也是最常用的线程池接口,我们通常见到的线程池定时任务线程池都是它的实现类。原文:An Executor that provides methods to manage termination and methods that can produce a Future for tracking progress of one or mo...转载 2018-06-04 17:35:36 · 175 阅读 · 0 评论 -
Java中实现简单的Excel导出
简单介绍一下Java中的Excel文件导出功能(基于HttpServletResponse实现下载)首先,引入需要依赖的jar包:<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</ve...原创 2018-06-06 11:15:32 · 2512 阅读 · 3 评论 -
SpringBoot实现热部署
SpringBoot实现热部署主要依赖的是DevTools工具,IDEA可以在新建SpringBoot项目时勾选DevTools选项:或者手动在pom.xml中添加DevTools依赖的相关jar:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring...原创 2018-06-06 15:09:58 · 8226 阅读 · 1 评论 -
SpringBoot整合MyBatis
SpringBoot介绍做为后端开发的你,是否也曾像我一样,因为框架中无穷无尽的配置而加班至深夜,浸没在xml的海洋里,绝望在心中蔓延。忽然,天边出现了一丝曙光,SpringBoot这轮太阳冉冉升起,将永夜的黑暗一扫而光。使用了SpringBoot之后,编码、配置、部署及监控都将变得简单,让我们一起沐浴在SpringBoot的海洋中吧!很多初入坑的小伙伴有这样的疑惑:SpringBoot和...原创 2018-05-31 12:49:06 · 2510 阅读 · 0 评论 -
SpringBoot项目,访问任意接口提示Unauthorized,返回401,并跳转到登陆页面的错误
之前搭建了一个SpringBoot项目用于测试集成Redis和MyBatis以及Freemarker,搭建完成测通之后就没有再打开过。今天打开之后想要测试一个问题,发现在这个项目下无论请求哪个接口,浏览器都会跳转到一个登录页面,而且这个页面不是我写的,如下图: 地址栏里的login也是在我输入了自己的接口之后,自动变成了login 于是用Postman测试,得到401响应: 当时一脸...原创 2018-06-22 12:23:11 · 49815 阅读 · 18 评论 -
MyBatis插入数据返回主键
Service层:public int addUser(UserDomian user){ int i = userMapper.insert(user);}xml:&lt;insert id="insert" parameterType="....UserDomain"&gt; insert into t_user(user_name,password) ...原创 2018-06-22 14:18:54 · 765 阅读 · 0 评论 -
SpringBoot之小彩蛋:动态Banner
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / ...原创 2018-06-07 17:12:11 · 4383 阅读 · 0 评论 -
Json转换工具类
Json字符串是常用的数据格式,下面提供一个Json转换的工具类,它其实也是基于jackson的:package com.csdn.myboot.utils;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.JavaType;import com.f...原创 2018-06-22 15:11:42 · 1230 阅读 · 0 评论 -
Ajax之从头分析
不管你有没有接触过ajax开发,它的大名你一定听说过。可以说,没有ajax技术,就没有现在欣欣向荣的web开发的景象。那么什么是ajax呢。ajax的全称为Asynchronous JavaScript and XML,中文翻译为异步的JavaScript和XML。ajax并不是某种语言,而是一种技术。即无需重新加载整个网页的情况之下更够更新部分网页的技术。正是因为ajax技术,网页才...原创 2018-06-29 01:04:31 · 1294 阅读 · 2 评论 -
关于Object中equals方法和hashCode方法判断的分析
首先提出这样一个问题:如果两个对象不相同,他们的hashCode值一定不相等吗?我们都知道equals和hashCode是Object中的方法,java中每一个对象都具有这两个方法。equals(Object obj):判断两个对象是否“相同”,返回true或false;public boolean equals(Object obj) { return (this == obj)...原创 2018-05-18 16:54:56 · 1707 阅读 · 0 评论