Android开发校招总结(三)—— 面经总结
下面总结在秋招面试过程中被问到的一些常见问题,主要包括Java,Android,数据结构与算法,计算机网络和设计模式等内容。
Java的话主要包括Java基础、Java集合、Java多线程和JVM等相关内容;Android的话主要包括Android四大组件相关、Android异步任务和消息机制、Android IPC、Android UI绘制相关、Android性能调优相关、Android数据存储和Android综合技术等内容;数据结构与算法的话在面试中更多的是以手撕代码的形式(个人觉得剑指Offer+面试必刷TOP101足以,如果有时间精力可以刷TOP202),但也问到了个别的可以口述的问题;计算机网络在Android面试中问的也比较多;设计模式的话在面试中更多的是问项目中用到了哪些设计模式,或者Android中或一些三方开源库中用到了哪些设计模式;操作系统和数据库在面试中偶尔会问到,这里就不做总结了;Kotlin在简历中如果有相关的,也会被问到一些,这里同样也不做总结了。
Java
Java基础
- 首次加载和创建一个类时,变量初始化的顺序是怎么样的?
- String、StringBuffer和StringBuilder三者的区别?
- 抽象类与接口的区别?
- 重载和重写的区别?
- Java的异常分类?(谈谈Error和Exception的区别?)
- Java的异常处理流程?try,catch,finally的return问题,流程是什么?
- Java有哪四种访问控制类型,它们有什么区别?(Java里的访问修饰符有哪些?)
- 面向对象三大特性?
- 分别讲讲final、static和synchronized可以修饰什么,以及修饰后的作用?
- “equals"与”==“、”hashCode“的区别和使用场景?
- Java中深拷贝与浅拷贝的区别?
- Java中IO流分为几种?它们之间有什么区别?
- BIO,NIO,AIO有什么区别?
- 什么是反射机制?反射机制的应用场景有哪些?
- 反射为什么性能低?
- 说说你对Java注解的理解?
- 注解的类型有哪些?
- 注解的解析方法有哪几种?
- 静态内部类与非静态内部类的区别及使用场景?
- 内部类为什么可以访问外部类对象?
Java集合
- ArrayList和Array(数组)的区别?
- 谈谈ArrayList和LinkedList的区别?
- 说一说ArrayList的扩容机制?
- HashMap的实现原理?
- 谈谈对于ConcurrentHashMap的理解?
Java多线程
- 什么是进程和线程?(进程和线程的区别?)
- Java中使用多线程的方式有哪些?
- 什么是线程池?它的优点是什么?如何创建一个线程池?线程池参数含义?有哪几种线程池?
- 谈一谈线程sleep()和wait()方法的区别?
- 如何实现多线程中的同步?
- 如何保证线程安全?
- 谈谈线程死锁,形成死锁的条件,如何有效的避免线程死锁?
- synchronized关键字原理?
- 了解锁的升级过程吗?
- synchronized 修饰在static方法和非static方法的区别?
- 生产者消费者模型?
- volatile关键字的作用是什么?
- 在new对象的过程是不是一个原子操作,不是的话有哪几步?为什么要用volatile关键字?
- 说一下synchronized和volatile关键字的区别?
- synchronized和Lock有什么区别?
- 谈谈ThreadLocal用法和原理?(ThreadLocal是如何存储的?)
- 乐观锁如何实现?缺点有哪些?
- ReentrantLock是什么?
- synchronized和ReentrantLock的区别?
- 请你说一下对于AQS原理的理解?
- JMM是什么?有什么作用?
- 说说JMM对内存的划分?
JVM
- 介绍下JVM内存区域(运行时数据区)?
- 说一下堆和栈的区别?
- Java对象的创建过程?
- 一个对象在内存中包含几个部分?
- 如何判断对象死亡?(如何判断一个对象是否可以回收?)
- 简单的介绍下强引用、软引用、弱引用、虚引用?
- 垃圾收集有哪些算法?
- 说一下类加载的执行过程?
- 什么是双亲委派模型?为什么要使用双亲委派模型?
Android
Android四大组件相关
- Android四大组件作用及应用场景?
- 说下Activity的生命周期?
- Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果启动的是Dialog呢?
- 优先级低的Activity在内存不足被回收后怎样做可以恢复到销毁前状态?
- Activity的启动模式及应用场景?
- 谈一谈 startService 和 bindService 方法的区别?
- IntentService和普通的Service有什么区别?
- Service如何和Activity进行通信?
- Android广播机制?
- 广播的两种注册形式?区别在哪?
Android异步任务和消息机制
- 谈谈异步消息处理机制Hander?作用?有哪些要素?流程是怎样的?
- 为什么系统不建议在子线程访问UI?
- 一个Thread可以有几个Looper?几个Handler?
- 如何将一个Thread线程变成Looper线程?Looper线程有哪些特点?
- 可以在子线程直接new一个Handler吗?那该怎么做?
- Message可以如何创建?哪种效果更好,为什么?
- 这里的ThreadLocal有什么作用?
- Handler的sendMessage和post的区别?
- 延时消息的原理?
- Looper如何将消息队列中的消息分发给Handler?会把同一个消息给多个Handler吗?
- Handler引起的内存泄露原因及解决方案?
- Handler、Thread和HandlerThread的差别?
- 主线程中的Looper死循环为何没有阻塞主线程?
- 在发送 delay 10s 的消息, 假设消息队列中, 目前只有这一个消息; 那么为什么在这 10s 内, UI是可操作的, 或者列表页是可滑动的, 或者动画还是可以执行的?
- Android进程间的通信方式?
- 是否了解AIDL?
Android IPC
Android UI绘制相关
- Android有哪些布局类型?
- 你认为 LinearLayout、FrameLayout 和 RelativeLayout 哪个效率高, 为什么?
- 谈一谈View的事件分发机制?
- 如何解决View的滑动冲突?
- 请介绍View的三大绘制流程?
- MeasureSpec是什么?有什么作用?
- 说一下Android中UI的刷新机制?
- RecyclerView的缓存机制?
Android 性能调优相关
- 什么是ANR?什么情况会出现ANR?如何避免?
- 什么是内存泄露?内存泄露的情况有哪些?有哪些检测方法?
Android 数据存储
- Android中提供哪些数据持久存储的方法?
- SharedPreferences是线程安全的吗?SharedPreferences的apply和commit的区别?
- 什么是序列化?Serializable接口和Parcelable接口的区别?
Android综合技术
- 请谈谈你对MVC、MVP、MVVM的理解?
- 了解Android签名机制吗?
- JVM和Android虚拟机有什么区别?
数据结构与算法
- 基本有序的数组用什么排序算法最好?
- 快速排序原理?时间复杂度是什么样的?什么情况下是最坏时间复杂度?
- 什么是红黑树?与平衡二叉树有什么区别?为什么要用红黑树?
计算机网络
- 计算机网络七层模型和四层模型都有哪些?每一层的作用是什么?分别有哪些协议?
- 在地址栏输入URL会经过哪些过程?
- HTTP 常见的状态码有哪些?
- GET和POST有什么区别?
- HTTP 与 HTTPS 有哪些区别?
- HTTPS解决了HTTP的哪些问题?(HTTPS是如何保证安全的?)
- 加密算法有哪些类型?
- HTTPS通信的过程?
- HTTP1.1和HTTP2.0的区别?
- Cookie是什么?
- TCP和UDP的区别?
- 谈谈TCP为什么要三次握手?为什么要四次挥手?
- TCP 如何保证传输的可靠性?
- 拥塞控制和流量控制都是什么,两者的区别?
设计模式
- 说说项目中用到的设计模式?
- 说说Android中用到设计模式的例子?
- 单例模式有哪些实现方法?
- 谈谈了解的设计模式原则?
- 静态代理和动态代理的区别,什么场景使用?