当前位置: 首页 > 科技观察

一个火爆的腾讯后端面试题

时间:2023-03-14 01:12:11 科技观察

前言一个好朋友最近换工作了。面试了腾讯后台,问了他一道真题。一起来讨论吧,哈哈~腾讯后台1.JVM内存模型,大家可以复习《深入理解Java虚拟机》的第12章(Java内存模型与线程),我放错图了~,也可以看看我之前的文章~JVM面试常见问题解析2.cms和g1有没有学过。它们之间有什么区别?CMS收集器是老年代收集器,可以和新一代Serial、ParNew收集器一起使用;G1收集器的收集范围是老年代和新生代,不需要和其他收集器联合使用;CMS收集器以最小停顿时间为目标;G1收集器可以预测垃圾收集的暂停时间。CMS收集器使用“mark-clear”算法进行垃圾收集,容易产生内存碎片。G1收集器使用的是一种“标记-排序”算法,进行空间整合,减少内存空间碎片。这一点可以在《深入理解Java虚拟机》章节垃圾收集器和内存分配策略中看到。3.谈谈你对垃圾收集的理解,什么时候发生垃圾收集,以及回收过程。可以把JVM中一个完整的GC流程讲清楚,对象是如何提升到老年代的,比如MinorGC、MajorGC、fullGC,都解释的很清楚了。还有判断对象存活的方法,还有垃圾回收算法,复制算法等等,这点也可以看《深入理解Java虚拟机》第三章,垃圾收集器和内存分配策略4.如何保证数据的一致性?如果这是我的想法,我会讲缓存和数据库的一致性。可以看我之前的文章:并发环境接下来是先操作数据库还是先操作缓存?也可以聊聊分布式事务下的数据一致性,也可以看我之前的文章:后端程序员必备:分布式事务基础5、你了解过Redis集群吗?master-slave和electionare这个怎么可以回答这些关键词,master-slavereplication,sentinelmechanism等等~这篇文章可以上网看看,或者亲爱的读者,自己去网上看看资料吧~Redismaster-slave复制架构和Sentinel哨兵机制(https://aiylqy.com/archives/213.html)6.看到你们公司用的是MySQL,你们用的是哪个存储引擎,为什么?MyISAM和InnoDB的区别MyISAM:如果你执行大量的SELECT,MyISAM是更好的选择InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能考虑,你应该使用InnoDB表。Mysiam表不支持外键。InnoDB虽然支持MyISAM,但适用于:做大量的计数计算;插入不频繁,查询非常频繁;没有交易。InnoDB适用于:列表内容对可靠性要求比较高,或者需要事务;表的更新和查询比较频繁,行锁的几率比较高。7、索引的底层数据结构是什么,为什么选择这种数据结构?您可以在Internet上阅读这篇文章。写的很好~为什么MySQL的索引是用B+树实现的?8、SQL优化,如何判断需要优化,从哪些方面入手优化从索引的角度来说,要讲的点很多。可以看看我的这两篇文章~后端程序员必备:写出高质量的SQL给后端程序员的30条建议:索引失效的十大杂病九、手写代码:设计分布式自增id代服务。你可以去网上找答案。我对此没有任何想法。表一些想法?nginx负载均衡的一些想法?哈哈,亲爱的读者,如果你知道怎么做,能告诉我吗?腾讯后台二面1、你了解过网络安全问题吗,常见的网络攻击有哪些,原理是什么,如何解决XSS和跨站脚本?攻击?CSRF,跨站请求伪造?DDOS、分布式拒绝服务攻击?SQL注入?对于SQL注入,可以进行后台处理,比如使用预编译语句PreparedStatement进行预处理,比如在Mybatis映射语句中使用#{xxx}代替${}。2、开发接口或设计项目时如何保证?安全签名加密ip检测限流?接口幂等,过滤特殊字符,防止xss和sql注入攻击?3、使用Redis集群可能存在哪些问题?数据一致性问题4.你了解过capandbase的原则吗?CAP理论CAP理论作为分布式系统的基础理论,指的是ConsistencySex)、Availability(可用性)、Partitiontolerance(分区容错),这三个要素只能同时实现两点。一致性(C:Consistency):一致性是指数据在多个副本之间能否保持一致。例如,某个分区节点上更新了一条数据后,从其他分区节点读取的数据也是更新后的数据。可用性(A:Availability):可用性是指系统提供的服务必须始终可用,用户的每次操作请求总能在限定的时间内返回结果。这里的重点是“限时”和“返回结果”。分区容忍度(P:Partitiontolerance):当分布式系统遇到任何网络分区故障时,仍然需要能够对外提供满足一致性和可用性的服务。选择表明CA放弃了分区容错,加强了一致性和可用性。其实就是传统单机数据库的选择。AP放弃了一致性、分区容错和可用性。这是很多分布式系统设计的选择。CP放弃可用性,追求一致性。而分区容错,网络问题会直接导致整个系统不可用。BASE理论BASE理论是AP在CAP中的延伸。对于我们的业务系统,我们考虑牺牲一致性来换取系统可用性和分区容错性。BASE是BasicallyAvailable(基本可用)、Softstate(软状态)和Eventuallyconsistent(最终一致性)这三个短语的首字母缩写。基本可用:它是通过支持本地故障而不是系统范围的故障来实现的。例如,如果用户被分区在5个数据库服务器上,一个用户数据库的故障只会影响这台特定主机上20%的用户,而其他用户不会受到影响。SoftState软状态,状态可以在一段时间内不同步EventuallyConsistent,最终数据是一致的,而不是一直保持强一致性。5.zk如何保证一致性可以看这本书~《从paxos到Zookeeper分布式一致性原理与实践》,也可以看这篇文章:Zookeeper的一致性原理解析(https://zhuanlan.zhihu.com/p/25594630)6.你是如何设计的一个可以承受大流量的系统?下面说一下nginx负载均衡、流量守护哨兵、服务拆分、缓存、消息队列、集群、限流、降级的设计方案。这些都可以搬出去~7.您是否了解过缓存策略,Cache-AsideRead-ThroughWrite-ThroughWrite-Behind?有兴趣可以看我的文章:并发环境下,应该先操作数据库还是先操作缓存?