`
Z_萧晓
  • 浏览: 10776 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

九月份参加OPPO和腾讯Android面试:技术一面+二面+三面+HR四面,我的面经总结!

阅读更多

 

 

之前很多时候我是拒绝说我的面试经验的,因为我们简历经历不一样问的问题也会不一样,且大厂面试光靠背几个面试题就想过还是比较难的。因此在这里提醒一下大家不要临时抱佛脚,你花几天能背下的东西,别人花几天一定能超过你的,但我们花几年沉淀的东西,人家花几个月就未必能赶上,希望大家不飞则已,一飞冲天。

OPPO 面试过程

boss 直聘 HR 推了简历给有关部门,简历通过后电话约的面试机会。当时约的是 10:30 的面试时间,所以只请了半天假。

第一轮是两个面试官轮流问问题,第一面大约面了一个小时,大约等了十几分钟第二面的面试官把我叫到了 另外一个办公室,也是两个面试官轮流问了大概一个小时,面完二面后就差不多到了下午一点,面试官说我带你去食堂吃个饭,吃完饭面试官帮我约了下午两点的 HR 面。感觉整个流程下来非常爽,总共三轮面试,两轮技术面(每轮2个面试官),一轮 HR 面。

 

技术一面

1. mmap + native 日志优化?

讲了传统日志打印的两个性能问题,一个是反复操作文件描述符表,一个是反复进入内核态,然后讲了 mmap 的原理机制。

 

2. 讲讲 Android 开机启动的流程

讲了一大堆,其中说到 ServiceManager 进程是用来管理系统服务的,面试官说你确定?不是 SystemServer 进程来管理系统服务的吗?讨论了一番面试官懵逼了,提到了 SystemUI 服务,提到了桌面进程,问到了怎么替换开机启动的动画?

 

3. 系统是怎么帮我们启动找到桌面应用的

我说通过意图,他说怎么找到是哪个意图? 我说 PMS 会解析所有 apk 的 AndroidManifest.xml ,如果解析过会存到 package.xml 中不会反复解析,PMS 有了它就能找到了。

 

4. 讲讲动态状态页的加载,为什么要这么弄?

我说为了减少 xml 解析和反射创建对象的时间,避免同时创建多个用不上的对象,我就写了个框架用代码动态添加的。这时面试官误解了我的意思,以为所有的界面都是用代码写的,那得多麻烦呀,后来解释清楚了。

 

5. 讲讲页面的刷新机制,GPU 调试工具几个颜色值分别代表什么?

讲到了 Surface 底层管理的其实是 IBPQ , 讲了异步信号的由来是 SurfaceFlinger 由硬件和软件机制发出来的,讲了我们 app 界面绘制的内容是怎么提交传递到 SurfaceFlinger 的。GPU 调试工具几种颜色的意思也大概讲了下。

 

6. 说说 ConcurrentHashMap 的实现原理说下

是线程安全的,实现原理采用的是分段锁。

 

7. 你知道 okhttp 是怎么复用连接的吗?

这是个网络优化的问题,同一个 ip 同一个端口能复用一个连接,后面问道了 http 2.0 的多路复用,我说一个 tcp 可以多个请求,原理呢?我说不知道。后面让我说了下 https 。

 

8. 数组和链表的区别说下

 

9. 快排和递归

 

技术二面

1. 讲一讲动态注册和静态注册

静态注册是通过包名和函数名去找方法,动态注册是通过注册方法表,其中还被问到了具体是调用哪个函数注册方法表。

 

2. so 的加载流程是怎样的,生命周期是怎样的

这个要从 java 层去看源码分析,是从 ClassLoader 的 PathList 中去找到目标路径加载的,同时 so 是通过 mmap 加载映射到虚拟空间的。生命周期加载库和卸载库时分别调用 JNI_OnLoad 和 JNI_OnUnload() 方法。

 

3. native 层怎么检测内存泄漏

我说按道理可以 hook 函数,开辟内存和释放内存的次数应该是一样的,如果不一样可以怀疑内存泄漏。面试官接着问有没有什么第三方工具或者库可以检测?我说我在公司其实也写的不多,不知道引擎组集成的是啥框架,主要擅长应用层开发。

 

4. leakcanary 的原理,哪些对象可以用来做 gc-root

好,你说你主要擅长应用层开发,那 Java 层的内存泄漏怎么检测,我说我们用的 leakcanary,让我说说原理,说完原理又问我是不是所有对象泄漏 leakcanary 都能检测得到,他的引用链是怎么管理的?后面问到你刚说弱引用对象在 gc 的时候会被释放,那什么时候不会被释放?我这时懵逼了,其实就是有内存泄漏的时候不会被释放,我当时脑子短路了居然没反应过来。

 

5. ui 怎么优化的?

我主要从底层讲了一下 UI 刷新机制的流程,又把一面的 SurfaceFlinger 底层机制讲了一遍,原理搞清了就可以做很多优化,巴拉巴拉说了一大堆,最后讲了怎么去监听 UI 卡顿。

 

6. 线程耗时卡顿怎么监听的?

主要用工具去检测,当时只提到了 systrace + 函数插桩的方式。

 

7. 说说你看的 Tinker 的原理?

 

8. 你遇到的最难解决的问题?

我说我们公司项目没有采用动态加载框架,但是后面集成 U3D 项目需要动态加载,但只需要用到 so 和资源动态加载,功能上第三库也不支持我们的需求,我就自己硬着头皮看了各大版本的源码,支持动态修复替换加载 so 和 assets 资源动态修复加载,然后把具体的细节说了一遍。

 

9. 常见数据结构你都熟悉哪些?不是本专业算法你是怎么学的?

数组,链表,堆,二叉树,队列,栈,平衡二叉树,红黑树,霍夫曼树,图。自己看书算法通过刷题,这里没具体问算法细节。

 

10. 线上有人反馈问题你一般怎么处理的?

开发过程中记录关键日志,线上获取用户日志来分析。

 

 

腾讯面试过程

oppo hr 面完大约晚上九点刚下班到公司楼下来电了,问方不方便我当然说方便,就在马路边上面了大约 50 来分钟,我感觉应该是挂了的,因为过程中电话老是断加上环境又比较吵。过了整整一周到了隔周五上午接到了第二面的面试通知,约的是隔周三上午 10:30 。第二面面试官时不时的面带笑容,给人很轻松的感觉。二面完后要我稍等一下接着面三面,三面面完面试官问我下午还有事没?我们***(应该是领导)有点事,下午四点左右可以面第四面,具体我也没听清楚是谁我也不敢问。我说下午要上班就先回去了,下午接到 hr 电话约的是隔周二的上午。总共五轮面试含 hr 面,持续周期一个月左右。

 

技术一面

1.mmap + native 日志优化?

讲了传统日志打印的两个性能问题,一个是反复操作文件描述符表,一个是反复进入内核态,然后讲了 mmap 的原理机制。

 

2.广播和 EventBus 的区别?

说 EventBus 的实现原理是基于反射,里面管理了两张表,且代码之间关联性不大不易于维护,EventBus 不支持跨进程通信,被面试官反问你确定不支持跨进程?我说我的看的源码是不支持,面试官说那好吧。

 

3.常用设计模式你了解哪些?

我开始巴拉巴拉说了一大堆,其中说到了装饰设计模式,被面试官打断了,请你具体说说装饰设计模式。

 

4.跨进程通信有哪些?

管道,信号,信号量,文件,本地套接字,共享内存,binder 驱动

 

5.简单讲讲 binder 驱动吧?

从 Java 层来看就像访问本地接口一样,客户端基于 BinderProxy 服务端基于 IBinder 对象,从 native 层来看来看客户端基于 BpBinder 到 ICPThreadState 到 binder 驱动,服务端由 binder 驱动唤醒 IPCThreadSate 到 BbBinder 。然后又讲了虚拟内存、物理内存和内存映射,跨进程通信的原理是要基于内核的, 当我讲到 binder_open 、binder_mmap 和 binder_ioctl 是被面试官打断了,估计是怕我讲太久了。

 

6.跨进程传递大内存数据如何做?

我说 binder 肯定是不行的,因为映射的最大内存只有 1M-8K,可以采用 binder + 匿名共享内存的形式,像跨进程传递大的 bitmap 需要打开系统底层的 ashmem 机制。

 

7.说说 ConcurrentHashMap 的实现原理说下,初始化大小是多少?

是线程安全的,实现原理采用的是分段锁,初始化大小是 16 ,必须是 2 的幂次。

 

8.启动优化怎么优化?

我说了关键优化 Application ,被面试官打断了,说大家都能想到的东西你不要说了,我想听的是你能不能站在系统的角度去做一些优化,我提到了优化包体积大小能优化启动速度,优化 dex 分包能优化启动速度,可以参考最新的华为方舟编译器等等。

 

9.你写的 rxpay 和 rxlogin 具体怎么实现的?

一般我们集成第三方登录和第三方支付 SDK 都需要监听 onActivityResult 方法,我是参考了 RxPermission 的实现方案添加了透明 Activity 。

 

10.kotlin + fullter 方面的

kotlin 自己学了语法但是开发项目中没用上,fullter 我是了解了它的实现原理但是开发中也没用上。

 

技术二面

1.单例设计模式都写写,静态内部类是怎么保证线程安全的?

2.synchronized 底层实现原理,ReentrantLock 公平锁与非公平锁。

3.主线程等待所有线程执行完毕,再执行某个特定任务怎么实现?原理和源码看过没?

4.自定义 view 的一般流程,要注意些什么如何优化,点击事件和长按时间分别是怎么实现的?

5.四种启动模式,在源码分析中的原理是怎样的?

6.讲讲 bindService 的过程,你当初是怎么优化后台服务进程的?

7.开发中你都用到了哪些设计模式?说说当时具体的场景。为什么你要用方法工厂,另外两种呢?

8.RxJava 在使用过程中碰到了某些不友好的错误一般怎么解决?发现了内存泄露一般怎么解决分析,有没有碰到过系统服务内存泄露的问题?

9.你们用的 okhttp ?那你有没有做过一些网络优化呢?比如弱网环境。

10.给你个数 1 吧,比如 1000011 里面有几个 1 ?

11.快排了解不?最坏的情况是怎样?如果有大量重复数据怎么优化?

 

技术三面

1.讲讲 handler 的底层实现原理?

这么简单?问到碗里来了,后面渐渐说到延迟消息是 nativePollOnce 来处理的,在 6.0 以上用的是 epoll 方式来监听文件描述符。接着问道了为什么要用这种方案?它跟 poll 和 select 比起来有哪些优势?它是怎么监听的你看过它的内部实现原理没?反正感觉很难受了。

 

2.说说你做的日志记录优化?

把第一轮面试的又讲了一通,你在每个文件的最后写入了当前内容的大小,你有没有想过如果文件被破坏的情况?这种异常情况怎么处理?后面还问到了加密和压缩。

 

3.你看过 binder 驱动的源码,说说他的内存映射过程,说说客户端等待服务端处理返回的流程,如果要跨进程传递大内存数据你具体会怎么做?简单写一写吧。

 

4.在公司做过哪些优化?

内存优化,启动优化,网络优化,包体积优化,具体说说包体积优化。我提到了包体积优化不仅仅是优化了包的大小,包体积太大从安装的那一刻开始,我们的应用就可能比较慢了,因为 pms 会去拷贝解压解析我们的 apk 安装文件,会去优化我们的 dex 等等,包体积太大还会影响我们的启动速度。然后就巴拉巴拉说具体怎么做,问到了为啥混淆资源能减少包体积大小?你当时优化的时候效果是怎样的减少了多少?

 

5.开发过程中遇到的一些最难解决的问题?

提到了动态修复替换加载 so ,那你知道怎么修复 class 吗?怎么修复资源呢?后面又聊到了插件化,提到了 360 用的是借尸还魂,那如果我们在插件的 Androidmanifest.xml 中注册了其它属性该怎么解决,资源方面怎么处理?

 

6.还有什么要问我的?

 

个人体会

要是换几年前我也跟大家一样,感觉这些面试题估计一个也答不好,但是今天回过头再来看其实感觉也就一般般吧。当我们读小学时感觉初中知识比较难,但当我们读到高中时再回过头来看就很简单了。因此我们不必在乎现在的自己能力是否足够强,一口也是吃不成胖子的,只要今天比昨天有进步这就足够了。但道理我们都懂,可是能坚持下来的同学却比较少了,人生贵在坚持!

 

随着年龄的增长意味着我们的时间也越来越少了,所以我们自己心里要明白想要什么?是想成为某个领域的专家,还是想多方面发展以后做领导型人才。一个时间段往往只能做好一件事情,有舍必会有得。当我们开着拖拉机在乡村道路时,不要看着别人开着跑车就羡慕,以为拖拉机也能上高速,但内心要有换喷气式飞机的勇气和决心。

 

但是不用凡是都抱着得到的心态去做,就好比学习我就一定是为了进 BAT,如果是这样那当我们进了 BAT 又该如何,就好比死亡并不是代表生命的结束,学习这件事应该是终身的。只要我们能静下心来该来的自然会来,作人无甚高远事业,摆脱得俗情,便入名流;为学无甚增益工夫,减除得物累,便超圣境。

 

不要凡是都抱着利益的心态去做,一直以来我都是崇尚成就自己的同时去成就别人。只要自己不抱着利益的心态去做,那么便能拿得起放得下,当我想讲的时候便可以讲,不想讲的时候便可以不讲。过程中肯定会有各种疑问和怀疑,若坚持不了就放弃,但心中若有挂碍就铭记。

 

最后

大厂的正常面试流程周期一般是一到两个月,就算薪资谈完到 offer 最终审批下来可能都需要一到两周,这段时间心理是比较难熬的,因此建议大家尽量不要裸辞。面试完毕一般都会透露多久给答复,如果是猎头推的多跟猎头联系,大家要尽量想办法打听到最新的动态。

 

二本大学也会有一流的专业,所以并不一定说一线互联网企业就是最好的,因此在面试的时候一定要问一下部门和项目,自己根据自身的情况来选择企业和项目组。一般情况下通过面试的难易程度就能判断出部门的技术沉淀,那种几乎不问技术很容易过的情况,并不见得就一定是好现象,还是得根据自身的情况和以后的打算来判断,*有时选择可能会大于努力。

 

以上就是我要说的内容,希望以上的内容可以帮助到正在默默艰辛,遇到瓶颈且不知道怎么办的Android程序员们,希望大家在往后的工作与面试中一切顺利。

 

有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

 

BAT面试专题PDF+学习笔记:

 

为什么BAT资深开发者劝你早点离开小公司?

上述高清技术脑图以及配套的架构技术PDF加我wx:X1524478394 (或者技术qun:887084983)免费领取

 

专注分享大型Bat面试知识,后续会持续更新,希望通过这些高级面试题能够降低面试Android岗位的门槛,让更多的Android工程师理解Android系统,掌握Android系统。喜欢的话麻烦点击一个喜欢在关注一下~

分享到:
评论

相关推荐

    OPPO射频天线面试总结.rar

    在OPPO的射频天线面试过程中,求职者需要对一系列技术及理论知识有深入理解。这份面试总结涵盖了从人力资源面试到专业技能测试的关键点,旨在帮助应聘者充分准备。以下是一些重要的知识点: 1. **HR面试**: - ...

    OPPO A55-mtk强解锁bl工具+root详细图文教程

    OPPO A55-mtk强解锁bl工具+root详细图文教程 1---资源内带详细的图文教程步骤 2---资源内带相关解锁bl驱动与解锁工具 3---按步骤操作即可解锁bl 然后按步骤获取面具root权限 4---从此走向自己机型玩机搞机之路。...

    OPPO A72-mtk强解锁bl工具+root详细图文教程

    OPPO A72-mtk强解锁bl工具+root详细图文教程 1---资源内带详细的图文教程步骤 2---资源内带相关解锁bl驱动与解锁工具 3---按步骤操作即可解锁bl 然后按步骤获取面具root权限 4---从此走向自己机型玩机搞机之路。...

    OPPO A57-MTK芯片解锁bl工具+root详细图文教程

    OPPO A57-MTK芯片解锁bl工具+root详细图文教程 1---资源内带详细的图文教程步骤 2---资源内带相关解锁bl驱动与解锁工具 3---按步骤操作即可解锁bl 然后按步骤获取面具root权限 4---从此走向玩机之路。安装框架 ...

    OPPO R15-mtk强解锁bl工具+root详细图文教程

    OPPO R15-mtk强解锁bl工具+root详细图文教程 1---资源内带详细的图文教程步骤 2---资源内带相关解锁bl驱动与解锁工具 3---按步骤操作即可解锁bl 然后按步骤获取面具root权限 4---从此走向自己机型玩机搞机之路。...

    电子行业周报:国产化+景气度,两条主线!.pdf

    根据提供的文件内容,这篇电子行业周报主要讨论了两个主题:国产化和景气度。下面将详细展开这两个主题的知识点。 一、国产化 1. 国产射频器件崛起 - 5G技术升级为国产射频器件厂商提供了战略机会。4G时代,射频...

    OPPO+R11+R11T+R11plus+R11+plusk等解锁专用刷入修复工具包

    在Android设备中,解锁Bootloader和刷入第三方固件是高级用户常见的操作,以提升设备性能、自定义系统或修复软件故障。以下将详细解析这个工具包可能涉及的知识点: 1. **Bootloader解锁**:Bootloader是设备启动时...

    25OPPO机械工作面试经验分享

    面试前准备阶段:求职者可以利用本资源深入了解OPPO机械岗位的面试要求与流程,有针对性地准备技术知识、项目经验和面试问答,提高面试通过率。 自我评估与技能提升:通过对比分享中的案例与自身经历,求职者可以...

    OPPO售后解锁恢复工具.zip

    oppo手机解锁国外售后官方专用解锁(适用于所有OPPO手机型号) 使用时注意端口的连接 1:解压的此解锁.救砖软件包文件夹中.找到"OPPO国外售后解锁恢复专用软件包.exe"运行它 2:端口:选你手机连电脑后的COM(用上面三种...

    java面试——深圳-OPPO-Java高级.zip

    在Java高级面试中,面试官通常会关注应聘者对核心概念、高级特性和实际问题解决能力的掌握。针对“深圳-OPPO-Java高级”这个主题,我们可以预想面试会涵盖多个关键知识点,包括但不限于: 1. **Java基础**: - 类...

    25豪迈机械面试面试题目+答案

    本资源文件是一份详尽的豪迈机械工作面试经验分享,旨在为即将参加或有意向加入豪迈机械工程师岗位的求职者提供宝贵参考。内容涵盖了从面试前准备到面试后跟进的全过程,包括但不限于豪迈机械岗位的面试。豪迈面试/...

    oppo社会招聘面试经验.pdf

    【OPPO社会招聘面试经验详解】 OPPO作为全球知名的科技公司,其社会招聘流程严谨且具有挑战性。面试过程通常包括四个主要环节:简历投递、专业面试、人力资源面试以及群体面试。对于应聘者来说,充分准备每个环节至...

    各大厂互联网企业面试真题,包含有百度、京东、唯品会、阿里、蚂蚁金服、拼多多、OPPO、腾讯等等 金三银四冲起来

    本资料涵盖了百度、京东、唯品会、阿里、蚂蚁金服、拼多多、OPPO、腾讯等知名企业的Java面试题目,旨在帮助应聘者全面了解并掌握Java相关的基础、网络和分布式等关键知识点,提高面试成功率。 首先,让我们聚焦Java...

    oppo高通硬改软件+资料生成器-硬改拉新

    "oppo高通硬改软件+资料生成器-硬改拉新" 这个标题涉及的是针对OPPO品牌手机的高通处理器进行的硬件修改(硬改)软件工具,以及相关的资料生成器。硬改通常指的是对手机的硬件或固件进行非官方的修改,以实现特定...

    oppo A8 系列强解锁bl工具+root详细图文教程

    oppo A8 系列强解锁bl工具+root详细图文教程 1---资源内带详细的图文教程步骤 2---资源内带相关解锁bl驱动与解锁工具 3---按步骤操作即可解锁bl 然后按步骤获取面具root权限 4---从此走向自己机型玩机搞机之路。...

    Android + <调用相机拍照 & 选择相册> + 数码相机

    【TakePicture】项目分为两大部分...实测:android 8、9、10、11、13以及鸿蒙系统有效。 机型:小米、OPPO、VIVO、华为手机。 1. 上传头像并裁剪。 2. 上传多张照片并做压缩处理,图片可实现在线预览,伸缩放大等功能。

    25西安光机所机械面试记录心得面试题目以及答案攻略

    本资源文件是一份详尽的西安光机所机械工作面试经验分享,旨在为即将参加或有意向加入西安光机所机械工程师岗位的求职者提供宝贵参考。内容涵盖了从面试前准备到面试后跟进的全过程,包括但不限于西安光机所机械岗位...

    Android实现饭店自主订菜系统,安卓端+前端,优秀毕业设计!

    Android实现饭店自主订菜系统,安卓端+前端,优秀毕业设计! Android实现饭店自主订菜系统,安卓端+前端,优秀毕业设计! Android实现饭店自主订菜系统,安卓端+前端,优秀毕业设计! Android实现饭店自主订菜系统,...

    OPPO公司Java笔试面试.zip_面试资料下载

    在准备OPPO公司的Java笔试和面试时,了解和掌握一系列关键知识点是至关重要的。这份面试资料将涵盖Java语言的基础、进阶特性、编程技巧、设计模式以及与面试相关的实际问题解决能力。以下是一些核心的Java知识点,...

    oppo_android_1.0.0.1.

    【标题】"oppo_android_1.0.0.1." 指的是OPPO公司为Android设备发布的特定版本的USB驱动程序,主要用于确保OPPO手机与Windows操作系统之间的顺利连接。这个驱动程序的版本号是1.0.0.1,意味着它是该系列驱动的初始或...

Global site tag (gtag.js) - Google Analytics