<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hakey的博客]]></title><description><![CDATA[爱编程，爱事业，爱分享，爱交流，爱生活。]]></description><link>https://blog.youkuaiyun.com/HLhakey</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HLhakey]]></copyright><item><title><![CDATA[【无标题】]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/146132854</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/146132854</guid><author>HLhakey</author><pubDate>Sun, 09 Mar 2025 15:16:52 +0800</pubDate><description><![CDATA[循环依赖指的是两个或多个 Bean 之间相互依赖，形成了一个闭环。例如：]]></description><category></category></item><item><title><![CDATA[带着问题看源码系列之mybatis:mybatis Interceptor 源码解析]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/100058702</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/100058702</guid><author>HLhakey</author><pubDate>Sat, 24 Aug 2019 23:38:59 +0800</pubDate><description><![CDATA[Interceptor 接口声明  , 有三个方法
Objectintercept(Invocation invocation)throws Throwable;

Objectplugin(Object target);

void setProperties(Properties properties);

问题一: 我们的 Interceptor 是何时被注册到 ibatis 的, 注册到哪...]]></description><category></category></item><item><title><![CDATA[Spring 事务管理 @Transactional 注解 , TransactionInterceptor 原理深度剖析]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/84062671</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/84062671</guid><author>HLhakey</author><pubDate>Fri, 16 Nov 2018 15:09:08 +0800</pubDate><description><![CDATA[一、 @Transactional 注解解析
方法入口:SpringTransactionAnnotationParser#parseTransactionAnnotation(java.lang.reflect.AnnotatedElement)

下面看 parseTransactionAnnotation方法做了什么 :


parseTransactionAnnotation 方法的作用是...]]></description><category></category></item><item><title><![CDATA[架构学习笔记--缓存-缓存穿透:缓存雪崩:缓存热点]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/81176708</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/81176708</guid><author>HLhakey</author><pubDate>Mon, 23 Jul 2018 23:46:55 +0800</pubDate><description><![CDATA[什么是缓存穿透

缓存没有生效，大量请求访问某一个key的数据 , 实际缓存中并不存在该key的缓存 , 然后都转而降级查询DB 去了，最终的结果是DB查询压力增大。


  关键词：缓存未生效，导致DB压力骤增


可能的发生场景


某一个很偏僻的数据, 因为程序bug或者某种重试机制 , 或者某一活动突然请求查询该数据 , 使用了这种接口；
操作有误 ，活动前提是需要先做一个操作产生数据然后...]]></description><category></category></item><item><title><![CDATA[(转)JMX之介绍和简单使用(一)]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/80908241</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/80908241</guid><author>HLhakey</author><pubDate>Wed, 04 Jul 2018 10:14:00 +0800</pubDate><description><![CDATA[在InfoQ上有专门一系列文章来介绍监控系统的构建，聊聊监控（一）：什么值得监控以及监控指标的取舍，如果想深入了解可以看一下。



JMX的简介

所谓JMX，是Java Management Extensions的缩写，从官方的文档上来看，他就是一个框架，和JPA、JMS是一样的，和我们平时使用的Spring、Hibernate也没有什么区别。就是通过将监控和管理涉及到的各个方面的问题和解决办...]]></description><category></category></item><item><title><![CDATA[chrome ,fireFox,IE 屏蔽默认F1 帮助功能,执行自定义操作]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/80520815</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/80520815</guid><author>HLhakey</author><pubDate>Thu, 31 May 2018 10:50:32 +0800</pubDate><description><![CDATA[/*IE*/
window.onhelp = function () { return false }; 
    document.onkeydown=function (event) {
        var key=event.keyCode;
        if(key==112) {
            event.preventDefault();
            al...]]></description><category></category></item><item><title><![CDATA[Lodop常用属性和方法字典(转)]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/79449331</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/79449331</guid><author>HLhakey</author><pubDate>Mon, 05 Mar 2018 18:27:17 +0800</pubDate><description><![CDATA[只是保存 , 方便查询 ,原创地址,点击这里 
例子： 
LODOP.PRINT_INIT(“打印任务名”); 
LODOP.SET_PRINT_COPIES(2); 
bdhtml=window.document.body.innerHTML; 
var hei = $(‘#div1’).outerHeight(); 
string = prnhtml; 
LODOP.SET_PRINT_PAG...]]></description><category></category></item><item><title><![CDATA[log4j2.xml 配置]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/78837984</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/78837984</guid><author>HLhakey</author><pubDate>Mon, 18 Dec 2017 22:48:27 +0800</pubDate><description><![CDATA[1. 关于配置文件的名称以及在项目中的存放位置log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式，2.x版本配置文件后缀名只能为”.xml”,”.json”或者”.jsn”. 
　　　系统选择配置文件的优先级(从先到后)如下：　　　　(1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.　　　　(2).class]]></description><category></category></item><item><title><![CDATA[ReentrantLock可重入锁的原理及使用场景]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/78822808</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/78822808</guid><author>HLhakey</author><pubDate>Sat, 16 Dec 2017 22:59:20 +0800</pubDate><description><![CDATA[摘要从使用场景的角度出发来介绍对ReentrantLock的使用，相对来说容易理解一些。场景1：如果已加锁，则不再重复加锁a、忽略重复加锁。 
b、用在界面交互时点击执行较长时间请求操作时，防止多次点击导致后台重复执行（忽略重复触发）。以上两种情况多用于进行非重要任务防止重复执行，（如：清除无用临时文件，检查某些资源的可用性，数据备份操作等）if (lock.tryLock()) {  //如果已经]]></description><category></category></item><item><title><![CDATA[使用Lamdba 表达式 从A集合中去除不存在于B集合的元素加入到C集合中（快速找出两个集合中不同的元素）]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/78081201</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/78081201</guid><author>HLhakey</author><pubDate>Mon, 25 Sep 2017 00:19:52 +0800</pubDate><description><![CDATA[业务场景介绍前台通过导入excell批量对商品的等级进行调整（良品，残品）。
  A列表，成功列表（初始化要导入的数据均为默认成功） 
  B列表，通过A列表中的sku批量查询库存的查询结果列表 
  C列表，失败列表，不满足条件的元素会被加入到此列表中（C列表的数据来源于A列表）后端需要通过使用前端导入的excel的其他商品信息查询此sku（批量查询—>B列表） ，如果后端无此sku，则将此exc]]></description><category></category></item><item><title><![CDATA[MySQL 百万级分页优化(Mysql千万级快速分页)]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/77870899</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/77870899</guid><author>HLhakey</author><pubDate>Wed, 06 Sep 2017 20:14:47 +0800</pubDate><description><![CDATA[以下分享一点我的经验 一般刚开始学SQL的时候，会这样写SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但在数据达到百万级的时候，这样写会慢死 SELECT * FROM table ORDER BY id LIMIT 1000000, 10; 也许耗费几十秒 网上很多优化的方法是这样的 SELECT * FROM table WHERE id >=]]></description><category></category></item><item><title><![CDATA[使用frame 进行文件下载 ; ajax 服务端返回下载链接进行文件下载]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/77870580</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/77870580</guid><author>HLhakey</author><pubDate>Wed, 06 Sep 2017 19:48:59 +0800</pubDate><description><![CDATA[页面代码:<iframe id="downloadFile" src=""></iframe>js代码: $("#export").on('click',function(){        var downloadFile= $("#downloadFile");
        $.ajax({
            type: "post",
            url:  "http:]]></description><category></category></item><item><title><![CDATA[AspectJ(Spring切面)的Execution表达式]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/77651226</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/77651226</guid><author>HLhakey</author><pubDate>Mon, 28 Aug 2017 17:25:05 +0800</pubDate><description><![CDATA[Aspectj切入点语法定义在使用spring框架配置AOP的时候，不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点"例如定义切入点表达式  execution (* com.sample.service.impl..*.*(..))execution()是最常用的切点函数，其语法如下所示： 整个表达式可以分为五个部分： . execution(): 表达式主体。 . 第一个]]></description><category></category></item><item><title><![CDATA[Java-多个多线程求和例子以及各种方式的执行效率对比]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/77453556</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/77453556</guid><author>HLhakey</author><pubDate>Mon, 21 Aug 2017 18:03:11 +0800</pubDate><description><![CDATA[一、使用Synchronized 同步代码块 ;package thread.worker;import org.junit.Test;import java.util.concurrent.atomic.AtomicInteger;/**
 * Created by hl on 2017/8/17.
 */
public class CountWorker {
    private int un]]></description><category></category></item><item><title><![CDATA[Spring-Service-事务中线程异常执行事务回滚的方式]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/77170426</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/77170426</guid><author>HLhakey</author><pubDate>Tue, 15 Aug 2017 14:48:09 +0800</pubDate><description><![CDATA[方式一: 使用Callable, 利用Callable的返回值判断是否需要进行事务回滚    ExecutorService service = Executors.newCachedThreadPool();
    Future<Integer> submit = service.submit(new Callable<Integer>() {
        @Override]]></description><category></category></item><item><title><![CDATA[SpringMvc之HandlerExceptionResolver]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/77103280</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/77103280</guid><author>HLhakey</author><pubDate>Mon, 14 Aug 2017 21:28:50 +0800</pubDate><description><![CDATA[故事先从SpringMvc的dispatcherServlert开始1.执行onRefresh时调用initStrategiesprotected void onRefresh(ApplicationContext context) {
        this.initStrategies(context);
    }2.执行initStrategies protected void initS]]></description><category></category></item><item><title><![CDATA[mysql 设计优化及性能调优]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/74906660</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/74906660</guid><author>HLhakey</author><pubDate>Sun, 09 Jul 2017 22:23:08 +0800</pubDate><description><![CDATA[每个字段都有默认值，not null
尽量使用int]]></description><category></category></item><item><title><![CDATA[Java-死磕算法-排序-冒泡排序]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/72941429</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/72941429</guid><author>HLhakey</author><pubDate>Thu, 08 Jun 2017 23:02:09 +0800</pubDate><description><![CDATA[冒泡排序的思想是比较相邻的两个元素，将大的数据置换到右边，一直换到不能再换为止。public void sort(int [] a){ 
        int temp=0; 
        for(int i = a.length-1; i>0 ; –i){ 
              for(int j = 0 ; j]]></description><category></category></item><item><title><![CDATA[redis:Unable to validate object ;Could not get a resource from the pool;(error) MISCONF Redis is con]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/72780556</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/72780556</guid><author>HLhakey</author><pubDate>Sat, 27 May 2017 13:09:11 +0800</pubDate><description><![CDATA[原因: 
强制关闭Redis快照导致不能持久化。解决方式: 
登录redis :redis-cli 
127.0.0.1:6379>config set stop-writes-on-bgsave-error no 
ok解决 !参考文章:http://www.cnblogs.com/softidea/archive/2016/08/09/5754550.htmlhttp://www.cnblogs]]></description><category></category></item><item><title><![CDATA[BootStrap的validate表单验证使用]]></title><link>https://blog.youkuaiyun.com/HLhakey/article/details/69053853</link><guid>https://blog.youkuaiyun.com/HLhakey/article/details/69053853</guid><author>HLhakey</author><pubDate>Mon, 03 Apr 2017 23:24:30 +0800</pubDate><description><![CDATA[第一步: 引入js<%
    String contextPath = request.getContextPath();
%>
<script src="<%=contextPath%>/static/js/bootstrap/bootstrapValidator.js"></script>第二步: 页面中使用<script type="text/javascript" language="Ja]]></description><category></category></item></channel></rss>