百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

2022年 Android 面试题(四大组件、UI、性能调优、kotlin ......)

xsobi 2024-12-11 17:49 17 浏览

近十几年来,随着以 Android 系统为代表的智能手机普及与发展,互联网行业早已进入“移动”的时代。但是现如今整个移动互联网行业正处于增量下降、存量厮杀的阶段。

在如此的大环境下,整个行业头部企业,越来越重视产品的体验与成本,对中高级的开发者的能力要求也越来越高。

同时,很多小公司倒闭,大把公司招不到人,还有一点大家多多少少可能都听到或看到一些信息,就是好多公司在优化裁员。

作为求职者来说,面试是一道坎,很多人会恐惧面试,即使是工作很多年的老鸟,可能仍存在面试的焦虑。

与其焦虑,不如行动

面试一般都是基于你的简历来进行的,一般先考察你的基础,然后考察你知识体系的完备程度,接着会考察你的极限,最后还会考察一些软技能,比如你的学习能力、协作能力、沟通能力、分析解决未知问题的能力、抗压能力等。

准备周期

面试之前,最好先系统地复习一下基础知识,然后再复盘下自己的项目经历,把亮点都发掘出来。复习周期个人建议是1-3个月(现在正是准备金三银四的好时间),时间不宜太久,久了就容易懈怠或者闭门造车。

复习计划的制定和进度的把控也很重要,可以参考别人的学习计划去学习,再根据自己的实际情况去做适当的调整。

复习技巧

  • 学习没有捷径可言,一定要去实践。对于程序员而言,不单单是死记硬背,我们有更好的方式去学习,比如写demo去验证,比如学习源码的过程中,一定要自己去翻看源码,多翻几遍看熟了再说。
  • 好记性不如烂笔头。学习笔记很重要,不仅要记笔记,还要写心得体会,文字笔记、画图、总结等,方式很多,但是一定要自己认真去做,不要太相信自己的记忆,只有反复记忆,加深理解才行。
  • 在复习的过程中,都是从一个个小的知识点开始学的,复习到一定阶段,可以尝试着去把这些东西串联起来,由点及面,形成知识体系
  • 复习知识点时,要及时跟你做过的项目结合起来,这样在面试时就知道怎么聊了,由项目讲到知识点,由一个知识点串联到另一个知识点。

答题技巧

  • 面试总体上是一个你跟面试官相互了解、相互交流的过程,大厂的面试官一般都很好,如果你遇到不会的问题了,可以及时请教对方,不会了就问,不要怕丢面子,面试本就是一个学习和相互交流的过程。
  • 有些时候某些技术或者知识点你不了解细节,但是大体的设计思路你是知道的,你就尽可能地答出你的理解,可以用横向的类似的技术去阐述这个技能点。
  • 如果某个知识点一时半会想不起来了,可以迂回一下,跟递推公式一样,根据你擅长的知识点,一步一步去推导,先大胆假设,再小心求证,推导的过程也能说明一些问题。

中高级 Android 面试题

第一章 Java 方面

(一)Java 基础部分

  1. 抽象类与接口的区别?
  2. 分别讲讲 final,static,synchronized 关键字可以修饰什么,以及修饰后的作用?
  3. 请简述一下String、StringBuffer和StringBuilder的区别?
  4. “equals”与“==”、“hashCode”的区别和使用场景?
  5. Java 深拷贝与浅拷贝的区别?
  6. 谈谈Error和Exception的区别?
  7. 什么是反射机制?反射机制的应用场景有哪些?
  8. 谈谈如何重写equals()方法?为什么还要重写hashCode()?
  9. Java 中 IO 流分为几种?BIO,NIO,AIO 有什么区别?
  10. 谈谈你对Java泛型中类型擦除的理解,并说说其局限性?
  11. String为什么要设计成不可变的?
  12. 说说你对Java注解的理解?
  13. 谈一谈Java成员变量,局部变量和静态变量的创建和回收时机?
  14. 请说说Java中String.length()的运作原理?

(二)Java 集合

  1. 谈谈List,Set,Map的区别?
  2. 谈谈ArrayList和LinkedList的区别?
  3. 请说一下HashMap与HashTable的区别
  4. 谈一谈ArrayList的扩容机制?
  5. HashMap 的实现原理?
  6. 请简述 LinkedHashMap 的工作原理和使用方式?
  7. 谈谈对于ConcurrentHashMap的理解?

(三)Java 多线程

  1. Java 中使用多线程的方式有哪些?
  2. 说一下线程的几种状态?
  3. 如何实现多线程的同步?
  4. 谈谈线程死锁,如何有效地避免线程死锁?
  5. 谈谈线程阻塞的原因?
  6. 请谈谈 Thread 中 run() 与 start() 的区别?
  7. synchronized和volatile关键字的区别?
  8. 如何保证线程安全?
  9. 谈谈ThreadLocal用法和原理?
  10. Java 线程中notify 和 notifyAll有什么区别?
  11. 什么是线程池?如何创建一个线程池?
  12. 谈一谈java线程常见的几种锁?
  13. 谈一谈线程sleep()和wait()的区别?
  14. 什么是悲观锁和乐观锁?
  15. 什么是BlockingQueue?请分析一下其内部原理并谈谈它的使用场景?
  16. 谈一谈java线程安全的集合有哪些?
  17. Java中为什么会出现Atomic类?试分析它的原理和缺点?
  18. 说说ThreadLocal的使用场景?与Synchronized相比有什么特性?

(四)Java 虚拟机

  1. 谈一谈JAVA垃圾回收机制?
  2. 回答一下什么是强、软、弱、虚引用以及它们之间的区别?
  3. 简述JVM中类的加载机制与加载过程?
  4. JVM、Dalvik、ART三者的原理和区别?
  5. 请谈谈Java的内存回收机制?
  6. JMM是什么?它存在哪些问题?该如何解决?

第二章 Android 方面

(一)Android 四大组件相关

  1. Activity 与 Fragment 之间常见的几种通信方式?
  2. LaunchMode 的应用场景?
  3. BroadcastReceiver 与 LocalBroadcastReceiver 有什么区别?
  4. 对于 Context,你了解多少?
  5. IntentFilter是什么?有哪些使用场景?
  6. 谈一谈startService和bindService的区别,生命周期以及使用场景?
  7. Service如何进行保活?
  8. 简单介绍下ContentProvider是如何实现数据共享的?
  9. 说下切换横竖屏时Activity的生命周期?
  10. Activity中onNewIntent方法的调用时机和使用场景?
  11. Intent传输数据的大小有限制吗?如何解决?
  12. 说说ContentProvider、ContentResolver、ContentObserver 之间的关系?
  13. 说说Activity加载的流程?

(二)Android 异步任务和消息机制

  1. HandlerThread 的使用场景和用法?
  2. IntentService 的应用场景和使用姿势?
  3. AsyncTask 的优点和缺点?
  4. 谈谈你对 Activity.runOnUiThread 的理解?
  5. 子线程能否更新 UI?为什么?
  6. 谈谈 Handler 机制和原理?
  7. 为什么在子线程中创建 Handler 会抛异常?
  8. 试从源码角度分析 Handler 的 post 和 sendMessage 方法的区别和应用场景?
  9. Handler 中有 Loop 死循环,为什么没有阻塞主线程,原理是什么?

(三)Android UI 绘制相关

  1. Android 补间动画和属性动画的区别?
  2. Window和DecorView是什么?DecorView又是如何和Window建立联系的?
  3. 简述一下 Android 中 UI 的刷新机制?
  4. LinearLayout, FrameLayout, RelativeLayout 哪个效率高, 为什么?
  5. 谈谈Android的事件分发机制?
  6. 谈谈自定义View的流程?
  7. 针对RecyclerView你做了哪些优化?
  8. 谈谈如何优化ListView?
  9. 谈谈自定义LayoutManager的流程?
  10. 什么是 RemoteViews?使用场景有哪些?
  11. 谈一谈获取View宽高的几种方法?
  12. 谈一谈插值器和估值器?
  13. getDimension、getDimensionPixelOffset 和 getDimensionPixelSize 三者的区别?
  14. 请谈谈源码中StaticLayout的用法和应用场景?
  15. 有用过ConstraintLayout吗?它有哪些特点?
  16. 关于LayoutInflater,它是如何通过 inflate 方法获取到具体View的?
  17. 谈一谈Fragment懒加载?
  18. 谈谈RecyclerView的缓存机制?
  19. 请谈谈View.inflate和LayoutInflater.inflate的区别?
  20. 请谈谈invalidate()和postInvalidate()方法的区别和应用场景?
  21. 谈一谈自定义View和自定义ViewGroup?
  22. 谈一谈SurfaceView与TextureView的使用场景和用法?
  23. 谈一谈RecyclerView.Adapter的几种刷新方式有何不同?
  24. 谈谈你对Window和WindowManager的理解?
  25. 谈一谈Activity,View,Window三者的关系?
  26. 有了解过WindowInsets吗?它有哪些应用?
  27. Android中View几种常见位移方式的区别?
  28. 为什么ViewPager嵌套ViewPager,内部的ViewPager滚动没有被拦截?
  29. 请谈谈Fragment的生命周期?
  30. 请谈谈什么是同步屏障?
  31. 谈一谈ViewDragHelper的工作原理?
  32. 谈一谈屏幕刷新机制?

(四)Android 性能调优相关

  1. 谈谈你对Android性能优化方面的了解?
  2. 一般什么情况下会导致内存泄漏问题?
  3. 自定义 Handler 时如何有效地避免内存泄漏问题?
  4. 哪些情况下会导致oom问题?
  5. ANR 出现的场景以及解决方案?
  6. 谈谈Android中内存优化的方式?
  7. 谈谈布局优化的技巧?
  8. Android 中的图片优化方案?
  9. Android Native Crash问题如何分析定位?
  10. 谈谈怎么给apk瘦身?
  11. 谈谈你是如何优化App启动过程的?
  12. 谈谈代码混淆的步骤?
  13. 谈谈如何对WebView进行优化?
  14. 如何处理大图的加载?
  15. 谈谈如何对网络请求进行优化?
  16. 请谈谈如何加载Bitmap并防止内存溢出?

(五)Android 中的 IPC

  1. 请回答一下Android进程间的通信方式?
  2. 请谈谈你对Binder机制的理解?
  3. 谈谈 AIDL?

(六)Android 系统 SDK 相关

  1. 请简要谈谈Android系统的架构组成?
  2. SharedPreferences 是线程安全的吗?它的 commit 和 apply 方法有什么区别?
  3. Serializable和Parcelable的区别?
  4. 请简述一下 Android 7.0 的新特性?
  5. 谈谈ArrayMap和HashMap的区别?
  6. 简要说说 LruCache 的原理?
  7. 为什么推荐用SparseArray代替HashMap?
  8. PathClassLoader和DexClassLoader有何区别?
  9. 说说HttpClient与HttpUrlConnection的区别?并谈谈为何前者会被替代?
  10. 什么是Lifecycle?请分析其内部原理和使用场景?
  11. 谈一谈Android的签名机制?
  12. 谈谈安卓apk构建的流程?
  13. 简述一下Android 8.0、9.0 分别增加了哪些新特性?
  14. 谈谈Android10更新了哪些内容?如何进行适配?
  15. 请简述Apk的安装过程?
  16. Java与JS代码如何互调?有做过相关优化吗?
  17. 什么是JNI?具体说说如何实现Java与C++的互调?
  18. 请简述从点击图标开始app的启动流程?

(七)第三方框架分析

  1. 谈一谈LeakCanray的工作原理?
  2. 谈一谈EventBus的原理?
  3. 谈谈网络请求中的拦截器(Interceptor)?
  4. 谈一谈Glide的缓存机制?
  5. ViewModel的出现是为了解决什么问题?并简要说说它的内部原理?
  6. 请说说依赖注入框架ButterKnife的实现原理?
  7. 谈一谈RxJava背压原理?

(八)综合技术

  1. 请谈谈你对 MVC 和 MVP 的理解?
  2. 分别介绍下你所知道Android的几种存储方式?
  3. 简述下热修复的原理?
  4. 谈谈如何适配更多机型的?
  5. 请谈谈你是如何进行多渠道打包的?
  6. MVP中你是如何处理Presenter层以防止内存泄漏的?
  7. 如何计算一张图片所占的内存空间大小?
  8. 有没有遇到64k问题,应该如何解决?
  9. 如何优化 Gradle 的构建速度?
  10. 如何获取Android设备唯一ID?
  11. 谈一谈Android P禁用http对我们开发有什么影响?
  12. 什么是AOP?在Android中它有哪些应用场景?
  13. 什么是MVVM?你是如何将其应用于具体项目中的?
  14. 请谈谈你是如何实现数据埋点的?
  15. 假如让你实现断点上传功能,你认为应该怎样去做?
  16. webp和svg格式的图片各自有什么特点?应该如何在Android中使用?
  17. 说说你是如何进行单元测试的?以及如何应用在MVP和MVVM中?
  18. 对于GIF 图片加载有什么思路和建议?
  19. 为什么要将项目迁移到AndroidX?如何进行迁移?

(九)数据结构方面

  1. 什么是冒泡排序?如何优化?
  2. 请用 Java 实现一个简单的单链表?
  3. 如何反转一个单链表?
  4. 谈谈你对时间复杂度和空间复杂度的理解?
  5. 谈一谈如何判断一个链表成环?
  6. 什么是红黑树?为什么要用红黑树?
  7. 什么是快速排序?如何优化?
  8. 说说循环队列?
  9. 如何判断单链表交叉

(十)设计模式

  1. 请简要谈一谈单例模式?
  2. 对于面向对象的六大基本原则了解多少?
  3. 请列出几种常见的工厂模式并说明它们的用法?
  4. 说说项目中用到的设计模式和使用场景?
  5. 什么是代理模式?如何使用?Android源码中的代理模式?
  6. 谈一谈单例模式,建造者模式,工厂模式的使用场景?如何合理选择?
  7. 谈谈你对原型模式的理解?
  8. 请谈谈策略模式原理及其应用场景?
  9. 静态代理和动态代理的区别,什么场景使用?
  10. 谈一谈责任链模式的使用场景?

(十一)计算机网络方面

  1. 请简述 Http 与 Https 的区别?
  2. 说一说 https,udp,socket 区别?
  3. 请简述一次 http 网络请求的过程?
  4. 谈一谈 TCP/IP 三次握手,四次挥手?
  5. 为什么说 Http 是可靠的数据传输协议?
  6. TCP/IP协议分为哪几层?TCP 和 HTTP 分别属于哪一层?

(十二)Kotlin方面

  1. 请简述一下什么是 Kotlin?它有哪些特性?
  2. Kotlin 中注解 @JvmOverloads 的作用?
  3. Kotlin中List与MutableList的区别?
  4. Kotlin中实现单例的几种常见方式?
  5. 谈谈你对Kotlin中的 data 关键字的理解?相比于普通类有哪些特点?
  6. 什么是委托属性?请简要说说其使用场景和原理?
  7. 请举例说明Kotlin中with与apply函数的应用场景和区别?
  8. Kotlin中 Unit 类型的作用以及与Java中 Void 的区别?
  9. Kotlin 中 infix 关键字的原理和使用场景?
  10. Kotlin中的可见性修饰符有哪些?相比于Java有什么区别?
  11. 你觉得Kotlin与Java混合开发时需要注意哪些问题?
  12. 在Kotlin中,何为解构?该如何使用?
  13. 在Kotlin中,什么是内联函数?有什么作用?
  14. 谈谈kotlin中的构造方法?有哪些注意事项?
  15. 谈谈Kotlin中的Sequence,为什么它处理集合操作更加高效?
  16. 请谈谈Kotlin中的Coroutines,它与线程有什么区别?有哪些优点?
  17. Kotlin中该如何安全地处理可空类型?
  18. 说说Kotlin中的Any与Java中的Object有何异同?
  19. Kotlin中的数据类型有隐式转换吗?为什么?
  20. Kotlin中集合遍历有哪几种方式?

篇幅有限,只展示知识点大纲和部分内容截图,以上知识点已整理成文档,需要《2022年Android中高级面试题必知百题》完整版(知识点 + 答案解析)的朋友可以点赞+【私信:面试题,免费领取!

相关推荐

高并发基础-一文带你了解Redis及其常见用法与应用场景

1.概述Redis是一个键值对存储的存储系统;一般用做缓存比较多,也可以将其作为数据库及消息中间件使用。传统应用中,数据存储在关系型数据库中,前端请求到来时通过SQL语句查询关系型数据库中的数据并返...

Python中的函数注释:参数有冒号,声明后有-> 箭头

我在查看python的fixture源码时发现fixture的方法定义形式如下:deffixture(fixture_function:Optional[_FixtureFunctio...

干货!SQL性能优化,书写高质量SQL语句

写SQL语句的时候我们往往关注的是SQL的执行结果,但是是否真的关注了SQL的执行效率,是否注意了SQL的写法规范?以下的干货分享是在实际开发过程中总结的,希望对大家有所帮助!1.limit分页优化...

一起学《C程序设计》第十课——结构体、共用体以及枚举类型

注意,请认真学习完《C程序设计(第五版)》第九章后再阅读本文会有更大的收获。结构体作用与定义前面我们学习过C语言的数组,C语言的数组在使用上有一定的局限性,比如我们常使用的一维数组一旦定义了就只能接纳...

8 种最坑的SQL错误用法,你有没有踩过?

来源:yq.aliyun.com/articles/725011、LIMIT语句2、隐式转换3、关联更新、删除4、混合排序5、EXISTS语句6、条件下推7、提前缩小范围8、中间结果集下推总结sq...

ArkTS基础语法:从声明到类型的深度解析

#ArkTS基础语法:从声明到类型的深度解析在鸿蒙应用开发的领域中,ArkTS作为重要的编程语言,其基础语法是开发者们必须掌握的关键内容。今天,我们就围绕ArkTS的声明和类型相关知识展开深入探讨,...

8 种最坑的 SQL 错误用法,你有没有踩过坑?

原文作者:程序员追风01、LIMIT语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type,name,create_time...

Python常用数据类型及其用法-总结篇

前言在前面的文章中,我们介绍了Python常用的数据类型及其相关方法,分别为:《Python列表详解》《Python元组与字典用法详解》《Python集合详解》《Python字符串》与我们软件开发或测...

贯穿知识点看“线”(名师知识点总结训):状语从句

添加关注不迷路!!!状语从句状语从句有时间、地点、原因、目的、结果、条件、方式、比较和让步状语从句,共9种,是每年必考的语法项目,主要考查连词的判断选用,主句与从句谓语动词的时态运用。其中,以对时间状...

C++关键字介绍(c++语言中常用的关键字含义)

下表列出了C++中的常用关键字,这些关键字不能作为变量名或其他标识符名称。1、autoC++11的auto用于表示变量的自动类型推断。即在声明变量的时候,根据变量初始值的类型自动为此变量选择匹配的...

核心词汇aboard,abroad和board用法解析

1.aboardadv./prep.在船上;在(船、飞机、公共汽车、火车等)上;上(船、飞机、公共汽车、火车等)意为“在公共汽车/船/火车/飞机上;上公共汽车/船/火车/飞机”,可作介词式副词。Th...

Excel VBA小技巧:Areas集合,你不知道的多区域操作神器

大家好!今天我们来聊聊ExcelVBA中一个超级实用但经常被忽视的功能——Areas集合。如果你经常需要处理不连续的多区域操作,这篇文章绝对能让你眼前一亮!什么是Areas集合?简单来说,Areas...

Flink用法介绍(flink的使用场景)

自定义source只需要传入一个SourceFunction即可val stream4 = env.addSource( new MySensorSo...

amiable与amicable 用法辨析(able和capable的区别)

1.amiable/'emibl/用于指人,其意义为:“友好的”“和蔼的”(friendly,good-natured,good-humored):Thenext-doorneighbou...

常考词汇in terms of用法解析(in terms of doing)

intermsof含义较多,要根据上下文来判断,如:1.intermsof用……术语(话、字眼、口吻)Hereferredtoyourworkintermsofhighpr...