android高阶面试题,20场面试斩获大厂offer,目前最稳定和高效的UI适配方案

美团总体的面试过程是比较顺利的,一面和二面的面试题目都回答得七七八八。而且有了前面的面试经验,此时表达更加清晰、语速也没有那么快了。在4.8号美团HR打电话通知面试通过了。但是到了此时,面试情况已经和三月20号那会不一样了。至于为什么,这还要从也是在三月下旬开始面试的蚂蚁开始讲起。

在三月初我经过内推投递了蚂蚁的一个部门。蚂蚁的简历筛选阶段非常久,筛选了半个多月。我一直以为我跟蚂蚁无缘了,简历没过去。直到23号,面试官打电话过来询问了一些我的情况,项目、学习情况等等。然后25号跟我约了26号的一面。对于蚂蚁这个部门,我是真的没有抱希望能过的。前面经过了字节与腾讯的打击,这会已经信心大折。我想着:去体验一下卷中卷的部门,感受被刷的快乐。给你们看看我当时的聊天记录:

之后在26号进行了蚂蚁的一面,总体难度还是比较高,问到了比较多的一些优化、缓存的内容。而这一部分我接触得不多,大多是靠推理、猜测来回答的,也回答得不是很好。后面还跟面试官聊了一些博客相关的内容。面试完之后我觉得悬了,就也没抱着活的希望。接着就在31号上午收到了蚂蚁的电话,约了下午的面试。[oh my god, amazing]

蚂蚁二面是比较特殊的,一共有两个面试官:一个是技术面试官,另一个是HR。技术面试官先提问了一会,大概15分钟吧;之后是HR跟我聊,也是聊了15分钟。主要问的内容都是在了解我的情况,例如工作室如何、成绩如何、怎么学习、怎么管理时间、博客等等。给我印象比较深刻的是这个HR姐姐。和其他企业的HR不同的是,面试过程中就像在和一个朋友聊天,了解我的学习以及周边环境的情况,还会给我反馈表达她对我的印象。

然后在4月2号,面试官加了我微信,给我补了笔试的内容,就是做算法题。过了两天,收到了蚂蚁的录用喜报!!!当时掐了一下大腿,没在做梦。。。

再拐回来说一下腾讯和字节跳动的后续。腾讯在3.24进行了一面、3.29进行了二面、4.2进行了三面、4.13进行了HR面试。前面的速度是比较快的,只是HR可能比较忙,所以一直没约上,隔了比较久。字节跳动在4.1一面、4.6二面、4.9三面、4.14HR面,半个月完成了4个面试,速度比之前的也快了很多。

前面还讲到了三月初投递的虎牙,但虎牙的速度是真的慢,我甚至以为我的简历被筛选掉了。直到四月份才开始约面试。

虎牙在4月6号进行了一面,隔了几天约了线下二面,也是终面。但此时我已经有意向的企业,就拒绝了面试。

整个面试流程,给我最大的感触是: 不尝试,永远是0;尝试了,概率再小,都有可能是1 。

故事到这里就讲完了。诶,怎么没说去哪个公司了?哈哈,你猜我去哪了?

知识总结


面试中会被考察的具体问题有三个影响因素: 部门需求、简历、面试中提到的知识点 。因此不同的部门不同的面试者遇到的面试题很可能是完全不一样的,这也是我为什么不直接把面试题放出来的原因,没有多大的参考价值。

这一部分主要总结在面试中被考察到的知识点,多为高频面试问题,读者可以自行考察是否这些知识都掌握了。需要特别注意的是这 并不是全部的知识体系,仅仅是笔者遇到的面试题 ,读者可以按照大体的方向去学习,但切不可认为这样就足够了,这里提到的知识点是 远远不够的。

面试的过程中更多的时候不会单纯地考察知识点,而是会结合一些需求或者业务场景来多方面考察对知识点的理解。因此笔者建议,对于知识点要以理解为首要任务,而不是背诵答案。

Android

总体来说,本次春招问的android内容其实不多,主要还是看着我的简历问,简历写得不多,问得也就比较少。但android的基础内容如handler、view机制等还是要会的,其他的有更加深入的研究可以写在简历加分,如Binder、系统服务、优化等。

  • Activity
  1. Activity启动流程。其中考察最多的类似问题是:【从桌面点击一个图标之后,到界面显示,这个过程发生了什么?】。很多时候面试官会结合activity生命周期来考问:在启动流程的哪些阶段哪些生命周期被回调,此时Activity状态如何。

  2. 启动模式。也就是常见的四种启动模式,但面试官更喜欢问何时使用他们,也就是使用场景。

  3. 生命周期。这个很少单独问,一般和启动流程或者具体的业务场景结合考问。

  4. context。主要是内存泄露的考察以及application和activity两种context如何选择。

  • Handler
  1. 内部原理。Handler必会的啊,android的消息机制,可以称为android程序的引擎来的。

  2. 同步屏障。涉及到绘制优化、屏幕刷新机制等。

  3. 阻塞唤醒原理。这里一般是会问为何 loop() 方法是死循环却不会占用cpu时间片 or 为何 next() 方法阻塞却不会卡死。更深一点会问到Linux的IO多路复用 epoll 原理。

  4. 卡顿与内存优化。整个主线程的所有任务都必须经过Looper,是排查卡顿和ANR的关键点,以及消息太多会造成的后果等。

  5. 消息复用。

  • 图片
  1. 计算一张图片大小。分辨率x像素点大小,考察得很多次。

  2. 加载优化。如LaunchActivity同时加载的图片太多如何优化、view的大小比图片小如何优化等。

  3. 缓存优化。内存缓存、硬盘缓存。

  4. Glide框架。重点就是Glide对上面的优化的实现原理,因此需要着重看Glide的缓存原理。

  5. drawable。对比使用图片和drawable的好处,以及drawable的原理。

  • SharePreference
  1. 内部原理

  2. commit和apply的区别

  3. 这部分考察得不多,但建议读者可以深入理解sp的缺点,如导致ANR原理,以及新框架MMKV、Data Store的优点。

  • window

考察得非常少,主要window的类型、以及window的真正定义理解即可。

  • view
  1. 事件分发流程。考察得最多,基本把整个分发流程讲清楚就好了;其次还会考察如何解决具体的冲突场景。

  2. 应用界面的view层级。

  3. 绘制流程与时机。activity启动时到onResume方法被调用,view依旧还未被绘制。

  • IPC
  1. 常见IPC类型以及优缺点。

  2. Binder机制。优点、缺点、特点、和传统IPC比较。Binder涉及到的很多是偏底层,更多的时候考察的是上层的应用,如和socket比较等。

  3. socket。这个会重点问,涉及优缺点、使用场景、和binder相比等。

  • 序列化
  1. serializable和parcelable的原理,以及各自的优缺点、应用场景。
  • jetpack
  1. 使用jetpack的好处与坏处。

  2. 框架原理。这部分如果写在简历也很少问,看面试官;但如果问的话,一般会问原理。

  • okHttp
  1. 拦截器以及责任链思想。这个是问的最多的。

  2. 内部调度器对线程、任务数的并发控制。

  3. 优点缺点,和URLConnection相比的好处,诞生的背景等。

  • 优化
  1. 性能优化。问得很多,主要看自己平时有没有做过优化。

  2. 卡顿优化。一般询问如何定位和解决卡顿问题。

  3. 内存优化。一般是内存泄露、或者减少内存占用等。

  4. ANR。一般会考察原理以及如何解决。

  5. 工具:leakcanary、profiler。优化涉及的内容太多,这个属于比较深的内容,还是得看自己平时的项目积累。

Java


Java的考察是一个非常考验功底的地方,很多的知识点都是基础中的基础,同时又都可以延伸到底层的逻辑。这些知识点在实际的运用中,也有很多的情况需要考虑,考察我们对于知识点的运用。例如线程池,可以从参数作用、到线程池原理、到阻塞唤醒机制、到实际项目的参数配置,有非常多的知识点可以考察。因而这一块就看各位的造诣了。

当然,一些基础或者常考的知识点还是得会的。

  • 集合框架
  1. HashMap。几乎每家公司都问,主要是内部原理如hash算法、冲突解决方案、扩容方案、红黑树的优缺点等。必会的内容,不会就直接当场去世了。

  2. HashSet。内部使用HashMap来实现,value设置为object。记住这个就好了。

  3. ConcurrentHashMap。必问。他的并发原理以及好处,同时有些面试官也会问缺点等问题。

  4. Hashtable、SychronizeMap。一般和ConcurrentHashMap一起问,进行对比。

  5. CopyOnWriteArrayList。一般会作为线程安全方法来进行比较优缺点。

  6. 集合框架重点还是在Map,但是其他的框架List和queue的原理也是要了解的。

  • 访问限制符

public protect default private 四个要懂,基础知识了。(笔者就是忽略了这些当时回答错了)特别注意protect是可以跨包访问的。

  1. 4种内部类,特别注意每个class编译后都会产生一个class文件,不管静态或非静态。面试踩坑了

  2. lambda的本质。就是匿名内部类。

  3. 抽象类和接口的区别。这个很看理解,如果有开发过具体项目的会回答得更加深刻,这是背八股文体现不出来的。

  • 异常
  1. 异常体系、分类、机制。

  2. 与error的区别。

  • IO

主要还是问NIO的原理以及优缺点。建议把缓冲流的原理也得学一学并进行比较。

  • 线程池
  1. 内部原理。必会的啊。

  2. 关键参数作用及如何配置。重点在如何配置,需要结合具体的机器情况、任务情况等等考量。

  3. 线程池的作用。不仅仅只是线程复用,更重要的是管理线程、控制线程数量。这个也比较考察具体的项目运用理解。

  4. 常见的四种线程池。

  • 并发
  1. sychronize。必问,java的锁机制。特别是jdk6之后的锁优化以及运用场景。为什么是重量级的、JVM层如何实现如果了解可以加分。

  2. Lock。必问,AQS的原理最好懂。一般会拿来和synchronize比较。

  3. volatile。必问,会拿来和锁比较,他的两个重要作用。更深点会问到cpu缓存一致性协议、以及指令重排的类型与原理。

  4. CAS。必问,问原理以及ABA问题。

  5. 死锁。一般询问如何解决或者产生的条件。

  6. Object的wait和notify。阻塞唤醒,一般会用一个代码或者具体的场景来询问如何保证多线程同步。

  7. ThreadLocal。原理、内存泄露等

  8. 这一块问的还是比较多,而且大都可以深入去问,看自己的学习程度了。

  • JVM
  1. GC机制。必问。

  2. 类加载机制。必问,同时还会问双亲委托机制。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

尾声

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Android核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、热修复设计、插件化框架解读、组件化框架设计、图片加载框架、网络、设计模式、设计思想与代码质量优化、程序性能优化、开发效率优化、设计模式、负载均衡、算法、数据结构、高级UI晋升、Framework内核解析、Android组件内核等。

不仅有学习文档,视频+笔记提高学习效率,还能稳固你的知识,形成良好的系统的知识体系。这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

Android进阶学习资料库

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

image

大厂面试真题

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

《2017-2021字节跳动Android面试历年真题解析》

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

+移动架构视频+大厂面试真题+项目实战源码》]( )收录**

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值