Java
文章平均质量分 72
对Java各方面的知识点进行详细和深入的讲解与分享
FeelTouch Labs
关注FeelTouch Labs WeiXin平台,每月都有机会免费被抽取到稀有数字藏品,2024.3月抽奖进行中~
展开
-
I cannot open all the JetBrains‘ applications after I deleted some system items on my Macbook
Exception Type: EXC_CRASH (Code Signature Invalid)Exception Codes: 0x0000000000000000, 0x0000000000000000Exception Note: EXC_CORPSE_NOTIFYCrash from the IntelliJ IDEA report looks similar to https://youtrack.jetbrains.com/issue/IDEA-282172Check the be原创 2024-04-22 11:29:24 · 210 阅读 · 0 评论 -
Java对象复制或模型转换方法分析
编译期处理性能更高,对实现的技术要求也更高;运行时处理使用起来最为简便,可选的模型转换框架也更多,根据前面文中的分析,若无特殊要求使用Spring的BeanUtils.copyProperties是性能最好和额外依赖最少的属性框架。原创 2024-01-05 01:30:29 · 880 阅读 · 0 评论 -
Java获取接口的所有实现类方法
对于普通的Java工程实现获取接口所有实现类需要借助SPI机制,且仅限于接口;对于Spring工程,则有@Autowired自动获取和实现ApplicationContextAware手动获取2种,既支持接口实现类、也支持抽象类的实现类。原创 2024-01-05 01:20:20 · 1422 阅读 · 0 评论 -
不同目录下的文件读取方式
/文件目录与JsonToJava.class处于不同级目录,JsonToJava.class的文件目录层级比/js/Server2.json所在的目录更深一层。//文件目录与JsonToJava.class处于同级目录。//不考虑资源目录与类的目录层级。原创 2023-11-02 17:24:58 · 107 阅读 · 0 评论 -
线上Timeout waiting for connection from pool问题分析和解决方案
可以看到第1条,是老生常谈的资源关闭问题。博主在开发的时候,正是因为不需要知道调用的返回结果,所以没有对Response进行处理,所以资源并没有释放,导致后面再使用HttpClient,就拿不到连接了。可以看到确实默认值是maxConnPerRoute=2、maxConnTotal=20,并且我代码外部没有修传值。第2条,需要知道maxConnTotal和maxConnPerRoute的具体含义,如果是需要。,那么即使maxConnTotal设置再大,还是受限制与maxConnPerRoute的大小。原创 2023-10-22 00:24:59 · 928 阅读 · 0 评论 -
RocketMQ的长轮询(Long Polling)实现分析
消息队列一般在消费端都会提供push和pull两种模式,RocketMQ同样实现了这两种模式,分别提供了两个实现类:DefaultMQPushConsumer和DefaultMQPullConsumer;push模式:推送模式,即服务端有数据之后立马推送消息给客户端,需要客户端和服务器建立长连接,实时性很高,对客户端来说也简单,接收处理消息即可;缺点就是服务端不知道客户端处理消息的能力,可能会导致数据积压,同时也增加了服务端的工作量,影响服务端的性能;pull模式。原创 2023-10-16 17:51:34 · 300 阅读 · 0 评论 -
Java SPI机制分析
SPI全称为(Service Provider Interface) ,是JDK内置的一种服务提供发现机制;主要被框架的开发人员使用,比如java.sql.Driver接口,数据库厂商实现此接口即可,当然要想让系统知道具体实现类的存在,还需要使用固定的存放规则,需要在classpath下的META-INF/services/目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类;下面以JDBC为实例来进行具体的分析。原创 2023-10-16 17:15:47 · 96 阅读 · 0 评论 -
Java 高频疑难问题系列一
当对一个共享变量执行操作时,我们可以使用循环CAS的方式来保证原子操作,但是对多个共享变量操作时,循环CAS就无法保证操作的原子性,这个时候就可以用锁,或者有一个取巧的办法,就是把多个共享变量合并成一个共享变量来操作。此外请记住,所声明资源的作用域被限制在带资源的try语句中。在score相同的情况下,redis使用字典排序,而所谓的字典排序其实就是“ABCDEFG”这样的排序,在首字母相同的情况下,redis会再比较后面的字母,还是按照字典排序(如截图所示,beigai和baijing的排列顺序)。原创 2023-09-17 16:58:26 · 148 阅读 · 0 评论 -
为什么在docker容器中运行应用程序不能添加&
后台运行的脚本不会阻止容器的退出,因此当脚本执行完毕后,容器中的主进程就会退出,导致容器的终止。如果在容器中使用 & 后台运行一个脚本,并且没有其他操作来阻止容器的退出,那么容器可能会在脚本执行完毕后立即退出。1. 在容器中运行一个无限循环的命令:可以在脚本末尾添加一个无限循环的命令,以阻止容器的主进程退出。确保根据你的具体需求和使用场景,选择适合的方法来保持容器的运行,并处理脚本执行完毕后容器退出的情况。这样,即使脚本执行完毕,容器中的主进程仍会继续执行无限循环命令,保持容器的运行。原创 2023-05-24 13:26:26 · 751 阅读 · 0 评论 -
一次线上服务CPU100%的排查过程
前言突然收到线上服务cpu达到100%的报警短信,于是立即展开排查。排查过程理论步骤一、找到最耗CPU的进程工具:top方法:执行top -c ,显示进程运行信息列表键入P (大写p),进程按照CPU使用率排序二:找到最耗CPU的线程工具:top方法:top -Hp PID,显示一个进程的线程运行信息列表键入P (大写p),线程按照CPU使用率排序三:将线程PID转化为16进制工具:printf之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。四:查看堆栈,原创 2022-05-29 23:58:22 · 937 阅读 · 3 评论 -
Java服务端和客户端开发辅助工具Utils
包括了各种工具类、辅助类、管理类等Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md收集中国国内可用APIcommons-lang: https://github.com/apache/commons-langApache Commons Lang, a package of Jav...转载 2019-01-28 21:42:19 · 2806 阅读 · 0 评论 -
java---使用日志输出信息的方法
先初始化,再使用!原创 2015-06-29 09:55:26 · 4376 阅读 · 0 评论 -
设计模式---抽象工厂设计模式
问题描述之前讲到了C++设计模式——工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理;由于工厂方法模式创建的对象都是继承于Product的,所以工厂方法模式中,每个工厂只能创建单一种类的产品,当需要生产一种全新的产品(不继承自Product)时,发现工厂方法是心有余而力不足。举个例子来说:一个显示器电路板厂商,旗下的显示器电转载 2015-06-08 20:26:54 · 650 阅读 · 0 评论 -
Java中的笔试和面试3---ThreadLocal-面试必问深度解析
ThreadLocal是什么ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不同的变量值完成操作的场景。从数据结构入手下图为ThreadLocal的内部结构图ThreadLocal结构内部从上面的结构图,我们已经窥见ThreadLocal的核心机制:每个Thread线程内部都有一个Map。 Map里面存储线程本地对象(key)和线程的变转载 2020-06-25 16:20:44 · 334 阅读 · 0 评论 -
Java深海拾遗系列(7)--- Java 创建对象的不同姿势
使用new关键字 使用new关键字是创建对象的最基本方法。这是在java中创建对象的最常见方法。几乎99%的对象都是用这种方式创建的。通过使用这个方法,我们可以调用任何想要调用的构造函数(没有参数或参数化的构造函数)。package org.cfj.objcreate;public class NewKeywordEx { String name=...转载 2020-03-07 00:39:53 · 261 阅读 · 0 评论 -
Java深海拾遗系列(6)--- Java反解析工具javap分析和使用
一、javap简介javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。当然这些信息中,有些信息(如本地变量表、指令和代码行偏移量映射表、常量池中方法的参数名称等等)需要在使用javac编译成class文件时,指定参数才能输出,比如,你直接javac xx.java,就不会...转载 2020-01-19 20:26:09 · 509 阅读 · 0 评论 -
手动开发一个maven插件系列1---调式maven插件代码
Maven支持平常我们打包一般直接使用mvn ...,实际上在maven的bin目录下可以看到一个mvn, 一个是mvnDebug我们常用的操作比如mvn clean如果你想调试mvnDebug clean那么如何在两个工程中进行通信debug,java提供了一个叫做Java Debug Wire Protocol (JDWP)的协议如上图,进行通信和调试和处理,...原创 2020-01-12 23:40:11 · 459 阅读 · 1 评论 -
Tomcat中包含的配置文件、名字、作用分析记录
目录Tomcat v8.5配置文件context.xmlserver.xmlweb.xmltomcat-users.xml参考Tomcat v8.5配置文件从上面的目录的截图可以看出,除了catalina.*文件外,其实配置文件就是context.xml server.xml web.xml tomcat-users.xml四个文件,那么接下来我们一次看下这4个...原创 2020-01-04 17:41:48 · 7215 阅读 · 1 评论 -
线上内存泄漏排查全纪录之CloseableHttpAsyncClient
目录前言疑点restClient在报出异常时没有正确执行关闭导致内存泄漏关键部分未改动前代码于是果断修改代码如下,并重新上线基于源代码分析分析路线1:经过哪些调用,最终关闭了什么?分析路线2:这种手动调用是否有必要,不会自动执行资源释放吗?最终结论前言线上内存报警,重启之后内存占用降低,但是慢慢升高且几乎没有下降迹象,最终流量高峰时触发内存阈值,导致报警,前...原创 2019-12-22 16:08:35 · 2834 阅读 · 0 评论 -
Java8 DateTimeFormatter常见问题分析总结
紧接着上篇文章Random和SimpleDateFormat的坑和最佳实践为什么是线程安全的?还是看源代码和注释说* This class is immutable and thread-safe. * * @since 1.8 */public final class DateTimeFormatter {}很明显,通过final关键字,做成了不可变类,类似St...原创 2019-11-14 21:57:18 · 5557 阅读 · 3 评论 -
再论到底该不该写isDebugEnabled
历来的通用做法if (log.isDebugEnabled()) { log.debug(... ...);}那么为什么这样做呢?在N久以前,很多日志框架都不支持{}模板的写法(如Log4j1.X,Apache Commons Logging),于是只能通过字符串拼接来输出日志内容:log.debug("hello, this is " + name);这样一来...原创 2019-11-14 21:09:31 · 968 阅读 · 2 评论 -
WebSocket系列3---JavaScript客户端的心跳检测和重连
背景websocket链接,为实现断网、服务器重启等特殊情况。原理每隔一段时间向服务器发送一次数据 即(heartCheck.start()),服务器接收数据后返回一次信息,用来证明一切正常,否则就开始启动新的定时器来尝试重新连接(websocketReconnect()一定的时间尝试重连,如此重复)。var lockReconnect = false;//避免重复连...转载 2019-11-11 01:55:32 · 825 阅读 · 0 评论 -
Switch正确使用enum的姿势
错误姿势:private void TestEnum(ColorType type){ switch (type){ case ColorType.GREEN: break; case ColorType.RED: break; case Color...转载 2019-11-11 01:33:28 · 11158 阅读 · 0 评论 -
JVM源码分析之堆外内存完全解读2
概述之前写过篇文章,关于堆外内存的,JVM源码分析之堆外内存完全解读,里面重点讲了DirectByteBuffer的原理,但是今天碰到一个比较奇怪的问题,在设置了-XX:MaxDirectMemorySize=1G的前提下,然后统计所有DirectByteBuffer对象后面占用的内存达到了7G,远远超出阈值,这个问题很诡异,于是好好查了下原因,虽然最终发现是我们统计的问题,但是期间发现的其他...转载 2019-10-24 14:04:07 · 310 阅读 · 0 评论 -
JVM源码分析之堆外内存完全解读1
概述广义的堆外内存说到堆外内存,那大家肯定想到堆内内存,这也是我们大家接触最多的,我们在jvm参数里通常设置-Xmx来指定我们的堆的最大值,不过这还不是我们理解的Java堆,-Xmx的值是新生代和老生代的和的最大值,我们在jvm参数里通常还会加一个参数-XX:MaxPermSize来指定持久代的最大值,那么我们认识的Java堆的最大值其实是-Xmx和-XX:MaxPermSize的总和,在...转载 2019-10-24 14:01:57 · 230 阅读 · 0 评论 -
ArrayList和JSONArray边遍历边删除到底该怎么做
话题看起来有点老生了,但是加入JSONArray还是有很多新意ArrayList方式1:索引遍历 List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3456); list.add(34...原创 2019-10-12 00:15:15 · 6723 阅读 · 5 评论 -
JAVA---hashset的类结构
hashset与set的关系:原创 2015-06-25 00:21:25 · 1213 阅读 · 0 评论 -
MySQL多表查询
一使用SELECT子句进行多表查询 SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件 SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id 注:在上面转载 2015-08-24 20:42:38 · 688 阅读 · 0 评论 -
Java进阶---Java一些基础知识
stringbuffer与stringbuider区别Java数字类型互转字符串Java对象的hasnext()Java切分字符串原创 2015-07-20 22:44:14 · 720 阅读 · 0 评论 -
Java---IndexOf、LastIndexOf、Substring
String.IndexOfString.IndexOf 方法 (Char, Int32, Int32) 报告指定字符在此实例中的第一个匹配项的索引。搜索从指定字符位置开始,并检查指定数量的字符位置。 String.IndexOf(value, startIndex, count)参数 value:要查找的 Unicode 字符。 startIndex:搜索起始位置。 count:要检转载 2015-08-18 23:01:42 · 1334 阅读 · 0 评论 -
Java---Java连接MySql数据库
是我最近写的一个连接MySql数据库的一个例子,主要实现了插入,删除,更新,选择操作,用的环境是 j2sdk1.4.2_08,Eclipse3.1。以前我的同事用Python写了同样的类,非常的好用,支持了我们公司的大部分业务,现在我们慢慢改用Java了,所以我用Java重写了一遍。一方面在今后的业务中能够用到,另一方面熟悉一下Java。下面我把在Eclipse3.1下怎样配置数据库连接信息简单说一转载 2015-08-18 23:09:43 · 715 阅读 · 0 评论 -
ArrayList的使用方法
1、什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素实现了ICollection和IList接口灵活的设置数组的大小2、如何使用ArrayList 最简单的例子:ArrayList List = new ArrayList();for( int i=转载 2015-09-30 11:06:57 · 576 阅读 · 0 评论 -
Java基础知识记录
原创 2015-09-14 20:24:34 · 539 阅读 · 0 评论 -
JBoss初步了解
JBoss基于Tomcat内核,青胜于蓝 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可。其运行时占用的系统资源小,扩展性好,且支持负载平衡与邮件服务等开发应用系统常用的功能。作为一个小型的轻 量级应用服务器,Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用,成为目前比较流行的转载 2016-05-29 22:16:26 · 864 阅读 · 0 评论 -
架构系列---Java 常用技术方案
http://blog.jobbole.com/101432/前言:由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题。所以自己结合实际工作中的一些经验和网上看到的一些资料,做一个讲解和总结。希望这篇文章可以方便自己以后查阅,同时要是能帮助到他人那也是很好的。正文:第一步,自身的业务场景:在我日常做的项目中,目前涉及了以下原创 2016-06-11 13:20:19 · 1728 阅读 · 0 评论 -
JVM安全性解析
散列单向散列算法是从大量输入(数据)中产生少量的输出(消息摘要或散列),所以不同的输入可能产生相同的输出。 如果使用了一个8位长度的散列值,散列算法最多产生256个不同的散列值。实际中,通常采用64位或128位的散列,通常认为这个长度已经足够了。原创 2016-06-11 15:34:12 · 799 阅读 · 0 评论 -
JAVA中将Object类对象赋给自定义类
共有2种方法强制转化: 自己的类 name = (自己的类)object对象根据类型转化: if(Object instance of 自己的类 ) { 转化 }安全考虑 先判断再转换比较安全if (obj instanceof xxx) { xxx o = (xxx)obj;}或者Field f = obj.getClass().getDeclaredField(“x原创 2016-08-21 13:49:34 · 19071 阅读 · 3 评论 -
SLF4J: Class path contains multiple SLF4J bindings.问题解决方案
错误提示 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/Users/ulricqin/Documents/workspace/uic/web/WEB-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/Static原创 2016-08-21 14:36:07 · 12735 阅读 · 5 评论 -
后台执行java程序并打印log文件
nohup java -cp appid_stream_api.jar com.laifeng.server_stream.DBServer > /opt/interlive/stat_service_api/logs/appid_stream_api.log2>&1 &原创 2016-09-24 22:00:03 · 3464 阅读 · 0 评论 -
Netty将POST、GET参数封装成类使之
Netty4 HTTP请求参数解析(GET, POST) 我们在使用Netty编写HTTP服务器时,一个非常痛苦的地方就是解析POST请求的代码真是太丑陋了,远没有servlet中request.getParameter()优雅。我猜测这是因为Netty是一个网络通讯框架,所以设计者希望尽可能的把底层数据暴露给开发者以提供更好的灵活性。我们可以自己将HTTP请求参数封装成类似于servlet的调转载 2016-09-25 16:04:02 · 2499 阅读 · 0 评论