粉丝485获赞4014

接下来我们来做一个案例,这个案例叫逢七过,这是什么意思呢?我们来看一下详细的需求。 朋友聚会的时候可能会玩一个游戏,逢七过规则是从任意一个数字开始报数,当你要报的数字包含七或者是七的倍数时,都要说过。为了帮助大家更好的玩这个游戏, 这里我们直接在控制台打印出一到一百之间的满足逢期必过的规则的数据,也就说我们要把满足规则的数据打印在控制台,这样大家将来在玩游戏的时候就知道哪些数据我们要说过了。 好嘞,知道这个需求之后,我们来说一下思路。首先我们要打印的是一到一百之间的 数据,而数据在一到一百之间,我们用货循环就可以实现数据的获取。接着我们拿到这每个数据 要按照规则来进行判断,根据规则我们可以采用一副语句实现判断。规则说了他包含七或者是七的倍数,也就是说他要么个位是七,要么十位是七,要么能够被七整除。假如这个数据是 x, 那么看这里 x 对十取于等等于七,那么这就是个位十七 x 除以十对十取于等等于几,这个是十位十七, x 对七取于等于零,那么这就是能够被其整除的数据。那么只要 x 符合这三个其中的任何一个,他就是满足我们这个规则的,也就是我们将来玩游戏的时候不要说出口的要说过的数据。那么最后我再控制台输出这个满足规则的数据。 好了,看完了这个需求和分析思路之后,我们到代码中来演示一下,打开我们准备好的这个加号文件,在这里有需求和思路的注视信息。 接下来我们来写代码,先来看第一步,用 f 循环实现 f, 用它 x 等于一, x 小于等于一百 x 加,加进来之后,我们 根据规则用 e 辅语句来实现这个判断,来看一下 f 判断他有三个条件,个位是七,十位是七,或者能够被其整除,那么我们就写一下艾克斯, 对十取于他等等于七,或者 x 除以十对十取于等等于七, 或者 x 对七取于等等于零,那么这就是这三个条件,只要 x 满足其中一个条件,这个 数据就是我们要输出在控制台的,那么最后就是在控制台输出我们的数据,艾克斯,好嘞, 那么到这呢,我们的程序就写完了,来右键执行看一下啊,有这么多数据呢,看这个他本身就是七,肯定不能说十四是七的倍数,这个个位包含七,二十一 七的倍数,这个个位包含七,这都是倍数,这包含七,倍数包含七,那么这就不说了。好吧,你看这这十位是七的数据也不能说。 好了,到这关于逢期过的这个一到一百以内的数据,我们就输出在控制台了,将来大家在玩这个游戏的时候遇到这些数据就要说过。好了,到这逢期过这个案例我们就讲完了。

好的,在上节课程中,咱们已经学习了如何定义变量,那么关于定义变量呢,还有一些注意事项,同学们呢需要去了解下这些注意事项,这样的话呢,你定义变量呢,可以定义的更加的自信,更加的熟悉,同时呢,这些注意事项也是一些面试中可能会遇到的,那么这些注意事项有哪些呢? 第一点是这样的,他说某个变量呢,存储了其他类型的数据,这是不是就一个常见的问题啊,比如说我的一个 w 类型的变量,我能不能去乘一个自助串类型的一个值啊,他是不可以的,大知道 w 类型的只能存放什么,是不是一些数值啊, 小数之类的,对吧,虽然不可以成这个字,不串的他会报错的。那么接下来看第二个问题是这样的,就是变了有效范围啊,是从定义开始,然后呢到这个右括 截止同一个范围内部呢,是不能定两个同名的变量,也就说这个 a 级变量是从这行开始,是不是到这个右靠结尾啊,你这里面不能再来写一个硬的 a 级, 这样会出错的。那么接下来看第三个问题是这样的,他的变量定义的时候呢,可以没有出尔折,就定义的时候可以不装数据,但是啊,在使用的时候,你必须要怎么样, 是不是要给错位值啊,否则会报错的。好,那关于这三个问题呢,咱们呢到 id 二中呢?为什么呢?详细的去介绍一下,从这边打开 id 二, 然后到这个位置呢,我们再来新建一个类,那这个类呢,我们把它叫软尾部 dm 二。 好,在这里面呢,我们也要写一个什么呢?论方法,然后呢来记录一下咱们的目标,咱们的目标呢是识别 定义变量常见的问题,并注意。好,那么我们的第一个问题呢,是这样的,他说的是什么类型的变量,他一定是存放什么的,是不是什么类型的数据啊? 好,举个例子,比如说我是一个硬的类型的变量,叫硬的类型,我是不是应该是装一个整数二十一啊?那假如说我在这里面装一个什么呢?装一个自助串,比如说我写上一个叫很大, 他就会怎么样,他就会报错的,你把鼠标移上去,你看他报了个什么错,他说了,他说我需要的类型是不是应该是硬的类型的,但是你提供类型是一个什么?思俊,这个思俊呢,在我们的那个中文里面的含义代表就是自助串,他就说你 金融字母串呢,这样就会爆错,所以我们应该给他一个什么整数是不是就可以了?好,这是第一个是大家注意的什么类型的变量,那么他是存放什么类型的数据,那么接下来看第二个注意事项是什么呢? 第二注意事项,他指的是同一个范围内能不能定义两个重名的变量?不能,那就说同一个范围内他不能定义重名的变量。 那么什么叫同一个范围呢?比如说这个变量定出来,他是从第七行是不是到第十行有效的?对,那么在这一个范围内,你是不能再定一个硬的 a 级的变量的。 那假如说我现在非要去定一个,比如说硬的 a 级等于二十五,他就会报错,那你把鼠标移上去,你会发现他也会报出这样一个提示他, 你的变量 a 级是不是已经定义在这个斯科五是不是范围之内啊?你看别人这个错误报的怎么样?是非常清楚啊,意味着能不能在同一个范围内定义成变量啊?就不能,这是别人的一个语法规定啊,我们是需要注意的, 但是同学们呢,也要注意另外一种写法。另外一种写法是这样的,比如说我写一个 a 级等于二十五,那这个时候报不报错呢?他不报错。哎,为什么这样写?不报错, 这是在定义还是在负值啊?哈哈哈,注意啊,这里是负值,他不是定义,所以怎么样?所以没毛病,对吧? 这里是没有毛病的,那么我们接下来看第三个要注意的问题。第三个要注意的问题是什么呢?就是我们的变量他定义的时候 可以怎么样?不给初始值或者初始化值都可以啊,但是呢,使用的时候呢,他必须有什么,是不是有初始值啊? 否则就会爆错。好,咱们来为朋友们来演示一下,比如说我定一个 w 类型的一个变量,然后呢 是马里代表金额,我一开始不往里面存钱啊,他有没有报错?没有,他没有报错,但是如果你去把这个变量做一些操作,比如说把它修出,看一看,他就会报错。那为什么报错呢?我们把鼠标移上去, 你看他报的错误是这样的,他说你的变量哪里呢?可能没有被猝止化,啥意思呢?他的意思是这样的,他说你把这个变量呢对外进行输出,但是你这个变量里面什么值都没有,那我 输出什么呢?你都不知道他是多少,我怎么知道怎么输出呢?所以你让计算机懵逼了,他是不是就向你报错呀?那他的意思就是说咱们在输出之前应该给他一个什么值,比如说我在这边负一个值 写上,比如说一万块有没有问题?没有没有问题。就像 w 类型小数里面是不是也可以有一些整数的范围啊?他可以放整数的,没有问题的。那这个时候他报,报错了,不报错,或者你也可以把这个值放到哪里去呢? 你也可以把这个纸放在这个毛领的后面,是不是也可以是,这也是一种所谓的是不是粗鲁话。对,好,这两种写法其实怎么样 都是在渔网上都是可以的,那这种打上的值肯定就是是不是一万呢?好,这就是关于变量的一些注意力。那咱们 呢?就为什么呢?介绍到这,那回到我们的 ppt, 咱们来做一个简单总结。那变成电影有哪些需要注意的呢? 第一点是这样的,什么类型的变量?是不是应该乘除什么类型的字变值啊?对,整数变量肯定乘除整数,对吧? 那第二点是这样的,同一个范围变量名能不能重复啊?不能,他不能重复的。第三点是什么呢?变量在使用时一定要用什么数数值,但是定义的时候可不可以不给数数值啊?可以可以的, 而且还要注意是变量存在访问范围。那么这一点呢?我要为什么呢?着重强调一下,什么叫变量要存在访问范围呢? 就是我们的变量呢?从这个地方,第一开始他是指在第七行到第十八行之间可以反问啊,以后在其他位置能不能反问他?是不能反问他的。甚至有些面试题是这么写的,我也可以为他们 展一下,比如有的面积在这个代码里面,他就写的大括号,他可以这么写的。然后在这里面呢?第一个变量,比如说叫印堂蓝本,假如说是一个班级人数是九十人,那咱们在这个大号之内能不能去返回这个蓝本?肯定可以,但是在大号之外能不能返回蓝本呢?你看他就不行的, 是不是已经不行了?我在写的过程中是不是已经在报错了?你把鼠标移上去,他说我根本就不认识狼狗, 原因是因为这个蓝宝从第十九万开始,是不是到这个又大号截止啊?他范围只在这个又大号之类有效,其他地方能不能访问?其他地方不能访问,但是我去访问上面这个 a 级,有没有毛病啊? 他没有毛病,因为 ag 是从第七行开始,是不是到这个右大块截止是可以反问的,但是蓝宝觉得怎么样?是不是就不行了?好,为什么呢? 记录一个笔记,在这边写上一个 amb r, 然后把它怎么样注射起来,在后面写上两个大大的字,报错对不对?好,我们就说完了,变量存在什么呢? 是不是存在访问范围的?好,那么关于变量的一些注意事项和他的一些语法点,我们就说到这。


好,接下来呢,我们来为同学们讲解一个面对象的重点知识叫封装。那么首先来认识一下什么是封装,然后呢再来看一看为什么要有这样一个知识点, 那封装是什么呢?他是我们灭掉对象的三大特征之一。那灭掉对象有哪三个特征呢?他只是封装继承和多肽,那么特征是什么意思呢?特征指的就是这个语言的特点,那就说咱们以后写加了代码,或者说灭掉对象编程的时候呢,都会满足这三大特点来设计程序。 那关于记者和多大的,我们以后再来为什么呢?讲解,咱们先来学一下封装。封装是什么呢?他是隐藏实现的细节,暴露出合适的访问方式。用我的话说呢,就八个字,合理隐藏,合理暴露。那在咱们现实界中呢,也有很多地方呢会用到封装, 比如说这个电插座,他会把里面的内部原件是封张起来,然后对外进行合理的暴露啊,对啊,包括我们人体也是这样,对不对?或者说这个汽车他也是,他会把发动机是不是隐藏起来,但是暴露一个油门是不是让你来反问的,他的目的可能是为了安全性,还有什么呢?方便这种操作。 那咱们成语中怎么去体现风装这样一种思想呢?当咱们定的一个学生内之后呢,我们可能会去是不是记他的一些属性信息呀?那我们可能会去定一个 in a。 好,同学们想一想,我们这个音乐业绩现在是没有做任何的处理的,咱们在外面去创业对象的时候,是不是可以直接去点他这个属性的?对,那我们还可以把一个什么,比如说负二三这样一个年龄是付给他,但其实负二三这样年龄能不能够作为一个有效的业务数据给他呢?其 是不可以的。但是我们的成语现在是不是允许啊?是不是允许啊?我们到 id 二中去写个代码,看一看,咱们这边是不是有一个测试类来讲解封装这个单词呢?是 in capsulation, 那在这边呢,我们来定一个学生内。 好,咱们这些写代码是这么写的,是一个印特 a 级,我们就认为现在这个印的 a 级他是没有怎么样是没有封装的。这就意味着咱们在外面去创业对象的时候呢,是这么去写代码的, s 等于六一个 ust, 然后让他去表示一个学生的什么是不是信息。那假如说我为他的年龄负一个负二十三岁,现在我们的成绩是不是也允许啊? 为什么允许呢?原因是因为我们的程序没有对这个前面上进行所谓的封装好。那么回到我们的 ppt, 也就是说从右脚来看,我们这种代码 风格是不是一种错误的形式啊?那咱们怎么样去做,能够保证这个注入的数据一定安全呢?这个时候呢,我们就需要用到封装,那咱们这个前面量怎么去封装了? 好,他其实呢是要这样去做的。那么第一步呢,我们一般呢会使用一个 private 的关键字来修饰全面量,对其进行隐藏,或者我们把它叫私有。注意啊,一旦这个全面量使用了 private 修饰, 那么这个钱面上呢,就只能在当前那种访问,也就说在其他任何地方是不能直接去点他的, 能理解我这个意思不可以。好,那咱们呢,可以来看一看是什么意思啊?比如说你在这个学内中把这个 enag 的前面加一个 private 的修饰,那么在其他地方你就不能再去点他了,那这样是不是就安全一些啊?好,那 回到我们的 idea, 我们来演示下是不是这样子,我们在这个地方加一个什么 private? 好,同学们看我一加这边是不是就爆错了?就说你不能再怎么样,是不是在访问这个私有的这个 aj 了? 因为这个 a 级词是不是只能在这个类里面访问呐?其他地方不能访问好,不能访问他确实安全的,因为你不能再把负二十三数付给他。但是他是不是安全的有点过分呐? 因为完全是防不了,是不是也不行啊?啊?意味着他是不是要合理的把他怎么样暴露出去啊?那么怎么暴露出去,然后又能够安全呢啊?回到我们的 ppt, 咱们可以这么整,我们可以怎么做呢? 我们可以呢,提供公开的,也就是 pop 那个修饰的 get 和赛特方法道路,其取值和复制什么意思呢?就是你要为这个前面呢在 提供成套的方法,一个方法呢叫 getee, 一个方法呢叫 setee, 而且这些方法全部是使用他们那个修饰的,他们那个什么意思呢?公共的公开的,意味着其他任何地方是不是都能反问这些方法,然后他会通过这些方法对其暴露怎么样?复职是否取值? 好,那他怎么去暴露这个副职的呢?他会写一个趴不了个外的三的一级,然后呢,这个地方有一个 in 的一级,是不是街里传递的这个年龄呢?然后在复制之前呢,做个判断,如果年龄大一点零且小一点两百是不是合法的年龄呢?他就可以把这个年龄是复制给当前对象的年龄。 那如果你的这个年龄没有大一等于零或者小一等于两百,是不是认为这个年龄有问题啊?这样的话安不安全呢?是不是就安全了?安全了,然后他是不是还要有一个方法能把这 直视返回啊?他可以调歌的 a 级,然后把这个 a 级返回出去。那为什么方法在这里可以去访问这个 a 级呢?因为他们在什么同一个类中,可不可以直接去访问这个 a 级? 好,可以了。好,咱们这么讲的话呢,朋友们听起来可能还是没有什么感觉啊,那咱们呢?回到埃利尔,咱们是不是要把这个代码改的既安全又可以用啊?按他刚刚的说法,我们应该先提供一个什么? 是不是提供一个复制的方法?好专业,写法应该叫什么? sat? a 级,就是前面是赛的,后面是这个全变量的,是不是首字母大写来写一下,那就是帕布雷克 void seta 级, 这个方法是用来为前面量进行什么?是不是进行复职的?那我要为前面量复职,你是不是应该把这个值怎么样传给我呀?那么是用 ena 还是用 a 级啊? a 级是不是要见名之义啊?这是规范代码。然后呢,我们是直接把这个 a 级付给当前对象的 a 级还是要先做一个判断,你肯定要先判断,因为这个年龄他是不是有可能有问题啊?怎么判断?如果 a 级 大于等于零,我认为刚出生的是零岁,可以吧?企业怎么样? a 级小于等于两百,我认为人最多是不是能活到两百岁啊?然后呢,在这里面我就可以把这个接到年龄是注入给当前对象的 a 级了, 这样是不是就没毛病呢?那我们再来写个什么 s, s 代表他的年龄,是不是有毛病的?那么在这里写个叫什么呢?年龄非法,然后写个叫应该不是人 到年龄好看的明白不?明白,但是意味着这个非法的数据是不会注入给我当前对象的前面量了。好,那么复制我们准备好之后,人家是不是还要去取出去啊?你现在把它完全锁起来了,是不是也取回来啊?所以我们是不是还要定一个什么方法呀? 对,说的很对,我们是不是还要定一个叫做 get 方法,它是用来是不是做取值的?那 get 方法的规则是怎么写呢?它是一个 get, 家里全面上的首字母大写, 那他是取值的,意味着这种是不是要返回数据啊?年龄的返回值应该是硬的类型,然后叫什么?该的 a 级,小括号,大括号,再把当前对象的全部量 a 级是不是直接返回对,这里为 和可以直接访问这个一角,因为他们在什么同一个类中?那这样我们的一个封装的类是不是就定义好了?他把这个 a 级前面量做了封装,封装成了一套赛的方法和一套什么 get 的方法。那接下来我们是直接去点还是去掉他的跟赛的方法?是不是叫跟赛的方法?而且你也只能掉跟赛的方法,为什么?因为你现在是不是点不了啊?那你要为对象复职的话,你必须掉 c 的一级,是不是这个假如说我现在给他一个二十三岁, 然后你要取值,你一定要掉什么该在一起,他是会把这个年龄返回啊?好,返回的这个整数,那咱们是不是也可以直接把他输出,看一看他的结果呀?直接输出就行了。来我们来支一下,那此时这个年龄对象的这个年龄数据是注入成功还是注入失败?是不是注入 成功?是不是二十三岁了?那假如说你要做一个什么非法的数据负二十三,他是不是会进到这个分支啊?然后再返回这个年龄,是不是还是一个默认值啊?来我们来看一下, 他是不是会打出一个你的年龄非法应该不是人呐。然后这个地方是吧,还是用默认的这个对象里面的 值啊?是不是零呢?好,那么到这呢,其实我们就已经说完了封装这样一个思想,他确实可以实现程序的安全性, 而且呢他把这些东西是不是做的更加的方便访问呢?直接掉塞在一起和盖在一起就可以了。好,回到我们的 pvd, 那么这里呢,我们就已经演示完了这个封装的一个实现步骤,主要是我们这个前面的私有,然后提供该塞的方法。 那明白封张之后呢,我们就需要知道是不是封张具体有哪些好处啊?知道他的好处呢?是这样的,首先第一点是他加长了成绩代码安全性,你的那个负二三是不能再复制进去了。第二点是什么呢?适当的封张可以提升开发效率,同时呢可以让成语更容易理解与维护。 这句话怎么理解呢?你看他已经把这个年龄封装了,那就意味着以后别人再去注入年龄,别人是不是就不需要再做判断了, 他直接一掉出去就完了?对,是不是可以被别人重复使用的,他肯定是可以提升开发效率的,同时他可以让成语更容易理解与维护。 这句话怎么理解呢?以后全球所有的成员都知道啊,我要为对象复职,我调的全部是赛特,要对象取值,调的全部是 get 他的,不需要关于你的距离前面呢,而是要复职就赛特,要取值就 get, 知道吧,他就可以显示所有的这些 复制和取值信息了啊,这是关于封装的一个好处呢,我们就说完了,那接下来呢,咱们来做一些总监。那封装是什么呀? 我刚为他们总结了八个字,叫什么合理隐藏,是不合理暴露。那在情谊中我们怎么去体验封装呢?其实我们的方法本身就是一种封装方法,是不是就把功能包装起来啊?这本身也是一种封装,而在我们的情谊中呢,我们更多的时候是这么去体验封装的,我们一般会把前边量使用什么 pro iv 的,是不是隐藏起来,但这种隐藏是不是过于过于私有了?他还要提供什么 get c 的方法,是不是合法的暴露?在 c 的方法中间,是不是可以对你的参数进行判断,然后再进行注入,是不是更加的安全呢?这就是封装,他是怎么去体现的?那封装有什么好处呢?他加上程序代码的安全性,同时呢,适当封装可以提升开发效, 也可以让我们的程序更容易理解维护。好吧,注意啊,以后咱们写程序的时候呢,可能都会按照这样的风格,是不是来设计代码,因为风装是人家的三个特征之一,就是别人的语言的特点,即使没有意义,你也需要这么去写代码,也要把前面的私有,然后再提供给了这个方法来进行访问, 懂了没有啊?那咱们呢就说到这,那么在上节呢,咱们呢已经学习了一些风装这样的规范,那么接下来呢,我们来为同学们介绍一个叫标准嘉宾的知识点,那么先认识一下嘉宾是什么以及呢,从这个知识点中呢,我们需要掌握什么能力?那么标准嘉宾呢?是这样的, 我们也可以把它理解成实体类,那什么叫实体类呢?比如说我们定义的学生类,他是个实体类,老师类呢,也是个实体类,包括咱们今天上 定的汽车类,是不是也是实体类呀?但是我想问一下朋友们啊,泰斯特叫不叫实体类呀?泰斯特属于测试类, 什么叫实体内呢?就是在现实世界中能够找到实际的个体,学生,老师,汽车是不是都有实际的个体啊?这叫实体类。所以渣病呢,就是一个实体类的概念,那么他的对象呢,是可以用于在成语中分装数据的, 比如说我们创建一个学生对象,是不是可以封装学生的数据啊,创建一个汽车对象,可以封装汽车的数据,那么十里内在哪一地方会用到呢? 比如说我们这里呢,有一个征婚的一个网站,然后你是不是要注册个人的一些资料啊?他里面会弄入你的身高、工作地、学历、月收入、账户、手机。注意啊,这些信息到后台,他其实是通过什么,通过一个诱惑对象来封装的,因为你这个信息是代表 一个用户啊,说他后台会创建一个什么用户对象来封上这个数据,这个时候他就需要先定一个什么,是不是定义这样的一个嘉宾的实体内啊?但是啊,定义这个嘉宾的实体内呢,他其实是要满足一些要求的,就是人家是有规范的,不是你想怎么定就怎么定义, 他的规范是什么呢?第一点是前边量都要使用 private 的修饰,咱刚刚讲过,风装饰灭掉对象的特征是不是就他的一个特点呢?你一定要满足这个特点的设计程序啊,即使毫无意义大也要这么去定义啊,这是相信全球统一的规范,前边浪私有。第二点呢, 他死有之后,你是不是要提供成套的 get 的方法进行合理的暴露啊?第三点呢,大家必须要提供一个无参数构造器,有参数构造器要不要提供呢?有需要有参数构造器的话呢,可以提供也可以不提供,但是无 三个倒计时一定要有的,在实际开发时候,其实无三个倒计,更重要的大以后就会知道这一点啊,暂时你要先记一下,一定要有无三个倒计啊。好,这就是一个标准嘉宾的一个要求,其实这些知识点咱们是不是已经学过了?现在小律师总结一下。好,那咱们呢就到埃地尔中呢,跟同学们去演示一下 这个网站的实体内应该怎么去定义,从这边打开我们的埃蒂尔,在埃蒂尔这个地方呢,我已经建好了一个包,叫嘉宾。接下来呢,我们来定一个实体类, 这个网站的实体内是不是都是用户了呀?所以把它叫 uzer, 代表是用户。那么他刚刚注册的信息,你是不是都应该放到这个位置啊? 当然咱们只定义几个表示一下就行了。那首先他是不是有这个用户的名字?是不是真内幕?那别人的第一步要求是前边上一定要怎么样?私有是不是要加 private 修饰啊?对,好, 这就是标准嘉宾的第一步要求,叫什么成员变量私有,那他还有些什么信息啊?是不是还有身高啊?那就是 private double hide h e i g。 奇, 好,那我们再来写一个信息表示一下,比如说他还关心收入,那是不是应该是 double singery? 是不是薪水和工资啊? 好,到这呢,我们就定完这个前面了,他第二步要做什么事情呢?嗯,他必须提供什么成套的 get 和什么 settle 方法,暴露成员变量的曲值和什么副值。好,我要跟同学们在这边讲一个重点知识,就是你像这些跟 的方法,这是不属于封装的规范呢?他是属于全球的一个标准,实际上像这些技术呢,属于通用技术工具,可以帮咱们自动去写这些代码,根本不需要我们自己去手写,我们直接右键,然后找到什么杰瑞瑞特,这是通用代码的一个菜单栏啊,点一点, 然后这边是不是可以找到 get set 了?对,然后你直接选一下,然后再按住 shift 键,点击有一个全选,再点击, ok, 一下子是不是就出来了?是不是全有了?对, set them, get them set 害的 get ahead。 好,那么写到这呢,可能有同学就会不经常发问的,有同学可能会说, 你这个舌头害的,你不是要对这个身高做交宴吗?那万一人家露露的身高是五米呢?那这个人怎么能长到五米呢?你这是不是要做一个判断才安全呢?好,我告诉你们,其实在实际开发的时候呢,我们以后不会再带线的方法 里面去做教练的,即使是赛的一个 a 级,我们也不会去判断他年龄合不合法,因为未来的话呢,我们都是用网页,那么这些身高数据和年龄数据,他是不是都在网页上选的呀?网页已经限定死了,他不可以乱填数据。你看嘛,我们这个 ppt 里面呢, 这个身高大,看他是不是只有一米三到两米一这个位置啊,你基本上是不能乱选的,你不可能输入一个五米的, 明白我的意思吧?好,那回到我们的 id, 也就是说以后送到这边的数据是不是已经是一个合法的数据啊? 那也就是说什么呢?即使我们这个代码没有做任何的效果,没有任何的意义,你以后是不是还是要这样去写代码啊?这是一种风格,也是满足别人的特点的,就像什么?就像比如说这个广东女孩子,他可能是不吃辣椒的,对吧,他已经是人家这个特 热点,他一开始可能是基于某种原因不吃辣椒,但到最后的最后呢,他已经形成一种习惯,也就是他就是不吃辣椒,然后你了解他的习惯的话呢,按他的风格,然后呢去追求他,你就是一个专业的男朋友。 好明白这个意思了不?所以一定要这样去写代码啊。那么该车的办法停好之后呢?我们的第三步还要提供什么东西啊?是不是必须有什么无参数构造器? 哎,无双个性是不是就是默认的?那也就意味着咱们其实已经把这个标准嘉宾写好了呀,就已经做完了。 当然说我喜欢用什么有仓购到器可不可以呢?就是我一定要有有参数购到器行不行呢?其实也可以,但是有参购器不是必须的,他怎么样他是可以选择的。好 想问一下同学们,像有三个到期是不是也属于通用技术啊?他是接受参数,然后为对象复制,所以有三个到期呢?其实呢,也可以自动生成,你可以直接右键,然后找到什么杰伦瑞特,再找到是不是 constop 啊? 点一下,再按住 shift 键全选,再点击, ok。 是不是跟咱们之前写的有三个到期一模一样啊?但是注意哦,有三个到期,出来之后无三个到期是不是消失了?对,然后出来写个无三个到期啊?是的,那无三个到期呢,他也可以自动生成, 然后右键杰诺瑞塔 consoft cit alone 出来了没有?是不是出来了?说明咱们学了一天,学的是不是全部是快捷键呢?是,所以有什么压力呢?好,这样我们一个标准嘉宾是不是就全部写好了?那么怎么用呢? 怎么用?跟之前有没有区别啊?没有区别,还是一样用。比如说我要创建对象,那我可以调用什么?是不是无参数构造器?是不是创建对象啊?对,怎么做?比如说有的, 然后呢? u 等于六一个 u 字,但是现在这个无参数过道器创业对象,他的里面的前面量有没有具体的数据?没有,他是不是都是用的默认值啊?对,那咱们应该为他进进行什么复职?现在是直接点内幕还是点赛他呀?赛赛的, 你看这就是别人为什么要用封装,人家到要付出一点色的,是不是全部出来了?大家知道可以塞内幕对不对?那比如说这个用户呢?他是一个叫做 黑马吴彦祖,对吧?好,这是他的名字。然后呢再来一个,他的身高可能是一米 八五,是吧?好像是女孩子比较喜欢的身高,然后再来一个他的什么,他的薪水对不对?他可能只有一千块,是不是也找不到女朋友啊?哈哈哈,好,那这样我们的一个用户对象数据做好了, 那么做好之后呢?我们是不是要取他的数据啊?吊锤啊,是不是有点该内幕原封不动的?把这个内幕的值是不是又怎么样?是不是返回你刚注入到当前对象的内幕,再把这内幕返回,那返回的话呢?我们要看到结果,咱们可以直接怎么样? 是不是直接输出看一看二点 sod。 然后呢?还有一个是什么?是不是 get 太太啊?还有一个是什么?是不是 get singer? 是不是代表他的薪水啊?那这样我们就通过无三个到期,是不是做了一个对象出来了?好,看, 这就行了。好,那么接下来我们还有一种方式,创建对象。怎么做?我们是不是可以调这个标准加拿并的哪一个构造器?是不是调好的?有仓构造器啊?对,那这个应该怎么做啊?是不是应该是 调用有参数构造器?是不是创建对象有参数构造器?创建对象的话,他其实这样的,他在做对象的时候,其实数据是不是就已经进去了?有三个数据,第一个是名称,那这个呢?我们写个叫黑马关之琳。 好,是不是这么写的?那他的这个身高呢?比如说一米六九,这是女神身高啊,是男孩子喜欢的身高,然后这个地方的薪水的。好,他的薪水呢?可能只有这 有五百块,但是不是依然可以找到男朋友啊?好,那接下来我们做什么事情?我们是不是可以去看一看他的这些数据有没有?我们是不是可以直接去 get 他的 mem, get 他的,害的 get 他们 siri 啊? 就要他一样是有数据的,因为他通过有三个道气把这些数据是不是注入给当前对象的耐磨,然后你再去干,那么的时候他是不是还是返回当前对象的耐磨?他肯定是有了。来,我们来执行一下。 好,黑马关志林的信息是不是就出来了?那也就说我们通过标准加压并呢?我们可以提供什么?是不是很多种构建对象的方式啊?那开发中大到底有哪种方式去构建对象?都可以, 你要知道可以这么干就可以了。好,回到我们的 ppt, 那我们就简单的总结一下标准,嘉宾有三个必备的要求,前面辆私有 该车的方法,还要提供什么?一个无仓构造器,至于有仓数构造器是可选的,对吧?大以后定义这些标准加大病,也就是这些实体类要按照这些规则来定义,这才是比较规范的代码。那咱们呢?就说到这。

最近看元代码学到一个家外优化的小技巧分享给大家,那就是通过谓语运算来代替取模,这个是我看哈西麦宝的元马学到的,在哈西麦宝设置值的时候,需要知道这个值放到哪个哈西槽位,是通过哈西和书主长度简易进行谓语运算得到的。 这个是我们比较传统的一个分统逻辑,相当于哈西百分好。恩,就这种方式比较常见的,比如说我们之前讲的贝特麦普,然后我们计算这个普则选的时候是这么计算的,比如说我们的这个卡不卡经营发送消息的时候要指定消息的一个分区,然后呢他也是这么计算的, 那在这里也是这么计算的,就是我们的这个分筒的逻辑适用的场景还是比较多的。再给大家举一下例子,就比如说我们 ngx 做复载均衡的时候, ngx 要知道这个流量达到 哪个集群的,哪个机器也可以用到这个分筒。再比如说我们数据库的分表分库,他需要知道我们的数据打到哪个库,哪个表,再比如说我们之后要分享的一 s 的分片都是要用到这个分筒的逻辑逻辑的。 最后呢,再给大家分享一个小案例,就是我们判断机偶数,我们传统判断机偶数是用 a 百分号二是否等于零来判定的,现在我们用谓语运算就是 a 和一进行一个谓语运算是否等于零来进行判定,给大家输出一下结果, 这个结果是符合预期的。大家还知道哪些优化方式呢?欢迎留言。

今天分享几个 ido 中的实用小技巧,快速复制代码。在日常工作中,复制粘贴是一种常用的手段, 比如看到一个非常好的博客,想把代码复制到本地运行一下,你们是怎么复制的呢?看一下我的操作,这边呢,有个加入类,我选择复制之后呢,选中文件夹直接粘贴 他会生成对应的类,还是非常不错的。快速创建文件夹,我想写一个加入类,并且把它放到一个新建的文件夹中,该如何操作呢?新建类的时候直接写出包名,通过点拼接类名, 比如这里我新建一个 test 文件夹,文件夹里面有一个带帽类。看一下我的操作,这边呢,咱们可以新建一个类,写上包名,然后点类名,直接敲击回车,这样就会把包名生成了设置注 是位置 idir, 在没有做任何设置的时候,咱们通过快捷键 ctrl 加斜杠注释代码的时候,会发现默认注释是在首行位置,对于有代码洁癖的小伙伴是非常不爽的,咱们可以通过设置找到 idit, 找到 code style, 找到加,我这边有个 code 占据 recent, 把默认的首行位置去掉,在注视前添加一个空格,这样咱们再添加注视的时候,注视就会与下一行对齐了。最后我用的是 ida 版本是二零二二,小伙伴们还有什么好用的 ida 使用技巧吗?评论区分享一下。

我们如何去快速玩转 idea 当中的远程及 bug 调试这个功能呢?实际上非常有意思啊,想必你肯定遇到过一种情况,那就是咱们在线上或者说在测试环境 我们遇到了一些问题,但是我们在本地测呢,又没有发现,那可能两份代码呢都是一样的,但是数据呢,可能有些差异,所以说在本地呢是发现不了,但这个时候咱们怎么去调试呢?这个功能想必就能够帮助你啊。 在这呢,我们先来看一下,我在这边是创建好了一个测试工程,为了本视频的文档,我已经整理好了,并且与往期内容一起汇总成了二零二三年最新加法面试文档,放在了视频的最后面,坚持看完一定对你有帮助。我在这呢是创建好了一个 spin 部的的工程啊,非常简单,里边呢是有一个接口叫做 hello, 然后呢是有三行打印语句,那最后呢是有一个 return, 非常简单, 因为视频时长的一个问题啊。我在这呢就不为大家去演示打包和放了服气了,我在这边呢已经提前准备好了一个架包,那如果咱们要去配置 idea 的原 简称第八个,他肯定逃脱不了,要对 idl 当中去进行一些配置,对吧?可以看到现在呢,我用的是一个新版的 idlui, 可能大家对这个 ui 呢有些陌生,但是基本的操作呢是一样的,那如果大家想用这个新版 ui 的话,可以去选择 idl 这个位置有一个配置, 然后呢咱们就可以在外观这个部分选择 cui, 然后呢点击启用,然后重新打开掉了就 ok 了。好, ok, 那如果大家想要了解这个新版的 ui 的话,可以给我去点一个赞啊,那如果点赞过三百的话,我可以专门出一期视频来给大家去进行一个介绍。好,那回到主题啊,咱们要去配置的话,首先选择这一块区域,然后呢点击编辑配置, 在这呢,我们可以看到左上角有一个加号,对吧?点击这个加号,然后呢咱们去找到往下滑,找到这个远程 jbm 调试,那选择它。当我们加进来的时候是,首先第一块是名称,对吧?那名称呢,实际上也不太重要啊,大家可以随便取,那第二块呢也不用改,那最关键的是一个主机地 配置,这个地址呢非常重要。那对于网络的要求呢,也是比较严格的,因为我们的生产环境当中,可能环境和我们开发环境是隔离的,我们无法访问到,但测试环境呢,基本上都是可以的,所以咱们呢要视情况而定啊,可能在线上呢是没办法用这个功能,但是在开发测试环境呢,都是可以的。 ok, 那咱们呢就改一下这个主机地址,我呢已经提前准备好了, ip 啊,咱们直接粘过来就可以了。好,那第二个呢是端口,这个端口呢是专门用于本地的 idr 和远程的服务端去进行通信的,这个端口地址呢你随意配置,你想怎么配就怎么配,只要不冲突就可以了 啊。看到下面这一款,这一款也比较重要啊,大家要记一下,因为在不同的 idr 版本,那这一款呢,咱们要去选择,如果你是八,那要选择这个,因为这一段命令行呢,是它自动生成的,所以说会有一些变化,那大家对这一款呢要谨慎一点,我这边呢是用的十七,所以说我选择这个加二九以上就可以了。那最后一个就是使用模块类路径, 这个呢他自己给我选上了,因为本身我这边是一个很简单的 speak 的视力工程,所以说他只找到一个,这个也没有问题啊,但现在咱们很多的环境里面都是用 speakcloud, 对吧?那可能会有很多很多不同的服务,所以说我们要去调试不同的服务的话,我们要在这一块呢去做一个选择啊。 ok, 那最后呢点击应用,再点击确定就 ok 了, 对于 idr 的配置呢,就已经完成了,那咱们呢再打开它去把这一段呢给它去复制出来,这一段待会呢咱们要用到, 好吧,好,那点击取消,那来到了 idr 界面,那接下来呢咱们就去启动他,那我相信大家用过 nix 去启动过交卡项目的话,也大概都能知道啊,非常的简单 啊。第一步如果说我们需要去保留日志的话,我们要输这个 ahof, 对吧?然后第二个是 java, 那第三个呢是刚刚咱们复制的这个职业类目的参数。好, ok 啊,端口呢,咱们就不变了,那然后呢就是杠架,那后面呢就是把咱们架包的这个 名称给它拿过来。好,那最后呢咱们要不要后台启动,如果需要的话,那么就选择后台启动。好,然后呢回车,那咱们呢就看一下日志,好,可以看到这边已经在慢慢的启动了,对吧? 好,可以看到已经基本启动完成了, ok, 那接下来呢,咱们就去演示一下, ok, 那咱们呢就把本地的这个启动,那怎么启动呢?可以看到这个 bug 的图标,那点击调试就 ok 了, 如果这边输出已连接到目标的 vm, 那就说明咱们和远程呢已经连接上了,那对这个端口呢,大家也要注意一下,因为有一些服务的话,你可能没有开防火墙, 只允许了咱们这个程序的端口可以访问,但是你这个配置远程连接端口你没有开启的话,那实际上也连不上啊,这一块大家也要注意一下, ok, 那这一块启动之后呢,咱们就来到这边的演示界面,这个演示界面呢地址我已经提前准备好了,咱们就回车。好,可以看到现在已经能够访问了,对吧?啊?咱们呢就到 咱们刚刚演示的这个 hello 这个接口去,在 return 这一块,咱们打个断点去试一下, ok, 再回车可以看到这边断点已经进了,对吧?那咱们的远程第八个调试呢,就已经成功了,那接下来呢再跟大家去讲几个注意事项,也讲几个大家比较关心的问题啊。首先第一个 我停在本地的断点,那我关闭程序之后,他会不会继续的执行,这个大家肯定比较好奇,对吧?我们来为大家演示一下,那先看一下日志吧, 可以看到这边是打印的,点赞关注,投币点赞关注,对吧?啊?咱们呢就把咱们先把它去进行一个放行啊, ok, 可以看到三个都已经打印出来了啊,那咱们呢就把这个断点改到第一行来验证咱们的一个问题啊,我们就重新启动一下, ok, ok, 咱们来就再访问一遍,可以看到断点已经打在了第一行,对吧?此时咱们呢就把这个 idea 给它 停掉,好,可以看到已经停满了,再来看一下这边的点赞关注投币,这个日志是不是还是出来了,对吧?所以说他的一个结论是,尽管我们停掉了本地断点,但他还是会执行的,因为本地呢,只是做到了一个 debug 的功能,但是他并不能够去干预我们远程的一个执行啊, 所以说尽管我们关闭了我们的远程,但他还是会运行的,这个呢是第一个。那第二个,如果咱们驾包中的代码和本地的代码不一致,那会发生什么样的情况呢?这边第十九行是打印的点赞二十,关注二十一行投币,对吧?咱们就把点赞和投币给他删掉,把断点呢切到第十九行,那咱们再启动一下, 再请求一遍,断点已经进来了,第十九行,我们再来看一下日志,我们会发现他现在一行都没有打印,对吧?那这个问题是什么呢?因为咱们刚刚第十九行是点赞,所以他断点是打在第十九行, 并不是大家关注这一行,这个呢,是为什么三行都没有打印的一个原因啊?所以对于这一点的结论是,我们要尽量的去保证线上和本地的代码是一致的,如果不一致,他会根据行号来断点,他并不是根据我们本地的代码来断点,这个大家要注意,那咱们呢就把那两行恢复回来啊。那再跟大家聊第三个, 咱们的日志打印在哪里呢?我们刚刚已经看到了,在服务端有打印,对吧?那本地有没有打印呢?这跟大家讲啊,谁上本地是不会打印日志的,所有的日志他都是在远程打印的,这个刚刚已经看到结论的就不讲了,再带大家去讲。第四个,先启动他。这个点呢非常有意思啊,就是咱们调试的时候,其他人会不会卡住呢?我们实践出真知啊,来演示一下。 好,第一个已经卡住,对吧?来第二个,好,可以看到并没有返回啊,那对于这一点呢,大家要注意一下,就是如果你遇到了类似的场景,你要去用到这个 idea 远程 debug, 那大家千万注意,如果你 debug 是设 线上环境,你很有可能会造成这一个结构,其他所有线上的用户都防不了了。那这个功能尽量的在测试环境用,尽量不要在生产上使用啊。 好,那关于几点细节呢?包括整个配置呢,都跟大家去讲完了,可能大家会感觉这个远程调试的用处也不是特别大,对吧? 也不能作为一个长期的调试工具,那只能临时的用一下。那对于这一点呢,大家可以就是把这个留个印象,可能在以后某个业务场景,在某个环境里面,你想去做一个远程的 d bug, 那他呢,也可以做你的选择之一啊。那关于今天的内容呢,咱们聊到这就结束了。

好的,在上节课程中,咱们是不是已经安装好了接力 k 啊?那么有了接力 k 呢,我们就可以去开发一个加法的入门程序,这个入门程序呢,我们通常把它叫 哈喽 word, 翻译过来是你好世界的意思。同学们,以后呢,学习其他技术的时候呢,你会发现他的第一个入门程序可能都叫什么? helloword, 那咱们为什么要去讲这个入门程序呢? 好,目的是这样的,目的是想让同学们呢去快速掌握加法程序的开发,然后呢,并且是不能够把它跑起来呀, 而且入门程序是很重要的,好的开始呢,相当于同学们成功了一半。那咱们呢来看一看,这个入门程序呢应该怎么开发出来呢? 其实啊,咱们的加纳程序的开发呢,是需要三个步骤的,那么第一步呢是编写代码,第二步呢是编译代码,第三步呢是运行 代码,那咱们呢来为他们呢详细介绍一下。首先你是不是应该在一个电脑里面去编写一个代码文件呢?那么这个代码文件呢,他其实有些要求的, 他的后缀呢,必须是什么点加法结尾的,否则就会爆错了,而且他的这个名称呢,我们一般建议同学们全部用什么?英文首字母建议怎么样大写?后面的单词的首字母是不是也建议大写啊?这是一种驼缝模式,是不是拱起来的 好,那么这个代码文件写好之后呢,我们一般把它称为什么原代码文件,有了这个原代码文件是不是就能够马上跑起来呢? 其实不是的,因为这个元代码文件里面是不是都是一些高级语言呢?计算机能不能认识他?不能认识我们应该怎么办? 我们应该使用一个叫加纳 c 的工具,是不是对他进行编译啊?那加纳 c 把它编译之后呢?会产生什么呢?他会产生一个自检码文件,这个自检码文件他会以点 cos 结尾, 然后文件名呢?还是你的元代码文件名,这个文件是不是自动生成的?那么这个文件的话呢,他就比较接近于我们的是不是机器语言了,然后再通过什么工具啊?是不是加了工具把它是不是执行起来就可以了?然后呢他就可以驱动我们的计算机帮我们去做一些事情了, 那么这就是我们家嘛程序开发的一个全过程的。好,接下来呢,我来手把手的带着同学们呢去把这样一个程序呢 开发出来,并且把它跑起来。好,那咱们应该怎么做?是不是应该在电脑里面找到一个磁盘位置来写一份代码文件啊?那么到 地板这个位置来呢?首先我们做个什么事情呢?首先我是不是可以新建一个文件夹来放代码啊?那这个文件夹呢?我把叫扣的这扣的翻译过来是什么意思呢?就是代码的意思。那么接下来到里面来,咱们是不是要写这个元代码了?那由于咱们是第一次开发这个加法程序,咱们呢就使用记事本吧, 是不是记住本来写啊?那我们就在这边新建一个文本文档,然后这个名称应该叫什么?对,应该叫哈喽 word 后缀,一定要叫什么呀?加码,对了,一定要叫加码,然后呢回车一下,这样一个代码文件是不是就有了?有了以后呢,问题是他里面要写什么东西,是我们需要注意的, 那到底应该写什么呢?那咱们第一次写成语是不是还不知道写什么呀?好,我的 ppt 呢,已经为同学们呢说了一下,在这个位置, 我们来看一看,那他可以写这样的代码,那这个代码呢?同学们呢,暂时不需要知道他的一个具体的含义,这里面的每个单词的话呢,我后面的课程会为同学们的一一介绍,大家现在是不是照抄就可以了,但是呢,我们还是要做一个简单的了解 他。这个地方第一行呢写的是帕布利克拉斯 hellowword, 这个 hellowwer 的指的就是你的这个是不是程序的名称呢?咱们有的时候也把它叫什么呢?叫类名,至于为什么叫类名,是不是也是后面我们再了解, 反正有的时候我们会把它叫类名啊,那他要求这个类名一定要与这个什么文件的名称是不是一模一样,也要叫 hello 味的。然后呢,这个地方第二行呢,他是一个 方法,我们有的时候把它叫闷方法,那你必须照抄,这样一个闷方法的架子,才代表你这个诚意,是不是可以跑起来。而这个里面呢,他是一个什么呢?他 一个输入语句代表呢打印一个内容出来,打印的是什么?哈喽, word 中间是不是要用双引号围起来啊?那么除了这个双引号中间内容你可以随便写,其他的所有的地方是不是要写的一模一样,包括后面这个分号也要写什么? 是不是英文模式下的封号?而且写完之后呢,你们一定要注意要把它怎么样,是保证一下才能有效啊?好,那咱们呢就回到我们的什么呢 代码这边来,那图片如果记不住怎么写的话呢?你可以把它直接打开是吧?还是用记录本打开啊?啊?打开之后呢,我们可以是来照抄这个代码啊。 好,那应该怎么写呢?是不是应该是哈布雷克克拉斯空一格,写什么?哈喽, word 拿出一对大挂了,那接下来这里面呢?往上走,然后呢?按太不见,是不是退一根, 再写上帕布瑞克斯呆的一个 word 的闷。然后呢?小括号,然后 c 顿中括号 arg s, 然后再写一对大括号 k 格回车,回车。然后再按什么呢?看不见,再往上走。然后呢再按看不见,看不见, 然后再打个什么东西,是不是 c twom, 点 out, 点 rent, 然后小挂分号,这个分号一定要是什么英文模式下的,如果你写的中文模式会报错的,那假如说同学们写中文模式的话,你会发现他这个距离是比较远的, 你看这个光标与这个封号距离远啊,但如果你写英文模式的这个封号是不是很近呢?然后到里面来再写一个什么是商引号,这里面写上哈喽 word, 当然这个 helloword 是不是可以随便写的?好,那么到这,其实我们的一个入门程序是不是就写好了,写好之后呢,你还要把它保存一下,如果你不保存,你看这个地方是不是还是个新号啊? 那保存你可以点击文件,然后呢再点保存,或者按 ctrl 加 s, 那我们呢按一按 ctrl 加 s, 这个信号是不是消失了,代表文件已经保存了,那这样我们一个代码文件写好之后,他是不是就可以直接跑了呢? 当然不是,咱们之间说过还要对他进行什么变异,变异和是不是执行的变异的,他用的是这个加法斯命令,然后呢后面直接代理这个原代码的文件名和这个后缀, 编译完之后呢,他其实会产生一个是不是卡子文件的,然后呢你就可以通过加密力去执行这个卡子文件, 但是啊,你在直音的时候呢,你后面不能再带这个点 cos 是没有带呀,他是可以直接去跑的。好,那咱们怎么做? 咱们是不是就可以去找到这个代码文件,然后是把它跑起来,那怎么找呢?你可以打开我们的什么,是不是打开我们的这个 堕死命令行窗口啊?好,然后呢,在这里面是不是先切到我们的地盘啊?在 cd 到哪里 是扣的,看一看这个代码是不是已经在这个位置,然后你是不是就可以进行这个编辑和执行的?但是啊,咱们去找这个代码的过程呢,是比较麻烦的, 其中没有一种快捷方式可以直接找到他,大家可以直接在这个位置输入什么 cmd, 然后呢,一回车是不是立马就到这来了,这样是不是很爽啊?然后呢,你看这个 代码是不是也在这个位置,那接下来咱们就可以进行编译了,用什么编译啊?是不是用加纳 c 打个代码是不是相当于翻译一下呀?那后面跟什么呢? helloword, 那你写一半,你可以按太普键是补全的。 然后呢,你再回车,回车的时候注意一下这个位置。好,你看我回车一下,如果你代表没有写错,这个位置会产生一个什么袜子文件,这是个自检码文件,是不是已经接近我们的机器语言了,然后怎么办?再用加大命令,是不是在 选择这个哈喽位的点克拉斯,但这个时候带不带点克拉斯了?对,不带了,把它去掉,然后你再一回车, 是不是打印出了 hellower? 好,那么到这呢,我们其实就已经说完了这个入门程序的开发以及到运行的一个 全过程啊,那么接下来呢,咱们来做一个简单的总结。那么开发一个加大程序的话呢,要经历哪些步骤啊? 我们第一步应该怎么办?第一步是不是要是编写,第二步是用加纳森命令变异,第三步是用加法命令运行。那么加拿大编写有什么基本要求呢? 好,其实有这么多要求啊,第一个是文件名称的后缀必是点什么点加法是结尾的。那么第二个要求是文件名必须与代码的内名称是不是一致啊?这个指的是什么?他指的是你这个代码文件,是吧?我们用记住本给他打开 好好指的是这个是不是类名啊?要与这个文件名怎么样?一模一样,否则是会爆错了,我们接下来看第三点。第三点呢,是必须使用一 英文模式下的这个符号,像那个封号是不是应该是英文模式的?好,那么到这呢,我们就为同学们说完了这个入门程序,那么这个入门程序呢,是很重要的,同学们呢需要去练习一下。 这个入门程序呢,你练熟了之后呢,那么你就能够方便是后面这些技术的学习啊,而且以后无论是多么复杂的这个加法程序,他基本上是不是都是经历变异到执行的过程啊?所以这个很重要,大家需要练习一下。

好了,各位同学,下面呢我们再来看一道面试题,这一个问的是你们的微服务是怎么监控的?好,那首先呢,我们先聊一个话题,那微服务为什么要做监控呢? 哎,大家呢,先来看一下这个图,这个图啊就是我们普通的一个微服项目的架构图, 这里边啊有可能就会出现一些问题,第一个问题就是,哎,问题定位,那什么叫做问题定位呢?大家看啊,那目前呢,这些都是我们的客户端对不对?比如说有 pc 端,有 app 端,还有小程序,还有什么安卓 ios 等等, 他所有的想要去请求后台的服务,都要去经过网关,对不对?然后呢再有网 弯曲路由到各个微服务,然后微服务呢,有可能会调用我们的 release 啊, mango 啊,还有 mysocal es 等等,是吧?那问题定位主要指的是当前的你调用某一个微服接口的时候,有可能他是多链路的,那什么叫多链路呢?来,我们来举个例子啊,大家来看啊, 比如说当前 pc 端呢,他要去查询一些数据,首先他去经过了网关,对不对?然后呢找到了服务 a, 那服务 a 呢?又去调了服务 d 和服务 h, 假如说他的接口找的是服务 h, 然后呢服务 h 又去调了服务 k, 那服务 k 呢?又去调用了买 circle, 对不对?你看啊,当前的这个列动里边,他又经过了好几个为服务,对不对?首先是网关,然后是 是服务 a, 服务 h, 服务 k 和买色口。假如说啊,当前服务 k 他挂了,他挂了之后啊,大家想想啊,我们能不能迅速去找到当前这几个微服务,是哪一个微服务出错了呀? 你是不是不太好定位啊?假如说你的服务调用内容更长的话,和这个错误会更难找,是吧?那这个呢,就是第一个啊,叫物体定位,就是说当服务列入中某一个位服挂了之后,我们能不能迅速去定位这个问题,这是我们第一个需求对不对? 好,来看第二问题,这是性能分析,我们的还是说当前的这个链路,比如说先找到服务 a, 然后服务 h, 服务 k, 然后是买 circle, 假如说这个接口的响应时间比较长,超过了两秒钟,那是不是就说明当前的这个服务链路里边有 一个接口比较慢的话,他是不是都会导致这个接口响应时间比较长?我们比如还是这个服务 k, 他比较慢,那我们能不能去迅速去定位当前是服务 k 的问题呢?这个其实也不太好定位,是吧?好,我们呢再来看第三个问题, 这是服务关系。那什么叫服务关系呢?大家呢还是重点看一下下面这个微服务的关系,你看微服务与微服务之间是不是都有可能会远程调用啊?那如果说发生了远程调用,那这个微服务之间的关系啊,我们需要能够清楚。比如说, 哎,服务 a 啊,掉了服务 j, 然后是掉了服务 h, 那服务 h 呢?又掉了服务 k, 那服务 d 呢?也掉了服务 k, 那服务 c 呢?也掉了服务 k, ok 啊,这个关系啊,我们要清楚,那这个关系我们好维护吗?哎,有同学说了啊, 这也没几个微服啊,我们好像能够去数的过来啊,我们也能够去清楚当前每一个服务之间的关系对不对? 假如说你的项目足够大,哎,成这样了,有可能啊,你的微服务是上百个上千个,那这时候啊,再靠人工去维护这个服务之间的关系,很显然是不现实的。 ok 啊,这也是一个问题, 那下面呢,我们再来看第四个问题,就是服务高警。我们呢还是以当前的这一个电容链来举例子啊, 比如说当年还是服务 k 他出问题了,那出问题之后我们能不能迅速去知道这个服务 k 出了问题呢?是吧?这就是我们的另外一个需求,叫告警规则。比如说当这个服务列入出现了问题之后啊,我们要能够迅速定位是哪一个服务出了问题。 ok, 那这些啊,都属于我们那些需求,那这个我们就说明了一下,我们为什么要做监控,因为啊,做监控就能去帮助我们解决刚才我们提出的这四个问题。 ok 啊,那下面呢,我们就来说一下啊,比较常见的服务监控的工具,大家来看啊,这里边啊,我列了四个,第一个是 spring boot 杠饿的命,这个是可以监控普通的微服务的,他的一些状态信息我们都可以监控到。 第二个呢是 purmetus 加狗狗法,这个是比较全面的一个监控的工具,功能是比较强大的。而第三个是 dbq, 这是 spring 可乐推荐的一个链肉追踪工具。 最后一个是 sky working, 它呢也是一个链路的追踪工具。那第一个啊,相对来说比较简单,功能是比较单一的,我们一般也不采用 啊。第二个啊,这个在其中用的是比较多的,但是啊,他搭建起来比较复杂。好,第三个呢,他跟代码是有偶合的,所以说我们就不再用了。 那最后一个 skywalking 相对来说是比较优秀的。最后这两款呢,它都属于猎路追踪工具,那猎路追踪能够做监控吗?也是可以的,他也能够提供一些监控的工具。所以说有的项目中呢,直接去搭建这个 skyworking 去做监控就可以了, 他呢就能够去很好的去解决我们刚才提出的这四个问题。好,那下面呢,我们呢就以 sky working 为例来给大家去说明一下。大家来看啊, 那是个我看看,他是一个分布式系统的应用程序性能监测工具,简称是 apm, 你看这三个单词的首字母啊,一般 说 apm 工具,他指的就是应用程序性能监控工具,他就提供了很完善的列入追踪能力。这个工具呢是之前的华为的产品经理吴胜主导开源。那目前啊,已经被阿帕奇收录,目前是阿帕奇的顶级的项目。 好,那下面呢,我们呢就再来去说一下 skywalk 啊,是怎么去监控我们的微服务项目的。 那在之前呢,我们先去熟悉三个概念再来看啊,第一个呢是叫做服务,第二个是叫做端点,第三个是叫做实力。 哎,我们呢就以当前的这个图啊来说明一下。大家来看啊,比如说啊,当我们去发送请求的时候,是不是会走接口啊?比如说 api user log in, 那这个啊就是接口,那这个接口啊,主要指的就 是端点,叫 endpoint, 就是当前服务对外暴露的功能接口,我们呢就认为当前是一个端点好,再往下是服务,那服务很好理解啊,比如说我们当前的 user service, 还有两个啊,是做了集群的,那 odal service 呢?他也是两个,他也做了集群了。 那每一个微服务啊,就算是一个服务叫 service, 你可以这么理解啊,每一个微服务就是一个服务,包括网关,他也是一个服务。好,这是第二个概念啊。 好,第三个是叫做实力,也叫做物理机。比如说当前啊, user service, 它部署到了二百点一百的这台服务器,那第二台呢?是幺零幺是吧?那欧德的两台,它也是不同的 ip, 就说明啊,当前是不同 的服务器实力,包括我们的 macco, 也算是一个实力。好,那这个就是一些基本的概念啊。 ok, 下面呢,我们来演示一下 sky working 的具体的功能。我们呢,打开浏览器,大家来看啊, 这里边啊,他有很多的选项卡,分别是仪表盘,还有托普图,最终性能分析日志,还有告警。那下面呢,我们一个一个来看,我们先来看仪表盘, 在仪表盘里边啊,他有很多的报表信息在这进行展示。我们先来看第一个啊,有 service load, 这个展示的是目前已经集成此该 walking 的微服务有哪些? 目前呢,有三个微服,分别是黑马 innos a p p 网关,这是一个网关。好,再往下是一个 article, 就是文章的微服, 再往下是一个 user, 目前呢,已经对接完了三个微服务了。好,第二个啊,是 slow service, 就是比较慢的微服务,那排第一的就是文章,第二是网关,第三个是 user, 那排第一的呀,你要知道啊,排第一的相对来说性能是最差的一个, slow 嘛,是不是比较慢呢?好,再往下是 i has, 这个就是不健康的符,是吧?排第一的还是文章好,最后一个是 slow in the point, 这个 in the point 是啥呀? 刚刚我们说过吧,是不是接口对不对?那排第一的还是文章的这个接口是吧?然后排第二的是网关的一个接口,这时候啊,我们有了这些信息,是不是就能快速去定位出当前到底是 哪一个微服务比较慢,哪一个微服务不健康?还有哪个接口比较慢,那我们是不是就可以针对性的进行优化了呀?同学们,没问题吧?那这个呢,其实就解决了我们刚才提出的第一个问题,就是问题定位是吧? 那现在我们就知道了,是当前的这个接口比较慢,我们呢可以把它截个图盯到屏幕上啊, 它呢,是文章中的某一个接口,是 a p i v e article 漏的这个接口对不对?然后呢,我们找到追踪这一栏啊,注意啊,是追踪, 然后找到追踪,大家看啊,那目前呢,排第一的这个接口,就是我们刚刚说的这个比较慢的接口,对不对?你看 a p i v e article 漏的这里边啊,就有它加载耗时的情况,大家来看啊,首先第一个啊, 这个接手他经过了两个微服,第一个是 app get 位,是网关,第二个是阿嚏口是文章,对吧?那这个紫色部分都是网关所加载的时间,蓝色部分呢,是当前的文章加载的时间。 我们呢从下往上看啊,因为啊,最底层的两个是连接数据库的东西,对不对? 你看啊,他们的耗时啊,是非常短的,虽然是有蓝色部分,但是几乎是看不到的,比如说数据库连接这一块,他并没有问题。然后呢,我们再往上看啊,这个他加载的时间就比较长了,哪一个呢?就是当前有一个接口是 spramec 里边的内容。 ok 啊,那这时候呢,我们呢就能够大概去定位出当前是 spread mac 它的问题,因为它比较慢,所以说上面 的时间他也会比较慢。 ok 啊,那这个到底什么问题呢?其实呢,我们呢可以打开代码来看一看啊,我们可以打开 id 在这里边啊,我在这去睡了四秒钟,所以说当前的接口比较慢,是在 sbamec 的方法中去加了一个 sleep。 好,我们呢还是回到浏览器啊,这时候呢,我们就能够知道啊,当前大概是哪一块出了问题。然后呢,目前呢,他已经把范围给你缩小了,你是不是就能够更快的去定位这个问题?然后呢,这个啊,其实就是 问题定位之后啊,我们再去做这个性能分析,来去找到具体的问题进行解决。当然这里边啊,他还能够去展示更多的数据,比如我们的找到数据库连接这一块,你点一下,你会发现啊, 当前这个接口的查询的搜口语句我们也能够展示出来,那假如说啊,是搜口的问题,他的耗时肯定会更长一些。 然后呢,我们呢就可以使用我们之前买 circle 中的一次 plus 执行计划,来去分析当前 circle 到底是哪一块出了问题,是吧,这也算是一个问题的定位啊。好了,那这时候啊,子盖 working 已经帮我们解决了两个问题了,第一个是问题定位,第二个是性能分析, 第三个是服务关系。那服务关系啊,大家呢,可以打开这个 top 图这一栏,大家看啊,这里边啊,就能够清晰的描述出当前服务与服务之间的关系。 大家看啊,这个 user 呢,是我们请求的对象,首先这里边就有一个网关,还有文章,是吧关 气啊,其实已经很清晰了,标红的呢,就说明当前的服务啊,他不是特别的健康。 ok, 这时候呢,你能够清晰的去知道当前服务与服务之间调用的关系了,并且还包括我们服务调用的 myselco 和 reds。 ok, 那这个啊,就是服务关系,这里边如果说你的服务比较多的话呢,也能够清晰的看出来当前服务与服务之间的关系。 这是我们第三个问题啊,就是服务关系好来看最后一个叫服务告警,我们要找到最后一栏啊,叫告警。在告警这一块啊,他有一些告警的规则,这规则有很多,我在这截了个图,大家来看啊, 只要是符合这五个中的其中的一个,他都会进行告解。我们先来看第一个啊,第一个是说在过去十 分钟的三分钟内,服务的平均响应时间超过了一秒,并且超过了三次,他就会告警。第二个是在过去十分钟内,服务成功率低于百分之八十打两次,只要是达到了目前的告警规则,他都会进行告警。下面还有些, 当然在 sky working 中,他还可以自定义这些告警规则,这是默认自带的五个啊,好,这个告警里边啊,他会告诉你一些比较详细的信息,我们就以当前的这个为例,大家来看啊, 他说的什么呢?他说的是当前这个接口,他的响应时间是比较慢的,是吧?所以说呢,我们在这就能够快速去定位当前到底是哪一块出了问题,比如说是哪一个网关,哪一个微服务,哪一 一个接口,是吧?这时候呢,我们就能够快速去知道啊,当前哪一块出了问题之后,我们就可以快速去定位问题,并且呢能够快速去解决问题。这高警啊,并不仅仅啊是在这展示, 他呢还可以针对性的进行发送邮件呢,或者是发送短信,包括也可以对接企业微信,或者是对接钉钉, 然后呢可以快速的去通知到开发的负责人,让他能够快速去修复这些问题。 好了,那这些呢就是 skyoking 它基本的功能了,那下面呢我们回到讲义中来去做一个总结,大家来看啊,那关于 skyoking 的搭建啊,我在今天的讲义中已经提供好了,因为我们讲的是面试内容,我们呢在这就不带着大家一块一块的去详细搭建了, 如果说大家感兴趣呢,可以查看今天的讲义,这里边啊就包含了详细的部署的方式和使用的方式,包括一些高警的配置和代码的开发。 好了,那讲完了 skyoking 之后啊,下面呢我们就可以回答一下面试官的问题了,大家来看啊,面试官问的是你们的未服务是怎么监控的? ok, 那现在呢,我们首先要说的是,我们当时采用的是 skywalking 进行监控的,他虽然是一个列入追踪工具,但是他也能够去做监控,对吧? 那紧接着呢,你给面试官去介绍一下 skywalking 的一些功能,对吧?第一个就是 skywalking 可以监控接口,是吧?服务还有物理实力的一些状态,你可以举个例子,比如说我们在做压测的时候啊, 可以快速去定位当前是哪些服务或者是接口比较慢,然后呢,针对于这些比较慢的服务和接口呢,再做分析和优化。 ok, 这是第一个, 第二个你还可以说告警是吧?比如说当前项目已经上线了,我们对接了 sky vping 之后啊,如果说当前的项目他出了 bug 了,我们呢就可以第一时间给相关负责人啊,去发送短信或发送邮件,让他去 第一时间去修复这个 bug, 而且保证线上服务的正常运行。好朋友们, 这样的话呢,我们呢就讲完了这道面试题了,我同样啊,在今天的文稿里提供了这道面试题的参考回答,欢迎大家去查阅。下节课啊,我们将会继续讲解微服相关的面试题,我们稍后再见。

这一节内容不讲佳话知识,主要和大家一起聊一聊开发工具 id, ea 的使用下载和安装,这个稍微懂一点电脑知识的人应该都知道怎么样去做,这个就不多说了, 加瓦程序一般都是以项目为一个单位,我们之前写的单个加瓦文件只是为了演示加瓦的基础语法,所以说安装好 idea 之后的第一个步骤就是需要去新建一个项目,我们安装好之后,打开 idea 就会看到如下的画面, 这里我们直接点击可谓六破键就可以了。然后接下来会让你选择你的项目的一个类型,因为我们现在只是学习他的语法,所以说我们直接新建加瓦类型的项目就可以了。这里大家可以看到,如果你的电脑安装好了 gdk, 这里是会自动扫描出来的,他会显示 你 gdk 的一个版本。我们继续下一步,这里他会让你输入你项目的一个名称,然后在下面是这个项目在你电脑上所存在的位置。 点击飞利许,可以看到我们项目的一个整体的一个结构了,在最左边是我们项目的整个工程结构,然后在上面是菜单栏,这有很多软件是一样的。然后 src 是我们主要的原码目录, 然后加瓦的话,他会有一个文件栏,这里可以点击切换。然后我们最后写好的加瓦文件是可以点击那个绿色的箭头进行运行的。 我们在 src 下新建一个加瓦文件,就会看到这样的一个画面,呃,在最上面就是我们的一个类名,然后我们写一个慢方法,呃,大家注意啊,这里的大括号、小括号、中括号都是有特殊的一个作用, 大家要记住他们都是成对出现的,开始和结束是一起去表示他里面的内容除了括号还有封号、点号,封号的话是表示这一行代码的结束,然后点的话是表示呃他这个对象所拥有的属性或者方法,我们可以直接点出来, 然后在 id e a 里面你的关键字还有你的取的标识符,他是会有特殊的颜色去标记的,因为我这里装了一个主题,所以说我的关键字是红色的,然后我的内名的话就是蓝色的, 然后我的方法名就是绿色的,然后他的呃制服串的内容就是黄色的。这里大家也要格外的记住一点啊,就是他里面的所有的呃符号,包括小括号、大括号、中括号,然后封号、点号,这 这些都必须是在英文状态下输入的才行,不然你输入中文的这些符号他是会出错的。最后 id a 是有很多的一个输出终端的啊,我们点击呃 绿色小箭头直接运行,一般会出现绕这个终端,他会显示我们绕出来的一些内容,比如说我这个输出了哈罗沃的,他这里会打印出来, 然后会告诉我们这一个进程结束了。呃,如果说是迪 bug 模式运行的话,他会在迪 bug 终端去显示这一个内容,然后大家要注意看他这个终端所输出的一些呃提示, 这些提示对我们去排查代码的问题是非常有帮助的啊,大家一定要记得多看终端输出的内容。呃,好了,那关于 ida 的一些简单的介绍今天就到这里了,大家 可以私下去实际的去使用一下啊,然后 ida 是有非常非常多的一个快捷键的,这个你可以根据个人的一个爱好自己去设置,希望大家都能够熟练的使用这一款非常厉害的工具吧。

哈喽,大家好,我是易峰,欢迎大家上个美食片。那之前呢,我出过很多 ida 的相关的视频,包括很多这个 ida 快捷键操作的视频,对吧?然后很多同学就说我的那个快捷键操作很实用,然后效率很高,但是自己在碰到相同情况下的时候呢,就忘记了我当时讲的是什么样的一个快捷键的组合。 那今天呢,我就为这些同学准备了一个插件啊,我相信安装了这个插件以后呢,你的这个快捷键的使用啊,包括快捷键的这个记忆啊,都会去上一个 level。 那咱们废话不多说,既然是一个插件,就肯定是需要来安装一下,对吧?我们首先来到这个 plugins, 然后我这个地方其实已经安装完了啊,它是这个 key, 呃, promoter x, 就是这个,你这边打开的时候呢,你需要去到这个 marketplace, 然后搜索这个 key promoter x, 然后你点 点击一下这个 install, 把它安装好了以后呢,这个地方可能需要去重启一下你的 ida, 它才会去进行生效。 ok, 那么接下来呢,我们就来看一下这个插件它是怎么样去使用的。比如说我这个地方举了一个简单的小例子啊,就是我们如果说要去啊,对一个变量重命名, 比如说我这个地方有一个 string a 啊,然后我觉得这个 a 这个命名实在是有点不太见明之意,甚至有可能在 core review 的时候,会给我们带来血光之灾,对吧?所以说我这个地方赶紧给他重构一下, 那么通常情况下呢,我们重构可能是,呃这个右键啊,然后找到这个 refector, 然后找到第一个 rename, 然后当我们点击了这个 rename 以后呢,在右下角这个地方有一个 keep promoter x 的提示啊,就是说你刚才的这个 command rename 啊,你其实是可以用这个 shift 加 f 六的快捷键的组合来进行一个替换的, ok, 然后他这个地方还给了你一个这个,呃, disable alert for this shortcut, 就是说如果你在未来的某一天你记住了啊,就是这个东西,他提醒了你很多次啊,你不要再这样去右键啊,一步一步的去找这个 啊,重命名的操作了啊,你只需要一个快捷键的操作, shift f 六,你记住了这个快捷键以后呢,你可以去 disable alert 啊,当然你如果真的是记住了,你就不会出现这个弹框了,对吧,因为你已经使用快捷键了, ok, 大概这么个意思, 你安装完毕了以后呢,他可能会在你的这个右边,也有可能会在你的这个下边啊,反正就是他会有这样的一个快捷入口,然后你点开他以后呢,他这个地方会去统计你所有啊,在过往的这个使用的过程当中去,呃,就是本来可以使用 快捷键,但是你使用了一些鼠标操作的啊,这样的一些东西,他都给你列出来,然后你就可以去基于上面的这些。哎,他的一个总结来看,哦,原来我今天在写代码的过程当中使用了这些 啊功能,然后我都可以通过左侧的这个快捷键的组合去啊替换一下, ok, 并且他还会根据你啊,当时这个 miss 的这个次数啊,就你鼠标的那个次数啊,没有使用这个快捷键的次数进行一个从高到低的排序,那么这个时候呢,你就 啊能够非常清楚的知道哪些快捷键是你使用频次很高,然后又没有去使用快捷键的。 ok, 所以说这个就是大大的提升了我们的这个啊,学习快捷键的一个效率啊。那今天呢,就简单分享这样一个小插件吧,希望对这个快捷键学习有一定困难的同学呢,都可以去 自己安装一下,然后我相信在未来的这个学习会变得更加的轻松, easy, ok, 好的,那以上呢就是本期视频的一个全部内容了,如果你觉得这个视频做的还不错的话呢,请帮忙点赞投币分享一件三连支持我一下,没有关注的小伙伴也可以点点关注啊。 ok, 我们下个视频再见吧, piece。