很多同学连 java 工程里面的分层啊,命名规则都不明白,今天我一个视频从前到后给你们讲清楚 java 工程里面每一层每一个类的后缀,比如 service 到 entity, 到底是什么意思啊?第一个 controller 包,是 web 项目中的控制层,负责接收 web 请求, nvc 加包中的 c, 比如外部掉了一个什么接口,这个接口往往就是指 controller 类里面的某一个带 request mapping 注入的一个方法。还有老的项目呢,叫 action 层。第二个是 map 或者到层啊,这个是项目中的数据库操作类, 那以前呢,我们都叫到层 d o 就是 data access, object 数据库访问对象。现在呢,都基本叫 map, 因为 mybites 框架里边的设计习惯就是 map 接口啊,所以大家现在都习惯叫做 map 了,其实呢, map 和到是一个意思。第三层是 service 层, 这一层要特别注意啊,以前呢,我们一般会把业务逻辑都写在 service 层,但是呢,现在一般公司里面会把 service 层分成两个包, 分别是 service, b i z 或者 manage 啊, bo 啊这类名字由 service 层呢来包装到层的方法组成,最基本的数据库单元能力或者抽象能力。然 把业务逻辑都写在 b i z 啊, manager 啊, build 啊这一层,好处呢是职责更加清晰。上层呢,写具体的业务,下层呢,写抽象的业务,由 b i z 层调到 service 层,并且把事物也放在 b i z 层。 第四个是 common 公共的包,一般呢,写一些常用的类,比如美举类啊,公共参数啊这些东西。第五个啊,是 job 或者 schedule 包,这些呢,一般写定时任务的一些类。第六个啊,是 youtube 包,一般呢写工具类,比如日期处理类加解密类。类名呢,基本上都以 youtube 来结尾,方法呢,基本上都是 static 的。 第七个是 entity 包,实体包,一般呢放实体对象可能包含的类有 poo, d o, d o, entity, d t o, v o, b o 这些类。下面呢,我分别解释一下,上面这些 o 是 什么意思啊? poo 九的意思是最基本的 java 对 象,没有任何业务属性或者技术属性。下面什么 po 啊, d o 啊什么都是它的子集。 po, d o, entity 这三个呢,一般是一个意思啊, 指的是数据库,持久对象和表呢,是一一对应的。 d t o 呢是数据库传输对象,一般呢用在跨系统间进行传输, 比如啊, r p c 调用中的参数。 v o 呢是试图对象是 control 了,用来去接收前端参数和返回结果的。所以呢,一般命名可能是叉叉叉 request v o 或者叉叉 respond v o 是 业务对象,一般会组装多个数据库对象。 p o 在 上面说了这个 b i c 层里面去用。 最后说明一下,上面这些 o 啊,只是命名规范和开发习惯,如果你能够 hold 得住的话,那可以用一个 entity 就 从头写到尾。
粉丝5009获赞2.4万

今天,呃,讲一下实际过程中遇到的一这些一些问题吧。对,今天就是测试提给我一个 bug, 那 个问题就是那个接口的话,原来在一个页面上它有一个查询那些相关品类的一些相当于二维数据的一些。呃,柱状,柱状数据吧?对,然后这些柱状数据的话它可以支持导出嘛?然后导出到这个 excel 文件里面,然后就是页面展示的那些 这些时序数据,然后跟导出里面的数据对不上吗?对,然后我就在看啊,因为我那个导出的话,他是这样的,现在是那个展示那个二维数据的 同一个 service 接口,对,因为他他他那个数据对不上,虽然说他那个能导出来数据,但是他那个查询的数据对不上。然后我就在本地测试吗?然后我就发现就是我本地测试的,就原来那个二维数据那个接口的查出来数据 跟线上那个是一样的,但是我这个导出的话是不一样的。对,然后我就看,虽然说我那个导出同用的同一个二维,分布那个三维,但是我这个条件构建的时候,像那个 request 条请求条件再构建构,就构建成一个一层这个 example 那 样一个。呃,构建语句吧。对,然后这个 map 里面是通过这个 example 这个构建语句去查数据的, 然后我就发现它这个导出的时候会在 excel 里面设定了一个这个,嗯, excel 这样一个字段就表明它要导出,但是在那个二维分布那个三维层就没有这样设置嘛。然后我追住它,看它这个 mac 最底层的这个查询呃语句嘛,然后发现它是加了一层缓存的。对,它是通过这个这个页面的这个 page code 加上这个,它通过它把 excel 就是勾勾眼距吗?然后通过 m d 有 加密,然后组装成了一个 key, 那 个稍微层他的话因为是他那个 demo 里面没有这个,他这个 espos 是 设置为 force 嘛?所以说他跟那个导出他最后生成出来的 key 是 不一样的。对,然后我 我是看他这个数据缓存其实有大概有二十个小时,但是我今天我是没有改,正好碰到他那个缓存失效了,然后正好呃他的数据就一致了。对,原来我以为我那个导出的逻辑是有问题的, 我以为他的这个快词构建前前段是出错的啊。对,然后另外一个就是就是新需求吗?办理新需求在一个商品的这个为商品的这个表里面,就是原来的商品表,它是一个宽表吗?就是他这些商品的一些属性,还有一些 呃指标数据都是容易在一张宽表里面。然后现在这个接口的话,他需求就是支持这个常见的商品的跨越,包括一些跨州。现在是原来那那张宽表现在被拆分成了一张维表,加一些时状持续数据表,然后但是这个接口改完之后,我发现其实那个 bug 就是 另外一个页面,然后也在调用 这个用到了这张表吗?但是这张表被拆开了。对,然后现在的话我就需要把这两个拆开的表,然后需要卷一下把它呃重组为一个宽表,然后才能有我想要的质段吗?然后呃我在这个就是卷的时候发现他那个, 他那个围表就像那个商品维度表吗?就成了一些商品的一些属性,这样的一些质量。这个表,你就这个商品围表,他是通过这个站点站点类型还有那个商品 id 生成了一个主键嘛,还有一些分组键,还有这个分布键,然后但是他的时间系列表是通过那个 uni id 进行分布的,对,就是他的这个 tikinkey 是 通过这个 uni id 区域分布的。然后我这这两天表来聚的时候,我就一个表很大嘛,它是一个时间序列这样一个表,然后一个表的话它是一个商品尾表,那我在这个聚的时候,我是让这个大表去聚这个小表,还是这个小表去聚大表嘛?然后因为我就看嘛通过这个 uni id 去聚合 uni id 这个站点类型,加上这个商品 id, 然后构成它的这个唯一标识的商品这个 uid 嘛,然后我就去比较, 然后我看这个分布键,还有这个分组键,这个,呃,我在想这个分布键,它是通过这个任意 id 加时间,然后去构成一个分布键嘛?然后就想它这个分布键应该就是这个相同的这个任意 id, 但它时间不一样,那它就把它放到这个数据库的节点里面, 然后那个尾表的话,它通过这个站点类型,然后这个商品 id 设定了它这个木件和它的一个聚族键。然后那我去的时候,我发现应该是用它这个是时间序列表去聚那个商品尾表, 因为时间序里把它通过这个 user id 加时间去分布的嘛,那那我再聚的时候就相当于我这个大表它是不动的,然后那个尾表,虽然它尾表它没有这个 user id, 它是通过这个站点的商品 id 去分布的,它去处处的。那我在匹配的时候还有大表 user id 去聚这个小表的 id, 那 它这个消耗上要小很多。对,然后 感兴趣的话,我觉得可以看一下这个分布数据库。什么是分布键啊?这个去处键,然后今天的话算是把这个差不多搞懂了吧?对。

你能讲一下什么是 java 的 多肽吗?嗯,多肽,多肽它是面向对象编程的三大特性之一,然后它允许不同类的对象。

今天给大家分享的是 java 中常用的两个分支结构,一个 if, 一个 switch 结构。首先先来看一下 if 结构,我们先来定义一个变量,然后在 if 的 括号里面填入我们想要执行判断的条件, 接着在 if 结构后面添加一个 else 结构。 else 的 作用是当 if 条件不满足时,则会执行 else 结构。 我们把 if 条件改一下,让它进入 else 结构。可以看到当 if 条件不满足时,成功进入到了 else 结构,且执行了 else 里面的方法。 if 和 else 结构中间还可以添加许多个 else if 结构。如果 else if 结构达到一百行起,我们就会解锁一个成就史山代码。 在这里我们可以看到修改条件以后也是成功进入到了 else if 结构。这里解释一下这两个符号的用法,两个表示,且要同时满足所有用连接起来的条件。 两个表示或只要满足其中一个条件就会执行。 接下来说一下 switch 分 支结构。首先我们定义一个 switch 变量,这个变量需要放到 switch 括号里执行。 switch 分 支结构适用于快速判断数字有点积累,所以一般很少使用,或者使用前要经过一系列的处理。 这里可以看到我们给 switch 变量设定了特定的值,所以会执行 case 所对应的方法。 defort 和 else 一 样,当所有条件都不满足时,就会执行 default 方法,需要注意的时, case 之后要 break 打断,不然就会从执行的 case 开始一直执行到 default。 感兴趣的小伙伴可以自己动手尝试一下。本期分享到此结束,下期给大家分享循环的用法。

想写一道难一点的还是想写一道简单一点的呢?我想写也简单的,因为时间战线有点长了。呃,可能有点忘记了呀。那我们开始今天的面试吧。能麻烦你先做个简单的自我介绍吗?好的好的,面试官。我目前是二十六届硕士毕业生,在校期间是通过了软件中级设计师的考试, 并且在篮球赛扎瓦组的比赛中获得了国家级二等奖呢。在实习经历方面,上一段时期主要参与的项目是及时通讯与消息转发平台的项目。其实之前参加实习主卧的项目就是智能写作辅助与评估系统啊。 在消息分发平台的开发中,就是通过责任链模式的重构,还有人脸模式重构,还有引入现成池以及精细化消费者组的管理等方式, 提高了平台的性能呢。并且通过引入了 kernel 技术去实现了异步缓存同步写作辅助。大概就是这样,这个项目中我是通过应用分布式锁去解决这种高病发场景下的数据竞争问题啊。 在技术站上我是比较熟悉 spring 生态,掌握 my circle read 和 ocamq 等技术,对于分布式锁的实现还有 ccodeo 以及高可用系统设计等一些能力, 说白了就是这些方面都有接触。这大概是我的自我介绍。谢谢面试官,我看你现在是还在实习对吗?对的对的,现在已经辞职了。之前为什么选择离职呀?其实可能要好好准备秋招,这是一个方面。 此外就是想自己再沉淀一下自己的一些能力呢。因为那边工作事情挺多的,所以就要经常开会,有点没时间沉淀。我看你是明年毕业对吗?对,是的是的,现在你面试的是一个实习生的岗位,如果要是通过了,你什么时候可以来实习啊?如果通过的话, 我周内就可以到岗呢。没问题的。那我们实习大概要实习多久呀?实习应该是可以到十一月份。我觉得应该没有问题呢,因为学校目前是没有什么事情的。那你十一月份之后有什么打算吗?十一月份之后最少还能实习一个月, 但是也不确定,其实一直可以实习下去的。那如果实习过程当中各方面都不错,我们会有转正的计划,你知道吗? 知道,知道对,好的,那我们看一下你之前做的一些项目,比方说第一个即时通讯项目,我们聊一下这里面你的项目职责和成果呢?比如你提到有一个保障数据最终一致性的方案,能给我简单介绍一下,你是用什么方案保证最终一致性的吗?最终一致性是吗?哦,是通过 word 文件和 rootm q 去做的。对的对的, 这个首先主要通过 nano 技术去当做一个重叠点去监听 vlog 日记文件呀,当有数据修改的操作完了,就会触发 ctrl 它去解析一下修改的一些消息。 其实就是这样的流程,通过解析到消息之后,再去发送给 root m q, 让它去做一个异步的缓存更新,说白了就是为了达到最终一致性的效果。大概流程是这样,等等解析编号对发送到 m q 上,让它去进行更新。谁来做更新啊?更新是消费者现成再去写, 有专门的消费者让他去读取,去重构呢。我先问一下,你说的一致性指的是什么和什么的一致性呀?指的是数据库和 reddis 缓存的一致性呢?那数据一致性为什么这么操作就可以保证一致性?我们解决了之前哪种情况造成的不一致问题啊?之前有一些一致性方案,比如像先更新数据库,再去删除缓存, 做双删这种也可以做到。但是它不如用 kol 和 ocamq, 它的性能是更好的呀。并且 ocamq 它有一个消息的存储能力,能防止丢失,保证性更加可靠一点呢。 那之前那种方案在什么情况下会造成数据不一致呀?那种方案就是如果先更新数据库,再删除缓存,它是有一个时间间隔的,在这段时间间隔内是有数据不一致的问题, 并且它会。呃,不好意思,我有点紧张,我思考一下,我觉得这种方案也是没有问题的,只不过是它可能相较于肯尿和 rockin cube 这种方案性能会更好。它这种确实,而且是更加可靠,是一种更可靠的方案呢。 那为什么之前那个不可靠的?不可靠的点在哪呀?不可靠的点。那你做这个目标是为了保证最终一致性, 对,之前那个方案可能会造成不一致的情况。不一致的问题在哪?因为当时 mental 他 那会直接用这个方案让我去实现的。对,而且我之前也用过那样去做一些监听,所以可能当时没考虑过你说的这个问题。对 对对,是他设计的一个方案。 ok, 我 们看你后面还用了雪花算法来解决分布式 id 生成的问题,对吗?能给我简单介绍一下雪花算法吗?好的好的,雪花算法主要是三部分构成,第一部分就是一个时间戳, 第二部分就是一个机器的序列号,第三部分就是每一秒的序列号,因为它每一秒生成都会进行一个叠加,从零开始的一个序列,那么三部分就构成一个分布式 id。 ok, 那 这三部分分别占多少位?雪花 id 是 多少位啊?雪花 id, 这个我有点忘了,应该是三十二位。 指环 id 三十二位,那这这三部分分别占多少位?三部分一个是时间戳,这个时间戳具体忘了,应该是十八位, 另外两个位数我有点忘了。 ok, 那 当时有多少台机器来生成这种不同的 id 啊?当时应该是有五台去生成。 ok, 那 你是怎么管理这个机器的 id 的? 这个就是使用 deeper, 那 么当这个机器上线的时候去 deeper 是 什么呀? kaper, 就是 一个注册发现中心, 相当于一个管理服务的配置中心呢。那这个序号是谁来分配的?这个序号就是 paypal 去分配的。那每次其实就按照你注册了之后,他就给你一个按顺序给你的号,那么一二三四五这样,你了解他是怎么分配的吗? 他是怎么分配的?比如我换了一台机器,之前有五台机器,有一台机器故障了,把这台撤了,换了台新的机器上去。那这台新的机器的序号是多少呀?我好像知道,如果旧的那台重启, 它的序号是可以保证不变的,但是新的机器内部的逻辑我没了解过,比如 k 盘不了解,我知道它是好像按序给分配。 ok, 那 每台机器上面的序号是怎么做的?每台机器每秒的序号,这个就是一个循环迭代,从零基础开始去往上加,主要依靠的是时间,如果时间超过就需要重置,重置从零开始, 否则就可以按这个序号一直去生成呢。但是我们生,我们生成 id 可能会比较多,对,会有病发问题吗?病发问题,这个是没有的,我认为是没有的,因为这个序列可能是可以用像 rolex 这种关键词去修饰, 那么它一般对于现成是可见的,那么所有的时间点都是用的这一个序列号去生成。其他两部分机器 id 和时间戳是不同的,那么就剩一个序列号,序列号也可以保证唯一性, 我认为是不存在并发症问题的。对,如果对, ok, 好 的,我们再看一些基础知识点相关的问题。好吧。好的好的, 你之前对于数据库了解的多吗?数据库我觉得还可以,尤其 mycoco 我 觉得还比较了解,也比较熟练呢。我们来问两个与 mycoco 相关的问题好吗?你能给我简单介绍一下,你对于 mycoco 里面的联合缩影有了解吗?有了解。 ok, 我 们举个实际的例子,现在有 a、 b、 c 三列创建的一个联合锁影,这个时候我使用 a 等于什么?并且 c 等于什么进行查询,能用到这个锁影吗?如果是建立的是 a、 b、 c 的 联合锁影,是吗?你说这个是用不到的。 对,但是它是用不到联合锁影的。完全用不到吗?对, c 是 用不到的,对, c 是 用不到的。 c 用不到,为什么呀?因为它违反最左匹配原则。对, 像这种问题,其实最好在设计的时候可能就要把 c 放在前面,尽量要去遵循最左匹配原则去设计联合锁影呢?那为什么会有最左匹配原则这个限制存在啊?这个其实就是我自己的理解,因为你创建这个联合锁影,它底层是一个必加数,对,它首先是每一个列,比如 a、 b、 c 都是有序的, 那么他的有序是怎么做的?就是先从 a 有 序, a 有 序之后再去做 b 有 序, a 相等的条件下, b 有 序再去做 c, 那 为什么他会失效?因为当你先用 a 去匹配到一些数据条,但是剩下的 b 和 c 是 无序的,你如果用 c 查询,他是无序的,你除非是先使用 b, 再使用 c。 对, 这是我的理解,所以必须要遵循最左匹配原则。你刚才提到了锁影下推,能跟我说说锁影下推是怎么回事吗?锁影下推我只是听说过,就是当你比如用 a 等于 a, a 和 c 等于某个值查询, 先用了 a 去做了一个筛选,那么 b 是 用不到这个联合锁影的。但是通常情况下他会进行全表查询剩下的数据。那如果用锁影下推,他会先在 c 的 条件下先去过滤一部分,再去查找这个数据,就是过滤 c 等于某个数的这部分。这是我的理解, 我就是觉得他会先用后边的条件做一些优化,具体是怎么过滤的?对没看过具体的实现没有特别深刻的研究, 所以锁影下推我了解它会有一个内部的优化。我想问一下,比如我现在有 a、 b 两个字段,它们分别建立了锁影,我在查询的时候使用 a 等于什么,并且 b 等于什么进行查询,会用到哪个锁影啊?这个用的锁影具体是依靠优化器去做选择, 我记得是因为他只能用到一个,所以就算你这两个都有锁影,他只能用到一个呢?所以他会去判断这两个锁影哪个效率更好,去选择最终的一个执行计划,他是怎么判断?判断过程我思考一下,我记得一个叫做代价计算,是吗?他去判断 cpu 的 使用,还有内存使用,还有 i o 的 代价, 去得到一个最终的代价,判断这两个缩影哪个使用起来效率更高一点。我记得是有公式的,好像它是有三个代价计算的公式,优化器去算出这个值, 最后选择具体的执行方式,我记得是这样,那如果你遇到这种问题的时候,你会怎么判断?这个就是用 explain 去查看他的实际执行计划,一般就是通过看两个字段,一个是 possible piece 他 可能走的缩影,还有一个是 key 实际走的缩影, 这个一般能看出来,对,能看出他具体走了哪个,所以我们再看一个实际应用的例子,我们这边现在在开发一个客户端的 app, 然后要建立一张用户信息的表,存用户的一些信息, 当用户注册的时候就往这张表里添加数据。有一个同学在生成这张表的时候,使用了用户的手机号作为了主键,你觉得有什么样的优缺点呀?首先使用手机号做主键,优点肯定是有的, 优点就是唯一性,做主键主要就是需要唯一性,手机号是可以做到唯一的,但是他他的缺点就是手机号是无序的呢?一般其实建议就是找一个有序且唯一的资段做主键, 无序的话就有一定的坏处,缺点就是在插入数据的时候容易引起叶分裂问题。对,如果是有序的主键插入就是追加处理数据是顺序,插入性能是非常好的,如果导致频繁的叶分裂问题,性能会影响很大。对,还有其他的吗?还有想一下手机号这个字段,其他业务也可能会用到, 其实这种比较通用的字段当做主键也会有问题。什么问题呢?帮我想一下。就是其他业务也会用到这个字段,可能会有什么影响?我有点说不出来,因为我实际没有用到过。 ok, 那 我们平时写代码用的都是 java 语言,用的比较多。重点跟你说一下,如果你来到这边,这边的服务端语言都是 go 语言,过来可能要换到 go 语言, 你对这方面有什么考量吗?语言方面我觉得自己是可以转的,因为转 go 掌握的还挺好的,所以转 go 我 也有一定的信心呢, 反正自己可以自学,我觉得没问题,完全可以跟上。我们聊聊和 java 相关的问题。能给我简单解释一下在 java 里面继承和多肽的概念吗?好的好的,继承主要作用就是代码赋用,它的核心能力就是代码赋用。继承一般就是子类可以继承一个父类, 子类可以继承父类的一些方法,还有属性值。对,就是减少代码溶于,提高复用率,这就是继承,而多肽它的表象来说,父类的指征是可以指向子类对象的,也就是说在调用同一个方法的时候,不同的子类实现产生的行为是不同的。对, 这就是多肽。多肽是比较重要的,它一般是通过抽象类和接口去实现的,通过这种方式来实现多肽。你能给我简单介绍一下 java 里面不同的访问控制修饰符吗? 你是说的那些关键字吗?比如 public, protected, private 这些?对,就是控制类变量方法以及构造方法、访问权限的修饰符,比如说 public, protected, private, 还有 abstract, 可能 abstract 也算, abstract 就是 抽象方法,它的子类必须去实现这个方法,而且抽象类不可以实体化,抽象方法也不可以重写。是这样的,那 public 方法,它的子类是可以重写的。 public 修饰的成员一般是没有什么访问限制的,那 private 修饰的方法是不能被重写的,这个修饰符会影响重写。 那 protected 我 平时可能不怎么用过,但是我记得子类是可以调用副类的 protected 方法不受影响,也可以重写副类的 protected 方法,但是在其他的包下好像就不可以去调用它的这些方法了。对,这是我了解的,我们之后来写段代码。 ok, 我 看你之前刷题量也挺多的,现在有点忘了吗?嗯, 有点忘了,你是想写一道难一点的,还是想写一道简单点的?我想先写简单的,因为时间战线有点长了,可能有点忘记了,怕写不出来。这道题目是这样的,我们现在在做一个客户端的 app, 过程当中有一个版本号的概念,这道题目是给出多个版本号, 想让你从这多个版本号当中找出最大的一个版本号,比较规则都写在屏幕里了,你可以看一下,下面有两组试例,你也可以参考一下这么一道题好吗? 好的好的,我明白了,面试完了这道题。那你先说思路好了,这道题其实因为输入是一个 string 类型对吧?首先可以用点号去分割每个版本号,分割出来之后每一位就是一个数值,然后从左往后开始比较 两个版本号,比较的时候记录当前最大的那个,然后一直和剩下的版本号依次进行比较。比较的过程其实就是每一位上去逐一对比呢,如果前面的位数都相等,长度不同的话,就是修改号更长的那个,也就是没有全比完的那个版本号更大,就切换到这个版本号, 如果前面的位数已经比出来大小了,那么就直接确定结果,不用再比较下一位了。对, ok, 我 们写一下这个代码吧。好的,这个得自己处理一下异常情况对吧?对,最好处理一下。好的,如果不方便的话直接写方法就行, 我可以的。面试官,我写完了,我们完成了对吧?对,好, ok, 我 这边今天没有什么其他问题要问我吗?有的有的,就是我想问一下咱们这个岗位目前具体是做什么工作的? 负责什么业务的呀?我们是做生活服务业线的,其实你可以理解为比如团购,都属于生活服务的范畴。好的吧。好的好的,明白了。 我还想问一下如果我能入职的话,我应该补充哪方面的一些知识啊?那我可能感觉自己还有很多不足,如果你过来的话,在入职之后我们会安排一个专门的 manter, 然后和你一块梳理需要学习的那些知识。如果你现在就想提前了解一些东西的话,可以看看购语言,谢谢。 好的好的,谢谢面试官。行,那我们今天就先到这里。嗯,好的好的,那一会再见。

好,我们来看下面这个问题,那 es 支持哪些类型的查询呢?这是一道来自美团的面试题啊,对应的岗位薪资呢在二十五 k 左右啊,下面我们来看一下这个问题,我们如何来回答。 好,那么这个题目呢,属于一种开放性的问题啊,那其实也比较简单,那么咱们按照不同的划分方式呢?其实答案也不为一, 比如说咱们可以把人呢分为好人和坏人,按照年龄划分呢,也可以分为大人和小孩啊,你也可以按照性别划分划分成男人女人,或者按照国籍划分成中国人啊,外国人或者巴基斯坦人,印度人等等等等。 好,那么咱们 e s 中的这个查询类型呢?首先咱们按照最常见的划分方式呢,比如说咱们按照语言来划分啊,那么 e s 呢,支持多种查询语言呢?首先那么第一种呢,咱们最常见的叫宽瑞 d s l 啊,也就是 拓展 specific language 啊,那它是 es 中啊,支持,咱们 es 就是 es 内部的特殊的一种,呃,查询语言。好,那么第二种呢,就是脚本查询啊, scripting 或者叫 script 都可以。好,第三种呢,是 aggregations 脚本查,这种是聚合查询的语言啊, 好,第四个叫 circle, circle 查询啊,是支持咱们使用那种关系型数据库的查询语句来进行查询。 那么第五种呢,叫事件查询啊, e q l 查询。好,那么如果问到这里啊,面试官可能会延伸的去问你一下啊,那么这几种查询语言的区别是什么呀? 那首先呢,华为 dsl 呢,是解决我们百分之八十应用场景下的这种啊查询语句啊,就是说咱们大部分情况呢,用的都是 dsl 来进行查询, 那么脚本查询呢,它本质上是 es 啊,为我们提供一种专门用于复杂场景下支持自定义编程的这种脚本语言, 那它是一种可编程的语言,它的灵活度是比较高的,它的语法是类似于 java 的 啊,也有那种关键词啊,变量函数等等啊,但是它的性能啊,是不如快入 dsl 的, 也就是说如果咱们能用 dsl 来解决的问题呢,咱们坚决不用 script 好,只是 script 呢,他能解决一些特别复杂的场景啊,那这个就是他们俩的区别,而这个,呃,侵权是呢,他的, 他和这个上面两种最本质的区别啊,就是尤其是和快瑞 dsl 的 区别呢,在于他的他们解决的业务场景不一样,那快瑞 dsl 呢,它是用来解决全门解锁的问题的,而我们侵权是用来解决数据分析啊,这种 数据聚合查询啊,他们的业务场景是有本质的区别的,那这也是他们最本质的区别啊,最大的区别。那 circle 查询啊, 这个 circle 查询的支持呢,本质呢,它是 es, 为一些啊,他不愿意去学习一门新语言啊,比如说 dsl, 他 不愿意去学 dsl 这种脚本啊,这种语言的时候呢,你可以使用 my circle 来进行一些,呃,或者说是大部分场景下的查询。 但是呢,歌口查询,他有一个缺点呢,就是对新版本的支持不是那么友好。还有一种是对复杂的一些脚本呢,可能支持的不是特别好啊,这个就是咱们常见的几种嗯,查询语句的区别啊,那么这个 e、 k、 r 呢,其实咱们用的就比较少了啊。好,那么第二种咱们来看, 嗯,咱们还可以按照场景来划分,按照场景来划分呢,就是说按照业务场景来划分啊,那比如说第一种呢,也是最简单的一种啊,叫 query string, 那 query string 呢?其实咱们在生产环境中用的是比较少的。什么什么情况下来?嗯,什么场景下?什么情况下?咱们可能会用到的 好,比如说咱们看到了吗?当前我打开的这个页面,这个网页呢是叫 panda 的 一个查询的工具啊,叫 devtools 啊,他有一个 ctrl 的 界面,他是在这个界面里边,咱们是可以执行一些一系列的查询脚本啊, 咱们的 qq dsl applications 脚本语言呢等等,都是可以在这里边去进行执行的。那么它有一系列的好处啊,首先呢,它分为左右两个区域,那么右侧可以给我们返回这个响应的上下文,左侧可以支持我们去写一系列的脚本,比如说好,我们查询一些这个缩写的时候呢, 它会给我们去智能的产生一些智能提示啊,比如说我们在写一些代码啊,写,写一些代码的时候呢, 好,除了智能提示之外,还可以给我们进行 smart 啊,智能的格式化。还有啊,当然了,这里边呢,既然有好处,它也有一定的麻烦啊,它有一定的缺点,那就是它依赖于客户端,依赖于我们安装这个 gamba 这个组建啊, 好,那么 charisma 呢,它有一个好处呢,就是说当你有一些比较简单的查询的时候呢,比如说我们 local host 的 九二零幺啊,这是我们的服务地址啊,九二零幺一些比较简单的查询,比如说我想查询,嗯, cat index, 我 们查询当前机群中啊,哎, local host cat notes, 我 们来看一下啊,九二零幺点 com。 好,我们可以方便的看到当前集群中的哪些节点,是吧?或者说我们啊加个微也可以啊,那或者说我们可以查询,比如说刚才的查询语句 product search。 好, 我们同样可以看到当前,呃,这个集群中的 product, 所以 给我们导出一些数据啊, 呃,他的好处呢,就是我们不依赖于客户端,我们可以方便快捷的查询一些简单的脚本,但是呢,他的致命的缺点啊,就是说这里边呢,首先他没有智能提示。那第二个呢,我们一些比,比如说像这种稍微简单一些,要跨越多行的代码,我们写起来很不方便啊。 好,这个是什么时候会用呢?就是我们这个条款比较简单的时候可能会用好,那这个呢,是关于这个 query string 啊,咱们来看第二种呢,就是这个 for text 啊,权威检测。那么这个咱们第三个问题呢,实际上已经讲过了,好, query string 呢,大概有这么几种, match, match, all, 还有 match, multi match 啊,这个知道就行了。还有这个短语查询啊, match phrase, 以及咱们,呃后面要说的这个 time query 啊,精准查询, 还有咱们,呃这个过滤器,这个过滤器和 perry 的 最主要区别呢,在于这个 filter 呢,它本质上是没有这种评分机制的啊,它的查询性能是要比 perry 要高一些的 好,还有这个组合查询,那么组合查询呢?可能面试官呢,可能会延伸的问你一些其他的问题,比如说这个组合查询里边,这个叫 minimum should match 这个参数,它是什么意思?好,那这个啊,这个参数的含义呢?实际上呢,咱们简单的说一下吧。 好,在呃组合查询呢,其实就相当于我们在呃执行 sql 语句里边 where 啊,后面分多个条件啊,比如说 where 条件一, and 条件二,是吧? 好,那么当我执行多个条件的时候呢,这个 should 啊,它默认啊,比如说 should 相当于我们这个 else 句 啊,这个 out 语句里边,比如说里边我查询的多个条件啊,比如说这个,这个布尔查询呢,咱们这样啊,咱们结合代码来说一下啊,因为这里边的面试官可能啊,有很大的概率可能会问到这个问题啊,比如说咱们以这个 program 这个缩影为例,好,咱们在 search 的 时候里边呢,首先 perry 最外层嵌套一个布尔查询啊,布尔查询呢,其实就是组合查询,这里边呢,首先支持四个词句 filter, 然后呃还支持 map, 还支持 master, not, 还支持 should。 好, 那这里边呢,可能唯一可能会出现的一个考点呢,就是说当我们这个 should 这个条件啊,呃,这个子句在查询的时候呢,就相当于我们这里边有多个条件,比如说条件一啊,我这里边就写尾代码了啊, 好,这是这里边第一个中文号呢,就是条件一啊,第二个条件呢,就是条件二,那么当 should 语句出现的时候呢,这多个条件啊,你至少要满足一个啊,比如说我们这有三个条件。 好,那么这个时候呢,我们的查询语句这三个条件你至少要满足一个,就是他返回的结果呢,是至少要满足一个条件好,当我们出现 max 的 时候呢, 好,比如说我们当前查询的是这个 map 啊,而没有 show 的 时候,那么比如说这里边也有多个条件,那么此时呢,这里边 map 语句里边的多个条件要同时满足,这里边有两个条件都要同时满足, 好,那么假如说我们同时有 shell 啊,又有 mac 的 时候,这个情况是比较特殊的,首先啊,我们说一下,这个参数叫 minimum 啊,就是咱们刚才说的这个叫 minimum 啊,在这里边啊, i m i 好, 那么这个参数是什么意思呢?首先啊,在我们只有 shell 的 子句的时候呢,默认情况下,你即便没有这个参数,那么我们当前 shell 的 子句 需要至少满足的条件数呢?默认就是一,如果我们把这个参数配置上,我们给它改成二,那么此时呢, should 子句里边需要满足的条件数呢?至少为二,也就是三个条件,至少要满足两个好,那么有一种特殊的情况呢,就是在 should 子句和 max 的 子句同时出现的时候, 好,那么此时呢,呃,如果一旦 should 啊,那么他遇到了 max 的 语句呢,那么此时的条件这里边三个条件呢啊,至少要满足的条件就是呢,变成了零,也就是说呢,如果 max 的 语句出现的时候,那么 should 里边的条件呢,可以一个都不满足,那是没有关系的, 好,那么,呃,当然了,除了 mode 之外呢,还有 filter 也是一样的啊,好,也就是说呢, shoot 子句遇到了 filter 子句也是一样的,这里边条件可以一个都不满足。好,那么如果我们想让它满足 啊,我们可以加上这个 minimum shoot match, 那 么一旦有了这个参数呢,那么这个 shoot 子句里边需要至少满足的条件个数呢?就是比当前配置的个数, 那么我们配置为一,那么它至少要满足一个条件,那不管是有没有 filter 或者 method 语句都是这样的。好,那这个是唯一在面试中啊,可能会问到布尔查询的一个考点啊, 好了,那么这四个子句的意思呢?就是 max 每个条件都必须要满足, filter 也是每个条件都必须要满足,但是那么 filter 呢,它是不计算相关度的,那么 filter 呢,就是多个条件你可以满足其中一部分,而 max and not 呢,是每个条件都必须不满足。 好,那么这个是他们四个词句的分别的含义。好,那么当然了,你还可以按照地理位置他支持的这种搜索类型啊,还有地理位置搜索,那么地理位置搜索呢?咱们之前 我看一下啊,这个云笔记里啊,我简单说一下,你像这种,呃,矩形查询呢,在矩形中查查找一些点呢,或者说基于你当前位置查询,半径查找 啊,比如说半径五十公里,查找范围有哪些点?你像你的外卖软件呢,或者说你的一些美团或者说一些团购的软件呢,都会有这样的,嗯,查询信息或者查查或者说是查询方式啊, 还有这种多边形的查找,以及复杂地理位置的这种查找,当然了,知道这个地理位置查找这种类型就可以了啊,那么不用在这个里边去探索的过于去深啊,就是探索的太深啊,是没有必要的。 呃,还有一种查询类型呢,叫嵌套查询,那么嵌套了查询呢,其实支持三种啊,一种叫啊,你记住这三种类型就行了,第一种类型呢,叫 object 第二种类型呢,叫啊,我写一下啊,第一种叫 o b j e c t 其实咱们在之前讲呃,第二个问题,讲那个 matting 的 辅料类型的时候说过,第二种类型叫 n e f t e d 第三种类型呢叫 join 啊,好,记住这三种类型的查询就可以了。那么以上呢,就是关于当前的这个,呃,按照咱们看一下啊, 啊,是按照场景来划分啊,那么不同的这种呃查询的场景呢,他应对的这种,呃业务逻辑是不太一样的啊。好,好, 那么下面咱们看啊,按照数据类型划分呢,咱们就可以分为权威查找啊,精确查找以及模糊查找。那么模糊查找呢,主要包含以下几种。 selector 呢,就是智能提示啊,咱们看到的,比如说, 好,比如说百度的这个这个搜索框啊,百度,好,那么我们看到呢,这个,呃蓝色的方块呢,其实就是这个 selector, 它的这个智能提示框啊,就是这个方块。 好,那这是第一种啊,那么当然了,还有像模糊查询啦,分配符啦,生成查找,那么它通通都是模糊查询,而精确查找呢,就是查询指定的值啊。 match 就是 全域解锁啊,大概呢就可以分为这么几类。好,那么下一个问题呢,咱们来看一下这个 time match 有 什么区别。

你能讲一下什么是 java 中的多肽吗?哦,可以,多肽。多肽,它是面向对象编程的三大特性之一,然后它允许同一行为。

啊,请你解释一下什么是 java 中的多肽啊?这个没问题,这个 java 中的多肽是指啊同一操作在不同的对象上面表现出不同的行为的特。

而写完之后,我们回过头来看同学们,在我们这个代码中,我们会发现,除了有一些话,比如说这个 hello world, 我 们是不是可以换一下啊?而还有一些东西非常固定,是不是有一些特殊含义,比如说我们说过,在这个里边,我们用 class 是 不是来定义一个类啊? 那么像这种啊,同学们,在我们 java 中有特殊含义的单词好 统称,统一给他一个名字,这个名字我们叫关键字,叫关键字。而关键字,同学们注意,我们说了,是不是有特殊含义的单词啊?而在这里边,我们哪些东西是关键字啊? 比如说 package, 它是不是含义一样啊?定义我的包吧, class 是 不定义我的类啊,除了它以外, public, 同学们,包括 static, void, 这些都是关键字。 ok, 问,不是啊?问,不是,这些都是关键字。 那么有同学说到这儿说,老师,那 java 中到底有多少关键字啊?好, java 中一共有五十三个关键字啊,但是你注意,同学们,在这五十三个关键字中有两个关键字啊,到目前为止,同学们,他没有使用, 他没有使用啊!同学们,那么这俩关键字我们也称之为叫保留字 ok, 因为它是不是到目前没用哦,所以我们就保留到现在了,我们叫保留字。那么有同学问,老师,这俩是哪俩呀?一个叫 go to, 一个叫 cost, 有 同学可能学过 cr 加,在 cr 加中这俩是不俩关键字? go to 是 不用于跳出路,跳出循环跳,跳到指定循环上。 cost 定为变量吧,可定为常量的吧。而 java 中这俩称为保留字,不使用 ok, 并不被使用,而其他五十一个都在使用,而这五十一个有同学说,老师个数好多啊,是不是我们后边就学这些关键字了? 不是,不用着急,后边这五十一个关键字,其中四十七到四十八个,我们后边都会在这二十几天的学习中,都会去一一的接触到, ok, 慢慢的来玩。那么到底是哪些我们先不用去关心, 现在先知道所有关键字,同学们,是不是一共五十三个。另外同学们,在这给我注意一件事啊,注意一件什么事?就是在扎哇中啊,同学们,在我们扎哇中,我们所有的这个关键字都是 小写的,所有关键字都是小写的。 ok, 所有关键字啊,我们说他都是小写的,这件事给我注意啊,同学们,是这么一个东西,我给你把这个字体变成红的,这样子看着还怎么样, 显眼一点吧。这么一个东西啊,稍微注意也就意味着同学们,在这个里边, stream 是 关键字吗?是吗?不是。 system 是 关键字吗?也不是吧,这俩都不是关键字。 那么说到这,有同学说,老师好,我知道了,在这个里边有特殊含义的是不叫关键字哦,那么除了这堆有特殊含义的以外,还有另一些东西,比如说这个类名, 这个类名同学们,我们会发现他有特殊含义吗?没有,他是不是我们自己手动来给的一个名字, 那么像这种啊,同学们,在程序中我们自定义的这个什么好,自定义的这些名称啊,同学们,我们也给他一个统一的说法,我们叫它叫标识符, 叫标识符啊,同学们,是这么一个东西,我们叫标识符,我们是不是说了它表示自定义的一些名称了,那么既然这个玩意让你自定义 干嘛?人家要给你干嘛?是不给你规矩,一些指定的规则不能让你完全随着你自己的性子来自由发挥了啊,得给你一些规则。而我们标识符的定义到底有哪些规则?来简单说一下啊,他的定义规则 有这么一些,同学们,首先第一个,我们说首先第一个啊,他可以使用什么来定义呢?好,可以使用我们的 字母,数字,下划线以及我们美元的高老符号来组成,可以使用这四个玩意。 那么在这个里边,同学们,注意,我们说了,除了这四个以外的其他的字母,其他符号能用于能用做我的标识符吗?比如说我想用个加号行吗? 不行,我想用个问号行吗?也不行,这些我们说是不行的,只有字母,数字,下滑线和 dollar。 而在这注意一件事,同学们,虽然啊,虽然我们可以使用 dollar, 使用啊,我们的这个 dollar, 但是啊,但是注意一件事,但是我们要干嘛?好,尽量 减少什么使用,因为学到后边我们将会知道,一般我们用刀了来标志我们另一个东西,叫内部类的东西。 后边我们讲到再说,但你先知道我们要尽量干嘛,少用刀了吧,这是这个。然后另外同学们,下划线就不用多说了,他是不是只有那么一个啊?数字也不用多说,一共几个?十个吧,零到九是一共就这么十个,基本数字好, 除了数字以外啊。另外说到数字,这再说一句,同学们,小数行吗?小数行吗? 小数?同学们,他实际上在我们 java 中认为是一个完整的数字吗?不是吧,因为中间有一个啥点,所以小数是不是不行了?注意,数字指的是完整的整数啊,除了数字以外还有啥字母吧?说到字母,学校同学第一反应,老师,是不是英文字母啊? a, b, c, d, e, f、 g, 大 写 a, 大 写 b, 是 不是指的是这些东西啊?好注意,这个字母,同学们,它的范围非常非常广,这个字母指的指的不只是英文字母,而是我们常见语言的基本字母, 而是常见语言的基本字母。什么叫常见语言的基本字母? 什么是常见语言啊?好,英语属于常见语言吧?好,汉语属不属于常见语言?属于。来,同学们,法语属不属于常见语言也属于吧,是不是也属于啊?好比如说同学们,大家学过地理,在联合国是不是有六大官方语言啊? 英法、英法、中俄德,还有另外一个是什么阿拉伯语吧,是不这么几个?这些都属于常见语言,也就意味着同学们,除了这些以外啊,当然还有其他的语言,比如说日语、韩语,虽然不属于联合国的法定语言,是吧? 那么上线像这些同学们都属于说常见语言啊,而只要是这些常见语言的基本字母,我们都可以作为标识符来玩。 都可以啊,我们可以来试一把。同学们,比如说我来定一个类,我给这个类起名啊。同学们,我说给这个类我要起个名字来,我来输入点特殊的符号,比如说我们说了什么常见语言的基本字母啊,好换个语言啊。呃,希腊,希腊不认识,拉丁不认识。 好,换换俄语啊,俄语我还认识一点来,同学们,我说换成他呀好,我说给个他呀。同学们,这是不都这是不俄语啊。同学们,好,我换成俄语来看。同学们,我来翻译一把来,我翻译完了,报错了吗? 没有来,在我一盘下同学们,在我一盘下。这个时候在我 c n t d o e x e r 这个包里同学们,好,我好像没有保存是吧稍等啊我好像是没有保存的。 来重新编辑嘛编辑完是不是还是没报错啊?同学们,然后啊,来看,在这是不多了一个 class 有没有报错,这是英语吗?不是说不是啊,这么一个东西啊。所以在这你注意同学们,我们这个玩意它包含的是常见语言的什么 基本字母,也就意味着你说,老师我大学学的是法语,你可以用法语命名,可以, ok, 那 他说,老师我英语不好,我用中文命名行不行?可以, 因为汉语属于什么常见语言吗?也因此你可以使用中文什么命名?这是 java 的 另外一个命名特点啊,就是我们可以什么使用中文命名啊,但是同学们,不推荐, 但是不推荐啊,原因很简单,你将来出去面试也好,你将来开发也好,你接触的所有的标识,所有的标志服务。同学们,人家取的名字不会有英文,不会有中文的 全是什么英文?有没有说,老师我英文实在不好怎么办?用汉语同学们,你会让人家觉得你很 low 的, ok, 因此怎么办?同学们,好,这时候你可以干嘛?用什么拼音吧好用拼音第一眼看是不还是觉得太 low 哦,可以干嘛? 很好缩写同学们,每个拼音的首字母吗?每个拼音的首字母总行吧,我听说老师这就不 low 了吗?没事,有一个网站在这支撑着呢,叫幺二三零六,这个网站啊,同学们,熟吧? 啊,这个网站,网站你要是不熟的话,那那,那我就无话可说了啊。来,同学们,幺二三零六是不是更更很熟啊?好,幺二三零六,当年命名的时候,比如说, 比如说,当年念研的时候出现过这种名字,叫 t s, l c, 或者叫 tk l c 什么意思啊? 好, k, s 是 什么?你买票的时候有没有碰上 k 开头的 k 开 k 打头的火车。 k 打头的火车叫啥?快速列车吧。 t 开头的是不是叫特快列车?明白了吗?明白了吗?当年幺二三零六就这么干过,所以不要觉得自己 low。 好 吧, 这么一个东西啊,你可以使用中文命名,但是我们不推荐中文命名, ok, 尽量使用英文啊。另外,同学们在命名的时候还要注意,我们虽然可以使用中文,可以使用字母,但是你不能同学们使用我们的关键词, 因为关键字是不是已经被人家 java 内部占用,有了特殊含义了,所以你不能用。另外,大家起名的时候还有另外一个非常重要的点,就是强制要求数字不能同学们,开头 不能开头 ok, 也就意味着我写成 demo 二,我这样子起名是怎么样没问题的,但我写成二 demo 这样子起名就是什么 错的? ok, 这样起名就是错的啊,只能是字母下划线或者刀了,开头就是不准数字开头里边可以有数字,但数字不能开头, ok, 这么一个东西啊。然后最后一个同学们,在我们 java 中非常重要的一个点就是我们 java 同学们严格区分大小写, 我们要区分大小写啊,这件事是严格区分的,这也就意味着什么?同学们,比如说我听以为一个类叫 demo 和 demo, 我 是不是写成这个样子,一个小写形式,一个大写形式。同学们,这俩是同一个标识符吗? 不是,因为我们区分大小写。有同学说,老师,如果我只是一个字母不一样呢? 我这是几个标示符,两个,两个,只要这俩有一点点不一样,我们就说他就是俩标示符,那么这是这个,我们要区分大小写。而还有最后一点,也是你要遵守的一个一个不成文的规矩,要尽量的做到建明之意, 要尽量做到叫见名之意的这么一个东西。这个句话,同学们,这句话啊,我敲完你就应该明白什么意思,要求干嘛? 要求干嘛?你写完这个东西,别人看到这个名字就能明白这是干嘛的,比如说我定义了一个类叫 teacher, 好, 我写完这个类。同学们,你看完你就知道这是一个代表什么的类, 老师的吧,是不代表老师的,那么你不要给我起名成什么 a 一、 a 二、 b 一、 b 二这种类,你这样的同学们,你起来名不用太多,十天之后你回来,你自己都不明白这个类代表什么意思吧? 所以,所以后边起名的时候给我做到见名之意, ok, 这么一个东西啊,那么这是我们这个标识符,这个玩意。同学们,有没有什么大的问题? 有没有没有吧这么一个东西啊?那么这是我们标识符这一块,而除了这个以外,除了这个以外啊, 我们标识符有这么一套你必须遵守的规则以外,还有另一套不成文的规矩,这套规矩是我们在开发过程中所默认遵守的一套规矩,这个规矩我们也叫驼峰命名法,是这么一个东西啊,那么所谓驼峰命名法是什么意思啊?同学们, 所谓驼峰命名法是什么意思?好,这个玩意对我们 java 中啊常见的一些标识符进行了划分,那么以后我们也会碰到我们 java 中的常见标识符,无非有这么几种,第一种是我们的类名和我们的接口名, 这俩玩意我们只接触了第一个,我们是不是只接触了类名啊?好,接口名后边我们也会学。除了这个以外,还有第二种叫变量名和我们的这个叫方法名的东西,这是第二一个,第三一个我们叫常量名, 那么除了这个以外,还有第四一类,我们叫包名。同学们,我们把我们 java 中啊常见的这些 标识符进行了分类,分为这么四大块,而对于这四大块,我们也给了对应的规则,这套规则你可遵守可不遵守,不是一套必须遵守的规则, ok, 但是我们开发中一般我们默认习惯上都会这样子来玩, 这是一套不成文的规矩,可以说你不遵守 java 不 会有问题,但你将来出去写代码,人家会觉得你是一个,你是一个什么很 low 的 很新的一个人, ok, 所以 尽量遵守啊。 那么先来说第一个类名,接口名,对于类名和接口名而言啊,如果同学们,这个名啊,如果这个名字它是由同学们多个字母什么 组成,那么,那么啊,同学们,我们就需要干嘛?那么我们,我们就需要做到每一个单词的这个不是多个字母,多个什么单词啊?多个单词组成,那么我每一个单词的这个首字母要干嘛? 大写?要大写啊!我不知道大家有没有注意到,上一开始我给这个类起名叫 hello, world 的 时候,你会发现,谁让我写成了这个样子? 我写成了这个样子,有没有发现你会发现,同学们,我这个 hello 也好, word 也好,同学们,我写的都是啥? 我写的都是啥?开头字母都是大写吧? h, 我 开没我开头大没大写大写了吧? word, 我 开头大没大写大写了吧,所以我们要尽量开头大写。有同学说,老师,如果只有一个单词呢? 那这个单词的首字母就怎么样大写? ok 吧?就像我写的 demo, 是 不是开头首字母大写了这么一个东西啊?那么这是我们这个玩意啊,同学们,稍微注意,我们说如果一个单词或者多个单词首字母大写, 而对我们变量名和方法名而言,我们说啊,同样他如果啊,他是由多个单词什么组成,那么注意,我第一个单词的首字母要小写,然后其余单词的什么? 单词的首字母要干嘛?要大写? ok 吧,第一个单词的首字母小写啊,其余单词的首字母大写。比如说 hello, world, 这时候我第一个单词首字母小写了吧?第二个单词是不是首字母大写了吧?如果只有一个单词呢? 如果只有一个单词呢?直接干嘛?小写是不就行了?不要给我大写了, ok, 这么一个东西,那么这是这个,还有第三一个是我们的,便是我们的什么 常亮名。那么我们常亮名的特点是,无论啊,同学们,他有几个单词组成好,所有字母全部怎么样?好,全部大写啊,并且每一个字母之间我用什么? 我用什么?下划线来干嘛?好,我用我的下划线来隔开,来隔开啊,是这么一个东西,比如说我定一个名 叫 hello word, 这时候我就要把它写成这个样子,每个单词所有字母怎么样?全部是不大写了,然后我单词之间怎么办?用下划线隔开的吧。同样,如果我只有一个单词呢? 直接干嘛?全部大写是不就够了?这是常亮名,最后还有一个包名,包名怎么玩? 报名怎么办?我们说他无论啊,同学们,他无论有几个单词,怎么样组成他所有的字母,所有的字母全部什么? 全部小写,而每一个,我上边写成什么?每一个字母之间了吧?单词啊,然后下边我们说每一个单词之间我们用什么隔开的 好?用点来隔开,比如说我刚才定义定义的报名, c n 点 t u d t d u 点 e x r, 我是 不定力成这个样子了, 我这时候每个单词之间我是怎么办?我是不是用点隔开了?同学们,没问题吧?这么一个东西。另外同学们,说到这啊,能区分明白什么叫一个单词,什么叫俩单词吧?同学们, 能不能区分明白?好,为什么这么说啊?因为之前我碰上过一个同学起名, 正常来说,同学们, basketball, 篮球,它是几个单词?一个吧。好,我之前见一个同学给我起名写成这样子,对吗对吗?先来想同学们,从我们标识符的命名规则而言,最基本的规则,它满不满足? 满不满足可以使用字母吧,这是不是用的字母啊,好减少使用。同学们吧,可以使用中文,但不推荐说没用中文哦。占我的关键字了吗?没有数字开头了吗?没有下边的呀,我是不也尽量做到了,但同学们,你不觉得这个单词看起来很怪异吗? 这不很怪异啊,所以后边的时候,后边的时候给我分明白哪是一个单词,哪是俩单词, ok, 实在分不清楚说,老师我英语不太好,跟你们项目经理要一个有道, 要一个有道,词典后边经常看着点,好吧,后边啊,因为我们学习过程中会碰上很多的英文,别到时候看到了怎么办,不认识。 ok, 这么一个东西啊,那么就是这个,这个驼峰命名法应该没有什么大的问题吧。同学们,这么一个玩意啊,那么, ok, 同学们,讲到这啊,因为我们第一天课,我们就不再往下讲更多的难的东西了, 我们明天再开始,是不讲我们比较难的玩意啊,今先给大家一点缓冲的时间,总得总得让你们先觉得这个东西有意思是吧,后边再慢慢的一棍子闷死是吧? 好啊,开玩笑了,来,同学们,我们在这啊,简单说一下,我们说今啊,我们一共讲了这么一堆东西,在这堆东西里边,同学们,注意,在这给我注意几件事,第一个,我们的关键字,标识符,这俩基本概念,这俩基本概念应该能弄明白吧?什么是关键字来着? 有特殊含义的吧?什么是标识符来着?你自定义的吧,叫标识符啊。那么说到这,顺便问一个问题吧,同学们,我们说 demo 这个类名是一定是一个标识符了,没有任何问题。问是关键字还是标识符, 它是啥?它是什么?好,它是标识符啊。 闷是标识符啊,同学们,它是标识符,这点是没有问题的。 ok, 这点是确定的啊。那么有同学说,老师,你凭什么说它是标识符啊?这件事我们还没有讲方法,闷是方法名, 闷是方法名啊。而我们说,在这同学们,我们划分的时候,你会发现我们把方法名划到哪去了?标识符里边吧,所以它是标识符,它不是关键词。 ok, 别到时候后边给我弄混了啊,给我弄混了,这是这个, ok, 这么一个东西啊。另外在这把这块东西弄好。然后啊,同学们,简单说一下, 我们现在写代码,我们是不是用记事本写了?后边我们将会一直用我们的记事本去写代码,至少在我们讲面向对象之前的这五天左右的时间中,我们将会一直用记事本。有同学可能会奇怪,老师,为什么我们不用一些智能编辑工具,比如说我们用的 eclipse 之类的 好 eclipse, 为什么我不让用?因为他那个东西太智能,会导致你刚开始学的时候忽略掉很多细节性的东西。 ok, 所以 前五天你先给我把记事本用熟,在这个过程中你会发现你能注意到很多很多的细节是 eclipse 所做不到的一些细节,所屏蔽掉的一些细节。 ok, 先给我用熟记事本, 而且以后大家到了开发中去提交代码也好,去进行项目的部署也好,到了 linux 下,同学们,你所用的就是一些基本命令,没有界面,没有 eclipse, 那 个时候你除了命令以外,你没有其他的可做。这也是为什么我刚上来让你用记事本的原因,先给我把命令用熟,你这样子后边再出去碰到是不是也不至于卡壳啊这么一个东西啊。因此我上课前几天会用记事本,我希望你们也能跟着我。干嘛 用记事本?当然有同学说,老师,这个记事本怎么样?太难看是不太难用啊,没什么关系,同学们,这个记事本难用的话,在你们开办软件里边 在你们开办软件里边啊,同学们,应该有这么一个玩意。好有这么一个东西啊,地盘项目这么一个玩意,叫 ever edit 的 玩意,找 ever edit 开头的,那么有同学说,老师,我用的我们这个电脑上没有 ever edit 开头的,那么有同学说,老师,我用的另一个叫 notepad。 这俩记事本都可以啊,一些比较好用的,他还是记事本,只要这个记事本怎么样,相对来说排版好看一点而已。 ok, 可以 去试一把啊,用一下这些记事本,后边我们会用记这些记事本来写代码,他的格式会好看一点。对了,这么一些东西啊,今天晚上提前准备一下提前准备一下啊,这么一些朋友,行,今天的课到这啊。

扎把新手必坑指南,数组转集合的伪列表,转集合后不可以增加删除,操作原因是返回的是内部类,大小是固定的。解决方案是再拿一个集合进行封装就 ok 了。