<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[coder_xia的专栏]]></title><description><![CDATA[职业生涯记录，均为亲身经历——转载请注明出处，不要像Linux公社那样]]></description><link>https://blog.youkuaiyun.com/coder_xia</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; coder_xia]]></copyright><item><title><![CDATA[区块链-应用场景分析]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/153075827</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/153075827</guid><author>coder_xia</author><pubDate>Sat, 11 Oct 2025 21:17:32 +0800</pubDate><description><![CDATA[技术可行性：联盟链（如Hyperledger Fabric）支持权限分级管理，可对接保险公司核心系统，并通过预言机（Oracle）接入外部数据（如疫情通报）。· 流程自动化：智能合约实现保单远程签约与自动理赔，减少人工干预。· 信息孤岛与信任缺失：中小企业与核心企业、金融机构数据不互通，融资依赖纸质证明，审批周期长达数周。· 业务连续性保障：通过链上追踪货物状态，结合智能合约触发赔付，解决航运中断导致的财产险业务停滞。· 数据固化存证：作品哈希值及权属信息上链，司法机构可直接采信，解决传统登记滞后性。]]></description><category></category></item><item><title><![CDATA[Apng文件判断]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/140215357</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/140215357</guid><author>coder_xia</author><pubDate>Fri, 05 Jul 2024 17:53:54 +0800</pubDate><description><![CDATA[背景：在图片压缩中，根据文件头判断png和jpg文件进行了压缩，但是对apng文件，文件头的前14个字节都一样（89504E470D0A1A0A0000000D4948），导致对apng图片进行压缩，图片白了。]]></description><category></category></item><item><title><![CDATA[java图片压缩库调研]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/131139963</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/131139963</guid><author>coder_xia</author><pubDate>Sat, 10 Jun 2023 11:21:33 +0800</pubDate><description><![CDATA[1. 6.6.14版本中的image包，是抠了JDeli的代码，其它版本都没有，所以实际是收费软件的压缩效果；本地SDK，JPG压缩可以做到60%以上，可以控制压缩后分辨率是否变化。2. API接入，申请appid，每天50张免费，后续收费，实际是到。类似thumbnailator，不过对有透明度的PNG压缩后会有黑底。附：png压缩对比（0%说明是负优化，代码中对负优化的不压缩）本地SDK，直接调用，对PNG实际是用quant算法进行优化。1. 网站在线压缩免费，单张，手工；不修改分辨率压缩效果一般。]]></description><category></category></item><item><title><![CDATA[png图片压缩后黑底问题解决]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/130950473</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/130950473</guid><author>coder_xia</author><pubDate>Tue, 30 May 2023 20:12:40 +0800</pubDate><description><![CDATA[问题到这基本就清晰了，黑底的原因是png压缩过程中alpha通道值没了，用黑色补充，为什么alpha通道会丢失呢？因为按jpg处理了，所以我们只需要处理png时，识别到真实png，保证其后缀名为.png即可。判断文件类型为jpg还是png，对后缀名不对的，强行补充.png等。用白的背景重画，就会有类似如下问题：左边为原图，右边为重绘后的图。压缩，保证压缩率，但是不修改目标文件后缀名。图片开始压缩的大小，对较小的。两个字节，容易混淆，如果是补。支持的文件后缀，以逗号分割。压缩必要不大，可能是无用功。]]></description><category></category></item><item><title><![CDATA[使用异步HttpClient时线程hang住]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/103435095</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/103435095</guid><author>coder_xia</author><pubDate>Sat, 07 Dec 2019 14:23:38 +0800</pubDate><description><![CDATA[某次处理问题，发现线上的某个线程池全部hang住，jstack发现堆栈如下


"pool-3-thread-50" #70 prio=5 os_prio=0 tid=0x00007fa451317800 nid=0x5f23 in Object.wait() [0x00007fa44e6e5000]
   java.lang.Thread.State: WAITING (on object mo...]]></description><category></category></item><item><title><![CDATA[一次kafka堆积问题解决]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/86289643</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/86289643</guid><author>coder_xia</author><pubDate>Fri, 11 Jan 2019 10:24:03 +0800</pubDate><description><![CDATA[我们从kafka获取数据，如下图，有两步，第一步是从dmq获取出来放到一个队列里；第二步是我们消费线程从队列里获取内容。



对第一步，业务作为dmq客户端，启动N个连接去连接dmq，连接数由配置项mq.consumer.connections指定，一般模块都没配置（目前小组内框架设置的默认值是2）
对第二步，消费线程数是由配置项 consumer.thread.num 决定（出现问题时为10）...]]></description><category></category></item><item><title><![CDATA[记一次ssl方式导致的堆外内存泄露]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/86014393</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/86014393</guid><author>coder_xia</author><pubDate>Mon, 07 Jan 2019 17:34:24 +0800</pubDate><description><![CDATA[在巡检的时候突然发现现网某业务使用内存大约6G,问题是我们配置的-Xmx=2G,metaspace没配置,从GC日志看



第一次提交的最大metaspace为1G，假设都使用了，堆外内存最小也有3G了
定位步骤
1.查看/proc/${pid}/smaps文件（pmap命令也类似）
发现20来个65536KB的块



而且连续观察到64M块和内存增长量也符合，搜到案例  http://blo...]]></description><category></category></item><item><title><![CDATA[记录下并行优化时的一个问题]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/84556774</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/84556774</guid><author>coder_xia</author><pubDate>Mon, 26 Nov 2018 21:32:13 +0800</pubDate><description><![CDATA[    最近在做模块性能优化时,尝试将请求外部模块和操作数据库这种耗时操作又非前后关联的动作改为并行,用到了CompletableFuture.runAsync,遍历复杂集合时修改为parallelStream;

    实际上parallelStream和CompletableFuture.runAsync的并行都是使用了Fork/join的线程池来处理,可以参考http://blog.dyn...]]></description><category></category></item><item><title><![CDATA[记录一个证书校验的问题]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/84293688</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/84293688</guid><author>coder_xia</author><pubDate>Tue, 20 Nov 2018 12:21:29 +0800</pubDate><description><![CDATA[突然同事找我说我们测试环境的app无法登录了，重新部署了rabbitmq也没用，怀疑是rabbitmq插件问题。

决定抓包分析，我们的认证是用rabbitmq_auth_backend_http插件，往mqtt模块发送认证请求，首先在mqtt模块抓包看是否收到http请求，抓到包，确认收到了，那插件应该是没问题的，查看包发现握手错误，不过恰好是部署在同一台服务器上看不出是谁报的证书校验错误

然...]]></description><category></category></item><item><title><![CDATA[性能提升5000倍，我都不敢信]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/83618558</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/83618558</guid><author>coder_xia</author><pubDate>Thu, 01 Nov 2018 13:03:55 +0800</pubDate><description><![CDATA[之前组里人写了个解密工具，用cmd调用jar包里的方法



@echo off
echo %time%
echo.
set key=8076yda4404ysh09
for /f  %%i in (str.txt) do java -jar encrypt.jar aescbc d %%i %key%
echo.
echo %time%
pause


echo %time%为后期加上为了统计时...]]></description><category></category></item><item><title><![CDATA[记录一个正则表达式 cpu 100%的问题]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/83578947</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/83578947</guid><author>coder_xia</author><pubDate>Wed, 31 Oct 2018 13:44:46 +0800</pubDate><description><![CDATA[昨天一个同事找看个问题,请求某个接口在参数长一点的时候总是超时,查看atop信息,发现cpu几乎耗尽,atop信息如下



占用cpu最高的是他的进程,怀疑写了死循环，jstack发现如下



明显是有循环调用了，cpu爆的原因和 https://yq.aliyun.com/articles/25576 的一样,都是Curly方式,不过连接里很多是源码解析比如type=0，回到我们的问题，我们...]]></description><category></category></item><item><title><![CDATA[一个进程里两处日志时间时区不一样的问题]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/82756675</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/82756675</guid><author>coder_xia</author><pubDate>Tue, 18 Sep 2018 19:04:26 +0800</pubDate><description><![CDATA[    最近发现一个进程里打出来的日志里时区不一样，一个是UTC时间,2018-09-12 10:48:12.278,一个是北京时间2018-09-12 18:48:15.453。北京时间的是log4j输出的,UTC时间的是我们自己输出的，我们自己的时间字符串来源是大概如下两行代码:


SimpleDateFormat dateFormat = new SimpleDateFormat(&quot;yyy...]]></description><category></category></item><item><title><![CDATA[增加一个bean改变spring初始化顺序问题]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/80533603</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/80533603</guid><author>coder_xia</author><pubDate>Fri, 01 Jun 2018 10:02:52 +0800</pubDate><description><![CDATA[    工程中有2个bean，A和B，其中必须先初始化A再初始化B，但是没有depend-on或者Order等方式去保证，只不过恰好刚好这么运行着没出事，但是突然增加了一个C之后，就先初始化B再初始化A导致问题，但是在主干版本上却没问题。    解决这个问题其实很简单，depend-on即可，但是为什么会分支版本上会增加C后就改变AB的初始化顺序？为什么主干版本上同样添加没问题呢？可以看sprin...]]></description><category></category></item><item><title><![CDATA[Cannot get a connection, pool error Timeout waiting for idle object]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/80480347</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/80480347</guid><author>coder_xia</author><pubDate>Mon, 28 May 2018 11:57:33 +0800</pubDate><description><![CDATA[性能测试时，报错org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object，日志中最后的堆栈如下：Caused by: java.util.NoSuchElementException: Timeout waiting for ...]]></description><category></category></item><item><title><![CDATA[经典的过时言论——使用StringUtils.split替代普通split方法提升性能]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/80356396</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/80356396</guid><author>coder_xia</author><pubDate>Thu, 17 May 2018 20:41:21 +0800</pubDate><description><![CDATA[经常能听到这个说法，甚至编程规范也会约束不让用String的split方法，那么是不是真的就很慢呢？测试代码如下    public static void main(String[] args)
    {
        String str = &quot;abc:abc:drdf:dfw:da&quot;;
        System.out.println(System.currentTimeMillis...]]></description><category></category></item><item><title><![CDATA[coverity清零——missing call super]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/79800028</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/79800028</guid><author>coder_xia</author><pubDate>Tue, 03 Apr 2018 11:08:28 +0800</pubDate><description><![CDATA[问题原因：期望我们调用super.xxx()方法但是我们没有调用除去部分误报，需要注意修改的是Servlet的init(ServletConfig servletConfig)方法中，是必须要加上super.init(servletConfig)调用的。首先，为什么我们重写的不是init()而是带参数的呢？因为我们有直接从web.xml里读取配置项的操作this.path = servletCon...]]></description><category></category></item><item><title><![CDATA[部分业务从Tomcat6升级到Tomcat7后,访问部分jsp报错]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/79771246</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/79771246</guid><author>coder_xia</author><pubDate>Sat, 31 Mar 2018 17:20:48 +0800</pubDate><description><![CDATA[升级tomcat后，访问jsp报错500，错误信息如下：org.apache.jasper.JasperException: … … The JSP specification requires that an attribute name is preceded by whitespace问题原因:Tomcat7增加了个参数 org.apache.jasper.compiler.Parser.S...]]></description><category></category></item><item><title><![CDATA[coverity 清零Bad choice of lock object —— 常量字符串做锁对象]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/79725351</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/79725351</guid><author>coder_xia</author><pubDate>Wed, 28 Mar 2018 11:51:02 +0800</pubDate><description><![CDATA[参考如下代码，在BadLockA和BadLockB中我们使用了BADLOCK字符串作为锁对象（这个字符串对象我们加不加static final修饰都一样）public class Test
{

    public static void main(String[] args) throws Exception
    {

        BadLockA lockA = new BadLoc...]]></description><category></category></item><item><title><![CDATA[coverity清零Bad choice of lock object——集合做锁]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/79717624</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/79717624</guid><author>coder_xia</author><pubDate>Tue, 27 Mar 2018 19:08:33 +0800</pubDate><description><![CDATA[当我们尝试synchronized一个集合时,coverity扫描时会有提示Bad choice of lock object,那么为什么呢？参考如下代码：public class Test
{
    public static void main(String[] args) throws Exception
    {
        Integer in = new Integer(123...]]></description><category></category></item><item><title><![CDATA[Ant: Class not found: javac1.8]]></title><link>https://blog.youkuaiyun.com/coder_xia/article/details/78411552</link><guid>https://blog.youkuaiyun.com/coder_xia/article/details/78411552</guid><author>coder_xia</author><pubDate>Wed, 01 Nov 2017 11:22:17 +0800</pubDate><description><![CDATA[ant版本 1.8.3，jdk版本1.8.0_101
在ant时报了这个错，在网上搜都让升级ant到1.9以上配套jdk8即可。实际上我们由于是从jdk6升级到jdk8，所以当时有另一种解决方式，指定compiler="javac1.6"
    
        <javac source="${javac.source}"
               srcdir="${src}"
  ]]></description><category></category></item></channel></rss>