面试总结

一、spring相关

1. Spring Security角色管理实现

在智慧种植虫害识别系统中,我实现了农户端和企业端的双角色权限控制,这一部分是这样实现的:
MySQL 表时设计区分农户和企业的角色表与权限表。登录时,JWT 令牌包含用户 ID、角色表和权限表字段。通过配置 Spring Security 的 Security Config 拦截请求,获取角色权限字段,判断能否访问当前接口

2. Spring MVC工作流程

  1. 用户发送HTTP请求至前端控制器DispatcherServlet
  2. DispatcherServlet通过HandlerMapping(处理器映射器)查找对应的Controller(处理器)。
  3. Controller执行业务逻辑后,返回ModelAndView(包含数据模型和视图信息)。
  4. DispatcherServlet通过视图解析器对ModelAndView进行渲染,生成最终视图并响应给客户端。
    在这里插入图片描述

3. AOP原理及代理类型

AOP(面向切面编程)是Spring的核心特性之一,用于解决代码冗余问题,实现日志、事务等功能的复用:

  • 原理:通过代理模式,在不修改目标代码的情况下,为目标方法添加额外功能(如前置通知、后置通知、异常通知等)。
  • 代理类型
    • JDK动态代理:基于接口生成代理类,要求目标类必须实现接口。
    • CGLIB动态代理:基于目标类生成代理子类,无需目标类实现接口,通过继承实现代理。
  • 应用场景:日志记录、事务管理、权限校验等。

二、消息队列(RabbitMQ)

1. 点餐系统中的异步处理

在点餐系统中,我用RabbitMQ实现了下单流程的异步化,提升系统吞吐量:

  • 下单流程
    1. 后端接收下单请求,先校验菜品在售状态和用户余额。
    2. 校验通过后,生成订单号,将订单状态设为“待支付”并存入MySQL,同时向用户发送“下单成功”消息。
    3. 生产者向RabbitMQ发送订单信息,消费者监听队列,负责执行扣减菜品库存、记录下单日志等非核心流程。
    4. 用户支付后,系统更新订单状态,触发后续配送等流程。

2. 订单超时未支付处理方案

(下单超过一定时间之后提醒用户)
针对订单超时未支付场景,使用RabbitMQ延迟队列实现自动处理:

  • 实现逻辑
    1. 下单成功后,系统向RabbitMQ发送延迟消息(设置消息过期时间,如30分钟)。
    2. 消息过期后,消费者监听并接收消息,根据订单号查询数据库中订单状态。
    3. 若订单仍为“未支付”状态,执行以下操作:向用户发送“订单超时”短信、回滚菜品库存、更新订单状态为“已取消”。

3. 延迟队列实现方式

延迟队列可通过RabbitMQ的“死信队列+消息存活时间(TTL)”实现:

  • 消息设置过期时间(TTL),并指定死信交换机和死信队列。
  • 消息过期后,自动从原队列转发到死信队列。
  • 消费者监听死信队列,处理超时任务(如订单超时、优惠券过期等)。

三、数据结构与集合

HashMap核心机制

HashMap是Java中常用的键值对集合,其底层实现与扩容机制如下:

  • 默认初始化容量:16(必须是2的幂次方,便于哈希计算)。
  • 负载因子:0.75,当元素数量达到“容量×负载因子”时触发扩容。
  • 扩容机制:扩容至原容量的2倍,重新计算所有元素的哈希值并迁移至新数组。
  • 结构转换
    • 当链表长度>8且数组长度>64时,链表转为红黑树(提升查询效率)。
    • 当红黑树节点数<6时,转回链表(减少红黑树维护成本)。

四、数据库操作

SQL分组统计查询思路

在这里插入图片描述

以“按产品和月份统计销售额并取前三”为例,查询思路如下:

  1. 使用MONTH()DATE_FORMAT()函数从订单时间中提取月份。
  2. 按“产品ID+月份”分组(GROUP BY)。
  3. SUM()函数计算每组的销售额(SUM(金额字段))。
  4. 按销售额降序排序(ORDER BY 销售额 DESC)。
  5. 取前三条结果(LIMIT 3)。

示例SQL:

SELECT product_id, DATE_FORMAT(order_time, '%Y-%m') AS month, SUM(amount) AS sales 
FROM orders 
GROUP BY product_id, month 
ORDER BY sales DESC 
LIMIT 3;

补充:也可以用窗口函数实现

WITH MonthlySales AS (SELECT product_id,DATE_TRUNC('month', order_time) AS month,SUM(order_amount) AS total_salesFROM ordersGROUP BY product_id, DATE_TRUNC('month', order_time)
),
RankedSales AS (SELECT product_id,month,total_sales,ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY total_sales DESC) AS sales_rankFROM MonthlySales
)
SELECT product_id,month,total_sales
FROM RankedSales
WHERE sales_rank <= 3
ORDER BY product_id, sales_rank; -- 可选:按产品、排名排序,结果更清晰

分组聚合 :先按产品 + 月份汇总销售额,得到基础统计;
窗口函数 :通过 ROW_NUMBER() 给每个产品的月份销售额 “内部排序”,生成排名;
筛选结果 :保留排名前 3 的记录,实现 “每个产品最高三个月份” 的需求。

SQL窗口函数:数据分析的"透视窗"

在SQL数据分析中,窗口函数是绕不开的关键工具。它像给数据开了"透视窗",能在保留明细的同时做分组计算,高效解决排名、累计、对比类需求。整理了核心知识点,速记备用👇

窗口函数:对数据集的"特定子集(窗口)"计算,保留原始行结构,不合并数据。

语法模板:

函数名(参数) OVER ([PARTITION BY 列名]  -- 分组窗口(可选)[ORDER BY 列名]      -- 窗口内排序(可选)[ROWS/RANGE 范围]    -- 行范围(进阶,可选)
)

常用:

1. 排名函数

  • ROW_NUMBER():同分组内生成唯一序号(值相同也跳号)
  • RANK():值相同则排名相同,后续排名跳号(如 1,1,3…)
  • DENSE_RANK():值相同则排名相同,后续排名不跳号(如 1,1,2…)

2. 聚合函数

SUM()/AVG()/MAX()/MIN() 结合窗口,实现累计计算移动统计(如累计销售额、近3月平均值)。

3. 偏移函数

  • LAG(列名, n):取当前行前n行数据(用于环比对比,如本月 vs 上月)
  • LEAD(列名, n):取当前行后n行数据(反向环比)

典型场景

  1. TopN 需求:按产品分组,取销售额最高的3个月份
  2. 趋势分析:计算用户消费的累计金额、月均消费
  3. 波动对比:用 LAG/LEAD 分析销售额环比变化

与 GROUP BY 区别

特性GROUP BY 聚合窗口函数
结果行数每组1行(合并数据)保留原始行数(明细+计算)
数据视角仅看分组汇总能透视分组内所有行数据

五、开发工具与流程

1. Git常用命令(提交与推送代码)

  1. git pull:拉取远程仓库最新代码,避免冲突。
  2. git add <文件名>git add .:将文件添加到暂存区。
  3. git commit -m "提交说明":将暂存区文件提交到本地仓库。
  4. git push:将本地仓库代码推送到远程仓库。

2. Maven模块依赖处理

当多模块项目中模块A被模块B依赖,修改A后需处理依赖更新:

  1. 模块A修改后,执行mvn install:将A打包并安装到本地仓库。
  2. 模块B执行mvn clean(清理旧文件)→ mvn compile(编译)→ mvn package(打包),确保依赖更新。
  3. 分布式环境中,可通过mvn deploy将A推送到私服,供其他模块拉取。

六、Redis数据结构

Redis是高性能的键值对数据库,支持多种数据结构,适用于不同场景:

  • String(字符串):存储文本、数字等,如用户token、计数器。
  • List(列表):有序可重复,支持头插(lpush)、尾插(rpush),可用于消息队列、任务队列。
  • Hash(哈希):键值对集合,适用于存储对象(如用户信息:user:{id} -> {name: "xxx", age: 20})。
  • Set(集合):无序不可重复,支持交集、并集运算,适用于标签、好友关系。
  • Sorted Set(有序集合):带分数的Set,按分数排序,适用于排行榜、延时任务。

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

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

相关文章

串与数组:从字符处理到多维存储的数据结构详解

串&#xff08;字符串&#xff09;和数组是数据结构中的两个重要分支&#xff0c;它们在程序设计中承担着不同但互补的角色。串专门处理字符数据&#xff0c;而数组则提供了多维数据的存储和访问机制。本文将深入探讨这两种数据结构的理论基础、实现方法和核心算法。 文章目录1…

面试之JVM

类的生命周期 加载、链接、初始化&#xff08;是类的初始化&#xff09;、使用&#xff08;对象的初始化&#xff09;、卸载&#xff08;GC&#xff09; 链接&#xff1a;验证、准备、解析 类加载 JDK9的升级点&#xff1a;扩展类加载器改成了平台类加载器。 java中很多的包分…

webpack开发模式与生产模式(webpack --mode=development/production“, )

webpack开发模式与生产模式的区别webpack的development&#xff08;开发模式&#xff09;和production&#xff08;生产模式&#xff09;是两种常见的构建环境配置&#xff0c;主要区别体现在构建速度、代码优化和调试支持等方面。开发模式 (development)目标&#xff1a;注重开…

当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式

想象一下&#xff0c;在IDE中对AI助手说"帮我找出本月销售额最高的前10个产品"&#xff0c;然后它不仅能理解你的意图&#xff0c;还能直接生成并执行SQL查询&#xff0c;返回准确结果——这不是科幻&#xff0c;而是Text2Sql.Net的MCP集成带来的现实。 &#x1f3af…

2025流程图模板和工具深度评测:AI如何提升绘图效率80%?

引言&#xff1a;流程图模板的价值革命 在数字化办公的浪潮中&#xff0c;流程图已从单纯的"业务说明工具"进化为跨部门协作的"视觉语言"。据智研咨询2025年报告显示&#xff0c;规范使用流程图模板可使团队沟通效率提升40%&#xff0c;错误率降低58%。无…

WebSocket实时通信系统——js技能提升

2. WebSocket实时通信系统 功能概述 实现完整的WebSocket通信系统&#xff0c;支持实时消息推送、连接管理、心跳检测和自动重连。 技术难点 WebSocket连接生命周期管理消息序列化和反序列化心跳机制和连接保活错误处理和重连策略多组件状态同步 实现思路 2.1 WebSocket管理器 …

Spring AI 入门指南:三步将AI集成到Spring Boot应用

无需深入AI底层实现&#xff0c;Java开发者也能快速构建智能应用本文将介绍如何使用 Spring AI 在 Spring Boot 项目中快速集成 AI 能力。通过三步操作——添加依赖、配置 API 凭证和编写调用代码&#xff0c;Java 开发者可以轻松构建 AI 应用。一、Spring AI 简介Spring AI 是…

OOM问题排查思路及解决方案

OOM问题原因&#xff1a; 根本原因是创建的对象数量超过JVM堆内存容量&#xff0c;且这些对象无法被GC回收场景&#xff1a; 1.本地缓存了用户态&#xff0c;用户量急剧上升导致内存溢出&#xff0c;如使用HashMap本地缓存10万用户数据&#xff0c;每 个用户对象约2KB&#xf…

梨花教育暖心鹏城:深圳市养老护理院里“时光绽放”,用声音点亮银发精神之光

2025年8月24日&#xff0c;在深圳这座充满活力与梦想的城市&#xff0c;一场温暖人心的公益活动在深圳市养老护理院温情上演。梨花教育策划并组织了“梨花・时光绽放”公益活动&#xff0c;旨在通过声音的魅力&#xff0c;为市养老护理院的老人们送去关怀与欢乐&#xff0c;丰富…

力扣100+补充大完结

力扣100分类一、Java基础代码模板1. 基础输入输出模板import java.util.Scanner;class Solution {public static int linkedListOperation() {// 链表操作实现return 0;}public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.next…

SSM从入门到实战:3.3 SpringMVC数据绑定与验证

&#x1f44b; 大家好&#xff0c;我是 阿问学长&#xff01;专注于分享优质开源项目解析、毕业设计项目指导支持、幼小初高的教辅资料推荐等&#xff0c;欢迎关注交流&#xff01;&#x1f680; &#x1f4d6; 本文概述 本文是SSM框架系列SpringMVC基础篇的第三篇&#xff0…

ctfshow_萌新web16-web20-----文件包含日志注入

_萌新web16解开md5?c36d_萌新web17-----文件包含禁用了php关键字&#xff0c;这个题禁了远程文件包含,进行日志注入发现日志中有user-agent信息&#xff0c;因此我们可以在user-agent中写入木马抓包burpsuitUser-agent:<?php eval($_POST[cmd])?>抓包然后连接蚁剑_萌新…

Flink的CheckPoint与SavePoint

Flink的Checkpoint&#xff08;检查点&#xff09;和Savepoint&#xff08;保存点&#xff09;是两种不同的状态快照机制&#xff0c;主要区别如下&#xff1a;1. ‌Checkpoint‌‌核心功能‌&#xff1a;周期性触发的容错机制&#xff0c;用于故障恢复时保证状态一致性57。‌触…

Ansible 自动化运维工具:介绍与完整部署(RHEL 9)

Ansible 自动化运维工具&#xff1a;介绍与完整部署&#xff08;RHEL 9&#xff09;Ansible 的介绍与安装 一、自动化运维的必要性 传统手动运维依赖图形/命令行界面、检查清单或记忆执行任务&#xff0c;存在以下核心问题&#xff1a; 易出错&#xff1a;易跳过步骤或执行错误…

构建生产级 RAG 系统:从数据处理到智能体(Agent)的全流程深度解析

文章目录一、 整体架构设计&#xff1a;迈向智能体&#xff08;Agent&#xff09;驱动的 RAG二、 数据准备与预处理&#xff1a;构建高质量知识库2.1 数据加载与初步提取2.2 多策略分块 (Multi-Strategy Chunking)逻辑分块&#xff1a;按故障章节和关键说明传统分块&#xff1a…

Duplicate Same Files Searcher v10.7.0,秒扫全盘重复档,符号链接一键瘦身

[软件名称]: Duplicate Same Files Searcher v10.7.0 [软件大小]: 3.3 MB [软件大小]: 夸克网盘 | 百度网盘 软件介绍 Duplicate Same Files Searcher&#xff08;重复文件搜索&#xff09;是一款强大且专业的重复文件查找与清理工具。通过使用该软件&#xff0c;用户可以方…

C/C++ 数据结构 —— 树(2)

​ &#x1f381;个人主页&#xff1a;工藤新一 ​ &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; ​ &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 ​ &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章…

EEA架构介绍

前言 本文主要对EEA架构的理解进行了记录&#xff0c;以加深理解及方便后续查漏补缺。 EEA架构 硬件架构 EEA架构作用 提升算力利用率、数据统一交互&#xff0c;实现整车功能协同、缩短线束、降低重量、降低故障率、提升装配自动化 EEA架构发展趋势 分布式–>域集中式–>…

【目标跟踪】《FastTracker: Real-Time and Accurate Visual Tracking》论文阅读笔记

0.参考 论文:https://arxiv.org/pdf/2508.14370v1 代码:github.com/HamidrezaHashempoor/FastTracker, huggingface.co/datasets/HamidrezaHashemp/FastTracker-Benchmark. 1.摘要 提高多目标跟踪在多物体跟踪上的性能(从前主要是针对行人场景做的优化)。 该方法包含两…

C++ 内存安全与智能指针深度解析

C 内存安全与智能指针深度解析面试官考察“野指针”&#xff0c;实际上是在考察你对 C “资源所有权” (Ownership) 和 “生命周期管理” (Lifetime Management) 的理解。现代 C 的答案不是“如何手动避免”&#xff0c;而是“如何自动化管理”。第一部分&#xff1a;核心知识点…