00:00
大家好,然后这一期我们接着去分享那个watch这个命令,然后我们先去写一个DEMO啊,这个DEMO是我自己在做练习的时候的一个DEMO,我把这个字体调一下。啊,每次都是忘了调。啊,大家看我这个,呃,首先那个我是有这么一个类,呃,这一个类呢,我在这个麦方法里面创建了一个对象,然后这个类呢,有一个方法。呃,这个方法呢,就是呃,在执行这个这个。使这个countt加加啊这样一个啊,主要方面为了观察count这个属性是怎么样啊,什么样,也是这个count属性怎么样的,然后这里面还有一个呃,叫做一个饭的一个方法,我看有没有地方调用啊,好像没有地方调用。啊,那那那那那算了,应该是少写了,嗯。
01:02
呃,这个方法呢。呃,大家看这个for,呃,就是我,嗯之前就是在监控方法那个模方法里面用到的,就是只是它只是简单的抛出来一个异常啊,是这样。OK,呃,这里面我们主要用到的就是。嗯,Test就观察这个属性的,呃这个是呃用来观察呃方法的入餐出餐的,呃这个就是呃讲那个呃杠X就是杠X那个参数的,就是呃方法,就是对象展开的便利深度是这样一个参数的,然后这个饭呢啊就是呃观察方法的呃异常的啊现在我们把它运行起来。嗯,大家看这里面我用的一个clone对象,因为这个呃,Fast它好像是不支持把自己put到自己里面去的啊,之前在用那个net fast身的时候就是可以的,OK,这里边。
02:04
忘了拆开。啊,OK,这就正常了,然后我们去打开我们的啊,阿尔萨斯。嗯,这个也得调一下字体的大小。好。好在这。差点以为翻车了。嗯,我们找一下我们第二个。
03:03
OK,嗯,这是我们已经启动了,嗯,我们首先看它第一个DEMO,呃呃,就是呃观察方法的出和呃出参和返回值。出产。呃,应该是入参和返回值吧。出产出产。呃呃,我还是没理,还是觉得他这个地方应该是写的有问题啊,你看观察方法的出参和返回值观察方法的入参。嗯,我感觉应该是就就入参入参就参数嘛,嗯,先给大家演示一下这个两个其实可以分开的。嗯,观察哪个方法呢?呃,入餐呢,我们就先看这个方法的入参。Watch。呃,这个地方是用在阿尔萨斯里面,是用空格的。
04:00
行。退不了了。我们就观察这个方法的,应该是入菜。呃,大家看这个return object,呃,就是object一个,呃对象的数数,这等于12,我们看,那我们看那个代码里面,呃,这个里面我没有做那个参数化,就是随便写了一个12啊,没有做随机这种处理,嗯,我们就可以看到了,然后我们现在去看,嗯,可以看到这个方法的,哎哟啊。咋回事?啊,不知道为什么这么慢。呃,应该没有写错吧,A return OG。Return OG,对的,不知道这个为什么这么慢,刚才大家看这就是它的返回值是均,然后。
05:05
这个是均值,然后QM,嗯,QMLV。嗯,呃,QMLV,嗯,这尾号是GPSGPS对OK,嗯,这个是这样的,就是说明这个。没问题的啊,然后我们再去看这个表达式啊。嗯,这个表达式呢,就是。其实这已经说过了,这两个字可以拆开的,但是如果你是要多,呃,就是同时去观察多种信息的话,呃就会用到这个表达式,但这个表达式用到的一个问题就是大家看这个。这个string对象呢,是MZT,嗯。MZT的话啊,对,就这个MZT,但是大家看那个它的入餐,呃是这个一个乱七八糟的东西,但呃,所以说这里面呃,我们就需要用到这个杠X这个参数,如果是我们变力深度把它设为二,我们应该就能看到这个。
06:07
嗯,大家看这个result,它其实这个a list,咱们之前去观察那个return的话,其实就是一个这是确定的strange,然后这个是呃的话,入参的话,它是一个的一个数组,这样的它直接就可以到,然后只是12这样的一个状态,然后我们看这个这是a list,然后object。然后你T,所以说,所以说它这个二是以这个list展开的一个。呃,一个级别的啊,不是一个层级的一个数去展开的,而不是说呃,就是以这个对象,就比如说我们嗯,参数对象或者返回的对象的,嗯那种形式呢。啊OK啊,这里面就展示了一个它的杠X杠二是二是从哪个地方开始算。
07:01
呃,这个是嗯观察方法的入参,然后杠X-B啊这个其实呃,对于我这个DEMO来说没有什么用。钢币的话就是在方法调用之前去返回,呃,去观察这个入参。嗯,还是还是挺慢的。嗯,大家看,其实刚刚跟刚刚返回出来值是一样的,但是那个呃,它的第二个就return的对象就是那。啊,是这样的,然后。呃,这个就比较复杂了啊,这个杠S-N呢,大家,呃,杠S呢是。杠开的话,我记得好像是在方法返回之前吧,返回返回之后观察。OK。就是方法返回之后观察,然后这个我觉得没什么,没什么太大用处,然后杠N吧。
08:01
嗯嗯,没什么用,还得还得演示一下。杠B-S杠杠。杠S-N减二。嗯,因为这个杠S这个参数呢,在我这个DEMO里面,其实呃呃影响不是很大啊,因为我没有做这种对对象的对象的一个处理。嗯,还是挺慢的,我们看一下,我们看一下,呃。这个吧,Output这个方法了吧。嗯,这个方法应该会啊,也不行啊,这个对象我们看一下,嗯,Outut的这个方法来返回对象。因为嗯,怎么说呢,我给大家看一下outputd里面用到了好多outut的一个,呃,它里面又掉了自己的存在的一个方法,这看起来不一定,呃很很明显。嗯,这个两次已经调用完了,大家看这就是。
09:03
呃,第一次是呃杠B啊,这次是杠S啊,这个没问题的。然后我们我去。写错了,嗯,Output,我们观察一下output这个传过来的接。Okay。嗯,我们看他的入餐吧,入餐吧。嗯。先看一下入餐吧。因为嗯,可能打印出来比较乱,嗯,因为这些都算是output里面的内容。我主要想想看一下这个接对象的一个展开情况,呃,配合着那个杠X那个参数。的确很慢。
10:01
都挡着我的二维码呢。呃,OK。嗯,这是杠string,这是对的,嗯,杠string,其实我就把杰森转成一个string之后,然后把它抛出来。啊,大家看这地方。港这个。就是杠,呃,Output,杰,Son,它的一个对象是杰森的话,Size等于四,然后是空嘛,是four,这应该是Jason object的一些属性,呃,然后我们去怎么去。呃,用方法过滤掉呢,然后我们看它其实输出这些的话。呃哦嗯,这个也是奥普的两两毫秒,然后这个是呃,零点几毫秒输出,直接输出string还是比较快的,然后这个是四毫四毫秒啊,我们看能不能通过刚才那个。呃,那个表达式。井号cost cost大于四,嗯,我看一下,嗯。
11:09
嗯。嗯,Per,嗯,这个其实这个地方大家是可以放那个方法的,比如说per.sta这是可以的。Cos大于200大于四应该是可以的。我看能不能把那个呃减少不G给它过滤出来。之前是没有这么慢,有可能是因为这一个方法里面sleep比较多。还是因为没有我们,我们再不出来,我们终止一下吧。大于二吧,应该是有大于二。
12:04
啊,大于二大于四,可能是有点儿有点大了,因为Java它运行本来就是越来越快的。嗯,OK,然后大于二,嗯,就出来一个嘛。这哈。大于二,我们把那个杠X设为四吧。我们让他直接去展开,我就想看它那个,呃,Jason里面去展开是什么样子。二好像也没有了。嗯,再调整一下参数吧。大于一吧。诶哦,有了有了有了。OK,嗯,我们暂停一下。呃,大家看这个就是这个就是那个接的展开,然后string,然后string string全都是string,然后这是范对应的,这是呃数字的,然后这个是呃这个这个,然后这好几层全都展开了啊,它就相当于一个展开一样,然后展开到最后大家看这个地方,呃这应该是第一层,第二层,第三层,第四层就展开到呃这个这个数组的第四层,然后这里面其实范里面还是有一个阶层,呃这里面它它的属性就是size等于四,然后AA等于four。
13:36
啊是这个样子的,然后啊这里面。嗯,我看一眼,我看一眼,嗯,啊,OK,都是数字,OK,没问题。然后是这样的。呃,介绍不GK的啊,这样就呃我们就展示完了,然后我们去看一下呃,异常吧,嗯。这个。呃嗯,我们再试一下它那个。
14:04
它那个。嗯,这个表达式。看能不能出来。They。他之前不写也忘了。呃,这个不一。啊,是有异常的。OK。嗯,因为这个比较复杂。因为它呃方法调用比较多,我看有没有别的方法,比如说这个啊,这个也不行,嗯。
15:03
呃,这个演示就先先先这么地吧,这个其实大家看他这个报错异常啊。嗯,表达式是这个,但是然后它这个for了because这个没有。对于这个对象来说是。没有这个方法这个。呃,这个没有这个方法导致的一个,呃,调用异常啊,我们应该可以。啊。嗯,哎,这个还真不好弄,挺麻烦的。嗯,我们看看运气吧。看能不能遇到一个。呃,J第一次就碰见JJK的,它调用的话就会调用,呃,调用的话就会应该会出现,嗯,这那个报错也其实也显也显示出来了,其实我们这个。
16:07
呃,是执行到这个赛方法的啊,这个是没问题的。然后我们去。啊,演示一下下面。啊,这个异常嘛,杠一啊,我们这个应该也是可以拿出来的。我们看一下显示异常的这个方法,嗯,是。呃,饭,嗯,我们。Copy。Copy完之后,Watch。然后。时候也行。啊,其实应该是多写少写点儿,少写点儿这个。乱七八糟的东西,应该把这个sleep什么的去掉,但去掉控制台又会打印会非常快,嗯。嗯,OK,我们这看的其实已经看到了,在呃,Result其实就等于那然后这个处理,嗯,抛出异常还是比较耗时的,然后你看这个异常类型是。
17:11
啊com点饭fair,呃,异常信息是翻子的,然后这是异常的占信息,然后就打印出来了,那你看这个地方啊,其中有一个一下耗时,呃一万多毫秒,应该就一秒多吧。啊,我也这个,我看一下这个这个应该,嗯,不知道为什么耗时会这么多啊嗯。不知道,不是真的,我,我还真不太清楚这个地方为什么耗时会这么多。啊,有机会的话再研究研究吧,啊,这就是就是我们可以拿出来的。啊,OK,然后我们取消,然后我们接着向下延伸,在S。啊,因为我刚才没有打杠一啊,我只是观察except,就看看一下这个命令,如果打上杠一的话,应该就不会看到这些难这些信息了。
18:03
嗯,我先不管它,我们先这个cost,嗯,有一些cost,还有一些parents的,呃,一个调用方法的一个表达式也都是可以用的,直接用点size或者点认识就可以,呃,下面就盖这个关键字,就代表当前对象。嗯,这当前对象呢,诶大家看这边我们就只观察到它的异常,没有上面的乱七八糟的,呃,Result,那这种情况了啊OK。呃,这个异常。OK。哦哦哦,处理异常的会比较耗时,不处理异常的会比较快。嗯,这个90多秒,那个一秒多,而且还有5000多毫秒的,嗯,11万的应该十秒多,那还是这个还是比较比较耗时,但是我我感觉这个耗时应该会很少,因为在我自己的测试的过程中,一个异常处理时间就几百毫秒。
19:08
嗯,像这种几十毫秒的也算正常。但这种几千毫秒的就是非常不正常的,也有可能是因为阿尔萨斯自己的影响。然后我们停掉,然后我们去看这个talk,这个嗯嗯,这个对象。啊,错了。也是可以直接拿出来的,应该他所有的这些关键字都是可以拿出来的。嗯,还在等。嗯。嗯,还有他的属性啊,刚才我们理的有count。OK。嗯,这就就是这个对象的类型就是饭,然后呃count啊,这是count,这count这个是呃140,呃就进行说明,进行了140次I加加的这139啊,这都是对的,然后它有一些log啊,然后sc message啊,然后这些down。
20:16
呃,Up,这都是呃原因,原因就在于这个是继承了这个source code source code继承一些,呃,静态的一些,呃,呃,Strange或者说常量一类的东西,嗯,所以说这里面会比较多啊,然后我们就看到这个,呃,Data systems in for这种,然后我们现嗯这都是静态的信息,然后只有这个count是那个,Count是那个。类属性,我们去看一下这个。嗯,应该表达式啊,啊,这个还需要表达式。
21:00
诶,嗯,大家看到153 154啊是这样。诶不对啊,我这是,哦,这不对。哦,我这是随机休眠了100毫秒,所以说导致。啊,导致刚才那个方法可能是有点,嗯,有一个5000多的,还有一个600多六六十多的这种啊对这个80多的这个啊,其实是一一般应该是用不了这么多的,一一般应该是用不了这么多的,呃,为什么?呃呃,待会我给大家解释一下,为什么有这个十十一秒的,还有这个有一个5000多毫秒的啊这个哦,待会给大家解释一下,我的锅,我的锅哎,大家看后面还有个嗯。嗯,这个这个是20多秒的吗。然后这个这个不再不给大家演示了,嗯,这个我给大家解释一下这个sleep sleep这个方法呢,它是这样的,它呃传参嗯过来这个int大于30的话,它就当毫秒计算,呃如果是小于30的话,就当成秒来计算,嗯嗯,刚才这个sleep,呃呃这个地方可能就小于30的话,就直接sleep秒好多秒了,幸亏应该20几秒也是是正常的,正常的。
22:22
啊,处理一个异常可能就是呃几百毫秒,几十几十毫秒那个,但而且这里面不不带处理异常的,呃呃处理异常的逻辑,处理异常是在这开启或者干啥的这种异常,这里这个方法应该是非常非常快啊,我的过我的过啊之所以为什么要写这个方法呢?就是呃这个方法简单,呃为什么要这么用呢?因为呃在格位去调用这个方法的时候,它是没办法去识别。呃,我不知道它它编译完之后,它其实是没有这没有这一套东西的,它就完全就是当做,呃,没有没有这个东西,没有这一行的啊,它就完全当成毫秒来算了啊,所以说我在因为我平时测试语言是格位嘛,格位我全部都用的是当成毫秒了,嗯,然后就为了演示,然后这个阿尔萨斯的话,呃,这里诶。
23:16
啊,不对,呃,为了演莎尔沙斯的话,这是一个佳话的格拉斯啊,所以说,呃,习惯失败啊,我我的锅,我的锅啊,这里面。呃,就给大家演示完了,然后这个就是watch这个呃命令的一个,呃基本的一个使用啊,非常非常好用啊,挺厉害的啊,如果你在调这个,我觉得这个方法在调试的时候非常非常好用啊,但做性能测试的话,它不如那个呃那个track那个好用一些啊,如果你在呃查bug或者干啥的时候啊,在你们的呃JM服呃服务器上一搞啊,就比那个开发区打日志强多了。因为你去调查调话方法的,还得打日志啊,打日志还得重启,重启去,呃如果是呃管理比较呃规范的话,还得去提测,提测部署重启,中间可能会影响很多人这样的,呃,但如果你掌握了这个。
24:16
啊,阿尔萨斯的这个啊,方法的话啊,你就可以说是哎,装个逼吧,很很厉害很厉害的啊,OK啊,今天就到这儿啊,欢迎大家关注公众号fantasticla,下期再见。
我来说两句