校园商城项目自制面经

news2025/1/12 9:37:00

ware-仓库

目录

ES

为什么redis快

为什么ES搜索快?

怎么理解es的倒排索引

简单看SpringCache的api

Feign怎么用的

gateWay实现前端和后端的跨域请求:

三级分类:

网站的数据上传:

JSR303校验

自定义校验功能



ES(参考黑马程序员的springcloud教程md文档)

es里面就是,一个索引库对应多个doc

1.es是倒排索引

 

 2.

因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作,使用mysql实现

  • 对查询性能要求较高的搜索需求,使用elasticsearch实现

  • 两者再基于某种方式,实现数据的同步,保证一致性

精确查询常见的有哪些?

- term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
- range查询:根据数值范围查询,可以是数值、日期的范围


复合(compound)查询:复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑。常见的有两种:

- fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名
- bool query:布尔查询,利用逻辑关系组合多个其它的查询,实现复杂搜索

 

 

 

为什么redis快

 Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘I/O 速度的限制,所以速度极快

为什么ES搜索快?

因为ES使用了倒排索引

怎么理解es的倒排索引

倒排索引是一种数据结构,用于快速定位包含特定单词的文档。它是搜索引擎中最常用的技术之一。在倒排索引中,对于每个单词,存储一张包含该单词的文档列表,每个文档列表包含包含该单词的文档ID。这个列表被称为倒排列表。

例如,假设我们有以下文档:

  • 文档1: "The quick brown fox jumps over the lazy dog"
  • 文档2: "A quick brown dog outpaces a quick fox"

对于每个单词,我们可以创建一个包含该单词的文档列表,如下所示:

  • quick: [文档1, 文档2]
  • brown: [文档1, 文档2]
  • fox: [文档1, 文档2]
  • jumps: [文档1]
  • over: [文档1]
  • the: [文档1]
  • lazy: [文档1]
  • dog: [文档1, 文档2]
  • outpaces: [文档2]
  • a: [文档2]

当我们需要搜索包含特定单词的文档时,只需查找包含该单词的文档列表即可。此外,倒排索引还可以用于计算文档之间的相似度,以及用于自动完成功能。

简单看SpringCache的api瑞吉外卖项目学习笔记-P24-项目优化-Spring Cache缓存套餐数据_探索者7号的博客-CSDN博客

package com.itheima.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.entity.User;
import com.itheima.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @Autowired
    private CacheManager cacheManager;

    @Autowired
    private UserService userService;

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

    /**
     * CacheEvict:清理指定缓存
     * value:缓存的名称,每个缓存名称下面可以有多个key
     * key:缓存的key
     */
    @CacheEvict(value = "userCache",key = "#p0")
    //@CacheEvict(value = "userCache",key = "#root.args[0]")
    //@CacheEvict(value = "userCache",key = "#id")
    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id){
        userService.removeById(id);
    }

    //@CacheEvict(value = "userCache",key = "#p0.id")
    //@CacheEvict(value = "userCache",key = "#user.id")
    //@CacheEvict(value = "userCache",key = "#root.args[0].id")
    @CacheEvict(value = "userCache",key = "#result.id")
    @PutMapping
    public User update(User user){
        userService.updateById(user);
        return user;
    }

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

    @Cacheable(value = "userCache",key = "#user.id + '_' + #user.name")
    @GetMapping("/list")
    public List<User> list(User user){
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(user.getId() != null,User::getId,user.getId());
        queryWrapper.eq(user.getName() != null,User::getName,user.getName());
        List<User> list = userService.list(queryWrapper);
        return list;
    }
}

MYSQL的主从复制瑞吉外卖项目学习笔记-P25-项目优化-读写分离_探索者7号的博客-CSDN博客

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。
        就是一台或多台MysQL数据库(slave,即从库)从另一台NySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是NySQL数据库自带功能,无需借助第三方工具。

Feign怎么用的

employee给brand发请求

则在employee中单独在client代理商文件夹写接口BrandClient

 在BrandClient写抽象方法,方法要和想要调用的brandController中的方法一模一样

gateWay实现前端和后端的跨域请求:

gateway/application.yaml

三级分类:

核心思想:类似于并查集的findRoot()经过路径压缩的函数,需要找到最顶层的Root()

网站的数据上传:

引入gulimall-third-party

直接利用aliyun OSS提供的API
采用的是阿里云的OSS对象存储

image-20200428182755992

 且使用的是服务器签名后直传,允许用户在校园商城网站上用校园商城服务器的签名,上传文件到OSS

服务端签名后直传的原理如下:

  1. 用户发送上传Policy请求到应用服务器。
  2. 应用服务器返回上传Policy和签名给用户。
  3. 用户直接上传数据到OSS。

image-20200428184029655

JSR303校验

这是一种java提供的校验方式

在Java中提供了一系列的校验方式,它这些校验方式在“javax.validation.constraints”包中,提供了如@Email,@NotNull等注解。

在非空处理方式上提供了@NotNull,@Blank

自定义校验功能

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

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

相关文章

空间复杂度

概念 空间复杂度&#xff1a;是对一个算法在运行过程中临时占用存储空间大小的量度。 空间复杂度和时间复杂度的表示方法是一样的&#xff0c;也使用大O渐进表示法&#xff0c;计算规则基本相似。空间复杂度计算的并不是程序占用的字节大小&#xff0c;而是变量的个数。 大O…

chatgpt+机器人控制器融合(一)

当今机器人技术面临的挑战&#xff0c;以及 ChatGPT 能提供的帮助 目前机器人的操作流是从工程师或技术用户开始&#xff0c;需要他们将任务需求转换为系统代码。工程师会处于工作流程的回路中&#xff0c;他们需要不断编写新的代码和规范来纠正机器人的行为。总得来说&#x…

Faster-RCNN代码解读4:辅助文件解读

Faster-RCNN代码解读4&#xff1a;辅助文件解读 前言 ​ 因为最近打算尝试一下Faster-RCNN的复现&#xff0c;不要多想&#xff0c;我还没有厉害到可以一个人复现所有代码。所以&#xff0c;是参考别人的代码&#xff0c;进行自己的解读。 ​ 代码来自于B站的UP主&#xff08;…

我的创作纪念日:Unity CEO表示生成式AI将是Unity近期发展重点,发布神秘影片预告

PICK 未来的AI技术将会让人类迎来下一个生产力变革&#xff0c;这其中也包括生成型AI的突破性革新。各大公司也正在竞相推出AIGC工具&#xff0c;其中微软的Copilot、Adobe的Firefly、Github的chatGPT等引起了人们的关注。然而&#xff0c;游戏开发领域似乎还没有一款真正针对性…

vector容器

1、vector简介 vector 和 arry 非常相似&#xff0c;唯一存在的不同是 vector 是动态分配内存空间&#xff0c;随着元素的增加空间自动增加&#xff0c;但是 arry 是静态的 wector&#xff1a;单端动态数组容器&#xff0c;只允许在一端进行操作 2、vector的使用 需要引进头…

PyTorch深度学习实战 | 基于多层感知机模型和随机森林模型的某地房价预测

简介&#xff1a; 在现实生活中&#xff0c;除了分类问题外&#xff0c;也存在很多需要预测出具体值的回归问题&#xff0c;例如年龄预测、房价预测、股价预测等。相比分类问题而言&#xff0c;回归问题输出类型为一个连续值&#xff0c;如下表所示为两者的区别。在本文中&…

打造高效自动化测试流程:Jenkins+Allure+Pytest环境搭建和实战

引言 自动化测试已经成为软件开发中不可或缺的一部分。而在自动化测试中&#xff0c;Jenkins、Allure和Pytest这三个工具的组合可以说是非常流行和实用的。 Jenkins作为持续集成工具&#xff0c;可以充分利用其丰富的插件体系来搭建自动化测试环境&#xff1b; Allure则为我们…

怎么把jpg转换成pdf格式?实用又简单的方法来了

在工作和学习中&#xff0c;我们常常需要发送一些重要的图片给别人&#xff0c;这些图片可能包含学习资料或者重要的文件内容。但是发送多个JPG图片既不方便又不直观&#xff0c;所以我们需要将它们转换成PDF格式&#xff0c;以便于发送和查看。如果你不知道如何进行JPG到PDF的…

UI学习路线图2023完整版(适合自学)

作为数字时代中不可或缺的职业之一&#xff0c;UI设计师在今天和未来都有着广阔的职业前景。UI设计师有高需求行业、薪资高、职位晋升空间大、多样化的工作机会、职业发展空间大等许多优势&#xff0c;也有很多小伙伴想自学UI设计&#xff0c;但是不知道自己怎么学&#xff0c;…

服务器节点之间 如何实现自动化文件同步?

大数据、云计算、物联网的发展&#xff0c;使得企业能够拥有的数据急剧增加。面对快速变化和增长的庞大数据&#xff0c;如何高效地管理、利用数据对于企业来说至关重要。 但是&#xff0c;数据传输模式单一、自动化程度低、传输效率低下等难题&#xff0c;阻碍着企业对其数字…

TensorFlow 1.x 深度学习秘籍:6~10

原文&#xff1a;TensorFlow 1.x Deep Learning Cookbook 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…

高级UI之Android事件分发机制原理及源码分析

前言 在 Android 中&#xff0c;事件分发机制是一块很重要的知识点&#xff0c; 掌握这个机制能帮你在平时的开发中解决掉很多的 View 事件冲突问题&#xff0c;这个问题也是面试中问的比较多的一个问题了&#xff0c;本篇就来总结下这个知识点。 事件分发原因 Android 中页…

RK3399平台开发系列讲解(外设篇)Camera OV13850配置过程

🚀返回专栏总目录 文章目录 一、DTS 配置二、驱动说明三、配置原理四、cam_board.xml沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们以 OV13850/OV5640 摄像头为例,讲解在该开发板上的配置过程。 一、DTS 配置 isp0: isp@ff910000 {…status = "okay&quo…

R-CNN(Region with CNN feature)

目录 1. 介绍 2. R-CNN 2.1 SS(Selective Search) 算法 生成候选框 2.2 CNN 提取特征 2.3 SVM 分类 非极大值抑制 2.4 回归器微调候选框 3. R-CNN 的缺点 1. 介绍 目标识别的发展历史如图 2. R-CNN RCNN 是两阶段目标检测的鼻祖&#xff0c;类似于深度学习开山之作Al…

第03章_流程控制语句

第03章_流程控制语句 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 流程控制语句是用来控制程序中各语句执行顺序的语句&#xff0c;可以把语句组合成能完成一定功能的小逻辑模…

算法记录 | Day32 贪心算法

122.买卖股票的最佳时机II 贪心算法 思路&#xff1a; 把利润分解为每天为单位的维度&#xff0c;而不是从0天到第3天整体去考虑&#xff01; 那么根据prices可以得到每天的利润序列&#xff1a;(prices[i] - prices[i - 1])…(prices[1] - prices[0])。 如图&#xff1a;…

PyCharm+PyQt5+pyinstaller打包labelImg.exe

0 开头 labelImg是一款标注软件&#xff0c;作为一个开源项目&#xff0c;它的源码可以在github上找到。官方仓库地址为&#xff1a; https://github.com/heartexlabs/labelImg 小白安装时的最新版本编译出来的界面长这样&#xff1a; 之前在小白的博客里&#xff0c;也教过…

Spring学习5

一、代理模式 代理模式就是AOP的底层&#xff01; 1.代理模式的分类 静态代理动态代理2.静态代理 角色分析&#xff1a; 抽象角色&#xff1a;一般使用接口或者抽象类来解决真实角色&#xff1a;被代理的角色代理角色&#xff1a;代理真实角色后&#xff0c;一般会做一些附属操…

走进小程序【七】微信小程序【常见问题总结】

文章目录&#x1f31f;前言&#x1f31f;小程序登录&#x1f31f;unionid 和 openid&#x1f31f;关键Api&#x1f31f;登录流程设计&#x1f31f;利用现有登录体系&#x1f31f;利用OpenId 创建用户体系&#x1f31f;利用 Unionid 创建用户体系&#x1f31f;授权获取用户信息流…

JVM内存模型详解

JVM内存模型和Java内存模型都是面试的热点问题&#xff0c;名字看感觉都差不多&#xff0c;实际上他们之间差别还是挺大的。 通俗点说&#xff0c;JVM内存结构是与JVM的内部存储结构相关&#xff0c;而Java内存模型是与多线程编程相关mikechen。 什么是JVM JVM是Java Virtual …