Android面试遇到的问题(1)
2017-02-14 10:13
267 查看
数据结构和算法类
顺序表和链表的区别?顺序表随机访问快,插入删除慢;链表插入删除快,随机访问慢。
栈和队列的区别?
栈:先进后出,队列:先进先出
常用的排序算法有哪些?
冒泡排序、选择排序、快速排序、堆排序等。
快速排序的实现思想是怎样?快速排序的时间复杂度是多少?
划分,在待排序的数列中随机选择一个x,然后通过比较最终确定它在数列中的最终位置。这个数将原数列分成三部分:比x小的数、x、比x大的数。
在“比x小的数”和“比x大的数”中递归使用1的方法进行划分。直到每一个数都确定最终位置。
因为是不断地折半,所以时间复杂度是O(Log2 N)
冒泡排序的时间复杂度是多少?
O(n^2)
堆排序的原理是怎样?
需要先解释堆这种数据结构(完全二叉树),对每个非叶子节点,都有:左孩子比父节点小,右节点比父节点大。
将堆调整为大根堆或者小根堆的过程。
时间复杂度是O(N*LogN)
树有哪几种遍历方式?
前序遍历、中序遍历、后续遍历
对称加密算法有哪几种?
对称加密:加密和解密使用同一个密钥。有DES、3DES、AES等。
非对称加密:加密和解密需要两个Key:公钥和私钥。有RSA、DSA等
Hash算法是怎样的?
Hash算法(摘要算法)
Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
常见的Hash算法有MD2、MD4、MD5、HAVAL、SHA
哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。
画出HashMap的数据结构实现
网上找到一篇帖子:HashMap实现原理分析 ,感谢作者!
设计模式类
熟悉哪些设计模式,说明面试官指定的某个模式的具体的实现及原理。单例、工厂、观察者、组合、代理、适配器、装饰者、Builder等。说自己理解的,不要给自己挖坑。面试官会继续问实现和使用的。
观察者模式可参考Android源码中的观察者模式
装饰者模式可参考理解装饰者模式
单例模式的缺点是什么?
单例模式在Android中生命周期较长,如果单例持有activity的引用,容易引发内存泄露问题。比如将登录模块的所有动作封装成的单例LoginBiz。
找到一篇博客单例模式优缺点
工厂模式有哪几种?简单工厂模式和工厂方法模式的区别是什么?
简单工厂模式、工厂方法模式、抽象工厂模式
适配者模式有哪几种?
静态代理和动态代理的区别是什么?
根据代理类的生成时间不同分为静态代理和动态代理。
静态代理:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理类:在程序运行时,运用反射机制动态创建而成。
Java基础类
什么是多态?多态的实现机制/原理是什么?在面向对象语言中,接口的多种不同的实现方式即为多态。
父类的指针可以指向子类的对象
多态性在C++中都是通过虚函数实现的
多态的实现基础是动态绑定。
HashCode相等的两个对象是否一定equals?
否
如果对象equals 是true,hashCode需要相同;但是hashCode相同的对象不一定equals。因为:
hashCode方法可以被重载,可能导致不同的对象拥有相同的哈希值。
Java中的hash函数返回的是int类型,最多允许存在2^32个,是有限的,所以两个不同的对象有可能恰好拥有相同的哈希值
一个对象什么时候会被垃圾回收器回收?
内存不足,且这个对象GC Root不可达时
Java虚拟机中的内存分哪几个区?GC垃圾回收机制是怎样的?
方法区、栈、堆、本地方法区等。
内存泄露和内存溢出的区别和联系?
内存泄露:本该释放的内存没有释放,并且自己也无法访问了。
内存溢出:申请的内存大于系统剩余可分配的内存。精满自溢。
内存泄露容易引发内存溢出。
怎样解决并发问题?有哪些关键字?2个线程间的并发问题和10个线程间的并发问题复杂度是否一样?
synchronize,volatile
线程越多,等待资源的问题越严重。
什么是死锁?
是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。
Concurrent包中有哪些类?
BlockingQueue接口
ArrayBlockingQueue
DelayQueue
LinkedBlockingQueue
PriorityBlockingQueue
SynchronousQueue
ConcurrentMap
ConcurrentHashMap
ExecutorService接口
ThreadPoolExecutor
ScheduledExecutorService
可参考老外的博客系列Java Concurrency Utilities以及中文翻译 Java 并发工具包 java.util.concurrent 用户指南
RuntimeException有哪些常见的子类?
NullPointerException - 空指针引用异常
IndexOutOfBoundsException - 下标越界异常
IOException - 输入输出异常
ClassCastException - 类型强制转换异常
可参考常见的几种RuntimeException
RuntimeException和Exception的区别是什么?
Exception:在程序中必须使用try…catch进行处理。
RuntimeException:可以不使用try…catch进行处理,如果有异常产生,将由JVM进行处理。
关键字throw和throws的区别是什么?
throws:写在方法声明中,表示这个方法可能会抛出这些异常,调用者可能要处理这些异常。
throw: 写在方法体内,明确了这个地方要抛出这个异常。
有没有使用过未捕获的异常?
Android中使用UncaughtExceptionHandler捕获全局异常。
后期不用UncaughtExceptionHandler,直接使用友盟统计线上崩溃。
集合有哪些?Collection有哪些子类?
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set-HashSet
Map
├Hashtable
├HashMap
Collection和Collections的区别?
Collection是集合接口
Collections是工具类,含有sort、binarySearch、reverse等方法。
HashMap怎么遍历?
迭代器
可参考遍历HashMap的四种方法
Android基础类
消息推送的原理是什么?维持一个长连接
ContentProvider和SQLite的区别和联系是什么?
SQLite:android平台上的轻量级数据库
ContentProvider:向其他应用暴露接口访问自己的数据,接口内容由自己定义,一般通过SQLite方式,也可以文件方式等!
IntentService和Service的区别是什么?
一个Activity启动另一个Activity时,调用了各自的哪些生命周期函数?
Activity和Fragment之间怎么相互通信?
Activity 传给Fragment:setArgument()
Fragment传给Activity: Fragment中有Activity的引用,直接修改Activity的属性或者调用Activity的成员方法。
ViewPager+Fragment怎样实现懒加载?
怎样弹出像QQ在别处登录时弹出的那种全局对话框?
你的App开发中有哪些单例?什么时候初始化?
UserInfo、PathManager等,Application中初始化。
有没有使用过多进程开发?进程间有哪几种通信方式?
进程间通信的方式:Content Provider、Broadcast、AIDL、Messenger、文件共享、Socket等
Binder机制是什么?
View的绘制流程是怎样?三个流程方法的时序是怎样?onMeasure中有哪几种测量模式?
onMeasure()、onLayout()、onDraw()
3种测量模式:EXACTLY、AT_MOST、UNSPECIFIED
View的事件分发流程是怎样?主要有哪几个函数,他们的调用先后顺序是怎样?
DispatchTouchEvent()、OnInterceptTouchEvent()、onTouchEvent(),责任链模式
Android开发中哪些情况容易造成内存泄露?怎样解决?
有没有做过JNI?System.gc能不能把C++层面的对象给回收掉?
你在实际开发中遇到哪些内存泄露的例子?是怎么解决的?
内存泄露的工具使用?内存泄露的检测。MAT怎样查看具体哪个对象泄露?
MAT
leakCanary 参考 LeakCanary使用指南(1)
开发中是否遇到过ANR问题,是怎么排查的?
首先分析log
从trace.txt文件查看调用栈,adb pull data/anr/traces.txt ./mytraces.txt
看代码
仔细查看ANR的成因(iowait?block?memoryleak?)
1、在activity中超过5秒的时间未能响应下一个事件。
2、BroadcastReceive超过10秒
你选择一个网络框架的标准是什么?怎样才算一个合格的网络请求框架?你封装一个网络请求框架的要点是什么?
看过哪些框架的源码?
EventBus和ButterKnife是作什么用的?
使用过哪些图片框架?什么是三级缓存?LRU策略是什么?Glide可以设置哪些东西?
有没有使用过MVP模式?
使用过哪些布局辅助工具?
需要强记的Android基础知识
Activity、Fragment生命周期Activity: onCreate(), onStart(), onResume(), onPause(), onStop(), onStop(), onRestart()
Fragment: 与Activity相比,没有onRestart(), 多了onAttach(), onCreateView(), >onActivityCreated(), onDestroyedView, onDetach(), onViewCreated()
Activity的四种启动模式和区别。Standard和SingleInstance好说,都是极端,SingleTop和SingleTask要区分。SingleTop是顶部复用,即A->B->C->C,结果是复用C,不会再重新启动C。而SingleTask是A->B->C->A,结果是A,会把BC清掉。
通过Acitivty的xml标签来改变任务栈的默认行为
使用android:launchMode=”standard|singleInstance|singleTask|singleTop”来控制Acivity任务栈。
任务栈是一种后进先出的结构。位于栈顶的Activity处于焦点状态,当按下back按钮的时候,栈内的Activity会一个一个的出栈,并且调用其onDestory()方法。如果栈内没有Activity,那么系统就会回收这个栈,每个APP默认只有一个栈,以APP的包名来命名.
standard : 标准模式,每次启动Activity都会创建一个新的Activity实例,并且将其压入任务栈栈顶,而不管这个Activity是否已经存在。Activity的启动三回调(onCreate()->onStart()->onResume())都会执行。
singleTop : 栈顶复用模式.这种模式下,如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,所以它的启动三回调就不会执行,同时Activity的onNewIntent()方法会被回调.如果Activity已经存在但是不在栈顶,那么作用与standard模式一样.
singleTask: 栈内复用模式.创建这样的Activity的时候,系统会先确认它所需任务栈已经创建,否则先创建任务栈.然后放入Activity,如果栈中已经有一个Activity实例,那么这个Activity就会被调到栈顶,onNewIntent(),并且singleTask会清理在当前Activity上面的所有Activity.(clear top)
singleInstance : 加强版的singleTask模式,这种模式的Activity只能单独位于一个任务栈内,由于栈内复用的特性,后续请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了
Handler原理
AsyncTask原理?AsyncTask中的线程池是串行还是并行?
看版本
Recycler和List的区别,ListView的优化,重用机制
上帝视角类
什么是64k问题?为什么有这个问题?是否随时关注着Google在Android方面的新动向?
Android5.0以后有哪些新特性?
对Android的前景怎么看?你个人的近期(一年)规划是怎样?
有没有开源过项目?
对各种开源组件怎么技术选型?
APP如何调优?
怎样设计Android和iOS统一的接口,屏蔽掉Context,因为iOS中没有Context。
面试者可能想听到的回答是Hybrid开发。
请举一个你实际解决问题的实例。
生产环境和测试环境频繁切换,需要重新打包。在App中增加后门,可配置环境。
你的优势是什么?
计算机专业基础、学历、英语(直接阅读英文技术文档的能力)、学习能力(从Java迅速转Android、有从0到1的项目经历)等
怎样使用EditText在不本地缓存的情况下实现快速搜索的联想功能?可以网络请求,但是用户的输入很快,需要实时响应。不能使用AutoCompleteTextView。
有可能是他们实际开发中无法解决的问题拿出来考面试者
相关文章推荐
- Android面试中遇到的问题总结
- Android面试遇到的问题(2)
- Android--面试中遇到的问题总结(一)
- Android--面试中遇到的问题总结(三)
- Android面试中常遇到的问题(一)
- Android面试中经常遇到的问题
- Android--面试中遇到的问题总结(四)
- Android 面试遇到的问题分享(一)
- Android--面试中遇到的问题总结(二)
- Android—面试四家公司遇到的问题总结
- 记录最近面试时遇到的一个问题:Android root的原理
- Android--面试中遇到的问题总结(三)
- 几次面试都遇到同一个问题,真是郁闷,长时间不写正则快忘了
- ubuntu9.04下编译android源码遇到的问题
- android 环境待建遇到的问题
- linux 下安装android遇到的问题及解决
- Eclipse下Android更新升级过程中遇到的问题及解决
- 面试时经常会遇到哪些问题
- android开发过程中遇到的一些问题汇总
- android 学习中遇到的若干问题和解决方法(1)