jad

记录一次 Arthas 使用

谁都会走 提交于 2020-08-09 22:44:58
【Arthas 官方社区正在举行征文活动,参加即有奖品拿~ 点击投稿 】 前言 疫情期间,在家办公,每天都是 007,感觉自己已经升级为熊猫特工了,心累,身体疲惫!!! 今天终于有时间休息一下,然后记录一下在家办公期间 Arthas 的简单使用。 下载安装 方式一: 推荐使用 IDEA 插件下载 Cloud Toolkit 来使用 Arthas Cloud Toolkit 是阿里云发布的免费本地 IDE 插件,帮助开发者更高效地开发、测试、诊断并部署应用。通过插件,可以将本地应用一键部署到任意服务器,甚至云端(ECS、EDAS、ACK、ACR 和 小程序云等);并且还内置了 Arthas 诊断、Dubbo工具、Terminal 终端、文件上传、函数计算 和 MySQL 执行器等工具。不仅仅有 IntelliJ IDEA 主流版本,还有 Eclipse、Pycharm、Maven 等其他版本。 方式二: 直接下载 启动:java -jar arthas-boot.jar 这里需要重点说明一下:必须使用和目标进程相同的用户,否则启动不成功。 问题背景 本人前天刚上线一个任务。由于某产品手误,误操作了线上数据,要求帮忙把数据删除了。 这尼玛的真坑啊,明显是坑老子。 还好有先见之明,没次做任务的时候多多少少都会写几个后门工具( 不是为了删库跑路,而是这些后门在特定情况下真能应急使用

nginx 策略生效的先后顺序

∥☆過路亽.° 提交于 2020-08-06 08:44:14
nginx 先后顺序匹配: location ~ /api/.*\.(jsp)$ { proxy_pass http://resins; } location ~ \.(jsp|jar|css|SIS|SISx|sis|sisx|dll|jad)$ { proxy_pass http://netsends; } 访问http://test.com/api/test.jsp则使用 resins。 如果: location ~ \.(jsp|jar|css|SIS|SISx|sis|sisx|dll|jad)$ { proxy_pass http://netsends; } location ~ /api/.*\.(jsp)$ { proxy_pass http://resins; } 访问http://test.com/api/test.jsp则使用 netsends。 ps: 匹配符优先级 1.= 2.空匹配符,满足精确匹配时 3.^~ 4.~或~* 5.空匹配符,满足以指定模式开始时的匹配时 来源: oschina 链接: https://my.oschina.net/u/4398177/blog/4317446

Android反编译三件套 apktool 、dex2jar、jd-gui

自作多情 提交于 2020-07-29 10:23:31
1.还是老话下载三件套(点击下载)   或者自己在百度搜索下载    2.使用apktool反编译apk   cd到D:\TESTCODE\android\android反编译三件套目录下   输入java -jar apktool_2.3.4.jar d -f yv.apk -o vpn   yv.apk (要反编译的apk名字) vpn(反编译后存到vpn目录下),注:我的yv.apk和apktool 、dex2jar、jd-gui 处于同一目录下。    3.查看vpn目录下的反编译情况    4.使用dex2jar反编译apk得到Java源代码   将yv.apk解压将其中的classes.dex文件放到dex2jar-2.0 目录下    5.dos命令定位到dex2jar.bat所在目录,输入"d2j-dex2jar classes.dex",效果如下:       6.使用【jd-gui】工具将class文件反编译成java源代码   双击jd-gui.exe 将classes-dex2jar.jar 拖入jd-gui.exe即可      参考:https://blog.csdn.net/s13383754499/article/details/78914592   也有在线反编译的工具 http://www.javadecompilers.com/jad 来源:

线上应用调试利器 --Arthas

▼魔方 西西 提交于 2020-07-29 07:41:01
在之前的文章中,我介绍了使用 Btrace 工具进行线上代码的debug ( https://www.cnblogs.com/yougewe/p/10180483.html ),其大致原理就是通过字节码注入的方式进行辅助排查。   可以说,btrace 已经给我们的开发调试一带来了许多的方便,我们在上面做任何想要的调试!但是,明显, btrace 的使用还是有一定成本的,比如:安装应用,写调试脚本...   所以,今天我们再来看一大利器: arthas (阿尔萨斯) arthas 官网地址: https://alibaba.github.io/arthas/   arthas 的文档真的写得非常棒,可以说一看就会。 但是我还是想写一下一些自己的文档,毕竟我们往往只会用到其中皮毛功能而已。翻阅其所有文档也还是有点浪费了! 一、为什么要用 Arthas ?   其实,这个问题在前面已回答,而且,你为什么要用 btrace ? 同理! 具体理由如下: 可以很方便查到一类是从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 怀疑自己的代码未被部署到服务器,可以通过命令快速验证服务器上的代码就是本地的代码; 可以直接通过 arthas 进行线上debug, 查看方法返回值以确认问题所在; 可以很方便嵌入自己的debug代码,快速验证猜想; 操作完成后

java批量反编译工具

|▌冷眼眸甩不掉的悲伤 提交于 2020-05-09 12:05:35
首先我们需要一个jad.exe 然后在当前目录新建一个bat文件 jad.exe -o -r -s java -d ./code ./**/*.class 在当前目录新建一个code和class文件夹 然后把jar包放到class文件夹里解压 出来双击bat文件执行脚本 code里就会有反编译好的java文件 把java文件导入到工程里 ,通过ctrl+alt+H可以快速定位方法依赖关系,此方法可以大幅提高源码阅读速度 来源: oschina 链接: https://my.oschina.net/u/3678539/blog/4271671

【java】为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作

亡梦爱人 提交于 2020-05-05 15:58:38
在阿里巴巴Java开发手册中,有这样一条规定: 1、foreach循环 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素。 Java语言从JDK 1.5.0开始引入foreach循环。在遍历数组、集合方面,foreach为开发人员提供了极大的方便。使用foreach语法遍历集合或者数组的时候,可以起到和普通for循环同样的效果,并且代码更加简洁。所以,foreach循环也通常也被称为 增强for循环 。 增强for循环的原理是什么?原本的增强for循环,其实是依赖了while循环和Iterator实现的。 2、问题重现 以上代码,使用增强for循环遍历元素,并尝试删除其中的元素。会抛出以下异常: java.util.ConcurrentModificationException 同样的,读者可以尝试下在增强for循环中使用add方法添加元素,结果也会同样抛出该异常。 之所以会出现这个异常,是因为触发了一个Java集合的错误检测机制——fail-fast 。 3、fail-fast 接下来,我们就来分析下在增强for循环中add/remove元素的时候会抛出java.util.ConcurrentModificationException的原因,即解释下到底什么是fail-fast进制,fail-fast的原理等。

Java ArrayList正确循环添加删除元素方法及分析

|▌冷眼眸甩不掉的悲伤 提交于 2020-05-05 14:12:28
在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考。 一、 foreach循环 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素。 Java语言从JDK 1.5.0开始引入foreach循环。在遍历数组、集合方面,foreach为开发人员提供了极大的方便。通常也被称之为增强for循环。 foreach 语法格式如下: for(元素类型t 元素变量x : 遍历对象obj){ 引用了x的java语句; } 以下实例演示了 普通for循环 和 foreach循环使用: public static void main( String[] args) { // 使用ImmutableList初始化一个List List<String> userNames = ImmutableList.of( "Hollis", "hollis", "HollisChuang", "H"); System. out.println( "使用for循环遍历List"); for ( int i = 0; i < userNames.size(); i++) { System. out.println(userNames. get(i)); } System. out

为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作--java.util.ConcurrentModificationException

自闭症网瘾萝莉.ら 提交于 2020-05-05 14:09:42
摘要 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素。 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考。 1 foreach循环 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素。 Java语言从JDK 1.5.0开始引入foreach循环。在遍历数组、集合方面,foreach为开发人员提供了极大的方便。通常也被称之为增强for循环。 foreach 语法格式如下: 以下实例演示了 普通for循环 和 foreach循环使用: 以上代码运行输出结果为: 可以看到,使用foreach语法遍历集合或者数组的时候,可以起到和普通for循环同样的效果,并且代码更加简洁。所以,foreach循环也通常也被称为增强for循环。 但是,作为一个合格的程序员,我们不仅要知道什么是增强for循环,还需要知道增强for循环的原理是什么? 其实,增强for循环也是Java给我们提供的一个语法糖,如果将以上代码编译后的class文件进行反编译(使用jad工具)的话,可以得到以下代码: 可以发现,原本的增强for循环,其实是依赖了while循环和Iterator实现的。(请记住这种实现方式,后面会用到

以我把真实当做我的使命

左心房为你撑大大i 提交于 2020-05-02 09:48:56
sdfsdf 服务网格作为一个改善服务到服务通信的专用基础设施层,是云原生范畴中最热门的话题。随着容器愈加流行,服务拓扑也频繁变动,这就需要更好的网络性能。服务网格能够通过服务发现、路由、负载均衡、心跳检测和支持可观测性,帮助我们管理网络流量。服务网格试图为无规则的复杂的容器问题提供规范化的解决方案 将供应链搬出中国,似乎成了过去两三个月新冠肺炎疫情衍生出的热门话题。 年初新冠肺炎疫情爆发,让中国供应链的生产活动几乎完全停顿,影响席卷全球:苹果的新 5G 有可能因疫情而延期推出,特斯拉新款芯片无法及时交付、陷入“芯片门”纠纷。其余像三星、小米、索尼等著名跨国企业,均受到供应链停摆的影响。 因此,nhfndmixcloud.com/vWgtRK9I6P82RjW/ mixcloud.com/2Io73nNW05T6HzT/ mixcloud.com/ZHyI50x5754TAhl/ mixcloud.com/cF8zuob2yr7pa2y/ mixcloud.com/4OPW2UdZ3M583K4/ mixcloud.com/WSGxir2qe9CC8f5/ mixcloud.com/AfstBI1wwVx2I4u/ mixcloud.com/Zj4wlUB7eZiSw6h/ mixcloud.com/Yc9TS3941YX1xkJ/ mixcloud.com

Java中String、StringBuffer、StringBuilder的比较与源 代码分析

吃可爱长大的小学妹 提交于 2020-05-01 19:30:53
Java中String、StringBuffer、StringBuilder的比较与源代码分析 众所周知String、StringBuffer、StringBuilder是java中常用的字符串类,下面我将从三个方面对他们三兄弟进行对比。 一、 三者的数据组织及其功能实现 大家爱把String、StringBuffer、StringBuilder叫做三兄弟,经过分析代码发现说他俩三兄弟有点不太贴切,从组织结构上说,StringBuffer、StringBuilder更像是亲兄弟,这哥俩儿都有一个妈----AbstractStringBuilder,即都是从AbstractStringBuilder继承下来的,并且大部分“器官”长得都非常像,而String更像是他俩的表哥,组织结构有相似之处,但不完全一样,下面就让我从源代码开始分析一下这哥三。 1、 三者核心代码比较(以上源代码均来自jdk1.7,且有删减) String: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value [] ; /** Cache