嗨~我是可拟雀,一个全栈开发工程师,2024年本科毕业于某985大学,目前供职于tx 理财通后端。每天免费分享最新面经答案,希望能帮到你,需要面经合集的请私信我~
算法给定非递减数组 先求每个数平方 返回平方后的数组,这个数组也要非递减。
1. session里存啥 session和cookie区别。
答:存储位置:session是存放在服务器内存中的一个对象;而cookie是存放在客户端电脑中的一个磁盘文件。
存储容量:单个cookie保存的数据一般不超过4KB,一个站点最多保存20个cookie;对于session来说并没有上限,但出于对服务器性能考虑,session内不应存放过多内容。
存储方式:cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据;而session中能够存储任何类型的数据,包括且不限于string、integer、list、map等。
2. redis和mysql双写一致性为什么删缓存而不是更新缓存
答:
考虑数据一致性问题:当发生数据更新时,如果先更新缓存而不更新数据库,那么缓存中的数据可能是最新的,但数据库中的数据仍然是旧的。这样,当其他请求从数据库读取数据并更新到缓存时,缓存中的数据又会被覆盖为旧数据,导致数据不一致。而如果先删除缓存,那么后续的请求会从数据库中读取最新数据并更新到缓存,从而保证了数据的一致性。
避免并发:在高并发场景下,如果多个请求同时更新同一份数据,先更新缓存可能会导致数据竞争和并发问题。而删除缓存则可以让每个请求都从数据库中读取最新数据并更新到缓存,避免了并发问题。
避免雪崩:如果缓存中的数据被频繁更新,那么每次更新都需要更新缓存,这可能导致缓存中的数据频繁失效,从而引发缓存雪崩。而删除缓存则可以让缓存中的数据自然过期,避免了缓存雪崩的问题。
简化:删除缓存相对于更新缓存来说,逻辑更加简单和清晰。不需要考虑如何生成缓存中的新数据,只需要保证从数据库中读取的数据是最新的即可。
3. 布隆过滤器会不会比较耗内存,添加数据怎么办,删除数据怎么办
答:不会,布隆按bit存储。参考布谷鸟过滤器可以删除。
4. 解决缓存穿透其他方法。
答:
空对象缓存:缓存空对象、空集合、短过期时间。
布隆过滤器:布隆过滤器、概率型数据结构、误判率、提前判断。
热点数据缓存:热点数据、缓存、短过期时间、快速返回。
限流与降级:限流、令牌桶、漏桶、恶意攻击、异常流量、只读模式。
查询缓存预热:预热、热点数据、常见查询结果。
数据库层面优化:索引、缓存数据库查询结果、查询性能。
分布式锁:分布式锁、多实例环境、查询数据库、更新缓存、避免并发查询。
5. 缓存击穿解决方案,抛开分布式的话如何解决?
答:热点数据永不过期:热点数据、永不过期、避免击穿。
缓存空值:缓存、空值、短过期时间、避免击穿。
使用互斥锁:互斥锁、同步机制、单线程查询、避免并发击穿。
预加载缓存:预加载、热点数据、常见查询结果、避免启动时的击穿。
6. 为什么要分布式事务?
答:数据库分库分表:这是分布式事务产生的一个主要背景,随着业务量的增长,单个数据库可能无法满足性能需求,需要将数据分散到多个数据库或数据表中。
应用服务化(SOA化):业务被拆分成多个独立的服务,每个服务都有自己的数据库。在这种情况下,跨多个服务的事务处理需要分布式事务的支持。
数据一致性:分布式事务的核心目标是确保多个参与者之间的数据保持一致。这要求所有参与者都遵循相同的操作逻辑,确保数据变更的原子性、一致性、隔离性和持久性(ACID属性)。
两阶段提交(2PC):一种经典的分布式事务协调协议,分为准备阶段和提交阶段。在准备阶段,协调者询问所有参与者是否可以提交事务;在提交阶段,协调者根据参与者的响应来决定是否提交事务。
三阶段提交(3PC):两阶段提交的改进版,增加了一个准备阶段,用于解决协调者在准备阶段发生故障导致的问题。
故障恢复:当分布式系统中的某个节点发生故障时,分布式事务机制能够恢复事务的状态,确保数据的正确性和一致性。
扩展性和性能:分布式事务通过将事务操作分散到多个节点上,提高了系统的扩展性和性能,能够处理更多的并发请求。
7. 给消息队列发消息失败了怎么办?
答:错误日志:首先,检查应用或系统的错误日志,以获取关于失败原因的详细信息。错误日志通常会提供关于失败原因的线索,例如网络问题、权限问题、队列不存在等。
重试机制:为消息发送实现一个重试机制。在发送消息失败时,你可以尝试重新发送消息。但要注意,重试应该有一定的限制,例如重试次数和重试间隔,以避免无限循环或过多的资源消耗。
死信队列:使用消息队列的死信队列(Dead-Letter-Exchange, DLX)功能。当消息无法被正常处理时,可以将其发送到死信队列。然后,你可以从死信队列中分析这些失败的消息,并采取适当的措施。
消息持久化:确保消息队列配置了消息持久化。这样,即使消息队列服务重启,消息也不会丢失。
监控和告警:为消息队列设置监控和告警,以便在消息发送失败时及时获得通知。这有助于你更快地发现问题并采取相应的措施。
网络检查:检查消息队列服务的网络连接是否正常。有时,网络问题可能导致消息发送失败。
资源检查:检查消息队列服务的资源使用情况,如 CPU、内存和磁盘空间。如果资源不足,可能导致消息发送失败。
队列和交换机检查:确保你正在发送消息的队列和交换机存在且配置正确。如果队列或交换机不存在,消息发送会失败。
8. 自研网关需要考虑哪些因素(高可用、轻量级、性能)
9. 限流是针对什么进行限流?
答:限流(Rate Limiting)是针对系统或网络中的流量进行控制和限制的一种技术手段。它通过对流量进行限制,可以控制数据的传输速率,避免网络拥堵和资源浪费。限流可以应用于各种网络环境,包括互联网、局域网以及数据中心等,并可以对不同类型的流量进行限制,如HTTP请求、API调用、数据库访问等。
限流的主要目的是保护系统稳定性、提高服务质量并节约资源成本。通过限制流量,可以防止恶意攻击或过多请求导致服务器负载过高,避免过多的数据库查询导致性能下降,以及防止爬虫或恶意请求对网站造成影响。
后续都是常规八股,不做赘述。
10. 限流如何配置然后突然开始问八股了(很多没答上来,问了一堆云原生、go相关的东西)
1. docker实现原理
2. docker的虚拟网络如何实现
3. xss攻击
4. sql注入
5. 如何防止sql注入
6. mysql的prepare 其实就是jdbc里那个prepare statement 一下子没反应过来
7. mysql唯一索引和主键索引区别 唯一索引可以空吗 主键索引可以空吗
8. redis的pipeline
9. 读接口并发量高怎么优化(限流,缓存,数据库查询优化)
10. 写接口并发量高怎么优化(异步+批量)
总结:腾讯的面试比较喜欢一上来就做一道算法题,所以题感和心态要好,如果题做不出来基本上就凉了。
对于项目的考察比较充分,需要充分准备各种问题的答案。
八股文比较常规。
#腾讯工作体验##一人推荐一个机械人值得去的公司##如果校招重来我最想改变的是#