滴滴提前批
一面-2024/08/16
做个自我介绍?
你能说一下那个 Java 常用集合以及它们的区别和使用场景?
你能说一下hashmap它是怎样扩容呢?
hashmap 它为什么选用红黑树而没有使用普通的二叉树?
那个你能说一下这个 Java 的这个内存模型以及它是怎样进行垃圾回收的吗?
比如说现在一个 Java 进程,然后一直在经常会触发full gc,怎样去定位?
嗯,你找到这个对象之后,你怎么知道他是怎么判断他是在什么位置创建出来的?或者说他是在那个使用过程中不断复制,还是说就是在创建的时候在某个位置创建的这个怎么去定位到进入到你的代码里面去?
你能说一下进程线程和协程的区别吗?
那个比如说现在,一个 Java 进程里面有多个线程,然后它使用它的这个服务的时候,我的 CPU 占比非常高,就是怎么去定位这个到底是哪个线程?或者说怎么去定位问题?
那个比如现在我在浏览器里面输入了一个那个地址,然后呢到这个浏览器把这个页面渲染出来,然后经历了哪些过程?你可以说一下?
你能说一下 HTTP 跟 HTTPS的区别吗?
它那个这个数据加密的密钥是怎么来的?
那比如说现在我的后端服务是一个分布式的服务,然后那个中间有一个那个负载均衡器,然后做那个转发,然后首先第一个,你能说一下四层转发和七层转发的区别吗?
那个你能说一下常用的负载均衡算法吗?
那比如说现在这个我有一个需求,比如说那个我的请求是有状态的,然后每个请求都需要落在同一个机器上,这个怎么做?
在你在配置中心怎么配呢?比如说我的客户端是非常多的,比如说我,我现在对的这个你这个场景可能比较少,比如说我对滴滴服务来说,他面对的是成千上万的那个用户,他怎么配你这个?你刚才说这个配置中心怎么配置?
比如说现在我的一个后端,然后这个刚才请求的这个页面响应非常慢。然后比如说我打开等 10 秒钟之后,这个页面才刷新出来,我怎么去排查这个问题?排查为什么、什么原因导致的?
第一个问题就是你怎么判断你刚才说了一个是后端的静态资源,一个是后端的慢查询,对吧?是两种。然后如果是第一个,你认为它是 CPU 的问题,还是说是那个磁盘,比如说那个 IO 的问题,那是磁盘 IO 或者是网络 IO 之类的问题,这个你怎么确定?
那如果确定是慢查询的问题,怎么去进行那个优化呢?什么情况下索引会失效呢?比如说现在这个我原来的数据库的那个表是分了10个表,现在要把这些表进一步分成 20 个表,这个怎么做呢?迁移的过程中,这段时间产生的数据怎么办?
算法题:k个一组翻转链表我想问一下,就是咱们部门是做什么业务的?然后我还想问一下,就是咱们就部门那个技术栈是什么样的?
二面-2024/08/16
讲一下你怎么用数据库代理做的分片?
怎么进行的索引优化?
建立索引的原则?
如何进行sql慢查询优化?
如何对你这个系统进行微服务拆分?
算法题:给出一个整型数组,找出所有三个元素组合,其组合之和为0,要求结果集里不含有重复的组合例如(-2,1,-1,2,1,0,1,1}输出 {-2,1,1}{-1,0,1){-2,0,2}
怎么优化时间复杂度?
如何设计一个新闻热点排行榜,抗住高并发访问?整个系统你怎么来设计?
访问量达到100w qps 怎么优化?
热点新闻的内容存在哪里?
定时更新排行榜中新闻的信息?
如果静态页面访问并发量达到上亿,有更好的思路吗?
三面-2024/08/20
那个你要不这样还是稍微简单的介绍一下自己,包括之前做的一些项目这一块。
那个我想了解一下,因为你刚才说的就是这个安防的项目,举个例子,它虽然有各种使用场景,也用到了一些硬件设备。对,那但是从一个偏软件工程系统的来讲,你怎么去定义这个系统?它的输入输出和主要的数据流转模型是怎样的?
就比如说这个系统它应该是一个有哪些核心的模块,对吧?嗯,从这个软件工程角度,它应该是怎么去设计的?
那你刚才提到几个点,我要问一下第一个你和这个数据源采集数据源之间要要长期有通信,对吧?第二个你 Web 端还会有这种数据流的推送的通信,这两个通信你们走的是什么协议啊?比如说 是Websocket 还是 GRPC 还是什么样的一些协议?你当时是怎么想?
唉那我问问为什么 App端 和 Web 端用 Websocket,但是和硬件这边用 HTTP 1.1, HTTP 1.1 你们自己是使用的比如说类似轮询的方法去实现这个长连接吗?还是怎么样?它是双向还是单向的一个通信?
当时是因为你们的硬件设备是这么建议的?还是你们自己去选的这个方式?
Http1.1是怎么做长连接的呀?
因为你如果是 get post 这些方法它都是单向的,对吧?你要是双向长连接,你是怎么?是你自己实现的吗?
Netty去帮你管的,是吧?
然后我想看看另外一个问题,是一个是通信,第二个是中间你说的有一个规则引擎,对吧?你这个规则引擎是你们自建的还是用的第三方的?它是核心的是什么?怎么设计的你有了解吗?
那你听起来你这个规则里其实就是很多 low base,就是 if 在什么区间之内的怎么样了,是吧?
那就持久化,然后上层就是读取数据库标准的格式,然后就把它这些参数变成一些,因为你数据库就是存成一些标准的一些字段了,然后你有这种字段,然后带入那些具体的数值,然后给出判断结果,大概是这样,是吧?
代码考核:假设你们实验室有 m 个人,然后你拿到了一个日历,每个人每天会有一些时间段是有其他安排的,所有人最多会有 n 个安排,就是大概是这么一个情况,然后你因为快毕业了,想找个时间大家聚一下,你看看怎么找到所有人都同时有空的时间?(合并k个升序链表变体)
#滴滴提前批##面经#