2021年最新Android开发面试经验(一):字节跳动


以下纯属个人面试经验分享,望对各位同仁有帮助

本人基本情况是:16年毕业于211院校本科,19-21年在Oppo工作,算是有大厂经验了
面试的岗位是:
Android应用开发工程师
职位描述
1、负责手机端系统应用的功能开发,维护和问题修复;
2、负责所维护模块的性能优化,如冷热启动指标优化,滚动优化等;
3、负责所维护模块的内存问题处理,包括解决内存泄漏,内存调优等。
职位要求
1、本科以上学历,计算机或相关专业,3年以上Android实际开发经验
2、熟练掌握Java语言或C++语言,熟练掌握面向对象编程,熟悉Android平台的应用设计规范、具有良好的编程习惯和代码规范意识,熟悉Android平台下的代码调试和调优技术;
3、熟练掌握Android IPC 机制,熟练运用四大组件进行需求开发,有对Framework 如AMS,WMS了解的优先;
4、熟练掌握TCP, Http,Https等通讯协议,熟练使用OKHttp 或 Http其他工具类进行网络编程;
5、熟练掌握Android UI编程,动画编程,对Android事件分发流程,View绘制流程,自定义View 有较深理解;
6、有过Android系统级应用经验者优先;
7、了解并使用过开源框架或技术如 Rxjava,Retrofit,EventBus,Android JetPack,OpenGL,组件化开发经验者优先;
8、有技术亮点与技术热情,希望对某种技术有较深的研究,例如图形,网络,浏览器等;
9、具备积极进取踏实负责的工作态度,强烈的团队合作意识, 能承受工作压力。

面试过程

1、主要是项目经验(占面试时间的40%)

没有问所有项目,你自己挑一个最难的项目来讲
突出项目难点,项目特色,项目突出贡献,要做到通俗易懂,视频面试没法画框架图

2、突出三方能力,要了解核心思想(占面试时间的20%,如果用得多可能会聊更久)

比如:OkHttp,retrofit,RxJava,EventBus,
比如:OkHttp基本原理,缓存原理,连接池原理,
如果每个请求都需要在url里添加字段,如何用Interceptor实现
retrofit的核心设计思想
参考链接:
OkHttp缓存原理分析
okHttp使用和原理分析

3、android基础(占面试时间的20%)

3.1、Handler实现原理

参考链接:android Handler机制原理解析(一篇就够,包你形象而深刻)(https://blog.csdn.net/luoyingxing/article/details/86500542)

3.1.1、Looper.loop()源码,即实现原理

3.1.2、Handler.postDelay()实现原理

参考链接:你真的懂Handler.postDelayed()的原理吗?(https://blog.csdn.net/qingtiantianqing/article/details/72783952)
基本情况是:
如果头部的这个Message是有延迟而且延迟时间没到的(now < msg.when),会计算一下时间(保存为变量nextPollTimeoutMillis),
然后在循环开始的时候判断如果这个Message有延迟,就调用nativePollOnce(ptr, nextPollTimeoutMillis)进行阻塞。nativePollOnce()的作用类似与object.wait(),只不过是使用了Native的方法对这个线程精确时间的唤醒。

如果Message会阻塞MessageQueue的话,那么先postDelay10秒一个Runnable A,消息队列会一直阻塞,然后我再post一个Runnable B,B岂不是会等A执行完了再执行?正常使用时显然不是这样的,那么问题出在哪呢?
1、postDelay()一个10秒钟的Runnable A、消息进队,MessageQueue调用nativePollOnce()阻塞,Looper阻塞;

2、紧接着post()一个Runnable B、消息进队,判断现在A时间还没到、正在阻塞,把B插入消息队列的头部(A的前面),然后调用nativeWake()方法唤醒线程;

3、MessageQueue.next()方法被唤醒后,重新开始读取消息链表,第一个消息B无延时,直接返回给Looper;

4、Looper处理完这个消息再次调用next()方法,MessageQueue继续读取消息链表,第二个消息A还没到时间,计算一下剩余时间(假如还剩9秒)继续调用nativePollOnce()阻塞;

5、直到阻塞时间到或者下一次有Message进队;

3.2、Activity的生命周期,还有各场景下,各个生命周期的回调方法

参考链接:深入理解Activity的生命周期(https://www.jianshu.com/p/fb44584daee3)

核心知识点:
onStart:start表示启动,这是Activity生命周期的第二个方法。此时Activity已经可见了,但是还没出现在前台,我们还看不到,无法与Activity交互。
onResume:resume表示继续、重新开始,这名字和它的职责也相同。Activity在这个阶段已经出现在前台并且可见了。
onPause:pause表示暂停,当Activity要跳到另一个Activity或应用正常退出时都会执行这个方法。此时Activity在前台并可见,我们可以进行一些轻量级的存储数据和去初始化的工作,不能太耗时,因为在跳转Activity时只有当一个Activity执行完了onPause方法后另一个Activity才会启动,而且android中指定如果onPause在500ms即0.5秒内没有执行完毕的话就会强制关闭Activity。
onStop:stop表示停止,此时Activity已经不可见了,但是Activity对象还在内存中,没有被销毁。
这个阶段的主要工作也是做一些资源的回收工作。

3.2.1、在AActivity界面点击按钮后,跳转到BActivity界面,各个activity的生命周期回调顺序
答:(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop

3.2.2、在A界面点击按钮后,即startActivity(B)之后调了finish()方法,各个activity的生命周期回调顺序
答:(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop→(A)onDestory

3.2.3、在A界面,启动了一个透明的B界面,各个activity的生命周期回调顺序
答:(A)onPause→(B)onCreate→(B)onStart→(B)onResume

3.2.4、在A界面,启动了一个Dialog,activity的生命周期回调顺序
答:不会回调任何函数。

3.2.5、在A界面,启动了一个主题是Dialog的B界面,各个activity的生命周期回调顺序
答:(等测试)

4、算法题(占面试时间20%)

面试特点:链表相关算法必须顺便,大厂常考题目,可以刷leetcode里的题目,要自己动手写,别光看题目和解析,只有自己真正思考题目,模拟考试了,才知道自己的核心问题出在哪,怎么提升

4.1、两个双向链表,返回第一个相同节点

答:解题思路:
4.1.1、寻找返回结果的特性:
第一相同节点后的内容,两个链表后半段内容都一样
4.1.2、如果是基于多个数据的计算,先对齐数据关键特性:
这里的关键特性就是链表的长度,便于依次对比节点相等
解决方案就是:获取链表长度,先遍历长的链表,让两个链表长度对齐
4.1.3、遍历数据,指针概念:
这里使用双指针概念,一个指针遍历短的链表,另外一个指针遍历长的链表

参考答案:
public ListNodetest(ListNode listNode1, ListNode listNode2) {
    if ((listNode1 ==null) || (listNode2 ==null)) {
        return null;
    }
    int length1 = length(listNode1);
    int length2 = length(listNode2);
    ListNode shortListNode = length1 > length2 ? listNode2 : listNode1;
    ListNode longListNode = length1 > length2 ? listNode1 : listNode2;
    int offset = Math.abs(length1 - length2);
    for (int i =0; i < offset; i++) {
        if (longListNode ==null) {
            return null;
        }
        longListNode = longListNode.next;
    }
    while ((longListNode !=null)
        && (shortListNode !=null)
        && (longListNode.next != shortListNode.next)) {
            shortListNode = shortListNode.next;
            longListNode = longListNode.next;
    }
    return longListNode;
}

private int length(ListNode listNode) {
    ListNode temp = listNode;
    int length =0;
    while (temp !=null) {
        length++;
        temp = temp.next;
    }
    return length;
}

5、其他大厂有面试,但是字节面试官没有提到的内容

java虚拟机相关:内存模型,GC回收机制,同步处理volatile、synchronize
排序算法
线程池:彻底理解Java线程池原理篇
android其他相关的:ANR原理,AIDL原理

总结:
1、面试官人很好,可以有你来主导部分面试内容,需要准备好项目经验,突出项目难点,痛点;
2、准备好三方能力的原理,有深入了解过设计思想,实现方式,是加分项
3、算法题,可以事先和面试官沟通,解题思路,如果有重大漏洞,及时想第二种方案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,717评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,886评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,531评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,594评论 2 9