<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[who7708的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/who7708</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; who7708]]></copyright><item><title><![CDATA[利用阿里maven加速gradle下载速度]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/127576491</link><guid>https://blog.youkuaiyun.com/who7708/article/details/127576491</guid><author>who7708</author><pubDate>Fri, 28 Oct 2022 18:12:53 +0800</pubDate><description><![CDATA[利用阿里maven加速gradle下载速度]]></description><category></category></item><item><title><![CDATA[（无Xcode）Mac OS X中解决 make，gcc等命令找不到]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113945841</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113945841</guid><author>who7708</author><pubDate>Mon, 22 Feb 2021 17:40:23 +0800</pubDate><description><![CDATA[安装 CommandLineTools
xcode-select --install 详情可查看 Mac OS X中安装命令行工具Command Line Tools（无Xcode)

根据提示进行安装。安装完成之后，再配置

sudo xcode-select --switch /Library/Developer/CommandLineTools

验证 CommandLineTools 是否安装成功

xcode-select -p 打印的目录是否为上一步骤的目录。如果是，则ok

继续验证 make]]></description><category></category></item><item><title><![CDATA[使用docker创建一个服务器并用ssh登录]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113847311</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113847311</guid><author>who7708</author><pubDate>Thu, 18 Feb 2021 15:18:33 +0800</pubDate><description><![CDATA[使用docker创建一个服务器并用ssh登录
运行 ubuntu
docker run -it --rm --name test -h test -m 500m ubuntu:18.04 /bin/bash

修改密码
默认是root用户，没有密码的。使用 passwd 修改密码
替换源
https://developer.aliyun.com/mirror/ubuntu
找到对应的版本，进行替换
更新系统
apt update
安装和配置ssh服务

安装

apt install openssh-ser]]></description><category></category></item><item><title><![CDATA[使用 dom4j 比较两个xml文件内容，并输出结果]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113779596</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113779596</guid><author>who7708</author><pubDate>Wed, 10 Feb 2021 10:31:53 +0800</pubDate><description><![CDATA[private Map&lt;String, Element&gt; removeDuplication(String filepath1, String filepath2, String rootName, String attrName) throws Exception {
        // 读取第一个xml
        Map&lt;String, Element&gt; map1 = readXml(filepath1, rootName, attrName);
        Set&]]></description><category></category></item><item><title><![CDATA[使用redis或雪花算法生成全局id]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113610006</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113610006</guid><author>who7708</author><pubDate>Wed, 03 Feb 2021 16:01:08 +0800</pubDate><description><![CDATA[雪花算法
/**
 * 优点:
 * 性能好,低延时, 能满足Twitter每秒上万条请求
 * 独立部署, 稳定性高
 * 可根据自身业务分配bit位, 灵活性好
 * 缺点:
 * 强依赖机器时间, 如果机器上时间回拨,会导致发号重复或者服务会处于不可用状态。
 *
 * Twitter_Snowflake&lt;br&gt;
 * SnowFlake的结构如下(每部分用-分开):&lt;br&gt;
 * 0 - 0000000000 0000000000 0000000000 0000000000 ]]></description><category></category></item><item><title><![CDATA[利用 LinkedBlockingQueue 实现一个阻塞限制队列 LimitQueue]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113577687</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113577687</guid><author>who7708</author><pubDate>Wed, 03 Feb 2021 00:41:37 +0800</pubDate><description><![CDATA[利用 LinkedBlockingQueue 实现一个阻塞限制队列 LimitQueue
需求
多线程执行任务时, 如果在线程队列中,如果满了,则等待线程池中的任务完成之后,再放入任务. 而不是抛出异常或抛弃其他任务.
实现
import javax.validation.constraints.NotNull;
import java.util.concurrent.LinkedBlockingQueue;

/**
 * 当线程池满了的时候，线程池阻塞队列, 而不是抛出异常或抛弃其他任务.
 *
 * ]]></description><category></category></item><item><title><![CDATA[java类映射转换框架MapStrcut]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113576929</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113576929</guid><author>who7708</author><pubDate>Tue, 02 Feb 2021 23:52:35 +0800</pubDate><description><![CDATA[类之间转换框架 mapStruct
maven 中引用 jar
&lt;dependency&gt;
    &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
    &lt;artifactId&gt;lombok&lt;/artifactId&gt;
    &lt;version&gt;${org.projectlombok.version}&lt;/version&gt;
&lt;/dependency&gt;

&lt;dependency&gt;
]]></description><category></category></item><item><title><![CDATA[从Nginx源码出发-隐藏响应头的Server版本号等信息]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113284466</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113284466</guid><author>who7708</author><pubDate>Thu, 28 Jan 2021 01:01:58 +0800</pubDate><description><![CDATA[需求
当我们使用http/https请求时, nginx 会在请求的response里面的header加入Server: nginx:1.18 信息, 如果可以隐藏, 就不会被别人知道, 我用的是哪款web服务器, 或哪个版本.
例如


新浪网：
Server: nginx / Server: WeiBo/LB


开源中国：
Server:Tengine / server: marco/2.13


segmentfault
没有返回Server！/ server: Tengine


修改 nginx]]></description><category></category></item><item><title><![CDATA[如何使用 bytebuddy并以javaagent方式为http请求增加header信息]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113185883</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113185883</guid><author>who7708</author><pubDate>Tue, 26 Jan 2021 18:49:14 +0800</pubDate><description><![CDATA[需求
为每个http请求响应时增加header信息是哪个controller中的哪个方法返回的. 如下图:

提供demo
根据start.spring.io 创建一个spring-boot项目. 编写两个controller,如下图:


com.example.demo.web.controller.IndexController 内容如下

@GetMapping("")
public String hello(HttpServletRequest request, HttpServletRespon]]></description><category></category></item><item><title><![CDATA[maven 常用插件及使用]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113115238</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113115238</guid><author>who7708</author><pubDate>Mon, 25 Jan 2021 15:53:11 +0800</pubDate><description><![CDATA[maven常用插件及使用
1. 代码格式检查
&lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;
使用
&lt;plugin&gt;
    &lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;
    &lt;version&gt;${maven-checkstyle-plugin.version}&lt;/version&gt;
    &lt;configurati]]></description><category></category></item><item><title><![CDATA[如何使用 idea 调试 skywalking]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/113042977</link><guid>https://blog.youkuaiyun.com/who7708/article/details/113042977</guid><author>who7708</author><pubDate>Sat, 23 Jan 2021 14:20:39 +0800</pubDate><description><![CDATA[下载 skywalking 源码
git clone https://github.com/apache/skywalking

修改相关pom,仅保留必要的内容
修改主要是为了更快的编译/打包/测试. 也更节省时间, 时间多的可以忽略此步,直接下一步.
apm/pom.xml 修改

maven-checkstyle-plugin 去除
profiles 仅保留  &lt;id&gt;agent&lt;/id&gt;, 其他的profile全部注释掉, 修改成如下图


apm/apm-sniffer/p]]></description><category></category></item><item><title><![CDATA[java项目使用docker运行并集成arthas]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/112968456</link><guid>https://blog.youkuaiyun.com/who7708/article/details/112968456</guid><author>who7708</author><pubDate>Thu, 21 Jan 2021 18:06:33 +0800</pubDate><description><![CDATA[maven 打包配置
本文是项目 spring-boot 项目. 使用 spring-start 生成的事例项目
修改 maven 中的 build 节点, 增加 antrun 插件, 如下:
&lt;build&gt;
     &lt;finalName&gt;${project.artifactId}&lt;/finalName&gt;
     &lt;plugins&gt;
         &lt;plugin&gt;
             &lt;groupId&gt;org.spring]]></description><category></category></item><item><title><![CDATA[Mac中在Docker容器中访问宿主中的mysql]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/112846372</link><guid>https://blog.youkuaiyun.com/who7708/article/details/112846372</guid><author>who7708</author><pubDate>Tue, 19 Jan 2021 16:35:49 +0800</pubDate><description><![CDATA[Docker For Mac 没有 docker0 网桥
在使用 Docker 时，要注意平台之间实现的差异性，如 Docker For Mac 的实现和标准 Docker 规范有区别，Docker For Mac 的 Docker Daemon 是运行于虚拟机 (xhyve) 中的，而不是像 Linux 上那样作为进程运行于宿主机，因此 Docker For Mac 没有 docker0 网桥，不能实现 host 网络模式，host 模式会使 Container 复用 Daemon 的网络栈 (在 xhy]]></description><category></category></item><item><title><![CDATA[gradle下载时 dists中的目录如何生成的?]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/112713532</link><guid>https://blog.youkuaiyun.com/who7708/article/details/112713532</guid><author>who7708</author><pubDate>Sat, 16 Jan 2021 16:25:36 +0800</pubDate><description><![CDATA[简介
我们在使用gradle 时, gradle自动下载时的目录是如何生成的? 如果知道目录生成的规则, 那我们就可以手动下载, 加快速度
生成规则
其实gradle下载目录生成就是使用 md5 把gradle的下载的url进行hash, 然后再转换成36进制字符串得到了. 代码如下:
    private String getHash(String string) {
        try {
            MessageDigest messageDigest = MessageDiges]]></description><category></category></item><item><title><![CDATA[java hex转换输出(可以打印字节码.class文件内容)]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/112630271</link><guid>https://blog.youkuaiyun.com/who7708/article/details/112630271</guid><author>who7708</author><pubDate>Thu, 14 Jan 2021 19:20:48 +0800</pubDate><description><![CDATA[不依赖于任何jar包. 打印 .class 文件内容.

```


public class HexDump {

    /** 十六进制的组成元素 */
    private final static char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    public static String dumpHexString(byte[] ar]]></description><category></category></item><item><title><![CDATA[使用IDEA调试Arthas]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/112176622</link><guid>https://blog.youkuaiyun.com/who7708/article/details/112176622</guid><author>who7708</author><pubDate>Mon, 04 Jan 2021 14:47:10 +0800</pubDate><description><![CDATA[使用IDEA调试Arthas准备工作准备调试使用的代码debug运行配置远程调试 arthas
准备工作
准备调试使用的代码
写一做供我们调试使用的代码. 或者直接使用arthas源码里的 demo.MathGame 也可以.
debug运行
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar arthas-demo.jar

配置远程调试 arthas

打开idea配置



注: 端口号与debug运]]></description><category></category></item><item><title><![CDATA[IntelliJ Idea java开发常用插件记录]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/107138035</link><guid>https://blog.youkuaiyun.com/who7708/article/details/107138035</guid><author>who7708</author><pubDate>Sun, 05 Jul 2020 13:35:09 +0800</pubDate><description><![CDATA[java开发时常用的插件记录
.env files support
.ignore
Alibaba Java Coding Guidelines
BashSupport
Lombok
Maven Helper
Protobuf Support

可选安装
arthas idea
AsciiDoc
Docker
jclasslib Bytecode viewer
Key Promoter X


]]></description><category></category></item><item><title><![CDATA[JedisCluster 使用方法]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/100998936</link><guid>https://blog.youkuaiyun.com/who7708/article/details/100998936</guid><author>who7708</author><pubDate>Wed, 24 Jun 2020 23:07:17 +0800</pubDate><description><![CDATA[JedisCluster使用方法

https://www.cnblogs.com/c-xiaohai/p/8376364.html


    @Bean
    JedisCluster jedisCluster() {
        // 添加集群的服务节点Set集合
        Set&lt;HostAndPort&gt; hostAndPortsSet = new HashSet...]]></description><category></category></item><item><title><![CDATA[工作中某 java 项目中打印日志原则]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/100073237</link><guid>https://blog.youkuaiyun.com/who7708/article/details/100073237</guid><author>who7708</author><pubDate>Wed, 24 Jun 2020 23:06:05 +0800</pubDate><description><![CDATA[•打印日志原则

•整个团队对打印日志的格式要有明确的规范，目前好房内部运维已经规范了一套，请大家按OP规范

•定义好整个团队记录INFO、DEBUG（或TRACE）日志规范，保证每个开发记录的日志格式统一

•整个团队（包括开发，运维）定期对记录的日志内容进行Review，通过查问题的过程来不断优化日志记录

•绝不打无效的日志，防止无效日志过度淹没重要日志信息

•对系统间Rpc调用一定要l...]]></description><category></category></item><item><title><![CDATA[Mybatis 注解 @Many 实现 递归菜单获取]]></title><link>https://blog.youkuaiyun.com/who7708/article/details/102918387</link><guid>https://blog.youkuaiyun.com/who7708/article/details/102918387</guid><author>who7708</author><pubDate>Wed, 24 Jun 2020 23:02:07 +0800</pubDate><description><![CDATA[Mybatis 注解 @Many 实现 递归菜单获取




import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface MenuMapper {

    @Select("select * from menu where parentid=0")
    @Results(...]]></description><category></category></item></channel></rss>