当前位置: 首页 > ds >正文

xx外卖知识补充

1.1 pojo类

  • vo(Value Object/View Object - 值对象/视图对象)

    Value Object,值对象,也称为业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方(实际上跟DO有点类似)。
    VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。
    VO通常用于业务层之间的数据传递,其仅仅包含数据。但应是抽象出的业务对象。根据业务的需要,其可以和表对应或者不。用new关键字创建,由GC进行回收
  • DTO(Data Transfer Object - 数据传输对象)

    DTO概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载。
    DTO用于表示一个数据传输对象,通常用于不同服务或服务不同分层之间的数据传输。
    DTO与VO与类似,但也有一些不同,这个不同主要是设计理念上的,比如API服务需要使用的是DTO,而用于展示层页面的使用的是VO。例如,为了展示方便,在VO的性别字段存的是男和女,而在DTO中存的是1或者2这样的代码。

1.2 MD5

MD5是一种哈希算法,用来保证信息的完整性。 一段信息对应一个哈希值,且不能通过哈希值推出这段信息,而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。

java中使用DIgestUtils工具类的md5DigestAsHex( byte),即可加密

1.3 Swagger

》便利了前后端交互

Swagger是一套围绕Open API规范构建的开源工具,可以帮助设计,构建,记录和使用REST API。

本项目使用了Knife4j,Knife4j对Swagger做了封装

使用方式

  • 导入knife4j的maven坐标

  • 配置类中加入knife4j的相关配置

  • 设置静态资源映射,否则接口文档无法访问

1.4阿里云oss对象存储

在阿里云官网注册登录,之后可以看到oss控制台,在控制台中新建bucket ,一些配置属性,根据自己的需求来。

创建完成后记住这些内容

alioss:  endpoint: oss-cn-beijing.aliyuncs.comaccess-key-id: LTAI5t7yJ6N34BBBwSckzdkr access-key-secret: 4NaS1bMCsjWeb4K9XWd6EdZuIyeiC1 bucket-name: skyimagescidag

1.5初识Redis

​1.启动
redis-server.exe redis.windows.conf2. 连接
redis-cli.exe -h 127.0.0.1 -p 6379
Redis数据类型
- 字符串(string):普通字符串,Redis中最简单的数据类型
- 哈希(hash):也叫散列,类似于Java中的HashMap结构
- 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
- 集合(set):无序集合,没有重复元素,类似于Java中的HashSet
- 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素 
字符串常用命令
  • SET** key value 设置指定key的值

  • GET key 获取指定key的值

  • SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒

  • SETNX key value 只有在 key 不存在时设置 key 的值

哈希操作命令

Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令:

  • HSET key field value 将哈希表 key 中的字段 field 的值设为 value

  • HGET key field 获取存储在哈希表中指定字段的值

  • HDEL key field 删除存储在哈希表中的指定字段

  • HKEYS key 获取哈希表中所有字段

  • HVALS key 获取哈希表中所有值

列表操作命令

Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:

  • LPUSH key value1 [value2] 将一个或多个值插入到列表头部

  • LRANGE key start stop 获取列表指定范围内的元素

  • RPOP key 移除并获取列表最后一个元素

  • LLEN key 获取列表长度

  • BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止

集合操作命令

Redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:

  • SADD key member1 [member2] 向集合添加一个或多个成员

  • SMEMBERS key 返回集合中的所有成员

  • SCARD key 获取集合的成员数

  • SINTER key1 [key2] 返回给定所有集合的交集

  • SUNION key1 [key2] 返回所有给定集合的并集

  • SREM key member1 [member2] 移除集合中一个或多个成员

有序集合操作命令

Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:

常用命令:

  • ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员

  • ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员

  • ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment

  • ZREM key member [member ...] 移除有序集合中的一个或多个成员

通用命令

Redis的通用命令是不分数据类型的,都可以使用的命令:

  • KEYS pattern 查找所有符合给定模式( pattern)的 key

  • EXISTS key 检查给定 key 是否存在

  • TYPE key 返回 key 所储存的值的类型

  • DEL key 该命令用于在 key 存在是删除 key

1.6HttpClient

通过java代码来实现发送Http请求

1.6.1使用方法
1. 创建HttpClient对象。
2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6. 释放连接。无论执行方法是否成功,都必须释放连接
​
1.6.2案例
   public static String doGet(String url,Map<String,String> paramMap){// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();
​String result = "";CloseableHttpResponse response = null;
​try{URIBuilder builder = new URIBuilder(url);if(paramMap != null){for (String key : paramMap.keySet()) {builder.addParameter(key,paramMap.get(key));}}URI uri = builder.build();
​//创建GET请求HttpGet httpGet = new HttpGet(uri);
​//发送请求response = httpClient.execute(httpGet);
​//判断响应状态if(response.getStatusLine().getStatusCode() == 200){result = EntityUtils.toString(response.getEntity(),"UTF-8");}}catch (Exception e){e.printStackTrace();}finally {try {response.close();httpClient.close();} catch (IOException e) {e.printStackTrace();}}
​return result;}
​
  public static String doPost(String url, Map<String, String> paramMap) throws IOException {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";
​try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);
​// 创建参数列表if (paramMap != null) {List<NameValuePair> paramList = new ArrayList();for (Map.Entry<String, String> param : paramMap.entrySet()) {paramList.add(new BasicNameValuePair(param.getKey(), param.getValue()));}// 模拟表单UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);httpPost.setEntity(entity);}
​httpPost.setConfig(builderRequestConfig());
​// 执行http请求response = httpClient.execute(httpPost);
​resultString = EntityUtils.toString(response.getEntity(), "UTF-8");} catch (Exception e) {throw e;} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}}
​return resultString;}
​

1.7spring cache

基于注解的缓存功能

@CachePut

    /*** CachePut:将方法返回值放入缓存* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key*/@PostMapping@CachePut(value = "userCache", key = "#user.id")//key的生成:userCache::1public User save(@RequestBody User user){userMapper.insert(user);return user;}

@Cacheable

/*** Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,    *调用方法并将方法返回值放到缓存中* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key*/@GetMapping@Cacheable(cacheNames = "userCache",key="#id")public User getById(Long id){User user = userMapper.getById(id);return user;}

@CacheEvict

@DeleteMapping@CacheEvict(cacheNames = "userCache",key = "#id")//删除某个key对应的缓存数据public void deleteById(Long id){userMapper.deleteById(id);}
​@DeleteMapping("/delAll")@CacheEvict(cacheNames = "userCache",allEntries = true)//删除userCache下所有的缓存数据public void deleteAll(){userMapper.deleteAll();}

1.8spring TASK

任务调度,按照约定的时间自动执行某个代码逻辑

cron表达式

6或7个域

秒 分 小时 日 月 周 年

使用Cron - 在线Cron表达式生成器

可以快速开发

使用

1.导入maven坐标

2.启动类添加@EnableScheduling 开启任务调度

3.自定义定时任务类

1.9WebSocket

WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。

HTTP协议和WebSocket协议对比:

  • HTTP是短连接

  • WebSocket是长连接

  • HTTP通信是单向的,基于请求响应模式

  • WebSocket支持双向通信

  • HTTP和WebSocket底层都是TCP连接

WebSocket缺点:

服务器长期维护长连接需要一定的成本 各个浏览器支持程度不一 WebSocket 是长连接,受网络限制比较大,需要处理好重连

结论:WebSocket并不能完全取代HTTP,它只适合在特定的场景下使用

WebSocket实现步骤:

1). 直接使用websocket.html页面作为WebSocket客户端

2). 导入WebSocket的maven坐标

3). 导入WebSocket服务端组件WebSocketServer,用于和客户端通信

4). 导入配置类WebSocketConfiguration,注册WebSocket的服务端组件

5). 导入定时任务类WebSocketTask,定时向客户端推送数据

1.10 Apache ECharts

官网Apache ECharts

1.11Apache POI

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 Excel 文件。

http://www.xdnf.cn/news/4004.html

相关文章:

  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段(1):语法单词
  • Jetpack Compose 边距终极指南:Margin 和 Padding 的正确处理方式
  • 详细案例,集成算法
  • 高等数学第三章---微分中值定理与导数的应用(3.3泰勒(Taylor)公式)
  • JAVA组织/岗位拉取多段时间属性到一张表上时,时间段分隔问题
  • 解释一下NGINX的反向代理和正向代理的区别?
  • 【C++重载操作符与转换】下标操作符
  • Android学习总结之事件分发机制篇
  • Java大厂面试:Java技术栈中的核心知识点
  • 25.5.4数据结构|哈夫曼树 学习笔记
  • 深度学习在自动驾驶车辆车道检测中的应用
  • 硬件工程师面试常见问题(13)
  • 一个整数n可以有多种分划,分划的整数之和为n,在不区分分划出各整数的次序时,字典序递减输出n 的各详细分划方案和分划总数,详解
  • 5.4学习记录
  • 洛谷 P2473 [SCOI2008] 奖励关
  • TS 类型别名
  • ES6入门---第三单元 模块一:类、继承
  • 【操作系统】死锁
  • [pdf,epub]292页《分析模式》漫谈合集01-59提供下载
  • 【C语言入门级教学】VS使用调试技巧1
  • 算法笔记.求约数
  • 303.整数拆分
  • Seata TCC 实战笔记:从零搭建分布式事务 Demo (含源码)
  • Linux的时间同步服务器
  • 【LLM】deepseek R1之GRPO训练笔记(持续更新)
  • 【TF-BERT】基于张量的融合BERT多模态情感分析
  • 代码随想录算法训练营Day44
  • PyTorch_张量索引操作
  • Spring Cloud Gateway路由+断言+过滤
  • Flask + SQLite 简单案例