上来面试官先详细介绍了一下他们的部门(光子游戏工作室)
然后上来就开始做题,发了题目链接过来,都是leetcode原题
leetcode 191 位1的个数
leetcode 347 前K个高频元素
这题打开之后发现我做过了,面试官就让我说了一下思路,然后直接算过
leetcode 146 LRU
LRU一开始我直接用了LinkedHashMap,写完后面试官让我别用LinkedHashMap,然后我就用LinkedList+HashMap来写,但是最后写完后测试有问题,我就???,这写过不知道多少遍的题目怎么就是不对???然后给面试官说了思路,然后就面试官就说过吧
找到错误原因了,在要往LRU里插一个key-value的时候,如果原本LRU里面存在这个key的话,需要将原来链表中的key删除掉,然后将这个key插入到链表的头部,但由于我写的LRU的key和value都是Integer类型,所以删除的时候调用了list的remove方法,需要用的是remove(Object o)而不是remove(int index)
把我写的原代码中的list.remove(key)改成list.remove(Integer.valueOf(key))就好了
实在是太蠢了,这种错误都会犯(敲脑壳)
然后介绍项目
秒杀怎么做的
如果访问量过高该怎么处理(消息队列做流量削峰、服务器搞集群做负载均衡)
那关于秒杀,在极端情况下,你知道最暴力的做法是什么吗?我说是不是直接在前端阶段就直接把一些请求扔了,面试官说没错,现在很多公司秒杀都是这么做的,反正秒杀对用户是黑盒的,用户看不到,我:难怪我每次抢东西总抢不到。。
然后问Redis,分布式锁如何实现
底层数据结构,Zset怎么实现的
跳跃表和红黑树的对比
为什么用跳跃表不用红黑树,跳跃表的时间复杂度如何
了解Redis底层是怎么用到第三方的内存分配器的吗(完全不了解)
讲一下Linux是怎么做内存管理的吧
Linux的内存布局是什么
知道内存碎片是怎么回事吗
Java的垃圾回收讲一下
select、poll、epoll讲一下
TCP挥手过程讲一下
time-wait作用
time-wait时其他访问过来了怎么办,可以连接吗
那怎么让他可以进行连接呢
知道如何取消time-wait这个过程吗
UDP讲一下你的理解,什么情况下用UDP
TCP的拥塞控制和流量控制有什么区别
各自是怎么实现的
拥塞控制的大致过程讲一下
反问:
让面试官评价一下
面试官说你笔试成绩还不错啊,腾讯笔试100分中能超过50分的还挺少的,你怎么一个简单的LRU没写出来呢?(我也懵逼中)
你在业务方面了解的还算不错,基础也还不错,但是我发现一些学Java比较多的同学,可能是由于Java本身的内存管理做得比较好吧,导致学Java多的人,对于底层的内存管理的细节都了解的不够清楚,对于像是Linux内存布局、内存管理、内存对齐之类的和底层内存相关的概念不是很清楚,下去多了解一下吧
面试官人还是很不错的,全程面试了将近100分钟,也是我秋招到现在面的最久的一个了
全部评论
(12) 回帖