【苍穹外卖 | 项目日记】第一天

前言:

我打算用16天的时间写完黑马程序员的苍穹外卖项目,为了督促自己每天坚持写以及记录项目知识点,所以用这种项目日记的方式鞭策自己

目录

前言:

今日完结任务:

今日收获:

1.阅读代码框架:

2.新增员工接口:

3.分页查询接口:

4.员工状态修改接口:

杂项知识点:

总结:


 

今日完结任务:

  • 阅读了整个项目框架代码
  • 实现了新增员工接口
  • 实现了分页查询员工接口
  • 实现了员工状态修改接口
  • 实现了编辑员工接口
  • 实现了根据id查询员工接口

今日收获:

1.阅读代码框架:

1.了解了YApi这项统一管理接口文档网站

2.学会使用了基于Swagger的Knife4j依赖来统一测试接口

3.熟练使用集成在IDEA中的git提交代码

 

2.新增员工接口:

1.学习了 ThreadLocal 这一局部变量

ThreadLocal为每一线程提供了一个单独的存储空间,它具有线程隔离的作用,只有在同一个线程内才可以获取到他的值。

在多线程编程中,使用ThreadLocal可以解决线程安全问题。常见的应用场景是保持数据的一致性。例如,在一个线程池中运行的多个线程需要共享一个全局变量,但是每个线程需要对这个变量进行不同的更新操作,这时就可以使用ThreadLocal来为每个线程提供独立的变量副本,从而避免线程之间的干扰和竞争条件的产生。

使用ThreadLocal可以通过调用其静态方法ThreadLocal.set()和ThreadLocal.get()来设置和获取线程的局部变量。需要注意的是,由于每个线程都有自己的变量副本,所以在使用完毕后需要及时清理ThreadLocal中的数据,以免造成内存泄漏。

而本接口对ThreadLocal的应用场景是 实现empservice层中的方法对empController层中变量的调用。

当我们在新增员工的时候,需要表明是谁对新增员工进行了创建和修改,那么我们就需要拿到当前登录用户的Token,并对其解析,就可以得到这两个值

使用ThreadLocal进行存储

调用这个变量:

3.分页查询接口:

1.了解了PageHelper的用法

@Overridepublic PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {//开始分页查询(基于pagehelper)PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);long total = page.getTotal();List<Employee> result = page.getResult();return new PageResult(total, result);}

并且阅读了PageHelper的源码,了解到他的底层还是在建立线程变量,然后在SQL语句执行的时候进行拦截,然后替换变量,实现分页的功能。

2.了解了对于时间格式化的两种方式

        1. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

采用这个注解,但是缺点是他只能对一个属性起作用,也就是说有几个需要进行时间处理的变量,我们就要添加几个注解

        2.自定义消息转换器,可以对全局的变量有效,因为这是我们自己定义的配置类,会在全局生效

 @Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器");//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();//需要为消息转换器指定对象转换器    对象转换器课可以将java对象序列化为Json对象converter.setObjectMapper(new JacksonObjectMapper());//将自定义的消息转换器加入到容器中converters.add(0, converter);}

4.员工状态修改接口:

1.了解了基于@builder注解的快速构造方法:

Category category = Category.builder().id(id).status(status).updateTime(LocalDateTime.now()).updateUser(BaseContext.getCurrentId()).build();

杂项知识点:

1.什么是正向代理和反向代理:

简洁的说:正向代理就是隐藏客户端,而反向代理是隐藏服务器

正向代理是客户端发送请求后通过代理服务器访问目标服务器,代理服务器代表客户端发送请求并将响应返回给客户端。正向代理隐藏了客户端的真实身份和位置信息,为客户端提供代理访问互联网的功能。

反向代理是位于目标服务器和客户端之间的代理服务器,它代表服务器接收客户端的请求并将请求转发到真正的目标服务器上,并将得到的响应返回给客户端。反向代理隐藏了服务器的真实身份和位置信息,客户端只知道与反向代理进行通信,而不知道真正的服务器。

我们本次使用的Nginx服务器就具有反向代理的作用

反向代理使得前端的URL资源路径指向Nginx,而不是直接与后端沟通。

2.什么是负载均衡:

负载均衡(Load Balancing)是一种分配工作负载(即请求或数据)到多个计算资源的技术,目的是在不过载任何单个资源的情况下提高整体系统性能、增强可靠性和可扩展性。

其实就是多个服务器轮转接收客户端请求,减轻单台服务器压力。

后面的wegiht可以理解为优先让哪一个服务器接收客户端请求,因为我们这里只有一台服务器,就是我自己的电脑主机,所以无法完成负载均衡操作,因此第二个地址用了#注释。

3.pathparm,pathvariable,requestparm这三个的使用场景;

  1. Path Parameter(路径参数):
    Path Parameter 是通过路径的一部分来传递参数,通常用于 RESTful 风格的 API 中。例如,对于 /users/{id} 的路径,其中 {id} 就是一个 Path Parameter,用于表示用户的唯一标识符。使用 Path Parameter,可以根据不同的路径参数值来执行相应的操作。路径参数通过 @PathVariable 注解来绑定到方法的参数上。

  2. Path Variable(路径变量):
    Path Variable 是指将路径中的一部分作为变量来传递,类似于 Path Parameter。它也常用于 RESTful 风格的 API 中。在 Spring MVC 框架中,可以使用 @PathVariable 注解将路径变量绑定到方法的参数上。与 Path Parameter 不同的是,路径变量通常在路径的任意位置定义,而不是通过占位符的形式。

  3. Request Parameter(请求参数):
    Request Parameter 是通过 URL 的查询字符串(query string)来传递参数的,参数以键值对的形式出现。例如,/users?id=123 中的 id 就是一个 Request Parameter。使用 Request Parameter,可以直接在 URL 中提供参数,用于传递用户请求的信息。在 Spring MVC 中,可以使用 @RequestParam 注解将请求参数绑定到方法的参数上。Request Parameter 是最常见的传递参数的方式,常用于 GET 请求和表单提交。

4.什么是消息转换器和对象转换器:

        消息转换器是在客户端和服务器之间传递消息时用于实现数据格式的转换,将消息的原始格式转换为具有特定数据结构的对象或从对象转换为消息的原始格式。消息转换器常用于处理 HTTP 请求和响应的数据格式转换,例如将 JSON 转换为 Java 对象或将 Java 对象转换为 JSON。

常见的消息转换器包括处理 JSON、XML、Protobuf、Properties 等格式的转换。Spring MVC 中提供了多个内置的消息转换器,并且也支持自定义消息转换器。

对象转换器是将一个对象转换为另一个对象的组件,通常在业务逻辑中使用。对象转换器用于将一个类型的对象转换到另一个类型的对象,可以处理属性的映射、类型转换、数据格式转换等操作。对象转换器通常用于模型对象与视图对象之间的转换,或者是实体对象和DTO(Data Transfer Object)之间的转换。

在实际应用中,消息转换器和对象转换器往往会结合使用。例如,首先通过消息转换器将 HTTP 请求中的 JSON 数据转换为 Java 对象,然后再通过对象转换器将这个 Java 对象转换为业务需要的对象类型。

总结一下:

  • 消息转换器用于在客户端和服务器之间进行消息格式的转换,常用于处理 HTTP 请求和响应的数据格式转换。
  • 对象转换器用于将一个类型的对象转换为另一个类型的对象,通常在业务逻辑中使用,用于处理对象之间的转换。
  @Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器");//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();//需要为消息转换器指定对象转换器    对象转换器课可以将java对象序列化为Json对象converter.setObjectMapper(new JacksonObjectMapper());//将自定义的消息转换器加入到容器中converters.add(0, converter);}
}

5.什么是序列化和反序列化:

序列化(Serialization)是将对象转换为字节流的过程,以便将其存储到文件、内存中传输或在网络上进行传输。序列化可以将对象的状态保存到永久存储或传输到其他计算机,以便在需要时能够重新创建对象。序列化过程将对象的属性和数据结构转换为字节序列,使其能够在不同的环境中传输和存储。

反序列化(Deserialization)是将字节流转换回对象的过程,即从序列化的字节流中恢复对象的过程。反序列化将字节流重建为对象,并将其状态和属性恢复到先前序列化的状态。

总结:

今天开始写项目,感觉收获很大,首先就是感觉爽,这是我写的第一个大型项目,这种代码之间联系,分层式的架构是我以前看网课跟练的那些碎片化的代码是完全不同的,我感觉很通畅。其次是感觉时间紧迫,因为我有太多的东西想学了,要抓紧赶进度

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

69e9169c980f43e0aad31ff9ada88a9c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/99265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka客户端核心参数详解

这一部分主要是从客户端使用的角度来理解 Kakfa 的重要机制。重点依然是要建立自己脑海中的 Kafka 消费模型。Kafka 的 HighLevel API 使用是非常简单的&#xff0c;所以梳理模型时也要尽量简单化&#xff0c;主线清晰&#xff0c;细节慢慢扩展。 一、从基础的客户端说起 Kaf…

75.颜色分类

原地排序&#xff1a;空间复杂度为1 class Solution { public:void sortColors(vector<int>& nums) {if(0){//法一&#xff1a;单指针两个遍历int nnums.size();int ptr0;for(int i0;i<n;i){if(nums[i]0){swap(nums[i],nums[ptr]);ptr;}}for(int iptr;i<n;i){…

RabbitMQ安装与简单使用

安装 下载资源 可以访问官网查看下载信息rabbitmq官网 选择合适的版本&#xff0c;注意&#xff1a;rabbitmq需要下载一个Erlang才能使用 我自己是在一下两个连接中下载的 rabbitmq 3.8.8 erlang 21.3.8.15 需要下载其他版本的同学注意erlang版本是否匹配&#xff0c;可以访…

【问题证明】矩阵方程化为特征值方程求得的特征值为什么是全部特征值?不会丢解吗?

问题 这个问题困扰了我好久&#xff0c;一直感觉如果有其他的特征值没法证伪&#xff0c;不过一直存在思想的层面&#xff0c;没有实际解决&#xff0c;今天突然想到动笔来解决&#xff0c;遂得解&#xff0c;证明如下。 证明 总结 这个证明看似证明过后很直观&#xff0c;但…

微信小程序之本地生活(九宫格)

文章目录 一.创建项目二.配置修改json三.编写WXML四.编写WXSS五.最终效果 一.创建项目 创建新的项目&#xff0c;名称为&#xff1a;本地生活 二.配置修改json 在app.json中删除其他页面 将index改为grid 自动生成新的文件 添加自己的轮播图片 源代码&#xff1a; <!--…

Android Studio 是如何和我们的手机共享剪贴板的

背景 近期完成了target33的项目适配升级,随着AGP和gradle的版本升级,万年老版本Android Studio(后文简称AS)也顺便升级到了最新版Android Studio Giraffe | 2022.3.1,除了新UI外,最让我好奇的是这次的Running Devices功能(官方也称为Device mirroring)可以控制真机了. 按照操…

异步爬虫实战:实际应用asyncio和aiohttp库构建异步爬虫

在网络爬虫的开发中&#xff0c;异步爬虫已经成为一种非常流行的技术。它能够充分利用计算机的资源&#xff0c;提高爬虫效率&#xff0c;并且能够处理大量的运算请求。Python中的asyncio和aiohttp库提供了强大的异步爬虫支持&#xff0c;使得开发者能够轻松构建高效的异步爬虫…

在pycharm中出现下载软件包失败的解决方法

一. 一般情况下我们会选择在设置中下载软件包,过程如下. 1. 直接点击左上角的文件, 再点击设置, 再点击项目, 在右边选择python解释器,点击号,输入要下载的软件包, 在下面的一系列的包中选择相对应的包,点击安装就可以了,有的时候我们下载的是最新的版本,如果要下载固定的版本…

算法框架-LLM-1-Prompt设计(一)

原文&#xff1a;算法框架-LLM-1-Prompt设计&#xff08;一&#xff09; - 知乎 目录 收起 1 prompt-engineering-for-developers 1.1 Prompt Engineering 1.1.1 提示原则 1. openai的环境 2. 两个基本原则 3. 示例 eg.1 eg.2 结构化输出 eg.3 模型检验 eg.4 提供示…

【计算机基础】Git系列3:常用操作

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

如何使用CDN加载静态资源

文章目录 前言工具场景七牛云创建空间存储 控制台查看后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误…

QFluentWidgets: 基于 C++ Qt 的 Fluent Design 组件库

简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库&#xff0c;内置超过 150 个开箱即用的 Fluent Designer 组件&#xff0c;支持亮暗主题无缝切换和自定义主题色。搭配所见即所得的 Fluent Designer 软件&#xff0c;只需拖拖拽拽&#xff0c;不用编写一行 QSS&…

弹性资源组件elastic-resource设计(四)-任务管理器和资源消费者规范

简介 弹性资源组件提供动态资源能力&#xff0c;是分布式系统关键基础设施&#xff0c;分布式datax&#xff0c;分布式索引&#xff0c;事件引擎都需要集群和资源的弹性资源能力&#xff0c;提高伸缩性和作业处理能力。 本文介绍弹性资源组件的设计&#xff0c;包括架构设计和详…

数据结构-图-最短路径问题

最短路径问题 单源最短路径Dijkstra算法原理代码实现 Bellman-Ford算法原理代码实现SPFA优化SPFA代码实现 多元最短路径Floyd-Warshall算法原理代码实现 单源最短路径 &#x1f680;最短路径&#xff1a;从图G的某个顶点出发到达另一个顶点的最短路径&#xff0c;其中最短是指…

线性代数小例子

这样做有什么问题呢&#xff1a; A 2 A > A ( A − E ) 0 > A E A 0 A^2 A > A(A - E) 0> A E \quad A 0 A2A>A(A−E)0>AEA0 上述做法是错误的&#xff0c;这是因为两个矩阵的乘积结果为0&#xff0c;并不能说明这两个矩阵就是0&#xff0c;即上述…

提高工作效率!本地部署Stackedit Markdown编辑器,并实现远程访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器&#xff0c;在GitHub上拥有20.7k Star&#xff01;&#xff0c;它支持将Markdown笔记保…

假期AI新闻热点:亚运会Al技术亮点;微软GPT-4V论文精读;Perplexity推出pplx-api;DALL-E 3多渠道测评 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f525; 科技感拉满&#xff0c;第19届杭州亚运会中的Al技术亮点 八年筹备&#xff0c;杭州第19届亚运会开幕式于9月23日晚隆重举行&#xff0…

论文解析——异构多芯粒神经网络加速器

作者 朱郭益, 马胜&#xff0c;张春元, 王波&#xff08;国防科技大学计算机学院&#xff09; 摘要 随着神经网络技术的快速发展, 出于安全性等方面考虑, 大量边缘计算设备被应用于智能计算领域。首先&#xff0c;设计了可应用于边缘计算的异构多芯粒神经网络加速器其基本结构…

SSRF+redis未授权漏洞复现

1.SSRF漏洞简介 SSRF&#xff08;Server-Side Request Forgery&#xff09;即服务器端请求伪造&#xff0c;是一种由攻击者构造攻击链传给服务器&#xff0c;服务器执行并发起请求造成安全问题的漏洞&#xff0c;一般用来在外网探测或攻击内网服务。当网站需要调用指定URL地址…

vscode 无法打开源文件

以下是c/c插件的intelligense设置情况&#xff1a; 解决办法&#xff1a; 重新安装vsode无用&#xff1b;重新下载mingw64&#xff0c;管用了&#xff01;&#xff08;我猜可能是之前换电脑移植文件的时候导致了部分文件丢失&#xff09;