Android面经:小厂被diss到自闭,“试水”大厂竟收3份offer!(附100道面试真题分享)

Activity任务栈以及taskaffinity

  • Service

Service存在的意义是什么

startService和bindService的生命周期

startService和bindService的区别

startService和bindService分别适合应用在什么场景

Service可以执行耗时操作吗

IntentService和Service的区别

Service和线程都可以用来执行后台任务,为什么选Service不选线程,明明线程用起来更简单

  • broadcastreceiver

广播的原理是什么

  • View的绘制流程

详细讲一下View的绘制流程有哪些

View的第一次绘制是怎么调到的

View的后续绘制是怎么调用的

View的onMeasure,onLayout,onDraw都分别用来干什么

除了上面三个,还有哪些关键的方法

invalidate的原理

invalidate和requestlayout的区别

requestlayout的作用范围是多大

一个View被添加后第一个回调的方法是哪个(onAttacthToWindow)

为什么View.post能拿到view的宽高

讲一些字节做过的自定义VIew的例子

  • 触摸事件分发

讲一下Android事件分发的流程

怎么处理滑动冲突

怎么判断手势

讲一些自己做过的处理滑动冲突的原理

事件分发

handler这套机制的原理

IdleHandler是什么

handler的postDelay怎么实现的

Message有个缓存池,缓存池大小是多少知道吗

MessageQueue的中没有消息的时候为什么不会ANR

知道epoll的底层原理吗

epoll是阻塞的吗

  • ANR

ANR是什么

ANR的原理

什么情况下会发生ANR

如何检测是否发生了ANR

  • SharedPreference

SharedPreference原理

SharedPreference的优化

SharedPreference的commit和apply区别

什么情况下会选择用SharedPreference

  • 序列化

Serlizeable和Parceable的区别

什么情况下选择用哪个,为什么

有没有了解过别的序列化方法

RecyclerView

RecyclerView的缓存机制

RecyclerView和ListView对比

Recycler是怎么进行回收和复用的

LayoutManager怎么进行布局的

  • 内存泄漏

内存泄漏的常见场景

怎么检查内存泄漏

  • Binder

Binder原理

Binder比起其他跨进程的通信方式好在哪

网络

  • HTTP报文格式

  • HTTP在网络体系架构中的意义是什么

  • HTTPS和HTTP的区别

  • 对称加密和非对称加密

  • TLS四次握手的过程

  • CA是干什么的

  • 校验证书的详细过程

  • HTTPS一定是安全的吗

  • TCP和UDP的区别(高频)

  • HTTP1.0,1.1,2.0的区别

  • 有没有实际了解过HTTP2.0到底比1.1快了多少

  • 详细解释“Keep-Alive”有什么用

  • UDP为什么比TCP快(存在误导,UDP不一定比TCP快)

  • UDP可以进行广播为什么TCP不行

  • 为什么要三次握手,四次挥手

  • 为什么握手仅需要三次而回收需要四次

  • HTTP是基于什么协议的(一般来说是TCP,可以借此引出QUIC,KCP等协议进行进一步的探讨)

操作系统

  • 线程间通信方式

  • 线程的几种状态

  • 进程间通信方式

  • 线程和进程的区别

设计模式

设计模式没有必要全都看,重要的是你会的几种设计模式他们的优点是什么,缺点是什么,在哪些常见的地方用到了他们,要能够举一反三,例举几个我面试时常说的。

  • 单例——单例一定要特别熟,特别高频,尤其是DCL为什么这么写,synchronized为什么那么加,有什么讲究,volatile在这个地方起到了什么作用,不加会导致什么问题。静态内部类的单例怎么能够保证线程安全。等等。

  • Builder——常见,知道什么时候用就行了

  • 责任链——要能扩展到Android的事件分发,okhttp的拦截链等。

  • 观察者模式——要能知道Android中哪些地方用到了观察者,什么情况下使用。比如广播机制就使用的是观察者

  • 享元模式——要知道享元模式是为了避免重复创建对象而导致的开销,Message,String,线程池都是这样的设计思想。

  • Adapter——要能想到ListView和RecyclerView,以及为什么他们设计的时候要用Adapter

  • 代理模式——静态代理,动态代理

算法(手撸代码)

就算法来说,其实大部分公司(除了字节和腾讯)问的都不是很难,一般都集中在数组和链表上,基本就是剑指offer难度甚至直接就是原题。

  • 移动零——一个数组有0和其他数,不更改原本其他非0数字的顺序,把0都移到数组最末位(猿辅导)

  • 手写栈(伴鱼)

  • 数组中只出现一次的数字——剑指原题(伴鱼)

  • 判断链表是否有环(顺丰,腾讯,美团)

  • 有环链表环的长度(腾讯)

  • 反转链表(腾讯)

  • 一道贪心——题目太长了且没有原题(腾讯)

  • 字符串转数字(百度)

  • 回字形打印数组(老虎证券)

  • 插入5(https://www.lintcode.com/problem/188/)(老虎证券)

  • 斐波那契数列(美团)

  • 手写DCL单例(字节)

  • 二叉树路径和——从根节点到叶子节点是否有一个路径之和等于给定值(字节)

  • 最短子数组长度——滑动窗口(字节)

  • 手写观察者模式(字节)

  • 两个栈实现队列(字节)

  • 获取一个VIewGroup的最深深度(美团)

设计题

设计题这个部分其实大部分并没有标准答案,更多的是看以你的知识量能够想到什么比较好的解决方案。

  • 设计进程安全的SharedPreference(字节,腾讯)

  • 设计一个gif加载框架(微博)

  • 一个进程只有读操作,一个进程只有写操作,你怎么设计(微博)

  • 如果一个APP需要有闲时加载任务的能力,你怎么设计(美团)

  • 让你设计一个流式标签布局你怎么做,有哪些要考虑的点(最右)

  • 设计一个下拉刷新的RecyclerView你有几种方法(美团)

  • APP使用经常会有弱网环境,怎么确保APP数据的即使同步更新以及正确性(顺丰)

  • 让你设计一个push的框架,你会怎么设计,考虑到哪些问题(百度)

  • 设计一个检测内存泄漏的框架(腾讯)

  • 设计一个事件总线(最右)

项目

在项目上,一定要能做到融汇贯通,不仅从技术上也要从业务上。比如你做过的一个需求,为什么要做这个需求,这个需求的背景是什么,这个需求上线后带来了什么影响或者有哪些收益,虽然你是个技术,但是你能够知道这写得话肯定是更好的。

其次在技术细节上,要能知道为什么要这样技术选项,这么做的好处是什么,以及能够横向纵向拓展。比如说我的项目中有一个地方用JobService实现了定时任务,那么可以横向拓展的点就有,Android中实现定时任务的方式都有哪些,他们都有哪些好处坏处,你的这个场景为什么要选JobService,JobService和普通Service的区别是什么。

纵向扩展的话就有,JobService的原理是什么,JobService在参数配置上的一些细节,JobService是不是会严格按照你配置的时间运行。这些都是可以扩展出来的,所以当你在对项目复盘的时候,一定不要只盯着你做的那一部分,还要把自己做的部分横纵拓展一下,这样才能做到无懈可击。

最后

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤…所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!

最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!

进阶学习视频

[外链图片转存中…(img-IsoCyTyl-1714876595049)]

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-J50zxKjb-1714876595051)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值