面试打底稿⑤ 项目一的第一部分
简历原文
抽查部分
项目描述
- 该项目旨在服务广州地区的快递物流,实现了下单、快递员取派件、订单转运单、线路规划、网点设置等功能。
责任描述
- 登录系统优化,双token三验证模式实现设置token状态、提高登录安全性的效果
模拟问答
1.能简单介绍一下你这个的项目吗
模板一
好的。我这个项目叫“加驰物流”,服务了广州地区的快递物流。
这个项目分几个功能模块:前端由用户端、快递员端、司机端和后台管理系统四个不同部件组成。然后由统一网关拦截。后端由业务平台和第三方支撑平台组成,业务包括路线规划、运单任务管理和智能调度,以及其他的微服务比如快递员微服务、司机微服务等。这些都连接到了MySQL、MongoDB等组成的数据平台上。第三方支撑平台用到了公司自研的权限系统、地图服务,还使用到了阿里云、RabbitMQ、Seata、xxl-job任务调度等。
这个项目使用了以下技术栈:jdk1.8、MySQL8.0、Spring Boot2.6.6、Nacos1.4.2、SpringCloud Gateway3.1.1、Redis7.0.4、 MyBatis-Plus、knife4j、MongoDB、ElasticSearch、RabbitMQ、xxl-job、Jenkins、seata、Hutool
项目的特色亮点在于,设计优化了物流信息模块,实现了数据精简、流量削峰、提高系统可用性。
在做出亮点的时候,碰到了很多难点,有以下4个:
1.数据量大的问题。我们用MongoDB的单条数据可以多字段存储,替换了MySQL,实现了数据精简;
2.高并发问题。我们用Caffeine和Redis做了多级缓存,解决了这个问题。
3.缓存击穿问题。我们引入了布隆过滤器来解决这个问题。
4.布隆过滤器准确性、效率问题。我们在过滤器内加适当的算法数量,解决了这个矛盾。
这个项目给我的收获就是,更深入的体会到了技术的实际能力。不同的数据库技术,能满足不同的需求,MySQL适合常规化数据存储,MongoDB适合一些特殊情景的使用;多级缓存对高并发问题的较成功的解决;缓存击穿情景下,布隆过滤器的选用与调试。这些实际的技术应用场景,说实话,让我着迷,也让我感觉有源源不断的改变世界的力量。
我可以说说项目难点业务的处理逻辑。物流信息模块中,首先是更新或添加运单详情的逻辑:根据运单id查询运单是否存在,若不存在则创建,若存在则追加。然后设置更新时间,加入MongoDB。
然后引入多级缓存是查询的逻辑,首先查询Caffeine里面有没有数据,如果没有则查询Redis,最后才查询数据库。更新数据,即创建或追加运单详情时,让所有一级缓存节点都订阅二级节点,及时更新。
最后为了解决缓存的三种问题作了如下操作:
解决缓存击穿,我们设置互斥锁;
解决缓存雪崩,我们设置随机过期时间、采用多级缓存、搭建高可用集群;
解决缓存穿透,我们采用布隆过滤器。
模板二
好的。我在项目中是后端开发,负责物流信息模块的性能优化。
这个物流信息模块是后端的业务,后端业务包括路线规划、智能调度、运单任务分配等模块,我负责的物流信息模块也是其中之一。
它要做的就是查询运单信息,然后在用户访问的时候交给前端显示快递到了哪里。
公共部分就是查询显示订单的模块。
我负责的就是修改MySQL存储方式为MongoDB方式,以及采用布隆过滤器解决缓存穿透的问题。
我的技术方案成功精简了数据,达到了流量削峰、提高系统可用性的效果。
好在后期没出什么bug。
(推荐使用模板二。)
2.能说一下你这个登录系统做了什么吗
可以。我登录用了微信登录,流程如下:
首先微信小程序发送登录请求,携带了appid、appsecret还有code,后端接收到后向微信接口传递这些参数进行校验,得到用户的信息openid等。然后若用户、用户手机号存在则直接根据这些信息生成token,不存在则查询到手机号、创建用户信息再生成token,最后返回给前端保存。之后前端就用token访问登录后能访问的资源。
在这个流程中,关于token可能存在两方面的问题:
其一是有效期的长短问题,有效期过短,登录频繁,不方便用户;有效期过长,被黑客截取后系统就不安全。
其二是一个token没办法手动让其失效,这样检测到异常状态后还是能使用,就不合理。
为了解决这两个问题,我们的方案是采用双token三验证的模式来替代单token模式。
双token,意思是设置一个长期token,例如一天的,和一个短期token,例如5分钟的。
面对第一个问题,如果5分钟后短token失效了,只要长token还在有效期,就可以拿长token去重新获取短token,就又可以保持登录状态了;
面对第二个问题,只要我们把长token设置成只能使用一次,例如存入Redis,检测到异常状态后,直接移除Redis中的token信息,这样就能达成设置状态的效果了。
相关文章:

面试打底稿⑤ 项目一的第一部分
简历原文 抽查部分 项目描述 该项目旨在服务广州地区的快递物流,实现了下单、快递员取派件、订单转运单、线路规划、网点设置等功能。 责任描述 登录系统优化,双token三验证模式实现设置token状态、提高登录安全性的效果 模拟问答 1.能简单介绍一下…...
PSINS工具箱学习(三)让AI解释PSINS中的各种卡尔曼滤波函数
原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning PSINS 中的 Kalman 滤波代码都在百行以内,没调用什么函数,而且通用性很强,拿去让 AI 解释,效果挺好。 文章目…...

多边形碰撞检测算法
1、AABB碰撞检测算法 AABB碰撞检测指轴对齐碰撞箱(Axis-aligned Bounding Box),是分别从x轴向和y轴向进行碰撞检测的算法。即对于需要检测的物体A和物体B我们需要将其用A盒和B盒套起来,判断A盒和B盒在x轴向和y轴向是否发生碰撞,只有在x轴向和…...

【C/C++笔试练习】——printf在使用%的注意事项、for循环语句的三个条件、运算符优先级、删除公共字符
文章目录 C/C笔试练习1.%符号在printf用作格式说明符的注意事项(1)输出%5.3s(2)判断%中小数点含义 2.for循环语句的三个条件(3)判断循环次数(4)判断循环次数 3.运算符优先级…...

Linux部署elk日志监控系统
目录 一、简介 二、部署elasticsearch 2.1 安装jdk11(jdk版本>11) 2.2 下载安装包 2.3 授权elk用户 2.4 配置elasticsearch.yml 2.5 启动elasticsearch 三、部署logstash 3.1 启动测试 3.2 可能出现的报错 3.3 指定配置文件启动logstash 3.4 安装El…...
LINUX -SQL笔记(自学用)
1.安装 sudo apt-get install mysql-server sudo mysql -u root -p2.关系模型 在关系数据库中,一张表中的每一行数据被称为一条记录。一条记录就是由多个字段组成的。 每一条记录都包含若干定义好的字段。同一个表的所有记录都有相同的字段定义。 对于关系表&#…...

【Spark】win10配置IDEA、saprk、hadoop和scala
终于,要对并行计算下手了哈哈哈。 一直讲大数据大数据,我单次数据处理量大概在1t上下,是过亿级的轨迹数据。 用python调用multiprogress编写的代码,用多线程也要一个多月跑完。 我对这个效率不太满意,希望能快一点再快…...

MQTT 协议概要
01 MQTT协议 MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的支持在各方之间异步通信的消息协议。MQTT在空间和时间上将消息发送者与接收者分离,因此可以在不可靠的网络环境中进行扩展。虽然叫做消息队列遥测传输,但它与消息…...

向量数据库X云计算驱动大模型落地电商行业,Zilliz联合AWS探索并贡献成熟解决方案
近日,由Zilliz 联合亚马逊云科技举办的【向量数据库 X 云计算 驱动大模型落地电商行业】活动在上海落幕,获得业内专业人士的广泛好评。 众所周知,大模型技术的发展正加速对千行万业的改革和重塑,向量数据库作为大模型的海量记忆体、云计算作为大模型的大算力平台,是大模型…...
【vue2】解决Vuex刷新页面数据丢失的问题
最近写vue2 项目需要用到vuex, 但遇到一个问题,存进store里的数据刷新就丢失了,于是乎百度解决。将自己的感受与解决方法记录下来。 数据丢失的原因 vuex存储的数据只是在页面中,相当于全局变量,页面刷新的时候vuex里的数据会重…...

小皮面板配置Xdebug,调试单个php文件
小皮面板配置Xdebug 首先下载phpstrom,和小皮面板 打开小皮面板,选中好要使用的php版本 然后点击【管理】> 【php扩展】> 【xdebug】 然后打开选中好版本的php位置 D:\Program_Files\phpstudy_pro\Extensions\php\php7.4.3nts打开php.ini文件…...

版本控制系统:Perforce Helix Core -2023
Perforce Helix Core是领先的版本控制系统,适用于需要加速大规模创新的团队。存储并跟踪您所有数字资产的更改,从源代码到二进制再到IP。连接您的团队,让他们更快地行动,更好地构建。 通过 Perforce 版本控制加速创新 Perforce H…...

回归预测 | Matlab实现基于MIC-BP最大互信息系数数据特征选择算法结合BP神经网络的数据回归预测
回归预测 | Matlab实现基于MIC-BP最大互信息系数数据特征选择算法结合BP神经网络的数据回归预测 目录 回归预测 | Matlab实现基于MIC-BP最大互信息系数数据特征选择算法结合BP神经网络的数据回归预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 Matlab实现基于…...
Hive-命令行CDH访问开启kerberos的hive
1.通过hive用户访问 切换用户为hive [rootslave conf]# su - hive 上一次登录:五 4月 12 13:59:19 CST 2019pts/1 上 [hiveslave ~]$命令行直接输入hive就可以进入hive [hiveslave ~]$ hive log4j:WARN No such property [maxFileSize] in org.apache.log4j.Dail…...

手机能搜到某个wifi,电脑搜不到解决方法(也许有用)
方法一:更新驱动 下载驱动大师、驱动精灵等等驱动软件,更新网卡驱动 方法二 按 win 键,打开菜单 搜索 查看网络连接(win11版本是搜这个名字) 点击打开是这样式的 然后对 WLAN右击->属性->配置->高级 这…...

Java-day18(网络编程)
网络编程 1.概述 Java提供跨平台的网络类库,可以实现无痛的网络连接,程序员面对的是一个统一的网络编程环境 网络编程的目的:直接或间接地通过网络协议与其他计算机进行通信 网络编程的两个主要问题: 1.如何准确定位网络上一台…...

Java多线程编程-栅栏CyclicBarrier实例
前言 本文是基于《Java多线程编程实战指南-核心篇》第五章个人理解,源码是摘抄作者的源码,源码会加上自己的理解。读书笔记目前笔者正在更新如下, 《Java多线程编程实战指南-核心篇》,《How Tomcat Works》,再到《spr…...

【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码
1 绘制2D动画(animation) Matplotlib是一个Python绘图库,它提供了丰富的绘图功能,包括绘制动画。要绘制动画,Matplotlib提供了FuncAnimation类,允许您创建基于函数的动画。下面是一个详细的Matplotlib动画示…...
变量、常量以及与其他语言的差异 - Go语言从入门到实战
知识点 源码文件以_test结尾:xxx_test.go测试方法名以Test开头:func TestXXX(t *testing.T){…} 利用单元测试来写代码段,保存之后会自动运行程序返回结果,可以快速实践得到反馈。 编写测试程序 接下来练习一下,怎…...

Android 编译插桩操纵字节码
本文讲解如何编译插桩操纵字节码。 就使用 ASM 来实现简单的编译插桩效果,通过插桩实现在每一个 Activity 打开时输出相应的 log 日志。实现思路 过程主要包含两步: 1、遍历项目中所有的 .class 文件 如何找到项目中编译生成的所有 .class 文件&#…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...