面试高频问题----3

一、非对称加密和对称加密具体算法和使用场景

对称加密算法:发端和收端共享同一个密钥,使用该密钥进行加密和解密。适用于数据量大的数据传输中;
非对称加密算法:有一个公钥,一个私钥;发端和收端不需要共享密钥,只需要使用对方的公钥进行加密;适用于身份验证、数字签名等场景。

二、基本数据结构

****数组
优点:索引访问速度快,通过索引可以快速地访问数组中的任何元素;空间效率高,数组在内存中是连续存储的,空间利用率高。
缺点:插入和删除效率低,在数组中插入或删除元素可能需要移动大量的元素以保持数组的连续性;大小固定:数组在创建时大小是固定的,如果需要存储更多的数据,可能需要重新分配内存并复制数据。
****链表
优点:动态大小,链表的大小可以根据需要动态的增加或减少;插入和删除效率高,在链表中插入或删除元素只需要修改相应的指针即可,不需要移动其他元素。
缺点:索引访问速度慢,需要从头节点开始遍历链表以访问特定位置的元素;额外空间开销,链表中的每个元素都需要额外的空间来存储指向下一个元素的指针。
****栈
优点:先进后出,非常适合处理需要逆序执行的操作,如函数调用和撤销;实现简单。
缺点:功能有限,只能访问栈顶的元素,对栈中间的元素操作较为困难。
****队列
优点:先进先出,适合处理需要顺序执行的任务,如打印任务,消息队列等。并发处理,在多线程或分布式系统中,队列是实现任务分发和同步的有效工具;
缺点:对非队头元素操作效率较低,通常需要遍历整个队列来访问或修改非队头。
****树
优点:层次化存储,树形结构可以清晰地表示数据之间地层次关系;高效搜索,树形结构中,通过特定的搜索算法可以实现高效的查找操作。
缺点:实现复杂,树形结构的实现通常比数组和链表更加复杂;平衡问题,对于某些树形结构,如果数据插入的顺序不当,可能导致树的高度过高,从而影响查找效率。
****图
优点:表示复杂关系,图可以表示数据之间的复杂关系,如社交网络、地图路线等;算法丰富,在图上有许多成熟的算法来解决实际问题。
缺点:实现复杂,图的实现通常比其他数据结构更加复杂,因为它需要存储节点之间的关系;存储空间开销大,对于包含大量节点和边的图,可能需要大量的存储空间来存储这些信息。

三、缓存穿透、缓存击穿、缓存雪崩及它们的解决方案?

缓存穿透:查询一个一定不存在的数据,这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力;
解决方案:1.布隆过滤器:查询数据时,先判断该数据是否存在于布隆过滤器中,如果存在则直接返回结果,否则再从数据库查询数据;
2.缓存空对象:在缓存中存储空对象,当查询一个不存在的数据时,直接返回空对象,而不是默认值或者错误信息;
3.设置热点数据永不过期
缓存击穿:热点key在某个时间点过期的时候,而恰好这个时间点对key有大量的并发请求过来,从而大量的请求打到数据库。
解决方案:1.主动设置空缓存:当接收对于数据库中没有的请求查询时,主动在缓存中写入空数据,设置过期时间;
2.互斥锁:使用分布式锁进行加锁,保证只有一个线程能访问数据库,其他线程需要等待锁释放之后才能进行查询;
3.设置逻辑过期时间
缓存雪崩:大量缓存同时失效或过期后引起的系统性能急剧下降。
解决方案:1.保持缓存层的高可用:使用Redis哨兵模式或者Redis集群部署方式,保证缓存层高可用性;
2.限流降级组件:使用限流降级组件如:Sentinel等,避免缓存层或存储层异常导致整个系统不可用;
3.缓存不过期:设置Redis的key永不失效,避免大量缓存同时失效;
4.优化缓存过期时间:为每一个Key选择合适的过期时间,避免大量key同一时刻同时失效;
5.使用互斥锁重建缓存
6.异步重建缓存
相关推荐
艾伦~耶格尔20 分钟前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
man201725 分钟前
基于spring boot的篮球论坛系统
java·spring boot·后端
阿史大杯茶35 分钟前
Codeforces Round 976 (Div. 2 ABCDE题)视频讲解
数据结构·c++·算法
2401_8581205342 分钟前
Spring Boot框架下的大学生就业招聘平台
java·开发语言
S hh42 分钟前
【Linux】进程地址空间
java·linux·运维·服务器·学习
Java探秘者1 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
攸攸太上1 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
2301_786964361 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
2303_812044461 小时前
Bean,看到P188没看了与maven
java·开发语言
苹果醋31 小时前
大模型实战--FastChat一行代码实现部署和各个组件详解
java·运维·spring boot·mysql·nginx