<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[超威半导体]]></title><description><![CDATA[失望-痛苦-分裂-自省-領悟-覺醒-重生]]></description><link>https://blog.youkuaiyun.com/micro_hz</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; micro_hz]]></copyright><item><title><![CDATA[退出csdn声明]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/148213049</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/148213049</guid><author>micro_hz</author><pubDate>Sun, 25 May 2025 20:17:35 +0800</pubDate><description><![CDATA[鉴于csdn社区环境恶化，本人不再csdn更新文章，我活跃在B站给大家提供更多技术分享，问题与文章的阅览请移步Google与StackOverflow等优质社区。]]></description><category></category></item><item><title><![CDATA[安装JDK多个版本Maven找不到JRE]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/127393738</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/127393738</guid><author>micro_hz</author><pubDate>Tue, 18 Oct 2022 18:07:47 +0800</pubDate><description><![CDATA[环境配置
]]></description><category></category></item><item><title><![CDATA[退出csdn声明]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/124123544</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/124123544</guid><author>micro_hz</author><pubDate>Tue, 12 Apr 2022 14:36:51 +0800</pubDate><description><![CDATA[鉴于csdn社区环境恶化，本人不再csdn更新文章，我活跃在B站给大家提供更多技术分享，问题与文章的阅览请移步Google与StackOverflow等优质社区。

]]></description><category></category></item><item><title><![CDATA[PDFbox的head is mandatory问题]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/118723085</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/118723085</guid><author>micro_hz</author><pubDate>Wed, 14 Jul 2021 11:07:46 +0800</pubDate><description><![CDATA[问题
这个是加载字体文件的时候无法找到文件的头信息报出的：

搜索大量资料，在stackoverflow找到解决方案：

这个是maven资源过滤导致文件异常。
原文
中文社区没找到，我补充一下。
例如外PDDocument如何转换为inputStream流也在社区找到解决方案：


...]]></description><category></category></item><item><title><![CDATA[MybatisPlus自增ID超大自动时间戳生成排查]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/117466870</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/117466870</guid><author>micro_hz</author><pubDate>Wed, 02 Jun 2021 14:32:40 +0800</pubDate><description><![CDATA[问题
数据库我预期是用自增ID，但是用MybatisPlus动态SQL框架写入，ID是非常大的一个值。
分析
调用insert是动态生成SQL，id为空。


由于动态SQL主要sqlSession执行过程如下图，其中关键到了预编译参数的process方法，此时的id还是null。

此时会根据entity去获取表的信息，其中就包含了ID生成规则的定义。
其中默认在框架启动的时候定义为idType为ASSIGN_ID的策略。

接着就去处理主键。
这里用内部的方法填充ID

可以看到才去类似雪花算法的生成逻]]></description><category></category></item><item><title><![CDATA[阿里云OSS请求文件跨域问题Access-Control-Allow-Origin]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/117441926</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/117441926</guid><author>micro_hz</author><pubDate>Tue, 01 Jun 2021 14:05:57 +0800</pubDate><description><![CDATA[跨域问题网上很多解决方案提示到这里配置但是不生效，一定要勾选Vary:Origin这个选项，请求的时候浏览器记得请求在控制台要清理缓存。



]]></description><category></category></item><item><title><![CDATA[单元测试规范&Mybatis+SpringBoot+H2实战]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/116591344</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/116591344</guid><author>micro_hz</author><pubDate>Mon, 10 May 2021 12:51:59 +0800</pubDate><description><![CDATA[背景介绍
为了长期持续高质量、高效率的迭代，必须遵守一定的研发规范，其中主要包括静态代码的扫描和单元测试两个部分。
风险认知
行业的普遍共识，风险识别暴露的越晚，修复的成本越高。

好代码不是一蹴而就的，是持续重构出来的

目标

技术选型

最佳实践
安装sonarLint

本地IntelliJ IDEA安装sonarlint，根据提示重启IntelliJ IDEA即可
有两个选项：根据本地修改扫描和全量扫描。可以根据实际情况开启。扫描结果如下：


此处扫描出范型约束丢失的可能运行时异常，风险等级为M]]></description><category></category></item><item><title><![CDATA[如何使用H2与SpringBoot写DAO单元测试]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/116559456</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/116559456</guid><author>micro_hz</author><pubDate>Sun, 09 May 2021 22:18:46 +0800</pubDate><description><![CDATA[背景
最近在推团队单元测试的标准，其实任何依赖外部调用严格意义上都不算单元测试，但是数据库的SQL的正确性，的确是需要自测保证的，第一个版本就是本地初始化mybatis然后访问远程数据库，但这样容易影响测试数据库，因此本次考虑使用H2内存数据库进行测试。
H2分几种模式，其中内存数据库就是应用启动DDL表然后应用结束销毁所有，所以快捷轻量。
使用H2 + SpringBoot
首先pom文件
    	&lt;dependency&gt;
            &lt;groupId&gt;org.myb]]></description><category></category></item><item><title><![CDATA[一个lombok与JDK16的兼容性问题]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/116458983</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/116458983</guid><author>micro_hz</author><pubDate>Thu, 06 May 2021 17:43:53 +0800</pubDate><description><![CDATA[问题
在公司下载了最新的 JDK16，我们的项目用到了lombok，启动项目的时候报错如下：
java: java.lang.ExceptionInInitializerError
Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment]]></description><category></category></item><item><title><![CDATA[红包雨高并发问题解决方案]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/115396986</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/115396986</guid><author>micro_hz</author><pubDate>Fri, 02 Apr 2021 15:38:10 +0800</pubDate><description><![CDATA[问题
很多APP为了引流营销创造除了各种玩法，其中红包雨就是常见的一种方式，主要效果就是预告在某个时间点，会发布多少金额的券等等，到点就能够聚集上百万用户来抢，大概效果就是疯狂的戳屏幕，然后偶现几个金额，最后结束后告诉一共抢到xx元。
这里面有两个挑战。
1. 如何扛住这种高并发流量
2. 如何保证不超卖。
主要思路
业务真实意图
很多技术方案挑战很大，可以从业务的角度去进行优化，换个思路可能技术挑战就不大了，例如抢购用户数是固定吗？一定要把所有金额分发出去么？
如果是固定，那我们可以前置，不用在活动的时候]]></description><category></category></item><item><title><![CDATA[教朋友写责任链]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/115067021</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/115067021</guid><author>micro_hz</author><pubDate>Mon, 22 Mar 2021 17:08:29 +0800</pubDate><description><![CDATA[背景
最近一个开发的朋友开始学习Java，她之前写脚本语言多一点，对于面向对象的一些设计还是不够熟练，她写一个代码特别的累，需要大量堆if-else语句，她的直觉告诉她这样写肯定不够好，然后咨询了我。
场景介绍
她的代码逻辑是要处理一个BinlogDTO的Message消息，然后做一些后续的逻辑，由于前面的设计是很多张表都会沿用这个BinlogDTO对象并且发送的一个Message的Topic，这个BinlogDTO的对象大概定义为：
class BinlogDTO {
    private String]]></description><category></category></item><item><title><![CDATA[yml读取下划线丢失问题]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/113027960</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/113027960</guid><author>micro_hz</author><pubDate>Sat, 23 Jan 2021 09:57:30 +0800</pubDate><description><![CDATA[问题
在项目中时常需要读取配置文件，例如某个变量会随着环境的不同而不同，在springboot项目中会很容易想到yml的方式。但是最近遇到一个问题，发现下划线被注入的到bean中会丢失下划线，差点引起线上故障，demo如下：
@Component
public class YmlConfTest {
    @Value("${id}")
    private String id;
}

yml配置文件如下：
id : 1_2

但是实际运行中发现id注入的是12，而不是预期的1_2，这就导致问题发生。
]]></description><category></category></item><item><title><![CDATA[dubbo与springMVC边界日志快速接入]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/112984020</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/112984020</guid><author>micro_hz</author><pubDate>Fri, 22 Jan 2021 15:36:57 +0800</pubDate><description><![CDATA[在项目的测试阶段，系统的边界日志是十分重要的，但是又不想无限制的打印日志，可能仅仅希望在测试环境打开，所以很多时候便于调试，我们会不停的加日志，到了发布之前很容易删除冗余的日志导致线上的磁盘压力过大。

图中绿色部分是我们很关注的日志，我们的微服务系统采用的是SpringMVC + dubbo两种方式进行RPC调用，针对这种场景提出两个目标优化点：

快速集成日志记录，对业务代码无入侵
可以灵活控制环境打印
日志文件隔离

SpringMVC接口拦截
一般记录这种横切面的日志，首先想到的是AOP的方式，的确]]></description><category></category></item><item><title><![CDATA[字节跳动系统设计面试实时排行榜]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/110919019</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/110919019</guid><author>micro_hz</author><pubDate>Wed, 09 Dec 2020 15:57:05 +0800</pubDate><description><![CDATA[题目
现在有个游戏，有过亿的用户会来玩，玩游戏后会获得一个分数，当游戏结束的时候返回给用户自己所在的排名和排名前百分比，如何设计这样一个系统。
思路
功能其实并不算复杂，有很多种方式可以实现，所以这就要明确整个系统需要支持的用户量和容错与扩展等等，例如如果这个就几百的并发。
方案1 mysql
直接搞一个mysql的表即可解决。user_score (id, user_id, score, create_time)，游戏结束就insert一条记录，然后select count出分数比自己高的，然后再coun]]></description><category></category></item><item><title><![CDATA[快手算法题LC31下一个排列]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/109593990</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/109593990</guid><author>micro_hz</author><pubDate>Tue, 10 Nov 2020 11:07:08 +0800</pubDate><description><![CDATA[题目

下一个排列
实现获取下一个排列的函数，算法需要将给定数字序列重新排列成字典序中下一个更大的排列。传送门

如果不存在下一个更大的排列，则将数字重新排列成最小的排列（即升序排列）。
必须原地修改，只允许使用额外常数空间。
以下是一些例子，输入位于左侧列，其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
思路
题目的含义很多人说读不太懂，其实我读了一遍也是似懂非懂，后来画了下图，就明白了，就是把一个数组的数字进行排列组合，可以生成n个数字，这个数]]></description><category></category></item><item><title><![CDATA[亚马逊笔试题LC57插入区间 合并区间思想]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/109495102</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/109495102</guid><author>micro_hz</author><pubDate>Wed, 04 Nov 2020 18:21:58 +0800</pubDate><description><![CDATA[题目

插入区间
给出一个无重叠的 ，按照区间起始端点排序的区间列表。

在列表中插入一个新的区间，你需要确保列表中的区间仍然有序且不重叠（如果有必要的话，可以合并区间）。
示例 1：
输入：intervals = [[1,3],[6,9]], newInterval = [2,5]
输出：[[1,5],[6,9]]
示例 2：
输入：intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出：[[1,2],[3,10],[1]]></description><category></category></item><item><title><![CDATA[字节跳动算法题LC121买卖股票的最佳时机]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/109478021</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/109478021</guid><author>micro_hz</author><pubDate>Tue, 03 Nov 2020 20:27:20 +0800</pubDate><description><![CDATA[题目

买卖股票的最佳时机
给定一个数组，它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易（即买入和卖出一支股票一次），设计一个算法来计算你所能获取的最大利润。
注意：你不能在买入股票前卖出股票。
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格；同时，你不能在买入前卖出股]]></description><category></category></item><item><title><![CDATA[LC349两个数组的交集 双指针思想]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/109447593</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/109447593</guid><author>micro_hz</author><pubDate>Mon, 02 Nov 2020 14:17:01 +0800</pubDate><description><![CDATA[这题目来自今天的打卡题，虽然是一道简单的题目，但是可以用多种方式来解决，每种方式都有不同的侧重点，所以做一个总结。
题目

两个数组的交集
给定两个数组，编写一个函数来计算它们的交集。

示例 1：
输入：nums1 = [1,2,2,1], nums2 = [2,2]
输出：[2]
示例 2：
输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出：[9,4]
说明：
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
思路
方法1
这个题目如果只是解决出来当]]></description><category></category></item><item><title><![CDATA[LC27移除元素  双索引移动]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/109387768</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/109387768</guid><author>micro_hz</author><pubDate>Fri, 30 Oct 2020 16:45:22 +0800</pubDate><description><![CDATA[题目
给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。
不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1:
给定 nums = [3,2,2,3], val = 3,
函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。
你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,1,2,2,3,0,4]]></description><category></category></item><item><title><![CDATA[LC129算法题根到叶子节点数字之和]]></title><link>https://blog.youkuaiyun.com/micro_hz/article/details/109357477</link><guid>https://blog.youkuaiyun.com/micro_hz/article/details/109357477</guid><author>micro_hz</author><pubDate>Thu, 29 Oct 2020 14:15:55 +0800</pubDate><description><![CDATA[树的结构是面试中最常考察的一种数据结构，因为这不至于太难，又能过滤掉一批基础薄弱的面试者，所以对树的理解深度很大程度影响是否能顺利通过面试。 这次来分析一个树的经典算法题目：
题目
给定一个二叉树，它的每个结点都存放一个 0-9 的数字，每条从根到叶子节点的路径都代表一个数字。
例如，从根到叶子节点路径 1-&gt;2-&gt;3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。
示例 1:
输入: [1,2,3]
1
/ 
2   3
输出: 25
解释:]]></description><category></category></item></channel></rss>