java基础
文章平均质量分 90
斗者_2013
多年java老兵,专注微服务,中间件等热点技术,分享工作心得和技术干货
展开
-
G1垃圾回收器详解
本来不准备写关于G1垃圾回收器的文章,因为网上介绍的文章真的太多了,写出来容易千篇一律,有抄袭的嫌疑。但由于最近工作中遇到了G1垃圾回收期的线上优化问题,查找了很多资料,最终还是决定做一个总结,也希望能对大家有所帮助。原创 2023-02-13 22:48:45 · 3173 阅读 · 4 评论 -
Lombok实现原理解析
本文主要对Lombok的实现原理进行了介绍,并通过自定义注解@MyGetter演示了编译期注解处理器的使用过程。原创 2022-12-09 10:08:52 · 5992 阅读 · 9 评论 -
有序Map集合:LinkedHashMap和TreeMap该如何选用
为什么HashMap是无序的?有序的Map集合有哪些?LinkedHashMap和TreeMap都是有序的Map集合,他们有什么区别,该如何选用?LinkedHashMap和TreeMap的底层原理是什么?要搞清楚HashMap为什么是无序的,首先我们要搞清楚HashMap的底层数据结构。很多人可能会说简单,HashMap的底层不就是结构,那什么是链表散列结构呢?用更直白的话说就是。HashMap中存放的元素是根据key和hash(key)存放在数组、链表和红黑树中,而。可能有人会说,无论是数组、链表和原创 2022-12-04 22:55:13 · 5862 阅读 · 0 评论 -
浅谈软件编程中的8大数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。可分为八大数据结构:`数组(Array)、栈(Stack)、链表(Linked List)、图(Graph)、散列表(Hash)、队列(Queue)、树(Tree)、堆(Heap)`。原创 2022-10-09 17:13:21 · 6177 阅读 · 0 评论 -
logback性能优化详解
不正确的日志打印不但会降低程序运行性能,还会占用大量IO资源和硬盘存储空间。本文主要总结一些能提高日志打印性能的手段。原创 2022-06-06 20:19:41 · 4417 阅读 · 1 评论 -
logback控制台彩色日志输出
如何使用logback在控制台输出彩色日志原创 2022-06-01 14:56:46 · 12855 阅读 · 0 评论 -
logback异步输出日志详解
logback异步输出日志详解原创 2022-06-01 01:16:58 · 7399 阅读 · 0 评论 -
java8中修改parallelStream默认并发数
Java 8引入了流的概念去对数据进行复杂的操作,而且使用并行流(Parallel Steams)支持并发,大大加快了运行效率。主要有以下两种方式:1、设置ForkJoinPool.commonPool公共池的全局并发数。2、自定义ForkJoinPool线程池指定并发数。原创 2021-08-27 15:54:48 · 9157 阅读 · 2 评论 -
10年老鸟竟不知道Integer如何比较大小
前言一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')import sslssl._create_defau原创 2021-06-23 17:07:02 · 3446 阅读 · 12 评论 -
java老鸟教你如何高效优雅的进行时间格式化
java老鸟教你如何高效优雅的进行时间格式化原创 2021-05-26 16:46:32 · 17407 阅读 · 10 评论 -
最网最全bug定位套路,遇见bug再也不慌了
最网最全bug定位套路,遇见bug再也不慌了原创 2021-03-26 17:52:40 · 3011 阅读 · 12 评论 -
WebSocket系列:爱奇艺号 WebSocket集群推送网关
WebSocket系列:爱奇艺号 WebSocket集群推送网关原创 2021-03-08 11:47:44 · 525 阅读 · 0 评论 -
websocket系列:基于jdk原生注解实现
在spring boot框架下基于jdk的原生注解实现websocket原创 2021-02-03 14:37:26 · 670 阅读 · 2 评论 -
websocket系列:协议详解
前言最近由于项目中用到了websocket,所以准备出一个系列文章,详细介绍websocket的使用。主要内容规划如下:websocket协议详解基于spring-boot-starter-websocket实现基于netty的实现基于框架的netty-spring-boot-start的实现使用STOMP消息实现一、简介WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 协议在2008年诞生,2011年成为国际标准。所原创 2021-02-02 15:28:05 · 581 阅读 · 0 评论 -
为什么设置-Xmx4g但是java进程内存占用达到8g?
前言不知道大家在开发过程中有没有遇到过类似的问题,明明通过JVM参数-Xmx4g设置了最大堆内存大小为4g,但是程序运行一段时间后发现占用的内存明显超过了8g,却并没有出现内存溢出等问题,那是什么东西占用了额外的内存空间呢?一、背景1.通过free -g查看服务器内存使用情况2.通过ps查看java进程项目启动命令为:java -Xmx6g -Xms6g - -XX:+UseG1GC -jar /home/pgcp/pgcp-0.0.1-SNAPSHOT.jar3.通过top命令查看资原创 2021-01-28 16:05:06 · 21104 阅读 · 16 评论 -
惊悚,单个java进程占用700%的CPU
背景最近负责的一个项目上线,运行一段时间后发现对应的进程竟然占用了700%的CPU,导致公司的物理服务器都不堪重负,频繁宕机。那么,针对这类java进程CPU飙升的问题,我们一般要怎么去定位解决呢?一、采用top命令定位进程登录服务器,执行top命令,查看CPU占用情况,找到进程的pidtop很容易发现,PID为29706的java进程的CPU飙升到700%多,且一直降不下来,很显然出现了问题。二、使用top -Hp命令定位线程使用 top -Hp <pid> 命原创 2021-01-22 21:06:46 · 1664 阅读 · 6 评论 -
删除list集合中特定元素的正确姿势
背景如何删除一个集合对象中的特定元素?小问题,但并不简单。常见异常:ConcurrentModificationExceptionjava.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911) at java.util.ArrayList$Itr.next(ArrayList.java:861)一.单线程情况下1.fori正向删除原创 2021-01-18 14:16:03 · 15410 阅读 · 13 评论 -
SVN使用教程之—分支/标记 合并
首先说下为什么我们需要用到分支-合并。比如项目demo下有两个小组,svn下有一个trunk版。由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作【某个模块】,小组2进行新需求的开发。那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版【主干线】的一个copy版,不过分支也是具有版本控制功能的,而且是和主干线相互独立的,当然,到最后我们转载 2015-05-29 17:54:54 · 808 阅读 · 0 评论 -
TortoiseSVN客户端重新设置用户名和密码
在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了。不过,如果后来在服务器端修改了用户名密码,则再次检出时就会出错,而且这个客户端很弱智,出错之后不会自动跳出用户名密码输入框让人更新,我找了半天也没找到修改这个用户名密码的地方。最终,找到两种解决办法:转载 2015-05-29 17:52:51 · 574 阅读 · 0 评论 -
SVN服务器搭建和使用(三)
接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等.添加文件在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图:这时候,你需要告知TortoiseSVN你的操作,如图:加入以后,你的文件会变成这个状态,如图:这时候使用TortoiseSVN进行提交.这样别人就能看到你所做的更改转载 2015-05-29 17:51:41 · 1060 阅读 · 0 评论 -
SVN服务器搭建和使用(二)
上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使用.首先打开VisualSVN Server Manager,如图:可以在窗口的右边看到版本库的一些信息,比如状态,日志,用户认证,版本库等.要建立版本库,需要右键单击左边窗口的Repositores,如图转载 2015-05-29 17:50:42 · 412 阅读 · 0 评论 -
SVN服务器搭建和使用(一)
Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说.首先来下载和搭建SVN服务器.现在Subversion已经迁移到apache网站上了,下载地址:http://subversion.apache.org/packages.html这是二进制文件包的下载地址,你可在左侧的导航栏找到源代码,文档的下载地址.windows操作系统下面的二进制文件包一转载 2015-05-29 17:47:31 · 388 阅读 · 0 评论 -
Weblogic端口修改方法
Weblogic端口修改方法Weblogic安装成功后建立的新域的端口号默认为7001,如果仅发布一个应用程序,此时不必对此默认端口号进行修改,若要发布两个或两个以上的应用程序,则此时需要建立多个域,而且这多个域的端口号要有区分。Weblogic端口修改方法主要有以下两种方式:1. 直接在Weblogic控制台中进行修改1.1 登录控制台选择Enviroment->转载 2016-02-01 10:14:46 · 3330 阅读 · 0 评论 -
weblogic开启开发者模式
这几天在weblogic下的开发有一点小心得,分享下。 我们这边由于每次重写部署项目要加载缓存数据,非常耗时,最后在网上找了一个自动重写发布编译好的java文件的方法。 每次修改java文件后,就只用重写打包就行了。省去了重新部署项目的过程。 1.首先,在项目中的weblogic.xml配置文件中加上配置信息,每隔1s重写加载java文件。 container-d原创 2015-12-28 14:18:58 · 1507 阅读 · 0 评论 -
weblogic开启debug模式启动时出现ERROR: Cannot load this JVM TI agent twice
分析错误:weblogic开启debug模式启动时出现下面的错误:ERROR: Cannot load thisJVM TI agent twice, check your java command line for duplicate jdwp options.Error occurred during initialization of VMagent library fail原创 2015-12-03 10:21:31 · 10171 阅读 · 0 评论 -
使用eclipse远程调试weblogic
配置weblogic远程调试之前,需要做这几个工作: 1) 安装weblogic服务器,然后创建一个域; 2) 安装eclipse集成IDE; 3) eclipse中包含发布的工程。 在上面几个工作完成之后,配置weblogic远程调试需要这么几个步骤: 第一步,修改weblogic根目录下user_projects\domain转载 2015-12-03 09:58:12 · 676 阅读 · 0 评论 -
使用@ResponseBody后返回500错误
在springmvc+mybatis的项目中,利用mybatis分页插件mybatis-paginator进行分页查询,结果出现了500异常,后端又没有明显的报错。原来的写法,返回Map对象,由springmvc里面的机制转为json对象,这样就会导致,在转json过程中的报错,都隐藏了,无法抛出,前端获取不到正确的数据,最后就出现了500的异常。 @RequestMapping(va原创 2017-01-03 21:12:26 · 13695 阅读 · 0 评论 -
navicat cannot create file 解决方法
原文链接:http://blog.csdn.net/garrison_z/article/details/38725697使用navicat 数据库操作,能正常连接,但是在新建查询时出现如下错误:navicat 数据库操作,有部分正常,有部分提示这个错误。我想应该是设置问题。安装提示目录,以此打开C:\Users\37wan\Documents\Navicat\转载 2016-09-07 10:25:09 · 11701 阅读 · 3 评论 -
jar包问题的解决:java.lang.IncompatibleClassChangeError
摘要在集成多maven项目的时候,出现了这个错,于是记录下解决的过程。今天整理了Maven的pom.xml文件后,把多个项目用maven集成在了一起,结果在启动Tomcat的时候,遇到一个奇葩的错误:jar包问题的解决:java.lang.IncompatibleClassChangeError转载 2016-09-07 09:51:50 · 16592 阅读 · 0 评论 -
数据结构算法 - ConcurrentHashMap 源码解析
五个线程同时往 HashMap 中 put 数据会发生什么?ConcurrentHashMap 是怎么保证线程安全的?在分析 HashMap 源码时还遗留这两个问题,这次我们站在 Java 多线程内存模型和 synchronized 的实现原理,这两个角度来彻底分析一下。至于 JDK 1.8 的红黑树不是本文探讨的内容。1. Java 多线程内存模型五个线程同时往 HashMap 中 pu...转载 2019-04-15 12:00:46 · 453 阅读 · 0 评论 -
FTP上传文件demo
直接上代码了,jar包自己找吧。 /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param转载 2016-08-23 14:04:59 · 932 阅读 · 0 评论 -
win7FTP服务器配置以及访问
也可以参考百度的教程win7下FTP服务器安装一、FTP服务器功能打开1、打开【控制面板】→【程序】→【打开或关闭Windows功能】→出现以下界面:2、一定要将树形目录【Internet信息腐乳】展开,然后将【FTP服务】目录展开(注意的是所有其他配置在这里都要一层层展开才可以勾选住子目录),勾选中红色框的部分。3、点击确定按钮,此时FTP服务器安装完毕。二、配置FTP服转载 2016-07-30 22:21:25 · 46984 阅读 · 4 评论 -
利用maven工具解决jar包冲突问题或重复加载问题
在使用maven开发项目的过程中,经常会遇到jar包重复加载或者jar包冲突的问题的,但是由于有些jar是由于maven的依赖加载自动加载进来的,而不是开发者自己配置的,特别是当项目中pom中配置的jar包依赖本身很多时,开发者靠自己的经验,有时很难找出是哪个jar的加载导致加载了多余的依赖jar,从而产生冲突。今天刚好遇到一个借用eclipse中的maven插件解决jar包依赖冲突的转载 2016-07-12 21:40:43 · 49352 阅读 · 4 评论 -
java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4
(一) 现象与解决方法前些天在进行storm job的开发时候突然报了一个错误,记录一下Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory当然我们的第一个反应是log4j这个包缺失(当然也有这种情况,需要首先确认),打开转载 2016-07-12 20:48:32 · 15078 阅读 · 0 评论 -
log4j2 使用详解
转载自 Blog of 天外的星星: http://www.cnblogs.com/leo-lsw/p/log4j2tutorial.htmlLog4j 2的好处就不和大家说了,如果你搜了2,说明你对他已经有一定的了解,并且想用它,所以这里直接就上手了。 1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是乱七八糟的版本号):转载 2016-07-12 16:57:13 · 786 阅读 · 0 评论 -
logback logback.xml常用配置详解(三) <filter>
logback 常用配置详解(三) :过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。过滤器被添加到 中,为 添加一个或多个过滤器后,可以用任意条件对日志进行过转载 2016-07-12 16:54:30 · 316 阅读 · 0 评论 -
logback 常用配置详解(二) <appender>
logback 常用配置详解(二) :是的子节点,是负责写日志的组件。有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。 1.ConsoleAppender:把日志添加到控制台,有以下子节点::对日志进行格式化。(具体参数稍后讲解 ):字符串 System转载 2016-07-12 16:53:04 · 737 阅读 · 0 评论 -
logback 配置详解(一)
一:根节点包含的属性: scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。debug:当此属性设置为true时,将打印出logback内部日志信转载 2016-07-12 16:51:45 · 264 阅读 · 0 评论 -
Java程序员修炼之道 之 Logging(3/3) - 怎么分析Log
1. 说明作为一个程序员我们经常要做一件事情:获取某个Log文件,从其中找出自己想要的信息。本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我最近几年的工作环境都是服务器在Linux上,工作机是Windows, 所以我用的工具主要是Linux上的一些命令行工具,当然他们在Windows上也可以用,具体看下面的工具篇。先声明,我只是非常普通的Linux用户,所以如果有些L转载 2016-07-12 16:50:25 · 380 阅读 · 0 评论 -
Java程序员修炼之道 之 Logging(2/3) - 怎么写Log
1. 一个最基本的例子使用Logging框架写Log基本上就三个步骤引入loggerg类和logger工厂类声明logger记录日志下面看一个例子//1. 引入slf4j接口的Logger和LoggerFactoryimport org.slf4j.Logger;import org.slf4j.LoggerFactory;public cl转载 2016-07-12 16:47:52 · 432 阅读 · 0 评论