面试题
List map 二叉树,排序,handle内存溢出,handle原理,handle call back 注解实现原理 。解释context intentservice service 多线程。自定义view。签名文件
多个application 迭代异常 混淆,数据库,数据结构
rxjava refit mvp mvvm retrofit原理 【在纸上】
evevtbus原理
https://blog.csdn.net/json_it/article/details/79948484
优缺点:
在java项目中,如果不是swing,当要用到事件、通知机制的时,时下最流利的、最简单的方式就是使用
google的guava-EventBus,它简洁、强大、使用方便,最大多数开源爱好者的首选。
使用EventBus的好处有:
1.EventBus简洁、强大
2.不用写回调接口
3.可以组件、线程间的相互通信
但是,它也有缺点。比如,事件的处理(侦听)是通过方法的参数类型来确定的。当在项目中,当大量使用EventBus时,跟踪和定位问题,是一件很痛苦的事。
Android消息处理:EventBus、BroadCast和Handler-优缺点比较
Runnable和Callable的区别
https://blog.csdn.net/Liu_yunzhao/article/details/78504287
写出你知道的Object类的方法:
https://www.cnblogs.com/wxywxy/p/6740277.html https://wenda.so.com/q/1438624864722174?src=140
简述java中的线程监视器作用
监视器用来监视线程,确保同一时间只能有一个线程可以访问受保护的数据和代码。
https://www.cnblogs.com/keeplearnning/p/7020287.html
xml、json
https://blog.csdn.net/xinyuan_java/article/details/66100196
https://blog.csdn.net/a985548426/article/details/76163408
https://blog.csdn.net/mp624183768/article/details/79714085
简述Material Design中behavior的作用
Material Design的常用组件:
FloatingActionButton:悬浮按钮
TextInputLayout:输入框(EditText)
Snackbar:Toast
菜单
如何避免Handler造成的内存泄漏?可替代Handler的事件总线框架有哪些?
https://www.jianshu.com/p/f2f186e3dd3e
EventBus:https://blog.csdn.net/oLevin/article/details/51029957
按自己思路设计一个网络请求框架
WeakReference SoftReference PhantomReference的区别
sleep和wait的区别
ArrayList和LinkList的区别
简述MVC,MVP的优缺点
编译脚本
popupwindow和alertDialog的区别:
alertdailog位置固定,alertdailog是非阻塞线程,弹出的时候,后台还可以做其他事情
Parcelable的使用:
Parcelable使用的一个地方就是在进程间传递一个自定义的较为复杂的对象
具体解答:http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html
String StringBuffer StringBuilder:
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
在线程安全上,StringBuilder是线程不安全的【运行速度最快】,而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
ViewFlipper继承ViewAnimator,切换view的时候是有动画效果的,适合做ppt,多界面的程序欢迎引导界面,算是个轻量级的组件,适合展示静态数据,少量数据。
ViewPager继承ViewGroup。看官网描述,这货和Fragment是好搭档,Fragment有自己的生命周期。也就是说ViewPager更适用复杂的视图切换,而且Viewpager有自己的adapter,这也让其适应复杂对象,实现数据的动态加载。
由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。
那么 handler,thread,handlerThread的关系?
https://www.jianshu.com/p/de2ff82b37b3
thread和service的区别
https://blog.csdn.net/cvsdn/article/details/50680151
冒泡排序:
for(int i=1;i<arr.length;i++){ for(int j=1;j<arr.length-i;j++){
if(a[j-1]>[aj]) //交换位置 }
冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值【或较小值】。
用时间复杂度来说:
1.如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。
2.如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:(n-1)*(n-i)
综上所述:冒泡排序总的平均时间复杂度为:O(n2) 。
选择排序:
for(int i=0;i<a.length-1;i++){ for(int j=i+1;j<a.length;j++){
if(a[j]<a[i]){
//交换位置
}
}
https://blog.csdn.net/u012070360/article/details/81663650
OkHttp和Volley的有什么区别
http://blog.sina.com.cn/s/blog_1656f847b0102z2nf.html
RecyclerView和ListView的异同
前者缓存的是View+ViewHolder+flag,不用每次调用findViewById,后者则只是缓存View
刷新数据方面,前者提供了局部刷新,后者则全部刷新
SharedPreference支持多进程吗?
支持:https://www.jianshu.com/p/875d13458538
ExpandableListView的使用
是一种用于滚动的展示的两级列表视图。也就是ListView的二级选择加强版这种。
https://blog.csdn.net/sakurakider/article/details/80748428
如何使编译出来的apk内存小?
1 https://www.jianshu.com/p/5c9ae36d9f77
2.https://blog.csdn.net/zhanggang740/article/details/50161717