粉丝1148获赞1.4万

面试官问说一下 springboard 的 启动原理?很多人面试被问到这个问题啊,就直接开始去背定义,什么慢方法呀,软方法啊,自动配置啊,一长串下来,面试官听得昏昏欲睡,这题呢,基本上就凉了。其实面试官要的根本就不是你背了多少流程,而是你能不能够用一个通俗的场景,把 springboard 的 启动的核心逻辑给讲清楚, 证明你真的去分析和理解过。今天呢,我就用一个项目通俗化的场景,带大家把启动原理拆解透彻。面试的时候呢,可以直接照着说, 假设我们要启动一个用户管理系统的 springboard 项目,整个过程呢,其实就像搭一个工厂一样,一步呢都不能错。如果你担心简历上的东西讲不出来,我已经把面试经常问到的一些技术站场景题都整理在两百万字的面试文档了, 里面针对每个知识点都有很详细的解析思路,只要你是我的粉丝,留言六六六就可以打包带走。首先,项目启动的入口是启动的慢方法,这个呢,就像工厂的总开关,你调 spring application 点 run 之后呢,第一步不 是直接去搞配置,而是先去加载基础环境,它会先读取项目里面的 application 的 yammer, 或者 application 的 property, 还有系统环境变量,比如说你配置的 server port 等于八零八零, spring application 的 name 等于 user manager, 这些信息呢,都会被加载进来,成为工厂搭建的一个基础规则。接着核心的步骤来了,创建 spring 容器。 spring boot 的 本质呢,是一个 spring 的 交互架, 容器就是工厂的一个核心车间,容器的作用就是帮我们去管理所有的病对象,以后呢,我们在用到的时候可以直接从容器里面去拿,不用自己去遛。但是问题来了,我们只加了 spring boot start web 这个依赖,为什么不用手动配置他们看的不用手动去写 spring m v c 的 配置就能用呢?这就是 spring boot 核心的自动装配机制在发挥作用,它会扫描所有的 start 依赖,加载对应的自动配置内。 比如引入 web starter, 它就会自动加载 web mvc 的 自动配置,内置它们开的配置。如果引入 data 杠 g p a 杠 starter, 它就会自动加载数据库连接的配置,而且它不是一股脑的全加载,会通过 condition 的 注解来去做一个判断。比如说只有当前容器里面没有自定义的数据源的时候, 还会加载默认的 eric 这样一个数据源,只有引入了 web 相关的依赖,才会自动去配置他们看的服务器,这就是按需配置,帮我们省去了百分之九十的繁琐配置的一个工作。然后呢,容器和自动配置都搞定了,那下一步就是启动内置服务器。 spring 打包出来是一个架包,没有外部的他们看,靠的就是内置的,他们看的服, 自动配置的人会帮我们去出实话,他们看的监听我们配置的端口,把项目部署上去。最后一步就是容器启动,服务器就绪, springboard 会发布应用的就绪事件,这个时候项目就真正启动成功, 我们就可以通过八零八零端口来访问用户管理系统了。总结一下 springboard 的 启动原理,就三个核心,加载基础环境创建视频容器加这种配置,启动内置服务器,用这样一个场景来讲,逻辑清晰又好记,面试官一听就知道你懂原理, 不用死记硬背,不管你做的是用户系统、订单系统、支付系统,启动流程都是这个逻辑。 ok, 如果大家觉得我讲的内容对你有帮助,请点赞收藏,下次面试的时候遇到的话可以直接拿来用。我是 mike, 我 们下期再见。

面试官问你有没有优化过 spring boot 启动速度,那很多人可能会回答加类似注解,或者换成 grub em, 那 你这样回答呢?没有太大的问题, 但是一听就是八股文。面试官他其实更想听的是你在实际的项目里面是怎么排查的,又是怎么定位到启动速度慢的这个问题根源的,然后怎么一步一步去解决的。首先我们要知道要优化启动速度呢,你要搞清楚 spring boot 的 启动流程。 当然,其实你也只需要知道,最慢的这一步其实就发生在它的自动配置的读取,还有并的扫描创建过程当中, 它基本上消耗了我们整个启动速度的百分之六十到八十的性能。那当然,其实 spring 部的内部关于自动配置类的读取, 它其实有一直在做优化。那我这里整理了一套 java 程序啊,学习 ai 的 完整学习路线图,加完整学习视频,加配 一套代码笔记加配套的项目实战,从大模型选型到微调,再到 ai 开发 agent 的 框架,最后到项目实战,你像智能客服 red 知识库,手撸小龙虾,垂直 agent 的 walk flow 流程开发,最后到部署,为了让大家更好的去面试呢,还整理了一套 java 加 ai 的 高频面试资料,通通无偿分享,需要的小伙伴留下 ai 就 行。那包括 他利用了多线城去过滤自动配置类,因为配置类获取到之后呢,并不是每一个都有效,他就利用了多线城来进行过滤。那包括呢, 它也单独地把自动配置类的信息从 out configuration 点 inputs 里面给它单独移植到了另外一个文件当中,这样呢,读取文件的速度也进一步提升了,包括在 spring boot 三以上的版本,它加入了 gromm, 也是为了 优化启动速度,所以 spring boot 它对于启动速度其实做了很多的优化,基本上我们能介入到 spring boot 的 内部的优化已经很小了, spring boot 基本 都已经考虑到了,所以我们要优化启动速度呢,肯定不是去找 spring boot 的 本身的原因,真正的罪魁祸首呢,通常就是我们项目里面那些启动的时候会去预加载数据库的连接池,要建立大量的数据库连接,包括我们可能 在启动的时候会去读取数据库,去做一些缓存预热,甚至我们有可能会去调用一些远程的 第三方 http 接口去读取数据,那这些才是拖慢速度的元凶。所以我们要优化启动速度,第一个原则就是要先找到耗时的点在哪里,我们才能再去考虑优化。那怎么找到耗时的那个点呢? 我们可以通过去配置 springmind 这个 log, start up in four。 在 启动的时候呢,我们就可以看到 spring boot 它的启动的每一个步骤的耗时时间, 那基本上就像我刚刚说的,就是病的扫描创建这一步呢,通常速度是最慢的,那关键是我们怎么能够确定是具体哪一个病最慢呢?那首先我们可以通过 spring boot extractor, 然后去访问它的 start up 端点,在里面呢,它就会列出每一个步 骤启动的耗时时间,那你一眼呢?呃,就能看出来到底是哪一个病它的速度最慢。当然其实很多 spring boot 的 项目呢, 呃,他可能不会去启动 spring boot 的 extraiter, 所以 我在这里呢再教大家一种方式,你可以利用 spring 的 扩展点,比如你可以在病的创建之前的这个扩展点,关于病的生命周期九个扩展点我在这里不去细讲,我给大家准备了一份 spring 全家桶的 一百道高频面试题,大家需要的话可以直接扣 spring。 那 么通过这个创建前的扩展点来去记录一个开始时间,然后在病的创建完之后,也就是科普化之后的这个扩展点呢,去记录它的结束时间,那么你就可以得到每一个病的创建时间, 并且呢,你还可以进行一个排序,把最耗时的给他排在前面,那么你就可以一目了然的精准定位到最耗时的那个病。那关键是定位到了,我们又应该如何去优化呢?那通常定位到了之后呢,基本上都是因为这个病他在创建的时候, 或者他在部署化的时候呢,比如去预加载了数据库的连接池,或者去调用了远程 http 的 数据,或者做了数据库的读取等等。所以如果你要优化的话,首先你要考虑当前这个 bug 它是不是应该包含在我们的项目里面,如果不包含的话,你应该通过 component scan 去指定精准的扫描路径,而不应该把当前这个耗时的病给它包含进来。那么另外呢,呃,你也可以通过 spring boot application 这个注解的 exlude 属性来去排除掉必要的那些病。当然这两种方式呢,都是告诉你啊,不必要的病给它解除掉,但是如果这个病我们就是需要呢,那你可以呢开启览加载, 你可以通过去设置全局览加载,或者单独为那个耗时的病去设置览加载,这样呢就不会在启动的时候 去加载那个病,而是等到那个病用到的时候才会创建。那你设置完了加载之后呢,通常啊速度就会有一个质的提升, 那如果没有提升,说明这个病呢,它可能在启动的时候就已经用到了,比如说你这个病可能没有去调用它的方法,但是如果进行了依赖注入,比如病 a, 依赖注入病 b, 你在并 b 上面加了一个类子主键,即使你没有去要用并 b 的 方法,那其实也被并 a 呢已经用过了, 所以在启动的时候呢,由于会经过依赖注入,那所以懒加载也就无效了,所以有些并你即便加了类子,它也会在启动的时候呢进行加载,那这个时候你只能考虑看能不能采用异步处理或者多线程去优化, 或者把那一部分耗时的代码逻辑呢给它单独拿出来。你要选择启动快,那你就要把那一部分耗时的代码 在首次访问的时候呢进行执行,所以你就只能在启动快或者首次访问慢二选一。那最后呢,当然我们也可以通过 java vm, 它是 spring boot 三征集出来的,专门用来解决 spring boot 启动速度慢的这个问题, 它甚至可以将启动速度给优化到秒级以内。听起来很美好,但是呢限制也很多,比如说我们如果代码里面使用了动态代理,或者使用了一些反射,其实是需要做很多额外的配置的, 所以如果你要将老项目改造成 graph v m, 其实成本会比较高,影响呢也会比较大,所以不太建议,那新项目我们可以考虑,所以最后我们来总结一下 spring boot 我 们要进行启动优化的话,框架内部已经 没有太大优化的余地了,因为 spring boot 它已经内部做了很多的优化。那其实更多的问题就来自于我们 一些第三方的病,或者我们自己的病加载了一些耗时的数据,或者执行了一些耗时的代码逻辑,所以这个时候你就需要首先定位到是哪一个病,然后通过一些懒加载的手段, 或者将耗时的代码从粗式化里面给它挪出来,我们让它首次调用的时候再去加载。或者最后呢,我们使用 graph v m 来进行一个整体的升级改造,但是呢限制又会比较多。好,那我就给大家分享到这里,我们下期见。

大家好,我是威西克林,今天我们来讲一下这个 java 的 spring boot 代码怎么去快速的定位我们的核心代码。好,首先呢我们登录一下这个项目看一下。啊, 啊,首先这个,呃,我们跳转到刚才的登录页面吧,我们退出一下,就是说这个登录页面的这个核心代码应该怎么去找呢?这登录的话是比较特殊的 好登录。首先我们来看前端,前端代码的话,如果说你看过之前的视频就知道前端代码是在这个 resource 下面有一个 alert, 有 一个 flonter, 它分别对应的是我们这个客户端和管理端。好,管理端的话,这里你看有一个这个 agent, 所以 说它就是管理端的,然后客户端呢,这里有一个是 front 啊,这里就是有一个 front 啊,当然有的同学它的代码是没有客户端的,它只有一个管理端,那里就只有一个 agent, 这个呢你就不用去管了。 好,然后我们怎么去定位到对应的前端呢?就根据这个啊,根据它的警号,后面呢有一个这个 views, 然后呢里面有一个这个 log, 点 view, 对 不对?就就在这里。 好,那客户端这里呢?客户端也是一样的,客户端这里是不是有个杠 logo 啊?但客户端稍微有一点不同哈,客户端它这里呢有一个 s 二 c, 然后配置,配置下面呢,它有一个这个 logo 啊,它注意这里是配置,对吧?好,这个就是前端的定位,那我们先登录进去看看。好,那我们登录这个功能的后端代码怎么去找?包括我们所有的后端代码都是这么一个找法,我们右键右键点一下检查, 右键点一下检查,然后点一下这个 network, 点下这个 network。 好, 原来我们选择这个 fetch 叉 h r。 当然如果说你这个浏览器被进行汉化了之后呢?那我们就要选择这个网络。好,然后我们登录一下这个账号,好吧?我们登录一下这个账号。 好,你就记得你要找哪个功能的代码,你就把哪个功能操作一遍。好,我们登录一下管理员这里,发现有一个这个登录的这个日期。好,登录日期这里呢,你会发现问号后面,问号后面这些东西都是参数,咱们不用管。好,然后呢,这一串东西我们也不用管,这些东西都是统一的,你看 这东西都是统一的,所以说这一串我们也不用管,咱们就找这个中间的这个杠 user 杠 login 就 好了。好,这个杠 user 杠 login。 怎么去找呢?咱们先找这个 user 的 空丘了啊, user 空丘了,后端呢?它这里有一个 java 代码,里面有空丘了,咱们先找这个 user 的 空丘了。哎,是不是在这里?在这里。 好, user 控制器找到之后呢?然后我们就搜一下这个杠 logo 啊,其实也不用搜,在这里就看到了,然后包括我们,我们这些代码,哎,都是有,都是有注视的,对吧?好,这就是我们核心代码一个找法,那包括你如果说要放到论文里面,你登,登录了核心代码,你放到论文里面怎么办?直接把这串复制下去就行了,对吧?好,这就是我们登录了一个核心代码。 好的,那其他的功能模块怎么办呢?比如说我们随便找一个这个楼宇信息,你看这个杠,是吧?井号后面杠楼宇信息,那我们看一下井号杠楼宇信息,那这里有没有呢?我们点开这个 modules, 有 一个,有一个,这个楼宇信息上面楼宇信息 啊,找一下在这里,对吧?好,然后它里面有这个,这个就是我们前端的核心代码。好,那你后端代码怎么去找呢?哎,后端代码其实我们也不用像这样去右键点检查了, 我们很好找啊,就说如果说你功能实在找不到,你就用我这个方法右键点检查,然后我们去找这个请求链接,其实我们大部分情况就根据这一串就能判断了。哈,你看这个楼宇信息,我们就找这个楼宇信息的空缺了。好,找到之后呢? 那你看它的上面有后台的列表,后台列表就是我们后台的这个列表页,然后你看真删改查前台,前台他也有这个楼宇信息功能,对吧?啊?我前台我就不演示了,都一样的,前台都一样的。好,所以说这个核心代码咱们要复制到论文里面,咱们就去把这个 qq 的 代码复制进去。 好,那么本期视频呢?这个核心代码找法就给大家讲清楚了,咱们就讲到这里啊,如果觉得喜欢的话,请多多点赞、收藏、关注、支持一下,咱们下期视频再见。

呃, spring boot 启动太慢,你是怎么去排查的呀?啊,我去看日制,就比如说它哪里卡住了石器,我还没有遇到过。嗯,你可以从红光到微光展开讲讲。首先 spring boot 它启动分为六大阶段啊,它是环境准备上下文初步化,再到并扫描,再到自动配置, 再到切入式的一个容器启动,再到自定义的一个抽象,我们只需要去加一个 bug 参数,或者启动这个 log in application listener 的 一个启动耗时统计,就能看到每个阶段的一个耗时了。当你看到某个阶段耗时比较长,我们就可以对症下药了,对吧? 然后环境准备比较慢,可以检查配置中心, nasa, 阿波罗这些远程配置拉取是否是因为这个网络或者重试卡住上下文或者并触使缓慢。有很多种情况,第一是某个 pos 的 construct 里面调用了外部的一些接口,第二点呢,是 configuration 里面做了些耗时的统计。第三是病的数量太多, 比如扫描了不该扫的一些包。第四点是循环依赖触发了多次的一个代理,然后自动配置卡住某些 starter 在 初识化连接时时堵塞,比如数据库连接不上,一直重试容器启动慢呢? tomcat and tom 这些端口冲突 ssl 的 一个初识化慢,或者静态资源扫描过多啊,理解了吗?哦,理解。 最后视频配套的面试题答案都整理在评论区了。另外,如果近期面试受阻,没有面试机会,我们也有面试突击陪跑服务,可以私我咨询。从简历优化、项目包装技术突击、面试突击项目业务难点亮点梳理、模拟面试、面试复盘定向内推等。

好朋友们大家好啊,今天给大家介绍一下如何给自己的呃避暑项目上云啊,如果说你的项目是 siri 加 voe 的 话呢,你可以看一下这个视频,然后呢就可以教会你如何把自己的项目跑在云服务器上面。首先呢我们要去买一个云服务器 啊,你现在呢去阿里云或者去腾讯云都是可以直接购买的。之后呢买完服务器的话是两核两 g 的,是完全够用的。之后呢买完服务器的话,你把这个二十二端口开开,然后八零八零八零, 还有这个三三零六,这个是 s s 去远程服务的,这边就是我连,这边是我,我用那个叉秀远程连接我的服务器。然后呢要把这个八零端口,八零八零端口和三三零六打开,这个呢是我们应用应用程序端口,这个是我们的服务器端,这是我们的数据库端口。 之后的话呢就是通过这个哎,你可以用叉 shell 或者是 final shell 都可以去连接你的服务器,连接你的服务器之后呢你就可以去安装这个环境,安装家暴环境,安装完之后呢,你直接输入这个呃 java version, 它就可以出现这个 呃安装成功的标志,如果说它能出现这个证明安装成功之后的话呢,呃,我推荐大家用这个这个三通 s, 因为这个会比较简单一点。 之后的话呢再去安装咱们的一个数据库,咱们数据库的话呢,安装的话也是可以用这个亚姆的一个资源去安装,然后我这边已经安装成功了,给大家看一下状态。对,这是 ccm 六十 max code 的, 然后这个是绿色的,代表它是正在运行。 然后我们看一下这个下面这个 gdk 装完之后装满 circle, 满 circle 装完之后呢,我们就在我们的本地呢去更改我们的一个配置项目, 我们呢需要把我们这个壁设项目当中所有的这个 loghost 换成我们服务器的 ip 地址就可以了。然后呢要把数据库的密码呢换成你云服务器里面那个装的 nico 密码,这样的话呢就是你只需要全机替换, 把 logo house, 然后切换成你的这个服务器 ip, 哎就可以了。然后先切换,然后切换成去切换成你的服务器 ip 之后,然后我们点开我们右边这个 menu, 然后点开这个生命周期,然后先点可令,可令的话呢就就是去清理我们的这个呃编辑后的文件,然后看到这个,看到这个 build success 的 话,就证明它已经清理成功了。然后呢再打,再点开这个啊 package, 它就呢它呢就可以去将我们的这个程序进行一个打包操作。 打包完之后的话呢,我们可以看一下它会啊,这个是需要等待一会儿的,等待完之后的话,它会有一个,它这边有个新的 tagger, 然后呢你就去新的 tagger 里面 tagger 里面去把那个, 哎去把我们的这个看这个我们的一个架包上传到我们的云服务器,怎么上传呢?你看定定了这个 tagger 之后,然后呢我们找到这个架包,然后呢我们直接到我们这个里面工具里面去用这个啊 x i x f t p 去传就可以了,我们就直接这样拖进来, 哎他就可以传了,因为这边我已经传过了,传过了他就会有,他就会显示传,传进来之后的话呢,我们把这关了, 传进来之后,我们在我们的这个啊入头目录下就可以看到,对吧?那这是我自己传的 gdk 啊,这是我刚才传的价包,然后呢我们输入一个命令就可以去运行了啊,这边是我写的一个文档,我们输入一个命令 啊,就是可以去运行了,启动的话就出这个命令。 no help java 杠架,然后你看这在 linux 服务器里面,我们通过 java 杠架,然后指定这个架包它就可以运行了。后面呢这是输出的目录,然后因为我们就可以看它的目录,然后这个是查看它是否运行,我们看一下 啊,我这边都是已经调好了的啊,说这个命令就可以查看你的架包是否运行,这就是在运行的好,运行完之后的话呢,你就可以查看它的地址。 好,对,好,这个的话就是啊,下面的这个十十一十二的话就是我写的一个,呃,就是你通过你通过这个命令把项目跑起来之后呢,我们就可以在我们浏览器里面输入我们的公共 ip, 然后呢就可以去访问了,访问的方式跟本地是一样的,只不过你需要把 logos 换成你的这个 啊,楼靠子,换成你的公网 ip, 然后你看这边是我们的客户端,这边图片都是可以看的,然后呢我们在管理端也是可以登录的,然后我们在你看我如果说去修改这个图片的话呢,也是可以修改的啊, 那正常的话应该就是这样的图片,然后我们先上传一个,这样的话更新, 对,然后他就会同步这边呢,就是图片上传也是没问题的,因为我之前上传遇到这个图片图案的问题呢,我就把它呢,我就在我的这个,呃,在我的这个录的目录下,我新建了一个阿波洛的,阿波洛的一个目录,然后呢就把所有的图片呢都上传到这个目录里面就可以了。 ok, 这是我做的一个文档,有需要的可以私信我,都是免费送给大家的。好,这个就是这个视频的全部内容,谢谢大家。

面试的时候呢,我经常会问后勤人一个问题,平时开发有没有思考过, spring 已经足够强大,那 spring boot 究竟在它的基础上做了哪些架构层面的风光?这个问题啊,抓住一条主见就行。 spring 搭建起了核心容器底层架构,而 spring boot 呢,所有优化与风光 全部都围绕容器启动前、启动工启动后三个阶段展开。那另外呢,我整理了一份 ai 赋能掌握的学习路线图,还不会的呢,进粉丝群,我帮你梳理面试思路。 首先啊,是路由器启动之前,早期的原生 spring 开发最让人头疼的就是菱形繁杂的叉 mill 配置,项目越大呢,配置越难维护。 spring boot 没有改动 spring 底层核心,而是做了一层巧妙的架构设计,把项目所有配置统一封装中。 element 环境对象,依靠这层品仪的封装,它直接规范了配置格式,将 杂乱配置它没归集到 yamaha pro 的 总院里,极大简化了配置管理。也正是一套这套设计啊,市面上各类分布式配置空间才能轻松无缝接理 spring 形态。 看懂这层逻辑呢,就摸清楚了配置中间件的底层原理。其次呢,是引起启动运行阶段,这也是两者架构差异最大的地方。原生 spring 早已实现了重解开发,摆脱了 xamora 诉说 依旧,但依旧存在组件手工装配繁琐依赖整个麻烦的问题。 spring bot 呢,在此基础上,完善了整套的自动装配机制,整合各个依赖包中的组件配置,再搭配条件注解,实现按需加载。现行约定大于配置的思想, 把行业通用开发实践提前封装好,我们引入依赖呢,就能直接使用组件,省去大量重复开发工作。同时,它还优化了 spring 原生的事件监听器, 把项目启动每一个流程都定义成生命周期事件。我们自定义监听器呢,就能精准捕捉启动节点,实现自定义业务逻辑,这也是日常开发里很实用的扩展技巧。 最后呢,就是容器启动完成之后啊,原生死运项目启动报错,只会抛出笼场杂乱的异常对战排查问题啊,十分耗费时间。死运报错呢,专门优化外异常解器关掉,把贵色的底层报错转化为通行易懂的提示, 快速定位步骤原因。除此之外啊,它还提供了 command and run 这类抽象接口,在项目启动就绪后呢,方便我们执行缓存、加载、数据抽象等后置操作。这个设计啊,既不破坏使用原本的生命周期,又能啊灵活的把开发权限交还给开发社,竞选优秀的架构设计师。 现在呢,也有很多人依赖 ai 写代码,觉得框架底层原理没必要深究,但我想说, ai 呢,只是提升效率的工具,真正决定你技术上限的,永远是架构思维和解决问题的能力。

我看你项目里面用到的框架是 spring boot 啊啊,那么 spring boot 它里面有很多的配置对吧?比如说 yamaha 啊, proportes 呀,那这些配置的加载顺序你清楚吗?那假如说举个例子啊啊,我驾包里面 proportes 文件里面设置了端口, yamaha 文件里面呢,也设置了端口,然后启动命令也指定了端口,那么最后哪一个它会生效? 嗯,我记得 emui 和 proportes 好 像优先级是不一样的顺序,我记不太清了, 这个你应该要记清楚啊,因为这个他不只是面试,你平时在工作里面对吧?你去查询一些配置的问题的时候,也一定会用到的,或者说一定要知道的。那么核心原则呢,先记死啊,越灵活的越靠近运行环境的配置,那么优先级越高。如果你担心简历上的东西讲不出来,我已经把面试经常问到的一些技术站 场景图都整理在两百万字的面试文档了,里面针对每个知识点都有很详细的解析思路,只要你是我的粉丝,留言六六六就可以打包带走。那么从高到低呢,一般有几个层级啊?第一个最高优先级,所以我们加了杠 g a r 后面加的一个参数,临时去改配置,他不用去改代码的,优先级是最高的。那么第二个呢,就是操作系统的环境, 那么像线上的容器部署,基本上呢都是用环境面料传敏感配置,比如说数据库的密码,你不用写在文件里面,那么更加安全。然后第三个优先级呢,就是夹包外部的配置文件,就是和夹包放在同一个目录的 properties 或者说压麦文件, 那么线上改配置呢?你不用重新打包我们的夹包,然后直接去改外面的文件就行了。那第四个呢?就是我们啊 config 目录下面的配置文件啊,就是 resource config 下面的配置。然后第五个就是我们夹包内部跟目录下的配置文件,就是我们 resource 下面直接放的配置。 优先级最低的就死命不能默认的,那比如说默认端口是八零八零,还有一些很多其他的默认配置,那么优先级都是最低的。 ok, 五个坑就同一个目录下面如果说有 properties 跟 ymail 文件好,那么 properties 的 格式啊,优先级是要高于 ymail 的。

好,这位同学。嗯,一些同学跟我说,他说他学 spring boot 学三四个月,我说你到底是在学什么?学三四个月有那么难吗?什么东西有那么难呢?我有时候感觉很生气啊我感觉没学会,我很生气,有那么难吗?我来展示一下 是吧。你先建一个叫什么 serbian 啊,你建一个 serbian 的 项目,这会吧都是很简单的是吧。用 make 来管理。这里选你的 jdk。 直接下一步 啊。直接下一步,这里要什么呢?你可以,如果你要什么依赖,你就在这里选就行了,但我就没有在这里选。选一个老一点版本的创建,这不就一个 spring boot 的 项目创建出来的吗?写什么?写接口啊,我们来创建一个接口, 叫什么 students? 直接创建设计表,新建表。有什么东西啊?是吧? id, 嗯? it, 这有什么东西呢?对不对? id, 这是自增,保存一下。 有什么东西呢?是不是拆一条数据,一乘三十八, 加一下二十米四,这有什么东西啊?二八,没什么东西啊,对不对啊?上来进来 给依赖换一下。都是模板性的东西,换个依赖,依赖一换是不是对不对?换一个 g t k, 用八版就是换个名字,换成你这个项目自己的名字 series 刷新一下对不对啊?在这里新建一个自动生成的类。 都是模板性的东西,念什么难的呢?看一下模板性的东西,把这个改一下,改成你自己数学功名。自己数学功名叫什么? s t u d n students students, 然后这里表明是什么?表明也是 students。 复制完了好运行一下。 看一下为看一下为。为什么错误啊?密码不对,改一下密码呀,改一下密码,再让它启动一下。 on no database students is do student 少了一个 t, 少了一个 students。 下面这里再给它改一下,再来检查一下。好,启动 好。这文件它都自动生成了,对不对啊?它都给你自动生成了,五百线的东西,有什么难的呢?对不对?你再来给它写一个控制器啊, 有什么难的?写 rest, rest, 先把注入一下 word 来啊。都自动生成的东西,这有什么难的,来个 查询全部全部学生查询全部学生接口,对不对?先 get, 先用 get money。 好 吧,用什么?用一个,你这个名字叫什么 list。 很 简单的东西啊,这都自动生成了,都不用我写 返回值,返回什么 this 点 啊,这不就一个查询学生的接口出来吗?把项目启动一下啊,这里打一个包, 非常简单的一个东西,导入你的 mac 包。你的 mac 在 哪里?找一下 mac 在 这里。直接把这个复制过去,直接把这个复制过去启动。 看下原因啊,没有配置数据库。那再配一个就好了呀,我一般用样文件 是吧,都是模板性的东西。是不是刚刚那个叫 t u? 这个键盘真不好用,再给它启动一下啊,不好意思,密码忘记改了, 不好意思呀,很简单,都是很简单的东西,有那么难吗? 啊,已经启动成功了,你再来测一下 ctrl 叫什么接口。 list 接口,把它复制,用 posman 打开 list 测一下,看一下四零四 not found。 没有找到这个接口。 找一下元音 students comfort 啊,那前面再加一个这个好好, 这样不就行了吗?这不就是我们刚刚的那个三个学生吗?背课都不用背,直接写这么简单的东西,不知为什么有的人学不明白。 很简单的东西啊,是不是有什么东西呢?一个依赖, spring spring web 的 一个依赖,这是 mybites plus, 一个生成器的一个依赖,下面这是什么?没有东西啊,一个数据库的依赖,一个 log log 的 依赖, 非常简单,七分钟,七分钟还带有报错是吧?还顺便还解决报错。这么简单的东西,为什么有同学学不会呢?还有同学跟我说他学两三个月 spring boot 这么难吗?啊?你弄的都是简单的, 所有东西不都是增删改查演变的吗?你再复杂的逻辑底层还是增删改查呀。你举一反三是吧?你举一反三写自己的东西啊,你要用对技术嘛,不要有敬畏之心,会使用不就行了吗?这么难这么难, 又不是让你去造 cpu, 你 会用 cpu 不 就行了吗?你非要搞这么困难干什么啊?传进学生会行,换一个 根据学生 id 是 吧,还是学啊,都喜欢搞这个是吧?继续啊。一样啊,你要写其他的接口都是一个逻辑啊,你只要把逻辑搞清楚了,都是很简单的东西嘛。这叫什么?通过 id 对 不对?好? get students in id, 那 都直接生成了 return this 对 不对?都直接生成的东西, get 版 id 是 吧?就直接填传传入 id 啊,再启动一下。 好,又启动成功了再来测一下,再慢测一下,那就这就不是 list git? git 什么?通过查几号 id, 查一号学生 id 是 吧?这不就一号学生查出来的吗?对不对?非常简单的东西,为什么要把一个东西搞那么复杂呢, 你说你不会写是吧?我也不,我刚开始也写错了呀,我前面不是出现好几次报错了吗?你看报错呀,对不对?嗯, 有错不要怕呀,对不对?你怕报错那肯定不行啊。啊?为什么?这其中不行看报错呀,你前面报错呀,对不对啊?优了找不到,这一看,这找不到数据库啊,你配一个数据库不就行了吗,对不对?哎, 你有什么你看一下报错,哪里有报错,你就修改一下呀,非常简单的东西,有什么难的呢?有些人一说说学三四个月,你在学什么呀?学三四个月,哎呀,看别人学不来,我那很急得慌。 嗯啊,那今天就这样吧,是吧,有什么不明白的是吧,你有什么报错?你问 ai 也可以啊。啊,老师,我前端不会写,你前端不会写,你 ai 写啊,对不对? 有问题直接解决问题就行了,不要说不要对技术有敬畏之心,你会使用就行了,你面试一个出租车司机,你会开车就行了,你非要弄懂什么发动机的原理,你这你谁能弄得明白对不对?你会开车就行了呀。

spring boot 里面啊,有一个很重要的点,就是 spring boot 的 自动装配啊。呃,你能跟我讲一下它是怎么去做的?嗯,我记得就是加了个 spring boot application 它的一个注解,然后它就自动帮我们把所有需要的配置都给加载好了。 嗯,那它怎么去加载的呢?就是它怎么去知道我要加载哪些类?嗯,然后哪些是我需要的,它是怎么去判断的?这我还真没有仔细研究过。首先啊,你得先搞懂啊,就是自动装配到底是什么? 说白了就是 springboard 为了去遵循我们约定大于配置的原则,你只要引入了相对应的 start 依赖,它就会自动地把相关的变量给你注册到 ios 容器里面。好,它就能够去很快速地去整合一些框架,比如说像 release 等等,那你不需要去写一堆的参数配置了。如果你担心简历上的东西讲不出来, 我已经把面试经常问到的一些技术站场景题都整理在两百万字的面试文档了,里面针对每个知识点都有很详细的解析思路, 只要你是我的粉丝,留言六六六就可以打包带走。它的整个流程呢,其实你可以分为四步去加,第一步,核心注解,开启开关,也就是在启动内里面我们会去加一个 spring boot application 的 注解,那么这个东西呢,其实就是一个组合注解核心有三个。第一个呢,就是 spring boot configuration, 本质上就是一个 configuration 注 解,说明启动内啊本身就是个配置类好啦。第二个就是 come point sky, 扫描你自己写的代码里面的 ah, come point, service 这些注解,那把这些病呢,给我装进去好啦。第三个啊,就是我们自动装配的核心注解啊,就是 enable auto configuration, 那 么这个开关加了以后,我的自动装配呢,它才会生效好。第二步就是加载所有的自动配置类 and boot configuration 里面啊,它会去导一个 auto configuration input selector 的 类。这个类呢,会去读取所有驾照报下面的 smilde factory 文件,当然新的版本呢,它就有专属的 input 文件了。这个文件呢,就是它会把所有官方提供的一些自动配置啊给我 列出来,比如说 webmvc 啊, linux 啊, mybase 啊等等。好啦,第三步,条件筛选,因为我虽然列出来了很多的自动装配类,但是我不会去所有的都用,那么我只可能会去,呃,就是配置了 start 类的才会需要加载,所以那么这个呢,叫做条件筛选。那么有几个主要的 condition on class 类路径,下面有指定的类,我才会生效。比如说你引入了 smart start web, 那 么才会去加载 web 的 配置。然后第二个呢,就是 condition on missing bin, 就是 容器里面没有对应的 bin, 我 才会去 功效,比如说你自己写了一个 readymote, 那 默认就是不会加载了啊。然后第四步呢,就是注册 bing 的 i o c 容器,最后啊,把符合条件的配置类里面定义的 b 全部的注册到我们 spring 的 i o c 容器,那么整个自动装配呢,就完成了,能够去更好地导入我们的一些第三方的一些包。

基于 spring boot 的 java 必设项目答辩问题,常见问题,呃,在这我进行了一个整理,大家好, 今天的话我们来讲解一下。呃, java 毕业设计的一个答辩问题,它基于 spring boot, 那 么下面我是列了几块常见的问题。呃,包法是项目背景及意义、 技术选型、系统架构与设计。呃,功能实现于代码细节、性能部分、安全性部分问题,以及应对挑战,还有一个未来的一个展望,总共是这七块内容,那么我们是结合当前的这一个项目,那么它是一个普通的 java spring boot 的 项目。呃,非常常见的一种 spring boot 的 成品项目, 大家可能是比较眼熟,那么看起来啊,跟你的是类似的或者是一样的啊,这是一个客户端,那么他还有一个管理端,他是这样的,他并不是那种传统的商城,而而且而商城里面啊,他也是有一个前端前台的,对,他也是有一个前台的, 这样这样的一个前台,你包含一个购物端这样的一个东西,差不差啊?好,我们回过头来看,我们结合这几部分进行一个 讲解。话,第一部分是项目的一个背景和意义,那么我们说背景和意义话,当前的项目它是一个母婴平台 啊,母婴平台,那么这个背景和意义有什么亮点呢?完全我们就可以用 ai 让它去生成一下啊,完全让 ai 去生成一下,那么呃, 我们看一下,我们跟他说一下,让他回答一下,基于这个项目为什么要开发这个项目,项目的背景意义,他有什么亮点,那么他就会给你这些答复。这里说了市场需求驱动啊,母婴商城是一个很大的一个消费领域,尤其是现在是鼓励生育嘛, 其他的话是一些行业痛点后基础实践啊。背景,母婴行业的一个持续性壮大,这一下在在你的文档里面应该也是有的消费者对于母婴产品的安全性,专业性的一个要求 啊,这是一些意义,提供一站式服务啊,亮点是采用前后端前段二维 u e 结合 element ui 这种形式 啊,还怕是功能完整性,用户体验。那么你有什么东西啊,有亮点可以往上加,创新点啊,那么在你 这个项目完成之前就应该是完成了,比如说添加 ai 对 话,添加 ai 的 一个查询,或者是说系统过滤啊,推荐算法等等的这些,如果是你啊,那么你就可以往这里面去说。 首先你去介绍这个项目,那么你是需要介绍这些项目的,那么这一句话是比较通常的一个介绍是本项目基于 spring boot 加 v o e 加 microcode 实现采用前后端分离 啊, restful 的 接口模式啊, g w p 的 认证,还有如果是带有大屏,那么或者是数据分析,数据展示用的 excel, 还有 res 实现缓存等等,你有什么?然后可以往往上对就可以了啊,我们继续说一下 下面第二款基础选型这一块啊,一般会问你,呃,为什么会选择 spring boot 啊,为什么会选选择 spring boot 啊, 呃,选选择 spring boot 的 一个意义含义等等的哦,那么你就会强调 spring boot 的 快速开发步,简洁配置和强大的一个生态支持。 呃,提及 spring boot 的 一个自动装配,减少了插边文件的工作,提高了效率,相比于原先的 s m 项目来说,呃可以简化啊,可以呃结合具体项目或实现它的安全性等方面的一个测试。这一块主要是基于 spring boot 的 来耍 啊。第二款为什么要选择 spring boot 加 vue 的 这个项目呢?那么啊,是 spring boot 的 话,在上面已经有有说明了。那么第二款是 spring boot, spring vue 的 话,它是一个轻量化的前端框架,能够快速的选用开发和用户界面 啊,结合 spring boot 和 vue 啊,实现一个前后端的一个啊分离 element ui, 它是在 vue 的 基础上进行了一个丰富的一个组建,那么我们就可以快速快速使用 啊。技术栈为什么选择买斯呃买 betis 和加买 circle? 因为买买 circle, 它是一个呃高性能的一个数据库,那么能够满足你的一个查询需求,关键它是免费的。另外它是一个持久性的一个框架,它是提供了一个 circle 的 一个映射。 这里话你可以说 o r m o r m 框架,那么这个时候你如果是用到了买 betis, 你 也可以说一下买 betis 在 马斯克呃买 bites 的 基础上进行了进一步的简化啊。如果你用到了 react, 那 么你就说一下, react 是 一个呃高性能的这一个存储系统,然后常见于这个缓存,那么 缓存之后啊,它是跟 spring 不 误化有一个结合,呃很好的一个扩展性。还有一性能方面啊, i 性能方面,尤其是在性能方面,为什么要选 e x? 你 的 e x 的 话是在呃 格式化方面啊,他是提供了一个丰富的一个图标可以及时使用啊,是系统,呃,系统架构与设计,嗯,描述一下你的一个设计的一个思路,那么整体的思路是,我们还是挑重点哈啊,因为 w 老师他也是很累嘛,所以说有一些东西你需要把关键字给他就行了,比如说有一些前后端分离 啊,呃, api 接口的一个设置,呃,整体架构上,那么你可以采用这种方式去回答。首先是前端,呃, element ui, 呃,这这个东西我不太会啊,你最好是找人去问一下该怎么读。负责页面的一个展示和交互后台接口,业务层,业务层最下面,你看具体是用到了什么? my base 是 一块,你有选 map, 如果是路由 jp, 那 就到头了。最后一步是 master 数据存储啊,我建议大家去了解一下登录模块,登录模块熟悉一下登录模块的一个认证啊,授权和健全啊。如果是你,呃,我们结合,呃,结合当前的项目来看一下当前的项目来看一下, 那么它的话是一个前后端两块是一个购物端啊,当前的项目来看一下,那么它的话是一个前后端管理端这两块, 呃,而且从数据库层面来看,呃,从从整体架构上来看,是前后端分离的。前后端, 前端的话,呃,前端的话,它是分为了两块哈,两块,第一块是 omega, 下面的是一块, omega 下面是一块,另外一块的话是 front, 下面是一块,它是一个整体的,就是一个 spring, 整体的也是一个 spring, 那 么它就包含了 controller 层, controller 层啊,以及 service 层。 service 层,那我们往下找它的话,在它下面它是用的 mybites 和 mybitesplus 嘛。所以说啊,它有这样的一个 map 啊,你是能看到它的 map 的, 能看到它的 map 下面一块是整体的一个,下面是介绍,介绍文件夹的这个作用。介绍文件夹的作用话,我们在前面一期话已经讲过了啊,已经讲过了,这里就不再复述了。如果感兴趣,大家如果是还没看的或者感兴趣话,可以往这看。我,我是通篇去讲了一下 root 这一块, 呃,相关的所有的这个作用,比方说这个是 com, 呃, configure 里面是配置, control 里面是接口, 第二层是跟数据库相关的,以及后面在 vue, 我 也是讲解了它的具体所有的文件夹相关的一个作用,那可以往我之前的视频里面去看,这一部分这里不就不再讲解了。 好,我们接下来往后看的话,这边主要还是说它的配置文件, form 文件,以及 s r c 下面的 java 这一些问题,以及 v o e 下面的这些文件等。数据库设计的话是一个重点,这一个重点我在其他环节涉及到数据库的地方都总结到这一块了, 那么他会问你设计的哪些表,核心表是什么?那么设计核心表你的一个抓,我们可以去通过数据库去查看。这里就像我们先简单说一下啊,用户表啊,角色表啊,权限表,主键是怎么设计的?那么 macbook 有 一个自动主键,有一些项目里面它是用了 u u i d 作为主键,这是跟一个字串是一样的,它是根据你的 主机还有是当天时间去生成的。这么 u u id 这把是分布式的唯一性,或者是说你单纯自己用也是可以的。缩影是怎么创建的?一般来说你的项目里面可能没有缩影,那么你可以说主键默认缩影就可以了,因为数据量太少嘛,就没有加别的缩影, 如果是加,你现在也可以加在用户名上加,或者是在你一些搜索信息里面,或者是 time 字段里面,你搜索什么就在什么上加就可以了,加一两个就可以,不用加太多。密码是怎么存的?铭文吗?一般来说啊,你如果是像 成品,成品这种成品啊,他都是这种铭文的,他都是这种铭文啊,都是这种铭文。对, 你像我做的这种给到了这种加密的,给到这种加密,一般来说,那么加密它是用这几种算法, md 五是比较常见的算法, s h, 二六五,二五六等等流程啊,这一个注意一个流程,流程啊,并不是把数据库 解密,并不是把数据库里面的密码解密,而是通过用户登录信息中的密码进行加密。加密之后啊,再跟密码去作对比啊,如果一致则成功。这是一个很关键点,你不能把 数据库里面已经存好的密码给它解密,那这样你的加严操作用到什么算法,那么就能够逆向破解了,要注意一下啊,防 sql 怎么注入啊?那么你如果是用的 o r m 框架,你买呗,然后这批 避免直接拼接 circle, 中间用它指定的这种拼接方式,那么这个可以完全避免,因为框架已经帮你做了啊。我们再看一下数据库相关的, 数据库相关,那么 i 它是一个自增, id 是 一个自增, ddl 里面的话,一般都会有这个自增的意思。数据库的这些表和表啊,你可以在这个地方去看啊,这个地方去看哇,我之前已经讲过一期了啊,之前讲过一期是通过 这种,通过这种生成表的这种方式吧,表的这种方式就可以直接去看这个,他就可以去生成生成这一些表,生成这些表,生成这些表, 那么在生成这些表的同时啊,你可以让他去生成你的用户登录这一块东西,都是可以的,那么登录用户名、密码,返回这些信息啊,矩阵图啊,可以很直观的去展示你想要的东西, 展示你想要的东西,然后从用户到前端,到 controller 到 service, 到道到数据库后再依次返来,依次返回回来这么个流程, 这也讲解了其他的一个购物流程都在这里面有一个介绍。好,我们继续。数据库这一块是比较重点的,可以去好好的去看一看,好好的去看一看,尤其是关于密码的啊,尤其是关于密码的下面去看一下功能的一个具体实现功能的一个具体实现。那么核心功能的一个具体实现啊, 不会太问,不会太问,但是你也要做一些准备啊,做一些准备介绍某一个核心功能啊,一般来说我们还是 推荐你注册和登录,注册和登录,因为数据库查询的话,他你不一定问哪一个嘛,你也不好准备,但是登录和注册他就在那,他就在那,包括前端、后端的一个操作,数据库的一个操作。那么我们是刚才 我们介绍的这种,介绍的这种,就可以用这种时序图 ai 生成这种时序图,具体的这个流程都可以很好地去展示出来,从用户端到数据库啊,整体的一个流程都可以展示到。 spring 的 一个核心问题啊这里,因为它不是面试嘛, 不会提及太关键的一个问话,我们也要准备一下。首先跟你说一下配置文件在哪里,那是 application 点 ym 文件啊, spring boot 一个配置属性 at view 去做。 还有啊,注意操作,如果是你用的 mybase 的 话呢?这里面是用的 mybase, 那 么 spring boot 操作呢?是用的 gpa, spring is g p。 呃,有同学也是有有这个的, spring 处理异常是这个 hander, 常龙柱姐,在这里面我给了一个总结,在这里面我给了一个总结啊,可以去看一下怎么实现上下文啊,这个也是比较关注的一点。 那么前段就是你可以直接就说用了 v o e 或者是 v o e element 的 一个组件软件组件,那么后端其实是用到了这个 spring note 的 相关的多文件上传。多文件上传,如果是有同学用的数据库存储,就是云端春法,也可以说一下,文件下载是根据返回文件流或者是重新定校的一个文件路径就可以了。就两种方式,安全优化和安全优优化和安全能优化和安全 这一块。在前面你可以去这种防蹭客户的话,数据库密码这一块有讲解到,有讲解到可以自己去看,可以再往前看一下就好。那么, 呃,像你其他地方的一个优化是 radis, radis 的 优优化加缩影, ngram 加 ngram 加动态平衡 安全性数据的一个加密,我们刚才说过加密防社交,购物等等的这种多角色的一个控权权限访问, 以及用 w g w 啊,做一个登录之后就不用再登录了吗?那接口的一个认证等等,我们结合一下,我把前面的问题给他说一下。 spring boot 啊,那么在这个地方它是有这个 spring boot 或 a publication 这个说明啊,这个就是启动项的, 这个 map 是 去读取 map, map 的 一个文件文件夹目录,它的话主要是第二层的,第二层的这个是一个启动项这个,但是这里面啊,所有的文件的这个相关的这个介绍我在之前已经说过了,这里就不再说了, 就大概说一下。那么它的配置文件是在这个里面啊,这个里面是放到了它上传的文件, map 里面的话是这种 半结构性的 circle circle 文件,它对应的这个 map 在 道层里面,在道层里面二只有 声明没有实现的,它具体的实现是通过半 circle 去实现啊,半 circle 去实现,这里没有用到 radius 啊,没有用到 radius w t 的 项目啊,他会在这个 u t 的 下面有一些认证,还有一些话是访问请求这个判断,如果是他没有登录,让他去登录,这里面都是有的。遇到问,那么一般来说五零零四零四这些问题是比较常见的,五零零四零四是比较常见的, 遇到问题该怎么办呢?那么是去首先就 f 十二看一下控制台嘛,有没有具体的一个 bug 啊?跨一问查四零四,问查五零五零零问题,那么前后的话再去详细的去看一下。而第一步肯定是先 f 十二打开一下开发者工具,如果是很难查询到或者是没有具体的 bug, 那 么一般来说就需要断点 打一个断点打一个断点试一下。呃,当然了,这一部分之后,那么他还会问你未来有什么改进计划, 就是性能方面的一个优化啊,还有安全,性能方面的一个优化。但是你不要把自己说的太没有用,不要说你这个项目什么都需要优化,那就是小范围的优化就可以了,尤其是性能方面的优化,安全方面的优化建议不用太说,不用太说, 我还是推荐添加新功能和性能方面的优化。安全性呢,其实没必要,感觉你这个项目是不安全的。行,整体上是这样, 那么我们介绍了基于 spring boot 的 java 避税项目的一个 wm 啊,集中在背景啊,基础选型啊,尤其是介绍这些项目,介绍这些技术,为什么要用这些技术系统加固啊?大家还是通过记住某一个流程, 比如说认证流程,注册流程等等,这种都是可以的。另外还要去看数据库相关这一块也是比较重点的, 但是具体细节啊,你挑一块就可以,不会问太详细。嗯,一两个就行,一两个就行。我认为啊,尤其是认证登录那一块,需要重点看一下, 其他的话还好还好,安全性方式加密问题,以及他的一个防磁可入就可以了。未来展的话不用说太详细,不用说,你又说添加一些新功能,还把性能一个优化。再完成这些 选型之后,我们要先进入介绍一下这个项目用哪些技术等等的,那么就可以在我之前的视频里面就去生成这些图,系统架构图,后端这个模块图能帮助你去理解 架构图等等的这种还有持续款,你想了解哪一个步骤下面的实操啊,就可以让他去生成这些购买流程等等这种。那么前后端都啊,订单的评价流程,还有这些技术表格都有 啊,跟你的相吧,是从这些导出来的,可以看我之前的视频,还有开发工具,用到哪些开发工具呢?都会有。好,就这样,如果是有什么,如果有什么问法,可以在评论区发一条,看到之后会回复,那就这样。

大家好,我是威克林,今天我们来讲一下这个 java 的 spring boot 项目应该怎么去替换,这个项目的名称就是这个 spring boot 的 一大串,就很多同学反馈要改这个东西,那怎么去改呢啊?首先我们在 idea 里面运行起来之后,我们先不要着急,我们可以先把这个运行起来的东西给它停掉,然后我们右键点开这个,把它在文件夹里面显示, 然后我们需要用到一个 v s 扣的啊,你注意我说的是 v s 扣的,因为你直接用这个 idea 替换的话,有的同学他用的 idea 是 高版本的,你用的高版本的 idea, 他 有时候替换不了啊,有时候替换不了,所以说我们一定要用这个 v s 扣的,你直接把它拖到 v s 扣的里面就好了。然后我们点开 v s 扣的这个搜索这里,把这个名称复制一下, 把这文件夹名称复制了,复制了完成之后呢,我们要给它替换好,那这个的话就是看你想替换成什么了,那这里的话,我这是个旅行系统,那我就给它替换成旅行二三三,好,然后我们把这个名字也复制一下,然后我们直接全去替换掉。 好,这就切换成功了,然后我们可以直接关掉,关掉完成之后呢,这个我们还是得把这个 id 也关掉,然后我们要把这个外围的这个名字也改成旅行二三三,对吧?然后把这个点 id 文件夹一定要删掉,然后 d b 的 话, d b 你 也可以改一下啊,改成这个好,然后呢我们直接把这个 拖到 id 里面,就我们把它重新运行一遍就行了,知道吧?重新运行一遍。好,重新运行一遍,这个不是很难啊,就是自己重新就拖过来,因为你环境都是搭好的,你就重新把它拖过来运行一下嘛,是吧? 好的,然后这里的话我们还需要做几件事,就是打开你这个 netcat。 啊,打开你这个 netcat, 我 们要把这个数据库给它重新运行一下,因为你数据库的名字也被一键替换了。好,这里的话我们就 打开 nvware, 然后我们重新运行一下,这个是个脚本,然后等待那个 ide 那 边去加载。啊,我们重新运行下,运行一下这个是个脚本,好好 运行成功之后点开始好完成,然后这里的话我们就可以运行这个项目了,我们看一下运行有没有成功。就是你一定得按照我这个流程来啊,一步都不能少,少了一步的话可能就会报错了, 因为它数据库你也是要改的,因为你项目名称它是跟数据库一起跟着变的。好,现在又运行成功了,对不对?然后的话这里面这里的话我们刷新一下就发现访问不了,为什么呢?是因为这一串被改了,那我,那我们就是把它改成旅行二三三, 好,就可以访问了,对吧?就可以访问了,好,那这个就是我们 java 的 spring boot 项目,它去修改我们这个项目名称的一个方法。好,那本期视频呢?就讲到这里,咱们下期视频再见。

是来自于阿里巴巴的一道十一月份的面试题啊,说是你如何理解 spring boot 当中的一个配置的加载顺序 啊?这个面试题其实考察的是什么呢?考察的是你对于 spring boot 当中的一些配置文件加载顺序的一个理解,先加载什么,后加载什么,包括你对于 spring boot 启动流程的一个理解啊。 而这道面试题呢,会在面试高级 java 开发工程师的时候面到啊,对应的薪资是二十五到四十 k。 很多同学其实对于 spring boot 的 一个配置加的顺序是有一定的了解的,但是可能说的不是那么的详细,所以呢,我们接下来就来看一下这道面试题啊。 首先,它一共是分为十七个步骤啊,比如说开发者工具 devotools, 大 局配置参数,这是我们优先级最高的啊,优先级最高的,如果当你配置了大局参数的时候,你一定是优先去加载。 其次呢,就是单元测试上面的 test property source, 注解,指定的参数,这个的优先级呢,仅次于我们全区的配置参数啊。然后才是 spring boot test, 注解,指定的参数,包括我们再往下就是我们的命令行 option 上面的一个参数, 再接着往下来呢,就是命令行当中的一个 spring application, jason, jason 啊, jason 啊,不好意思 啊,两个 jason 去了啊, jason 当中去指定的一个数据,然后呢,这个优先级优靠后一点。然后再是 server config 抽象的参数,以及 server config 抽象的参数,包括我们的 j, n, d, i 啊, 包括我们的 java 的 系统参数,操作系统的环境变量参数。不要为老板打工,而是为简历打工,不要说为了钱而打工,而是说你要为你的工作能力能够体现在简历上而打工。 哈佛大学呢,提出了跳槽经济,越是跳槽经济蓬勃发展的这个时候呢,其实是越需要你的职业规划,职业规划呢,目标做的比较好的人, 他完全可以在连续的几次跳槽之后呢,能够更快的达到他自己的职业的最终的那个目标。所以咱们小伙伴们呢,不要再想着说你是在为老板打工,也不是在为钱而打工,而是为了你最终的那个目标,为了你的能力能够体现在简历上而打工。关于跳槽经济学呢,我觉得有几点 他非常的重要。第一个呀,你一定要进行战略上的准备,就是你想清楚自己的长远目标啊,想清楚说自己呢,最终你这辈子要成为什么样的人,你记住所有的战术都要服务于战略。第二个呢,你要了解啊,你目前到底面临的是什么样的具体的困局, 要想清楚跳槽这件事是不是能够帮助你解决这个困局的唯一的出路,有的时候呢,你自己的公司有成长的空间,那你就未必一定要跳槽。 第三,一定要注意你商业价值的这个要素,提前呢,你要准备好技能,那怎么做呢?就是提前你进行市场的测试,比如说呢,你经常把简历啊给扔出去,然后看看市场的反馈,随时把控你自己在当前这个市场上具体的价值到底是什么这个东西呢,是你保持竞争力的关键的关键。 第四个,就说你一定要了解你当前这份工作的寿命,尽量的专注于一直上升的行业,就是说你跳槽的话呢,一定是那种从夕阳行业跳往朝阳行业。当然啊,就这个呢,就需要你对行业呢有更深入的认知,就说你要多听听已经在行业里面待了很多年的人,这些人怎么说? 同时呢,我建议你多关注经济和实施,尽量的能够判断出一个新兴行业的他的发展趋势。第五,永远不要后悔跳槽,这是一个人实际上他消极态度的一个借口,无论结果如何, 你放松心态,正确面对。最后一个最好的下家在哪?我建议你使用呢最优停止定律啊,在合适的年龄找到最优的下家。

呃,老师们好,同学们好,我是小蔡柯林,然后我这个项目的名字叫基于 spring boot 的 友联邦社区邻里互助服务平台。呃,下面我来展示我的答卷 ppt 啊。首先我们来看一下我的一个目录,我的目录呢分为六个部分,分别是项目概述、系统需求与可信分析,还有总体的设计。然后第四点个是第四个点是系统详细设计与实现,然后是系统测试与验证,最后是结论与展望。 好,我们先来看一下我这个项目的一个概述。呃,然后我会从三个点去讲,分别是项目背景、寓意,国内研究现状,还有技术选型和依据 啊。我这个项目的背景的话,就是因为现在随着城市城市化加快,然后高层住宅邻里关系疏远,传统线下互助方式呢?它, 呃,不不畅啊,管理不方便。然后的话就是,呃,是有这个规范性的一个需求的。然后我做这个项目的一个意义的话,就是我这个平台可以通过信息化的手段将邻里互助 啊,就是将这个行为呢线上化,规范化,然后可以整合社区的一些闲点资源,可以提升我们的服务品质效率, 重建紧紧密的邻里关系。然后我这个定位的话,就是我这个系统的一个定位,就是属于是一个社区内部基于地理位置与信任关系的一个啊定位,然后它能够连接求助者与帮助者,形成社区内的良性互动循环。 然后下面是我做的一个国内外研研究现状啊,这是我做的一个表格啊。国内的话呢,一般的模式就是通过啊,业主群啊,物业的 app 什么的,然后还有是一些试点什么的,然后国外的话有那种啊,时间银行,然后 netflix。 对,然后我这个,呃系统的一个一个基础站的话,后后端采用的是 spring boot, 前端呢是 v o e 数据库,我用的是 my circle 架构的话用的是前后端分离架构,就是前端代码和后端代码是分开的。 然后第二点的话,我来看一下我的这个系统的需求与可行性分析。呃,我的一个业务需求的话,就是就是我的用户端,用户可以设计的,居民可以注册登录, 然后可以查看社区公告,在个人信个人中心管理信息与服务记录,管理员的话要求这个可以管理用户。呃,维护服务与公告分类监控服务, 然后这些是它的一个功能,非公非功能性的话就是有这个,我做的这个界面要操作简变,响应迅速,然后要有良好的安全性。 下面是可行分析啊,因为我刚才提到的技术站呢,都是一些开源的啊,所以说它用起来是免费的,然后呢,它还是比较稳定的, 经济上是可行的,因为它免费,技术可行性的话就代表它是。呃,这个技术站,它都是很很有很成熟的那种社区,是被大家广泛使用的,所以说技术上也是可行的。 下面是我的系统的一个总体设计啊,总体架构呢,就是这样的,有用户分为用户端,分为客户端跟管理端。然后功能模块呢是用户功能管理员功能, 对角色的话就有两个角色,一个是用户,一个是管理员。然后这是我的一个业务流程,就是接单的流程的话就是用户先浏览这个服务的列表,之后的话通过的话就会生成一个接单的记录。 对,好,后面的话是服务完成与积分结算流程啊,接单者提供服务,然后提供完服务之后,求助者可以看到这个。呃,他提供完成的这个服务之后的话呢,就会累积积分,然后会生成一个评价记录。对啊,下面是我数据库的一个设计, 数据库呢,一般是这几个表,我做的是一个主要的展示表,用户表,然后服务请求表,接单表,还有完成表 啊,下面是系统的响应设计,后端呢是 spring boot, 前端是 v o e, 然后管理端,管理员的后台呢是主要是用来管理平台与监控的, 这是我后台的一个啊,具体的实验方式。刚才说是 spring boot, 然后认证的话用的是 token 机制,然后十九层用的是 mybeds plus, 然后这是我的前端界面实现,用的是,这是对前端更详细的就这样说明,比如这个用的是 v o e x 管理群状态,说的是 v o e router 去实现页面跳转。 嗯,然后这边是的一个具体的功能,就刚才说的用户可以在管理员的管理员的后台的支持,管理员后台具体实现有用户管理,服务请求管理,还有服务接单,就相当于说是对客户端的功能进行一个整体的管理的 啊,这边是系统的测试啊,测试的是都没有问题的啊,这是测试的使用方法,用的是黑盒测试和白盒测试 啊,这是我的具体一个测试的一个列表,我进行了用户注册测试,服务接单测试,然后服务状态一判断。这些东西的啊,这边就简单过一下,是我的测试的一个结果分析啊,最后的话就是我的一个结论与展望。 对啊,节目总结的话就是完成了这个项目,然后呃实,实现的价值呢,就是能够呃提升了匹配效率,然后重建邻里的信任,还有能够促进促进了社区的一个资源的一个一个方案。 然后技术站也是啊,用了这个技术站也是证明它是可行的,这是我项目的一个总结,然后存在的不足的话就是功能方面呢,还可以再进行扩展,然后性能方面还可以进行优化。对,下面是我的这些。好,这就是我答辩的一个 ppt 展示,谢谢老师。

最近跟不少同行聊面试的事情,发现有个高频的考题,很多人都达不到,面试官心坎里就是 spring boot 的 启动原理。很多朋友被问到这个问题啊,一上来就死记硬背,慢方法,让方法自动配置,巴拉巴拉说一堆,既没有逻辑又很深意。其实啊,面试官要的不是你背多少流程,而是你能不能把 这个技术原理用通俗的话讲清楚,把启动的核心逻辑讲明白,想要面试的时候回答经验。面试官, 我特意整理了一份面试合集,包含面试常温的技术站场景题,针对每个知识点都有很详细的解析思路,更有近期很多 java 加 ai 的 实战技巧,只要你是我的粉丝,扣六六六打包带走。 今天就用最容易理解的方式,把 spring boot 的 启动原理拆透,不用背,听完就记住。首先, spring boot 的 项目启动的入口就是启动类的卖方法,就相当于一个工厂的总外观,一点击运行,整个启动流程就开始了。要用 spring application 点 run 方法之后, 第一步不是直接搞配置,而是先加载基础环境,它会先去读取项目里的 application 点 yam 文件,或者 application 点 props 文件,还有系统环境变量,比如你配的 so 点 port 等于八零八零, spring 点 application 点 name 等于叉叉叉,这些信息都会被加载进来,相当于给整个项目搭建定好基础规则, 后续所有的操作都要基于这些配置来。然后就是最核心的一步,创建 spring 容器。 spring boot 本质是 spring 的 脚手架,而这个容器就是整个项目的核心车间。它的作用很简单,就是帮我们管理所有的病对象,比如控制器、服务层、数据仓库这些, 以后业务代码要用的时候,直接从容器里拿就行,不用自己手动拧,省了很多麻烦。这时候很多人就会有疑问,我们只引入了 spring boot start 杠外部的依赖 为什么不用手动配置 tomcat, 不 用写 spring mvc 的 配置就能直接用,这就是 spring 最核心的自动配置机制,在起作用,它会自动扫描引入所有的 start 依赖,加载对应的自动配置类,就比如引入了 web start, 它就会自动加载 web mvc 的 配置,内置 tomcat 的 配置, 引入了数据库相关的 start, 就 会自动加载数据源的配置,而且它不是一股脑的全加载,会通过 i 的 conditional 注解做判断。 比如容器里有没有自定义数据源,才会加载默认的海瑞数据源,这就是按需配置,帮我们省下了百分之九十的繁琐配置。容器和自动配置都搞定之后,下一步就是启动内置服务器。 springboard 的 打包出来的是价包,不用依赖外部的 tomcat, 靠的就是内置 tomcat 的 服务器。自动配置内会帮我们出场 tomcat 监听配置的端口,把整个项目部署进去。 最后一步,容器启动完成,服务就绪, spring boot 会发布应用的就绪事件。到这一步啊,项目就真正的启动成功了,就能通过配置的端口访问项目了。针对 spring boot 的 启动原理,你学懂了吗?不懂的欢迎留言讨论。