夸克Android一面凉经(2024)
笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《夸克Android一面凉经(2024)》。
面试职位: 智能信息-客户端开发工程师-夸克小说
技术一面
- 面试形式:视频面试
- 面试时长: 60min(提问55min + 反问5min)
- 代码考核: 无
- 岗位地点: 广州
面试问题(55min)
- 自我介绍
- RN页面打开速度优化
- 为什么工程中使用ReactNative, 而不是选择其他跨端的方案?
- 看中了跨端的能力还是只是为了免发版
- 优化方案是否同步到iOS端?
- RN的缺点?
- RN底层还是用原生UI控件,那它慢是慢在哪里?
- 怎么优化?
- 所有的优化效果最有效果是什么措施?
- 内置Bundle包对包体积的影响?
- 除了Bundle体积, RN本身的体积是多大?
- 你在用RN过程中有没有踩过什么坑?
- RN本身是用原生的View去渲染的, 跨端一致性会不会有什么问题?比如在Android调好了, 在iOS上看上去样子不太对。
- 有一些东西改完是两端都要测, 还是只测一端?
- 这个是怎么接入到工程中使用?单独RN仓库打包进apk, 还是源码依赖到Android和iOS的主工程中?
- 在真正上线后动态话能力用得多不多?
- 动态能力的跨版本兼容性如何?之前发的一些App的旧版本, 后面升级了很多版本。会不会有一些重新打包出来的产物, 下发下去不兼容, 导致页面渲染会出问题?
- 会升级RN的版本吗?
- 切引擎是会有兼容的问题对吧? 不切引擎之前是不是也有兼容问题?
- 下发的时候, 是针对不同的版本下发, 还是针对所有的版本下发?
- 是否可以针对不用app版本下发不同的RNBundle版本?
- 你们App的版本覆盖速度有多快?
- 为什么选择针对所有App版本下发相同的RNBundle的方案?
- 播放优化
- 跟播放性能相关的?
- 那你主要在里面做的是什么事情?
- 为什么进程通信数据这么大, 超过了Binder通信上限,我理解应该是一个非常精简的数据集合?
- 所以说是有一些极端情况。刚说到的共享内存, 共享fd, 这个大概是怎么样做到的?
- 先把这些内存写到文件里面传过去, 还是写到什么地方传过去?
- 存在内存的数据怎么让它可以生成一个fd?我们new了一个对象, 我们怎么用它变成一个fd可以引用它的东西, 然后传给另外一个进程?
- 待传输的数据据是存在DVM的虚拟机里面, heap的内存嘛, 那它怎么又能调用到另外一个进程呢?它内存之间本来就是内存隔绝的。
- Android基础
- HandlerThread
- HandlerThread用过吗?
- 它和普通的new Thread()有什么区别?什么时候用HandlerThread, 什么时候用new Thread就可以了?
- 线程池
- 平常写异步操作的话, 是用new Thread()还是线程池去做?
- 创建线程池的参数作用?
- 线程池的参数是怎么配合起来使用的?他的流程是怎么样?
- 我们要设计一个IO的线程池, 它的参数可以怎么设计?多个线程并发扫描文件。扫描文件, 统计行号。开一个线程池, 并发去读, 把数据加起来。
- 参数设置上怎么考虑?最好给出个数值。比如设备CPU是8核。
- 队列的容量大小怎么设计?有界or无界?
- 文件的数量级非常大, 上层的业务可以控制它同时的并发量。
- 如果是一个有界队列会怎么样?它一定会进拒绝策略吗?还是会怎么样?
- 最大线程数的作用是什么?跟workqueue是什么关系?
- equals和hashcode
- 写JavaBean的时候, 什么时候需要重写equals和hashcode方法
- 只是作为hMap中的value而不是key, 也需要复写吗?
- hashCode默认是用什么生成的?
- 多线程方面
- 多线程并发, 数据安全要加锁, 常见的加锁方式有哪些?
- synchronized修饰同步块和修饰普通方法有什么区别?
- 网络
- HTTP实现一个文件的分片下载, 客户端怎么跟服务端交互?大文件分成多段去下载, 客户端和服务端要发一些什么协议?
- HandlerThread
反问问题(5min)
夸克小说可以展开介绍一下吗?
夸克小说目前是在夸克app里面比较重要的业务。目前它在夸克里面是底部工具栏里有一个Tab, 第二个Tab就是小说。 小说里面有两种版权来源。一种是正版的, 自己购买的版权, 这种是跟书旗共用同一套版权。整个阿里里面有一个叫书旗小说。 另外一些没有版权的。就是普通网页,我们正常搜书会搜出来一些盗版网站, 我们会对这些盗版网站的页面做了一些去广告, 转码, 提升一些用户的阅读体验。
我了解到夸克是一个浏览器, 对吧。你说的小说的功能相当于是这个浏览器功能的一部分?它也是native实现的?
是浏览器。是一部分。是native实现的。
我应聘的这个岗位, 你们对候选有什么要求吗?需要加强哪方面的技能?比方在用什么新的技术, 或者跨端方案等等?
小说业务还是用Native原生开发比较多。有一些书架页面是用flutter写的。flutter页面后续会有其他同学去做, 不一定由这个岗位的候选人来做。 但native一定要会。我们还有一个加载本地小说的渲染引擎, 我们平常丢进去的一些epub,mobi,txt文件, 这些是要一个小说的阅读器的, 这个小说的阅读器使我们自研的。这一方面是用c++写的。所以对这块还是有一定的要求。主要还是Android原生的比较多。
除了技术技能这方面, 你们对候选人有软性素质上的要求?比如说资深程度, 职级?
目前职级不太限制。我们只是找到有热情的人, 然后加进来一起做事情。如果是P6进来我们会有P6适合的承担的责任, 他能胜任的任务分派给他。 P7的话也会招, 但是要求的话会更高, 他进来以后要承担的任务就会更P6的同学要求更高。不同层级的都会招, 只是进来以后我们对他的要求会不太一样。
P7是属于一个主力开发, 还不是带人的小组长这样的是吗?
P7是主力开发为多。
面试流程几轮?
共4轮。3轮技术+1轮HR。
总结
- 这个岗位主要负责的是夸克小说的开发, 技术栈主要是Native, 有一部分flutter, 还有一个自研小说的阅读器(渲染引擎), 阅读器涉及C/C++开发。
- p6p7都要, 但是p7也是大头兵, 只是要求更高。这也符合预期, 目前各家公司现状皆是如此, 对标p7职级的岗位也都是大头兵, 甚至还有不带人的P8。
- 从面试问题来看, 项目经历和八股文各占一半。八股文以多线程、线程池、锁相关为主。