Java
文章平均质量分 66
hellozhxy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
easyexcel中的常用注解
@ExcelProperty@ColumnWith 列宽@ContentFontStyle 文本字体样式@ContentLoopMerge 文本合并@ContentRowHeight 文本行高度@ContentStyle 文本样式@HeadFontStyle 标题字体样式@HeadRowHeight 标题高度@HeadStyle 标题样式@ExcelIgnore 忽略项@ExcelIgnoreUnannotated 忽略未注解字段注解 类注解@Column...转载 2021-10-09 10:13:02 · 4160 阅读 · 0 评论 -
java实用工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。一. org.apache.commons.io.IOUtilscloseQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块toString:转换IO流、 Uri、 byte[]为Stringcopy:IO流数据复制,从输入流写到输出流中,最大支持2G转载 2021-09-11 11:10:12 · 743 阅读 · 0 评论 -
美团技术总结:Java中9种常见的CMS GC问题分析与解决
1. 写在前面|本文主要针对 Hotspot VM 中“CMS + ParNew”组合的一些使用场景进行总结。重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省略较多。另外,本文专业术语较多,有一定的阅读门槛,如未介绍清楚,还请自行查阅相关材料。|本文总字数 2 万左右(不包含代码片段),整体阅读时间约 30min ,文章较长,可以选择你感兴趣的场景进行研究。1.1 引言自 Sun 发布 Java 语言以来,开始使用 GC 技术来进行内存自动管理,避免了手动管理...转载 2021-05-06 21:24:14 · 4573 阅读 · 0 评论 -
Java序列化接口Serializable接口的作用总结
一.Java序列化接口Serializable的作用:一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的值。(因为静态static的东西在方法区.)序列化能把堆内存中的对象的生命周期延长,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了.(存储到硬盘是一个文件,不需要我们去解析,如果用记事本打开解析会出现乱码,解析要用特定的方式,不用我们管. 我们只需要读取)..转载 2020-11-13 19:55:49 · 4195 阅读 · 0 评论 -
深度剖析 synchronized
线程安全是并发编程中关注的重点,应该注意到的是,造成线程安全问题的主要原因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,Java 引入了互斥锁的概念,对共享数据变量在访问前需要获取锁,然后才能对其进行修改,修改完后再释放锁,没有获取到锁的线程只能等待,直到当前线程处理完毕释放该锁。这样能够保证在同一时刻只有一个线程能够对共享数据进行操作,保证了多线程下的线程安全。在 Java 中,关键字 synchronized 可以保证在同一个时刻,只有一个线程可以执.转载 2020-10-10 09:11:01 · 435 阅读 · 0 评论 -
MAT分析OOM问题
生产环境,我们的 Flink 作业偶尔会出现 heap OOM,那么当出现这种情况我们会怎么办?通常来说会通过 jmap 命令去将作业的 heap dump 一份文件出来,可是 jmap 导出的文件我们也看不懂啊,那么该怎么分析呢?今天推荐 memory analyzer(mat)这个工具,让他帮助我们来观察程序的内存分布情况吧。MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件。但是比较主流的厂家和格式,例如 Sun, HP, SAP 所采用的 HPROF 二进制堆存储文件,以及 IBM 的转载 2020-07-03 11:08:33 · 1453 阅读 · 0 评论 -
java agent技术原理及简单实现
注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK1、引子在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此决定对原理进行一些深入的了解,力争找到一种使用者尽可能少的对原有代码进行修改的方式,以达到对应的MOCK要求。整体的感知程度可以分为三个级别: 硬编码 增加配置 无需任何修改 2、思路在对方法进行mock,暂停以及异常模拟,在不知道其原理的情况下,进行猜想,思考其具体的转载 2020-06-16 13:05:58 · 12477 阅读 · 3 评论 -
G1调优常用参数
-XX:MaxGCPauseMillis:暂停时间,默认值200ms。这是一个软性目标,G1会尽量达成,如果达不成,会逐渐做自我调整。对于Young GC来说,会逐渐减少Eden区个数,减少Eden空间那么Young GC的处理时间就会相应减少;对于Mixed GC,G1会调整每次Choose Cset的比例,默认最大值是10%,当然每次选择的Cset少了,所要经历的Mixed GC的次数会相应增...原创 2020-04-27 15:10:31 · 5635 阅读 · 0 评论 -
MINA
Apache Mina Server 是一个网络通信应用框架,为开发高性能和高可用性的网络应用程序提供了非常便利的框架。特点:异步的NIO框架,将UDP当成"面向连接"的协议一、组件管理Mina的底层依赖的主要是Java NIO库,上层提供的是基于事件的异步接口(1)IoService(最底层[起点])作用:隐藏底层IO的细节,对上提供统一的基于事件的异步IO接口IOSocket...转载 2020-02-26 17:01:54 · 444 阅读 · 0 评论 -
ava线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束
今天同事突然提出问题说用哪个线程池好,newFixedThreadPool和newCacheThreadPool里选择,说固定大小线程池keepAliveTime=0,线程空闲会立马回收线程从而节约资源,然后另外一个同事说,0是代表永远不回收,我记忆里也是记得0是永久存活,因为网上很多博客啊,资料啊都是说的0表示线程永久存活在空闲的时候。前面那位同事也是从字面上认为的,没有经过验证,觉得-1才是永...转载 2020-02-25 19:38:54 · 945 阅读 · 2 评论 -
Java I/O体系原理
基础概念在介绍I/O原理之前,先重温几个基础概念:(1) 操作系统与内核操作系统:管理计算机硬件与软件资源的系统软件内核:操作系统的核心软件,负责管理系统的进程、内存、设备驱动程序、文件和网络系统等等,为应用程序提供对计算机硬件的安全访问服务2 内核空间和用户空间为了避免用户进程直接操作内核,保证内核安全,操作系统将内存寻址空间划分为两部分:内核空间(Kernel-space),供...转载 2019-12-27 14:00:58 · 995 阅读 · 0 评论 -
AQS的原理及应用
前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深入解读AQS相关独占...原创 2019-12-20 14:45:04 · 2114 阅读 · 0 评论 -
Java 垃圾回收算法之G1
G1(Garbage-First)回收器是在JDK1.7中正式使用的全新垃圾回收器,G1拥有独特的垃圾回收策略,从分代上看,G1依然属于分代垃圾回收器,它会区分年代和老年代,依然有eden和survivor区,但从堆的结构上看,它并不要求整个eden区、年清代或者老年代都连续。它使用了全新的分区算法。其特点如下: 并行性:G1在回收期间,可以由多个GC线程同时工作,有效利用多核计算能力。...转载 2019-10-24 20:29:16 · 4058 阅读 · 0 评论 -
Java堆外内存:堆外内存溢出问题排查
一、堆外内存组成通常JVM的参数我们会配置-Xms 堆初始内存-Xmx 堆最大内存-XX:+UseG1GC/CMS 垃圾回收器-XX:+DisableExplicitGC 禁止显示GC-XX:MaxDirectMemorySize 设置最大堆外内存,默认是-xmx-survivor,也就是基本上和-xmx大小相等-Xss:每个线程的堆栈大小,默认1M-Xmn: 年...转载 2019-10-24 17:37:56 · 3001 阅读 · 0 评论 -
Java堆外内存:堆外内存回收方法
一、JVM内存的分配及垃圾回收 对于JVM的内存规则,应该是老生常谈的东西了,这里我就简单的说下: 新生代:一般来说新创建的对象都分配在这里。 年老代:经过几次垃圾回收,新生代的对象就会放在年老代里面。年老代中的对象保存的时间更久。 永久代:这里面存放的是class相关的信息,一般是不会进行垃圾回收的。JVM垃圾回收 由于JVM会替我们执行垃圾回收,因此开发者根本...转载 2019-10-24 17:36:37 · 7391 阅读 · 1 评论 -
深入分析 ThreadLocal 内存泄漏问题
由于ThreadLocalMap的生命周期跟Thread一样长,如果没有手动删除对应key就会导致内存泄漏,我觉得是这种数据结构导致,会产生内存溢出的问题Java为了最小化减少内存泄露的可能性和影响,在ThreadLocal的get,set的时候都会清除线程Map里所有key为null的value。所以最怕的情况就是,threadLocal对象设null了,开始发生“内存泄露”,然后使用...原创 2019-10-24 17:26:08 · 304 阅读 · 0 评论 -
JVM内存参数设置及常见错误总结
一、JVM规范JVM规范对Java运行时的内存划定了几块区域(详见这里),有:JVM栈(Java Virtual Machine Stacks)、堆(Heap)、方法区(Method Area)、常量池(Runtime Constant Pool)、本地方法栈(Native Method Stacks),但对各块区域的内存布局和地址空间却没有明确规定,而留给各JVM厂商发挥的空间。...转载 2019-10-16 17:28:41 · 1379 阅读 · 0 评论 -
Java的ClassLoader
ClassLoader 做什么的?顾名思义,它是用来加载 Class 的。它负责将 Class 的字节码形式转换成内存形式的 Class 对象。字节码可以来自于磁盘文件 *.class,也可以是 jar 包里的 *.class,也可以来自远程服务器提供的字节流,字节码的本质就是一个字节数组 []byte,它有特定的复杂的内部格式。有很多字节码加密技术就是依靠定制 Cl...转载 2019-10-15 14:38:28 · 175 阅读 · 0 评论 -
深入理解java中的Soft references && Weak references && Phantom reference
引言Ethan Nicholas 在他的一篇文章中说:他面试了20多个Java高级工程师,他们每个人都至少有5年的Java从业经验,当他问这些工程师对于Weak References 的理解时,只有其中的2个人知道Weak References 的存在,而这2个人中,只有1人知道如何去使用Weak References,而其他人甚至都不知道Java中有Weak References的存在。大家可能...转载 2018-04-16 19:18:46 · 388 阅读 · 0 评论 -
Java8的新特性
序本文主要讲Java8的新特性,Java8也是一个重要的版本,在语法层面有更大的改动,支持了lamda表达式,影响堪比Java5的泛型支持。特性列表lamda表达式(重磅)集合的stream操作提升HashMaps的性能Date-Time Packagejava.lang and java.util PackagesConcurrencylamda表达式(重磅)方法引用/** * 静态方法引用:...转载 2018-04-18 20:10:06 · 265 阅读 · 0 评论 -
JavaWeb学习总结(一):JavaWeb开发入门
一、基本概念1.1、WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。 Internet上供外界访问的Web资源分为:静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。 静态web资源开发技术:Ht...转载 2018-04-24 10:26:27 · 2769 阅读 · 1 评论 -
JavaWeb学习总结(二):Tomcat服务器学习和使用(一)
一、Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件。 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改例如:将Tomcat服务器的启动端口由默认的8080改成8081端口Tomcat服务器启动端口默认配置1 <Connector port="8...转载 2018-04-24 10:33:34 · 401 阅读 · 0 评论 -
JavaWeb学习总结(三):Tomcat服务器学习和使用(二)
一、打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下: 范例:将JavaWebDemoProject这个JavaWeb应用打包成war包 执行完之后,就可以得到一个文件,平时开发完JavaWeb应用后,一般都会将JavaWeb应用打包成一个war包,然后将这个war包放到Tomcat服务器的webapps目录下,当T...转载 2018-04-24 12:05:12 · 233 阅读 · 0 评论 -
javaweb学习总结(四):Http协议
一、什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。二、HTTP协议的版本 HTTP协议的版本:HTT...转载 2018-04-24 12:15:32 · 360 阅读 · 0 评论 -
javaweb学习总结(十五):JSP基础语法
任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用。一、JSP模版元素 JSP页面中的HTML内容称之为JSP模版元素。 JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。二、JSP表达式 JSP脚本表达式(expression)用于将程序数据输出到客户端 语法:<%...转载 2018-05-01 20:28:18 · 170 阅读 · 0 评论 -
JavaWeb学习总结(十七):JSP中的九个内置对象
一、JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用...转载 2018-05-01 20:27:45 · 166 阅读 · 0 评论 -
javaweb学习总结(十八):JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围。一、JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种:当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得。一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这...转载 2018-05-01 20:34:58 · 195 阅读 · 0 评论 -
javaweb学习总结(十九):JSP标签
一、JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。二、JSP常用标签 jsp的常用标签有以下三个<jsp:include>标签 <jsp:forward>标签 <jsp:param>标签2.1、<jsp:include&...转载 2018-05-01 20:52:43 · 220 阅读 · 0 评论 -
javaweb学习总结(二十):JavaBean总结
一、什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:这个Java类必须具有一个无参的构造函数属性必须私有化。私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。javaBean范例: 1 package gacl.javabean.study; 2 3 /** 4 * @author gacl ...转载 2018-05-01 20:55:35 · 184 阅读 · 0 评论 -
javaweb学习总结(二十一):JavaWeb的两种开发模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式。一、JSP+JavaBean开发模式1.1、jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示图1-1 在jsp+javabean架构中,JSP负责控制逻辑、表现逻辑、业务对象(javab...转载 2018-05-01 21:01:47 · 243 阅读 · 0 评论 -
javaweb学习总结(二十二):基于Servlet+JSP+JavaBean开发模式的用户登录注册
一、Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。 这里以一个最常用的用户登录注册程序来讲解Servl...转载 2018-05-01 21:05:16 · 2180 阅读 · 2 评论 -
javaweb学习总结(二十三):jsp自定义标签开发入门
一、自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码。二、自定义标签开发和使用2.1、自定义标签开发步骤 1、编写一个实现Tag接口的Java类(标签处理器类) 1 package me.gacl.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletR...转载 2018-05-01 21:07:02 · 172 阅读 · 0 评论 -
javaweb学习总结(二十四):jsp传统标签开发
一、标签技术的API1.1、标签技术的API类继承关系 二、标签API简单介绍2.1、JspTag接口 JspTag接口是所有自定义标签的父接口,它是JSP2.0中新定义的一个标记接口,没有任何属性和方法。JspTag接口有Tag和SimpleTag两个直接子接口,JSP2.0以前的版本中只有Tag接口,所以把实现Tag接口的自定义标签也叫做传统标签,把实现SimpleTag接口的自定义标签叫...转载 2018-05-01 21:08:28 · 151 阅读 · 0 评论 -
javaweb学习总结(二十五):jsp简单标签开发(一)
一、简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。 实现SimpleTag接口的标签通常称为简单标签。简单标签共定义了5个方法:setJspContext方法setParent和getParent...转载 2018-05-01 21:09:22 · 186 阅读 · 0 评论 -
javaweb学习总结(三十八):事务
一、事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 例如:A——B转帐,对应于如下两条sql语句 update from account set money=money+100 where name='B'; update from account set money=money-100 where name='A';二、MySQL数据库...转载 2018-05-02 09:28:09 · 208 阅读 · 0 评论 -
javaweb学习总结(三十九):数据库连接池
一、应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。如下图所示: 二、使用数据库连接池优化程序性能2.1、数据库连接池的基本概念 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的...转载 2018-05-02 09:28:22 · 179 阅读 · 0 评论 -
java并发包系列---LockSupport
长久以来对线程阻塞与唤醒经常我们会使用object的wait和notify,除了这种方式,java并发包还提供了另外一种方式对线程进行挂起和恢复,它就是并发包子包locks提供的LockSupport。LockSupport提供了park和unpark进行线程的挂起和恢复操作,来看一个简单挂起和恢复的简单例子:由于编辑格式限制,直接贴代码有人反映会显得很杂乱,之后有关代码将直接放图片,上例子中描述...转载 2018-05-10 09:01:55 · 176 阅读 · 0 评论 -
webdriver 执行完毕关闭chromedriver进程
背景:一个网站的登录部分用到了selenium,但是在多次登录之后,发现进程里残留了很多的chromedriver.exe进程。项目打成jar包之后放到另外的机器上跑,发现不久之后就开始卡顿,甚至于弹不出浏览器的窗口,所以怀疑是不是因为chromedriver.exe残留进程太多导致的。而且由于个人有强迫症,所以这个决定优化一下。原始的代码: System.setProperty("webdriv...原创 2018-05-03 13:52:23 · 10156 阅读 · 0 评论 -
ReenTrantLock可重入锁(和synchronized的区别)总结
ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的,而ReenTran...转载 2018-05-03 21:04:14 · 298 阅读 · 0 评论 -
synchronized与Lock的区别与使用
引言:昨天在学习别人分享的面试经验时,看到Lock的使用。想起自己在上次面试也遇到了synchronized与Lock的区别与使用。于是,我整理了两者的区别和使用情况,同时,对synchronized的使用过程一些常见问题的总结,最后是参照源码和说明文档,对Lock的使用写了几个简单的Demo。请大家批评指正。技术点:1、线程与进程:在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,...转载 2018-05-03 21:21:38 · 234 阅读 · 0 评论
分享