<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[womeiyouzaihuashui的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/foxException</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; foxException]]></copyright><item><title><![CDATA[IDEA Plugin插件开发相关踩坑]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/134263436</link><guid>https://blog.youkuaiyun.com/foxException/article/details/134263436</guid><author>foxException</author><pubDate>Tue, 07 Nov 2023 11:31:08 +0800</pubDate><description><![CDATA[最近在研究IDEA插件开发，踩了不少坑，特意在这里记录一下……]]></description><category></category></item><item><title><![CDATA[我惊了：你居然认为ReentrantLock是轻量级锁？]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/123546097</link><guid>https://blog.youkuaiyun.com/foxException/article/details/123546097</guid><author>foxException</author><pubDate>Sat, 19 Mar 2022 10:36:15 +0800</pubDate><description><![CDATA[目录前言
前言
前几天面试了好几位小伙伴，在问到关于锁这一块的知识点时，大部分人都会有意无意的提到一个点：ReentrantLock是轻量级锁，相比于synchronized实现更加简单。
对于这样的说法，我通常会继续追问以下几个问题：

你是从什么角度来判断


......]]></description><category></category></item><item><title><![CDATA[被面试官问懵了，ThreadLocal的key为什么设置成弱引用？]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/123496254</link><guid>https://blog.youkuaiyun.com/foxException/article/details/123496254</guid><author>foxException</author><pubDate>Tue, 15 Mar 2022 11:01:14 +0800</pubDate><description><![CDATA[目录前言面试连环炮key为什么要设置成弱引用？value为什么不设置成弱引用
前言
想起来去年九月夜郎自大，面过一次蚂蚁金服，一面面试官上来一串ThreadLocal的连环炮直接把我干懵了……虽然现在回想起来问得都挺简单，不过还是来做一发总结，希望看到这篇文章的小伙伴以后就不要栽坑里了。
面试连环炮
先来体验一下关于ThreadLocal的连环炮：

ThreadLocal是什么？项目中用到过吗？
ThreadLocal的结构是怎么样的？
使用ThreadLocal需要注意哪些问题？
为]]></description><category></category></item><item><title><![CDATA[想不到吧，Java创建线程的方式只有一种]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/123370366</link><guid>https://blog.youkuaiyun.com/foxException/article/details/123370366</guid><author>foxException</author><pubDate>Wed, 09 Mar 2022 10:47:18 +0800</pubDate><description><![CDATA[目录前言继承Thread方式实现Runnable接口实现callable接口总结
前言
看到这个标题的小伙伴先别着急喷我……在面试的时候，我们经常会被问到这种基础题：Java创建线程的方式有几种？
比较正常的答法当然是三种：

继承Thread
实现Runnable接口
实现callable接口

一般来说这种属于送分题，不过大家都是这样答的，好像有点一般般，有没有什么答法能够让面试官眼前一亮呢？
当然有！
事实上，这个问题可以从两个角度去思考：

Java层次
操作系统层次

大部分人的回答都是从Java]]></description><category></category></item><item><title><![CDATA[Java从BIO到NIO的演进过程]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/122478404</link><guid>https://blog.youkuaiyun.com/foxException/article/details/122478404</guid><author>foxException</author><pubDate>Fri, 14 Jan 2022 15:00:06 +0800</pubDate><description><![CDATA[前言
关于Java的IO这一块，说实话一直是让人又爱又恨的存在。大部分程序员实际工作中很少会接触文件操作相关的，即使用到了，百度随便找个工具类，能解决问题就完事。
然而你真正打算去学习IO流的时候，网上的文章上来就是一张这种图片，虽说总结得很好，但直接让人失去了看下去的欲望。

那么

...]]></description><category></category></item><item><title><![CDATA[关于while与println的现象，你还在认为是println方法有synchronized修饰吗？]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/120159241</link><guid>https://blog.youkuaiyun.com/foxException/article/details/120159241</guid><author>foxException</author><pubDate>Sat, 25 Dec 2021 17:18:31 +0800</pubDate><description><![CDATA[大家好，今天闲聊一下以前困扰过我的一个问题：
这段代码的运行结果是啥？
public static Integer integer = 0;

public static void main(String[] args) throws Exception {
    new Thread(() -&gt; {
        while (integer == 0){
        }
        System.out.println("end");
    }).start();
    Threa]]></description><category></category></item><item><title><![CDATA[面试逃不过的HashMap哈希原理，这一次一定要弄懂]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/119849081</link><guid>https://blog.youkuaiyun.com/foxException/article/details/119849081</guid><author>foxException</author><pubDate>Sun, 22 Aug 2021 11:23:28 +0800</pubDate><description><![CDATA[目录1. 前言2. 哈希算法的目标2.1 如何保证效率？2.2 怎么减少哈希冲突？2.3 怎么进行扰动？2.4 新的算法效果如何？3. 结尾
1. 前言
HashMap绝对是JDK源码中比较精髓的存在，除此之外还有AQS，线程池等等。但是由于HashMap是我们接触最早也是接触最多的，所以面试八股文中绝对少不了它的存在。
想要学习一门技术能够大概了解它的原理其实已经差不多了，但是面试官往往会刨根问底，追问你put流程，resize过程，为什么负载因子是0.75之类的……
其实这些都还好，最让人头疼的是哈希算]]></description><category></category></item><item><title><![CDATA[为什么有MESI了还要volatile？你真的了解volatile吗]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/119774421</link><guid>https://blog.youkuaiyun.com/foxException/article/details/119774421</guid><author>foxException</author><pubDate>Fri, 20 Aug 2021 20:43:50 +0800</pubDate><description><![CDATA[目录前言二级目录三级目录
前言
我们先假设这样一个场景：
面试官：“小伙子，看你简历写了精通多线程，能说下什么是JMM吗？”
你：“JMM就是Java内存模型，这个呢要先从CPU缓存架构说起巴拉巴拉……所以JMM就是为了屏蔽操作系统这些底层细节，为了能够做到一次编译到处运行而实现的一套抽象机制。”
面试官：“不错，那volatile知道吗？说下它的原理呗。”
你：“前面说了CPU缓存，在多核的情况下为了保证缓存一致性，CPU引入了MESI缓存一致性协议，”
二级目录
三级目录

...]]></description><category></category></item><item><title><![CDATA[深入研究下mybatis的连接池机制]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/118221172</link><guid>https://blog.youkuaiyun.com/foxException/article/details/118221172</guid><author>foxException</author><pubDate>Sat, 26 Jun 2021 15:27:03 +0800</pubDate><description><![CDATA[目录1、前言2、mybatis获取连接2.1 mybatis连接池设计2.2 mybatis获取连接流程三级目录
1、前言
之所以研究这个问题，是因为在一次开发中手动开启事务后没有调用close()方法导致数据库连接池耗尽的情况：

此前从来没关注过mybatis和数据库连接池之间的关系，正好借此机会从源码的角度来看看mybatis是怎么处理连接的。（虽然上面报错是来自druid的哈哈哈……）
2、mybatis获取连接
很多人会有这样的疑问：

mybatis的连接池是启动时就初始化指定数量的连接吗？
m]]></description><category></category></item><item><title><![CDATA[layui解决table表格某项内容过长导致挤开变形问题]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/115967761</link><guid>https://blog.youkuaiyun.com/foxException/article/details/115967761</guid><author>foxException</author><pubDate>Wed, 21 Apr 2021 17:55:28 +0800</pubDate><description><![CDATA[在用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})+'"]]></description><category></category></item><item><title><![CDATA[记一次频繁YoungGC生产问题排查思路及解决方案]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/115748460</link><guid>https://blog.youkuaiyun.com/foxException/article/details/115748460</guid><author>foxException</author><pubDate>Fri, 16 Apr 2021 10:18:28 +0800</pubDate><description><![CDATA[1、问题背景
系统开发了新功能上线，本来上完之后功能验收正常，就在大家都松了一口气安心听技术分享时，晚上6.56分突然收到了系统告警：

YoungGC时间过长，说实话一开始看到这个告警心里是毫无波澜的，一是因为一次YoungGC时间过长影响不大，二是因为这是内部系统，虽然处理的数据量比较大，但是YoungGC不会影响功能正常运行。
当时心里的第一想法是：应该是刚启动导致系统有些不平稳，过一会儿就好了。
然而过了几分后，第二台主机也开始告警，意识到问题严重性的我赶紧跑上来排查问题。

2、GC日志分析
首先]]></description><category></category></item><item><title><![CDATA[win10与linux以太坊客户端Geth私链搭建教程]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/115464776</link><guid>https://blog.youkuaiyun.com/foxException/article/details/115464776</guid><author>foxException</author><pubDate>Tue, 06 Apr 2021 18:45:14 +0800</pubDate><description><![CDATA[本来去年就应该写这个教程记录一下的，然而以为自己以后不会用到，所以偷懒没写……被打脸之后重新记录一波，如何在win10以及linux上面搭建一个以太坊的私链
1、win10搭建教程
首先保证你的电脑系统是win10，然后第一步，去官网下载Geth，我这里选的版本是1.9.12
下载地址：https://geth.ethereum.org/downloads/

下载好了之后，双击安装，然后打开安装目录，你会发现Geth.exe安静的在里面躺着：


...]]></description><category></category></item><item><title><![CDATA[No module named ‘torch‘ 解决方案（某git项目跑不起来）]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/114019544</link><guid>https://blog.youkuaiyun.com/foxException/article/details/114019544</guid><author>foxException</author><pubDate>Wed, 24 Feb 2021 13:58:01 +0800</pubDate><description><![CDATA[先提前说明一下，该解决方案仅针对git上面某个项目情况：

下载下来安装好python环境之后，会卡在这个地方：

于是不决肯定是先百度，然而百度的结果有点感人，要你安装这个安装那个balabala，实际上根本不用这么麻烦！
首先第一步，保证你的python是64位的，32位的有坑无论如何都安装不了（反正我是没安装好，果断卸载重装）

然后第二步，不要管’torch’，直接安装后面那个torchvision
pip install torchvision --user

然后你会惊奇的发现，它帮你把torc]]></description><category></category></item><item><title><![CDATA[关于springboot配置https以及端口占用问题]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/113880358</link><guid>https://blog.youkuaiyun.com/foxException/article/details/113880358</guid><author>foxException</author><pubDate>Sat, 20 Feb 2021 12:30:00 +0800</pubDate><description><![CDATA[有时候我们希望在自己本地的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]]></description><category></category></item><item><title><![CDATA[java操作selenium切换标签页]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/113817553</link><guid>https://blog.youkuaiyun.com/foxException/article/details/113817553</guid><author>foxException</author><pubDate>Mon, 15 Feb 2021 17:20:48 +0800</pubDate><description><![CDATA[有时候我们需要使用Selenium来打开并切换标签页，但是Selenium似乎没有直接为我们提供API。
如果直接调用多次如下语句的话，只会多次刷新，并没有打开新的标签页
driver.get("http://www.baidu.com");

通过如下代码，就能实现切换标签页操作了：
ChromeDriver driver = new ChromeDriver(options);
// 先执行js语句打开一个新的标签页
driver.executeScript("window.open('')");
//]]></description><category></category></item><item><title><![CDATA[Java使用Selenium操作chrome进行debug]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/113817166</link><guid>https://blog.youkuaiyun.com/foxException/article/details/113817166</guid><author>foxException</author><pubDate>Mon, 15 Feb 2021 17:01:40 +0800</pubDate><description><![CDATA[想要爬取数据，验证码是必须要过的一关，而如今绝大部分验证码都鬼精鬼精的，想要破解起来比较麻烦。
虽然Selenium这个自动化测试工具可以帮我们模拟用户行为，但是Selenium自带的一些标签可以让网站轻轻松松就识别出你是爬虫，直接把你干掉，那么该怎么绕过这一关呢？
我们可以使用Chrome的debug模式：
1、打开Chrome
String path = "你的Chrome路径";
String dir = "存储用户数据的路径";
List&lt;String&gt; cmd = new ArrayL]]></description><category></category></item><item><title><![CDATA[pagehelper分页失效解决方案]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/113344170</link><guid>https://blog.youkuaiyun.com/foxException/article/details/113344170</guid><author>foxException</author><pubDate>Thu, 28 Jan 2021 15:49:05 +0800</pubDate><description><![CDATA[emmm讲道理，在进行查询之前，调用如下方法
PageHelper.startPage(pageNo, pageSize);
// 查询方法
doQuery();

分页插件就会自动给你做好分页工作，无论你是MYSQL还是ORACLE
但是今天用的时候死活不给我分页，宛如智障……
查看了一些博客说是版本问题，看了下也不是，后来无意间发现，是自己的参数有问题：
{
    "pageNum": 0,
    "pageSize": 2
}

pageNum和pageSize，无论哪个参数为0，都会导致分页失效]]></description><category></category></item><item><title><![CDATA[聊聊Redis中写时复制技术（COW）的应用]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/113268279</link><guid>https://blog.youkuaiyun.com/foxException/article/details/113268279</guid><author>foxException</author><pubDate>Wed, 27 Jan 2021 20:20:40 +0800</pubDate><description><![CDATA[聊聊Redis中写时同步技术（COW）的应用疑问RDB流程及结论fork()与exec()函数Redis与COW
疑问
在看《Redis设计与实现》时，提到哈希表rehash时如果在进行BGSAVE或者BGWRITEAOF操作时，因为写时复制（CopyOnWrite）技术的优化，会暂时提高负载因子为5。
但是我的疑问并不是这个，而是在进行RDB操作时，假如数据量特别大，那么RDB操作岂不是会耗费大量的IO资源？
RDB流程及结论
带着疑问我翻看了一些博客和资料，首先我们来了解一些RDB的流程：

当redi]]></description><category></category></item><item><title><![CDATA[手把手教你从零搭建一个zookeeper伪集群]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/111885704</link><guid>https://blog.youkuaiyun.com/foxException/article/details/111885704</guid><author>foxException</author><pubDate>Tue, 29 Dec 2020 14:48:36 +0800</pubDate><description><![CDATA[目录前言前期准备创建data目录三级目录
前言
这段时间在学习zookeeper相关的知识，本来想一个一个知识点全部整理出来的，但是水太深人太笨，只好等以后变秃了再写深入一点的文章。
本文的目的在于用最简洁的篇幅在最短的时间内带大家搭建一个三节点的zookeeper伪集群
前期准备
创建data目录
因为是
三级目录

...]]></description><category></category></item><item><title><![CDATA[利用设计模式优雅地消除业务代码中大量的if/else和重复逻辑]]></title><link>https://blog.youkuaiyun.com/foxException/article/details/111056974</link><guid>https://blog.youkuaiyun.com/foxException/article/details/111056974</guid><author>foxException</author><pubDate>Sun, 13 Dec 2020 00:07:52 +0800</pubDate><description><![CDATA[目录前言业务场景解决方案1解决方案2
前言
if…else…绝对是我们日常编码中用到最多的，但是过多的使用，会导致我们代码可读性极差，并且一点也不美观。
但是在一些场景下，我们可以使用设计模式来进行优化，让你的业务代码不仅优雅简洁，而且可扩展性极强。
业务场景
我们先来说一个业务场景：假如你在对接三方支付，这时候可能有支付宝、微信、银联三个产品需要对接，你需要根据用户选择交易类型来使用具体的三方平台。
解决方案1
大多数人的想法可能会很直接：
if("微信".equals(type)){

// 执行微信相]]></description><category></category></item></channel></rss>