- 博客(35)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 从源码看世界:偏向锁从入门到放弃
完整的偏向流程:撤销锁成本大,需要等待安全点逻辑过于复杂,并且到处都耦合偏向锁的逻辑,后期维护成本高编程思维的改变,锁范围的缩小与锁竞争的频率增加都会导致偏向失效,反而降低程序性能偏向锁撤销需要安全点原因:对象头需要存储线程信息(方便偏向),因此需要在线程栈帧中遍历寻找lock record,在非safepoint时栈帧是动态的偏向锁适用范围:单一线程反复进入同步块。
2022-06-20 09:48:00
192
原创 通用多级缓件组件
业界第三方缓存框架一般为redis,本地缓地ehcache或guava,一般通过spring提供的restTemplate操作缓存。然而这样会存在很多问题,因此本人开源一款自研的多级缓存组件
2024-07-30 11:57:32
964
原创 dubbo 2.7配置最佳实践(持续更新中)
由于部分dubbo配置影响内存占用计算,加上其默认配置有些不合理,这里持续更新我们在日常项目中的最佳实践,以供大家参考。
2024-07-29 17:05:40
957
原创 电商大型活动行动清单样例
为保证在大型活动/节日(双十一、黑色星期五)时服务稳定,提出各个角色必要的行动清单。技术(开发/测试):服务压测,性能优化,提供服务最大承受能力,线上问题排查。产品:确定核心功能链路,制定服务降级默认行为,提供活动预估数据。地点:集中工作室(异地可提前进入连线状态),方便实时沟通。产出:活动需求、预估请求体量、扩缩容规则、压测报告。服务指标(jvm堆、DB状态、中间件状态等)产出:checklist、人员分工联系表。机器资源(内存、CPU、磁盘、网络等)数据预热(缓存、jit、DNS等)
2024-07-24 21:48:04
564
原创 人人都是架构师:代码复杂度探究
最近本人负责几个需求,自认为对项目比较熟悉的我在评估工作量时应该比较准确,结果频频翻车一度陷入自我怀疑,可见项目发展之快。与此同时,系统的复杂度也快速地提升,这引发我对系统/代码复杂度的分析产生兴趣
2024-07-17 22:33:41
1043
原创 服务部署导致dubbo响应超时
某天应用服务发布过程中,其它部门的同学反馈有部分dubbo请求到该服务时出现超时,但我们的服务实现优雅下线,理论上不应该有超时现象优雅下线是指发布新版本,或者阔缩容的场景下,会终止旧的容器实例,并使用新的容器实例进行替换,对于承载高流量的线上生产环境,这个替换过程的衔接如果不合理,将在短时间内造成大量的错误请求,触发报警甚至影响正常业务(现场的超时请求数)由于与发布时间吻合,基本可以确定是发布导致的。
2024-07-16 23:37:57
858
原创 彻底搞懂happens-before(go版)
程序次序规则:在一个线程内,程序的执行顺序和它们的代码指定的顺序是一样的,即使编译器或者 CPU 重排了读写顺序,从行为上来看,也和代码指定的顺序一样。
2024-06-30 11:20:28
694
原创 史上最强缓存使用的最佳实践(电商版)
第5点的设计基本能解决99%的一致性问题,但仍然有未知的异常导致不一致,最好的方案是加上监控。对于影响核心场景的缓存通过定时任务触发对比任务,但该方案成本较高且适用性不强,不建议使用。注意:因读db和保存缓存并不是原子操作,建议配合【延迟双删】的方案一起使用。缓存出现异常时,查操作降级到查DB,写操作跳过,保证请求能够正常进行。实现原理:配置采样比例,在缓存读取时一定比例进行缓存与DB的对比。原理:因读取到从库旧数据而保存的缓存在延迟消息后再次删除。解决方案:不使用原生的map结构存储;
2024-06-25 20:54:49
612
原创 go简约之道:组合
背过八股文的同学可能会脱口而出:组合又叫复合,用来表示个体与组成部分之间的关联关系,例如学生与心脏之间存在复合关系。甚至还能说出组合与聚合的区别:聚合的成员可独立,而组合的成员必须依赖于整体才有意义。但,此组合非彼组合!在go里的组合虽然也代表关联关系,但并不是参与组合的个体并不依赖整体,他们是独立正交的,个人认为与uml中的聚合一致。
2024-06-12 15:54:46
743
原创 记一次shardingsphere自动更新datasource引发的生产故障
从本次故障得出经验,在使用开源框架时必须多查阅其官网手册,基本可以避免大部分的坑;对于不确定的事情需要多做测试,多想后果,多准备预案,不要等到出现问题时自乱阵脚!
2023-09-19 23:00:43
426
1
原创 任务协同框架设计初稿
日常工作中若遇到一个功能非常复杂时往往实现起来已经相当困难,然而更大的挑战是日后的维护与扩展。……倘若后期需要增加营销活动的需求,到底应该在哪增强呢?这就催生出任务编排/协同的需求了。
2023-09-03 22:12:40
123
原创 dubbo服务端方法增加字段导致消费端反序列化失败
前几天在实现一个新功能时,在dubbo provider提供的SDK中某个方法的返回对象增加了一个字段,照理consumer不使用的时候无需升级也不受影响,结果provider上线后发现未升级的consumer出现反序列失败的异常,这就让我一脸懵B了,于是我赶紧去排查一遍。此时consumer A由于没用到 userInfo,因此继续使用1.0版本。
2023-09-02 22:35:23
591
1
原创 dubbo异常Waiting server-side response timeout by scan timer
调用dubbo api报异常: Caused by: org.apache.dubbo.remoting.TimeoutException: Waiting server-side resp...
2022-03-23 11:05:00
340
2
原创 从源码看世界:深入淺出ConcurrentSkipListMap核心原理
前言 作为一个经常使(mian)用(shi)的数据结构:跳表,我们对其应该不会感到陌生了,特别是java的跳表实现ConcurrentSkipListMap,某...
2020-05-22 00:03:00
15
原创 从源码看世界:tomcat如何在spring boot中启动
在前面的介绍中已经了解过ServletWebServerFactory的实现类,其中就有一个抽象实现类AbstractServletWebServerFactory,它里面实现了session、contextPath、ServletContextInitializer等容器的通用方法,这样tomcat、jetty等容器工厂实现类只需继承这个抽象类即可拥有通用能力,无需重复实现,这种设计也就是常说的。Spring boot之所以如此受欢迎,不仅自动完成了大量配置,还内嵌了web容器tomcat,开箱即用。
2020-02-22 19:15:00
111
原创 JVM堆外内存异常增长的解决过程
最近解决了几次内存异常的问题,有两次是堆外内存异常,感觉解决的问题越多,问题的共性就越容易总结,在这里给大家分享一下,希望抛砖引玉能够帮大家解决遇到的问题。 其实有了MAT这类工具,一般堆内内存基本都能借助工具分析出大概问题所在...
2020-02-16 23:02:00
33
原创 从源码看世界:Springboot整合Mybatis后到底做了什么
在 Mybatis一次数据库操作过程 的文章中,我展示了使用Mybatis操作数据库的demo,但实际使用时并不会这里写代码,因为一般都会使用springboot了,那现在我们一起来看看S...
2020-01-30 00:16:00
35
原创 从源码看世界:Mybatis初始化过程(下)
statement的id、查询offset/limit、sql、参数和环境id,属于二级缓存(此二级非二级分布式缓存,它由事务缓存管理器提供,仍然存储于本地)。可以看到Executor也在这里实例化了,还记得Executor是真正发起数据库操作的执行器,并且Executor有多个实现类,这里到底使用的是哪个实现类呢。众所周知,接口是无法实例化的,那Mybatis到底实例出来的是什么东西呢?这是Mybatis的一种扩展机制,通过拦截器添加自定义操作,需要实现各自的接口并实现到全局配置中。
2020-01-26 23:03:00
27
原创 从源码看世界:Mybatis初始化过程(上)
从注册的内容中可以看出,类型别名主要用于取代复杂的类型全限定名,由于Mybatis支持xml和注解配置,配置一般以字符串形式键入,使用类型别名可以更加方便地进入配置,其用途或用于映射器配置文件中进行参数类型与返回结果类型的设置,或用于其它特定字符的类解析例如JDBC=JdbcTransactionFactory等等。registerAlias方法最终是保存在HashMap里,key=别名,value=类对象。至此,sql的生成已完成,具体的sql解析请自行查看源码,主要还是字符串的解析。
2020-01-26 19:13:00
36
原创 从源码看世界:Mybatis一次数据库操作过程
Mybatis作为大家熟知的持久层框架,能够通过XML或注解方便地实现ORM和数据库操作,到底它是怎么实现的呢,这里通过源码带大家揭开它的神秘面纱。 首先创建srping boot的demo项目,添加mybatis依赖、数据库配...
2020-01-24 00:22:00
26
原创 springboot增加@ComponentScan后本地bean无加载
1、前言 springboot需要加载jar包里的bean时,一般是使用注解@ComponentScan(basePackages = {"com.test.h...
2019-07-24 20:29:00
108
原创 tomcat项目接口每隔一段时间出现延迟慢
一、问题出现 之前在搞性能优化,发现有些通过Spring boot feign的RPC接口比较慢,达到100-200ms,按理RPC调用都是IP直连,不应该超过...
2019-06-25 20:03:00
110
原创 IDEA中Spring boot配置热部署无效问题解决方式
先说明下idea版本: 百度过Spring boot热部署应该都知道怎么配置了,但结果还是无效的话再往下看, ...
2018-08-27 17:03:00
51
原创 web.xml中的welcome-file认识
以前只知道welcome-file是用于配置首页地址,当访问域名时自动进入对应的页面,所以一直以为这个配置的是一个绝对地址。最近在一次测试中发现输入一个没有配置nginx的地址竟然可以进入一个页面,查了很久只有welcome-file这个最可疑,于是才去深扒它的说明(好吧,我承认我基础差) ...
2015-08-31 15:13:00
48
原创 运用@Transactional,自己抛出异常时不会回滚的原因
一、 当你读这篇文章的时候,假如读者是在整合j2EE的三大框架式遇到这个问题,那应该就是下面这个问题: ...
2015-03-25 10:17:00
40
原创 使用jquery.form.js的ajaxsubmit方法提交时参数file标签有值报JS错误
先把问题描述一下,功能是使用ajax向后台来提交数据,为了向用户进行很好的错误提示,后台中将出现错误时的错误原因返回给前端,前端使用jquery.form.js的ajaxsubmit来提交数据,并在success方法中提示"操作成功",在error方法中提示错误原因。整个form提交的数据包括一些简单的input和一个文件的上传...
2015-02-27 11:52:00
40
原创 maven热部署之resin配置
通过resin配置,可令maven项目热部署,具体如下: jsp热部署:在resin设置项目路径时,设置到src的webapp下 ...
2015-02-27 11:49:00
35
原创 获取Spring的上下文环境ApplicationContext的方式
Web项目中发现有人如此获得Spring的上下环境: publicclassSpringUtil{publicstaticApplicationContextcontext=newClassPathXmlApplicationCo...
2015-02-27 11:46:00
32
原创 Mysql数据类型错误引起的问题
前段时间发现后台某个查询经常超时,后来通过排查,把SQL语句打印出来,结果发现: 原来是开发人员在查询日期时,在参数里不小心...
2015-02-27 11:36:00
44
原创 可变参数导致参数没传入的问题
由于其中一个参数需要变化,于是写成: for(intkey:ProvinceCity.PROMAP.keySet()){sql="selectcount(1)fro...
2014-11-24 11:45:00
24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人