![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 81
洛风释
计算机系的学生,爱好编程,做软件
展开
-
性能调优之MySQL优化--覆盖索引对性能的提升测试
接上一篇文章,其实性能优化除了之前所列的那么多以外,对于MySQL也是需要优化的。之前有想过MySQL的优化,无非就是看看是否使用索引,把select * 改成需要的字段以减少内存使用等等,当时也就觉得这样足够了。不过最近在看了极客时间的《MySQL实战45讲》后才发现原来MySQL的优化还是有很多很多地方需要考虑。 先安利一下这个课程,强烈推荐大家都来看一看。它比较系统的讲了MySQL的原理,常见问题,调优手段等等,更有优质的评论与解答。不管是开发,运维还是DBA都值得一...原创 2021-01-15 00:12:17 · 262 阅读 · 1 评论 -
性能压测总结
最近公司上了一个大项目,在上线前进行了3周的全链路压测,总结了不少优化点,这里列举一些,以供大家参考 1、统一日志处理的aop拦截冗余 在拦截aop时pointCut配置,将controller和service层都做了切入,导致很多地方的日志造成了冗余打印,再加上重复的aop拦截也很耗时,最终移除所有的主动拦截,pointCut只...原创 2020-03-22 01:43:48 · 757 阅读 · 0 评论 -
踩了一个java中三目运算符的坑
前两天在开发中遇到了一个很诡异的NPE情况,最后发现是三目运算符的编译问题,这里记录一下。 简化后的代码如下:Map<String, Long> map = Maps.newHashMap();map.put("a", 123L);TmpCls cls = new TmpCls();cls.setPrice(ObjectUtils.isEm...原创 2020-03-08 15:27:46 · 739 阅读 · 0 评论 -
使用GuavaCache的一些姿势
最近写一个小项目,遇到一个高频查询功能,使用redis又有点浪费,就决定采用本地缓存来实现,于是就想到了一直很火的GuavaCache,这里对使用GuavaCache做一些小结。 (在查资料的过程中,发现springBoot 2.x版本中已经移除了GuavaCache的支持,改用了Caffeine,这个需要抽空看看了) 整合起来很简单,具体如下:...原创 2020-01-10 23:58:04 · 379 阅读 · 0 评论 -
简易SQL判别器
在之前工作的慢SQL排查中,发现有一种慢查是这样的,select * from tableName where 1=1,这个产生的原因相信大家都清楚,我在处理该类问题的时候,就想如何更好的避免这种问题,通过翻阅了PageHelper源码,以及MySQL的插件原理,写了一个简易的判别器,提供一个解决该问题的思路。 基本方法就是在执行sql的时候将其拦截,通过jsql...原创 2019-12-22 15:06:46 · 265 阅读 · 0 评论 -
通过PageHelper源码学习MyBatis插件的开发
最近工作中遇到了一些sql语句写法上的问题(具体的问题会在下一篇文章中说明),想了一些办法来解决总觉得太麻烦,后来想到了用mybatis的插件方式来实现,但是不太清楚插件的原理以及如何书写,正好项目中用到了pageHelper,并且在生产中也发现了pageHelper的一些性能问题,于是带着这两个目的,我研究了一下pageHelper的源码,加上大致百度了一下mybatis插件的写...原创 2019-09-16 02:42:28 · 191 阅读 · 0 评论 -
在lambda中使用外部变量的一些心得
随着java8的普及,越来越多的人开始使用lambda表达式。然后初学者们总会遇到一个奇怪的问题: Variable used in lambda expression should be final or effectively final 这个错的产生的原因是因为在lambda表达式中访问外部变量时,都不允许有修改变量的倾向,即 ...原创 2019-07-23 00:41:07 · 9729 阅读 · 0 评论 -
MQ面试相关知识总结
一、MQ用途 主要有3点:解耦、异步、削峰(限流)。 大致图形如下,其实就是在服务与服务之间增加了一个中间件,可以实现上面的三种用途。解耦:我们看到,服务A强依赖服务B和C,当服务B或者C挂掉后,会直接导致服务A的不可用,这显然不是我们所期望的。比如服务的最后一步是记录日志,但是该服务挂了,虽然日志服务和主流服务没有必然的业务联系,但是因为代码的耦合性过...原创 2019-03-17 18:26:35 · 404 阅读 · 0 评论 -
记录一次小型的java内存泄露问题排查过程
前不久发现自己的微信小程序突然挂了,查询后台发现tomcat竟然被干掉了,赶忙将服务重新启动,先解决问题再说。 然后就该想想tomcat的进程为什么会被杀掉了。 在排除人为因素后,就只有内存不够的情况下被Linux主动杀掉了。用free -h命令查了一下,发现内存就剩下120多MB了。我的天,我可是买的4G内存啊,mysql+2个java项目+r...原创 2019-02-21 18:31:37 · 359 阅读 · 0 评论 -
JAVA并发编程中关于锁的小结
最近在学习java的并发编程时,遇到了很多锁的概念,有很多其实都是同一个锁的多种叫法而已,或者是某种锁的一个功能。为了更好的梳理这块知识,这里做一个小结,将锁的概念进行区分。 先说目前我们所遇到的锁的名词,大致有如下这些:公平锁/非公平锁、可重入锁(递归锁)、独享锁/共享锁、互斥锁/读写锁、乐观锁/悲观锁、自旋锁、分段锁、分布式锁。公平锁/非公平锁 ...原创 2019-02-15 18:41:17 · 263 阅读 · 0 评论 -
WeakCache解析
在搞懂了弱引用,以及弱引用hashmap以后,终于可以来看看WeakCache这个类是怎么缓存动态代理类的了。 先来个硬翻译,把这个类上面的注释,自己翻译了一遍。。。 它是一个具有二级缓存的弱引用类,一级缓存的key和value都是弱引用,二级缓存是强引用。其中key是根据入参直接传入的,二级缓存的key和value都是是根据一级缓存的key和v...原创 2019-01-28 18:54:21 · 728 阅读 · 0 评论 -
Java中的关于弱引用分析
上一篇在研究动态代理的时候,遇到了WeakCache,研究了半天,才发现自己连java的强引用、弱引用都不了解,就决定先去研究这个东东,然后再去看WeakCache类。 Java中存在四种引用,分别是强引用,软引用,弱引用和虚引用(也就是幽灵引用)。其中虚引用在查了很多资料后,还是不太懂它的原理以及使用场景,所以这一点在以后能顿悟了再写吧。 先说...原创 2019-01-22 14:48:26 · 780 阅读 · 0 评论 -
JDK动态代理源码分析
上一篇中,分析了静态代理和动态代理的区别,还留有一些问题,最核心的就是,为什么JDK动态代理必须要有一个接口,还有就是,定义一个InvocationHandler,并用Proxy.newProxyInstance调用,怎么就可以实现动态代理效果。 想要知道整个调用过程,就得深入源码去看了。先说一下,本来想一篇文章写完的,但是发现遇到了一个知识盲点:weakCach...原创 2019-01-21 15:53:39 · 263 阅读 · 0 评论 -
java静态代理与动态代理
假设有一个User类,里面有一个获取用户信息的方法,接口和实现如下://接口定义public interface IUserService { void getUserInfo();}//接口实现public class UserService implements IUserService{ @Override public void getUserI...原创 2019-01-11 18:23:59 · 187 阅读 · 0 评论 -
Java序列化总结
昨天读到了Hollis的一篇关于序列化的文章,以及文章里所关联的之前几篇文章,让我对序列化有了一个比较深入的了解,所以在这里做个总结,加深理解。原文地址:https://mp.weixin.qq.com/s/5xcDDtsVYdgzUebF3_Mg4g。以下是总结,基本都是自己的理解,大白话。如有不对的地方,请指正。1、什么是java序列化,为什么要序列化。因为java对象是存活在...原创 2018-12-25 14:43:29 · 248 阅读 · 0 评论