自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lidelin10的博客

关于Java编程的一些问题

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

原创 在Controller上使用@Transactional注解导致的接口404

背景@Transactional对Controller的某个方法进行修饰时,该Controller下的所有接口都无法访问,出现大量404分析和问题分解1、@Transactional的原理是创建代理2、Controller并无实现任何接口3、代理类直接生成非原类型的对象,这会导致注解信息的丢失?如果符合该场景,Controller的扫描应该发生在代理创建之后问题解决记录1)在SpringBoot启动后,拿到ApplicationContext,通过Object getBean(String n

2021-01-30 16:10:37 1436

原创 MyBatis Mapper Xml中使用枚举进行比较导致的异常:invalid comparison

背景<if test="aggByAdDate"> <choose> <when test="granularity == @com.example.enums.Granularity@DAY"> DATE(record_time), </when> <when test="granularity == @com.example.enums.Granularity@HOUR

2021-01-30 16:08:42 2564 1

原创 文件上传问题排查记录

413 Request Entity too large,后台没有access日志,服务器标识是nginx或者stcgw方案1:排查nginx代理配置client_max_body_size太小,默认的大小为1M,增大client_max_body_size的值为200MB结果1:stag、preview成功方案2:排查Tomcat配置post-max-size、max-upload-size结果2:Tomcat在上传的文件的大小大于配置的CommonFileUpload的最大太小时,后台会报错:F

2021-01-10 08:58:03 237

原创 定时器设计:传统方法和时间轮算法

组成触发“时针”pointer转动的Ticker:一般使用定时循环(一般使用死循环,每次循环sleep小段时间)存放定时任务的环形哈希表工作过程当Ticker触发时,pointer进行自增,在每一次自增中都会对pointer对应的槽中任务链表进行扫描,执行并删除过期的任务,直至pointer的时间与当前时间一致。核心问题如何设计高效哈希表以适应不同的定时任务?Ticker的设计这两个问题都会通过分析下面的示例后进行解答。示例FastDFSFastDFS的使用时间轮实现超时控制以及.

2020-06-16 11:04:01 767

原创 [原理] 说说Web请求的过程

在面试过程中,我们可能都遇到过这个问题,如果我们不是很理解整个过程,可能觉得就是客户端发送请求,服务端处理请求这个简单的过程。但是在工作中,我发现对这个问题理解的深度能让你更快且精确的定位到的问题的所在,最起码能知道是不是我们服务端的问题,接下来小生姑且根据目前自己的理解和参考资料对过程进行梳理。文章目录DNS解析域名发起连接三次握手发送HTTP请求路由转发和路由选择Nginx反向代理服务器...

2019-12-29 16:24:09 818 2

原创 RokcetMQ HA架构:Slave复制原理(不含事务)

Apache RocketMQ是统一的消息引擎,轻量级的数据处理平台。本文介绍了Rocket MQ高可用架构原理,着重介绍了其中的技术细节。

2022-05-03 15:07:07 888

原创 李氏老方-工作遇到的问题以及解决方案汇总

置顶Spring @Transactional 事务无法生效的情况Spring @Transactional 事务代理创建的原理多层代理能否被再次代理?Mybatis中的TypeHandler对线程池maxSize的理解:什么时候线程池会增加worker的数量?线程池中,RejectedExecutionHandler的一个实现方案:CallerRunsPolicy的实际应用中的思考对于分布式锁的思考线程池中,RejectedExecutionHandler的一个实现方案:CallerR

2021-12-29 22:36:13 743

原创 Mockito原理剖析—PowerMockito Mock静态方法原理、如何抑制静态初始化

文章目录PowerMockito如何进行静态类的Mock核心相关类流程MockGateway如何抑制静态初始化PowerMockito如何进行静态类的Mock核心相关类org.powermock.core.classloader.javassist.JavassistMockClassLoaderorg.powermock.core.transformers.javassist.InstrumentMockTransformer流程PowerMockito通过自定义ClassLoader,在加

2021-05-10 07:26:39 2129 1

原创 Mockito原理剖析—无默认构造函数Mock原理

依赖:objenesis、bytebuddy过程:对于Hotspot默认使用的是SunReflectionFactoryInstantiator,该方式会动态生成一个工厂类,通过该工厂类可以实现类似于默认构造函数的功能:1、生成一个实现MagicAccessorImpl类的ConstructorAccessor2、构造一个Constructor对象,设置ConstructorAccessor,当调用Constuctor#newInstance方法,创建对象的行为会委托至ConstructorAcce

2021-05-10 07:24:19 997

原创 Mockito原理剖析——基本原理、@Spy、@Mock、插桩顺序

文章目录Mock的基本原理Mock和Spy区别调用方法的行为使用场景实例Stubbing插桩顺序的问题插桩先行插桩后行总结ReferenceMock的基本原理通过生成子类的方式,拦截具体的方法调用,将方法调用转发至Mock的桩代码,从而实现方法返回值或者方法执行体的自定义。Mock和Spy区别Mock和Spy的基本区别——在没有进行任何方法调用Mock的情况下,Mock根据全局配置根据方法调用返回值类型返回一个默认值,不会进行具体的方法调用;而Spy对象会默认调用真实的方法。调用方法的行为

2021-04-18 16:20:58 3077

原创 Spring Scope的简单原理

Scope注解Scope Proxy Mode MachanismNO/DEFAULTScope行为singleton每次调用BeanFactory.getBean返回相同实例prototype每次调用BeanFactory.getBean返回不同实例Spring不会做任何代理,如果我们在某个单例对象中注入了一个prototype实例,在整个单例的生命周期,它是不会变化的,除非我们通过BeanFactory.getBean调用重新获取一个实例,才能保证每次进入新的

2021-03-06 10:39:55 326

原创 Gitlab Runner 另辟蹊径的安装方法

文章目录环境背景分析和问题分解问题解决记录拓展Gitlab Runner预定义变量gitlab-runner的项目配置环境操作系统:Centos 6架构:x86_64包:gitlab-runner-i686.rpm背景对于Gitlab Runner,网友们普遍的教程为通过镜像源的方式进行安装:# 安装官方镜像源curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/scrip

2021-02-03 22:43:03 230

原创 理解注解上的注解@Inherited、@Target、@Retention、@Documented

@Inherited使用范围:注解类型(Annotation Type)生命周期:运行时如果某个注解上有@Inherited注解,当查找该类型的注解时,会先查找目标类型是否存在注解,如果有,直接返回;否则,继续在父类上寻找注解,停止的条件为在父类上找到该类型的注解或者父类为Object类型。需要注意的是:Java只会搜索父类的注解而不会搜索其实现的接口@Target表示某个注解可注解的元素的集合使用范围:注解类型(Annotation Type)生命周期:运行时ElementType

2021-01-31 09:45:57 716

原创 Java判断文件的真实类型

ImageIO判断图片类型ImageInputStream image = ImageIO.createImageInputStream(in);Iterator<ImageReader> readers = ImageIO.getImageReaders(image);readers.next().getFormatName();JDK内置了下面类型的ImageReader:图像类型扩展名MIME类型魔数(十六进制)魔数(ASCII)gifgifima

2021-01-23 08:10:45 1696

原创 业务常用解法:EasyExcel导出数据

导出数据的流程定义一个RowModel/** * @author lidelin. */@Data@Accessors(chain = true)@ColumnWidth(value = 50)@HeadRowHeight(value = 15)@HeadFontStyle(fontHeightInPoints = 10)//@ContentStyle(horizontalAlignment = HorizontalAlignment.RIGHT)public class DemoMo

2021-01-10 10:23:12 1777

原创 【源码阅读】预备知识总结:GNU内联汇编

文章目录背景汇编语法内联语法关键字assembler template输出操作数输入操作数Clobbered Registers跳转label参考背景Linux内核代码、JVM源码中有很多关于内联汇编的操作,如果想阅读相关代码,比如JVM的Code Stub Generator,学习内联汇编是不可或缺的一环,在此进行总结一番。汇编语法语法特性intelAT&T/UNIX寄存器命名eax%%eax(需要加’%%'前缀)操作数顺序op ,op ,立即数格

2020-12-20 10:16:57 290 1

原创 协议学习-ARP Protocol

文章目录ARP协议介绍ARP报文格式ARP协议工作过程发送ARP请求接收ARP请求ARP表项老化为什么需要表项老化的特性?ARP表项更新以及老化的一些建议一些问题为什么不通过周期性广播ARP报文的方式进行ARP表项的维护?在局域网怎么判断IP冲突?ARP协议介绍ARP,Address Resolution Protocol,翻译为地址解析协议,用于不同网络层次之间的地址解析,如网络层IP到物理层MAC地址的解析。ARP报文格式硬件地址类型[ Linux-2.5.17/include/linux/i

2020-07-31 07:13:01 493

原创 Linx——我的Linux/Unix枕边书【vim篇】

三种模式命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)图片来自于:https://www.runoob.com/linux/linux-vim.html操作命令模式模式搜索命令说明/pattern查找当前光标之后的匹配,下一个当前光标之后的匹配为字母按键’n’,上一个当前光标前匹配为大写字母按键’N’?pattern查找当前光标之前的匹配,下一个当前光标之后的匹配为字母按键’N’,上一个当前光标

2020-07-26 16:42:02 203

原创 Linux——我的Linux/Unix枕边书【命令篇】

文章目录内存查看当前使用内存文件系统查看终端当前路径设备挂载查看挂载设备信息卸载设备挂载设备CPU查看CPU信息进程查看进程列表网络获取端口信息文件操作文件压缩解压\*.tar.gz或者\*.tgz后缀的文件使用gzip压缩文件其他命令文本处理命令参数处理软件安装环境变量查看所有环境变量查看某个环境变量的值常用命令杀死匹配名称的进程某个名称的进程配置环境变量内存查看当前使用内存free使用系统:linux,unix不可用单位:bytefree单位:mbfree -m单位:gbfr

2020-07-26 10:17:23 118

原创 协议学习-VRRP协议

本文就VRRP协议进行了简单介绍,并使用eNSP虚拟实验环境进行了VRRP路由故障转移测试和负载均衡的实验文章目录背景知识基本概念工作过程:参数VRRP路由器启动Master路由器Backup路由器总结实验实验环境拓扑结构各PC配置实验一:测试VRRP故障转移实验二:配置路由负载均衡资源下载eNSP百度网盘下载:网络拓扑文件下载拓展学习参考文章背景知识VRRP,Virtual Router Redundancy Protocol,是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议.

2020-05-17 10:54:31 419

原创 Maven-使用Gitee构建Maven私人仓库

背景:我在使用官方Maven从Gitee仓库下载依赖出现Failure to Authentication:403 Forbidden的问题,在经过一番测试和分析之后,找到原因并成功实施。摘要:本文主要介绍构建Gitee私人Maven仓库的步骤,以及提出相关问题的解决方案。文章目录上传jar包将jar包发布到本地仓库本地仓库目录初始化为git目录,将所有文件推送到远程仓库引用远程仓库的ja...

2020-04-27 11:39:26 4501

原创 Spring专区-梳理Spring-Session Redis分布式会话管理的实现

Spring-Session 2.1.x中对spring-session-data-redis中分布式会话设计的一些理解文章目录Redis存储结构Session信息存储Principal与Session之间的映射同一时刻过期会话集合会话有效key会话事件PUB/SUBKeyspace event notificationsRedisSessionRedisOperationsSessionR...

2020-04-12 20:21:36 313

原创 Redis专区-Keyspace Event Notification

此通知用于Spring-session-data-redis中,用于监听会话的过期事件和删除事件。在此对官网文档做一次梳理。可用版本:2.8.0+Note:如果客户端在某段时间内断开了连接,那么这个时间段内的事件通知将会丢失,即重新连接无法收到相关事件事件类型以进行del mykey操作为例key-space通知使用key作为channel标识,进行的操作作为消息内容等价于下面命...

2020-04-12 18:20:40 287

原创 Kafka-Listener配置参数、配置公网访问以及可能出现的问题

文章目录核心参数listenersadvertised.listenerslistener.security.protocol.mapinter.broker.listener.name配置外网访问配置实例可能会出现的问题listener_name不能相同inter.broker.listener.name must be a listener name defined in advertised...

2020-04-04 20:21:02 18251

原创 Spring专区-定义自己的Aware接口

文章目录核心类介绍BeanPostProcessor何时需要自己定义Aware接口?核心类介绍BeanPostProcessor该类是在Bean对象已经调用构造函数构造出对象后会使用该接口对应的实现类对象进行处理,该接口包含两个方法:Object postProcessBeforeInitialization(Object bean, String beanName) throws B...

2020-04-03 22:10:25 706 6

原创 登录模块-分布式会话设计文档

预备知识会话保持我们都知道HTTP是无状态协议,如果我们在同一网站进行连续两次请求时,服务器是无法识别两次请求的相关性,尤其是需要登录认证的网站,如果第一个请求是登录请求,服务器认证成功,然后进行第二次请求,服务端仍然无法识别该请求的具体身份,就会返回“403 Forbidden”或者重定向至登录页面,然后需要进行发送登录请求进行重定向至该页面,这无疑是极差的用户体验。所以我们需要存在一个服务...

2020-04-02 21:51:17 261

原创 YUV概述以及码率计算方法

文章目录概述YUV的存储方式YUV常见的三种格式4:4:44:2:24:2:0YUV表示的图像码率的计算方法4:4:4表示方法4:2:2表示方法4:2:0表示方法概述YUV,称YCrCb,是颜色空间的一种表示方法。Y表示明亮度(Luminance或Luma),也就是灰阶值(0~255);U和V表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色...

2020-04-01 20:48:23 2147

原创 Python[持续更新]

文章目录Linux下安装Python常见问题Linux下安装Python下载Python源码压缩包Python-*.tgz如果需要配置一些模块,解压后对modules文件下的Setup.dist进行配置# 解压文件tar -zxvf env/Python-3.7.4.tgz# 重新压缩tar -czf Python-3.7.4.tgz Python-3.7.4/编译并安装...

2020-02-23 10:12:49 108

原创 [应用] Spring进行接口监控

我们在对api进行设计时,需要考虑对api的监控,监控内容包括:api调用状态、api调用时间,以及时发现问题。我们说一下用Spring拦截器进行接口监控的简单设计。文章目录在一次请求中一些核心组件的处理步骤关于`HandlerInterceptor`做接口监控的设计在一次请求中一些核心组件的处理步骤1、HandlerInterceptor#preHandle2、handle3、Ha...

2019-12-29 22:30:23 898

原创 [基础]Mac开发使用快捷键

文章目录截图全屏截图矩形区域截图终端快捷键移动光标到行首移动光标到行尾移动光标到单词头移动光标到单词尾打开当前终端所在目录的finder窗口截图全屏截图shift + command + 3矩形区域截图shift + command + 4备注:截图文件自动保存到桌面上终端快捷键移动光标到行首control + a移动光标到行尾control + e移动光标到单词头...

2019-12-15 21:34:43 106

原创 MyBatis Mapper在Spring中的扫描和接口代理

我们使用SpringBoot+Mybatis构建Web应用时时,往往只需要在Application启动类上标注一个@MapperScan注解,Spring就会自动在@MapperScan定义的basePackage中扫描Mapper接口并将对应的bean注册到ApplicationContext中,本着知其然知其所以然的原则,下面我们就通过源码聊一下MyBatis Mapper的扫描和代理原理。...

2019-12-11 18:18:22 332

原创 [ 工具 ] 在Web中的常见的用于参数处理的方法以及在Java中的使用(持续更新)

文章目录一、URL编码二、Base64三、Unicode四、Md5五、随机字符串六、时间戳和格式化时间互转【需要学习Java新的时间API】七、Hex--字节数组转换成十六进制字符串一、URL编码该编码一般用于Content-Type:application/x-www-form-urlencoded的数据,如果前端传到后端的是编码后的一段数据,我们就需要进行解码,URL编码和解码可以使用Ja...

2019-11-29 10:02:53 191

原创 分析CF活动网站请求总结

 近日,朋友委托我做一个CF活动的辅助工具,这种工具都是靠模拟请求来实现的。既然是模拟请求,我们需要知道该网页是怎么进行请求的(主要是查询参数、首都的分析)?它返回的信息是什么?代表什么含义?我们可以通过Firefox开发者工具分析请求信息从而分析其请求的逻辑和要素。网站是这个:https://act.daoju.qq.com/act/a20190701wish/?appinstall=0,一般像...

2019-11-26 09:07:14 872

原创 [ 实践 ] 将安卓微信聊天记录导出为可读格式的一些记录

 现在大部分人都在用微信进行通信,微信官方宣称服务器不会存储用户的聊天信息,那好,微信的聊天记录存储在哪里?以什么方式进行存储的? 网上查证,微信的聊天记录是在/data/data/com.tecent.mm/MicroMsg目录下的一个md5值命名的文件夹下,其中的EnMicroMsg.db文件是通讯信息的数据库文件。我们现在需要拿到这个EnMicroMsg.db文件,因为文件在系统文件夹/d...

2019-11-23 14:04:56 1865 2

原创 [未完结]Bloom过滤器综述

布隆过滤器是相当优秀的设计----利用极小的位数组表达对象的存在信息,空间占用小、查询效率高的优点更是让程序员们欲罢不能。当然bloom过滤器也不是完美的,比如不支持删除数据,有缺点就会有人会尝试改进 — Counting Bloom Filter 、Cuckoo Filter 应运而生。下面介绍一下普通BloomFilter及其改进。一、Bloom Filter1.普通布隆过滤器的设计假设...

2019-11-09 11:08:29 439

原创 敏感字词过滤业务涉及的知识点

目前网络言论环境相当自由,键盘侠层出不穷,拿起键盘一梭子就是问候祖宗十八代的现象屡见不鲜,这就需要应用有能力对这些低俗敏感词进行过滤,以营造绿色的网络环境,虽然“***”大家都心知肚明,但是表面功夫还是要做的,起码不能让家长发现我们的应用过于低俗。下面我们谈谈这个业务系统的设计和相关知识点。1、敏感字词过滤系统的基本要素:敏感字字典、敏感词匹配算法、脱敏处理2、敏感词过滤算法的设计1)基于正...

2019-11-02 09:54:55 1039

原创 讨论Java中字符串的不变性

Java中String对象被设计成是不可变的,这主要体现在下面方面:1、class String被声明为final。2、class String的char[]不可被访问。存在以char[]为参数的构造函数或者substring方法都是通过拷贝副本的方式实现的。我们来研究一下这两个设计的目的,首先为什么class String被声明为final?class String被声明为final本身...

2019-10-27 15:52:31 99

原创 我误解了String#substring方法

我们一般使用substring进行字符串的截取操作,特别是模式匹配的时候,我们会获取匹配到的start和end,然后调用str.substring(start, end)截取[start, end)范围的子串。最近我在做关于敏感词过滤的业务,我想获取字符串中存在字典中的正向最长字符串匹配,然后进行脱敏处理,部分代码如下:public CharSequence searchNextMatch(St...

2019-10-27 10:52:38 163

原创 原理 - Spring:(三)一次Spring请求

该文章展示了用debug获取的一个请求到来时的调用栈,解释了Spring请求-响应过程的主要类和方法阅读源码,主要还是需要知道核心方法和调用逻辑,debug是了解一个方法调用时发生了什么的关键。下面我们通过debug了解Spring收到一个普通请求时的调用过程:请求到来时的调用栈:相关类及其核心方法:DispatcherServlet.doDispatch包含拦截器、Handler...

2019-08-23 10:59:49 182

原创 原理 - Spring:(二)DispatcherServlet.doDispatch方法流程

该文章主要介绍了DispatcherServlet的主要逻辑实现 – doDispatch方法,包括拦截器各个方法调用时机、Handler的查找和调用等主要逻辑DispatcherServlet主要在doDispatch中分发请求以及拦截器的调用,(源代码下方有流程图)protected void doDispatch(HttpServletRequest request, HttpSe...

2019-08-23 10:53:53 784

空空如也

空空如也

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

TA关注的人

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