自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Fake_Armour

学习日志

  • 博客(33)
  • 收藏
  • 关注

原创 可以实时修改参数的线程池--动态线程池实现探索

基于配置中心的动态线程池实现,可以使线程池参数实时生效,不需要重新部署

2022-07-18 09:15:00 728 1

原创 guava cache缓存组件在并发场景下的问题

前言去年面蚂蚁的时候,二面提到自己项目里使用了guava cache来缓存一些高频读的配置文件,被问到了它的实现以及并发场景下可能存在什么问题,因为没有深入了解过,所以没回答上来。现在想来除了技术上的问题之外,也反映了当时我个人的思考不够的问题:1 在对基础组件原理完全不了解的情况下就盲目使用,是否会因此带来一些隐藏的坑;2 为什么没有抽时间去对用到的技术栈做一下简单的了解和调研,做出这样的技术选型的背景和理由根本讲不出来。常常说要积累技术的广度和深度,就是应该要在这些地方多思考才行。想起之前一个组

2022-01-25 09:30:00 2133 1

原创 【并发问题】线程池死锁阻塞

苦练基本功问题表现周五开开心心下班,结果收到了问题,说是某个接口报了504的异常,一开始以为是网络或者服务器的问题,后来排查才发现是自己埋的一个坑,快乐的周末直接报销。排查过程首先关注一下504代表的问题。造成504的原因主要有两种,nginx建立连接超时(proxy_connect_timeout)和nginx等待服务器返回超时(proxy_read_timeout)常见的原因可能是流量在增加,但是后端容量不足,导致大量504出现。但是在这里很明显不是资源问题,应该是nginx等待服务器.

2021-12-09 17:50:43 1154 1

原创 lombok 父类和子类builder不兼容的问题

遇到的问题在写代码时,有时因为需要定义一些重复的参数,为了复用之前传参的DTO,会对原有的类进行继承,从而达到避免重复代码的效果。但是,当父类中使用了lombok的@Builder注解,子类也需要@builder注解时,就会出现异常排查和解决由于实际的代码存在敏感信息,这里分别定义两个类Parent和Child来进行场景的模拟@Data@Builderclass Parent { private String parentProperty1; private String p

2021-11-17 15:37:20 7394 1

原创 Mybatis中association标签嵌套时数据映射问题

出现问题在mybatis里查询使用association标签时,发现内层对象的查询结果一直为null先放结论association在嵌套使用时,columnPrefix会进行合并排查路径手动执行sql,发现执行结果没有问题,数据能够正常查询到,排除sql执行异常由于是嵌套的内层数据为空,排查association标签的使用。场景还原有ABC三张表进行关联查询,返回的结果对象是一个多层嵌套的对象。尝试进行拆分,发现当只有一层嵌套时,association能够正常工作,内层数据是存在的,只有在

2021-09-27 15:36:46 1437

原创 基于Redis的频次控制能力实现

引言公司业务上目前存在许多发送给用户的消息,例如PUSH,短信等,我们将其统称为触达行为。假如不对其加以约束,过多的触达消息不但不能带来流量和销售上的转化,反而会降低用户体验。如何管理各种服务对用户的触达,统一对触达的频次进行有效控制成为了亟待解决的一件事。本文将介绍频次控制实现方式。背景频次控制的场景,在我所接触到的类型中主要分为两类:一类是速率限制(rate limiting),主要是对服务请求速率进行限制,可能是限定某个接口,限定某个应用,或者是限制对某个资源的访问,目的是防止由大量不合理

2021-07-28 18:01:41 2328

原创 MongoDB的学习与使用(补档)

本文写于2019年11月,是原本发布在公司内网的一篇水文引子前不久听了一场关于mongodb的内部分享会,想以此次分享所得,结合自己日常开发中对于mongodb的理解做个总结。基本知识MongoDB is a non-relational database developed by MongoDB, Inc. MongoDB stores data as documents in a binary representation called BSON (Binary JSON). Related.

2021-07-14 22:58:28 98

原创 count的几种写法

孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!……回字有四样写法,你知道么?”我愈不耐烦了,努着嘴走远。孔乙己刚用指甲蘸了酒,想在柜上写字,见我毫不热心,便又叹一口气,显出极惋惜的样子。写下这个标题,立刻就联想到了孔乙己,于是找出了上文的引用。闲话不表,说正事。count查询一般在统计满足某条件的数据总数时会用到,常见的就是数据统计分析和分页查询的场景。这篇文章的目的主要是想研究一下count的用法,找到使用这个方法的最佳实践。实现查询引擎差异总所周知,mysql是.

2021-07-02 17:18:51 2119

原创 使用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 2811 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 13224 13

原创 实践服务可用性的提高方式 -- JVM参数调优

背景首先说明一下背景,需要调优的服务是一个需要较高吞吐和可用性的服务,吞吐量目前没有达到瓶颈,还可以通过增加服务器进行水平扩展,但是可用性亟需提高,而评价可用性的标准之一就是所有请求中响应时间在可用范围内的请求数量。由于最初是按照部门内的默认jvm参数来配置,导致在压测过程中gc表现并不好,gc时间略长,次数也很频繁,影响到了部分请求的响应时间,导致可用性降低,具体的数据将在后文中提到。所以此次调优,首要目标是降低单次gc的时间,提高服务可用性;其次是降低gc发生的频率,减少受到gc影响的请求占比。

2020-12-29 16:45:28 337

原创 设计模式实战 -- 在Spring下设计实现简单的责任链模式框架

之前接手的项目中,有一次使用责任链模式重构项目模块的经历,在此记录。背景项目是供应链相关服务,而其中的采购模块有一个根据库存,采购,销售和流转状况等数据分析和预测库存,达到对补货提供数据参考能力的模块。当然最初并没有这么多能力,模块最初设计只是作为库存数据可视化用途,在此后长达两年的周期内,不断进行功能迭代,每次的功能点都并不大,可能只是加个字段,多计算一点数据或是增加个计算逻辑,但是到我最后接手时,代码可读性已经很低。各个开发负责的代码风格迥异,没有统一规范,功能点实现分散且交叉在一起,梳理逻辑困难,

2020-11-24 00:07:57 1274

原创 使用arthas排查tomcat异常

背景前不久上线了一个新服务,是和操作redis相关的业务,正常来说请求的平均响应时间应该小于5ms,99分位线正常也应该在10ms以内。但是上线后通过监控发现存在个别周期性响应时间超过100ms的请求,通过监控平台发现请求在Tomcat Servlet Process阶段时出现了超过100ms的Gap,怀疑是某些东西影响了tomcat导致的,所以想通过arthas追踪发现出现问题的请求。Arthasarthas是阿里开源的一个线上诊断工具,能够通过一些方法追踪线上调用,用于诊断一些不方便排查的线上问题

2020-11-17 00:00:45 5117

原创 如何理解ThreadLocal源码以及其存在的问题

如果有人直接问起,让你介绍一下ThreadLocal或者讲一讲自己对于ThreadLocal的理解,突然之间会感觉有点无从下手,所以想总结一下,写一个该如何回答这个问题的文字版。首先,是什么摘抄一些来自其他博客的描述ThreadLocal提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal变量通常被private static修饰。当一个线程结束时,它所使用的所有ThreadLocal相对的实例副本都可被回收。ThreadL

2020-10-29 00:58:32 214

原创 线程交替打印的几种实现方式

秋风渐起前言前段时间同事去面了校招生,吐槽说候选人简历里写了熟悉多线程,但是连一道不限制任何实现方式的线程交替打印字符串都不会。当时听到这个题的时候就想到了最常见的两种实现,觉得面试者一种都写不出来确实不太应该。后来没事的时候又思考这个问题,感觉对于校招生来说是个蛮不错的问题。既能够考验候选人是否有实际写过创建线程的代码,又自然的把问题引导向了线程间的通信方式。虽然听起来很有孔乙己问茴香豆的茴有几种写法的感觉。下面简单的介绍一下我自己想到的几种写法,欢迎补充。正片1. volatile.

2020-09-10 22:19:16 1528

原创 权限控制2.0--重构,解耦页面与字段

在曲折中前进前情提要在上一篇文章里,通过切面加反射,根据一棵模块-页面-字段三层的权限树实现对返回字段权限的控制。实际上线运行一段时间之后还是发现了一些问题。1.权限树膨胀随着页面增加,每个页面都有大量字段,权限树会持续膨胀,而字段大多是相同的,只是分布在不同的模块和页面中,每次新建角色或者上线新模块时勾选权限的过程比较复杂,大多是重复劳动,而且也容易出现人为失误。目前已知确实出现了权限的问题,因为线上权限管控的原因,开发人员没有权限配置线上权限,把相关数据交给产品去配置之后,开发和测试人员都.

2020-07-29 20:36:56 277

原创 面向问题编程-切面+反射实现字段级别权限控制

素衣莫起风尘叹,犹及清明可到家。出现需求:根据权限树的配置,对返回的数据进行控制,要求要限制到具体的指标,一般形式为字段或者结构体。现状:1.约定返回是按照固定字段形式,受控制控制不展示数据的字段确定为返回null。2.权限通过一颗权限树获取,树的叶子节点key唯一。key的命名规则为module+method+metric。没有权限的节点value字段为false。解决...

2020-04-01 19:15:43 831

原创 面向问题编程-spring aop类内部调用失效

旧欢新梦里,不觉行路难翻以前的博客,上一次提到aop还是两年前的大学时期初学切面时写的,当时遇到的那个问题在今天看来毫无疑问只能用愚蠢来形容。不过,至少证明了这两年来在技术上还是成长了不少。这一篇,我想还是按照两年前那一篇的写法来完成。最近在公司写一个新项目,里面需要对返回值进行权限管控,剔除掉其中不满足权限要求的数据。作为一个各接口都需要的横向功能,自然会想到使用aop来完成,通常想到的...

2020-04-01 11:42:15 256

原创 JSONPath探索

A Java DSL for reading JSON documents. --jayway document这么长时间过去,又重新捡起写博客的习惯。我发现自己博客的文章大多是源自于平日里遇到的问题,很少写与实际没有半点关系的纯理论文章,所以真正回归写代码以后,又产生了写下这篇博客的想法。不过最近工作实在是有点太忙,一来二去截稿已经是发现问题的半个月之后了。上一篇博客还是上半年实习期间的...

2019-09-16 15:44:27 754

原创 Git基础知识与常用命令总结

纸上得来终觉浅,绝知此事要躬行引言来到新的公司,第一件事当然是配环境这个毋庸置疑。小组内开发新项目,需要多人合作共同完成,第一件就是找一个好用的版本控制软件。版本控制软件就不在这里介绍了,Git、SVN其实都是有学过和用过的。但是问题依旧存在,那就是之前不管是跟同学组队开发项目或者是在github使用Git,还是在之前那个公司实习的时候用SVN,都只是轻度的使用,而且操作及其不规范,只是做...

2019-03-04 09:30:03 342

原创 工作中SQL学习和应用

从实际出发,坚持理论与实践相结合的原则。导语篇最近由于工作的需要,遇到了需要大量使用sql语句的地方,同时也有一定的难度,至少以学校所学是没法解决的,所以想在这里写下这篇博客,记录一下所学到的所用到的知识,既是总结也是一次重新学习,顺便能利用公司庞大的数据表和查询结构来提高自己,因为单靠自己估计不会有遇到这种复杂的问题的机会。语法篇case根据oracle的官方...

2018-05-23 11:47:49 1416

原创 volatile机制探究

看了别人的几篇博客,觉得受益匪浅,同时有一点自己的想法,想记录下来,便有了这篇博文。问题多线程主要围绕的问题就是可见性,原子性和有序性这些特性。而使用volatile关键字修饰的变量,能够保证其在多线程之间的可见性,即每次读取到的volatile变量,一定是最新的数据。 volatile同时也会阻止进行语句重排。从内存模型说起,在java虚拟机中,程序计数器 java虚拟机栈...

2018-04-01 22:26:44 207

原创 关于Java中精确计算的问题

世界上有10种人,一种是懂二进制的,一种是不懂二进制的发现的问题之前看公司的代码发现有一个提供精确运算的工具类。想起以前确实有听说过浮点数用于计算精确度丢失的问题,但一直是知其然不知其所以然,如今有这个机会,就想着深入的学习一下这方面的相关东西。由于计算机对于大小的比较会严格按照值的大小进行。计算时会有误差出现,这种误差会导致进行数值比较时出错。例如计算机不会认为0.999...

2018-03-20 09:26:04 308

转载 Springboot:Spring Data Jpa的使用

使用spring data jpa 开发时,发现国内对spring boot jpa全面介绍的文章比较少案例也比较零碎,因此写文章总结一下。spring data jpa 介绍首先了解JPA是什么JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要...

2018-03-13 15:01:04 191

原创 带重复元素以及不带重复元素的全排列

被一块石头绊倒两次是真的丢人——不写引子不舒服斯基递归思想递归的思想中有几个很重要的特性,对于使用递归求解的问题,把握好这几个因素就能把代码写好了。 1. 终止条件。递归的方法有一个最终的终止条件,这个条件满足题目所提出的要求,而且不会无限的循环下去。 2. 子问题。问题中的子问题可以再次递归调用方法求解。这就是分治思想的运用了。在没有满足返回条件之前,每一步和前一步都只是在状...

2018-03-09 16:22:08 654

原创 丑数2(Ugly Number Ⅱ)

“今者臣来,见人于大行,方北面而持其驾,告臣曰:’吾欲之楚。’臣曰:‘君之楚,将奚为北面?’曰:‘吾马良。’臣曰:‘马虽良,此非楚之路也。’曰:‘吾用多。’臣曰:‘用虽多,此非楚之路也。’曰:‘吾御者善。’此数者愈善,而离楚愈远耳。” ——《战国策·魏策四》题目:丑数Ⅱ设计一个算法,找出只含素因子2,3,5的第n小的数。符合条件的数如:1,2,3,5,6,8,9,10,...

2018-03-06 11:24:20 437

原创 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 341

原创 静态内部类

越学习,越觉无知 ——鲁迅《没说过》引子昨晚在寝室翻书的时候,看到《Effective Java》中有提到,当遇到多个构造器参数很多,而且存在许多可选域的情况下,即使是使用重叠构造器也会十分麻烦,而如果使用JavaBean的setter方式,又不能满足一些类中的值初始化后不能修改的性质要求。书里提...

2018-02-08 09:06:36 342

原创 JDK8新特性学习(一) Lambda表达式和函数式接口

Lambda表达式和函数式接口 刚进公司时,公司正处于由JDK7换用JDK8的时间短,之所以更换JDK版本,听说是公司业务中需要用到JDK8的一些新特性。鉴于我现在也无事可做,姑且来学习总结一下JDK8的一些特性吧。水平有限,这篇勉强算是对他人博客上零散内容的一个总结。1. Lambda表达式Lambda表达式 匿名函数,当需要一个函数而又不想给他一个命名时,在java中,对

2018-01-29 16:18:37 397

原创 学习AOP时的一个问题

这几天在公司看项目代码,翻到了aop的部分,本着学习的想法看了下使用AspectJ实现对日志的管理。但是在看这段代码的时候有一个问题一直困扰着我,就是代码的执行顺序。困扰@Around这个注解的作用之类的就不在这里介绍了,只说其中的一个问题,使用ProceedingJoinPoint类获得切入点之后,用proceed()方法执行被切部分的代码。问题就在这里,公司的代码中这个Adv

2018-01-25 15:19:38 264

原创 LinkedHashMap学习笔记

LinkedHashMap学习笔记前几天看到一篇关于面试问题的博客,里面提到LinkedHashMap和TreeMap区别于HashMap的地方有一点就是是否有序,当时不甚明白,因为觉得LinkedHashMap用的是链表结构的,不知道是如何实现有序的,所以去看了看源码和一些文章。基本结构LinkedHashMap继承自HashMap,内部类Entry也是继承自HashMap.

2018-01-23 10:33:33 223

原创 Codewars --Number of trailing zeros of N!

Codewars上做过的一个题

2017-02-11 20:39:42 570

原创 良好的代码习惯,减少不必要的错误

规范的代码习惯可以减少很多不必要的错误发生,能够减少在debug时的暴躁情绪。1,String.equals()方法为了防止出现偶发性的 NullPointerException 的出现,以及代码的整洁性,将String放在equals()的左边来进行比较。//有可能报错的写法if(var.get_couNum().equals(String_ID)){....}//更规范

2017-02-11 19:56:34 641

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除