9.7号 腾讯qq移动客户端一面(100分钟)
这场面试绝对是含金量最高、难度最大的一集,每一个问题都是精华,细节抠得特别深!
自我介绍
问答:
- 实习的时候,安卓这边主要做什么工作?
- 挑了一个定时任务讲,定时任务怎么保证一定能执行?
- 你们的软件是怎么实现保活的?
- 如果你每天都要给用户五次提醒,在线上怎么确保五次都提醒了呢?
- 或者提醒有很高的延迟你会怎么检测?
- 那还做了别的需求吗?(面试官没什么兴趣跳过了)
- 介绍glide的整体运作流程(大概的系统框架)
- 这里我说只知道缓存(其实也不太记得,纯瞎说,还不如说不知道)
- 平时写的demo,项目有考虑过屏幕适配吗?
- 回答没考虑过(又被问,那dp是干嘛的?跟xp有什么区别?)
- glide被存放到服务器上,当服务器上的图片发生改变的时候,手机会更新新的图片吗?
- 回答不会,因为glide为资源生成的key没有更新(当时也是一顿乱答,只知道glide会为每个资源设置一个key,但是不知道key是由url、图片签名等东西生成的。)
- glide去load网络资源的时候发了请求,它是发了什么请求?
- 我回答发了http请求,他说,发的是什么方法?我说get方法。
- 他沉默了,他说用get方法不是会把内容直接返回来了吗?
- 我沉默了,这里扯了缓存,这里我是真不懂。后面面试官说这里其实是用了 head 方法。先去查请求头部,然后去做比对。后面下去最好去看下源码。
- okhttp有使用吗?知道retrofit和okhttp的区别吗?
- 这里感觉是猪脑过载了,不知道自己在说什么,面试官听了也是直接跳过了
- okhttp知道实现原理吗?有看过源码吗?
- 提到责任链模式
- 提到责任链,一般说okhttp它责任链一般可以去做一部分内容的一些注入或者替换,那假如说现在要注入一个dns的处理呢?
- 我沉默了几秒,他问,有使用过吗?没有。
- 有使用过kotlin吧?kotlin从你的角度来说跟java有哪些比较大的区别
- 代码风格间接,提供了常用的高阶函数
- 提供了协程
- 使用过 .let .also 这些高阶函数吗?简单说一些 .also .apply的区别?
- 说一个kotlin非空的问题,你之前有打包过jar包,如果项目中用的是kotlin写的,对外提供写好的方法接口,你的函数声明里的参数是非空的,这种情况下你觉得是安全的吗?
- 因为之前快手也被问过,然后就回答到对非空类型的处理就是在调用这个引用的时候会加一行断言。
- 又强调了一遍题目,说如果函数声明是非空的,那么在调用这个方法的时候还需要做非空校验吗?(这里真的要对kotlin转成java的代码非常非常熟悉才能回答上来)
- 可以大概说一下类加载机制吗?
- 类加载需要 加载,验证,准备,解析,初始化
- 你说的这个是已经找到这个类的时候做的工作,它是怎么找到这个类的呢?
- 其实就是说加载过程做了哪些事情(这里也是真记不清了,还把动态链接扯了进来)
- 这里因为不知道,然后胡扯了很多,被打断了
- 知道双亲委托机制吗?
- 回答的时候说错了很多很多,比如说jdk提供的三种类加载器是继承关系,其实并不是
- 比如在String.kt里加了一个扩展方法,String本身是没有这个方法,那调用的时候是怎么一个流程?
- 这里也没有思考过,这里我胡扯是用了自己的类加载器实现的,重写了loadclass方法
- 面试官说不用重写,扩展函数比如String,实际上会被编译成比如String#1.class的了欸,然后在里面写了一个静态方法。让调用myString.myExtensionFunction()的时候,实际上会调用Stirng#1.myExtensionFunction(myString);
- JAVA的集合都有使用吧?说下ArrayList和数组的区别?操作ArrayList有哪些需要注意的地方?
- 说一下ArrayList线程不安全怎么解决的?
- 加锁是一个特别重的操作,加锁会造成很严重的卡顿的问题,你有更好的解决方案吗?
- 知道copyOnWriteArrayList吗?不知道。
- 说一下HashMap的实现原理
- 不安全的情况hashMap怎么去处理?
- for循环和foreach有什么区别?
- 我没答上来,面试官说就是foreach对元素做修改会被检查,而for里面不会。
- 那这种对元素的修改检查是怎么实现的你知道吗?
- 有过大图加载经验吗?Bitmap加载数据很大,比如10mb怎么处理?
- 回答不知道,被问知道glide处理这个的逻辑吗?
- 事件分发机制,有没有在demo或者项目中遇到需要处理Touch事件的情况?
- RecyclerView的缓存机制知道吗?有没有遇到过闪图情况?
- 多线程问题 - 死锁 的必要条件和解除死锁的方法?
- 从浏览器输入一个网址到页面渲染的过程
- 服务端一般用80端口接受请求,如果同时有多个连接,服务端是怎么区分这些不同连接的?
- 这里没答上来,其实是靠TCP连接四元组【源IP地址,目的IP地址,源端口号,目的端口号】做的区分。
- 三次握手,如果服务端返回的ACK报文丢失了服务端和客户端会发生什么?
- 我只说了客户端,他追问了服务端呢?
- 重新发送的SYN报文的序列号和之前的是一样的吗?(不是一样的,每次都要生成一个新的,否则可能会在后面的连接中接受到前面延迟的报文)
- 平常有使用过数据库吗?知道主键是个什么东西吗?有些操作需要更新到数据库,但是中间有很多步骤,怎么保证这些步骤一次性全部生效?
- 你C++怎么样?知道什么是虚函数吗?指针呢?指针的指针呢?智能指针呢?
- 你是明年才毕业吗?如果后面有实习机会的话你会不会来实习?
算法题:
- 删除升序链表中所有重复的元素(我用了双指针,但其实单指针就行)
- 单例模式(可能因为我上面写的不好然后临时加了这个)
反问:
- qq移动端的消息是怎么存储的?(太技术了,不可以答,聊点别的)
- 太细节的肯定不能说,你也可以自己本地去分析的嘛,如果你有root的系统是可以看到的。
- 最终肯定要存到数据库的,怎么保存就是各有各的实现了。
- 为什么要问C++。(因为C++是计算机入门必须掌握的一种语言)
----------------------------------更新--------------------------------------
过了9.11官网显示挂了,可能是因为九月十号的笔试出问题了,导致笔试成绩是0分吧,也可能是面试没过。
#腾讯面试#