java
DaiZZZZZ
java 工程师
展开
-
java中获得类路径
this.getClass().getResource("/") 获得类根路径this.getClass().getResource("") 获得 当前类 的路径this.getClass().getClassLoader().getResource("") 获得类根路径第一条和第三条 效果一样,因为Class.getResource() 会对参数进行转换,最终调用。如果传相对路径,如"",会增加成类所在包的相对路径,再调用classLoader.getResource()如果绝对路径,如.原创 2021-12-03 10:35:47 · 2500 阅读 · 0 评论 -
mybatis-plus + dynamic-datasource-spring-boot-starter 遇到的问题
背景springboot项目,使用ORM层面使用 mybatis-plus,并且集成了 dynamic-datasource-spring-boot-starter 实现多个数据源的切换。问题描述yml文件中 按照格式 配置了2个数据库 ds1、ds2 ,在Mapper接口 标记上 @DS(“ds2”),但实际执行时,却使用了 ds1的数据库,导致了sql报错。原因分析经过调试发现,获取数据库链接的 调用链路大致如下org.springframework.jdbc.datasource.Dat原创 2020-10-17 15:54:50 · 2185 阅读 · 0 评论 -
Spring源码梳理
ioc容器的初始化核心方法是 AbstractApplicationContext#refresh(),调用了抽象方法AbstractApplicationContext#refreshBeanFactory(),由改方法完成ioc容器的初始化工作。如果是XmlWebApplicationContext ,则会使用XmlBeanDefinitionReader类来实现从xml中读取、解析bean的定义信息。以XmlWebApplicationContext为例,BeanDefinition的定位、加载、原创 2020-06-20 12:21:13 · 171 阅读 · 0 评论 -
ThreadPoolExecutor coreSize、maxPoolSize 的一个理解误区
发现问题coreSize=0、maxPoolSize=10,队列长度=100投递了50个任务(队列未满),但是只有一个线程在运行,而不是预期的10个。参数的定义查阅资料,maxPoolSize > coreSize 的部分,在2个时机下会创建:coreSize=0,且池中线程数=0 。至少得有一个线程去执行。队列已满,size=coreSize 并且 size<maxPoolSize,新建线程(maxPoolSize - coreSize)去执行。...原创 2020-06-09 15:00:29 · 2526 阅读 · 0 评论 -
记一次 内存泄漏 排查
发现问题进入容器,使用jstat -gcutil 观察到 发生频繁的full gc,jmap -histo:live 发现有 很多理应 被回收的对象。当时程序中的任务已经处于停止状态,但仍有大量对象未被回收,判断发生了内存泄漏。排查过程在线上将对内存 dump成文件,文件2.5g。根据以往的经验,导入分析工具会比较卡。于是在本地将程序运行了一次,使用jvisualvm对内存进行分析。观察...原创 2020-05-07 15:04:38 · 222 阅读 · 0 评论 -
测试通过,但上线出错?
问题描述运行测试用例,结果没问题。部署到线上后,运行出错排查调试发现,测试用例通过继承重写,覆盖了父类方法行为,导致方法中的异常没有被测试出来。总结测试、线上情况不同,可能有以下情况测试用例覆盖了代码行为。测试用例的数据不具有代表性。因此,测试用例不应该覆盖代码行为,导致bug被隐藏。...原创 2020-04-13 10:53:01 · 692 阅读 · 0 评论 -
记一次 gradle 构建失败
问题描述推代码,触发jekins构建。在compileJava阶段,报错error: cannot find symbol线索使用比较低效的排除法,将最近加的代码逐个注释掉。最后定位到一个类,将该类注释,则不会出现gradle任务失败。...原创 2020-04-02 11:30:40 · 405 阅读 · 0 评论 -
idea 项目编译后没有class文件
问题idea项目突然无法运行,提示找不到某个类。查看了编译输出目录out,发现没有class文件。尝试解决尝试删除out、重新导入项目、在gradle面板点击刷新,都没能解决问题。问题解决最后,点击Build->Rebuild Project解决。不明原因,先做下记录。...原创 2020-03-23 21:42:08 · 7710 阅读 · 6 评论 -
mybatis 程序启动失败
问题描述添加了xml文件,但没有写对应的接口,程序 启动发生 空指针异常。分析mybatis初始化,为xml中的可执行标签(select、update)寻找对应的接口,没找到则保存。而接口没有特定的xml实现或注解实现,却只会在代码执行时才保存。...原创 2020-03-06 19:27:32 · 326 阅读 · 0 评论 -
我对 Gson 源码的理解
核心类com.google.gson.Gson - 核心功能逻辑实现com.google.gson.internal.Excluder - 协助实现排除字段的功能,内部代理了另一个TypeAdapter实现序列化逻辑。com.google.gson.internal.bind.ReflectiveTypeAdapterFactory - 通过Type不能直接找到Adapter时,由该类实现。...原创 2020-02-08 17:14:24 · 175 阅读 · 0 评论 -
JAVA 基础学习(个人记录)
接口 接口内的方法默认访问权限为public 接口中的变量默认自动隐含是public static final (http://www.cnblogs.com/java07/archive/2010/01/26/3124639.html)原创 2017-07-04 09:58:34 · 388 阅读 · 1 评论 -
java、C++ 类访问权限 的区别
C++: 作用域 当前类 同一namespace 子类 其他namespace private √ × × × friendly √ ...原创 2017-01-08 14:42:09 · 677 阅读 · 0 评论 -
虚拟机 的方法调用
方法调用语句 在字节码文件中是什么样的?jvm有5条调用方法的指令:invokestatic:调用静态方法invokespecial:调用构造方法,私有方法,父类方法invokevirtual:调用虚方法。虚方法指的是非静态、非构造、非私有、非父类的方法,父类方法就是通过supper关键字调用的方法。invokeinterface:调用接口方法invokedynamic如下是调用...原创 2019-03-30 12:43:49 · 267 阅读 · 0 评论 -
jvm 知识点整理(内存区域、垃圾回收)
jvm 知识点整理内存划分(虚拟机内存的各个区域)垃圾回收什么样的对象是垃圾?(如何确定对象是否存活)如何回收?(垃圾的回收算法)问题排查命令行工具gc日志功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公...原创 2019-03-27 08:40:03 · 254 阅读 · 0 评论 -
如何删除gradle缓存
gradle 命令刷新缓存gradle build --refresh-dependencies -x test,但是刷新会比较耗时。直接删除本地文件mac下执行命令 cd ~/.gradle/caches/modules-2/files-2.1/进入缓存jar文件的目录,根据group名+module名找到对应的文件夹删除。...原创 2019-06-20 10:34:42 · 11835 阅读 · 1 评论 -
gradle 依赖冲突,导致 gradlew assemble 命令失败
执行gradlew assemble提示符号找不到(找不到类),推测是依赖包的冲突参考https://www.jianshu.com/p/c602e6c493ce,用exclude将冲突的依赖排除后,解决原创 2019-07-28 21:16:18 · 839 阅读 · 0 评论 -
ObjectMapper 读数据异常的问题(未解决)
public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.enableDefaultTyping(NON_FINA...原创 2019-09-10 14:49:43 · 790 阅读 · 0 评论 -
java运行时优化(要点)
优化作用将热点代码编译成与本地平台相关的机器码,提高执行效率。这部分工作由即使编译器完成,即Just In-Time Compiller。优化对象被多次调用的方法被多次执行的循环体如何探测热点代码基于采样。定期检查各个线程栈顶的方法,出现次数多的则很可能是热点代码。基于计数器。用方法调用计数器、回边计数器分别来记录方法的调用次数以及循环体的执行次数。我们聊一下后者——基于计...原创 2019-09-22 21:49:02 · 721 阅读 · 0 评论 -
ConfigurationProperties与 lombok的注解 编译时 栈溢出
在执行 ./gradlew assemble时 ,出现了java.lang.StackOverflowError的异常。启用 --stacktrace参数,异常栈如下> java.lang.StackOverflowError* Try:Run with --info or --debug option to get more log output. Run with --scan ...原创 2019-09-26 18:54:18 · 1027 阅读 · 0 评论 -
java web @WebServlet和web.xml冲突,导致tomcat启动失败
添加了一个servlet,自动配置了 @WebServlet ,又在web.xml里配置映射了这个servlet路径,然后启动tomcat失败,eclipse 出现 下图的错误提示然后console里的部分错误信息如下:将servlet中的 @WebServlet注释后,启动成功。今后出现类似问题,可以先检查是否两处都配置了映射,发生了冲突。原创 2017-06-10 10:12:11 · 3393 阅读 · 0 评论