android字节转m,阿里钉钉,字节抖音 Android 面经分享!

原标题:阿里钉钉,字节抖音 Android 面经分享!

微信改了推动机制,真爱请星标本公号

公众号回复加入BATcoder技术群BAT

原文链接:https://cloud.tencent.com/developer/article/1604727

前段时间,在网上看到一篇面经,是阿里钉钉和字节抖音面试的,觉得挺不错的,分享给大家。

阿里巴巴 -- 钉钉部门

阿里钉钉一面(面试时长80min)

自我介绍,对自己项目的介绍,架构图呈现

因为说自己以后的发展方向是音视频,所以问了我用过哪些现有框架

项目中的一些优化问题,MVC -> MVP,Handler的内存泄漏情况分析等,对MVP和MVVM的理解。

项目中的第三方库选择的问题,因为简历中写了我对第三方库选择的问题,比如选ObjectBox和greenDao的问题,图片加载框架问题

HashMap和HashTable,引申ConCurrentHashmap的深入,version1.7和1,8的区别,以及高并发下HashMap发生的问题

四大启动模式,以及场景对应

Handler的机制介绍,不存在消息时的IdleHandler的运作机制,为什么不能在子线程初始化问题

设计模式中的单例介绍,使用场景(Okhttp的Seesion存储等等),在线编写

快排算法

OkHttp的源码分析,及整体架构的流程图绘制

四大组件的完整介绍,及深入,答了IntentService、LocalBroadcast

四大引用的问题和MVP框架相结合进行回答

网络中的响应码对大体进行回答,具体回答了200、404、500、304等

View绘制流程问题,如何不使用xml,来实现中间位置的定位

关于为什么选用mqtt协议的问题,优势,原理等等(没答上来,只说针对性做过测压,以及oceanlink和mqtt的对比)

阿里钉钉二面(面试时长30min)

自我介绍,优缺点的,以及未来希望的发展方向

目整体介绍,如何做到分压啊之类的问题

如果给我阿里、腾讯、头条、谷歌的offer的一个选择(不掺杂地域性的问题),首先直接否定了google我就的一个企业的商业模式进行分析。

我对钉钉这个产品的理解,我的回答是就的是钉钉前身的对标项目微信,已经后期转型的商业模式作出的分析,最后给出的我的结论是一个企业性质的办公软件

给出了钉钉一个mac平台的关于共享屏幕的耗CPU的问题

让我提问,提的是关于音视频发展方向的问题,具体是一个发展空间。

阿里钉钉三面(面试时长60min,有概率通,要等hr)

自我介绍呗,还是一样,项目介绍,项目的优缺点对比

对MVC和MVP的理解,还有Handler的内存泄漏问题具体是什么,解决方案知道有什么,空数据的时候Handler的阻塞问题,但是我还是没在Looper的源码中找到,这里让我好好再看一下。

另外为什么使用MVP,他的优势是什么,内存泄漏是什么样的。

http的长连接和短连接这两个概念,怎么去理解。我把它理解为持久化连接是什么,然后对http的3个版本的主要区别做一个介绍

http一整个流程,什么Baidu.com输入,经过了什么。比较简单的问题了,必答内容DNS、TCP的三次握手、四次挥手,当然我再答一些IP路由、链路还有物理层的内容

RecyclerView的一个复用机制,和ListView的一个区别在哪里

HashMap、ConcurrentHashMap、Hashtable的问题,数据结构,线程安全啊之类的问题了,当然还是考了version 1.7和1.8。

一个app的启动流程,冷启动和热启动,我说底层我不太了解,只知道会有AMS去调一些东西,但是具体内容不知道,后面就是一些初始化和Activitiy生命周期问题了。

一到算法题三值之和求目标值,没写暴力,因为大家都会写,但是浪费了很多时间,刚开始是通过二值求和的方式,但是想做成O(n),其实不太可能,后面改成了O(n^2)

字节跳动 -- 抖音部门

字节抖音一面(面试时长50min)

接口和抽象的理解

进程和线程的理解

各种单例创建的理解,以及DCL的同步机制为什么这么做,其他的设计模式知道的,以及应用场景。

MVP和MVVM的理解,P层它主要做什么工作,你如何实现的M、V、P三层的通信。

Handler的工作流程,Handler能否在子线程初始化以及用什么方案来替代Handler的在子线程初始化。

JVM的组成成分,以及你对四大引用的理解

四大启动模式的启动方式以及场景分析,如过一个按钮对应页面跳转,如何点多次只进行一次跳转,两种方式回答

对http和https的理解

Broadcast和LocalBroadcast他的一个区别

Static变量他的用处是什么,具体应用场景。

一道两个链表的相加问题。思路+伪码实现(这里和阿里不一样,因为是牛客的平台,其实编码体验没有特别好,面试官让我用伪码来实现思路就可以了) 字节抖音二面(面试时长70min)

先自我介绍,问项目,老样子的MVP、MVC的理解,Handler中的内存泄漏

重点要讲Handler的内存泄漏,为什么会引起内存泄漏?(源码角度分析)解决方案有哪些?(说了三种)

为什么我的库中的MVP要基于范型实现,实现思路,还有泛形擦除(主要说了公共逻辑抽离这一块的内容)

对View自定义的一个了解

基于对网盘的理解,让我分析上传、下载这两块的内容,让我来做,会做什么样的处理,启发内容见下文:

关于上传方面:定时上传和立刻上传两方面的分析,针对的是数据量的大小

关于下载方面:线程安全(voliate / sync),线程池的使用,参数理解等等,断点重传的问题,应该怎么去进行实现。

还有整个的如果Activity突然断了,或者被kill了,如何对数据或者下载的位置进行保存

ButterKnife原理实现

一道深度遍历和公共节点寻找的题(给出了复杂度极高的方案,面试官给了好的方案,但是问题停留在了公共节点寻找) 字节抖音三面(面试时长70min,有概率通,要等hr)

问了项目架构,觉得项目有什么样可以升级的地方

泛型擦除,通配符的问题,主要做了extends和super的回答

从哪里了解的 objectBox ,和 greenDao 相比觉得他有什么样的优点,性能有进行过测试嘛(只看过官方数据),图像加载框架的选用。

从内存泄漏问题推倒到jvm的深层次问题,可达性分析的 GC Root 有什么,虚拟机栈和堆的关系,方法是怎么实现的。

问我觉得自己的优势是什么,说了我对一些框架的理解

对 Kotlin 和 Flutter 的一个了解程度的理解,还有为什么学习的一个现实原因,和学习方法。

数学题了,类似于斐波那契数列,但是关系式还没推倒出来。

用循环的方式去实现一个先序遍历,说的一些方案不用写代码。

以上就是钉钉和抖音的面试经历,如果有什么我没有思考到的地方或是文章内存在错误,欢迎与我分享。

最后

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

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个

还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~

·················END·················

• 耗时2年,Android进阶三部曲第三部《Android进阶指北》出版!

• 『BATcoder』做了多年安卓还没编译过源码?一个视频带你玩转!

• 引入Jetpack架构后,你的App会发生哪些变化?(建议收藏)

• 重生!进阶三部曲第一部《Android进阶之光》第2版 出版!

BATcoder技术群,让一部分人先进大厂

大家好,我是刘望舒,腾讯云最具价值专家TVP,著有畅销书《Android进阶之光》《Android进阶解密》《Android进阶指北》,蝉联四届电子工业出版社年度优秀作者,谷歌开发者社区特邀讲师,百度百科收录的技术专家。

前华为面试官,现大厂技术负责人。

想要加入BATcoder技术群,公号回复BAT即可。

为了防止失联,欢迎关注我的小号

微信改了推送机制,真爱请星标本公号👇返回搜狐,查看更多

责任编辑:

本书是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。本书从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层开发过程,融会贯通,介绍一些比较深入的知识点;第三,介绍一些核心技术和Android的性能优化思想。 第1章 Activity的生命周期和启动模式 1 1.1 Activity的生命周期全面分析 1 1.1.1 典型情况下的生命周期分析 2 1.1.2 异常情况下的生命周期分析 8 1.2 Activity的启动模式 16 1.2.1 Activity的LaunchMode 16 1.2.2 Activity的Flags 27 1.3 IntentFilter的匹配规则 28 第2章 IPC机制 35 2.1 Android IPC简介 35 2.2 Android中的多进程模式 36 2.2.1 开启多进程模式 36 2.2.2 多进程模式的运行机制 39 2.3 IPC基础概念介绍 42 2.3.1 Serializable接口 42 2.3.2 Parcelable接口 45 2.3.3 Binder 47 2.4 Android中的IPC方式 61 2.4.1 使用Bundle 61 2.4.2 使用文件共享 62 2.4.3 使用Messenger 65 2.4.4 使用AIDL 71 2.4.5 使用ContentProvider 91 2.4.6 使用Socket 103 2.5 Binder连接池 112 2.6 选用合适的IPC方式 121 第3章 View的事件体系 122 3.1 View基础知识 122 3.1.1 什么是View 123 3.1.2 View的位置参数 123 3.1.3 MotionEvent和TouchSlop 125 3.1.4 VelocityTracker、GestureDetector和Scroller 126 3.2 View的滑动 129 3.2.1 使用scrollTo/scrollBy 129 3.2.2 使用动画 131 3.2.3 改变布局参数 133 3.2.4 各种滑动方式的对比 133 3.3 弹性滑动 135 3.3.1 使用Scroller 136 3.3.2 通过动画 138 3.3.3 使用延时策略 139 3.4 View的事件分发机制 140 3.4.1 点击事件的传递规则 140 3.4.2 事件分发的源码解析 144 3.5 View的滑动冲突 154 3.5.1 常见的滑动冲突场景 155 3.5.2 滑动冲突的处理规则 156 3.5.3 滑动冲突的解决方式 157 第4章 View的工作原理 174 4.1 初识ViewRoot和DecorView 174 4.2 理解MeasureSpec 177 4.2.1 MeasureSpec 177 4.2.2 MeasureSpec和LayoutParams的对应关系 178 4.3 View的工作流程 183 4.3.1 measure过程 183 4.3.2 layout过程 193 4.3.3 draw过程 197 4.4 自定义View 199 4.4.1 自定义View的分类 200 4.4.2 自定义View须知 201 4.4.3 自定义View示例 202 4.4.4 自定义View的思想 217 第5章 理解RemoteViews 218 5.1 RemoteViews的应用 218 5.1.1 RemoteViews在通知栏上的应用 219 5.1.2 RemoteViews在桌面小部件上的应用 221 5.1.3 PendingIntent概述 228 5.2 RemoteViews的内部机制 230 5.3 RemoteViews的意义 239 第6章 Android的Drawable 243 6.1 Drawable简介 243 6.2 Drawable的分类 244 6.2.1 BitmapDrawable 244 6.2.2 ShapeDrawable 247 6.2.3 LayerDrawable 251 6.2.4 StateListDrawable 253 6.2.5 LevelListDrawable 255 6.2.6 TransitionDrawable 256 6.2.7 Ins
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值