JAVA基础
文章平均质量分 80
Armour__r
晚泊孤舟古祠下,满川风雨看潮生
展开
-
可以实时修改参数的线程池--动态线程池实现探索
基于配置中心的动态线程池实现,可以使线程池参数实时生效,不需要重新部署原创 2022-07-18 09:15:00 · 785 阅读 · 1 评论 -
guava cache缓存组件在并发场景下的问题
前言去年面蚂蚁的时候,二面提到自己项目里使用了guava cache来缓存一些高频读的配置文件,被问到了它的实现以及并发场景下可能存在什么问题,因为没有深入了解过,所以没回答上来。现在想来除了技术上的问题之外,也反映了当时我个人的思考不够的问题:1 在对基础组件原理完全不了解的情况下就盲目使用,是否会因此带来一些隐藏的坑;2 为什么没有抽时间去对用到的技术栈做一下简单的了解和调研,做出这样的技术选型的背景和理由根本讲不出来。常常说要积累技术的广度和深度,就是应该要在这些地方多思考才行。想起之前一个组原创 2022-01-25 09:30:00 · 2309 阅读 · 1 评论 -
【并发问题】线程池死锁阻塞
苦练基本功问题表现周五开开心心下班,结果收到了问题,说是某个接口报了504的异常,一开始以为是网络或者服务器的问题,后来排查才发现是自己埋的一个坑,快乐的周末直接报销。排查过程首先关注一下504代表的问题。造成504的原因主要有两种,nginx建立连接超时(proxy_connect_timeout)和nginx等待服务器返回超时(proxy_read_timeout)常见的原因可能是流量在增加,但是后端容量不足,导致大量504出现。但是在这里很明显不是资源问题,应该是nginx等待服务器.原创 2021-12-09 17:50:43 · 1227 阅读 · 1 评论 -
lombok 父类和子类builder不兼容的问题
遇到的问题在写代码时,有时因为需要定义一些重复的参数,为了复用之前传参的DTO,会对原有的类进行继承,从而达到避免重复代码的效果。但是,当父类中使用了lombok的@Builder注解,子类也需要@builder注解时,就会出现异常排查和解决由于实际的代码存在敏感信息,这里分别定义两个类Parent和Child来进行场景的模拟@Data@Builderclass Parent { private String parentProperty1; private String p原创 2021-11-17 15:37:20 · 7951 阅读 · 1 评论 -
使用IDEA构建项目时出现的一个异常和解决方案
当把开发环境从windows平台换到mac平台之后,总是出现这样那样的问题,也不知道是我的问题还是这些工具的问题,总之就是需要花费大量时间来处理。出现问题使用idea尝试运行项目,点运行,之后进入build阶段,然后卡死在parsing java的过程上,java进程高强度运行数十分钟,然后出现Error:java:Compilation failed:internal java compiler error或者GC overhead limit exceeded等异常后才会停止。在之前的文章里提到过原创 2021-06-06 23:51:42 · 2914 阅读 · 4 评论 -
最新版本maven引发的血案
2021年4月4日,apache maven发布自己的3.8.1版本;2021年5月20日,一个倒霉蛋入职新公司,直接下载安装了最新版本的maven,在入职的第一天,开启了自己的折磨之旅。出现的问题公司存在online和offline两套maven配置,因为部门存在一些snapshot包的缘故,使用的是offline配置的那套settings.xml。最初没有人引导,根据集团的文档,使用了online配置,在拉取依赖的过程中,发现拉取不到部分plugins,而且项目有很多依赖也找不到,抛出could原创 2021-05-23 11:05:44 · 13361 阅读 · 13 评论 -
实践服务可用性的提高方式 -- JVM参数调优
背景首先说明一下背景,需要调优的服务是一个需要较高吞吐和可用性的服务,吞吐量目前没有达到瓶颈,还可以通过增加服务器进行水平扩展,但是可用性亟需提高,而评价可用性的标准之一就是所有请求中响应时间在可用范围内的请求数量。由于最初是按照部门内的默认jvm参数来配置,导致在压测过程中gc表现并不好,gc时间略长,次数也很频繁,影响到了部分请求的响应时间,导致可用性降低,具体的数据将在后文中提到。所以此次调优,首要目标是降低单次gc的时间,提高服务可用性;其次是降低gc发生的频率,减少受到gc影响的请求占比。原创 2020-12-29 16:45:28 · 354 阅读 · 0 评论 -
如何理解ThreadLocal源码以及其存在的问题
如果有人直接问起,让你介绍一下ThreadLocal或者讲一讲自己对于ThreadLocal的理解,突然之间会感觉有点无从下手,所以想总结一下,写一个该如何回答这个问题的文字版。首先,是什么摘抄一些来自其他博客的描述ThreadLocal提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal变量通常被private static修饰。当一个线程结束时,它所使用的所有ThreadLocal相对的实例副本都可被回收。ThreadL原创 2020-10-29 00:58:32 · 243 阅读 · 0 评论 -
线程交替打印的几种实现方式
秋风渐起前言前段时间同事去面了校招生,吐槽说候选人简历里写了熟悉多线程,但是连一道不限制任何实现方式的线程交替打印字符串都不会。当时听到这个题的时候就想到了最常见的两种实现,觉得面试者一种都写不出来确实不太应该。后来没事的时候又思考这个问题,感觉对于校招生来说是个蛮不错的问题。既能够考验候选人是否有实际写过创建线程的代码,又自然的把问题引导向了线程间的通信方式。虽然听起来很有孔乙己问茴香豆的茴有几种写法的感觉。下面简单的介绍一下我自己想到的几种写法,欢迎补充。正片1. volatile.原创 2020-09-10 22:19:16 · 1564 阅读 · 0 评论 -
面向问题编程-切面+反射实现字段级别权限控制
素衣莫起风尘叹,犹及清明可到家。出现需求:根据权限树的配置,对返回的数据进行控制,要求要限制到具体的指标,一般形式为字段或者结构体。现状:1.约定返回是按照固定字段形式,受控制控制不展示数据的字段确定为返回null。2.权限通过一颗权限树获取,树的叶子节点key唯一。key的命名规则为module+method+metric。没有权限的节点value字段为false。解决...原创 2020-04-01 19:15:43 · 885 阅读 · 0 评论 -
面向问题编程-spring aop类内部调用失效
旧欢新梦里,不觉行路难翻以前的博客,上一次提到aop还是两年前的大学时期初学切面时写的,当时遇到的那个问题在今天看来毫无疑问只能用愚蠢来形容。不过,至少证明了这两年来在技术上还是成长了不少。这一篇,我想还是按照两年前那一篇的写法来完成。最近在公司写一个新项目,里面需要对返回值进行权限管控,剔除掉其中不满足权限要求的数据。作为一个各接口都需要的横向功能,自然会想到使用aop来完成,通常想到的...原创 2020-04-01 11:42:15 · 294 阅读 · 0 评论 -
JSONPath探索
A Java DSL for reading JSON documents. --jayway document这么长时间过去,又重新捡起写博客的习惯。我发现自己博客的文章大多是源自于平日里遇到的问题,很少写与实际没有半点关系的纯理论文章,所以真正回归写代码以后,又产生了写下这篇博客的想法。不过最近工作实在是有点太忙,一来二去截稿已经是发现问题的半个月之后了。上一篇博客还是上半年实习期间的...原创 2019-09-16 15:44:27 · 784 阅读 · 0 评论 -
关于Java中精确计算的问题
世界上有10种人,一种是懂二进制的,一种是不懂二进制的发现的问题之前看公司的代码发现有一个提供精确运算的工具类。想起以前确实有听说过浮点数用于计算精确度丢失的问题,但一直是知其然不知其所以然,如今有这个机会,就想着深入的学习一下这方面的相关东西。由于计算机对于大小的比较会严格按照值的大小进行。计算时会有误差出现,这种误差会导致进行数值比较时出错。例如计算机不会认为0.999...原创 2018-03-20 09:26:04 · 324 阅读 · 0 评论 -
静态内部类
越学习,越觉无知 ——鲁迅《没说过》引子昨晚在寝室翻书的时候,看到《Effective Java》中有提到,当遇到多个构造器参数很多,而且存在许多可选域的情况下,即使是使用重叠构造器也会十分麻烦,而如果使用JavaBean的setter方式,又不能满足一些类中的值初始化后不能修改的性质要求。书里提...原创 2018-02-08 09:06:36 · 377 阅读 · 0 评论 -
Oracle官方文档 —— The try-with-resources Statement
The try-with-resources StatementThe try-with-resources statement is a try statement that declares one or more resources. A resource is as an object that must be closed after the program is finished ...原创 2018-02-11 09:52:03 · 353 阅读 · 0 评论 -
学习AOP时的一个问题
这几天在公司看项目代码,翻到了aop的部分,本着学习的想法看了下使用AspectJ实现对日志的管理。但是在看这段代码的时候有一个问题一直困扰着我,就是代码的执行顺序。困扰@Around这个注解的作用之类的就不在这里介绍了,只说其中的一个问题,使用ProceedingJoinPoint类获得切入点之后,用proceed()方法执行被切部分的代码。问题就在这里,公司的代码中这个Adv原创 2018-01-25 15:19:38 · 279 阅读 · 0 评论 -
LinkedHashMap学习笔记
LinkedHashMap学习笔记前几天看到一篇关于面试问题的博客,里面提到LinkedHashMap和TreeMap区别于HashMap的地方有一点就是是否有序,当时不甚明白,因为觉得LinkedHashMap用的是链表结构的,不知道是如何实现有序的,所以去看了看源码和一些文章。基本结构LinkedHashMap继承自HashMap,内部类Entry也是继承自HashMap.原创 2018-01-23 10:33:33 · 238 阅读 · 0 评论