<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[PHX_Z的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/PHX_Z</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; PHX_Z]]></copyright><item><title><![CDATA[Mockito实战避坑指南：嵌套依赖与when/doReturn的正确姿势]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/145788003</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/145788003</guid><author>PHX_Z</author><pubDate>Fri, 21 Feb 2025 23:52:38 +0800</pubDate><description><![CDATA[谨慎使用嵌套Mock，必要时通过实现部分模拟区分测试替身类型，@Spy对象必须使用doReturn规避副作用复杂场景建议配合Mockito的verify()进行行为验证。]]></description><category></category></item><item><title><![CDATA[图计算在风控领域的应用概述]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/144478489</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/144478489</guid><author>PHX_Z</author><pubDate>Sat, 14 Dec 2024 23:20:44 +0800</pubDate><description><![CDATA[图计算技术在风控领域的应用前景广阔，通过构建和分析复杂的关系网络，金融机构可以更有效地识别和防范各种风险。随着数据量的不断增长和计算能力的提升，图计算技术将在风控领域发挥越来越重要的作用。未来，结合人工智能和大数据技术，图计算将进一步提升风控系统的智能化和精准化水平，为金融机构的稳定与安全提供有力保障。本文将介绍图的基本概念、常见的图算法以及图在风控场景下的应用。在风控场景中，图计算技术通过分析复杂的关系网络，帮助金融机构识别和防范各种风险。图算法是图计算的核心，用于解决图中的各种问题。]]></description><category></category></item><item><title><![CDATA[MySQL | 浅谈范式、索引和事务]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/141003574</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/141003574</guid><author>PHX_Z</author><pubDate>Wed, 07 Aug 2024 23:40:06 +0800</pubDate><description><![CDATA[而二级索引的结构也是B+树，叶子节点包含键值和书签，书签指向的聚簇索引的键。记录数据的多个版本，保存数据的多个版本，事务在读取数据时读取快照版本，MySQL中使用MVCC解决了脏读以上的问题。一般数据库的设计，都会要求按照3范式来设计。使用选择性高的索引列，就是不重复的索引值比较高的列，即区分性高。这2种设计表中都是会使用到冗余数据，以减少对主表的访问次数，提高查询性能。，利用“空间换时间”的思想，提高数据查询性能和减少复杂的级联操作。不可重复读：同一个事务中，两次读取同一数据，但是获取到不同的数据。]]></description><category></category></item><item><title><![CDATA[Redis的设计与实现 | 数据结构、多线程和缓存]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/135183212</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/135183212</guid><author>PHX_Z</author><pubDate>Sun, 24 Dec 2023 19:01:53 +0800</pubDate><description><![CDATA[本系列[Redis的设计与实现]为网络课程的笔记整理, 如有疏漏和错误的地方, 欢迎留言更正!]]></description><category></category></item><item><title><![CDATA[如何备考蚂蚁链资格认证(ACCA)]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/132007211</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/132007211</guid><author>PHX_Z</author><pubDate>Tue, 01 Aug 2023 21:13:15 +0800</pubDate><description><![CDATA[介绍蚂蚁链资格认证(ACCA)的考试形式和如何准备]]></description><category></category></item><item><title><![CDATA[正则表达式笔记]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/117222306</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/117222306</guid><author>PHX_Z</author><pubDate>Mon, 24 May 2021 13:59:59 +0800</pubDate><description><![CDATA[public [^s]



匹配 public 不是static 的方法, 比如public Integer getInt(){}
]]></description><category></category></item><item><title><![CDATA[IDEA运行项目报错“XX包不存在“]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/115495375</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/115495375</guid><author>PHX_Z</author><pubDate>Wed, 07 Apr 2021 20:44:48 +0800</pubDate><description><![CDATA[现象
IDEA新建maven项目, 编译运行提示"XX包不存在", 但是在IDEA的界面是可以看到的, 包是正常,并且可以点击跳转的.
排查
经过以下步骤都不行:

reimport
重新maven clean compile
检查pom的依赖冲突

解决
最终发现是IDEA的缓存问题, 删除工程目录下的project.xml和.idea缓存文件, 把项目重新导入IDEA后启动, 问题不再出现.

...]]></description><category></category></item><item><title><![CDATA[Maven命令行编译提示“不能识别的GBK编码问题“]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/115495011</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/115495011</guid><author>PHX_Z</author><pubDate>Wed, 07 Apr 2021 20:31:39 +0800</pubDate><description><![CDATA[背景
用IDEA新建Maven项目, 开发完成后, 在命令行使用maven编译命令
maven clean compile -Dmaven.test.skip=true

现象
报错:找不到符合, 不能识别的GBK编码
但是在IDEA的maven TAB里面点击clean和install可以编译成功
解决
在pom.xml文件中, 添加如下内容
    &lt;build&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
             ]]></description><category></category></item><item><title><![CDATA[正则表达式匹配特定开头和结尾的一行]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/115310855</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/115310855</guid><author>PHX_Z</author><pubDate>Mon, 29 Mar 2021 20:43:55 +0800</pubDate><description><![CDATA[正则表达式匹配特定开头和结尾的一行
目标
匹配 traceLog(“R38:” + r38); 这类文本行
方案
traceLog[^;]+;$
说明

traceLog 表示行的开头
[^;]+ 表示除了分号的任意多个字符
;$ 表示以分号作为行的结尾


]]></description><category></category></item><item><title><![CDATA[注册中心学习]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/85253112</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/85253112</guid><author>PHX_Z</author><pubDate>Tue, 25 Dec 2018 19:40:32 +0800</pubDate><description><![CDATA[注册中心
功能：服务发现、服务配置、健康检测

检测节点集群状态，把拉的方式改成推的方式
集成Ribbon实现负载均衡
节点管理

服务注册中心架构演进
https://www.jianshu.com/p/5014bb302c7d
总体架构


服务调用: client 直连 server 调用服务
服务注册: 服务端将服务的信息注册到 consul 里
服务发现: 客户端从 consul 里发现...]]></description><category></category></item><item><title><![CDATA[关于反射的理解]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81448460</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81448460</guid><author>PHX_Z</author><pubDate>Mon, 06 Aug 2018 09:06:42 +0800</pubDate><description><![CDATA[Java的反射机制

在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；对于任意一个对象，都能够调用它的任意一个方法和属性；这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。 反射的核心是JVM在运行时才动态加载类或调用方法/访问属性，它不需要事先知道运行对象是谁。



反射

Java反射机制主要提供了以下功能：在运行时构造一个类的对象；判断一个类所具有的...]]></description><category></category></item><item><title><![CDATA[String类的理解]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81448147</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81448147</guid><author>PHX_Z</author><pubDate>Mon, 06 Aug 2018 08:34:08 +0800</pubDate><description><![CDATA[不可变性


String 的底层实现是依靠 char[] 数组，但是用了final修饰，隔绝了使用者对 String 的底层数据的操作。


public final class String
    implements java.io.Serializable, Comparable&amp;lt;string&amp;gt;, CharSequence {
    /** The value is use...]]></description><category></category></item><item><title><![CDATA[ArrayBlockingQueue]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81323856</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81323856</guid><author>PHX_Z</author><pubDate>Wed, 01 Aug 2018 08:39:47 +0800</pubDate><description><![CDATA[ArrayBlockingQueue和LinkedBlockingQueue的区别：


队列中锁的实现不同 
ArrayBlockingQueue实现的队列中的锁是没有分离的，即生产和消费用的是同一个锁； 
LinkedBlockingQueue实现的队列中的锁是分离的，即生产用的是putLock，消费是takeLock
在生产或消费时操作不同 
ArrayBlockingQueue实现的队列中...]]></description><category></category></item><item><title><![CDATA[Arraylist的一些理解]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81323826</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81323826</guid><author>PHX_Z</author><pubDate>Wed, 01 Aug 2018 08:35:50 +0800</pubDate><description><![CDATA[Arraylist底层扩容


初始默认容量为10
超过初始容量则扩容1.5倍




int newCapacity = oldCapacity + (oldCapacity &amp;gt;&amp;gt; 1)


  Vector每次扩容容量是为原来的2倍



如果扩容后仍然小于minCapacity，则直接让newCapacity 等于minCapacity
参考：浅谈ArrayList动态扩容


...]]></description><category></category></item><item><title><![CDATA[Java的反射机制]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81279453</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81279453</guid><author>PHX_Z</author><pubDate>Mon, 30 Jul 2018 09:28:26 +0800</pubDate><description><![CDATA[Java的反射机制



前言


在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；
对于任意一个对象，都能够调用它的任意一个方法和属性；
这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。 
反射的核心是JVM在运行时才动态加载类或调用方法/访问属性，它不需要事先知道运行对象是谁。
Java中万事万物为对象
类是对象，是Java.lang.class类的实...]]></description><category></category></item><item><title><![CDATA[类加载的理解]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81230803</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81230803</guid><author>PHX_Z</author><pubDate>Fri, 27 Jul 2018 08:45:16 +0800</pubDate><description><![CDATA[类加载


加载、连接（验证、准备、解析）、初始化、使用和卸载这7个阶段。 

类加载的过程主要分为三个部分： 
加载
链接（细分为: 1.验证2.准备3.解析）
初始化



  其中，加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的，类的加载过程必须按照这种顺序按部就班的“开始”（仅仅指的是开始，而非执行或者结束，因为这些阶段通常都是互相交叉的混合进行，通常会在一个阶段执行的过程中调用或...]]></description><category></category></item><item><title><![CDATA[ThreadLocal的理解]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81213412</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81213412</guid><author>PHX_Z</author><pubDate>Thu, 26 Jul 2018 08:38:28 +0800</pubDate><description><![CDATA[前言:

知其然知其所以然，所以先来说一下ThreadLocal是为了什么用途而应运而生的。

作用：

ThreadLocal实现了线程的数据隔离，提供了属于线程的独享局部变量，每个线程都可以通过set()和get()来对这个局部变量进行操作。

用法：

对于同一个static ThreadLocal，不同线程只能从中get，set，remove自己的变量，而不会影响其他线程的变量。 
1、T...]]></description><category></category></item><item><title><![CDATA[线程中断]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81199241</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81199241</guid><author>PHX_Z</author><pubDate>Wed, 25 Jul 2018 11:26:50 +0800</pubDate><description><![CDATA[首先介绍一下三个与中断有关的方法：



interrupt

interrupt方法用于中断线程。调用该方法的线程的状态为将被置为”中断”状态。 
注意：线程中断仅仅是置线程的中断状态位，不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法（也就是线程中断后会抛出interruptedException的方法）就是在监视线程的中断状态，一旦线程的中断状态被置为“中断状态”，就...]]></description><category></category></item><item><title><![CDATA[线程异常]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81178015</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81178015</guid><author>PHX_Z</author><pubDate>Tue, 24 Jul 2018 08:53:54 +0800</pubDate><description><![CDATA[异常分类 
  ● CheckedException（非运行时异常） 
  ● UncheckedException（运行时异常，又叫做RuntimeException）

区别： 
CheckedException需要用try…catch…显示的捕获，而UncheckedException不需要捕获。通常UncheckedException又叫做RuntimeException。 
《effec...]]></description><category></category></item><item><title><![CDATA[多线程实现与线程安全]]></title><link>https://blog.youkuaiyun.com/PHX_Z/article/details/81161993</link><guid>https://blog.youkuaiyun.com/PHX_Z/article/details/81161993</guid><author>PHX_Z</author><pubDate>Mon, 23 Jul 2018 09:14:41 +0800</pubDate><description><![CDATA[多线程的实现方式

● 继承Thread类创建线程类，重写run方法，run方法就是代表线程需要完成的任务，调用线程对象的start()来启动该线程，线程类已经继承了Thread类，所以不能再继承其他父类。



class ThreadTest extends Thread {  

    Thread thread;  

    public ThreadTest(Thread threa...]]></description><category></category></item></channel></rss>