面经学习(厦门安全狗实习)

个人评价

安全狗主要还是做安全的,所以java开发约等于小厂。后端开发主要使用的技术栈技术ssh+jsp。

技术可谓是先当的古老,本次面试内容主要以项目为主。也是首次收到面试官的夸奖,面试下来也是非常开心的。

介绍一下实习项目吧? (合并写请求)

我的实习项目主要就是做C端的在线教育项目,并且呢,它采用的基于alibaba那套落地的微服务方案。可能也是因为我是实现生的源固,我没有负责黄金链路,从用户登录到用户下单再到用户观看视频的整个流程,我主要负责的就是负责辅助模块的开发。评论区,点赞,排行榜模块的开发。

那我给您介绍一下我记得比较清楚的难点吧。

当时要做一个续播功能,也就是用户切换其他设备的时候也能从对应的位置上继续观看,本质上就是去修改数据库中观看记录表的数据,在公刚开始的想法就是直接去操作数据库,对了,每个用户前端每隔15秒会提交一次观看位置的请求,并且上级这边说qps会达到3000左右,也就是同时观看人数最多会有3000人左右,因此我们要进行优化,我们会发现这些请求中只有最后一次的观看位置是有用的,所以设计的解决方案就是使用redis的hash结构+延迟消息来实现的。Hash结构中,使用大key存储课表Id,课表用来关联userId和课程的Id,使用小key存储节Id,value存储观看位置的数据,在每次请求进来后直接修改Hash中的数据,并且每次发送一个延迟消息,使用Redis的死信发送一个延迟15秒消息,并且也是当前的节点去监听该消息,监听到消息后,使用监听到的观看位置和当前在Hash结构中的观看位置进行比较,如果发现二者的相同,说明在这15秒内没有再次进行观看了,这个时候就去修改数据库。反之,如果不相同的话,说明此时用户还在进行观看,我们就直接丢掉消息。最终减少99%的DB操作。

那我在做完这个业务之后,也在思考,因为我们使用的是RabbitMq来存储观看位置的消息,此时可能就会出现问题,消费者的消费速度小于生成者生成速度。我目前主要了解到的解决方案就是增加消费者的个数,因为采用的是微服务的落地方案,所以我们可以增加消费者的个数。提升消费者的消费能力,我会创建线程池,使用多线程来消费消息,对消息队列进行扩容,我们可以使用惰性队列来存储消息,因为惰性队列使用磁盘进行存储,就导致它的容量非常大,但是呢,涉及到大量的文件IO操作,所以在速度上效率是比较低的。

还有没有其他的难点?

我记得比较深刻的就是这个评论模块,那评论模块有点类似B站,我觉得比较难得就是点赞模块,再设计上,我们并没有直接操作数据库中点赞记录表,主要还是怕恶意的请求,大量的点赞和取消赞请求,我们主要的解决方案就是redis的set结构 + zset结构+定时任务来解决的,set结构用来存储userId和业务的点赞关系,zset结构用来统计每一个业务对应的点赞数量(key存储业务类型,member存储业务id,scope存储点赞数)。在发送点赞请求后,我们会修改set中的数据,使用scard方法统计点赞数(因为set结构中存在一个位置存储count,所以调用scard方法的效率为O(N),效率十分的高),修改zset中的总点赞数。并且使用xxl-job做定时任务,调用popmin方法,每隔15秒就从zset中去30条数据做批量修改的操作,最终完成点赞模块。

在该业务完成后,我也在思考,点赞业务本来就是一个低频的业务,所以我自己认为其实没有必要做这个优化的,直接打db比较合适一点,这样也不需要RabbitMq。

HashMap是线程安全的吗?那要怎么保证线程安全?

HashMap不是线程安全的,解决线程安全的方法,我目前知道的就是SynchronziedMap和ConcurrentHashMap。ConcurrentHashMap的底层我也是有了解过的,在JDK1.8之前底层使用的Segement数组+数组来实现的。Segement数组中的每一个节点又是一定范围的数组数据,在进行上锁的时候锁住的是Segement节点,锁的粒度是比较大的,而在JDK1.8之后底层使使用Hash数组+链表+红黑树来实现的,在每次进行上锁的时候锁住的是数组节点或链表头或红黑树根。

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

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

相关文章

通过libx246 libfaac转换推送RTMP音视频直播流

一、RTMP简介及rtmplib库: RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing…

【体外诊断】ARM/X86+FPGA嵌入式计算机在免疫分析设备中的应用

体外诊断 信迈提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板,以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显,提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口,扩展性强&#xf…

Swagger生成Api文档的增强解决方案--knife4j

springboot版本号&#xff1a;2.7.3 knife4j:3.0.2 使用步骤 导入 knife4j 的maven坐标 在pom.xml中添加依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2…

CH03_布局

第3章&#xff1a;布局 本章目标 理解布局的原则理解布局的过程理解布局的容器掌握各类布局容器的运用 理解 WPF 中的布局 WPF 布局原则 ​ WPF 窗口只能包含单个元素。为在WPF 窗口中放置多个元素并创建更贴近实用的用户男面&#xff0c;需要在窗口上放置一个容器&#x…

【性能优化】在大批量数据下使用 HTML+CSS实现走马灯,防止页面卡顿

切换效果 页面结构变化 1.需求背景 项目首页存有一个小的轮播模块,保密原因大概只能这么展示,左侧图片右侧文字,后端一次性返回几百条数据(开发环境下,生产环境只会更多).无法使用分页解决,前端需要懒加载防止页面卡顿 写个小demo演示,如下 2.解决思路 获取到数据后,取第一…

开源模型应用落地-FastAPI-助力模型交互-进阶篇(四)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

科技赋能,智慧粮仓视频综合管理方案助力粮食安全

一、背景需求 随着科技的快速发展&#xff0c;智慧化、智能化管理已成为各行各业的重要发展方向。粮食仓储作为国家粮食安全战略的重要组成部分&#xff0c;其管理的科学性和智能化水平直接关系到粮食的存储安全、品质保障和运营效率。 因此&#xff0c;TSINGSEE青犀提出一套…

Linux文件和目录常用命令

1.操作命令 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 > 和 >> 管道 | 1.1 终端实用技巧 1>自动补全 在敲出 文件/目录/命令 的前几个字母之后&#xff0c;按下…

pdf怎么压缩的小一点?PDF压缩变小的6种方法(2024全新)

pdf怎么压缩的小一点&#xff1f;首先&#xff0c;PDF文件可以进行压缩。职场文档传阅还是比较建议PDF压缩&#xff0c;PDF文件可以无障碍访问&#xff0c;保持原始文本、图像和表格&#xff0c;无需担心展示效果差异等等优势&#xff0c;成为我们日常工作中不可或缺的一部分。…

一种优雅的用于Node.js的MySQL包的异步事务函数封装方式

引言 众所周知&#xff0c;Node.js中的 mysql 包提供的接口均为异步接口&#xff0c;这样虽然有效提升了性能&#xff0c;但在大多数业务场景中&#xff0c;我们需要将其转为同步方式使用。 对于常规的单次查询&#xff0c;可以使用一个简单的Promise完成如下封装&#xff1a;…

阿里云盾占用资源的问题AliYunDun,AliYunDunUpdate

目录 1.关闭AliYunDunUpdate&#xff0c;AliYunDun&#xff0c;AliYunDunMonitor。 2.发现报错如下 3.打开阿里云安全中心控制台 4.成功解决 2.开启云盾命令 “如果您在解决类似问题时也遇到了困难&#xff0c;希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您…

哪种SSL证书可以快速签发保护http安全访问?

用户访问网站&#xff0c;经常会遇到访问http网页时&#xff0c;提示网站不安全或者不是私密连接的提示&#xff0c;因为http是使用明文传输&#xff0c;数据传输中可能被篡改&#xff0c;数据不被保护&#xff0c;通常需要SSL证书来给数据加密。 SSL证书的签发速度&#xff0…

使用JWT双令牌机制进行接口请求鉴权

在前后端分离的开发过程中&#xff0c;前端发起请求&#xff0c;调用后端接口&#xff0c;后端在接收请求时&#xff0c;首先需要对收到的请求鉴权&#xff0c;在这种情况先我们可以采用JWT机制来鉴权。 JWT有两种机制&#xff0c;单令牌机制和双令牌机制。 单令牌机制服务端…

工作记录7.19

xss应当用filter进行过滤&#xff0c; null值校验 版本升级的时候&#xff0c;往往会发生代码冲突&#xff0c;这时候找到错误点&#xff0c;注释掉再看。 springboot2.7.15与springfox的Swagger3.0产生路径冲突 Swagger3.0 与spring boot2.7x 整合避免swagger2.0与boot2.7冲突…

环信IM x 亚马逊云科技,助力出海企业实现可靠通讯服务

随着全球化进程的加速&#xff0c;越来越多的企业选择出海&#xff0c;拓展国际市场。然而&#xff0c;面对不同国家和地区的用户&#xff0c;企业在即时通讯方面遇到了诸多挑战。为了帮助企业克服这些困难&#xff0c;环信IM与亚马逊云科技强强联手&#xff0c;共同推出了一套…

LDR6020:重塑iPad一体式有线键盘体验的创新力量

在移动办公与娱乐日益融合的时代&#xff0c;iPad凭借其强大的性能和便携性&#xff0c;成为了众多用户不可或缺的生产力工具。然而&#xff0c;为了进一步提升iPad的使用体验&#xff0c;一款高效、便捷的键盘成为了不可或缺的配件。今天&#xff0c;我们要介绍的&#xff0c;…

关于黑马商城微服务拆分

1.拆分流程 大差不差分为 创建module-依赖-启动类-配置yml文件-抽取代码-数据库-配置启动项-测试 2.微服务的好处 在测试的时候明显感觉到微服务的好处 不用启动所有的项目 只是单纯一个模块比如支付就可以自己调试 非常便捷而且易开发 抽取的公共模块api也不用启动就能测试 …

机器学习-20-基于交互式web应用框架streamlit的基础使用教程

参考简洁而优雅地展示你的算法和数据——streamlit教程(一) 原理介绍与布局控制 参考Streamlit 讲解专栏(二):搭建第一个应用 Streamlit 讲解专栏(三):两种方案构建多页面 Streamlit 讲解专栏(五):探索强大而灵活的 st.write() 函数 1 streamlit 1.1 运行原理 im…

免费缺陷管理工具深度评测与使用心得

国内外主流的10款缺陷跟踪工具对比&#xff1a;PingCode、Worktile、滴答清单、CalendarTask、专注清单、Todo清单、Jira、Bugzilla、MantisBT、Redmine。 在寻找合适的缺陷管理工具时&#xff0c;很多团队面临一个共同的挑战&#xff1a;如何在有限的预算内找到既高效又易于使…

探索光影魔法:WebKit中的CSS文本阴影效果

探索光影魔法&#xff1a;WebKit中的CSS文本阴影效果 CSS文本阴影&#xff08;Text Shadow&#xff09;是Web设计中一种创造视觉深度和强调文本的流行技术。它通过在文本下方添加模糊的阴影&#xff0c;为网页元素增添立体感。WebKit作为许多现代浏览器的渲染引擎&#xff0c;…