粉丝2.7万获赞16.1万

最近在直播帮大家答疑解惑的过程当中,常常会遇到一些引二或者说大三的朋友说自己学习进度很缓慢,或者甚至不知道自己这条路的学习路线是什么。那因此呢,我就给大家带来了这一期各种就业方向的学习技巧,帮助大家从零开始快速找到实习。 首先给大家带来的是前端方向的学习路线,首先 html 大 约学习十五个小时, css 大 约学习十五个小时。而 gs 呢,我们需要多花一点时间把 gs 里面的一些知识给搞懂,这大概需要六十个小时。如果说你是一个从来没有 前端经验的一个新手,那我建其实更建议你做一个 react 项目,你做完 react 之后,就可以去学习一下 node 的 知识,从而去搭建一个 next 的 项目,那这样你的简历上就以 react 加 node 为主。那如果说你是一个已经有了一点前端基础的人, 我反而建议呢去学 vue 三加 ts 加 uni app 的 这么一个项目。因为我们说技术学新不学旧,所以说在这里我们其实可以直接跳过 vue 二进行一个 vue 三的学习。那当你真正上手去敲了几个项目,去做一些自己的页面之后,你就可以去写自己的简历,去找第一份实习。 那后端方向呢,我建议大家从 java se 开始,从三十个小时看完 java se 上下两步一百个小时内容。至于大家不用过分去纠结说啊, java se 里面一些关于 java 底层的一些实现,那其实这个 课程更多的是帮助大家对 java 有 一个整体的认知,那切记,从一开始的时候,我们就花两个月甚至三个月的时间去看 java se, 那 这样其实是极大的突破了我们后面的一个速度。 接着我建议大家花两个小时时间去学习一下 microsoft 的 增删改查语句,包括 left join, right join 以及 fskis 这种关关联以及这种子表的查询。那像 microsoft 里面的一些很多呃底层原理,包括它后面的一些境界篇和高级篇,其实我们是可以放到后面,等把所有的项目学完之后,背包谷的时候再看的。 那 java web 呢?我建议大家,其实是啊,不用动手去敲的,花二十个小时的时间,我们去啊把它的源码卸下来,然后借助 ai 的 方式去帮我们一个辅助理解。那在这里我给大家的意见是啊,如果说一共有十个接口的话,我建议大家是能够用 ai 看懂其中的七个接口, 接着自己能够实现其中的三个接口,那么这样就可以认为你的 java web 是 学习 ok 的。 然后我们就是敲一敲我们的 java 的 后台领域,这个最长的核,也就是我们的 spring boot 的 这个参数外卖。 在这里呢,我是建议大家说看一半学一半,但是可能有的同学说啊,我的这个 java 基础不是很好,那所以说这里我给大家的建议就是先二位数看一遍,然后在第二遍的时候再上手,跟着啊老师一起去敲项目。 那敲完这个外卖之后,我们就可以敲一敲最高的山,也就是我们的这个黑马点评啊。那这一篇呢,其实我我是建议大家说啊,只看不敲,以最小的时间去学会我们的这个 radis 的 一些封装的应用, 那我这里也给大家推荐几个这个比较好的后端项目,像天机学堂,尚庭公寓,黑马商城以及一二三零六啊,包括神岭物流。那这里呢,其实我也是不建议大家说上手去敲的,而是说我们可以记住一些现代化的工具,比如说 curser 或者说 tree, 来帮助我们理解啊代码的一些具体实现的一些细节,以及它的架构上的设计。 那可能还有的人会觉得即使说信息系统上的很多项目其实也被大家给用烂了嘛,那所以说我这里给大家推荐一下,我们其实可以尝试说把几个项目的基础点融合到一起, 比如说我们这里可以把天机学堂、和尚庭公寓以及黑马商城做成一个这个大学生就业租房购物平台。那么这样的融合了这么一个三个项目当中,技术其实足够在我们简易上进行一个项目的一个支撑的。 那接下来讲的其实就是我们的 a 进的方向,那 a 进方向其实也是最近的一个大热门嘛,那我们当学完所有的后端的开发流程之后,那其实我们就可以去学一下 spring ai 这么一个框架,那同时呢,我们还可以结合 launch forge 以及 r e g 和 m c p 对 它进行一个学习,搭建一两个属于自己的 agent 项目,然后去进行一些本地的调优和部署。那同时呢,我们可能还需要看一篇论文叫 addition is all you need 的, 这是我们大模型里面的一个开山鼻祖。 那当然侧开其实也是今年的一个比较大的方向嘛,那其实我们在学完 java 所有的基础课程之后,我们去可以了解一下测试原理,包括一些黑盒白盒的测试啊,一些测试用力的设置,包括一些这种覆盖率的问题。 同时呢我们可以去学习一下自动化测试一些工具以及一些设计。那同时我们可能还会要去学习一下 python 一 些语法和它的特点。那在这个程序完成之后,其实我们就可以拿着我们的这个简历去进行一个侧开的投递。 那以上就是我对各个就业方向的写作技巧的这么一个分享,那如果说按照这条技巧的话,其实能够帮助你快速的从一个零基础的这么一个新手,三个月之内能够帮助大家快速的去写好一份简历,然后去找到自己的第一份实习。

好多同学一直在纠结到底要不要去转 a 证的开发,事实上对于我们每一个程序员来说,以后 a 证的开发一定是一个必备技能,事实上它也不难,它就是我们漫漫学习长路当中所遇到的一个小的章节而已。对于我们来说,有些什么样的新的知识去了解呢?啊,不外乎有些向量模型的 api 的 调用 啊,大圆大圆模型的部署微调啊,以及涉及到一些呃,这个,这个相关的 skill 技能啊,工具调用啊等等,就是知识本身不多,也不难, 我最近也在学习相关的知识啊,最近呢,做了一个小的 demo, 和大家一起分享一下一个 a 证的开发当中可能所遇到的一些新的知识。所以第一个就是知识库啊,如果你接触的过一些 ai 相关的产品,那么知识库肯定非常非常重要。那为什么要有知识库呢?因为大模型本身它有一个天然的劣势,就是它在训练结束的那一刻起, 他所有的参数都已经固定了,对于对于新的知识,新发生的事件,他一概不知,所以我们需要给他外接一个,呃,外挂,外挂啊,这个外挂里边可以包含一些我们公司内部私有的一些数据,包括一些文档啦啊,规章制度啦啊,以及一些成功案例,我们都可以把它放到我们知我们的知识库里边。 这个知识库啊,什么时候用?就是在我们和大模型对话之前,我们需要从知识库里面解锁一下,找到一些最近的,或者是和我们提出的 query 啊,相似的一些答案,带着这些内容一同发给大模型,让大模型给我们一个更优的 答案。那么这个知识库啊,可能其中涉及到一些新的知识啊,比如向量数据库。事实上,兄弟们啊,你们之前学的 elastic search 啊,包括 radis, 它都可以存储向量数据。 那么在存限量之前呢,我们需要把相关的内容转化成限量,这可能又要接触到一个什么限量的嵌入式大模型啊?我们阿里的 啊,包括 open ai 它都有,所以这个东西它并不难,只要你用心去选,你一定要,你一定能选。那么简单的一个过程是什么?比如我们在我们的知识库里边啊,我们做的是法律助,呃,智能法律助手,我们可以上传法律法规啊,我这里边已经上传了一个啊,叫劳动法, 劳动法啊,那么这个法律上传文字是上传之后呢?我们会,他会将这个法律进行分块,对吧?分成很多很多块啊,一百一十六块, 分成很多很多块之后呢?你看每一块都是什么?都是一个独立的小节章节,你可以,你可以按照标点符号、换行符,或者让大模型给你分块,让每一个块都有独立的语义表达啊,你也可以按字数去分块,都可以。 那么方块之后呢,就需要将方块后的内容转化成一组向量。怎么转化?你使用阿里提供的啊,这个嵌入模型,他就可以把文字性的内容转化成一组向量,他文字没有办法去计算,他总要转化成一组数据,对吧?兄弟们,你文字,你说这个这一段文字和另外一段文字很相似,你怎么去算? 你不好记,不好计算啊,所以说这个整个世界啊,数学真的是非常非常的神奇啊,真的非常非常神奇。那么将它转化之后呢?就会转化成一个什么样的结果?我们可以打开我们的向量数据库里边啊,前面是相关的文本 and tunt, 那 么后边存的就是我们的一百零啊,就是转化后的一组向量啊,它就是个矩阵 一行的矩阵,它这个矩阵的维度特别特别多,你看这,这就是转化后的内容,可以通过这个向量啊,和目标向量做矩阵运算, 得到他们的相似度啊,越相似得分越高。你看我们在,呃,在这个,在这个大模型里面提供了这个智能咨询,我们在咨询的时候,他首先第一步要什么啊?要分析你这个问题,你这个问题到底是个简单的问题呢?你跟他随便聊天呢?还是咨询法律相关的问题?如果咨询的是法律相关的问题,他就会查询劳动法里边的内容, 哎,等我,等我啊,你看第二步就是做法律法规的解锁,那么解锁从哪?从哪解锁出来的?就是从我们的知识库里边解锁出来,他怎么解锁?他将这个问题做一个向量化,转化成一组向量,然后将问题的向量和我们的 呃,这个,呃向量数据库里边当中的向量做矩阵计算啊,做矩阵计算的结果会得到一个相似性。你比如说 iphone 手机和苹果手机,他们做矩阵计算得到的结果评分就会非常非常高,他们的语义相似性就非常非常高,这就是 从我们之前学习的等值比较到语义相似性比较的这么一个过程。当然我们呃只是给大家做简单的介绍啊,只是给大家做简单的介绍啊,以后我的课程里面会给大家把详细的内容以文档的形式 呃展现给大家。那么这个里边啊第一步做意图分析啊,你是来跟我胡扯聊天的你还是过来咨询法律相关的问题的?如果你是咨询法律相关的问题怎么办啊?我去解锁我去解锁解锁我的这个呃知识库从知识库里边找到一组答案,当然这种答案可能可能这个 搜索出来的。哎,他有些不太好,不太好怎么办?交给另外一组大模型让他去给你做重排序啊,把更贴合原来的这个快瑞查询的这些什么这些结果 重新进行排序得到一个新的结果,然后把这些结果统一打包给大模型做分析。分析之后啊他会有一个分析的结果以及一些推理的过程。那么在推理结束之后呢他尝试去生成答案。生成答案啊,这就是生成的答案。生成答案之后呢我们还有一个大模型负责做这个质量质量审核啊,如果你出现了这个政治不正确 啊,对吧?涉黄涉黑涉黄涉黑等等这些答案里边他是有可能的,因为大模型生成的结果谁也说不准, 特别是和法律相关的,那么如果你不进行审核那么可能会出一些意想不到的东西啊,那我们进行审核,审核结束没有问题他才能展示如果审核出了问题怎么办?直接给他撤回哈哈哈。啊你有没有在使用这个 deepsea 的 时候 问一些奇奇怪怪的问题,那么到最后啊, deepsea 给你一度输出,输出到最后突然告诉你,我无法回答此问题,那么就是在最后的审核阶段给你卡掉了。 那么如果你想做一个更厉害的 agent 啊,那么可能其中还有涉及到一些其他的东西,比如工具调用 啊,我们在解锁的过程当中,如果没有解锁到内容怎么办?我去互联网去解锁啊,我们去调用呃,这个网络搜索的工具啊,我们给智能体啊,提供一些这个 skill 技能, 甚至我们可以给这个智能体添加一些 n 八 n define 啊,定义好的一些工作流,让他能执行一些更加复杂的工作啊,但这些东西都可以用代码来实现, 都可以用代码来实现,好吧,给大家简单的做一个简单的分享啊,因为这也是我这两天学习的学习过程当中啊,呃,边学习边输出啊,边做文档啊,边给大家讲一讲,要不然自己我在学习的过程当中也会糊涂,好吧。

学习 tomcat 是 什么?总是遇到困难?别担心,今天这个视频将用三个核心技巧帮你快速突破瓶颈,效率提升百分之两百,让我们开始吧! tomcat 是 apache 基金会开源的轻量级 java web 服务器,同时也是 slit 容器。它像一家兼具接待和烹饪功能的餐厅浏览器, 客人发送 http 请求点餐。 tomcat 先以 web 服务器身份接收请求接待客人,再通过 slide 容器运行 java 编写的动态程序烹饪餐品,最后返回响应结果上菜。 它不像 web logic 等重型服务器那样复杂,适合中小型 java web 项目或开发测试场景,是 java 开发者入门 web 开发的常用工具。 它的核心功能包括处理 http 请求和运行 url jsp。 比如,你在浏览器输入网址发送请求, tomcat 会解析请求中的 url 和参数,向餐厅店员记录订单细节,然后调用对应的 url 或 jsp 程序处理逻辑。厨师按订单做菜,生成动态内容后,封装成 html 响应,返回给浏览器店员上菜。 它既能直接处理 html 图片等静态内容,现成临时,也能生成用户登录结果、商品列表等动态内容。现场制作的餐品 sloven 是 java 编辑的处理 http 请求的类,但它无法独立运行,需要 tomcat 提供的容器环境。 tomcat 作为 sloven 的 容器,就像温室,给植物提供生长条件。它负责管理 sloven 的 适应周期期,创建出使化、处理请求、销毁, 提供请求和响应对象,供 sloven 的 使用,还处理 sloven 之间的通信。没有这个容器, sloven 就 像没水没阳光的种子,无法发芽生长。有了 tomcat, sloven 才能正常接收和处理浏览器的请求。 tomcat 和 apache http server 的 区别在于动态处理能力。 apache 是 纯静态 web 服务器,只能返回 html、 图片等现成内容。向书店卖印刷好的书, tomcat 不 仅能处理静态内容,还能运行 swalent gsp 生成动态内容。向书店既卖现成书,也能现场打印定制内容。 实际项目中常把两者配合使用。 apache 负责静态资源。 tomcat 处理动态请求,就像书店前台卖现成书,后台按需打印定制书,效率更高。 tomcat 的 目录结构清晰分工,并目录是启动停止脚本,如 startup bat。 像图书馆的门禁系统。 web apps 目录是 web 应用部署区,把 a r 包放这里会自动解压。如同图书馆的书架区。 kuf 目录存配置文件,如 server ink smell, 类似图书馆的管理规则手册 logs 目录记录运行日记,像图书馆的每日运营台账。 live 目录是依赖库,如同图书馆的工具间, 理解目录结构,能快速定位部署和配置的位置。部署 web 应用到 tomcat, 最常见的方式是将 word 包复制到 web apps 目录, tomcat 会自动解压并注册应用。如同把新书放进图书馆书架管理员会自动分类上架。另一种方式是通过 tomcat 管理控制台上传 w a r 包,向去图书馆前台提交新书请求。部署成功后,浏览器输入 http bug 汪零八零应用名就能访问,如同读者找到书架上的书,开始阅读。 tom tate 的 comformail 有 多个关键配置文件, server-slash-like server 等。像图书馆的整体规划图 up 点 xls 是 应用默认配置,设置欢迎页 url 映设,如同每本书的阅读指南。 点 xls 是 应用上下文配置管理数据源等资源,类似书架的摆放规则。修改 server 点 xls 中的端口号能避免冲突,如同图书馆换门牌号,防止和邻居混淆 调整 webder xl l 的 欢迎页能让用户打开应用,直接看到首页启动 tomcat 需运行并目录的 startup 脚本,它会加载配置文件,出使服务并监听端口。如同图书馆开门前,管理员检查设施、打开门禁,等待读者 停止时运行 shut down 脚本, tomcat 会销毁资源,关闭服务,向图书馆闭馆时整理书籍,锁门启动失败。常见原因是端口被占用,如同图书馆门牌号被邻居占用,导致客人找不到入口,此时修改 server xml 的 端口号即可解决。 tomcat 默认使用八零八零端口接收 http 请求端口号,如同餐厅的门牌号,客人通过门牌号找到餐厅。若八零八零被其他程序占用,需修改 conserver、 xmail connector 标签的 port 属性,比如改成八零八一。 若想让用户访问时不用加端口号,如 http connectafter, 可将端口改为八十。 http 默认端口,如同餐厅使用城市准干道的门牌号,客人无需额外记忆数字就能找到。 tomcat 版本需与 java 版本匹配,比如 tomcat 八支持 java 七级以上, tomcat 九支持 java 八级以上, tomcat 一 零支持 java 八加,且 sovereign api 升级到五点零。 这项手机 app 和系统的兼容性,闲版本微信 tomcat 十需要 android 十以上 java 八加。若手机系统太老, java 六只能用旧版本 tomcat。 如 tomcat 七、选择版本时要结合项目使用的 java 版本和 sorent api 需求,避免出现无法运行的情况。以上就是今天关于 tomcat 是 什么。


二零二六年 java 开发转 agent 开发该怎么学?首先按照这个流程制定一个学习清单,每日打卡。第一个月,打基础,用 java 经验快速掌握 python, 理解 transformer 架构提示工程 api 调用,这是成为高手的前提。第二个月,学 lincoln, 掌握这六个核心模块,并学会构建简单的问答 agent。 第三个月,项目实战,深入理解 agent 设计模式,掌握复杂场景开发。接下来做几个 agent 项目,比如智能代码助手数据分析 agent 知识库问答系统掌握这些。当个大模型工程师完全够了,快去试试吧。

加万能投递的方向主要有以下三个。第一个传统方向,像什么 o, a, 然后呢 erp, m, e, s, c, r, m 等等等等, 企业内部使用的这些网站,还有像一些什么电商、物流、餐饮等等等等等等这些项目。这些传统方向呢已经非常卷, 它选的点是在哪?你会发现目前在这个主流的方向,它没有新的 app 出现了。那么 java 真正能就业的几个方向是我下面说的两个。第一个传统项目要进行智能化升级,比如说我在这个传统项目当中要加智能模块,然后呢第三个开发新的 a 建的项目, 能调用外部工具的。好,下面的这两个它才是我们现在真正就业的方向,你不要去往第一个去投,真的就特别卷,特别卷,特别难学 java 或者是我学 python 的, 其实呢都可以往这个方向去走,你就发那个智能应用开发就可以了。我把那个这个方向的免费的试学课完整的路线图发给你,自己,按照这种现代最新的这种 ai 的 方向,然后呢去学习,去投递简历。

二零二六年 java 转 agent 开发该怎么学?核心秘诀,利用你的 java 工程经验,快速打通转行路径,不用从零起步。第一个月,夯实基础,用 java 开发者的逻辑优势,快速掌握 python, 吃透 transformer 架构提示工程,再搞定大模型 api 调用,这是成为 agent 高手的前提。第二个月, 攻坚 landchain, 重点掌握它的六大核心模块,这是搭建 agent 的 核心工具,必须啃透。第三个月,项目实战风神,深入理解 agent 设计模式,搞定复杂场景开发,再亲手做三个实战项目, 智能客服 agent 代码生成 agent 数据分析 agent, 掌握这些内容,当个大模型工程师完全够用。 java 转 ai 的 风口就在这,所有学习资料已经整理好了,评论区留下学习直接带走,赶紧行动起来试试!

透视 h t t p。 与网络一次请求的奇妙旅程一次点击背后的全球旅行当你在浏览器输入网址,按下回车,一个简单的页面夹在背后,数据包正经历一场跨越七层网络协议战的精密协助之旅。 这就像一封电子邮件从北京发往纽约,需要经过分拣、运输、清关、投递等多个环节。 今天,我们将跟随一个数据包的脚步,完整走一遍从输入网址到页面显示的完整生命周期。这不是枯燥的技术讲座,而是一次探索互联网内部运作的冒险之旅。第一站, d n s。 解析互联网的 g p s。 导航系统 循序从域名到 ip 地址的转换我们的旅程从 d n s。 解析开始,就像使用 g p s。 前需要输入地址一样,计算机需要将人类友好的域名如得不溜 b a i d u 点 com 转换为机器可读的 ip 地址,如幺八零点幺零幺点四九点幺二。多级缓存查询机制让这个过程变得高效。浏览器会先检查自己的缓存,如果没有,则查询操作系统缓存,接着是路由器缓存,最后才向 i s p 的 d n s。 服务器发起请求。 这种设计使得百分之九十五的 dns 查询都能在五十毫秒内完成,你几乎感觉不到延迟。 ai 时代的新挑战与机遇在人工智能爆发式增长的今天, ai 面临新挑战。 ai 助理的实时交互导致短时 dns 查询密度大幅提升,微服务架构中单个页面可能调用数十个独立服务域名, 显著增加了解息需求。幸运的是, ai 也能反哺 dns 优化,通过智能预测和流量调度,提升解析效率。 第二站, tcp 三次握手建立可靠连接为什么需要三次握手?拿到 ip 地址后,浏览器需要通过 tcp 三次握手与服务器建立可靠连接。这就像打电话时的问候,客户端,你好,能听到我吗? sir, 服务器,能听到,你也能听到我吗? sir, 客户端,是的,我们可以开始通话啦。 这种设计确保了连接的双向可信,是互联网通信的基石。很多人误以为三次握手是勇于设计, 实际上,它是防止已失效的连接请求突然到达导致错误的关键机制。性能优化从慢启动到快速传输, tcp 采用庸色控制机制,防止网络过载。就像高速公路的匝道控制, tcp 会逐步增加发送速率,直到找到网络的最佳附带点。 现代优化算法如 b b 二,可以显著提升传输效率,尤其在高延迟网络中,效果明显。第三站, t l s 加密安全通道的建立 t l s。 一 点三的速度革命建立连接后,我们需要 t l s。 加密来确保通信安全。 t l s。 一 点三相比早期版本实现了质的飞跃,将握手延迟从两次往返降低到仅需一次往返。 前项保密是 t l s。 一 点三的重要特性。即使攻击者记录了加密绘画之后,破解了服务器私钥,也无法解密之前记录的数据。 这就像每次通话使用不同的密码本,大大增强了安全性。加密与性能的平衡艺术有人担心 https 会大幅拖慢速度,但测试显示,在合理配置下, t l s 一 三增加的延迟通常小于三十毫秒。考虑到他提供的安全保障,这个代价是完全可以接受的。第四站, h t t p。 协议应用层的对话 从 h t t p。 一 点一到 h t t p 二的眼睛安全通道建立后, h t t p。 协议开始发挥作用。 h t t p 一 点一时代,每个资源都需要独立请求,就像超市排队结账,即使你只买一件商品,也可能被前面推满购物车的人堵住。 h t t p r。 通过多路复用技术解决了这一问题,多个请求可以在同一个连接上并行传输,互不阻塞。这好比超市开通了快速通道,大大提升了效率。 http 三的革命性变化最新的 http 三协议将底层传输协议从 tcp 改为 quick, 基于 udp 实现了更高效的传输。 quick 内置了加密和纠错机制,能更好地处理网络切换和丢包问题,特别适合移动环境。 第五站, restful api 设计 web 服务的通用语言原则与最佳实践数据到达服务器后, restful api 设计原则确保了接口的规范性和可预测性。 通过正确使用 http 方法 get 获取 pos, 创建或更新 delete、 删除和状态码两百,成功四零四位,找到五百服务器错误。我们可以构建清晰一致的 api 设计。常见误区澄清一个常见误区是认为 get 请求更安全, 实际上 get 参数会出现在 u r o 和日制中,不适合传输敏感信息。正确的做法是使用 pos 方法加密传输敏感数据。误区澄清打破五大常见迷思迷思一, h t t p s。 大 幅拖慢速度 真相 t l s。 一 点三,仅需一次往返,合理配置下,延迟增加可控制在三十毫秒内。迷思二, h t p r 必须搭配 h t p s。 真相,主流浏览器确实要求 h t t p 二必须基于 t l s, 这是出于安全考虑。迷思三,更多域名可以加速网站真相 h t t p。 二,多路赋用下域名分片反而增加 d n s。 开销,单域名连接通常更优。 迷思四, t c p 三次握手是勇于设计。真相,三次握手确保了连接的双向可信,是防止网络错误的关键机制。 迷思五, quick 只是基于 u d p 的 简单协议。真相 quick 在 u d p 基础上重新实现了 tcp 的 可靠传输机制,并继承了现代安全特性。性能优化实战指南全链路优化策略要提升网站性能,需要针对每个环节优化。 dns 层面,使用御解析和合理 ttl 设置。 tcp 层面,开启连接、复用和快速重传。 t l s 层面,采用 t l s。 一 点三和现代密码套件。 h t t p 层面,其用 h t t p。 三分之二和智能缓存策略监控与测量通过浏览器开发者工具,可以监控每个阶段耗时。 d n s。 查询时间 tcp 连接时间 t l s。 握手时间首字节时间 t t f b。 内容下载时间结语,协议站的协同艺术一次完整的 h t t p 请求是多层级协议精密协助的成果。 从 d n s。 解析的分布式查询,到 t c p。 的 可靠传输保障,再到 t l s。 的 安全加密,最后通过 h t p。 协议完成应用层交互。每个环节都像精密钟表中的齿轮相互咬合,共同推动信息的自由流动。 真正的网络高手不是死记命令的人,而是理解这套系统思维的人。当你下次按下回车键时,希望你能想起这次跨越协议战的奇妙旅程。在你看不见的数字世界里,正有无数数据包为你日夜奔忙。网络不是魔法,而是工程,理解原理才能创造奇迹。 下一篇,团队协助新法分之策略与审思维为何要有规范?如何减少摩擦?什么是高质量提交与审审要点?

首先何为跨域?跨域呢?其实字面意思啊,很好理解,就是我跨了不同的域名,假如啊,我从 google 点 com, 然后这个域名呢?去访问百度点 com, 这肯定能访问的,但是呢,它域名不同,那么这个呢,就是跨域了,当然了,除了域名以外,比如说协议不同, 从 h t p 到 h t p s, 端口不同等等,都属于跨越。那什么是跨越问题呢?为了帮大家更系统性的准备面试,我整理了包括各阶段的面试题,找到面试突击学习路线,以及精选的简历模板,需要的小伙伴。跨越问题啊,大家在工作中呢,应该或多或少啊,都见过。 假如说前端我们用阿贾克斯去访问跨域的接口的时候会报错,访问不了,我们来看一个简单的例子啊,假如现在我这里有两个程序,一个程序呢,是八零八零的端口好,然后八零八的端口呢?我有一个接口啊,假如说就是 info, 我 通过一个 id 呢,我去查询我的一个详细信息,我们可以简单的来访问一下 local 八零八零的端口,对不对?好, info, 假如说 id 十六,你看我是能查出来的。 那么假如说我从另外一个服务的前端的 htm 去访问我的这个接口,然后呢,假如说我现在有一个简单的页面啊,这个页面呢,其实就是一个按钮,这个按钮呢,我去通过阿贾克斯去请求我刚刚的这一个接口, 然后我会返回我的一个结果,然后这个结果呢,有个产品对吧?然后弹出一个产品名称,那么按照正常的逻辑,如果没有问题的话,你看我会把这个给弹出来,对不对?好,那么现在我们来模拟一下,假如说对吧?这一个服务他的端口啊,是八零九零,好,我去访问这个页面,好, 然后简单的测试通过阿贾克斯,我去调用我的这一个接口,他们是跨了不同的端口的,八零九零跳到八零八零,这时候我们测试一下,好,我们发现一个点,发现怎么样呢?哎,没有弹出来,并且他报错了, 那报了一个什么错呢?我们可以去看一下,这个就是我们的跨域问题,就是我们通过阿贾克斯浏览器去访问我们跨域的一些地址的时候,这些脚本会被限制。 那么为什么会有跨域问题呢?就是浏览器啊,他有个同源策略,什么叫同源策略?就是为了安全考虑,他限制了从一个源加载的文档或者脚本与另外一个源的资源进行交互的能力,那么这个呢,主要是为了安全考虑对不对? 所以啊,这是浏览器的同源导致的,那么跨域问题呢?也只有在前端浏览器才会产生,那么我们后端如果说去跨域请求,那么这是没有问题的,那么我们怎么解决呢?解决办法呢?有几种啊?那么第一个就是 jason p, jason p 呢,它是一个比较古老的方式, 我们只需要把前端的请求的 date type 改成 jsonp 就 可以了,我们来试一下,刚刚不是有一个前端去请求,对不对?前端去请求通过阿贾克斯,原来是 json, 那 么现在我把它改成 jsonp 好, 但是改成 jsonp 以后还不行,我们可以启动看一下, 好,启动了,那么这个时候我们再去测一下,他不会报错了,但是呢,他同样的没有返回我想要的结果,并且他有个提示,这是因为什么呢?你看他这一个请求,他把这个请求发现跟我这个请求不一样了,或者说跟我在阿贾克斯里面写的请求有点不一样了,他自己啊写的请求是这个, 但是他加了一些参数,看到他加了一些参数,就是有一个 callback, 然后呢有个值,那么这个是自动生成,这就是接收皮,他的一个原理, 就是我浏览器生成一些规则,我要跟后端去交互,他们要进行一次验证,但是这个时候发现还是不行,虽然前端给了他一个参数,但是呢,我们的后端还是不支持,因为他需要前后端去握手,去交互,但是呢后端是没有给你这个响应,那么我们后端呢,也需要去进行一个支持, 也很简单,你不是接受你的 callback 这个参数,假如说 spring, 对 吧?那这个名字呢?你可以去设置的,虽然默认他是 callback, 但是你是可以指定的,在我们的阿贾克斯里面可以去指定,那么怎么指定呢?其实也很简单,改成 callback, 那 么这个呢,就是去指定我的参数名,假如说叫灰灰,好,这个时候他就会变成灰灰了,这个参数名他就变了,就是你自己指定的。好,我们启动一下,我们可以去看一下他的请求, 这时候你看啊,我们去请求,对不对?测试好啊,这个时候是服务挂了,对不对?好,我们去服务停一下,其实我以为会会去接受就可以了,我们先不去管了,我们先验证一下这个参数名是否变更了。 好,启动了是不是?好,然后这个时候我们去测试。好,你会发现,你看它的参数名变成了会,会,那么后端我怎么样去接收 json b 的 请求呢?很简单,你看我接受后的这个参数,然后返回,我要返回 json p 的 一个格式。好,那么这个时候你看,我就不能返回 version 了,它是一个 json p 的 object。 好,然后呢,我们去扭一个 json p object。 好, 这个时候你看啊,我要把这个对象给他,并且把参数给他,灰灰,然后呢,它的对象是 product, 对 不对?好,这个时候啊,我们可以看一下,它的返回内容是不一样的, 原来是一个 json 的 格式,对不对?那么现在呢,我们可以去请求看一下,它的内容是不一样的,它支持了 json p。 好, 我们去请求一下,我们启动,对不对? 好,然后我们来看一下,我们改动以后,它返回的一个格式是不一样的,如果我们按照正常的去请求啊,那么这个时候你看它是会报错的。好,我们要怎么办呢?因为它缺少一个参数,我们可以去看一下后端的提示, 你看它缺少一个参数,对不对啊? nullpoint exception, 那 么怎么办呢?我们有一个灰灰嘛,对吧?截屏 p 的 格式有个灰灰,我们必须要把灰灰给加上去,这是它的参数有个二三,这回。 好,那么这时候你看它就是一个接收 p 的 格式了。好,那么这个时候我们再来去测试啊,去请求一下,你会发现我就能正常的去弹出来接收 p, 它解决了一个跨越的问题。好,那么第二种呢?比第一种更好,第一种是接收 p, 那 么它会有些问题啊,因为很多浏览器啊,可能不兼容, 并且呢我后端必须要返回一个接收 p 的 格式,假如说这个接口我在很多的一些不同的地方去用的话,它藕合性是比较高的, 那怎么办呢?就是我们用另外的方式叫 c o r s 一个策略 course origin resource sharon, 翻译过来就是跨资源共享,它允许浏览器向跨资源的一个服务器发起 h t 请求, 从而克服了阿贾克斯啊只能同源使用的限制,只需要服务端去变动就可以了,那么我们简单的来去看一下怎么样去做,那么这里呢,我们直接啊就把它改回来,不要用 j c p 的 格式了, 返回 pad。 然后参数呢,我们也不需要去接受,因为我不需要跟前端去交互,前端都不需要改,对不对?那么我们把前端呢也改掉,不要改成 json p 了,就 json 就 可以了。好,后端,那么这个时候 你看我要改服务器,我要允许浏览器来向我去发起跨域的一个请求共享,那么怎么办呢?来这个接口有几种方式啊?第一个呢叫 crossword 注解,我们可以加到我们的这个注解里面,那么死 我容易去指一个呢,那么这里呢,我可以去指定啊,哪一个方法,对吧?然后跨越呢,这里面有个参数,那么你可以去指定什么哪一个域名,哎,可以跨越过来请求,对不对?那么假如说现在你看是我的前端那个接口是这个接口,对, 这个页面,你看 ip 端口可以跨越请求。好,那么我只要去设置这个能跨越的端口 ip 就 可以了,那这个时候呢,你看我们后端启动看一下,前端我们已经改成 jason 的 格式,我们可以看一下, 你看时间层的格式,那么这个时候改回去了以后,你看我就能正常请求了。好,但是呢,我去设置了跨域,你看这个也是能弹出来的, 他不会有跨域的问题。好,这个呢,我只能在一些控制类或者方法上面去使用一些注解。对,那么假如说我想去自定义跨域, 就包括跨域的接口啊,哪些域名啊,或者说方法类型啊等等。那么这个时候呢,我们可以再通用一点,我们可以用一个呃 filter, 或者说实现 ybl 维 c 里面的 config 去实现进行跨域拦截。那么怎么办呢?那这里我们先注视掉啊, 我们来看,假如说我们自定,其实呢很简单啊,那么我们只要去实现歪编 vc config, 然后按 cross mapping 这个方法就可以了。假如说我叫灰灰掰折,我们去实现歪编 vc, 然后呢肯定我要把它作为一个 configuration 给它配置,那这个时候啊,你看它会有一个方法,我们可以去看一下,有一个,你看在这里面 cross map, 去设置一些跨域的一些规则,对不对?好,那么这里呢,假如说我们去把它加过来,去实现这个方法, 然后这里你看我可以去指定,首先呢哪些接口,对不对?你看这是我的音符,音符就是这个接口,对不对?然后呢哪一个域名?你看就是这个,然后哪个类型?你看这是 get 方法,所以我去加一个 get 方法, 然后呢我再去启动看一下,我这里面的注解,已经没有了。对,我现在是通过一个什么拦截器,或者说叫做一个配置,然后一个全局配置,这个时候我们再启动, 现在通过我们也可以看一下,他还是不会有问题,因为他是支持跨域的。好,现在还没有请好,你看还是没有问题,对不对?那么这个呢?就是第二种,当然呢全驱配置呢?还有一种 porsche 啊,其实也比较简单。好吧,假如说我现在再去建一个啊,叫做灰,灰到了, 呃,叫做啊,好吧,好,那么这个时候可以通过 cosine 把这个 cosine 放到我们的 ic 容器里面,并且可以去设置它相关的参数。好,我们可以通过 configuration 加 bin 的 注解, 把我们的 post filter 去设置好,并且放上去,这时候我们可以看一下 post filter 呢,这里同样的我们去设置一些配置, 比如说就是我支持哪些接口,然后以及这是哪些头,这是哪些方法,包括我的一些域名等等。好,那么这里呢,我都可以设置,设置完了以后,那么这时候我把这个给删了,这是我所有的,对吧?所有的我都可以支持跨域。好,那么这时候我们再启动一下, 你看原来的那个配置,我已经删掉了的,好,可以了,对不对?好,启动了,然后我们再去测试,你看还是没问题。好,那么这个呢,就是我们在服务端改,第一种是分层批,我通过前后端都要改,对吧?他们藕合性非常高。第二种方式呢,就是非常非常对点, 那么我只需要后端的变更,那么后端变更呢?我有几种办法路解啊,然后包括配置类啊,互测点啊等等。那么还有一种呢,更好一点。为什么更好一点呢? 因为像这种在服务里面去改动呢,我作为一个业务开发,那我一般不会去关注这些东西。那么还有呢,藕合的更低的一种方式就是 ngx, 那 么 ngx 呢?就是他不关心业务了,对不对?你业务只要做业务事情,服务端你不需要去关注任何向什么宽裕的问题, 我可以在 ngx 里面,反向代理里面去做。那么其实也比较简单,我只要去设置他的一些话语响应头就可以了。好吧,那么这个呢,就是解决更多实用干货知识。我是灰灰,我们下期再见。

现在啊,现在我们刚才不是把这一这一片我选中的这些标记上一个颜色,这些是前端要做的操作, 然后讲了一下这这前端的话,你们应该都没问题了吧?有问题的话就赶紧说,再给你们讲后面的话,就你们只能看录屏了, 没问题的话就看这看后端吧。现现在我们开始讲后端,其实讲后端还是还是得看这种网页的控制台, 正常这种像这种管理系统,就尤其是这种网页端,不管你是拿 java 写的也好,还是拿那个 php 写的,就是你总归是要去请求后端接口,总归总归是要在这总归是得有个网络这个东西,不然你请求不到请求不到后端的数据,你看这是图片了, 现在我们看啊,现在你看救援,救援物资,我们现在开始点查询,然后点这点开后端后端其实非常好找。然后现在这个你看我们把这个链接拉出来, 放大一点,凑合看吧,好与坏就是凑合看吧,就一层一层抽丝剥削的跟你们说,你看我把这分开 看前面这一段就是后端后端启动,你看我们看一下后端,我们先看一下这个后端,后端启动啊,你们启动后端的时候点这个它每一个项目都有一个这个 supreme boot application, 点这个 application 的 这个三角形按钮,拿 ipad 打开它就后端就可以正常启动了。 然后现在我们要看一下后端端口,你看这个后端端口就是默认的八零八零看,然后这个默认路径是这,然后这里这里就是你们讲的时候也要去提一嘴这个配置,这个配置就是你这个项目配你这个项目的端口, 然后配你这个项目的这个项目路径,然后下面这些配置呢?就是数据库的路径,然后这个这个的话就是文件上传的路径,下面这个就是 mybeats plus 的 路径配配置,不是路径说错了。 然后整整个就主要是先看一下这个配置吧,主要这个端口和这个后端整体整体后端的路径,你看后端整体路径在这就是这个。 然后现在我们在找这个救援物资的接口,在后端搜的时候,按住你的 ctrl 加 shift 加 r, ctrl shift 加 r, 然后在这里搜刚才那个是救援物资,你要在这里带一个反斜杠,带一个斜杠,反斜杠,然后这里你就找到这个后端的这个救援物资模块,这样这样找会找了吧?就是按住 ctrl shift 加 r, 或者说这里应该是有一个 忘记在哪有个搜索,忘了那不重要,那就 ctrl shift 加弹出来这个框,然后我们找到这个对应的对应的模块,这个救援物资模块,找到这个模块以后我们再往下看,这里有个就看这个斜杠,斜杠后面斜杠跟着斜杠这个意思的,搜一下, 搜一下例子,搜一下带带斜杠的例子,这个这我们就查询到了,从这我们找到了这个后端的这个接口,就是给客户端提供了这个列表查询的方法。 然后现在我们开始看后端,一层一层看,我们现在就已经,就现在你我教的你们是怎么通过这个页面的 f 十二, 怎么通过页面这个 f 十二去搜索你这个想查找的这个后端模块,因为你后面答辩的话,或者说他会问你代码怎么找,然后你要快速的找到这个代码,然后你看六再找这个历史 不一样,然后我们后端它正常,后端它整个后端项目,它正常是分为三层架构, 这是一层,看错了层,这一层呢就用来去,你看在这里接收前端传过来的请求参数,我看一下,看一下它怎么接收,背着历史的去接收, 背着历史的做导的,用这一款, 然后找到这,找到这呢,然后他这里其实就是后端做了一个处理,但是他这个截图可能写的不是很标准,然后你们的代码应该都是都应该长这个样子,有些人的不一样,有些人比较比这个直观一点,找个直观一点的这个体现不出来。 我们找一下这个这个方法就比较直观一点,我们点开页面去找一下这个 点登录按钮,这里请求了后端接口用户,看这是不是用户,你们要根据上面的这看这是用户,然后再看这个用户模块下面的具体的一个登录操作, 登录操作收到了,收到了这个登录操作,然后看他的那个前段传的参数, 其实这两个灰色的,像这种灰色的这个参数没有用到,可以把它删掉,删掉其实它会它也不报错。然后这个 u 的 内幕是你输入的帐号,它是我的,是你输入的密码,然后我把把这里给你们分开了,它这个写法,它是叫做买杯子 plus 的 写法, 这儿先从后端的这个三层架构给你们再说, 因为你看啊,就是我们刚才说的这个 ctrl 了成,他就用来去接受前端的请求参数,然后把这个小逆返回给前端这个 return r 点, ok, 这个就从这个方法来说,你看 abli 这个是修饰,修饰关键词不用管,然后这个 r 的 话就是最终要返回给前端的东西,这整个一个这个就是 r, 就是路由就返回结果,然后这个就是那个对应的方法是具体的操作。然后我们接下来再看这个方法里面具体的代码,从这从这开始看它这里有一个,它这是直接因为用的 mybitesplus 直接集成了一个这个框架,然后我们点进来看一下它怎么集成, 我看这个 i service, 因为 java 这个语言呢,它是可以运作于继承,看这个类继承了这个类,为什么要做它这个继承?这个方法的意思是什么?看我们我们原来的代码里面是没有 没有这个 select one, 这个 select one 我 们在这个我们自己写的这个类里面原来的这个代码里面是搜不到的, 然后所以说它这里继承了 mybitesplus, 它这 plus 里面这个这个在那个说官话就是说的我,我现在我说的不是人话,我现在说的官话就是用官话的表达出来,就是你继承了这个类,然后你可以去请求或者是直接用这个类里面的一些 api, 然后我在这里说一下人话,人话的含义就是因为我有,因为我集成了这个 mybitesplus 框架, 然后的话这个 mybitesplus 框架下面它有一个 i service, 它有一个这个叫做类啊,大家注意一下,这个叫做类,它有一个 i service 类,然后我又不想去写那么多方法,然后我就继承了这个 mybitesplus 的 这个类, 我继承完这个类以后呢,我就可以去直接,直接,我就能在这直接去调用它的这个方,它这个方法都是现成的,然后我,我能直接去用这个方法了,我就直接能查从数据库里面查出来东西。我就是我刚才说的这一堆,你们是不是听着有点乱, 喂喂,你的真话 啊?人话跟国话我都听不懂,听不懂,听不懂人话是吧?我再重说一下,你看啊,我们点开这个,因为这个正常正常的一个 java 项目,它是后端项目,就是三层架构, control 层和设备层,还有一个这个层倒层,这个层,这一层呢就是用来和数据库交互的, 然后这个这一层呢是用来和前后端前端交互的,接受前端参数和返回前端响应,返回前端结果。然后这个 service 它其实是一个逻辑层,但是在这里它转换了代码,就是本来我没有这个方法,我又想用这个方法,所以说我就得去想办法把这个方法用到, 我怎么才能用这个方法呢?就是加满里面的第一层, 然后结合这个来给你们说一下。哎,这个,这个我以后知道怎么给你们讲了,讲完里面的奇奇的特性,结合到这里, i can 笑一下, 我看这啊,这里你看展示了 java 的 继承这个用户的这个方法,继承了这个挨座位的方法,就是你看这是通用的,我是用户服务咨询,他这说的什么鬼话? 喂食清洁狮子啊,我们看他这个伪代码,给你们说一下这个继承到底是什么?你看看,看,这啊,这,这是一个写的一个公共的方法,看到没有? 喂食、清洁,然后具体的实现。狮子,然后他他,他在这里要操作,他就要继承这个方法, 看狮子、大象、企鹅,看到没? 狮子、大象、企鹅,然后你现在要给这个狮子喂喂饭喂肉,然后要给他去擦屎,肯定是擦屎, 这个就是你公共的方法,然后比如说你现在在动物园,你喂狗了还是喂猪了?看你现在在狮子里面伺候狮子,给它喂点吃的,然后你又在下面这个大象里面再给大象喂点吃的,你在这个不用管它什么东西吧?反正就是你能, 你能在这里面去,这就是一个公共的方法,就是你写了这个方法以后,你后面你可以把它因为将来这种代码就写,写的比较抽象。 然后这一块呢,你就是我想想怎么跟你说啊?就是你现在要伺候这个狮子吃喝拉撒了,然后你用了这个方法,你也是去给他喂喂肉了,还是给他擦拭,然后现在你又伺候老,你又现在又开始伺候老虎, 也是用这个方法去给老虎擦擦擦屁股了,还是喂肉。然后这里这里面有个 animal, 看到没?就就是这里的 animal 的 话,就是动物嘛?我的动物朋友,这里就是我的动物,就是你现在你要伺候狮子,这里就是写狮子这个动物,你要伺候老虎,这里就是写老虎这个动物, 然后把这个把这个理解了以后呢?我们现在再看一下他这个具体实现,就是写的时候这个这个英文的意思翻译过来就是继承,就是继承的这个方法就是子孙负业, 知道吧?就就比如说,比如说,我想个例子啊,就比如说你爸是抬棺材的,然后就这样说的有点难听。换一个啊,就拿你爸是抬棺材的举个例子,你家是不是做棺材这个业务? 这话说的有点难听,但是这样你们应该好理解一点,担待一下。 这是你,这是你爸,然后你不说抬棺材,说你家是开业的,你家是印钞厂,这是你,这是你爸。然后你家呢? 这是你家啊,你家,你家做的业务是印钞,生产钞票的生产发票, 这你,这是你爸,是吧?然后你爸,等下啊,镜头往他爸直看,直过来一点,生产钞票的,这是你,这是你爸。然后现在你爸要退休了,或者说你想跟你爸一起去做这个印钞的业务, 然后你们两个都,现在你们两个父子两个都想去用这个业务,因为你们这个印钞这个操作呢,其实是家族企业。你们家的业务就是印钞, 然后现在你,你想,你想去印钞,对吧?你想继承你爸的这个业务,你想做你爸这个业务,这这一个操作叫做继承。 然后你爸呢?原来原来可能混的比较好,就是混的比较攒一点,你爸是印美元的, 你爸是印美美元的,然后你们家呢?就是有一个印钞的业务,印钞, 这是你家的业务啊,这个方法就是你家挣钱的方法,你家就印钞,然后你爸是印美元的,然后你呢?这时候也也想找工作,也想印纸币,你家是印,然后你你,你是印那个日元的, 你跟不上你爸的步伐,然后你是印的日元,然后这这里呢?你要继承,继承不应该指向你爸,继承应该指向你家的这个公共的业务,你爸也是从这学出来的,这个就叫继承, 然后继承这个意思呢?我再从头给你们捋一下啊,现在是你,你爸,你家的祖传秘籍,这是你家祖传秘籍,是印钞票的啊,然后你爸呢?原来是印美元的,然后你爷爷那一辈呢?是印那个印仙大洋的 爷爷,仙大洋,你爷爷混的比较牛逼。 你爷爷,你爷爷是印谢大洋的,然后你爸是印美元的,然后到了你这,你这可能混的不行了,你是混,你是印日元的,然后这些操作呢?都是你们家的这个生产钞票,印钞这个动作,或者说印钞这个方法 是不是都是跟着你家祖辈里面的手艺学下来的?是不是你继承了他,然后你爷爷也是继承了他,你爸也是继承了他,然后你们三个做的业务都一样,就不能说是你你你家的是印钞业务,你这里你给你给你家篡改了,你家是烧纸钱的,这,这就不对了, 就是我想表达的意思就是这是一个公共的方法,然后这些方法就是你想自己定义的方法,这是你爷爷你爸,然后你们操作的这个方法抽象出来做的动作都是同一个动作, 然后这个动作呢就是印印钞票的,印钞你家就是印钞的,你们三个做的做的动作都一样,都是印钞动作,只不过就是具体的实现不一样。这这个能理解,这个技巧是啥意思?我这么说能理解吗?可以, 其他人能理解,反正就是你们上去讲,你们上去讲,或者其他人问你继承是什么意思?你就跟他说你家是印钞的,印钞他是一个公共的方法。这里我,我在这里结合上代码,印钞是一个代码理念, 公共方法。然后你,你是你自己写的方法,你们三个就是你爷爷辈和你爸这一辈全都是你自己生产的方法, 这,这就是你自定义的吧?这是你自定义的。哎,反正就这样,凑合看吧。 这个,这三个,这三个都是自定义的方法,自己写的方法,自定义的方法。然后 你现在要开始印,印,印一元,印钱,印美元,印些大洋,然后我们这是公共的,也用了一个继承下来祖传的方法。印钞,然后现在开始啊,你在这个方法里面,你,你在这个方法里面输入一元, 然后可能这个方法他就是这个方法,他就是进日元的方法,你就实现了实现日元自由。然后你爸呢?你爸混的比较牛逼,你爸就实现了美刀自由, 这样,这样能理解吧?你爸是输入美元,输入美元, 然后你爸实现了美元自由,你实现了日月自由。那你,你爷爷更牛逼,你爷爷,你爷爷实现了印,印仙大洋,仙大洋自由。这这这个,这个,知道继承是干啥的了吧? 继承是一个公共的方法,然后你自己写了一个或者几个方法,写了 n 个方法,然后你在你自己的方法里面传一些参数,传一些参数,传一些参数,然后通过你们祖传的这个秘方来,还是祖传下来的手艺 就继承了,继承了这个手艺以后实现了。你们要这里,这,你们要这个叫做业务逻辑,好听一点。说的太难听了,实现业务逻辑,这个能理解吧?理解了没? 他又说他懂了,都懂了吧?谁没懂呀?没懂的快说啊。好,你们都不说就我就默认,当你们懂了,后面问我,我也不告诉, 带着我们再来回顾一下吧,再给你们重新回顾一下。这里有个方法,这里是一个某一个框架的方法, 然后这三个就是你们自己的方法,这三个是你们自己的方法,然后你们三个继承了,继承了他的这个公共方法,你们三个就看我现在拉线的,这不要看别人,你们三个继承这个公共的方法, 然后你们要去调用这个方法,就是需要传一些参数,然后你在这里传参数,传这个参数,调用他,然后另一个方法传这个参数,调这个方法。 这其实就是写了一次代码,然后把后面的大体上的逻辑都是,就减少了那种代码的重复率吧,就是这个意思。我们再我们再点开代码看一下,你看这是我们用户的设备,我们多点几个看看,我们这是我们用户的设备,然后这里面就是对象,这个叫叫,这个叫做对象, 这个设备是没继承过的,这个这个继承,这是 copy, 是 配置,你看继承了,继承了这么多方法,然后然后继承了以后,我们看看他怎么用的。点这个设备,点开,点开这个设备是以后看,哎,这你看 是这个,反正大概大概就是这样吧,再找一个有吧,这个明显一点。我们看我们就看这里面的啊,银色的什么东西? 我们看看他用的哪些工具方法,我们来看一下,看这个是自己写的这个,你看这个就是用的继承的方法,他就是肩上代码重复性 这这一步就是这个继承这个东西对着代码讲,你们现在能理解了吗?能,能表达出来这个意思吗?能了,行,可能就是刚才说的有点繁琐,就是 大概有个这个意思就行。继承了,就是他有一个已经有的方法,然后你要重复利用这个方法,只不过就是中间可能传一些参数的时候做一些改造。 然后好,我们现在刚才讲完这个 service, 然后我们现在开始看这个业务代码,这里判断密码对不对?这里就从数据库,这这这里其实就是查一下数据库,从数据库里面把这个方法查出来,又返回到这看 id、 账号、密码、性别、姓名、头像、电话、邮箱添加时间,就是把这这一条数据给他查出来,理解了没?然后把这一条数据查出来以后,我们接着往下看,查出来这个数据判断完,他现在要做一个签名, 在这里做的签名就是就你们对着代代码往下点的时候,就是这个方法,可以点,就是 ctrl 加左键点下来,然后这里有一个下拉箭头,然后这里你看又执行了一个业务逻辑,然后这里你看啊,这里应该是又用到继承了,看他又继承了这个方法, 这是一个设备,设备下面继承这个方法,然后你就能直接去点,不需要在外面一样,只需要声明是这个,通过这个设备去点,直接就可以在这里面通过类似来调用类 似点。看这个黑深黑色的,就是自己写的这种没加粗的呢,就是他继承的方法,这些都是你家祖传的手艺,直接继承就能用。 然后你看现在他继承了,他用了这个继承的修改修改方法,其实到了这一步呢,他又去做了一个查询,根据这个用户 id 把他的这个账号头肯信息令牌信息查询出来了, 查询出来这个信息,然后他又在这下面做了一个时间的处理,这个叫做令牌续期吧,设置令牌续期, 一键在这设置令牌过期时间。然后在这里他用了一个修改的方法,他把这个值这个值放进去,最后他在这里你看托肯,找一下这个托肯,看他哪里复制了, 他把这个托肯复复制了之后,他从这就把这个托肯返回过来了,然后就登录以后这个托肯就是那一串那个随机码嘛, 然后我们再点开我的那个老图,再一层一层看一下,你看 ctrl 了接受前端参数,设备是执行那个业务逻辑做做处理。然后这里的话是有些时候呢,他可能是在这里做了一个什么样的操作,他可能是就是我们刚才代码里面的那个操作,直接, 然后相当于直接跳过这个麦,然后再跟麦穗过去交互返回,然后一层一层再往过走,走到这 他处理完这个请求呢,你看啊, ctrl 了接收到前端参数,第一步是 ctrl 了接受前端参数,接受完前端参数,把这个参数再随时下放到这个下放到这个设备室里, 放到这个设置里面了,然后这个设置又去查数据库啊,看查数据库,把这个信息查出来,然后再给他做个修改,放到数据库里面,最后再给他把这个托盘返回, 再最后再把它这个最后的这个值再一层一层的去返回,回去从这到了这,从这到从 control 到了这个设置,从设置到了这个 map, 再到数据库,数据库再返给 map, map 再返给设置设置,再返给 control, 最后 ctrl 了再返给这个前端就到了。这一般来说他们交互的话就带着后端返回,一般是返回一个 zs, 你 看这个就是 zs, 你 们都知道是啥东西吧? 从后端的话也没啥东西,后端的话就这些东西还有啥问题吗?哎,那那个图在这,我那个表,让我截个图,这个吗? 这个我一会发你,我一会发你。对,就这个啊,那行发我一下,发我一下,然后那个 token, token 不是 一个,不是一个什么加密的一个东西吗? token, token 在 这里只只做登录令牌啊?就登录令牌是吧?啊?对,没别的用。行, 看看,大家看一看还有什么其他后端的问题。就是我们再总结一下吧,就是我们从前端去找后端接口,怎么找?就前端有按钮吗?点一下这个按钮, 这里他就弹出来一个新的这个是我们点开这个的时候,我们按右键检查或者 f 十二,然后点开这个网络,找后端接口的时候点开这个网络,再点这个,选择了这个,然后再开始去一个一个去找,你看点击这个查询,点击这个查询,你看他路径是这,然后我们再拿上他的这个, 我们再拿它这个模块的这个前缀,在后端代码里面,按住 ctrl shift 加 r 做一个全局搜索, 我找到这个后端的整个模块,然后再看他这里请求的是哪个具体的操作。这个是历史的查询的一个列表,我再搜一下 ctrl shift, 搜一下历史,找到这个历史以后怎么调出来的呀?这个吧, ctrl 加 f, ctrl 加 f 这些所有的这种代码便捷器它都是一样的, ctrl 加 f 就是 在当前的这个文件里面进行搜索, 然后 id 里面的全区搜索的话,是 ctrl shift 加啊。然后找到这个以后,再看一层,一层方法,去 一层层去看看这个,这个就是这个方法,就是三层,典型的三层,典型的一个三层架构。点到这个设置里面设置方法,然后这里面有一个 map, 然后这里是具体的那个 map 层,然后这里是具体的那个窗口,放到数据库执行一下啊,查询,点击查询 连运行,然后数据就这么给它返回,返回了它后端返回这个数据的时候,你们不用管它怎么转换,它返回了这个数据以后,它就自动转换成这种了, 然后再点点回来,一层一层的,你看他直接就在这里喷他就反正就是一个参数不停不停的去转,转换,转换完这个参数,最后下放到这个数据库里面,数据库再把数据库返回的参数返回给后端,后端再返回给前端,他其实就是整个过程呢,就是一个参数流转的一个过程,他并没有多么复杂, 你看输入数据,带着这个输入数据请求后端,后端把这个数据处理完,返回给前端,然后页面再变完,就这样,这这样理解了吗?这样有问题, 有没有人,有没有谁?没有听懂都 ok 了吧? 听不懂的话那,那没招了。听不懂的话我录个屏,先录屏去吧,讲的好,好与坏也就这了。然后你们自己其实可以自己找一个这种 ai 软件,然后把它圈起来,就是你哪里有疑问,选中它,问它这段代码的含义 是什么,可能就是这种 ai, 你 们不知道 ai, 他 ai 他 反过来东西绝大多数时候他都是对的,但是有小部分时候他反的这个这个解释代码解释是不对的,这种情况是占少数部分,基本上他这个都能把正确的反过来,这种情况估计就是千分之一才能与遇到。 你可以直接去问呀,就是选中代码去问他这段代码什么意思,然后他的整体的逻辑是怎么样的,这个还有疑问没? 没疑问的话就这吧。然后把这个方法看完,你看他会给你们反过来一个流程,你可以自己去问问一下。然后像这个东西的话,正版用不起,就淘宝上买个假的去凑合用,反正是能凑合用。 哥你待会咱俩单独打电话,你再帮我运气。你俩这程序我又忘了,哎哎,一会你进去。嗯,行,那我今天就就后端的话。