0%

简介

最近线上应用再次发生了TCP接收拥堵,还记的上次服务发生拥堵时我将数据写入Kafka,由Kafka进行削峰异步消费数据,且去除了MongoDB副本来解决磁盘I/O的瓶颈,那为何在运行了几个月后TCP接收缓冲区为何又发生了拥堵?经过一番排查后这里记录一下解决问题的过程和方法。

阅读全文 »

简介

最近业务上线已经有一段时间了,在这期间业务的流量逐渐上升,由刚开始时几乎忽略不计的并发流量,上升到平均每秒6M左右,高峰期可达20M,在排除掉一些其他数据的流量后,真实入库的数据平均在2M,高峰期在8M左右,在这期间系统出现了一些并发问题,这里对排查方法和自己对优化方面的思考做了一些总结。

阅读全文 »

简介

循环依赖并不是一个好的设置,现实代码中很多离奇问题都由循环依赖导致(如死锁等),但是Spring是如何解决这部分问题的呢?答案是利用了Java的特性,同一个对象的应用指向的是同一个类,这样就能在类还在实例化阶段,还没对值进行赋值阶段就创建一个早期实例化对象,依赖对象去持有这个临时对象的引用,在依赖对象完全初始化后,由于持有对象是拥有者依赖对象的同一个引用,这样就能完成循环依赖的操作,现实中循环依赖并不是一个好的模式,我也会在现实中去避免去使用,就如之前介绍的六边形架构一样,好的架构要层次分明,循环依赖会导致系统的复杂化和系统架构的边界的不清晰,从而导致大泥球式的代码。

阅读全文 »

简介

在采用Maven构建Spring的多模块项目时,Spring是如何扫描项目中jar包中的资源和类(Commment注解等)然后将其注入到Spring容器中?,我们知道可以使用Java下的ClassLoader去获取内部的资源,当时如果要获取外部java资源,然后利用反射去调用怎么实现?最近带着这个疑问阅读了源码,发现其采用了java自带的Resource API去获取这部分信息。

阅读全文 »

简介

之前使用Spring结合Hibernate Validator来做接口校验经常由于使用姿势不对导致无法正常运行,在网上找到的文档也没有对我感兴趣的部分进行讲解,所以最近大致查看了下源码来了解下这部分信息。

阅读全文 »

简介

在最开始接触Mybatis之前就好奇Mybatis是如何将我们执行我们定义的接口?其如何和我们编写的xml关联起来,最近又带着这个疑问分析了一下Mybatis Spring的源码,发现其核心也不复杂就是java 的动态代理。

阅读全文 »

简介

最近空闲重新学习了一下Spring,之前只知道ApplicationContext和BeanFactory都是Spring的容器,且ApplicationContext对BeanFactory做了增强,当时其具体的实现不了解,知道最近在自己突发奇想,想使用BeanFactory去读取注解(@Bean)定义的类时才从源码中了解到相关内容,其是本质就是对BeanPostProcessor和BeanFactoryPostProcessor的分析。

阅读全文 »

简介

在SpringBoot还没兴起时,写SpringMVC代码还是基于xml配置的形式来做,但是由于当时对Spring只停留在一知半解和抄袭别人代码阶段,导致xml复制错误,导致项目跑步起来,其中一个就是Spring的父子容器问题,最近结合源码来做了一次彻底的分析,这里记录了一下分析源码的思路和过程

阅读全文 »

简介

之前项目使用Netty构建TCP请求来构建应用,在项目上线后项目有很多问题,而之前对网络七层方面的了解只停留在口头和表面,导致排查问题的时候没有这方面的知识走了很多弯路,在排查问题时顺便复习了这块的知识,并且写下自己的理解

阅读全文 »

简介

最近上线的项目中使用Netty构建tcp服务去连接设备来收集设备运行的状态,在试运行一段时间后发现kibana中偶尔出现设备端发送了我们的数据,后端解析出错的问题,但是设备端又死活不承认他们的问题,无奈下本着做事要拿出证据的原则,这边被迫再次学习了TCP等知识来打他们的脸。

阅读全文 »