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

简历原文

抽查部分

项目描述

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

责任描述

  • 登录系统优化,双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.mzph.cn/news/89252.shtml

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

相关文章

skywalking源码本地编译运行经验总结

前言 最近工作原因在弄skywalking,为了进一步熟悉拉了代码下来准备debug,但是编译启动项目我就费了老大劲了,所以准备写这篇,帮兄弟们少踩点坑。 正确步骤 既然是用开源的东西,那么最好就是按照人家的方式使用&…

【C++杂货店】类和对象(上)

【C杂货店】类和对象(上) 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储规则7.2 例题7.3结构体内存对齐规则 八、this指针8.2 t…

知识分享 钡铼网关功能介绍:使用SSLTLS 加密,保证MQTT通信安全

背景 为了使不同的设备或系统能够相互通信,让旧有系统和新的系统可以集成,通信更加灵活和可靠。以及将数据从不同的来源收集并传输到不同的目的地,实现数据的集中管理和分发。 通信网关完美克服了这一难题,485或者网口的设备能通过…

【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-…

pycharm中恢复原始界面布局_常用快捷键_常用设置

文章目录 1 恢复默认布局1 .1直接点击file→Manage IDE Settings→Restore Default Settings(如下图所示):1.2 直接点击Restore and Restart, 然后Pycharm就会自动重启,重启之后的界面就是最原始的界面了 2 改变主题2.…

AMQP[RabbitMQ]小结

消息队列: 组成: 交换器,队列,绑定 作用:异步处理,削峰,服务解耦 交换器 RabbitMQ常见的exchange(交换器)类型: direct–路由键完全匹配才可以 fanout–广播 topic --主题,模糊匹配路由键 队列 messagequeue: 组成: 路由键 routine-key—决定消息发给谁 优先级prio…

作为产品经理,你是如何分析和管理你的产品需求的?

作为一名产品经理,分析和管理产品需求是非常重要的工作。在产品开发周期中,需求调研、需求分析、需求管理等环节都是非常关键的,因为好的需求管理能够直接影响产品的质量和用户体验。 需求调研 在进行需求调研的过程中,我们首先…

windows RocketMQ与可视化监控平台安装

windows RocketMQ与可视化监控平台安装 安装日期2023.09.21 最新版 RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,搭建RocketMQ需要先配置JAVA环境变量,需要有JAVA_HOME。 下载安装包 进入官网选择需要的版本下载安装包(以下以5.1.3为例…

Swift data范围截取问题

文章目录 一、截取字符串的几种方法1. 截取前几位2. 截取后几位3. subData4. 下标截取 二、subData(in:) 报错 EXC_BREAKPOINT 一、截取字符串的几种方法 1. 截取前几位 mobileID.prefix(32)2. 截取后几位 mobileID.suffix(3)3. subData data.subdata(in: 0..<4)4. 下标…

全渠道客服体验:Rocket.Chat 的无缝互动 | 开源日报 No.41

RocketChat/Rocket.Chat Stars: 36.9k License: NOASSERTION Rocket.Chat 是一个完全可定制的开源通信平台&#xff0c;适用于具有高标准数据保护要求的组织。我们是团队沟通场景下的最终免费开源解决方案&#xff0c;可以实现同事之间、公司之间或客户之间的实时对话。提高生…

Visual Studio 如何删除多余的空行,仅保留一行空行

1.CtrlH 打开替换窗口&#xff08;注意选择合适的查找范围&#xff09; VS2010: VS2017、VS2022: 2.复制下面正则表达式到上面的选择窗口&#xff1a; VS2010: ^(\s*)$\n\n VS2017: ^(\s*)$\n\n VS2022:^(\s*)$\n 3.下面的替换窗口皆写入 \n VS2010: \n VS2017: \n VS2022: \n …

Lnmp架构之mysql数据库实战2

4、mysql组复制集群 一主多从的请求通常是读的请求高于写 &#xff0c;但是如果写的请求很高&#xff0c;要求每个节点都可以进行读写&#xff0c;这时分布式必须通过&#xff08;多组模式&#xff09;集群的方式进行横向扩容。 组复制对节点的数据一致性要求非常高&#xff…

【Python基础】if __name__ == ‘__main__‘:和assert函数

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

经典垃圾回收器

Serial收集器 Serial 是一种新生代的收集器。顾名思义“serial 串行”&#xff0c;它是一种单线程工作的收集器&#xff0c;它的“单线程”并不仅仅指的只有一个处理器或一个线程来实现垃圾的收集工作&#xff0c;更重要的是他在垃圾收集的过程中会暂停所有的用户线程&#xf…

数字音频工作站FL Studio 21中文版下载及电音编曲要用乐理吗 电音编曲步骤

FL Studio 21是一款强大的数字音频工作站&#xff08;DAW&#xff09;软件&#xff0c;为您提供一个完整的软件音乐制作环境。它是制作高质量的音乐、乐器、录音等的完整解决方案。该程序配备了各种工具和插件&#xff0c;帮助你创建专业的虚拟乐器&#xff0c;如贝斯、吉他、钢…

SpringMVC 学习(四)RestFul 风格

5. RestFul 风格 5.1 简介 概念 Restful就是一个资源定位及资源操作的风格。不是标准也不是协议&#xff0c;只是一种风格。基于这个风格设计的软件可以更简洁&#xff0c;更有层次&#xff0c;更易于实现缓存等机制。 功能 资源&#xff1a;互联网所有的事物都可以被抽象为…

【Phoenix】phoenix实现每个Primarykey主键保留N版本数据,CDC数据记录为Changelog格式

一、背景&#xff1a; CDC数据中包含了&#xff0c;数据的变更过程。当CDC写入传统数据库最终每一个primary key下会保存一条数据。当然可以使用特殊手段保存多分记录但是显然造成了数据膨胀。 另外数据湖Hudi(0.13.1)是不支持保存所有Changelog其Compaction机制会清除所有旧版…

安卓recovery流程分析(编译、界面、图片)

目录 recovery 界面菜单 recovery 界面操作 recovery 启动流程 recovery 编译makefile recovery 图片大小 ramdisk、boot.img、recovery.img之间的关系 authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 recovery 界面菜单 recovery 界面显示 android recoveryuse …

TCP协议和UDP协议

TCP通信原理 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种传输层协议&#xff0c;它主要负责点对点的数据传输TCP 主要特点是面向连接的&#xff0c;也就是说&#xff0c;在数据传输之前&#xff0c;它需要先建立一个连接。连接建…

uniapp实现表格冻结

效果图如下&#xff1a; 思路&#xff1a; 1.由于APP项目需要&#xff0c;起初想去插件市场直接找现成的&#xff0c;结果找了很久没找到合适的&#xff08;有的不支持vue2有的不能都支持APP和小程序&#xff09; 2.后来&#xff0c;就只能去改uni-table源码了&#xff0c;因…