![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 54
li_zehao
一名后端开发工程师,拥有多年高并发开发实战经验。 这个博客是我的技术日志和思考的集合地,内容涉及但不限于Java、Go、MySQL等后端技术。
展开
-
【JVM调优】ZGC常用参数解释
为了优化 Z Garbage Collector (ZGC) 在撮合系统中的内存使用,可以考虑以下几个方面的配置和调整。这些调整可以帮助改善系统性能和内存管理,提高撮合系统的整体效率。原创 2024-06-11 14:51:38 · 651 阅读 · 0 评论 -
【自动部署】4.阿里云ECS服务器 IDEA自动部署项目
如何在IDEA中,自动部署项目到阿里云ECS服务器?今天我们就来实现一键部署功能。在idea中,一键执行打包、上传、发布服务,查看实时日志等功能原创 2024-06-09 01:57:43 · 481 阅读 · 0 评论 -
Git@OSC通过Eclipse生成SSH keys RSA公钥私钥
由于我使用的系统是windows,所以不支持ssh-keygen命令没法自动生成,虽然有专业的ssh-keygen生成工具,但是懒得去下载了,直接用Eclipse比较方便,这里就讲Eclipse生成SSH keys生成RSA公钥私钥的方法。1.安装好Git工具 安装就不再说了,如前一篇文章所述:http://blog.csdn.net/boonya/article/details/5051607原创 2016-12-11 21:44:47 · 637 阅读 · 0 评论 -
redis订阅关闭异常解决
客户端连接redis报错如下:2017-04-10 13:56:55.841 DEBUG RedisMessageListenerContainer:475 - Started listening for Redis messages2017-04-10 13:56:55.845 ERROR RedisMessageListenerContainer:647 - Connection failur原创 2017-04-10 13:58:21 · 8647 阅读 · 3 评论 -
导入和导出eclipse代码格式化模板
在项目开发过程中,向svn中提交代码,存在大范围冲突现象,其实这些代码并没有修改过,有时候很头疼,直接覆盖怕冲掉别人的代码,慢慢检查效率又很低,很让人捉急,因此在一个小组开发的时候,统一代码格式化模板就会变得尤其重要,这里就分享导出和导入代码格式化模板的步骤。导出格式化代码模板:上面我们已经完成了格式化代码模板的导出工作,接下来看一下代码模板的导入。导入格式化代码模板:第一步:进入导入模板界面和选...原创 2018-07-04 18:38:34 · 3219 阅读 · 0 评论 -
Java运行Python脚本的几种方式
有时候在java项目里,需要执行Python脚本,故总结以下几种方式:1、直接执行Python脚本代码 引用 org.python包PythonInterpreter interpreter = new PythonInterpreter(); interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun');原创 2017-12-21 22:28:24 · 9994 阅读 · 0 评论 -
SSO单点登录 cas_server通过查询数据库验证用户名、密码正确性
SSO单点登录 cas_server通过查询数据库验证用户名、密码正确性原创 2016-08-21 21:18:27 · 964 阅读 · 0 评论 -
SSO单点登录 cas-server端的搭建
SSO单点登录 cas-server端的搭建原创 2016-08-21 20:49:12 · 590 阅读 · 0 评论 -
Google Guava之cache参数详解
Guava之cache参数详解 guava Cache数据移除:guava做cache时候数据的移除方式,在guava中数据的移除分为被动移除和主动移除两种。 被动移除数据的方式,guava默认提供了三种方式: 1.基于大小的移除:看字面意思就知道就是按照缓存的大小来移除,如果即将到达指定的大小,那就会把不常用的键值对从cache中移除。 定义的方式一般为 Ca原创 2016-08-18 10:08:44 · 2133 阅读 · 0 评论 -
排查线上CPU飙高的原因和解决
系统CPU飙高问题排查解决原创 2022-07-22 19:02:09 · 1334 阅读 · 1 评论 -
Java 中 Comparable 和 Comparator 比较
先介绍Comparable 和Comparator两个接口,以及它们的差异;接着,通过示例,对它们的使用方法进行说明。Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列...原创 2018-12-22 23:09:57 · 255 阅读 · 0 评论 -
Java 随机数
本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。广义上讲,Java中的随机数的有三种产生方式:通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。 通过Math.random()返回一个0到1之间的double值。 通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。第1种通过System....原创 2018-12-22 21:45:34 · 249 阅读 · 0 评论 -
JAVA-Word转PDF各种版本实现方式比较【项目实战使用】
工作中,经常做一些导出、读取Excel文档,但是从来没有尝试Word转PDF。我们通常使用的是POI和JXL。这两个插件对Excel已经有很好的支持了。操作PDF通常使用的是ITEXT插件,该插件可以操作复杂的PDF,当然我们也可以通过freemarker来生成PDF也是可以的。但是最近的项目在打印合同的时候,只提供了word模板,然后打印PDF,期间需要读取数据,填充到Word文档中,该文...原创 2018-12-14 22:36:24 · 2694 阅读 · 0 评论 -
Maven引入项目依赖的jar后pom文件报错
Maven引入项目依赖的jar后pom文件报错:1.本地仓库查看所引用的jar是否存在2.存在后,清空执行 maven update后还是报错3.最后定位分析:对应的jar还有父级依赖,查看私服上没有。在发布的时候,需要将jar以及对应的父级依赖一块发布到私服上去。...原创 2018-11-28 16:16:29 · 1478 阅读 · 0 评论 -
java中获取字节码对象的三种方式
package verify;public class ClassObject { public static void main(String[] args) { getClassObjectMethod1(); getClassObjectMethod2(); getClassObjectMethod3(); } /* * 方式一 通过对象获得 */ pr...原创 2019-02-18 15:54:38 · 1736 阅读 · 0 评论 -
使用 Lombok 优雅编码
一、介绍和使用 Lombok 是一个 java 库,能以简单的注解形式来简化 java 代码,提高开发人员的开发效率。 常见使用在开发过程中需要写的 javabean,往往开发需要花时间去添加相应的 getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的 getter/setter 方法,这些显得很冗长也没有太多技术含量,一旦修...原创 2018-11-05 18:44:37 · 275 阅读 · 0 评论 -
Java多线程系列--“基础篇”01之 基本概念
多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), notify()等接口;Thread类中的接口;synchronized关键字。注:JUC包是指,Java.util.concurrent包,它是由Java大师Doug Lea完成并在J...原创 2018-12-23 14:24:33 · 247 阅读 · 0 评论 -
Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式
本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable。之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程。关于线程池的内容,我们以后会详细介绍;现在,先对的Thread和Runnable进行了解。Thread和Runnable简介Runnable 是一个接口,该接口中只包含了一个run()方法。它的定义如下:...原创 2018-12-23 15:03:39 · 220 阅读 · 0 评论 -
Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
概要Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答。本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start() 和 run()相关源码(基于JDK1.7和1.8)start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不...原创 2018-12-23 15:31:46 · 240 阅读 · 0 评论 -
一致性Hash算法(分布式算法)
一、分布式算法在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法。典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,...原创 2019-01-21 22:33:38 · 320 阅读 · 0 评论 -
关于try、catch、finally返回return的问题
第一种情况:public static void main(String[] args) { System.out.println(print());}@SuppressWarnings("finally")public static String print() { try { System.out.println("------try------"); return ...原创 2019-02-11 11:43:41 · 271 阅读 · 0 评论 -
log4j不打日志问题之实战解决方案(二)
最近在tomcat 容器下启动项目的时候,接二连三的发现有些项目间歇性的不会打印日志,由于负责多个项目,多数项目会打印日志,所以没注意这个问题。就在昨天有一个项目部署上线的时候,在生产环境下,tomcat启动正常,但是没有打印任何日志信息,于是才开始留意这个问题。经过仔细的排查,才找到问题的根源。问题的根源:log4j在web.xml里面配置如下:<!-- log4jConfigLocation:l原创 2016-12-02 11:17:46 · 4050 阅读 · 1 评论 -
Java中的NIO和IO的比较
java标准的I/O中,提供了基于流的I/O实现,即InputStream和OutputStream。这种基于流的实现以字节为单位处理数据。 NIO在java 1.4中被纳入到了JDK中,与旧式的的基于流的I/O相比,NIO是基于块的,以块为单位处理数据。NIO有两个重要的组件缓冲(Buffer)和通道(Channel)。 Buffer:缓冲是一块连续的...原创 2018-05-13 11:57:32 · 514 阅读 · 0 评论 -
【Java编码规范】《阿里巴巴Java开发手册(正式版)》
摘要: 阿里巴巴集团推出的《阿里巴巴Java开发手册(正式版)》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Java代码规范标准。这套Java统一规范标准将有助...转载 2017-02-17 09:49:51 · 4563 阅读 · 0 评论 -
源码分析shiro认证授权流程
源码分析shiro认证授权流程1. shiro介绍 Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”;授权 - 访问控制;密码加密 - 保护或隐藏数据防止被偷窥;会话管理 - 每用户相关的时间敏感的状态。2. shiro源码分析Subject:即“当前操作用户”。但是,在Shiro中,Sub原创 2016-12-09 15:27:54 · 769 阅读 · 0 评论 -
阿里编码规约扫描eclipse插件安装使用
一、安装 在线安装地址:https://p3c.alibaba.com/plugin/eclipse/update 1.点击 Help –> Install New Software… 2.在弹出的窗口中点击add按钮,输入Name(任意)和Location(插件的URL),点击OK 3.勾选出现的插件内容,一步步安装即可。 二、使用 1.扫描。原创 2017-10-17 22:47:55 · 1000 阅读 · 0 评论 -
java多线程程序性能调优 优化过程
有句话叫“只要推力大,板砖也能飞上天”, 那换到我们it, 只要cpu强大,那么再烂的程序也能跑的飞快,但是cpu肯定是不够强大的,她是不够用,不然也就没多核心,分布式什么事情了,那java中我们如何找出我们的代码中的多线程瓶颈呢,比如这个线程当前在干什么?哪个线程的cpu 占用了100%了?哪个线程当前正在等待锁?下面主要用的命令有两个top 以及jstack 在命令行输入top 后我们看到原创 2017-06-26 17:07:40 · 1042 阅读 · 0 评论 -
java设计模式之工厂方法模式和抽象工厂模式
一、创建型模式1、工厂模式(factory method pattern): 概念:定义了一个接口,让需要的类都实现该接口。然后建立一个工厂类,对实现了同一接口的一些类进行实例的创建。工厂方法模式将产生的过程交由工厂类处理,而并非类的本身。场景:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。2、抽象工厂模式工厂方法模式有一个问题就是,类的创建依赖工厂类,原创 2017-05-15 17:43:16 · 563 阅读 · 0 评论 -
为什么OAuth2里面在获取access token之前一定要先获取code,然后再用code去获取access token?
很简单,client是怎么拿到code的?code 是通过浏览器重定向获取的,你在浏览器地址栏就可以看到,如果这一步不返回code而是直接返回access token,那么这个token其实已经暴露了.而client拿到code以后换取access token是client后台对认证服务器的访问,不依赖浏览器,access token不会暴露出去.原创 2017-04-07 15:32:44 · 3562 阅读 · 0 评论 -
log4j不打日志问题之解决方案(一)
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在使用log4j的时候,难免会遇到各种问题;下面介绍一下,使用log4j不打印日志情况的排查。首先,在使用log4j的时候,必须的jar包。commons-logging-1.2.jarlog4j-1.2.17.jarslf4j-log4j12-1.7.21.jarslf4j-ap原创 2016-12-02 11:43:48 · 22378 阅读 · 6 评论 -
单例模式-静态内部类的实现(线程安全)
单例模式-静态内部类的实现(线程安全)/** * 静态内部类实现单例模式 --线程安全 * * @author lizehao * @date 2016年9月25日20:50:24 */public class Singletion { private static class InnerSingletion { private static Singletio原创 2016-09-25 20:51:59 · 980 阅读 · 0 评论 -
分布式锁:Java常用技术方案
前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题。所以自己结合实际工作中的一些经验和网上看到的一些资料正文:第一步,自身的业务场景:在我日常做的项目中,目前涉及了以下这些业务场景: 场景一: 比如分配任务场景。在这个场景中,由于是公司的业务后台系统,主要是用于审核人员的审核工作,并发量并不是很高,而且任原创 2016-08-14 23:06:53 · 458 阅读 · 0 评论 -
TCC柔性事物简介
首先业务系统 和 联银平台 是HTTP 跨网络的 所以说HTTP请求 响应必须要快所以只要我们联银平台接受到业务系统的数据了,直接存储到库中,也就是数据要落地只要校验通过、数据落地了 我们就保证了业务系统这个请求不会丢失 不管怎么样 先给业务系统返回 个结果 就是消息接受了 或者拒绝了然后 继续走, 入库之后 我们代码继续写producer。send(msg)到MQ返回true 则表示投递成功了原创 2016-09-06 09:20:42 · 1192 阅读 · 0 评论 -
java导出可执行文件
java导出可执行文件本文主要讲解java project如何导出可执行jar文件:工程介绍** 首先要有一个可执行文件的入口,也就是main方法入口。要保证导出之前main()函数可以正常执行。 代码如下:public class EntranceController { @SuppressWarnings("resource") public static void mai原创 2016-08-04 14:36:46 · 1161 阅读 · 0 评论 -
泛型实例化
泛型实例化 :类型可以通过参数来实现,例如泛型中的T t,但是我想生成T对象,那怎么实现呢?按照以往的经验,我们很容易想到这种方式:public class Test<T> { T t; public T create(){ t = new T(); }}此时,由于T的具体类型我们无法获得,所以new T()是无法通过编译的。换一种思路,我们不妨使用反射机原创 2016-08-29 11:36:30 · 8935 阅读 · 0 评论 -
Java8 中的 HashMap 和 ConcurrentHashMap 全解析
Java8 HashMapJava8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的长度,为 O(n)。为了降低这部分的开销,在 Java8 中,当...原创 2018-03-15 17:02:16 · 369 阅读 · 0 评论 -
Java7 中的 HashMap 和 ConcurrentHashMap 全解析
今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清楚...原创 2018-03-15 17:11:20 · 434 阅读 · 1 评论 -
Java NIO入门之概念解析
一.什么是同步?什么是异步? 同步:如果有多个任务要执行,这些任务必须逐个地进行,一个任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行; 异步:如果有多个任务要执行,这些任务可以并发地执行,一个任务的执行不会导致整个流程的暂时等待。 这就是同步和异步。举个简单的例子,假如有一个任务包括两个子任务A和B,对于同步来说,当A在执行的过程中,B只有等待,直至A执行完毕,B...原创 2018-05-12 23:53:42 · 257 阅读 · 0 评论 -
JVM类加载机制
JVM提供了3种类加载器:启动类加载器(Bootstrap ClassLoader):负责加载 JAVA_HOME\lib 目录中的,或通过-Xbootclasspath参数指定路径中的,且被虚拟机认可(按文件名识别,如rt.jar)的类。扩展类加载器(Extension ClassLoader):负责加载 JAVA_HOME\lib\ext 目录中的,或通过java.ext.dirs系统变量指定...原创 2018-05-17 16:20:35 · 231 阅读 · 0 评论 -
Eclipse 修改jsp、XML、 java、 HTML 每行显示的字数
HTML: window -> Preferences-> web -> html files -> Editor JSP: window -> Preferences-> web -> JSP files -> Editor 【备注】:jsp页面的字数设置,在有些版本的eclipse中,当设置了html以后,jsp相应的也就不用再设置!XML: w...原创 2018-03-25 18:35:20 · 1355 阅读 · 0 评论