<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[current_person的博客]]></title><description><![CDATA[边学习，边总结]]></description><link>https://blog.youkuaiyun.com/current_person</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; current_person]]></copyright><item><title><![CDATA[我的很大, 你忍一下, Arthas trace 命令学习]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/119065484</link><guid>https://blog.youkuaiyun.com/current_person/article/details/119065484</guid><author>current_person</author><pubDate>Sat, 24 Jul 2021 23:00:49 +0800</pubDate><description><![CDATA[前言
public static int wuyifantime() {
    final int sleepTime = 1000 * 60 * new Random().nextInt(3);
    try {
        // 0 分钟到 3 分钟
        Thread.sleep(sleepTime);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    changeobject(]]></description><category></category></item><item><title><![CDATA[学好一宁喜欢的 Arthas SM 命令, 做好葱油饼]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/118053321</link><guid>https://blog.youkuaiyun.com/current_person/article/details/118053321</guid><author>current_person</author><pubDate>Sat, 19 Jun 2021 14:22:31 +0800</pubDate><description><![CDATA[前言
public&nbsp;class&nbsp;Main&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;generateWord(String&nbsp;type)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(type)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&]]></description><category></category></item><item><title><![CDATA[Arthas OGNL 举例]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/117911783</link><guid>https://blog.youkuaiyun.com/current_person/article/details/117911783</guid><author>current_person</author><pubDate>Mon, 14 Jun 2021 19:41:41 +0800</pubDate><description><![CDATA[前言
妹妹: 姐姐平时都用这么多的命令么, 妹妹我平时啥也不会用
姐姐: 妹妹自称平时啥也不会用, OGNL 用的这么熟, 增删改查样样都不落
OGNL 命令学习

OGNL 这个表达式可以获取相关的值, 方便排查问题
OGNL 一般需要指定类加载器, 可以先使用 SC 命令查询相关类加载器的 hash 如下:

比如常见的使用 OGNL 通过调用静态方法获取 Spring 所加载的 bean 类:
ognl -c classLoaderHash -x  返回值的遍历的属性的层次  ‘OGNL表达式’

g]]></description><category></category></item><item><title><![CDATA[Arthas Sc 命令解释]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/117001708</link><guid>https://blog.youkuaiyun.com/current_person/article/details/117001708</guid><author>current_person</author><pubDate>Tue, 18 May 2021 21:46:29 +0800</pubDate><description><![CDATA[前言

SC 命令学习

sc -d className


code-source：类代码来源
name：类全路径
iisInterface：是否是接口
isAnnotation：是否是注解
isEnum：是否是枚举
isAnonymousClass：是否是匿名类
isArray：是否是数组
isLocalClass：是否是局部类（https://www.geeksforgeeks.org/class-islocalclass-method-in-java-with-examples/）
isMember]]></description><category></category></item><item><title><![CDATA[提高系统稳定性-快速排查代码版本正确性]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/115825797</link><guid>https://blog.youkuaiyun.com/current_person/article/details/115825797</guid><author>current_person</author><pubDate>Sun, 18 Apr 2021 13:07:15 +0800</pubDate><description><![CDATA[前言

当自己找了半天终于找到了 bug 的原因, 开始了修改老 bug 制造新 bug 的旅程, 但是有时候当自己修改了代码的 bug 推送到远程分支开始编译部署了之后, 发现代码好像还是原来的 bug, 没有产生新的 bug, 感觉代码没推上去, 又不知道是不是真的没推上去还是就是原来的 bug 没有修复掉

JAD 命令学习





jad + 类的全路径名 查看类的代码和类加载器(启动类加载器会显示是空):



jad -E + 正则表达式 找到符合该正则表达式的类的代码:





jad..]]></description><category></category></item><item><title><![CDATA[提高系统稳定性-快速排查 JVM]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/115418105</link><guid>https://blog.youkuaiyun.com/current_person/article/details/115418105</guid><author>current_person</author><pubDate>Sat, 03 Apr 2021 17:06:35 +0800</pubDate><description><![CDATA[前言
线上 jvm 时不时也会遇到一些问题, 或者怀疑是问题的问题, 这个怎么排查下找下原因呢
JVM 命令学习

执行 help jvm 先看下 jvm 命令的说明, 很好, 啥参数也没有, 直接执行一下(以下说明是我找了一些资料整理的, 有不对的地方欢迎指正)
RUNTIME 相关:
INPUT-ARGUMENTS: JVM 启动参数
CLASS-PATH: 类加载路径
BOOT-CLASS-PATH: 扩展类加载路径
LIBRARY-PATH: 第三方类库地址
CLASS-LOADING 相关:

L]]></description><category></category></item><item><title><![CDATA[提高稳定性-快速排查Thread]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/115042870</link><guid>https://blog.youkuaiyun.com/current_person/article/details/115042870</guid><author>current_person</author><pubDate>Sun, 21 Mar 2021 10:07:51 +0800</pubDate><description><![CDATA[前言
系统的稳定性还在于线上问题的快速排查, 比如线上 oom, 线程死锁, 连接池耗尽等等都可能会造成严重的生产事故.为此我打算系统学习一下 Arthas 和相关的知识
安装
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

Thread 命令学习:
选择好 attach 的进程, 进入 arthas 命令界面, 执行 help thread 展示了详细的命令.
字段解释:
Internal threa]]></description><category></category></item><item><title><![CDATA[提高系统稳定性-幂等性-悲观锁]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/114449565</link><guid>https://blog.youkuaiyun.com/current_person/article/details/114449565</guid><author>current_person</author><pubDate>Sat, 06 Mar 2021 17:56:17 +0800</pubDate><description><![CDATA[前言

继上次乐观锁方案之后, 接下来讨论幂等性的第二个方案

悲观锁方案

鉴于前两个系列文章的问题和乐观锁的缺点, 我们又提出了悲观锁方案保证接口的幂等性.

回忆一下, 没有悲观锁的方式是这样的:





有了悲观锁的时候:






有几点讨论说明一下:


是不是可以先去查, 查完之后再等修改的时候再锁, 其实查询完加锁是可以防止并发修改的, 只能一个一个的修改, 但是不能保证查询到的是正确的信息, 如果注册记录没有乐观锁的情况下, 还是会插入多条.
	阻塞锁和非阻塞锁的区别: 非阻塞锁...]]></description><category></category></item><item><title><![CDATA[Google 是这样的工作氛围]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/113818011</link><guid>https://blog.youkuaiyun.com/current_person/article/details/113818011</guid><author>current_person</author><pubDate>Mon, 15 Feb 2021 18:07:55 +0800</pubDate><description><![CDATA[Preface


This book is the story of how we think about our people, what we’ve learned over the past fifteen years, and what you can do to put people first and transform how you live and lead.


这本书是讲了过去十五年我们所学到的对于人的思考的故事, 关于如何做可以以人为本并影响你的生活和领导方式

Why Googl]]></description><category></category></item><item><title><![CDATA[提高系统稳定性-幂等性-乐观锁]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/113471119</link><guid>https://blog.youkuaiyun.com/current_person/article/details/113471119</guid><author>current_person</author><pubDate>Sun, 31 Jan 2021 14:04:17 +0800</pubDate><description><![CDATA[前言
接下来讨论一下修改幂等性的第一个方案
数据库幂等性
假设我们有一个 user 表, 每次有人注册就向其中插入一条记录, 我们要保证修改的幂等性, 初步的想法可以有二种: 第一种是先在数据库里查询一下, 如果没有这个 email, 就像数据库里插入一条, 第二种是先删除这个email的记录然后插入一条新的email;
我们先假设查询(删除)操作和插入操作不在同一个事务中, 会出现一种情况大概如下:

删除也是类似的情况, 所以单纯的先查(删)后插的方式不能够解决这个问题.
这时候呢, 可能有的小伙伴会发]]></description><category></category></item><item><title><![CDATA[提高系统稳定性-幂等性-第一篇]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/112723354</link><guid>https://blog.youkuaiyun.com/current_person/article/details/112723354</guid><author>current_person</author><pubDate>Sat, 16 Jan 2021 19:34:49 +0800</pubDate><description><![CDATA[前言
幂等性是个很有意思的概念, 大概是指一个函数被同一个入参反复调用, 每次产生的效果都保持一样, 经常和防重放在一起, 主要用于防止接口的重复提交和防止消息的重复消费或者保持消息的顺序消费和一些其他场景吧, 还有一些学术一些的分类, 比如 select/get 接口是幂等的, 其实这也没啥用.
幂等必要性
这个要讲起来涉及事务可见性, 重试机制, 消息队列特性, 对应的方案有分布式锁, 乐观锁, 状态机等, 所以我打算多水几篇文章, 这次打算单纯讨论下幂等防重方向的必要性
场景一:
比如这个是程序员必备]]></description><category></category></item><item><title><![CDATA[提高系统稳定性-资源有限性]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/112061726</link><guid>https://blog.youkuaiyun.com/current_person/article/details/112061726</guid><author>current_person</author><pubDate>Fri, 01 Jan 2021 16:57:32 +0800</pubDate><description><![CDATA[前言
随着硬件性能的大大提高, 很多情况我们的应用即使写的简单粗暴些, 系统也可以可用的, 只是极端情况下会暴露出问题, 这也就是对于系统稳定性追求的价值所在, 另一个我们充分利用资源, 不造成资源的浪费也可以减少集群所需要的机器数量节约成本.
资源有限性场景
应用存储有限性
内存是一种高速, 造价昂贵的存储设备, 而磁盘速度较慢造价低廉. 内存是通过电流来实现存储, 磁盘是通过磁记录来实现存储. 所以电脑断电后, 内存中的数据会丢失, 而磁盘中的数据在不损坏的情况下可以长久保留
内存有限性
java 内存]]></description><category></category></item><item><title><![CDATA[提高系统稳定性-常见兼容性解决方案]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/111824009</link><guid>https://blog.youkuaiyun.com/current_person/article/details/111824009</guid><author>current_person</author><pubDate>Sun, 27 Dec 2020 18:29:35 +0800</pubDate><description><![CDATA[前言

继上篇文章, 有些小伙伴有些疑问, 比如 A 系统以来 B 系统的接口, 两个系统同时发布最新的代码版本不就不用考虑兼容性了, 但是这个受限于几个情况, 比如需要分组发布, 总共 30 台机器, 需要 10 个一组慢慢发布, 不然流量都打不过来了, 造成系统问题, 或者 A 系统是开放平台外面的系统或者是前端, 也需要给一定的时间来迭代或者灰度发布甚至要永久支持, 这样 B 系统是不得不考虑兼容性的. 不然就像下图这样, 神奇的默契,,,







兼容性场景

接口兼容性解决方案:

修改..]]></description><category></category></item><item><title><![CDATA[提高系统稳定性-兼容性]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/111407259</link><guid>https://blog.youkuaiyun.com/current_person/article/details/111407259</guid><author>current_person</author><pubDate>Sat, 19 Dec 2020 16:53:44 +0800</pubDate><description><![CDATA[前言
兼容性一直是个很隐秘的问题, 在配备良好的研发流程和人员的情况下, 在大流量系统中兼容性问题仍然会偶尔出现, 直接原因在于兼容性的测试复杂性, 隐蔽性, 需要考虑新旧代码共存的兼容性关系, 所以这里梳理了一些情况, 下一篇会整理一些常用的解决问题的方法, 大家还有要分享的情况可以私聊指导我一下
兼容性场景
接口兼容性:
修改/删除现有出入参字段
字段类型: 比如原来的字段是 String 类型, 代表着支付金额, 结果我们把这个字段的类型变成了 BigDecimal, 结果因序列化框架的配置原因, 把]]></description><category></category></item><item><title><![CDATA[springbatch-readersandwriters]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/110731368</link><guid>https://blog.youkuaiyun.com/current_person/article/details/110731368</guid><author>current_person</author><pubDate>Sun, 06 Dec 2020 10:05:26 +0800</pubDate><description><![CDATA[前言
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZTAgAl7-1607220276020)(/assets/2020120501.png)]
Spring Batch 预定义 Readers&amp;Writers
Spring batch 提供了一些预定义的 reader 和 writer, 还有自己的生态, 所以可以很方便的找到合适的通用的 reader 和 writer, 如果不能满足再自己定义.
官方自己的文档在这里:
https://docs.spring.]]></description><category></category></item><item><title><![CDATA[SpringBatch - MetaData, 年轻人不讲武德]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/110296105</link><guid>https://blog.youkuaiyun.com/current_person/article/details/110296105</guid><author>current_person</author><pubDate>Sat, 28 Nov 2020 23:09:10 +0800</pubDate><description><![CDATA[前言
马保国男神, 混元形意太极拳掌门人, 在一次比武中, 年轻人不讲武德, 说打就打, 大意了没有闪而没有使出闪电五连鞭而被大家嘲讽
Spring Batch 统计性
在定时任务的运行过程中, 需要统计一些基本的数据, 比如本次运行的定时任务的入参, 任务读取, 处理, 跳过, 失败, 写入的次数这些关键数据
Spring Batch 例子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
我们先定义一个数据源:
@Configuration
public class DataSour]]></description><category></category></item><item><title><![CDATA[SpringBatch - Validate, 竟然敢摸清华女学生]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/109906042</link><guid>https://blog.youkuaiyun.com/current_person/article/details/109906042</guid><author>current_person</author><pubDate>Sat, 21 Nov 2020 19:39:06 +0800</pubDate><description><![CDATA[前言
清华美院一名女学生称男同学通过包的掩护摸自己的 PP 并将男同学的身份信息公开到社交媒体, 导致男同学险些社会性死亡, 后来查了监控才证明了男同学的清白.
Spring Batch 可校验性
我们经常需要大量的读取数据, 其中有些数据可能不符合我们的预期, 比如从接口读了个用户列表, 年龄字段存在负数, 这种可能就需要中断程序或者跳过处理, 接着处理下一条
Spring Batch 可校验性例子
reader 和 writer 都是原来的, 我们重新写个 processor:
@Component
p]]></description><category></category></item><item><title><![CDATA[SpringBatch - SkipPolicy, 蚂蚁金服变马已今服]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/109505663</link><guid>https://blog.youkuaiyun.com/current_person/article/details/109505663</guid><author>current_person</author><pubDate>Thu, 05 Nov 2020 10:22:27 +0800</pubDate><description><![CDATA[前言
最近蚂蚁金服变成了 ‘马已今服’ 了, 我的朋友圈小伙伴们的表现有捶胸顿足的, 还有转发网抑云的我不配, 没这命这样的歌, 积极的动态也就是上市从来不是最终的目标, 下面我们通过 springbatch 的跳过策略来讲讲这个问题
Spring Batch 可跳过性
因为我们处理数据的时候有不同的需求, 比如有 100 条数据, 处理到第 6 条的时候失败了, 整个  step 都终止了, 这个可能是大多数批处理任务不希望看到的, 大多数的批处理任务是希望当前处理失败的记录下来, 单据补偿, 大多数的数]]></description><category></category></item><item><title><![CDATA[SpringBatch - Reusability, 尾款人讲可复用性]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/109429282</link><guid>https://blog.youkuaiyun.com/current_person/article/details/109429282</guid><author>current_person</author><pubDate>Sun, 01 Nov 2020 16:15:59 +0800</pubDate><description><![CDATA[前言
最近临近双十一了, 大家都变成尾款人了么, 这次主要解释下 Spring Batch 框架的组件可复用性

Spring Batch 可复用性
job 分为 step, step 分为 reader, processor, writer, 增加了不同的 job 之间输入/处理/输出能力的复用性

所以根据这个模型, 不同的 job 可以使用相同的已经定义好的 step, 不同的 step 和使用相同的已经定义好的 reader, processor 和 writer, 后者因为粒度小, 所以这种情况显]]></description><category></category></item><item><title><![CDATA[1024 这天我成功拿到舞蹈厂 offer, 涨薪 50%]]></title><link>https://blog.youkuaiyun.com/current_person/article/details/109257594</link><guid>https://blog.youkuaiyun.com/current_person/article/details/109257594</guid><author>current_person</author><pubDate>Sat, 24 Oct 2020 12:35:30 +0800</pubDate><description><![CDATA[前言
大家 2020 - 1024 (996) 快乐!!!


最近有小伙伴问如何才能进入 bat, 可惜我虽然有过类似的相关的经验, 但是只是运气好而且也没有总结出什么面试必考的问题, 只是初步讲的话, 福报厂会更注重工程素质和底层原理, 舞蹈厂对算法和潜力更看重.


这就让我想起在福报厂听到看到的二次面试经验. 第一次背景是我们一直在使用 jdk5, 其实公司外部大多数公司已经开始使用 jdk8 了, 这时候面试官上来就问面试的同学 HashMap 原理, 这同学回答了个红黑树, 面试官就怒了, 什么]]></description><category></category></item></channel></rss>