![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java技术
文章平均质量分 70
whfstudio
下一个风口,I will change the word!
展开
-
JVM各区域的用途
程序计数器用于给字节码解释器来选取吓一跳需要执行的字节码指令。每个线程有一个独立的程序计数器去,且各个线程之间互不影响。如果线程正在执行一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的内存地址;如果执行的是Native方法。在计数器为Undefined。此区域是JVM规范中唯一一个不存在OOM(内存溢出)的区域。虚拟机栈(局部变量空间)存放编译器可知的各种基本数据类型(boolean原创 2016-10-30 15:41:39 · 522 阅读 · 0 评论 -
Java实现终止线程池中正在运行的定时任务
源于开发最近项目中遇到了一个新的需求,就是实现一个可以动态添加定时任务的功能。说到这里,有人可能会说简单啊,使用quartz就好了,简单粗暴。然而quartz框架太重了,小项目根本不好操作啊。当然,也有人会说,jdk提供了timer的接口啊,完全够用啊。但是我们项目的需求完全是多线程的模型啊,而timer是单线程的,so,楼主最后还是选择了jdk的线程池。线程池是什么Java通过E原创 2018-01-17 20:33:01 · 8448 阅读 · 0 评论 -
Java命令之javap初探
javap是jdk自带的一个工具在jdk安装目录的/bin下面可以找到,可以对代码反编译,也可以查看java编译器生成的字节码,对代码的执行过程进行分析,了解jvm内部的工作。下面列举javap命令的常用options及其功能描述,更多功能的使用请自行Google,楼主不做赘述。用法摘要-help 帮助-l 输出行和变量的表-public 只输出public方法和域-protected 只输原创 2018-02-26 13:22:29 · 350 阅读 · 0 评论 -
测试环境服务器硬盘塞满问题排查
项目中出现的问题某天下午测试环境服务器出现tab无法补全命令,给出的提示大概意思就是说,无可用空间无法创建临时文件,不过这次跟上次出现的问题比较像,上次服务器出现的问题,因此楼主判断可能是服务器数据盘被占满,果不其然,使用df -h命令看到服务器数据盘出现100%被占用的情况。问题排查过程楼主首先想到的是可以看到,linux系统中占用数据盘最大的文件,常情况下,最有可能找出占用磁盘空间...原创 2018-03-12 18:03:12 · 282 阅读 · 0 评论 -
自建脚手架之配置中心--LightConf的实现
常规项目开发过程中, 通常会将配置信息位于在项目resource目录下的properties文件文件中, 配置信息通常包括有: jdbc地址配置、redis地址配置、活动开关……等等。因此每次上线或者服务迁移的时候都要手动修改配置,并一台一台的重启服务器,甚是麻烦,且费时费力。 于是便萌生出了使用配置中心的想法,在考察了github上的apoll,xxl-conf等开源项目后,感觉...原创 2018-04-22 18:42:07 · 255 阅读 · 0 评论 -
复杂业务下向Mysql导入30万条数据代码优化的踩坑记录
从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负责的模块connector就派上了用场。在楼主的努力下,线上数据同步代码经历了从最初的将近16个小时(并且还出现其他问题这些问题,等后面慢慢细说),到最终25分钟的性能优化。打个广告,楼主自己造的轮子,感兴趣的请点https...原创 2018-04-23 21:38:57 · 644 阅读 · 0 评论 -
死磕Java之聊聊HashSet源码(基于JDK1.8)
HashSet的UML图HashSet的成员变量及其含义public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{ static final long serialVersionU...原创 2018-05-12 22:23:21 · 155 阅读 · 0 评论 -
死磕Java之聊聊ArrayList源码(基于JDK1.8)
工作快一年了,近期打算研究一下JDK的源码,也就因此有了死磕java系列ArrayList 是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是...原创 2018-05-07 20:22:01 · 420 阅读 · 0 评论 -
死磕Java之聊聊LinkedList源码(基于JDK1.8)
工作快一年了,近期打算研究一下JDK的源码,也就因此有了死磕java系列LinkedList 是一个继承于AbstractSequentialList的双向链表,链表不需要capacity的设定,它也可以被当作堆栈、队列或双端队列进行操作。LinkedList 实现 List 接口,能对它进行队列操作,提供了相关的添加、删除、修改、遍历等功能。LinkedList 实现 Deque 接口...原创 2018-05-07 20:25:56 · 237 阅读 · 0 评论 -
死磕Java之聊聊ThreadLocal源码(基于JDK1.8)
记得在一次面试中被问到ThreadLocal,答得马马虎虎,所以打算研究一下ThreadLocal的源码模拟当时的面试场景面试官 : 用过ThreadLocal吗? 楼主答 : 用过,当时使用ThreadLocal的时候,使用Spring实现横切整个Controller层,使用ThreadLocal实现了统计每次请求对应方法的执行时间,具体代码如下 public cl...原创 2018-05-07 20:27:24 · 472 阅读 · 0 评论 -
JDK 定时任务 Timer 与 ScheduledExecutorService 排坑记录
正在认真敲代码的楼主,突然收到数据维护系统发过来的报警邮件说楼主凌晨跑的定时任务没有成功,于是便开始了楼主今天的找坑填坑的过程。 定时任务,关于 Timer 与 ScheduledExecutorService 的抉择这事肯定会有小伙伴说了为啥不用Quartz啊,因为楼主的庙小啊,就几个定时任务而已Quartz太重了。Timer 存在的问题Timer的主要问题在于,如果T...原创 2018-07-19 11:20:12 · 777 阅读 · 0 评论 -
TCP 粘包问题浅析及其解决方案
最近一直在做中间件相关的东西,所以接触到的各种协议比较多,总的来说有TCP,UDP,HTTP等各种网络传输协议,因此楼主想先从协议最基本的TCP粘包问题搞起,把计算机网络这部分基础夯实一下。 贴个广告楼主的博客已全部搬迁至自己的博客,感兴趣的小伙伴请移步haifeiWu与他朋友们的博客专栏TCP协议的简单介绍TCP是面向连接的运输层协议简单来说,在使用TCP协议之前,必须先建...原创 2018-07-19 11:22:21 · 3385 阅读 · 1 评论 -
Netty 源码中对 Redis 协议的实现
原文地址: haifeiWu的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢!近期一直在做网络协议相关的工作,所以博客也就与之相关的比较多,今天楼主结合 Redis的协议 RESP 看看在 Netty 源码中是如何实现的。 RESP 协议RESP 是 Redis 序列化协议的简写。它是一种直观的文本协议,优势在于实现非常简单,解析性...原创 2018-08-09 11:21:45 · 382 阅读 · 0 评论 -
线上 ELK 集群健康值 red 状态问题排查与解决
原文地址: haifeiWu的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢!之前一直运行正常的数据分析平台,最近一段时间没有注意发现日志索引数据一直未生成,大概持续了n多天,当前状态: 单台机器, Elasticsearch(下面称ES)单节点(空集群),1000+shrads, 约200G大小。 问题排查服务器内存,CPU状...原创 2018-08-08 13:30:27 · 1740 阅读 · 0 评论 -
Redis协议规范(译文)
原文地址: haifeiWu的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢!Redis客户端使用名为RESP(Redis序列化协议)的协议与Redis服务器进行通信。 虽然该协议是专为Redis设计的,但它可以用于其他CS软件项目的通讯协议。 RESP是以下几方面的考虑: - 易于实现 - 快速解析 - 可读性高RESP可以序列...原创 2018-08-08 13:34:18 · 323 阅读 · 1 评论 -
spring aop实现权限管理
问题源于项目开发最近项目中需要做一个权限管理模块,按照之前同事的做法是在controller层的每个接口调用之前上做逻辑判断,这样做也没有不妥,但是代码重复率太高,而且是体力劳动,so,便有了如题所说的使用spring aop做一个切点来实现通用功能的权限管理,这样也就降低了项目后期开发的可扩展性。代码重构之spring 配置文件原创 2017-12-06 19:42:20 · 1027 阅读 · 0 评论 -
记一次RSA非对称算法的排坑经历
Map<String,Object> encryParam = new HashMap<>(5); encryParam.put("connectorUrl",connectorUrl); encryParam.put("token",token); encryParam.put("plugin",pluginsList); encry原创 2017-10-23 17:30:20 · 309 阅读 · 0 评论 -
扒一扒spring,dom4j实现模拟实现读取xml
今天leadr提出需求,原来公司项目中读取解析xml文件的代码效率太低,考虑切换一种xml为数据封装格式与读取方式以提高效率。我这灵机一动spring对bean的依赖注入就是读取xml文件,可以尝试扒一扒spring的源码,来实现一个轻量级的方案。重构xml文件,向spring的xml文件格式看齐重构完成的xml文件格式如下:<?xml version="1.0" encoding="UTF-8"原创 2017-08-23 20:40:44 · 964 阅读 · 0 评论 -
maven学习笔记
maven学习笔记一 下载对应的maven版本maven是Apache组织的开源项目,所以我们就不用费劲找各种破解版本了,直接下载就可以了,这里给大家提供一个下载链接Apache Maven二 配置maven的环境变量将下载好的maven解压到你相应的文件目录下,这里的环境变量的配置跟java的环境变量的配置是一样的,就是将maven下的lib目录在Path中配置好。配置好环境变量后在CMD命令下输原创 2016-10-30 15:33:07 · 331 阅读 · 0 评论 -
集合框架总结
集合框架总结ArrayList对于ArrayList,它的特点是:内部采用动态数组实现,这决定了:可以随机访问,按照索引位置进行访问效率很高,用算法描述中的术语,效率是O(1),简单说就是可以一步到位。除非数组已排序,否则按照内容查找元素效率比较低,具体是O(N),N为数组内容长度,也就是说,性能与数组长度成正比。添加元素的效率还可以,重新分配和拷贝数组的开销被平摊了,具体来说,添加N个元素的原创 2016-11-27 21:49:30 · 413 阅读 · 0 评论 -
Centos7安装配置JDK8
Centos7安装配置JDK8一、准备工作第一步,去甲骨文官网下载Jdk相应的版本,我这里下载的是jdk1.8。第二步将你从官网上下载下来的jdk使用FTP工具上传到云服务器上的相应目录,我的是上传到/usr/local目录下的。第三步,解压jdk安装包,使用命令 tar -zxvf 文件名。二、安装配置jdk安装将解压出来的文件放到你的文件夹下,输入命令tar -zxvf jdk-8u92原创 2016-12-18 18:06:01 · 566 阅读 · 0 评论 -
Git问题Everything up-to-date解决
今天push代码的时候遇到了一个小问题,提示『Everything up-to-date』 ,导致不能push代码,说这里解决了记下小记。提交代码遇到『Everything up-to-date』上网查了下,发现中文大多答非所问,少数能解决的并没有阐述原理,所以我写这篇文章记录下。这里先上stackoverflow的回答,基础好的可以看这个。接下来说我自己的理解,出现这个问题的...转载 2017-01-11 18:00:51 · 919 阅读 · 0 评论 -
BIO与NIO的方式实现文件拷贝
面试题 - 编程实现文件拷贝。(这个题目在笔试的时候经常出现,下面的代码给出了两种实现方案)import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;impor原创 2016-11-14 15:04:19 · 702 阅读 · 1 评论 -
Hexo下Next主题配置与优化
使用Next主题在这里Downloads Next主题代码将下载的代码放在myBlog/theme/next目录下设置站点myBlog/_config.yml的theme字段值为next生成新页面hexo g开启服务hexo s –debug发布代码hexo d注:此时登录网站,发现是空白的,打开控制台,提示很多vendors目录下的文件404,解决办法是将next主题下即myBlog原创 2017-03-01 12:05:40 · 496 阅读 · 0 评论 -
Java开发环境的搭建-JDK的安装
一、下载JDK是个免费的东东,所以不要去百度啥破解版了,直接去官网下载最新版本吧,比较安全, 下载地址 如下图所示 - 点击上图中的圈中部分,之后会下图的部分。 根据你的电脑系统是64位,还是32位选择下载的版本。注意选中Accept License Agreement二、安装过程点击下一步 建议更改路径,我的jdk安装在d盘 新建文件夹 点击确定,之后点击下一步 等待安装jdk原创 2017-01-22 11:23:09 · 423 阅读 · 0 评论 -
原子变量与CAS算法小结
CAS算法CAS(compare-and-swap)是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。CAS是一种无锁非阻塞算法的实现。CAS 包含了 3 个操作数: 需要读写的内存值V 进行比较的值A 拟写入的新值B当且仅当V的值等于A时,CAS通过原子方式用新值更新V的值,否则不会执行任何操作。CAS操作过程如下所示CAS算法模原创 2017-01-22 17:02:54 · 808 阅读 · 0 评论 -
java实现生产者消费者模式
生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经放入产品的缓冲区中再次投放产品。原创 2017-01-23 13:52:22 · 315 阅读 · 0 评论 -
volatile关键字小结
Java 提供了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程。可以将 volatile 看做一个轻量级的锁,但是又与锁有些不同: 1. 对于多线程,不是一种互斥关系 2. 不能保证变量状态的“原子性操作”在没有用volatile关键字修饰的demo/** * Volatile 关键字:当多线程操作共享数据时,可以保证内存数据的可见性, * 相较于sy原创 2017-01-23 16:44:39 · 291 阅读 · 0 评论 -
tomcat配置文件server.xml详解
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成原创 2017-03-01 19:30:02 · 368 阅读 · 0 评论 -
Java NIO学习笔记
Java NIO学习笔记一 基本概念IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。 所有语言运行时系统提供执行 I/O 较高级别的工具。在java编程中,标准低版本IO使用流的方式完成I/O操作,所有的I/O都被视为单个的字节流动,称为一个Stream的对象一次移动一个字节。 NIO是在JDK1.4之后出现的转载 2017-02-03 20:07:16 · 326 阅读 · 0 评论 -
解决无限创建的子文件夹删除不了的问题
能用代码解决的问题都不是问题废话不多说,直接上代码/** * 解决无限创建的子文件夹删除不了的问题 * @author wuhaifei */public class ForeverDelete { // 删除文件夹方法 private void deleteDir(File file) { if (file.listFiles().length == 0原创 2017-02-27 17:07:41 · 1200 阅读 · 0 评论 -
Maven安装教程
下载Maven 是 Apache 软件基金会组织维护的一款自动化构建工具, 专注服务于 Java 平台的项目构建和依赖管理。 Maven 这个单词的本意是: 专家,内行。 读音是[‘meɪv(ə)n]或[‘mevn]。maven下载地址点击下载地址,如下所示: 解压maven的压缩包到相应的硬盘中(比如D盘下)设置环境变量复制环境变量路径右键我的电脑->属性->高级系统设置->环境变量->P原创 2017-02-25 11:21:55 · 704 阅读 · 0 评论 -
高性能无锁队列 Disruptor 初体验
原文地址: haifeiWu和他朋友们的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢!最近一直在研究队列的一些问题,今天楼主要分享一个高性能的队列 Disruptor 。 what Disruptor ?它是英国外汇交易公司 LMAX 开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题。基于 Disruptor 开发的系统单...原创 2018-08-16 21:39:52 · 497 阅读 · 0 评论