面试打底稿⑤ 项目一的第一部分

简历原文

抽查部分

项目描述

  • 该项目旨在服务广州地区的快递物流,实现了下单、快递员取派件、订单转运单、线路规划、网点设置等功能。

责任描述

  • 登录系统优化,双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信息,这样就能达成设置状态的效果了。

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

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

相关文章

当网络设置为自动获取dns时而实际nds是8.8.8.8,1.1.1.1的解决方法

笔记本换网络环境后,网络设置的是自动获取IP和自动获取dns。但使用命令:config/all命令时发现dns总是8.8.8.8,1.1.1.1。导致csdn上不了。 8.8.8.8,1.1.1.1:是谷歌的dns。 解决办法: 在支行中输入regedit打开注册表后&#xff0…

什么是Redux?它的核心概念有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是Redux?⭐ 它的核心概念有哪些?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发…

【ACL2023】Event Extraction as Question Generation and Answering

论文题目:Event Extraction as Question Generation and Answering 论文来源:ACL2023 论文链接:Event Extraction as Question Generation and Answering - ACL Anthology 代码链接:GitHub - dataminr-ai/Event-Extraction-as-…

Java-day18(网络编程)

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

基于SSM的保险业务管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Kubernetes(K8s):未来云原生应用的引擎

文章目录 Kubernetes的核心概念和架构为什么K8s是构建云原生应用的首选工具?云原生应用的好处和挑战容器编排的重要性:Docker和KubernetesKubernetes生态系统:核心组件和附加工具实际应用:企业如何在生产环境中使用K8s未来展望&am…

【VUE复习·2】@click 之事件处理与函数(可传参);@click 阻止事件冒泡应用场景;@click 多修饰符应用场景(高级)

总览 1.“事件处理”是什么 2.click 函数参数传递应用 3.click 阻止事件冒泡应用场景 4.click 多修饰符应用场景(高级) 一、“事件处理”是什么 1.概念 我们在和页面进行交互时,进行点击或滑动或其他动作时,我们操作的是 DOM …

MR混合现实在军事课堂教学中的应用演示

战场模拟:利用MR技术可以创建逼真的战场模拟环境,将学生置身于真实的战场场景中,可以体验和学习各种作战技巧和战术策略。学生可以通过佩戴MR头盔或眼镜,观察虚拟的场景,并与虚拟对象进行互动,如操作武器、…

深度学习|如何确定 CUDA+PyTorch 版本

对于深度学习初学者来说,配置深度学习的环境可能是一大难题,因此本文主要讲解CUDA; cuDNN; Pytorch 三者是什么,以及他们之间的依赖关系。 CUDA CUDA(Compute Unified Device Architecture)是由NVIDIA开发的用于并行计…

【C/C++笔试练习】——printf在使用%的注意事项、for循环语句的三个条件、运算符优先级、删除公共字符

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

独立站引流,如何在Reddit进行营销推广?

Reddit是目前最被忽视却最具潜力的社交媒体营销平台之一,它相当于国内的百度贴吧,是美国最大的论坛,也是美国第五大网站,流量仅次于Google、Youtube、Facebook以及亚马逊。 如果会玩,Reddit也可以跟其他的社交媒体营销…

Spring 学习(九)整合 Mybatis

1. 整合 Mybatis 步骤 导入相关 jar 包 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency>…

Django之初入门

一&#xff09;Django简介 1.简介 Django是一个开源的Python Web框架&#xff0c;它以简洁高效的方式帮助开发者构建复杂的Web应用程序。Django采用了MVC&#xff08;Model-View-Controller&#xff09;的架构模式&#xff0c;通过强大的工具和功能&#xff0c;提供了一套完整…

PHP 变动:PHP 8 版本下字符串与数值的弱比较

文章目录 参考环境声明弱比较隐式类型转换字符串连接数学运算布尔判断相等运算符 字符串与数值的弱比较字符串转化为数值的具体规则字符串与数值的弱比较一般情况科学计数法前缀 0E 与 0e PHP8 在字符串与数值的弱比较方面做出的改动数值字符串优化 参考 项目描述搜索引擎Bing…

数据库及分类详细介绍

目录 一、数据库详细介绍1、什么是数据库2、数据库的种类3、常见的数据库4、关系型数据库4.1、关系型数据库介绍4.2、关系型数据库的优缺点4.3、关系型数据库小结 5、非关系型数据库5.1、非关系数据库诞生的背景5.2、非关系型数据库的介绍5.3、非关系型数据库的优缺点5.4、非关…

js中的类型转换

原文地址 JavaScript 中有两种类型转换&#xff1a;隐式类型转换&#xff08;强制类型转换&#xff09;和显式类型转换。类型转换是将一个数据类型的值转换为另一个数据类型的值的过程。 隐式类型转换&#xff08;强制类型转换&#xff09;&#xff1a; 隐式类型转换是 Java…

NSSCTF

[SWPUCTF 2021 新生赛]gift_F12 在源代码界面找到了flag [SWPUCTF 2021 新生赛]jicao 源码 <?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"…

【Linux】Linux环境配置安装

目录 一、双系统&#xff08;特别不推荐&#xff09; 安装双系统的缺点&#xff1a; 安装双系统优点&#xff08;仅限老手&#xff09;&#xff1a; 二、虚拟机centos7镜像&#xff08;较为推荐推荐&#xff09; 虚拟机的优点&#xff1a; 虚拟机的缺点&#xff1a; ​ …

Molecular Cancer|CDK9抑制诱导表观遗传重编程,揭示了规避淋巴瘤耐药性的策略

细胞周期蛋白依赖性激酶&#xff08;CDK&#xff09;蛋白家族在细胞周期进程&#xff08;如CDK1/2/4/6&#xff09;和RNA转录&#xff08;如CDK7/8/9/11&#xff09;的调控中起着不可或缺的作用。由于染色体区域易位或基因扩增导致的CDKs表达失调与肿瘤发生有关。在淋巴瘤细胞中…