【腾讯】 社招后端Senior面经 Java + Redis + HTTP

Author: Xcourse   2023-Mar-15 22:04   Reads: 379

为方便您在新加坡找到合适的工作,安心舒适的生活,欢迎咨询。

官方邮箱:enquiry@xcourse.sg

微信群:@新加坡工作群

WhatsApp群:@Singapore Jobs & Internships

Telegram中文群:@新加坡工作群

Telegram英文群:@Singapore Jobs

------------------------------------------------------------------------------------------------------

一面:

1.说一下mysql的悲观锁乐观锁实现

乐观锁版本号加自旋。悲观锁就是slect for update或者 share mode

2.java里面是怎么实现的呢

悲观所主要是synchronized,走的操作系统mutex,又讲了一遍锁省级。乐观锁就是cas,底层是cpu指令。又说了下unsafe相关的内容。

3.如何取舍乐观锁悲观锁场景

当时面试心情好,就说了大实话。场景取舍类似于上厕所。小号就是乐观锁,毕竟排队一会儿就能等到,配合自旋等待就行了,如果使用悲观锁上下文切换(从厕所走到工位)花费的时间不划算。大号就是悲观锁了,毕竟等待的时间一般会很长。二者取舍就预测是否发生竞争,或者竞争的时间长不长。

4.说一下concurrenthashmap怎么实现。1.8比起1.7有什么优化

cas+synchronized,1.7则为分段锁。另外优化了寻址算法和hash算法(具体说了下两个公式)。(ps,最重要的红黑树没说,不过感觉不要紧啦)然后说了下怎么计算总数。扩容的步骤。

5. concurrenthashmap和hashtable的区别

一个最终一致,一个强一致。前者读的时候不加锁。

6.问一下网络吧。三次握手过程,能不能改为两次

经典八股文。ack,syn,半链接这些说一下就可以了。不能改为两次,如果没有中间消息丢失在没有超时机制的情况下就会产生网络的死锁。(不过终于到了我最擅长的网络啦,之前除了字节三面就没人问我网络,不愧是腾讯,嘻嘻)

7.四次挥手说一下,能不能改为三次。为什么要等待2msl

挥手过程又是八股文。可以改为三次,只要服务端开启延迟发送,第二第三步就可能变成一步。2msl是为了保证序列号不紊乱,不产生脏数据。顺便说了下序列号怎么产生的。

8.tcp的一些八股文,校验和,滑动窗口,拥塞控制,流控,nagle算法

又是基础八股文,tcp最大的缺点也就在流控了。流控还要维护整体网络,正常人一旦页面读取失败肯定会疯狂刷新页面啊。怎么可能等待一段时间再刷页面呢。

9.https加密过程

这一题我说太多了,从seesionid,sessionticket到加密套件的四个字断含义,加密套件只有两个算法需要填写,而只有一个算法需要填具体值。还有服务端是否需要发送证书,客户端是否需要发送证书。不同加密算法 ECDSA和RSA中间的过程有什么不同,讲到一半就感觉很累,不想讲了。越讲越快。

10.ca证书如何验证

标准八股文,就一般证书sha1加sha256验证证书完整性。还有就是最重要的密码套件中的算法怎么用(一般就是aes和sha256)。又讲了下证书链,多级证书。还有openssl的pem转crt等等。什么是自签证书(diss了一下12306,哈哈)。到这里网络就结束了

11.说一下redis的数据结构,zset怎么实现的

基础的5个加布隆过滤器,hyperloglog,geohash之类的。zest和字节一面说的一样。

12.zset怎么实现排名

span字段

13. 布隆过滤器怎么实现的,能否有删除功能

bitmap多个hash,增加计数器功能就能一定量实现删除功能(删除这块儿面试官不知道,所以听完有点懵逼,说自己之后在想一下我说的话)redis在这里就结束了

14.数据库的事物隔离级别,各基于什么方式实现

我三家公司一➕用的orcale一家用的pgsql,一家用的mysql,所以我就老老实实三个数据库全都说了一遍。面试官估计对pgsql的ssi很感兴趣,我赶紧说那个太学术了,我解释起来有点难就糊弄过去了233

15.常见的索引结构

lsm树——rocksdb,leveldb ; b树——mysql的innnodb,mongodb ; hash索引 —— mysql的menory,innodb。 倒排索引 —— es,sloar。还有全文索引,r树。

16.mysql的锁,锁的具体使用

主要就是行锁,表锁,页锁。然后问其他分类呢,我就说x锁,s锁,ix,is。然后又问我别的分类,我就说行锁,间隙锁,邻间锁。在具体的就是innodb我记得有四个锁,名字记不住哈哈。至于sql具体的使用,有个锁升级降级策略,那个太绕了,简单说了下面试官就放过我了。

17.mysql的组件

八股文,就强调了一句新版本已经没有缓存了。面试官投来赞许的目光,嘻嘻

18.聚集索引说一下

就索引会存全部数据,按顺序存储之类的。另外聚集一定有唯一性约束。所以不能走出change buffer

19.mvcc

纯八股文

20.说一下b+树吧,为什么innodb不像redis那样使用跳表。

因为redis几乎是纯内存,不像mysql要刷磁盘,所以要保证层级尽可能的低,不然影响性能。

21.说一下redis的主从复制过程

八股文,不过怎么又绕回redis了,汗。

22.一致性哈希算法说一下,具体扩容过程。

主要解释了下slot就结束了,具体扩容过程不了解。redis到此问完了。

23.说一下java的垃圾回收器吧,有什么优缺点

说了zgc,香浓多,g1,cms。面试官主要问了g1和cms,然后问了优缺点又问了使用场景,由于很久不java刷面经了,场景这块儿差点没说上来。java到此也就结束了

24。cglib和jdk代理的原理

前者操作asm字节码,后者是继承proxy类。说了点具体源码,面试官就跳过了。

 

二面:

说说你做这个电商项目负责了哪些东西

基于什么维度分表,如果搜索商品名称怎么办,

为什么不用分区,分区有哪些优缺点

Rocket集群有哪些方案?

如果多主无从的情况下,a,b,c同时可写入,但c挂了,那c的还能订阅吗

Mysql高可用有几种方案,分别有什么特点

redis分布式锁你们是怎么用的(redission),原理知道吗

redis的热key知道吗?一个热key导致单台机访问流量过高,该怎么办?

分布多台redis的话,如果某一台缓存过期了,流量过大该怎么办?

如果有10台机同时失效,那该怎么一次性回源

限流是怎么做的,用阿里云的sentinel,有几种策略(qps,时间)

有几种限流算法,各有什么优缺点

 

三面:

介绍你在项目中的职责和负责模块

项目的日活量,QPS,压测结果

项目是基于Http还是rpc访问,怎么做容灾的

用到mq怎么做一致性处理的

怎么防止薅羊毛之类的

现有团队人数,你在团队的地位,抛开业务经验来说,你觉得为什么要找你做这个项目的技术负责人

你目前在研究哪些技术,哪些业务方向

未来两三年的职业规划

对go有什么理解,你是基于什么目的去了解go的


 


Tags: interview backend senior

Topics: 面经