- 博客(102)
- 收藏
- 关注
原创 leetcode算法题总结
非递归写法用一个队列保存当前层的节点,遍历的时候注意提前记下当前层的节点个数,遍历的时候只处理当前层的节点,下一层的节点继续进入队列。代码量很小,有点像智力题,抓住关键点(既然是连续序列且求最大和,判断下要不要取前面的子序列和就行了)就很容易做出来。三数之和的升级版,还是考察队双指针的理解,同时也考察处理复杂业务代码的能力(业务逻辑比三数之和更复杂了)。一道动态规划的典型题目,代码量不大,既考察智力又考察动态规划,非常适合作为面试题目。动态规划、逻辑挺绕的。考察的是递归写法,以及对二维数组边界的判断。
2024-07-04 12:51:06
503
1
原创 线上问题:新需求放量后频繁发生old gc
因此又回去看了下这个接口的相关代码,该接口返回的sku vo的个数虽然非常多,有1w+,但是sku vo单个对象并不大,该对象中只有5个long类型的字段和一个string类型的字段。因此推测是因为打印日志时存在大对象,导致了old gc。看了下异常类型,主要是dubbo接口服务超时,或者消费者超时(超过3s未响应),联想到上面出现的old gc,因此准备通过处理掉old gc来解决大量异常报错问题。随后开始继续放量,直至放量到100%,也没有再出现old gc了,且老年代的内存也维持在了300M左右。
2024-03-07 12:46:44
990
原创 线上问题:所有用户页面无法打开
结合当时出现的大量young gc和多次full gc,推测是进入工作时间(11点)后,请求都转发到对应几台服务器上,开始出现大量young gc,导致young gc运行时间增加。2.1 由于出现了linda告警,所以马上到linda平台查看了接口监控信息,发现从上午11点07分开始,接口最大RT达到了30秒。下午又看了下上午linda接口的监控信息,发现该接口的另外2个服务的RT平均都在2秒左右,没有出现本服务平均最大RT30秒的情况。2)95线RT:昨天平均40秒 --> 今天平均6秒。
2023-10-17 12:40:04
314
原创 分布式事务常见解决方案整理:二阶段、三阶段、TCC、MQ+本地事务+消息校对
分布式事务常见解决方案整理:二阶段、三阶段、TCC、MQ+本地事务+消息校对
2022-10-06 14:58:58
1557
原创 编程题-算法-中等-leetcode-739. 每日温度
看到题目,可以想到用一个双向队列来记录对应的温度和下标值。然后遍历温度temperatures,当遍历的温度值(temp)比队首元素的温度(firstTempInQue)高,则可以得到队首元素的结果。方式二是不借助自定义的类Node,而是将队列里保存对应温度的下标值,通过下标来进行判断,当然原理其实和方式一基本一致。理解了方式一的话,方式二也就很好理解了。如果当前温度值(temp)比队首元素的温度(firstTempInQue)低,则将其放到队首。方式一比较好理解,自定义类Node和队列,进行解答。
2022-10-02 13:48:53
330
原创 Spring核心问题回顾3:spring的事务传播机制、事务失效的情况、对ioc的理解
spring的事务传播机制、事务失效的情况、对ioc的理解
2022-08-21 12:07:41
528
原创 Spring核心问题回顾1:ioc容器创建的大致过程、bean的生命周期、解决循环依赖为什么需要三级缓存
ioc容器创建的大致过程、bean的生命周期、解决循环依赖为什么需要三级缓存
2022-08-21 11:33:25
376
原创 Mysql高级篇学习总结14:子查询优化、排序优化、GROUP BY优化、分页查询优化
子查询优化、排序优化、GROUP BY优化、分页查询优化
2022-07-30 15:03:11
1000
原创 Mysql高级篇学习总结7:Mysql数据结构-Hash索引、AVL树、B树、B+树的对比
Mysql数据结构-Hash索引、AVL树、B树、B+树的对比
2022-06-25 17:21:35
596
原创 Java基础:原子引用的ABA问题
Java基础:原子引用的ABA问题1、ABA问题1、通过原子引用代码验证ABA问题2、通过带时间戳的原子引用解决ABA问题1、ABA问题问:谈一下原子类AtomicInteger的ABA问题?是否知道什么是原子更新引用?如何解决ABA问题答:1、CAS会导致“ABA问题”。CAS算法实现的一个重要前提,是取出内存中某时刻的数据,然后比较并交换。在多线程情况下,就存在取出数据后,该数据被其他线程修改的情况。1)比如线程1从主内存中取出的数据是A,然后进行一些业务操作(比如需要5s),最后并准备将该
2022-05-06 09:02:17
1296
原创 Java基础:CAS详解
Java基础:CAS详解1、CAS详解1.1 理解AtomicInteger类的compareAndSet方法1.2 理解AtomicInteger类的getAndIncrement方法1.3 使用AtomicInteger类替代n++的分析2、CAS的缺点问:知道CAS么?是如何实现的?答:CAS的全称是Compare and swap,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否是预期值,如果是就更改为最新的值,这个过程是原子的。CAS并发原语体现在JAVA语言就是sun.mis
2022-05-04 17:22:46
1447
原创 Java基础:volatile详解
Java基础:volatile1、volatile保证可见性1.1、JMM模型的引入1.2、volatile保证可见性的代码验证1.2.1、无可见性代码验证1.2.1、volatile保证可见性验证2、volatile不保证原子性问:请谈谈你对volatile的理解?答:volatile是Java虚拟机提供的轻量级的同步机制,它有3个特性:1)保证可见性2)不保证原子性3)禁止指令重排刚学完java基础,如果有人问你什么是volatile?它有什么作用的话,相信一定非常懵逼…可能看了答案,也完
2022-05-03 20:35:26
36196
29
原创 Spring注解驱动开发学习总结21:Spring容器创建 - 创建bean的详细步骤
Spring注解驱动开发学习总结21:Spring容器创建 - 创建bean的详细步骤1、分析11步中的finishBeanFactoryInitialization方法分析11.2中的doGetBean方法分析11.2.3中的createBean方法分析11.2.3.2中的doCreateBean方法2、分析12步中的finishBeanFactoryInitialization方法3、小结回顾前3篇文章:1、Spring注解驱动开发学习总结18:Spring容器创建 - beanFactory创建和
2022-04-23 20:11:07
651
原创 Spring注解驱动开发学习总结20:Spring容器创建 - 注册bean后置处理器、初始化事件派发器、注册监听器
Spring注解驱动开发学习总结20:Spring容器创建 - 注册bean后置处理器、初始化事件派发器、注册监听器1、查看Spring容器的refresh方法分析registerBeanPostProcessors方法分析initMessageSource方法分析initApplicationEventMulticaster方法分析onRefresh方法分析registerListeners方法2、 小结回顾前2篇文章:1、Spring注解驱动开发学习总结18:Spring容器创建 - beanFac
2022-04-22 09:12:02
405
原创 Spring注解驱动开发学习总结19:Spring容器创建 - beanFactory后置处理器的操作步骤
Spring注解驱动开发学习总结19:Spring容器创建 - beanFactory后置处理器的操作步骤1、查看Spring容器的refresh方法分析步骤5中的invokeBeanFactoryPostProcessors方法2、小结回顾前1篇文章:1、Spring注解驱动开发学习总结18:Spring容器创建 - beanFactory创建和预准备工作步骤分析了Spring容器refresh方法的:1)刷新前的容器准备:prepareRefresh();2)刷新内置的bean工厂:obtai
2022-04-21 09:03:59
368
原创 Spring注解驱动开发学习总结18:Spring容器创建 - beanFactory创建和预准备工作步骤
Spring注解驱动开发学习总结18:Spring容器创建 - beanFactory创建和预准备工作步骤1、beanFactory创建和预准备工作步骤2、小结在之前的文章:Spring注解驱动开发学习总结11:AOP功能使用中构建了一个数学计算器的业务类(MathCalculator),该业务类添加了一个除法方法(div)。然后给div方法添加AOP的通知方法:前置通知(@Before)、后置通知(@After)、返回通知(@AfterReturning)、异常通知(@AfterThrowing)。
2022-04-20 08:55:11
548
原创 Spring注解驱动开发学习总结17:AOP原理总结
Spring注解驱动开发学习总结17:AOP原理总结1、AOP原理总结1.1 @EnableAspectJAutoProxy注解作用分析1.2 AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤1.3 AOP通知方法的调用步骤回顾前面5篇关于AOP文章的内容1、Spring注解驱动开发学习总结11:AOP功能使用构建了一个数学计算器的业务类(MathCalculator),该业务类添加了一个除法方法(div)。然后给div方法添加AOP的通知方法:前置通
2022-04-14 20:37:42
707
原创 Spring注解驱动开发学习总结16:AOP原理 - AOP通知方法执行的步骤
Spring注解驱动开发学习总结16:AOP原理 - AOP通知方法执行的步骤1、方法栈调用分析1.1 分析AOP通知方法的调用步骤2、小结回顾下前4篇AOP原理分析的内容:1、Spring注解驱动开发学习总结12:AOP原理 - @EnableAspectJAutoProxy注解作用分析分析了配置类上添加@EnableAspectJAutoProxy注解,最终会给容器中注册了一个id为internalAutoProxyCreator,类型为AnnotationAwareAspectJAutoProx
2022-04-14 14:05:52
936
原创 Spring注解驱动开发学习总结15:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器返回代理对象的步骤
Spring注解驱动开发学习总结15:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器返回AOP代理对象的步骤1、方法栈调用分析1.1 分析applyBeanPostProcessorsBeforeInstantiation方法1.2 分析applyBeanPostProcessorsAfterInitialization方法1.3 分析AnnotationAwareAspectJAutoProxyCreator后置处理器返回代理对象的步骤2 小结2.1
2022-04-11 21:25:43
725
原创 Spring注解驱动开发学习总结14:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤
Spring注解驱动开发学习总结14:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤1、AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤1.1 查看方法栈调用信息1.2 方法栈调用分析1.3 本文小结1.3.1 @EnableAspectJAutoProxy注解作用分析1.3.2 AnnotationAwareAspectJAutoProxyCreator后置处理器的调用步骤回顾下前两篇AOP
2022-04-09 14:31:31
632
原创 Spring注解驱动开发学习总结13:AOP原理 - AnnotationAwareAspectJAutoProxyCreator后置处理器注入容器的步骤
Spring注解驱动开发学习总结12:AOP原理 - 后置处理器注入ioc容器的步骤分析1、注册AnnotationAwareAspectJAutoProxyCreator1.1 查看调用栈1.2 方法栈调用分析1.3 小结1.3.1 上篇博文小结1.3.2 后置处理器注入ioc容器步骤分析小结上一篇博文中,已经分析了配置类上添加@EnableAspectJAutoProxy注解,最终会给容器中注册了一个id为internalAutoProxyCreator,类型为AnnotationAwareAspec
2022-04-05 14:48:11
655
原创 Spring注解驱动开发学习总结12:AOP原理 - @EnableAspectJAutoProxy注解作用分析
Spring注解驱动开发学习总结12:AOP原理 - @EnableAspectJAutoProxy1、@EnableAspectJAutoProxy注解的作用1.1 导入AspectJAutoProxyRegistrar类1.2 容器中注册AnnotationAwareAspectJAutoProxyCreator类1.3 小结2、AnnotationAwareAspectJAutoProxyCreator类的使用分析2.1 继承关系分析2.2 aop关键方法分析2.3 测试理论分析2.4 小结3、小结
2022-04-04 19:42:13
2486
原创 Spring注解驱动开发学习总结11:AOP功能使用
Spring注解驱动开发学习总结11:AOP功能使用1、AOP功能使用1.1 导入AOP依赖1.2 构建业务类1.3 构建切面类1.4 构建配置类1.5 测试运行方法成功1.5 测试运行方法异常1、AOP功能使用AOP:是指在程序运行期间动态地将某段代码切入到指定方法指定位置进行运行的编程方式。以下建立一个日志的AOP功能进行举例:1、导入AOP依赖:spring-aspects,4.3.12.RELEASE2、构建业务类:比如构建一个数学计算器的业务类(MathCalculator),该业务类添
2022-04-03 19:39:52
664
原创 Spring注解驱动开发学习总结10:根据环境注册 @Profile注解
Spring注解驱动开发学习总结10:根据环境注册 @Profile注解1、根据环境注册@Profile注解1.1 构建Product类1.2 构建配置类1.3 测试一(动态参数开启生产环境)1.4 测试二(代码方式开启测试环境)1、根据环境注册@Profile注解@Profile注解可以指定组件在哪个环境下才能注入容器。比如配置文件有开发环境、测试环境、生产环境,生产发布的时候必须要使用生产环境的配置。1.1 加了环境标识的bean,只有这个环境被激活的时候才能注入容器。默认是default环境,
2022-04-02 12:19:55
573
原创 Spring注解驱动开发学习总结9:自动装配注入Spring底层组件&原理解析
Spring注解驱动开发学习总结9:自动装配注入Spring底层组件&原理解析1、自动装配注入Spring底层组件1.1 构建Blue类1.2 构建配置类1.3 测试自动注入Spring底层组件2、自动装配注入Spring底层组件原理2.1 原理分析2.2 小结1、自动装配注入Spring底层组件自定义bean如果想要使用Spring容器底层的一些组件,比如ApplicationContext, BeanFactory等,可以让类实现xxxAware接口。Spring在创建对象的时候,会调用接口规定的方
2022-04-01 20:39:42
691
原创 编程题-算法-中等-牛客网-NC60 判断一个树是否是搜索二叉树和完全二叉树
编程题-算法-中等-牛客网-NC60 判断一个树是否是搜索二叉树和完全二叉树1、题目:判断一个树是否是搜索二叉树和完全二叉树2、编程解答2.1 方式一:搜索(递归+列表)、完全(非递归)2.2 方式二:搜索(递归)、完全(非递归)2.3 方式三:搜索(非递归)、完全(非递归)1、题目:判断一个树是否是搜索二叉树和完全二叉树2、编程解答1)什么是搜索二叉树?因为左子树的节点全部小于父节点,所以按照中序遍历的话,如果是搜索二叉树的话,一定是升序的。可以采用深度优先遍历,使用stack栈结构来解决。
2022-04-01 10:02:04
740
原创 Spring注解驱动开发学习总结8:自动装配注解@Autowire、@Resource、@Inject
Spring注解驱动开发学习总结8:自动装配@Autowire注解1、使用@Autowire注解1.1 构建bookDao1.2 构建bookService1.3 构建配置文件1.4 同类型组件测试一1.5 同类型组件测试二(使用@Qualifier指定id名称)1.6 同类型组件测试三(使用@Primary)1、使用@Autowire注解1、可以使用@Autowire注解自动注入组件。 1.1 自动装配@Autowire注解,默认一定存在该bean,如果不存在就会报错。可以使用将参数require
2022-03-30 10:00:21
1228
原创 Spring注解驱动开发学习总结7:属性赋值@Value详解
Spring注解驱动开发学习总结7:属性赋值@Value详解1、属性赋值1.1 创建配置文件1.2 Person类添加属性赋值1.3 新建配置文件1.4 测试1、属性赋值给bean的属性赋值,可以使用@Value注解添加属性初始值。1)可以添加基本数值2)可以写Spring的SpEL表达式:#{}3)可以写${},取出配置文件[properties]中的值。同时需要在配置文件上使用@PropertySource注解,标明配置文件的类路径。以下还是以之前创建的Person类进行举例,来给属性赋值。
2022-03-29 19:33:16
664
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人