Tags

记录,感悟,成长

星空博客

唐汉红的个人博客

慎用线程局部变量

最近项目中碰到一个bug,bug出现的原因跟线程局部变量有关,比较典型,这里记录一下。 Bug场景 SpringBoot web应用,使用通用mapper https://github.com/abel533/Mapper 以及PageHelper https://github.com/pagehelper/Mybatis-PageHelper (mapper-spring-boot-s...

一点团队管理心得

最近一年左右的时间作为负责人带领一个将近二十个人的团队,对于从没有过管理团队经验的我来说,是一个不小的挑战。这期间我的管理心路经历了三个阶段:第一阶段,角色适应期,大小任务依然事必躬亲,这样的后果是自己很累,团队战斗力没有充分发挥;第二阶段,吸取了前面的经验教训,责任下放,自己几乎不用管具体项目,只负责大的项目进度和人员安排,这样团队成员责任感有了,但缺乏对团队成长的有意培养以及团队技术方向...

mysql会话变量和分区的坑

最近在新东家做审批系统,业务逻辑和工作流引擎都严重依赖mysql。其中业务逻辑部分大量用到存储过程,几乎所有核心dal都是用存储过程实现的。使用存储过程的优势是对于复杂的数据插入和更新操作效率很高。如果不使用存储过程,一个复杂的操作可能要请求多次数据库才能完成,但使用存储过程只需要请求一次,节省网络请求开销。但存储过程的坏处也很明细:不方便测试和调试。我们前一阵就碰到一个存储过程的bug,困...

深入理解两阶段提交协议

两阶段提交协议(two phase commit protocol,以下简称2PC协议)作为最简单原子提交协议,在很多需要使用分布式事务的场景中会经常用到。下面将尝试深入而简单的阐释2PC协议,并给出一个简单的demo实现。 2PC协议中的两种角色 2PC协议中存在着一个协调者(Coordinator)和多个参与者(Participant)。协调者负责接收参与者发起的事务请求,向所有参与...

Dubbo中的设计模式

最近在看阿里开源RPC框架Dubbo的源码,顺带梳理了一下其中用到的设计模式。下面将逐个列举其中的设计模式,并根据自己的理解分析这样设计的原因和优劣。 责任链模式 责任链模式在Dubbo中发挥的作用举足轻重,就像是Dubbo框架的骨架。Dubbo的调用链组织是用责任链模式串连起来的。责任链中的每个节点实现Filter接口,然后由ProtocolFilterWrapper,将所有Filte...

用高斯消元法求解线性方程组

线性方程组问题可以利用矩阵变换求解。利用高斯消元法,将矩阵转换成一个行阶梯矩阵,最后得到一个简化行阶梯矩阵,就是方程的解。参考资料(高斯消元法) Java代码 public class FunctionResolver { public static class LinearEquationGroup { /** 代表线性方程组的矩阵。方程组已经经过归...

多线程编程中的"坑"

近期遇到的多线程bug总结

最近工作中连续碰到几个涉及多线程方面的bug,在这总结梳理一下,就当提醒自己别犯同样的错误。 Bug 1 - 狂转的CPU 同事的一个项目上线的时候,发现CPU占用率奇高,达到700%,而平常的时候,也就100%左右。用jstack查看线程栈,发现很多线程都卡在一个名为waitUntilInited()的方法里面。查看代码,发现这个方法是这样的: private boolean ini...

如何实现一个可用的javaagent

最近做了一个项目需要用javaagent方式对应用常用的组件(比如httpclient, 数据库连接池等)进行调用追踪和监控,并结合公司的分布式追踪组件,将所有java应用的外部调用情况收集起来方便做系统分析和问题定位。项目定位和开源项目pinpoint比较像,但了解过pinpoint实现以后,发现其分布式追踪和组件监控的逻辑耦合太过紧密,而且整个项目比较重,实现繁杂,不容易和公司的分布式追...

新博开张,大吉大利

"Happy new year!"

“Getting started.” 为什么要开通博客? 这年头,github账号和个人博客对于程序猿来说,就好像是名片。跟同行交流,没个名片都不好意思跟人打招呼。再加上波波(老大)跟我强调过几次个人博客的优点和好处,今天趁着元旦节有空搞了一个。而且,今天是新年第一天,也希望借着新博客开张给生活带来新气象,更多地记录工作中的进步和生活的美好。 致谢 今天在搭建博客的时候,一开...

-->