我了解到作为一个开发人员你必须会准备软件环境,那么准备什么环境呢?
三种环境:
1.开发环境:这是你开发人员所使用的环境,外人无法访问
2.测试环境:测试人员所使用的环境,外人无法访问
3.生产环境:生产人员所使用的环境,外人无法访问
1.苍穹外卖采用了前后端分离的模式
前端:1.web管理端 2.用户端 后端:服务端
2.我基本了解了苍穹外卖要使用的技术框架和中间件和工具
今天Day1学到了Git,Lombok,nginx,TODO,MD5,Swagger,knife4j,Yapi,Apifox,以及一些概念及其原理和我对其的思考
Git是一个版本控制工具,可以进行管理项目代码,是团队合作必须使用的工具,我们必须学会使用它
1.命令行使用:具体命令就不细说了,我感觉就那一套模板,比Linux简单
2.使用图形化界面TortoiseGit:它俗称小乌龟,可以简化操作,用图形化界面的方式来操作(作者学鹏哥C语言时,鹏哥推荐使用它进行提交代码上传仓库打卡)
3.使用IDEA:既然我们是开发人员,可以直接使用IDEA中的图形化界面来提交
1.国内的仓库平台Gitee码云:国内的访问速度快,便于提交
2.国外的仓库平台Github:国外的,也是世界上最大的开源平台,你有可能访问不了,访问速度慢(可以使用魔法来),如果不想要花钱,我推荐使用Steam++(改名为Watt Toolkit)
1.我认为应该尽量多使用命令行来实现,多使用你会发现Linux,Docker,Git这些工具命令使用大差不差,你以后学习到某个工具时会发现其实和那些命令差不多,你都能想到该写什么
2.如果你要使用TortoiseGit,推荐下载镜像版本,当初作者就傻傻的在下官网的版本,下的实在是太慢了
3.我也推荐使用Github这个仓库,不是说国内的不好,其实都差不多(它们两个仓库还支持双向传递),但是嘛,我一开始也是使用码云,等我想要使用Github时(怎么访问这么慢啊),作者嘛,就四处找,哦,原来要工具加速,这样就锻炼了我的查询资料的能力(学开发基本自学),最主要的是会用工具了(我会用魔法哦)
1.我们先初步了解一下它的核心功能
1.自动生成Builder静态内部类,并且提供链式编程的调用方法,可以逐步设置对象属性值,最后通过 .build()方法(前面有个点)生成目标对象 2.简化对象的创建,你想啊如果你定义的实体类属性很多,你难道要通过set方法一个个赋值啊 3.写法: @Builder public class User{} User user = User.builder().属性名(给值).**.build(构建完成)
这里的标签是定义在类上
2.特性:
1.默认值支持:就是先给属性个值,再在属性上写@Builder.Default,你给的值就是默认值了
@Builder.Default private String name = "zhanghada"; (zhanghada就是默认值,定义在属性上)
2.自定义构建:就是上面User user = User.builder().属性名(给值).**.build(构建完成) ,你可以将builder()方法改个名,怎么写:类上加上@Builder(builderMethodName="指定方法名")
3.好处:简化代码,不用一个个set方法写
4.注意事项:这是Lombok中的注解,要引入Lombok依赖
1.@Data:我就简单说一下,@Data就是除了有参无参构造的方法,其他的方法全集成到这个注解了(set,get,toString...)
2.@AllArgsConstructor:也只有有参无参构造的方法没有说了,所以它就是全部参数的构造
3.@NoArgsConstructor:无参构造
1.nginx一款开源的高性能 Web 服务器
2.核心特点:反向代理(保护服务端安全),负载均衡,内容缓存(提高访问效率)...
3.今天我对于内容缓存的了解是:客户端访问服务端,先访问nginx的代理服务器,再将请求发送给服务端,nginx相当于有个缓冲区,如果你快速访问多个相同的请求那么nginx在第二个请求时将不会在访问服务器,而是在缓存区中取出数据返回给客户端
4.简单看一下
就是拦截api和user这个请求,替换proxy_pass:后面的请求,而webservers是你定义的请求路径,最终替换http://admin/127.0.0.1:8080http://admin/(用户端一样的,weight与负载均衡有关)
1.隐藏服务端:很好理解,客户端是不是只能访问到我们的代理服务器,那我们暴露给客户端的地址是不是就是代理服务器的,而代理服务器可以将客户端访问的地址进行替换变成我们真实的服务端地址,从而保护了服务端,避免服务端的地址暴露出去(有危险)
2.实现负载均衡:在下面
3.缓存加速:参考上面的内容缓存
1.隐藏客户端:和上面同理(上面是接收到真实客户端地址,假的服务端,这里就是反过来),就是由客户端来配置代理服务器,通过代理转发到服务端,服务端看到的是代理的地址
2.突破访问限制:(魔法)
3.缓存加速:参考上面的内容缓存
1.负载均衡就是把我们访问的请求按照指定的方式来均衡的分配给集群的每台服务器
2.可选方式:(黑马的,真不想打字了)
1.这是IDEA内置的工具
2.怎么使用:在注释里写个TODO即可(// TODO:(接你要写的内容将会展示出来))
3.有什么用呢:你在注释里添加了这个TODO,那么在TODO的工具窗口中你可以双击条目,直接跳转到对应代码处(当你有些代码还未完善时添加它,提醒你要完成)
4.你进行提交代码时,如Git使用commit时可以勾选Check TODO(确保未有遗漏)
5.团队统一使用(确保可读性和可维护性)
1.我一开始以为就是一个算法,结果了解这是一个哈希函数
2.看到哈希,想到什么,HashSet集合,在集合中是不是通过一定算法将值给计算成哈希值,并且是不是无法将哈希值反推回来,注意是不是有一个现象叫哈希碰撞(就是有较小几率不同的值(多个)但是计算出来的哈希值相同,这就是哈希碰撞)
3.根据上面推出MD5加密特性:
1.不可逆性(无法反推) 2.确定性(相同的值计算出的哈希值一定相同) 3.抗碰撞性弱(哈希碰撞)
4.思考:苍穹外卖中使用了对用户密码进行加密存入数据库 ,但是它的安全性似乎不足,会出现哈希碰撞,所以这里可以进行改进(我后期完成项目再改,先保持与视频中一样)
1.老师使用了knife4j工具来简化Swagger
2.Swagger与knife4j:我目前了解的是通过相应注解可以实现接口规范,就是直接给你生成一个接口实现,前端可以依据它,减少沟通成本(看图,作者累了)
3.Yapi好像是淘汰了,我建议使用最新工具Apifox(Swagger与knife4j与Yapi的功能都有)
1.引入knife4j依赖
2. 配置
1.记得实现接口时要改变开发环境
2.老师是使用的Yapi导入项目接口,那么我们现在可以使用Apifox(来导入,我就不教了)
3..Swagger与knife4j的功能也一样可以实现
4.所以推荐大家使用该工具,它是一个宝藏,作者也刚开始挖掘它,后面学会了再教
1.写这个的原因是因为我在javaweb写tlias时也用到了Result,但是并没有实现这个接口,所以引发了我的疑问,有什么用?
2.用Ai查询了该接口作用,实现了该接口的类,该类的对象可以被序列化(转换成字节流)
3.所以为什么要实现这个接口呢?
1.返回给客户端时要JSON数据,实现该接口可以转换,但是在项目中有对应注解转换JSON(所以不是这个原因) 2.可以缓存/持久化:存储到Redis,数据库,文件时要使用序列化(我猜是为后期Redis准备的)
4.什么是序列化:将内存中的对象转换字节流(为什么要用可以参考上面接口(它就实现了序列化转换))
5..什么是反序列化:反过来
1.好吧,作者好累写这个(两小时)
2.作者学过javaweb中的tlias,目前感觉这个项目还行,不是很难
3.多使用命令操作
4.多去了解工具的使用、
5.我们要思考这个不同点的用处,多去看看源码,多问AI(它总结比我好,哭了)
6.推荐大家写笔记,有用(打字也累,不打了不打了,累啊)