【面经】4月9日 腾讯/csig/腾讯云/一面/1h30m

自我介绍

项目:

介绍项目

你这个项目和别人已有系统的项目相比,优势在哪里?如果别人系统的数据要迁到你这个系统里来,应该怎么做?

服务部署有了解吗?一个节点如果只能部署一个服务不是很浪费吗?那如果我要一个服务部署两次,就需要两台服务器?(我反问了为什么会一个服务部署两次呢?他说如果用户量上来了,那一个系统只对应一个服务肯定是不够的,肯定是要分布式部署的,部署多个,然后把流量打到多个服务上)

如果你这个用户量上来了,服务要怎么升级才能抵住高并发的情况?比如你这个子服务要频繁的触发,那如果高并发的情况下,这个服务只部署了一个节点,没有分布式部署的话,效率是不是很低?

如果分布式部署了,数据库和缓存这些怎么同步到每个节点上呢?

如果新的功能要上线,目前是怎么做的?是直接把旧的服务停掉,然后部署新的吗?还是怎么做?(滚动更新)

容器了解过吗?(我这里说用到了K8S,所以问了这个。但确实Docker用的不多,就说的没怎么了解)

简历上写了Ingress-Nginx,有了解过Nginx吗?Nginx主要的功能有哪些?(负载均衡,反向代理)

Nginx负载均衡具体是怎么做的?(就说了个轮询,均匀的将请求打到每个服务上,也不知道对不对)

Java(部门是写C++、Python的,所以问的不多):

集合最常见的有List、Set、Map,区别在哪里(说了一下底层实现)

你说List是动态数组,扩容过程是什么?(创建新数组,容量1.5倍)

Set是怎么去重的?(哈希表)

哈希冲突了怎么解决的?(拉链表)

Map也是哈希表,那和Set有什么区别?(这里我还真不知道,我一直看的Map的结构,没看Set。我就说Map不只有链表,还有红黑树,主要是为了优化链表过长时的查询速度)

MySQL:

你们这个项目数据中,文字和图片分别是怎么存的?(文字存字符串,图片用OSS、存链接)

慢sql可能有哪些情况?如何解决?(我说了三个,没用索引;是网络情况;范围查询查询的范围过大,导致遍历的树节点较多,每个节点都是一次IO操作)

如何排查慢sql?(没用索引用explain select;网络情况瞎扯的,就看一下接口请求时间是不是并平常长)

explain select的执行结果只能看索引是否命中吗?有没有其他的作用?(不知道)

索引建立一般有什么原则?(最常用的建立吧)

索引建的越多越好吗?(不是,因为索引一旦建立了,会有两方面的消耗,一个是磁盘占用,一个是数据在更新的时候也会同步更新索引,这些都是性能消耗)

最常用的列建立索引就一定能优化速度吗?(不一定,因为可能这个列可能有很多重复数据)

如果索引命中了查询还是很慢,可能有哪些情况?(说了数据量多,然后提到分库分表)

分库分表,具体是怎么分呢?分了之后数据在不同的地方,那查询数据又是怎么查的呢?(这里说的乱七八糟,本身也不太懂)

MySQL日志了解过吗?(说了一下binlog日志文件)

如果MySQL删除了行数据,发现磁盘占用空间不大,可能有哪些情况?(数据本身是空的,没有填值;删除的数据占用空间本身比较小,不是大数据类型)

计网:

Socket编程了解吗?(有两个编程模型,TCP和UDP的)

TCP编程模型用到了哪些系统调用?(socket/bind/listen/connect/accept/recv/send/close)

connect这个系统调用主要是在干嘛?(TCP三次握手)

三次握手流程说一下(经典八股)

三次握手有数据的交换吗?交换的什么数据?(确认号和序列号)

手撕:

先给了个非递归后续遍历二叉树,我说可能不太能写出来,就换了个:二叉树中有一个数出现了一次,其他的都出现了两次,找到这个树。(遍历 + 异或秒了)

反问:

部门能在说一下吗?(csig、腾讯云、网络产品中心,地点在深圳)

业务是做什么的呢?ToB还是ToC?(ToB)

部门为什么会用Python和C++呢?(IO密集用Python,CPU密集用C++。在IO方面,Python和Java差不多,但是Python本身写起来比较方便)

总结:

除了一些项目相关的开放性问题只能扯几句,大部分都能答上来,体验还行,就是不知道能不能过。。面试官也挺好的。之前听说腾讯问OS、计网比较多,但这次其实一点OS都没问,还是跟部门相关。

待改进:

基础部分

  • Java:Set和Map的区别还得再看一下
  • MySQL慢SQL有哪些情况,怎么排查,怎么解决?
  • explain有哪些作用
  • MySQL日志能不能查看SQL语句执行速度?

项目部分,看一些常见的服务升级方案

  • 分布式服务部署
  • MySQL分库分表
  • Nginx相关的

#腾讯##面经腾讯美团百度#
2025届实习&秋招面经 文章被收录于专栏

2025届实习&秋招面经

全部评论
羡慕问的这些,我俩问的完全不一样😂
点赞 回复 分享
发布于 2024-04-10 02:40 北京

相关推荐

04-09 17:45
已编辑
电子科技大学 C++
点赞 评论 收藏
分享
1)手撕:给定字符串,求不含重复字符的最长子串长度,并打印这个子串//哈希Set配合双指针private static String findLongestSubstring(String s) {        int n = s.length();        int left = 0;        int maxLength = 0;        String longestSubstring = "";        Set<Character> charSet = new HashSet<>();        for(int right = 0 ; right < n ; right ++){            while(charSet.contains(s.charAt(right))){                charSet.remove(s.charAt(left));                left++;            }            charSet.add(s.charAt(right));            if(maxLength < right - left + 1){                maxLength = right - left + 1;                longestSubstring = s.substring(left , right + 1);            }        }        return longestSubstring;    }2)如何设计一个秒杀系统?从以下角度考虑:1.高性能架构;采用分布式架构,消息队列来削峰填谷,服务的降级和熔断 2.高并发的处理能力:商品库存扣减的多线程安全问题,采用redisson分布式锁,缓存预热3.用户体验升级:websocket实现秒杀倒计时同步,消息队列实现秒杀结果实时反馈,针对ip地址,设备指纹和访问频率的限制实现防作弊系统4.数据一致性保障;数据库分库分表,本地消息表5.监控报警:监控系统,报警系统,日志系统,异常日志收集,分布式追踪系统6.安全防护、成本控制3)String StringBuffer StringBuilder区别String是不可变类,线程安全,每次修改字符串都会创建新的字符串,效率比较低StringBuffer是可变类,直接在原字符串上修改,使用了Synchronized实现同步,效率也比较低,适合多线程场景StringBuilder是可变类,线程不安全,效率比较高,适合单线程场景4)数据库字段char和varchar区别char:定长字符串,存储长度为1~255个字符,存储空间固定为255字节,不足用空格补,适合固定长度的字段,便于数据库读取和优化varchar:可变字符串,存储长度为1~65535个字符,存储空间为实际长度+长度字节5)索引失效的情况索引失效是指数据库在查询过程中无法有效利用已建立的索引,导致查询性能下降,甚至退化为全表扫描的情况。查询条件中使用了函数或表达式对索引列进行操作;使用了OR条件且未对所有分支列建立索查询条件中使用了NOT、<>、!=等否定操作符;对索引列进行了模糊查询(如LIKE '%abc%'),且通配符位于开头;查询条件中列的顺序与复合索引的列顺序不匹配;或者查询时数据类型不匹配导致索引无法使用。6)数据库的事务隔离级别读未提交:允许读取尚未提交的数据,可能导致脏读、幻读、不可重复读读已提交:允许读取已提交的数据,不能保证数据一致,可能导致幻读和不可重复读可重复读:允许读取已提交数据,可能导致幻读串行化:保证数据一致性,但是并发度和性能低7)Redis的常用数据类型,分别存储哪些东西?String:存储字符串,比如用户名、密码和验证码等哈希:哈希表,可以存储用户信息,商品信息等List:存储有序的元素,比如消息队列和日志记录Set:集合,可以做去重排序或求交集等Zset:带得分排序的集合,可以做用户或者流量等的排行榜8)Redis的锁机制基于SETNX命令,将锁名称作为键,客户端唯一标识(UUID)作为键值,使用完锁后DEL释放锁    因不可冲入可能存在死锁和不及时释放锁的情况,可以释放锁时检查锁值是否为自己的UUID以及添加过期时间基于Lua脚本,使用原子SET命令和Lua脚本的事务性,但仍存在锁续期困难和业务超时锁释放风险基于Redisson的分布式锁,支持可冲入锁和自动续期,提供公平锁、联锁和红锁9)HTTP1.0 2.0 3.0 区别HTTP1.0:默认为短连接,每次请求都需要建立TCP连接,并通过Connection: keep-alive头来实现持久连接,不支持管道    化,主要使用If-Modified-Since/Expires来做为缓存判断的标准;HTTP2.0:采用二进制格式而非文本格式,解析更加高效,支持多路复用允许单个TCP交错发送多个请求和响应,引入HPA    CK压缩算法,对请求和响应的头部信息进行压缩,消除冗余,允许客户端为请求设置优先级HTTP3.0: 最新的HTTP协议,基于QUIC协议,QUIC使用udp传输数据,不存在队头阻塞问题,首次连接后具备0RTT优        势,减少延迟,允许网络切换时,将连接迁移到新的IP地址,默认采用TLS加密,保证数据传输的安全性10) TCP的三次握手和四次挥手,为什么需要?三次握手:客户端向服务器发送SYN表示请求同步,服务器向客户端发送SYN+ACK表示确认收到同步请求,可以确保客户    端的发送能力正常,客户端向服务器发送ACK表示确认,可以确认服务器的发送和接收能力以及客户端的接收能力正常,   连接建立,通过三次握手能够保证通信双方的接收发送能力正常四次挥手:客户端发送FIN+x序列号表示请求关闭连接,服务器发送ACK+x+1表示确认收到,客户端向服务器的通道关        闭,服务器发送FIN+y序列号表示请求关闭连接,客户端发送ACK+y+1表示收到,等待2MSL没有收到回复后关闭TCP连接,因为TCP是全双工的,双向链路分别需要发送和接收两次,所以是需要四次挥手。11) 从输入网址,到最后访问页面的全过程首先输入URL,进行URL解析,准备发送http请求在请求之前,先本地查看浏览器缓存,如果缓存有该资源,直接返回,否则继续准备请求发送请求之前,进行DNS域名解析,按照本地缓存,本地HOST,路由器缓存,DNS服务器,DNS根服务器顺序,直到查        询到URL对应的IP地址三次握手建立TCP连接构建请求并发送,包括请求行,请求头,请求体,并把和该域名相关的cookie放入请求头,构建HTTP请求,如果是https        还要进行加密服务器处理请求,生成对应的响应并返回相应资源四次握手关闭TCP连接浏览器接收到响应后进行解析处理,如果是字节流可能是下载管理器进行下载,如果是html页面就是进行渲染生成页面。
查看11道真题和解析
点赞 评论 收藏
分享
评论
2
17
分享

创作者周榜

更多
牛客网
牛客企业服务