该面试宝典不仅收录了本人亲身面试遇到的问题,还收录了从一些朋友那里收集过来的问题。在以后的工作中本 人也会不断的更新和充实该面试宝典,当然也希望大家能够多多奉献比较优质的面试题。
该面试宝典不仅展示了常见的面试问题以及回答技巧,还详细讲解了每一道题所包含的知识点,让每个程序员不仅知其然,更知其所以然。
大家可以通过我记录下的这些面试实战记录略微感知一下真实面试的情况,从中学习一些面试技巧以便让自己在未来的面试中能够得心应手,顺利拿到自己喜欢的 offer。
正文总共分为6个部分:
Java 基础(★★)Java 高级(★★)Android 基础(★★★)Android 高级(★★★)Android 项目(★★★)项目面试常见问题(★★★)
一、Java 基础(★★)
Java 面向对象思想
面向对象都有哪些特性以及你对这些特性的理解如何理解 clone 对象Java 中的多态
Java 中实现多态的机制是什么?Java 的异常处理
Java 中异常分为哪些种类调用下面的方法,得到的返回值是什么error 和 exception 的区别java 异常处理机制请写出你最常见的 5 个 RuntimeExceptionJava 的数据类型
Java 的基本数据类型都有哪些各占几个字节String 是基本数据类型吗?可以被继承吗?Java 的 IO
Java 中有几种类型的流字节流如何转为字符流如何将一个 java 对象序列化到文件里字节流和字符流的区别Java 的集合
HashMap 排序题集合的安全性问题ArrayList 内部用什么实现的?并发集合和普通集合如何区别?List 的三个子类的特点List 和 map 的区别HashMap 和 HashTable 有什么区别?数组和链表分别比较适合用于什么场景,为什么?Java 中 ArrayList 和 Linkedlist 区别?List a=new ArrayList()和 ArrayList a =new ArrayList()的区别?要对集合更新操作时,ArrayList 和 LinkedList 哪个更适合?请用两个队列模拟堆栈结构Java 的多线程
多线程的两种创建方式在 java 中 wait 和 sleep 方法的不同?synchronized 和 volatile 关键字的作用分析线程并发访问代码解释原因什么是线程池,如何使用?请叙述一下您对线程池的理解?线程池的启动策略?如何控制某个方法允许并发访问线程的个数?三个线程 a、b、c 并发运行,b,c 需要 a 线程的数据怎么实现同一个类中的 2 个方法都加了同步锁,多个线程能同时访问同一个类中的这两个方 法吗?什么情况下导致线程死锁,遇到线程死锁该怎么解决?Java 中多线程间的通信怎么实现?
Java 高级(★★)
Java 中的反射
说说你对 Java 中反射的理解Java 中的动态代理
写一个 ArrayList 的动态代理类动静态代理的区别,什么场景使用?Java 中的设计模式&回收机制
你所知道的设计模式有哪些单例设计模式工厂设计模式建造者模式(Builder)适配器设计模式装饰模式(Decorator)策略模式(strategy)观察者模式(Observer)JVM 垃圾回收机制和常见算法谈谈 JVM 的内存结构和内存分配Java 中引用类型都有哪些?heap 和 stack 有什么区别Java 的类加载器
Java 的类加载器的种类都有哪些?类什么时候被初始化?Java 类加载体系之 ClassLoader 双亲委托机制
Android 基础(★★★)
Android 基本常识
写 10 个简单的 linux 命令书写出 android 工程的目录结构什么是 ANR 如何避免它?谈谈 Android 的优点和不足之处一条最长的短信息约占多少 byte?如何判断是否有 SD 卡?dvm 的进程和 Linux 的进程, 应用程序的进程是否为同一个概念?Android 程序与 Java 程序的区别?启动应用后,改变系统语言,应用的语言会改变么?请介绍下 adb、ddms、aapt 的作用ddms 和 traceview 的区别补充知识:TraceView 的使用Android 中数据存储方式有哪些?DVM 和 JVM 的区别?谈一谈 Android 的安全机制Android 的四大组件都需要在清单文件中注册吗?在 Android 中进程的级别有哪些?sp 频繁操作有什么后果?sp 能存多少数据?描述一下 Android 的系统架构解释一下 Android 程序运行时权限与文件系统权限的区别?AndroidManifest.xml 中的 targerSDK 设置有什么作用?Activity
什么是 Activity?请描述一下 Activity 生命周期Activity 的状态都有哪些?如何保存 Activity 的状态?两个 Activity 之间跳转时必然会执行的是哪几个方法?横竖屏切换时 Activity 的生命周期如何将一个 Activity 设置成窗口的样式?如何退出 Activity?如何安全退出已调用多个 Activity 的 Application?请描述一下 Activity 的启动模式都有哪些以及各自的特点一个启动模式为 singleTop 的 activity,如果再试图启动会怎样? 面试官想问的是 onNewIntent()两个 Activity 之间传递数据,除了 intent,广播接收者,content provider 还有啥 方式?怎样在两个 Activity 之间传递一张图片如何实现切换主题功能?Android 中 Activity 是如何启动的?Service
Service 是否在 main thread 中执行, service 里面是否能执行耗时的操作?Activity 怎么和 Service 绑定,怎么在 Activity 中启动自己对应的 Service?请描述一下 Service 的生命周期什么是 IntentService?有何优点?说说 Activity、Intent、Service 是什么关系Service 和 Activity 在同一个线程吗Service 里面可以弹吐司么?如何让一个 Service 成为前置进程?Service 的 onStartCommand 方法有几种返回值?各代表什么意思?Service 的 onRebind(Intent)方法在什么情况下会执行?Activity 调用 Service 中的方法都有哪些方式?Activity 如何给 Service 发送 Message?Service 如何给 Activity 发送 Message?子线程不能代替 service 吗?BroadCastReceiver
请描述一下 BroadcastReceiver在 manifest 和代码中如何注册和使用 BroadcastReceiverBroadCastReceiver 的生命周期如何让自己的广播只让指定的 app 接收什么是最终广播接收者?广播的优先级对无序广播生效吗?动态注册的广播优先级谁高?如 何 判 断 当 前 BroadcastReceiver 接 收 到 的 是 有 序 广 播 还 是 无 序 广 播 ?Android 引入广播机制的用意网络状态改变是无序广播还是有序广播,安装了,没启动过,会接受这个广播么?ContentProvider&数据库
请介绍下 ContentProvider 是如何实现数据共享的?为什么要用 ContentProvider?它和 sql 的实现上有什么差别?说说 ContentProvider、ContentResolver、ContentObserver 之间的关系如何访问 asserts 资源目录下的数据库?如何在高并发下进行数据库查询?
Android 中的布局
Android 中常用的布局都有哪些谈谈 UI 中, Padding 和 Margin 有什么区别?使用权重如何让一个控件的宽度为父控件的 1/3?Android 中布局的优化措施都有哪些?android:layout_gravity 和 android:gravity 的区别?ListView
ListView 如何提高其效率?ViewHolder 为什么要声明为静态类?在 Activity 中使用 Handler 的时候如何去除警告信息?谈谈 ListView 中的 MVC 思想?ListView 使用了哪些设计模式?当 ListView 数据集改变后,如何更新 ListView?ListView 如何实现分页加载ListView 可以显示多种类型的条目吗?ListView 如何定位到指定位置如何在 ScrollView 中如何嵌入 ListViewListView 中如何优化图片ListView 中图片错位的问题是如何产生的scrollView 嵌套 listview 方式除了测量还有什么方法?JNI & NDK
在 Android 中如何调用 C 语言请介绍一下 NDKJNI 调用常用的两个参数Android 中的网络访问
Android 中如何访问网络如何解析服务器传来的 JSON 文件如何解析服务器传来的 XML 格式数据如何从网络上加载一个图片显示到界面如何播放网络视频常见的访问网络 API 都有哪些?Intent
Intent 传递数据时,可以传递哪些类型数据?Serializable 和 Parcelable 的区别请描述一下 Intent 和 IntentFilterFragment
Fragment 跟 Activity 之间是如何传值的?描述一下 Fragment 的生命周期Fragment 的 replace 和 add 方法的区别Fragment 如何实现类似 Activity 栈的压栈和出栈效果的?ViewPager+Fragment 的左右滑动,如何实现 Fragment 的懒加载,Viewpager 默认加载几个?
Android 高级(★★★)
Android 性能优化
如何对 Android 应用进行性能分析什么情况下会导致内存泄露如何避免 OOM 异常Android 中如何捕获未捕获的异常Android 动态加载机制如果加载高清大图片,不用第三方,不压缩,怎么处理防止 OOMAndroid 屏幕适配
屏幕适配方式都有哪些屏幕适配的处理技巧都有哪些dp 和 px 之间的关系AIDL
什么是 AIDL 以及如何使用自定义控件
如何自定义一个控件请描述一下 View 的绘制流程View,SurfaceView,GLSurfaceView 有什么区别?Android 中的事件处理
Handler 机制事件分发机制在 Android 中主线程如何给子线程发 Message?Android 签名
简单描述下 Android 数字签名使用 Eclipse 如何生成数字签名Android 中的动画
Android 中的动画有哪几类,它们的特点和区别是什么如何修改 Activity 进入和退出动画网络协议
Http 和 Https 有什么区别?简述 Socket 通讯编程Binder 机制如何保证网络传输数据的安全性自己设计一个 Push 推送服务,需要考虑到那些点其他
AsyncTask 如何使用都使用过哪些框架、平台Glide 原理Android 四大著名图片处理框架都使用过哪些自定义控件volley 的原理okhttp 的原理ViewPagerindicator 的原理slidingmenu 的原理RecyclerView 的原理
Android 项目(★★★)
如何让 LinearLayout 自动换行如下图的颜色分类所示ImageLoader 在项目中的使用Java 和 javaScript 互相调用(webview 和 js 的互相调用)PopupWindow 弹出层在项目中的使用Notification 在 Android 中的使用带索引的 ListView 在 Android 中的应用随手势滑动而消失 Activity 的使用TouchGallery 在 Android 中的应用TextView 显示富文本CircleImageView 实现圆形图片网易新闻客户端频道管理的实现Android 瀑布流的实现监听键盘事件可以按照字母排序的 ListView省市区三级联动购物客户端二级菜单微信图片选择器如何从 html 的一个动作打开 app 并跳转到指定的 ActivityAAR 库怎么来配置不借助第三方怎么显示圆形图片
项目面试常见问题(★★★)
开发周期项目中遇到的难题项目中最大的收获项目是如何上线的项目是如何盈利的绘制项目架构图项目开发流程你在项目中的角色你负责项目中的哪些模块讲讲你负责模块的具体实现项目中都用到了哪些第三发框架有没有自己写过框架业余时间你是如何提高自己(学习)的有没有自己的技术 blog你的职业规划为什么离职为什么选择我们公司说说你们项目的亮点和不足你们的项目是如何保持风格一致的项目架构是如何搭建的屏幕适配是如何解决的都看过哪些源码项目版本是如何升级的用的什么版本控制工具你能独立开发吗App 跟服务器是如何交互的需求文档写过吗接口文档写过吗云服务器都用过哪些第三方平台都用过哪些简历+社招解答+经典HR面试解析
以上是整理总结的Android中高级面试遇到的真题解析,希望对大家有帮助;同时很多人经常也会遇到很多关于简历制作,职业困惑、HR经典面试问题回答等有关面试的问题。同样我也搜集整理了全套简历制作、金三银四社招困惑、HR面试等问题解析,有疑问,可以提供专业的解答。
对于Android开发的朋友来说应该是最全面最完整的面试资料,为了更好地整理每个模块,我参考了很多网上的优质博文和项目,力求不漏掉每一个知识点。很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个资料也已经帮助了很多的安卓开发者,希望也能帮助到你。
最后想要获取完整的《2020 Android BAT面试宝典》,可以私信我【资料】。
面试大厂复习路线
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
这里给大家提供一个方向,进行体系化的学习:
1、看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
2、进行系统梳理知识,提升储备
客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
系统学习方向:
架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IOAndroid高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件JetpackNDK模块开发:NDK基础知识体系+底层图片处理+音视频开发微信小程序:小程序介绍+UI开发+API操作+微信对接Hybrid 开发与Flutter:Html5项目实战+Flutter进阶知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
3、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
4、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
总结
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
耗时一年多整理的一系列Android学习资源:Android源码解析、Android第三方库源码笔记、Android进阶架构师七大专题学习、历年BAT面试题解析包、Android大佬学习笔记等等,这些内容均免费分享给大家,需要完整版的朋友,直接转发+点赞+私信回复【资料】一键领取!!!