自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 IDEA Plugin插件开发相关踩坑

最近在研究IDEA插件开发,踩了不少坑,特意在这里记录一下……

2023-11-07 11:31:08 1529

原创 我惊了:你居然认为ReentrantLock是轻量级锁?

目录前言前言前几天面试了好几位小伙伴,在问到关于锁这一块的知识点时,大部分人都会有意无意的提到一个点:ReentrantLock是轻量级锁,相比于synchronized实现更加简单。对于这样的说法,我通常会继续追问以下几个问题:你是从什么角度来判断......

2022-03-19 10:36:15 4044 4

原创 被面试官问懵了,ThreadLocal的key为什么设置成弱引用?

目录前言面试连环炮key为什么要设置成弱引用?value为什么不设置成弱引用前言想起来去年九月夜郎自大,面过一次蚂蚁金服,一面面试官上来一串ThreadLocal的连环炮直接把我干懵了……虽然现在回想起来问得都挺简单,不过还是来做一发总结,希望看到这篇文章的小伙伴以后就不要栽坑里了。面试连环炮先来体验一下关于ThreadLocal的连环炮:ThreadLocal是什么?项目中用到过吗?ThreadLocal的结构是怎么样的?使用ThreadLocal需要注意哪些问题?为

2022-03-15 11:01:14 12066 14

原创 想不到吧,Java创建线程的方式只有一种

目录前言继承Thread方式实现Runnable接口实现callable接口总结前言看到这个标题的小伙伴先别着急喷我……在面试的时候,我们经常会被问到这种基础题:Java创建线程的方式有几种?比较正常的答法当然是三种:继承Thread实现Runnable接口实现callable接口一般来说这种属于送分题,不过大家都是这样答的,好像有点一般般,有没有什么答法能够让面试官眼前一亮呢?当然有!事实上,这个问题可以从两个角度去思考:Java层次操作系统层次大部分人的回答都是从Java

2022-03-09 10:47:18 4863

原创 Java从BIO到NIO的演进过程

前言关于Java的IO这一块,说实话一直是让人又爱又恨的存在。大部分程序员实际工作中很少会接触文件操作相关的,即使用到了,百度随便找个工具类,能解决问题就完事。然而你真正打算去学习IO流的时候,网上的文章上来就是一张这种图片,虽说总结得很好,但直接让人失去了看下去的欲望。那么...

2022-01-14 15:00:06 2541

原创 关于while与println的现象,你还在认为是println方法有synchronized修饰吗?

大家好,今天闲聊一下以前困扰过我的一个问题:这段代码的运行结果是啥?public static Integer integer = 0;public static void main(String[] args) throws Exception { new Thread(() -> { while (integer == 0){ } System.out.println("end"); }).start(); Threa

2021-12-25 17:18:31 2880

原创 面试逃不过的HashMap哈希原理,这一次一定要弄懂

目录1. 前言2. 哈希算法的目标2.1 如何保证效率?2.2 怎么减少哈希冲突?2.3 怎么进行扰动?2.4 新的算法效果如何?3. 结尾1. 前言HashMap绝对是JDK源码中比较精髓的存在,除此之外还有AQS,线程池等等。但是由于HashMap是我们接触最早也是接触最多的,所以面试八股文中绝对少不了它的存在。想要学习一门技术能够大概了解它的原理其实已经差不多了,但是面试官往往会刨根问底,追问你put流程,resize过程,为什么负载因子是0.75之类的……其实这些都还好,最让人头疼的是哈希算

2021-08-22 11:23:28 2571 1

原创 为什么有MESI了还要volatile?你真的了解volatile吗

目录前言二级目录三级目录前言我们先假设这样一个场景:面试官:“小伙子,看你简历写了精通多线程,能说下什么是JMM吗?”你:“JMM就是Java内存模型,这个呢要先从CPU缓存架构说起巴拉巴拉……所以JMM就是为了屏蔽操作系统这些底层细节,为了能够做到一次编译到处运行而实现的一套抽象机制。”面试官:“不错,那volatile知道吗?说下它的原理呗。”你:“前面说了CPU缓存,在多核的情况下为了保证缓存一致性,CPU引入了MESI缓存一致性协议,”二级目录三级目录...

2021-08-20 20:43:50 4173 8

原创 深入研究下mybatis的连接池机制

目录1、前言2、mybatis获取连接2.1 mybatis连接池设计2.2 mybatis获取连接流程三级目录1、前言之所以研究这个问题,是因为在一次开发中手动开启事务后没有调用close()方法导致数据库连接池耗尽的情况:此前从来没关注过mybatis和数据库连接池之间的关系,正好借此机会从源码的角度来看看mybatis是怎么处理连接的。(虽然上面报错是来自druid的哈哈哈……)2、mybatis获取连接很多人会有这样的疑问:mybatis的连接池是启动时就初始化指定数量的连接吗?m

2021-06-26 15:27:03 5401 1

原创 layui解决table表格某项内容过长导致挤开变形问题

在用layui的table模块时,会出现这种问题:某一行的一个配置内容过长的时候,整个表格就会被挤压变形,变得很难看,解决方案是:V2.6.0版本之前,找到table.js文件,搜索‘data-content’,把这段内容替换掉V2.6.0版本及之后,没得模块的概念了, 直接去layui.js改就完事替换前:e.push('data-content="'+m+'"')替换后:e.push('data-content="'+i("{{=d.t }}").render({t:m})+'"

2021-04-21 17:55:28 4510

原创 记一次频繁YoungGC生产问题排查思路及解决方案

1、问题背景系统开发了新功能上线,本来上完之后功能验收正常,就在大家都松了一口气安心听技术分享时,晚上6.56分突然收到了系统告警:YoungGC时间过长,说实话一开始看到这个告警心里是毫无波澜的,一是因为一次YoungGC时间过长影响不大,二是因为这是内部系统,虽然处理的数据量比较大,但是YoungGC不会影响功能正常运行。当时心里的第一想法是:应该是刚启动导致系统有些不平稳,过一会儿就好了。然而过了几分后,第二台主机也开始告警,意识到问题严重性的我赶紧跑上来排查问题。2、GC日志分析首先

2021-04-16 10:18:28 6395 2

原创 win10与linux以太坊客户端Geth私链搭建教程

本来去年就应该写这个教程记录一下的,然而以为自己以后不会用到,所以偷懒没写……被打脸之后重新记录一波,如何在win10以及linux上面搭建一个以太坊的私链1、win10搭建教程首先保证你的电脑系统是win10,然后第一步,去官网下载Geth,我这里选的版本是1.9.12下载地址:https://geth.ethereum.org/downloads/下载好了之后,双击安装,然后打开安装目录,你会发现Geth.exe安静的在里面躺着:...

2021-04-06 18:45:14 2882 1

原创 No module named ‘torch‘ 解决方案(某git项目跑不起来)

先提前说明一下,该解决方案仅针对git上面某个项目情况:下载下来安装好python环境之后,会卡在这个地方:于是不决肯定是先百度,然而百度的结果有点感人,要你安装这个安装那个balabala,实际上根本不用这么麻烦!首先第一步,保证你的python是64位的,32位的有坑无论如何都安装不了(反正我是没安装好,果断卸载重装)然后第二步,不要管’torch’,直接安装后面那个torchvisionpip install torchvision --user然后你会惊奇的发现,它帮你把torc

2021-02-24 13:58:01 4176 1

原创 关于springboot配置https以及端口占用问题

有时候我们希望在自己本地的springboot上面配置https用作一些临时用途,本篇博客将教大家如何最简单的方式在几分钟内配置好https并使用:一:使用jdk自带的工具生成自签名证书keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore D:/keystore.p12 -validity 3650最后按Y执行完成之后会在你的D盘下生成一个keystore.p12文件二:修改spr

2021-02-20 12:30:00 3563 4

原创 java操作selenium切换标签页

有时候我们需要使用Selenium来打开并切换标签页,但是Selenium似乎没有直接为我们提供API。如果直接调用多次如下语句的话,只会多次刷新,并没有打开新的标签页driver.get("http://www.baidu.com");通过如下代码,就能实现切换标签页操作了:ChromeDriver driver = new ChromeDriver(options);// 先执行js语句打开一个新的标签页driver.executeScript("window.open('')");//

2021-02-15 17:20:48 3820 1

原创 Java使用Selenium操作chrome进行debug

想要爬取数据,验证码是必须要过的一关,而如今绝大部分验证码都鬼精鬼精的,想要破解起来比较麻烦。虽然Selenium这个自动化测试工具可以帮我们模拟用户行为,但是Selenium自带的一些标签可以让网站轻轻松松就识别出你是爬虫,直接把你干掉,那么该怎么绕过这一关呢?我们可以使用Chrome的debug模式:1、打开ChromeString path = "你的Chrome路径";String dir = "存储用户数据的路径";List<String> cmd = new ArrayL

2021-02-15 17:01:40 3246

原创 pagehelper分页失效解决方案

emmm讲道理,在进行查询之前,调用如下方法PageHelper.startPage(pageNo, pageSize);// 查询方法doQuery();分页插件就会自动给你做好分页工作,无论你是MYSQL还是ORACLE但是今天用的时候死活不给我分页,宛如智障……查看了一些博客说是版本问题,看了下也不是,后来无意间发现,是自己的参数有问题:{ "pageNum": 0, "pageSize": 2}pageNum和pageSize,无论哪个参数为0,都会导致分页失效

2021-01-28 15:49:05 2895

原创 聊聊Redis中写时复制技术(COW)的应用

聊聊Redis中写时同步技术(COW)的应用疑问RDB流程及结论fork()与exec()函数Redis与COW疑问在看《Redis设计与实现》时,提到哈希表rehash时如果在进行BGSAVE或者BGWRITEAOF操作时,因为写时复制(CopyOnWrite)技术的优化,会暂时提高负载因子为5。但是我的疑问并不是这个,而是在进行RDB操作时,假如数据量特别大,那么RDB操作岂不是会耗费大量的IO资源?RDB流程及结论带着疑问我翻看了一些博客和资料,首先我们来了解一些RDB的流程:当redi

2021-01-27 20:20:40 4624

原创 手把手教你从零搭建一个zookeeper伪集群

目录前言前期准备创建data目录三级目录前言这段时间在学习zookeeper相关的知识,本来想一个一个知识点全部整理出来的,但是水太深人太笨,只好等以后变秃了再写深入一点的文章。本文的目的在于用最简洁的篇幅在最短的时间内带大家搭建一个三节点的zookeeper伪集群前期准备创建data目录因为是三级目录...

2020-12-29 14:48:36 2447

原创 利用设计模式优雅地消除业务代码中大量的if/else和重复逻辑

目录前言业务场景解决方案1解决方案2前言if…else…绝对是我们日常编码中用到最多的,但是过多的使用,会导致我们代码可读性极差,并且一点也不美观。但是在一些场景下,我们可以使用设计模式来进行优化,让你的业务代码不仅优雅简洁,而且可扩展性极强。业务场景我们先来说一个业务场景:假如你在对接三方支付,这时候可能有支付宝、微信、银联三个产品需要对接,你需要根据用户选择交易类型来使用具体的三方平台。解决方案1大多数人的想法可能会很直接:if("微信".equals(type)){// 执行微信相

2020-12-13 00:07:52 3993

原创 优雅的解决Springboot:BindingException: Invalid bound statement (not found):异常

开门见山,我们先把bug贴齐全:接着来说说这个bug是什么意思:你的Mapper实例在找对应的Mapper.xml映射时没有找到于是自然而然的,我们把问题定位在了Mapper.xml没找到,在Springboot项目中,项目结构很简单,我们一般会进行如下配置:application.propertiesmybatis.mapper-locations=classpath:/priv/zhengfa/mapper/*.xmlApplication@SpringBootApplication

2020-11-05 16:53:10 15931 3

原创 从宏观上整体认知Mybatis

目录1、前言2、Mybatis的基本构成三级目录1、前言推荐想要深入学习Mybatis同学去阅读《深入浅出MyBatis技术原理与实战》本博文是对Mybatis的一个宏观解读,带你对Mybatis有个大概的了解。2、Mybatis的基本构成三级目录...

2020-11-03 17:21:50 134

原创 从源码的角度来解读spring整合mybatis

目录1、前言2、mybatis2.1 mybatis使用流程2.2 mybatis三个组件2.3 SqlSession3、spring整合mybatis3.1 SqlSessionFactoryBean3.3 SqlsessionTemplate3.3 MapperFactoryBean3.4 配置mapperScan1、前言spring整合mybatis几乎是每个Java开发学习过程中都会接触到的,相信很多人开始学习的时候都和博主一样,跟着视频或者博客把一大堆配置复制粘贴下来,然后运行发现没问题,于

2020-11-02 18:00:10 266 2

原创 SpringMVC组件与流程解析

目录1、前言2、SpringMVC解决了什么3、SpringMVC处理流程4、DispatcherServlet源码1、前言从技术角度去思考,任何一个现存的框架都有其存在理由,而这个理由就是解决实际的问题,或者提供更好的解决问题的方案。(此处预留一个滑稽)2、SpringMVC解决了什么相较于传统Servlet,SpringMVC为我们带来了以下功能:URL映射表单参数映射调用目标controller数据模型映射视图解析异常处理而SpringMVC之所以能够实现这些功能,则得益于它

2020-10-30 15:09:51 104

原创 SpringMVC中为什么要用装饰者模式来处理Handler

目录1、前言2、为什么要使用装饰者模式三级目录1、前言在SpringMVC的组件中,我们都知道有HandlerAdapter组件的存在,在我们的日常使用中并不会感知到它的存在,有些人也可能遇到过如下bug:No adapter for handler [xxx]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler今天我们就来聊聊,关于SpringMVC中

2020-10-29 16:09:42 277

原创 SpringMVC三个HandlerMapping实现类解读

目录1、前言2、HandlerMapping的实现类2.1 BeanNameUrlHandlerMapping2.2 SimpleUrlHandlerMapping2.3 RequestMappingHandlerMapping3、SpringMVC中的默认配置1、前言DispatchServlet需要通过url来找到对应的controller,而在SpringMVC中为我们完成这个工作的组件就是HandlerMapping。而我们常见的No mapping found for HTTP reques

2020-10-28 17:32:01 886 1

原创 Mybatis一级缓存与二级缓存原理及失效场景

目录前言二级目录三级目录前言mybatis也算得上是目前绝大部分程序员二级目录三级目录

2020-10-22 17:39:57 2332

原创 Spring事务隔离级别与MySQL设置的级别不一样怎么办

目录1、前言2、验证结论3、总结1、前言事务的四个隔离级别想必大家都已经清楚,但是在学习Spring的时候,我们发现Spring自己也有四个隔离级别(加上默认的是五个)。那么问题来了,当Spring设置的隔离级别和我们在数据库设置的隔离级别不一致时,哪个会生效?先抛出结论:Spring设置的隔离级别会生效2、验证结论要验证结论很简单,我们只需要在spring事务注解上面配置不同的隔离级别就行了:DAO层实现类的两个方法pay方法是模拟事务A先查询一次数据,然后休眠两秒再查询一次数据

2020-10-12 17:47:23 2083

原创 聊聊SPI机制以及为什么说SPI破坏了双亲委派模型

目录1、前言2、SPI的概念2.1 典型应用:JDBC2.2 SPI机制的通俗理解3、双亲委派模型3.1 双亲委派模型的好处4、为什么说SPI破坏了双亲委派模型4.1 可见性原则4.2 双亲委派模型的妥协5、结尾1、前言SPI?一开始接触这个概念大部分人都会很懵,SPI是啥?平时就听过API和SCP(狗头),老夫CRUD这么多年了, 还从来没有听说过Java有这么一个玩意。然而事实是,你虽然没有听过,但你几乎每天都在享受它给你带来的便利。今天我们就来聊聊这个传说中的SPI机制。2、SPI的概念S

2020-10-11 10:53:24 1930 1

原创 Java AQS unparkSuccessor 方法中for循环为什么是从tail开始而不是head

目录1、前言2、尾部遍历源码3、高并发下入队逻辑3.1 原子性问题3.2 图解流程4、结尾1、前言在AQS多线程竞争下的获取与释放流程中,我们提到过源码中唤醒节点的逻辑是从后尾部往前遍历找到最前的一个处于正常阻塞状态的结点为什么从尾到头遍历?直接从头到尾的遍历形式有什么问题吗?今天我们就来通过源码的形式来理解一下,为什么要这样做。2、尾部遍历源码首先上源码:private void unparkSuccessor(Node node) { //获取wait状态 int ws =

2020-10-04 12:00:41 4214 26

原创 nginx反向代理导致后端session失效解决方案

系统在测试环境中发现前端登录成功之后会立即弹出,浏览器检查请求之后发现登录成功之后由于在进入首页的其它请求中没有cookie导致依然被拦截判定没有登陆。怀疑是nginx转发过程中导致session丢失,查看nginx配置:location /api/ { proxy_pass http://172.26.31.2:8080/; error_log /var/log/nginx/logs/api_error.log infoi; index index.h

2020-09-28 14:09:13 2481

原创 吃透Java并发:AQS结构详解及其CLH变种、CLH、MCS

目录1、前言2、AQS的构成2.1 状态信息state2.2 节点信息Node1、前言俗话说得好,学会AQS就学会了JUC,而看懂了CLH,就看懂了AQS。今天我们就来了解一下,这个传说中的AQS以及它的CLH队列是怎么工作的。(强烈建议英语好的同学直接看AQS的注释!!)2、AQS的构成抽象队列同步器(即AQS),通过一系列模板办法为我们实现JUC下各种各样的工具锁提供了基础,通过继承它,我们可以很轻松的实现一把自己的锁。假如是让我们来实现锁的逻辑,结合synchronized的实现原理,我们

2020-09-27 17:23:48 929 2

原创 吃透Java并发:一文看懂锁升级流程

目录前言1、轻量级锁前言在对synchronized的轻量级锁、重量级锁介绍中其实已经对该流程有所讲解,不过不够明朗本章将通过图文并茂的形式,让大家真正了解,jdk1.6之后synchronized升级的完整流程1、轻量级锁...

2020-09-16 10:57:21 693

原创 Spring5源码精讲(一):5.0.x源码环境构建

目录前言作案工具源码下载开始构建前言自从spring5使用gradle构建之后,对于大部分maven党来说,搭建源码环境简直就是噩梦。网上的教程也有着各种各样的坑,因此在这里特意花时间整理了一下自己基于IDEA构建spring5源码环境,让广大群众能够不踩坑。作案工具构建源码环境之前先说明一下工具版本,尽量保持一致能够避免踩坑:gradle 4.9jdk1.8_211uIDEA 2020.1spring 5.0.x什么?你问我gradle怎么安装?自己去百度源码下载gayhub上面

2020-09-04 10:10:02 1774 1

原创 java集成ldap验证用户名和密码

目录前言连接LDAP查找信息校验用户名密码前言最近一个项目需要用到ldap验证,特此记录一下过程。基本上的API的调用,但是有几个问题点还是要说明一下。首先,先准备好四个属性:url= ldap://127.0.0.1:portbase= xxxusername= xxxpassword= xxx连接LDAPpublic static LdapContext connetldap() throws Exception { // 连接Ldap需要的信息 S

2020-08-25 10:23:38 1821 1

原创 深入浅出RocketMQ(五):延时消费源码分析:用户下单锁库存与超时释放

目录前言1、业务场景2、解决方案3、实现原理前言 今天我们来聊聊RocketMQ中的延时消费,主要在于了解RocketMQ是怎么帮我们实现延时消费以及模拟业务场景下如何使用延时消费实现功能。1、业务场景先从一个简单的业务场景入手,假如你在做电商模块的秒杀系统,不考虑风险控制数据统计这些逻辑,那么最简单的流程应该是锁定库存创建订单返回结果支付完成更新数据当用户请求进来时我们去查询一次商品库存是否满足需求,如果OK就修改当前商品库存随后创建好订单然后告知用户结果。至于高并

2020-08-21 09:53:14 1131 4

原创 深入浅出RocketMQ(四):广播、集群、拉取、推送、顺序消费

目录前言前言 本章将结合上一章出现的一些概念以及RocketMQ的API对一些实际demo进行分析,加深上一章的理解。

2020-08-19 09:48:22 1150 1

原创 深入浅出RocketMQ(三):架构及其基本概念

目录前言1、架构设计2、 NameServer3、 BrokerServer3.1 消费进度偏移3.2 主题(Topic)3.3 队列3.4 标签(Tag)4、 生产者(Producer)4.1 生产者组(Producer Group)5、消费者(Consumer)5.1 消费者组(Consumer Group)结尾前言    通过前面两篇文章的学习,我们学习了RocketMQ的搭建和以及如何使用,在本篇文章,我们将对一些概念进行了解并通过实例加深印象。1、

2020-08-16 10:57:55 250

原创 深入浅出RocketMQ(二):springboot上简单使用

目录springboot配置springboot配置

2020-08-14 11:09:34 303

原创 深入浅出RocketMQ(一):docker搭建

目录1 前言2 docker拉取镜像2.1 部署Server2.2 部署Broker2.3 部署Console2.4 查看docker容器3 打开对应端口4 访问控制台1 前言    一些概念和原理放到后面,本篇为纯教程,主要在于怎么在自己的服务器上使用docker搭建RocketMQ以及可能会出现的问题    不过基本概念还是要说一下,不然你可能会对一些名称感到莫名其妙NameServer:主要用作注册中心,用

2020-08-14 10:46:48 218

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除