首页 > 腾讯云智后台实习一面
头像
无限长的下午
发布于 04-20 11:36 黑龙江
+ 关注

腾讯云智后台实习一面

1、自我介绍

答:公式背诵,背完后聊了些简历上写的算法竞赛获奖的详情,他说他不太熟悉几等奖几等奖的获奖要求。

2、我看你会 Java、Cpp、Go,说一下这些语言的区别

答:生态不同,Java 生态很好,可直接调用的 api 很多,其他语言可能部分业务要自己手搓**,开发成本高。

3、可不可以说一下其他方面的不同?

答:Cpp、Go 有指针,数组中存的是元素,Java 无指针,数组存的是地址。

4、你觉得这两种设计的哪种更好?你更喜欢哪种设计?

答:各有优劣,性能高的内存开销也会高(现在想起来当时应该说指针可能造成内存泄露)。我本人更喜欢指针设计,又聊了 Java 浅拷贝拷地址,深拷贝实现麻烦,所以喜欢指针。

5、聊一聊你对 hashmap 的理解,想说哪方面就说哪方面。

答:JDK1.8+ 是数组链表红黑树实现,元素超过负载因子 0.75 * 16 = 12 后树化,元素小于 8 退回到链表。我对于 go 的 map 也有所了解,我认为 go 的 map 比 java 做的好的一点是扩容是渐进式扩容,包括 java 中hashmap的线程安全版本 concurrenthashmap 也是渐进式扩容,就是触发扩容条件后每次对 map 处理时将旧的桶的两个元素搬到新桶中,缓解扩容带来的性能开销。

6、hashmap 的扩容是怎样的?

答:扩成二倍长度。

7、扩成二倍长度有什么风险?

答:OOM Out Of Memory,可以调 JVM 参,增大堆内存大小,也可优化其他对象的开销。

8、说一下布隆过滤器

答:直接说的 redis 的缓存雪崩,背八股背到一半被面试官打断了。

9、布隆过滤器一定要用在 redis 上吗?有没有可能你这个布隆过滤器在过滤的过程中造成的性能开销要比缓存雪崩带来的性能开销大?

答:我了解到布隆过滤器是基于位图实现的,对于一般的请求不会出现上述情况,同时我们可以使用 postman 等测试工具做一些请求时间记录,根据记录做适当调整决定要不要使用布隆过滤器;此外 Elasticsearch 等只要是查询数据的中间件都可以使用布隆过滤器,只是 redis 是一个十分典型的例子,所以我一上来就提到了 redis。

10、如何手搓一个布隆过滤器?

答:状态压缩,搞一个 int 类型的值,其二进制的每位 01 表示数据是否存在。手搓位图会导致代码可读性差难维护、开发难度高易出错,如果要我手搓一个布隆过滤器,我会详细在方法前写好注释,以防止其他同事读我的 i 左移 j、i 右移 j 时造成混乱。(还好他没真让我搓布隆过滤器)

11、为啥 mysql 用 B+ 树?

答:因为刚在聊 redis 所以先说为啥不用跳表:插入查询随机,且范围查询效率奇低;再聊为啥不用红黑树:kv存储导致空间利用率低,同时并发要靠 cas,太重了。

到这面试已经进行50分钟了,自我介绍与闲聊10分钟,问这些问题40分钟,面试官说时间不多了,他看我的项目经历啥的能看懂,手撕算法笔试撕过了今天就不撕了,开始反问。

反问

反问1:贵公司核心业务是怎样的?实习生多久可以接触到核心业务?

面试官答:做数据库 orm **,用 cpp 和 go,所以他刚刚一直问底层的东西,包括他对二倍扩容很敏感。

反问2:如本人有幸通过面试,我最近学习哪些知识以更快融入贵公司?

面试官答:go 和 k8s。(k8s看了几天没咋看懂,倒听说这个不是开发干的是运维干的,最近看别的去了)。

感受

首先面试官人挺好,对于底层知识与设计聊的有来有回。一面是 4.14 这周一面的,现在写这篇面经是周六的晚上十一点。当天面完官网的应聘状态就从业务初试改为业务复试了,等到今天也没有邮箱说哪天二面。。。等得太煎熬了把拖了近一周的面经给写了,有一些焦虑,怕官网状态更新错了、怕腾讯云智已经招满人了所以不准备面我了、怕真有下一次面试碰到 kpi 面。。。闲下来总是不自觉想些有的没的。

全部评论

(6) 回帖
加载中...
话题 回帖

近期热帖

热门推荐