![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 82
我没有在划水
365^1.01
展开
-
我惊了:你居然认为ReentrantLock是轻量级锁?
目录前言前言前几天面试了好几位小伙伴,在问到关于锁这一块的知识点时,大部分人都会有意无意的提到一个点:ReentrantLock是轻量级锁,相比于synchronized实现更加简单。对于这样的说法,我通常会继续追问以下几个问题:你是从什么角度来判断......原创 2022-03-19 10:36:15 · 4174 阅读 · 5 评论 -
被面试官问懵了,ThreadLocal的key为什么设置成弱引用?
目录前言面试连环炮key为什么要设置成弱引用?value为什么不设置成弱引用前言想起来去年九月夜郎自大,面过一次蚂蚁金服,一面面试官上来一串ThreadLocal的连环炮直接把我干懵了……虽然现在回想起来问得都挺简单,不过还是来做一发总结,希望看到这篇文章的小伙伴以后就不要栽坑里了。面试连环炮先来体验一下关于ThreadLocal的连环炮:ThreadLocal是什么?项目中用到过吗?ThreadLocal的结构是怎么样的?使用ThreadLocal需要注意哪些问题?为原创 2022-03-15 11:01:14 · 12669 阅读 · 16 评论 -
想不到吧,Java创建线程的方式只有一种
目录前言继承Thread方式实现Runnable接口实现callable接口总结前言看到这个标题的小伙伴先别着急喷我……在面试的时候,我们经常会被问到这种基础题:Java创建线程的方式有几种?比较正常的答法当然是三种:继承Thread实现Runnable接口实现callable接口一般来说这种属于送分题,不过大家都是这样答的,好像有点一般般,有没有什么答法能够让面试官眼前一亮呢?当然有!事实上,这个问题可以从两个角度去思考:Java层次操作系统层次大部分人的回答都是从Java原创 2022-03-09 10:47:18 · 4882 阅读 · 0 评论 -
Java从BIO到NIO的演进过程
前言关于Java的IO这一块,说实话一直是让人又爱又恨的存在。大部分程序员实际工作中很少会接触文件操作相关的,即使用到了,百度随便找个工具类,能解决问题就完事。然而你真正打算去学习IO流的时候,网上的文章上来就是一张这种图片,虽说总结得很好,但直接让人失去了看下去的欲望。那么...原创 2022-01-14 15:00:06 · 2560 阅读 · 0 评论 -
关于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 · 2892 阅读 · 0 评论 -
面试逃不过的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 · 2578 阅读 · 1 评论 -
为什么有MESI了还要volatile?你真的了解volatile吗
目录前言二级目录三级目录前言我们先假设这样一个场景:面试官:“小伙子,看你简历写了精通多线程,能说下什么是JMM吗?”你:“JMM就是Java内存模型,这个呢要先从CPU缓存架构说起巴拉巴拉……所以JMM就是为了屏蔽操作系统这些底层细节,为了能够做到一次编译到处运行而实现的一套抽象机制。”面试官:“不错,那volatile知道吗?说下它的原理呗。”你:“前面说了CPU缓存,在多核的情况下为了保证缓存一致性,CPU引入了MESI缓存一致性协议,”二级目录三级目录...原创 2021-08-20 20:43:50 · 4258 阅读 · 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 · 5794 阅读 · 1 评论 -
记一次频繁YoungGC生产问题排查思路及解决方案
1、问题背景系统开发了新功能上线,本来上完之后功能验收正常,就在大家都松了一口气安心听技术分享时,晚上6.56分突然收到了系统告警:YoungGC时间过长,说实话一开始看到这个告警心里是毫无波澜的,一是因为一次YoungGC时间过长影响不大,二是因为这是内部系统,虽然处理的数据量比较大,但是YoungGC不会影响功能正常运行。当时心里的第一想法是:应该是刚启动导致系统有些不平稳,过一会儿就好了。然而过了几分后,第二台主机也开始告警,意识到问题严重性的我赶紧跑上来排查问题。2、GC日志分析首先原创 2021-04-16 10:18:28 · 6815 阅读 · 2 评论 -
关于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 · 3626 阅读 · 4 评论 -
利用设计模式优雅地消除业务代码中大量的if/else和重复逻辑
目录前言业务场景解决方案1解决方案2前言if…else…绝对是我们日常编码中用到最多的,但是过多的使用,会导致我们代码可读性极差,并且一点也不美观。但是在一些场景下,我们可以使用设计模式来进行优化,让你的业务代码不仅优雅简洁,而且可扩展性极强。业务场景我们先来说一个业务场景:假如你在对接三方支付,这时候可能有支付宝、微信、银联三个产品需要对接,你需要根据用户选择交易类型来使用具体的三方平台。解决方案1大多数人的想法可能会很直接:if("微信".equals(type)){// 执行微信相原创 2020-12-13 00:07:52 · 4295 阅读 · 0 评论 -
聊聊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 · 2103 阅读 · 1 评论