Android面试题
Java中的String类可以被继承么?
答:不能,因为它是一个final类,同样的还有Integer,Float,Boolean,Byte,Character,Long,Short等等,也就是说,所有基本类型的包装类都是final类,无法被继承或修改
如何安全的退出一个已经开启多个activity的APP
答:在Application中持有一个全局的集合(List),进而在其onCreate()方法添加到这个集合,最终遍历所有的activcity并finish。
ActivityCompat.finishAffinity(this);
简单的概叙下Handler?
答:andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
- Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
文件的上传?
答:使用HttpURLConnection得到输入流,将文件的通过IO流的方式上传到服务器。可使用第三方Xutils框架。
ListView的源码和如何优化Listview?
答:根据ConvertView来判断View的重用还是新建,新建的话通过ViewHolder来存储所有的控件并设置到View的Tag中有利于下次的复用。
AIDL原理?
答:AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。
实现进程间通信,尤其是在涉及多进程并发情况下的进程间通信,我们可以通过AIDL来制定一些规则,规定它们能进行哪些交流。
通过接口的方式创建AIDL文件的后缀是 .aidl,而不是 .java。
创建一个类实现刚才那个aidl的接口,通过预先定义的接口达到两个进程内部通信进程的目的,在Service中Aidl返回一个Binder对象。
Binder机制
Binder是Android的系统进程通许方式之一简称IPC
Binder使用Clinet->Server通讯方式,Binder框架定义的四个角色,Server,Client,ServiceManager,以及Binder驱动,其中Server,Client,ServiceManager运行于用户空间,驱动运行于内核空间,Binder驱动程序提供Dev/binder与用户空间交互,Server,Client,ServiceManager,通过open和ioctl文件操作函数和Binder交互。
深入理解Binder机制
TCP和UDP的区别,tcp如何保证可靠的,丢包如何处理?
TCP面向连接,三次握手,发送需要确定以链接状态(如打电话),辑通信信道是全双工的可靠信道
UDP无连接,发送数据无需确定是否连接(如邮差),则是不可靠信道
将文件分块发送,接收端每收到一块数据就发送一个收到确认给发送方(包括收到的数据长度)
发送方在收到接收方发送的“收到确认”后才接着发送下一块数据。。。。
直到整个文件发送完毕。
每块数据都加一个包头,里面可以包含一些标志信息,如:是否所有数据发送完毕(即最后一个包了)
三次握手简单的说就是:(C:客户端,S:服务端)
C:SYN到S 客户端发送SYN(SEQ=1022)报文给服务器端,客户端进入SYN_SEND状态
S:如成功--返回给C(SYN+ACK),回应一个SYN (SEQ=2032)ACK(ACK=1022+1)报文,服务器段进入SYN_RECV状态。
C:如成功---返回给S(ACK) 客户端收到服务器端的SYN报文,回应一个ACK(ACK=2032+1)报文,进入Established状态。
什么是三级缓存?三级缓存原理
答:网络加载,不优先加载,速度慢,浪费流量
本地缓存,次优先加载,速度快
内存缓存,优先加载,速度最快
首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中
之后运行 App 时,优先访问内存中的图片缓存,若内存中没有,则加载本地SD卡中的图片,最后选择访问网络。
Service的两种启动方法,有什么区别 ?
答:1.在Context中通过public boolean bindService(Intent service,ServiceConnection conn,int flags) 方法来进行Service与Context的关联并启动,并且Service的生命周期依附于Context(不求同时同分同秒生!但求同时同分同秒屎!!)。
2.通过public ComponentName startService(Intent service)方法去启动一个Service,此时Service的生命周期与启动它的Context无关。
View和SurfaceView的区别?
答:SurfaceView中采用了双缓存技术,在单独的线程中更新界面
View在UI线程中更新界面
当程序需要更新View上的图像时,程序必须重绘View上显示的整张图片
新线程无法直接更新View组件
Android的进程优先级
答:android的系统进程分为五个等级, Foreground Process(前台进程), Visible Process(可见进程), Service Process(服务进程), Background Process(后台进程), Empty Process(空进程)
自定义View相关知识,下拉刷新的实现原理?
答:【1】Header 通常有下拉箭头,文字,进度条等元素,根据下拉的距离来改变它的状态,从而显示不同的样式
【2】Content 这部分是内容区域,网上有很多例子都是直接在ListView里面添加Header,但这就有局限性,因为好多情况下并不一定是用ListView来显示数据。把要显示内容的View放置在一个容器中,如果想实现一个用ListView显示数据的下拉刷新,需要创建一个ListView旋转到容器中。处理这个容器的事件(down,move,up),如果向下拉,则把整个布局向下滑动,从而把header显示出来。
【3】Footer可以用来显示向上拉的箭头,自动加载更多的进度条等。
亦可以使用开源PullToRefreshView
在你项目中所用到的第三方?
Volley xUtils okHttp(支持图片上传) ImageLoader RxJava Retrofix dataBing
Google推荐的图片加载库Glide介绍
目前Android在使用的Json解析框架主要有Jackson、Gson、FastJson、org.json;
源码解析
使用 picasso 加载图片;使用 EventBus 同步不同页面间对象状态
UI框架优化,增加RefreshFragment基类抽取
通过LeakCanary、TraceView等工具进行内存检测,优化内存的使用,构建一套服务业务需求的线程池
熟练掌握okhttp,glide,greenDao等主流框架;
Android中原生HttpClient和HttpUrlConnection来处理网络操作比较复杂,需要我们处理很多操作:如果图片的缓存和请求的调度。
简单的说下Retrofit的使用流程?
Retrofit2在项目中的完整使用流程:创建Bean类 --> 创建接口形式的http请求方法 --> 通过Retrofit.builder()创建接口对象并调用http方法请求网络数据 --> 在RxJava的Observable(被观察者)中异步处理请求结果!
Volley到底有哪些特点呢?
内部封装了异步线程,可直接在主线程中调用服务器端并处理返回结果,可以取消请求容易扩展
缺点:大文件下载表现不好,只支持Http。
项目中有没有见过内存泄漏以及OOM?为什么会产生?怎么解决的?
内存泄漏它是造成应用程序OOM的主要原因之一
在android应用开发中,当一个对象已经不需要再使用了,本该被回收时,而另外一个正在使用的对象持有它的引用从而导致它不能被回收,这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产生了。
全局变量的滥使用,加载对象过大,相应资源过多,来不及释放,资源未关闭造成的内存泄漏。
在内存引用上做些处理,常用的有软引用、强化引用、弱引用
在内存中加载图片时直接在内存中作处理,如边界压缩
及时回收不用的对象如Bitmap,IO流。
Android系统的有哪些安全机制?
应用程序签名机制,权限申明机制,访问控制机制,进程通讯机制,内存管理机制。
Android-Service和Thread的区别?
service是android四大组件之一,没有任何界面,它不是一个线程,一般在后台默默运行。有自己的生命周期。有本地service和远程service,本地service一般有2中启动方式,startService和bindservice. 远程service就是所谓的AIDL,实现跨进程调用.
thread是java里的一个线程概念,跟service是完全不同的。1中说的service特点,thread在android中大多没有。尤其是生命周期和跨进程调用,thread是没有的。
Android图片缓存之初识Glide
MarsDaemon实现安卓APP进程常驻笔记
Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片的优缺点比较
Asset目录与res目录的区别
ANR问题,force close问题,activity,service,broadcast各自超过多少秒报ANR
Activity启动模式,intent匹配规则
Android反编译
JNI和native方法
Android系统的有哪些安全机制
Android新特性有哪些(5.0 6.0 7.0)
Dalvik和ART区别
Android屏幕适配有哪些方法
View事件体系,滑动冲突
View绘制原理,性能问题(view绘制间隔16ms,60fps),measure,layout,draw三大过程
如何避免overdraw
Android动画分类和各自特点
View和SurfaceView的区别
APK瘦身的办法
Android如何获取Crash信息
ANR日志分析
Android动态加载,如何解决方法数越界
Android怎么加速启动Activity
Android内存泄漏问题,内存泄漏分析工具
Android内存溢出问题,图片的三级缓存
Android系统开机过程
Zygote和System进程的启动过程
Activity的启动过程
Android的消息机制,Handler原理
AsyncTask源码,优缺点
HandlerThread和IntentService的原理和特点
AIDL原理
Binder机制原理
ActivityManagerService
一个如何维持一个长连接
如何实现进程保活
Binder里面引用计数的原理
Binder底层为什么用红黑树,红黑树的原理知道吗
Retrofit的原理,为什么不用volley
为什么选用Glide,原理?
LruCache的原理
Android系统框架
handler和asyncTast的区别,然后让我自己设计线程池怎么做
Fragment好处,碰到过什么bug,怎么解决的
为什么选用Realm,原理是什么
如何设计一个网络加载框架
Android四大组件的理解(这个扯了十多分钟)
ContentProvider的启动过程
Activity的四种启动模式,用过哪一种,为什么要用
Service和InentService的区别
View的事件分发和绘制原理
如何解决滑动冲突
.接着问了是否用过 volley,果断没有,说用过Retrofit,毕竟现在都是MVP+Retrofit+RXJava,然后就让讲下MVP
多进程通信的方式(这个就比较模式化了,面试官也知道基本用不上)
广播的使用
Handler机制,以及具体的使用情况
讨论了一下各个框架的使用
AIDL,广播的种类
.如何解决app卡顿的问题,用到哪些工具
view的绘制流程
多线程和handler结合使用要注意什么 (我没get到他的点,他想要的答案是当activity隐藏或者销毁的时候要注意handler的任务取消之类的)
四大组件是在主线程运行的吗
sqlite的相关的
下载大文件要注意的事情(防止OOM)
Android的启动流程、四大组件、listview的运用于优化、MVP、两个activity怎么传输数据,intent是怎么实现传输数据的,闹钟怎么实现
fragment,该怎么用,比如实现类似微信的那种滑动,讲了一下fragment的滑动以及底部状态的切换。之后又问了怎么保存view的数据,当时以为就是回调生命周期的方法时保存数据,面试官就给我讲了一下现在常用了的将顶层的view作为变量然后传递引用,之后切换回来的时候直接在oncreateview里面进行判断即可。
Activity与Fragment的生命周期。
Acitivty的四中启动模式与特点。
Activity缓存方法。
Service的生命周期,两种启动方法,有什么区别。
怎么保证service不被杀死。
广播的两种注册方法,有什么区别。
Intent的使用方法,可以传递哪些数据类型。
ContentProvider使用方法。
Thread、AsycTask、IntentService的使用场景与特点。
五种布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout、TableLayout各自特点及绘制效率对比。
Android的数据存储形式。
Sqlite的基本操作。
Android中的MVC模式。
Merge、ViewStub的作用。
Json有什么优劣势。
动画有哪两类,各有什么特点?
Handler、Loop消息队列模型,各部分的作用。
怎样退出终止App。
Asset目录与res目录的区别。
Android怎么加速启动Activity。
Android内存优化方法:ListView优化,及时关闭资源,图片缓存等等。
Android中弱引用与软引用的应用场景。
Bitmap的四中属性,与每种属性队形的大小。
View与View Group分类。自定义View过程:onMeasure()、onLayout()、onDraw()。
Touch事件分发机制。
Android长连接,怎么处理心跳机制。
Zygote的启动过程。
Android IPC:Binder原理。
你用过什么框架,是否看过源码,是否知道底层原理。
进程有哪些通信方式
ListView优化方案
service和线程的关系
.looper是线程级别还是进程级别
activity1启动activity2的过程,是否可以在新的进程里面,如果在新的进程里面流程有什么不同。启动按返回系统的调度。
广播的注册方式,信息是保存在哪里,发送广播是如何回调广播接收者。
app安装过程,每次开机是否会重新安装所有的app
Android系统为系统安全性做什么事情
zygote和systemservice的关系
为什么zygote死掉后会重新启动
界面的绘制过程
开机画面有几个,分别是什么时候显示和暂停
activity四种启动模式
有没有使用过Android的开源库,或者开源控件
启动一个应用的流程
打开一个activity的过程
设计一个Android的下载模块
项目点为什么要用view不用fragment?同样fragment可以解决缓存(用了view,并且设了map作为缓存,为了模拟activity栈重制了新的栈来实现相同的回退功能,需要处理连续点击和多次点击的问题,还需要解决连续点view,缓存增大而oom)
用了什么设计模式?为什么要这么用?(举例了观察者+工厂)
谈一下Collection包:hashmap底层实现,用了什么方法解决hash冲突(基于jdk版本),具体是如何实现(jdk1.5链表头插还是尾插),为什么不安全?如何变得安全(concurrent包下集合类),concurrentHashmap实现原理是?
Executor框架说说你的理解?
结束一条Thread有什么方法?interrupt底层实现有看过吗?线程的状态是怎么样的?如果给你实现会怎么样做?
Io和nio有没有了解?
现在需要在四大组件中传数据?如何传,方法有哪些(需要自己再具体说什么情况)?
缓存算法除了lru还认识哪种?
Java中有内存泄露吗?是怎么样的情景?为什么不用循环计数?
ANR产生原因?怎么定位?
ContextImpl的源码使用的设计模式?为什么你认为其中有外观?
在一个app中,只有在一张activity,所有功能业务逻辑在里面实现,现在报ANR,你会怎么做?(代码层面:耗时操作(UI、网络、数据库),工具层面:trace和crashHandle)
Android中ClassLoader和java中有什么关系和区别
用过什么开源,举一个例子?(volley)
Activity生命周期?情景:现在在一张act1点了新的act2,周期如何?
Act的launchMode,有没有结合项目用过(自己的程序锁和微信的PC端登陆对比,不过我现在又发现,应该大约估计可能是动态加载的一个缺陷,如果有找到相关信息,请务必跟我说。具体问题就是,当在PC端登录时,Android终端的微信会跳出,即使wechat的task不是在fore,当按下确认,返回的是wechat,而不是自己先前的app)
View的绘制原理,有没有用canvas自己画过ui?
动态加载主要问题
插件化
Assetmanager获取资源原理和资源获取原理
项目Oom异常解决方案+用户体验优化方案
Touch传递机制+listview滑动冲突
Volley底层实现
为什么不能用volley请求大数据
Volley底层实现+设计模式理解
Imageloader缓存策略
项目如何解决oom?响应速度是怎么优化?电量消耗如何优化?
描述一下Aidl和android ipc?(binder机制没跟他讲得很深)
屏幕适配使用的方案?有没有辅助的工具帮助?(hyviewer)
如何分析内存泄露?(代码+工具traceview+mat)
那ANR呢?(我忘记了trace)
View树绘制?如何优化布局?
事件传递原理?
uil的框架如何设计?有没有用过glide?(结合了fresco的分析)
Volley和okhttp底层实现(也讲了okio),为什么说okhttp高效?
Listview的优化(同一布局,左为bm,右为text)?
Apk瘦身可以关注什么点?(这里忘记了说so库,然而他也不会)
讲一下动态加载技术点?
适配优化屏幕适配接触到什么方法?
Binder机制(只深入到framework)
View树绘制+事件分发
Contextimpl源码,几种context的区别
如何实现通讯?Binder机制
屏幕适配接触到什么方法?
java内存泄露是怎么样的?(本质+handler例子)
Handler机制?
情景题,把handler设static,里面需要对一个view更新,会不会内存泄露?(可达性分析)
UI接触得多吗?有没有用过canvas画过图?
在项目中为什么要用动态加载?最大的问题是什么?怎么解决资源管理问题
Volley底层实现?(okhttp没问)
自己写的图片加载工具类谈一下?(结合uil谈了一下)
描述下Aidl?觉得aidl有什么缺陷
JNI的使用。
Activity启动模式
两个应用能使用同一个任务栈么?
Binder机制
Volley源码的实现
大图加载
Http && Https
常用的加密算法,对称加密和非对称加密
Android里的序列化
Android里的内存泄漏
Android里的设计模式
两个应用间Binder通信的原理
OkHttp如何对链接进行复用
如何设计锁
内存泄漏如何发现(用什么工具)
Handler+Thread机制、
View绘制过程、
Activity的启动过程
什么时候会发生SOF问题
有用过什么框架,看过他们的源码没?
平时有用过什么开源项目?
AnsycTask的原理?(我的简历里提到过AnsycTask)
在纸上写了个Activity,然后在类里面定义了一个Handler,问我这个会有警告,怎么解决?--static、软引用
Service的保活
Handler机制,Handler除了线程通信还有什么作用,这个我说通知吧,因为Android是消息驱动的,不是特别明白面试官要问哪点,难道是延时?
Activity的启动模式,每种启动模式的使用场景,singletop中回调onNewIntent和finish掉之后onCreate()有什么不同?,这个4种的使用场景中,我singletop回答不是特别好,应该是那种频繁接受消息的activity需要使用
Fragment的生命周期,栈管理,和commit()类似的方法还有哪个,commit类似的那个之前真没注意,应该是commitAllowingStateLoss(),区别是是否能在activity保存之后调用
实现一个文件夹列表,面试官要求5000个文件的时候才从ViewGroup转到ListView
ART和Dalvik的区别
批量插入50条联系人,比较高效的方法,ContentProvider是否了解原理
启动一个APP的流程
android学了多久?广播分为几种?实现原理,工作原理,广播接收器有几种?
ipc的方式
AIDL怎么用?
android四大组件
broadcast机制
thread.wait()与thread.sleep()区别
okhttp原理
线程池机制
androird进程间通信方式
事件分发机制
view的绘制流程
MVP的介绍
说了下Android事件的分发机制
onSaveInstanceState和onRestoreInstanceState调用的过程和时机,onNewIntent方法
fragment的生命周期,和Activity如何进行通信
Android的事件分发机制,ACTION_DOWN和后续事件如何消耗
Activity的启动方式
View的绘制流程,MeasureSpec如何工作,父的MeasureSpec和自己的LayoutParams
广播的两种注册方式
数据库如何升级(懵逼)
Handler Looper的使用方式,实现机制,设计的原因
HandlerThread有没有了解(很神奇的我完全忘了当时是怎么答的了)
ThreadLocal是干嘛的,使用的地方
Sqlite的一些问题
Activity A调用Activity B时,A调用什么函数(onPause)
onSaveInstanceState和onRestoreInstanceState又问了一次
JNI的参数ENV参数。。。
JNI工作时,java 层的类如何找到C/C++层的类(懵)
AIDL的工作流程
Service与Thread区别,这个问题应该是必问的了,一定要知道清楚。
SQLite能否并发读取或者写入,自己只记得不能并发写,可以并发读,但是原因不清楚。
Activity与Service的通信问题,这里要对Binder机制和AIDL比较了解,因为自己没在项目中用过,所以回答的不是很好。这个还可以通Broadcast进行通信。
画出Activity与Fragment生命周期
activity生命周期,启动模式,service在哪个线程,service防杀死
ViewPager如何判断左滑右滑
activity的启动模式及在你项目里的应用
View事件分发机制
view事件冲突的处理
android7.0的虚拟机的优化(什么即时编译)
启动一个应用的流程(从点击桌面的icon开始)
sqlite如何批量插入大量数据,如何提高效率(放到一个事务里)
fragment 和activity之间如何选择(说出自己的理解)
android6.0 的动态权限(聊项目时扯上去的)
View的绘制过程
当时谈到使用到了开源框架xtuil中的dbxutil和httptuil,然后让分析这俩个模块源码;其中详细问了httputil实现原理(主要是线程池,封装的是httpclient) 使用到了slidingmenu_library开源控件,让分析这个开源框架的源码;
说说你做过最复杂的控件
animation 和animator的区别
说说推送 ,扯到长连接,心跳包,直接被面试官打断,这个我们都知道,说说保持一个长连接很简单,为什么长连接会带来很多麻烦,还提示从耗电量,微信分析
项目使用开源框架的源码分析讨论 ,主要还是集中在httputil源码实现、讨论了线程池设计,阻塞队列; 由于httputil封装了httpclient,然后让比较 httpclient和httpurlclient区别; 扯到了http协议,问了http与https区别,(当时我在分析直接被打断,“这个我们都知道,简介概括”,然后我我直接说https=http+ssl+加密算法); 加密算法是对称还是非对称的,,商量秘钥的过程是对称还是非对称
android消息处理机制 ,handler+loop分析; loop线程与普通线程区别; asynctask源码分析(这里有个线程池几个关键参数5,128,使用的阻塞队列,补充讲了asynctask缺陷) ;如何改进asynctask造成的内存泄露的问题,从而延伸到 jvm虚拟机四种引用
说说androi 使用卡顿是什么造成的,给出优化 ,主要回答了ui overdraw避免,<include>标签,<viewstub>标签,<merge>标签使用,hierarchy viewer工具的使用; 面试官追问:再从底层分析;(其实就是 16ms和60fps的追求了) ;再结合GPU操作分析一下UI过程; 然后说到了大图加载问题,提到UIL框架,让分析内部源码(我主要从uil的缓存策略和线程池机制分析)
忽然扯到并发,让分析concurrenthashmap,答了分段锁仍不满意,要求再分析一下size操作是如何做的
从listview优化谈到recyclerview,深入分析一下recyclerview特点 ,然后引申到瀑布流如何实现,不使用recyclerview如何实现瀑布流。
属性动画
touch事件分发机制
android开机过程(主要讨论了zygote)
让你设计一个游戏人物,如何设计 ,主要讲了抽象类+接口+mvc和mvp模式
Android中的几种Context什么区别?这个问题我回答的不好,简单说了一下生命周期和Context的继承关系,以及注意事项弹对话框不能使用applicatuion的上下文
Android中的内存泄露遇到过没?我讲了Handler持有Activity泄露以及google建议的嵌套类、弱引用的解决方案、Drawable的setCallback,耗时的线程可能会持有Activity,Bitmap调用recycle,因为以前bitmap在native分配,所以要调用recycle释放,现在不用了因为在堆分配,由GC回收,他问我是几点几版本开始的,我说是3.0版本。
接着问我bitmap能否复用?这个我没弄懂意思,就回答不知道,最后查了一下,也是3.0以后的有个Option的inbitmap字段可以复用
平时遇到过OOM没?遇到过,主要是图片加载很常见,我讲了BitmapFactory的解析Options的in...bound参数先读取图片信息进行必要的缩放,还有缓存,讲了DiskLruCache、LruCache缓存策略,以及可以加入软引用,讲了底层的LinkedHashMap实现。
用过外观模式?(表示没听过)这是Android中的知识吗?面试官告诉我,是一种设计模式,我说,哦,没有,我知道的有单例模式、工厂模式、代理模式、观察者模式、装饰者模式、迭代器模式。然后让我讲一下代理模式,我就大概说了一下,然后说在Android中使用AIDL产生的的代码中当查不到本地的Binder时asInterface返回的就是一个代理对象,然后面试官说,那就是你使用过bindService调用过Service了?恩。
FrameWork层看过那些源码?Java源码呢?讲了一下看过的框架层源码和java集合,没有具体讲。
自定义控件做过哪些,需要注意什么?处理wrap_content的情况,ondraw不能耗时,刷新率16ms等,然后让我讲了一下圆角矩形的图片控件怎么做,降到了画笔的xferm...方法进行图面交叠。
还问到我Android动态加载了解不?我没用过,但之前看到过通过DexClassLoader使用接口实现的一种插件形式
draw和onDraw方法区别。
view和viewGroup区别。
内存溢出处理。
Activity能运行在别的进程中吗?
内存泄漏。
Bitmap的recycle方法执行后会立即回收内存吗?
进程间通信的方法。
Activity中如何调用另一个进程Service里的方法?
AIDL的方式能访问另一个进程Service里静态变量吗?
Activity的四种启动模式。
有用过什么框架?
知道Picasso的缓存机制吗?
ListView的优化。
有木有在项目中用到什么设计模式?
更新UI用的什么机制?(最后一个问题没听懂问的是什么,追问了面试官,面试官说了什么上层调用底层,底层再调用上层......还是没听懂,就说网络请求用的框架,在回调接口中更新UI)
在项目中有没有用到图片加载库?网络加载库?
问我JAVA哪些先进的东西给你在Android开发带来方便?我说JSON库。知道几种JSON库,有什么区别?
跨线程通信 主要涉及LooperMessageHandler以及MessageQueue
说一下自定义View需要注意哪些细节 主要说了一下View绘制的三大过程onDraw()不要做耗时操作 不要创建新对象 以及 怎么处理View的触摸事件
View的事件冲突的解决办法 ps:重写dispatchEvent()或者touch()方法
讲一下listView的优化方法
讲一下RecycleView与listview的区别
view的绘制过程
Activity的启动模式
跨线程通信
夸进程通信 主要是Android的AIDL
如何解析json数据和xml
自定义view的几个步骤 怎么刷新view ps:onLayout(); onMeasrue();onDraw();
RecycleView的优化
几种context的区别
看过什么源码没有
讲一下binder类
Runnable运行在哪个线程里面 ps:开启一个子线程的唯一方法就是new Thread().start();
HashMap和HashTable的区别
raw和assets文件夹的区别
activity关闭后尚未运行完毕的thread会怎么样 ps:会变成空进程线程,优先级最低 很容易被终止回收
mainfest文件的合并规则
跨线程通信
讲了其中一个项目是怎么实现的 问jsoup怎么拼 = =
用过哪些开源库 讲一下他的架构是怎样的
图片三级缓存 内存缓存满了怎么办 ps:优先级队列 满了后根据优先级主动删除一部分图片 根据LRU算法确定优先级
讲一下JNI开发的过程 java怎么找到c函数 ps:JNINativeMethod保存函数对应关系
activity的四中启动模式
service的生命周期
项目中用JNI做什么 为什么要用他呢
什么是OAuth协议 做什么的
四大组件,详细说
handler机制(深入源码)
CotentProvider的权限问题,就是怎么样使得数据对外有选择性的提供和使用
Android的存储方式
Handler、Looper、MessageQueue
AsyncTask 为什么java已经有线程池的实现了,还要继续使用AsyncTask,AsyncTask相对于java自带的线程池的好处
onTouch事件的处理机制
说一下MVC以及其在Android中的应用
说一下OOM以及你怎么解决的
了解Android的Framework么
说一下一个Android APP从点击打开开始,是怎样展示在用户面前的(Zygote、Ams、Wms等)
viewpager里面只能嵌套view吗 可不可以嵌套Activity
假如viewpager里面的每一页都有有很大数据量的内容,那么在快速的左右滑动时,如果出现了内存被回收的情况,如何处理 假如出现了OOM,怎么处理
同上情况,使用Fragment,又当如何?与viewpager有什么区别
ExpandableListView的Adapter怎么写
在ListView的每个item中如果可能出现的view都不一样,如何处理?动态获取view种类数量的话是不是就不能使用viewHolder进行优化?固定显示view如果不存在该种view就不显示的方法是否太耗内存
ListView的Adapter的getView具体是什么机制?
Activity之间传递大量的数据用什么方法 Binder Bundle不够大 Socket 在同一应用中没必要使用 共享内存 static变量——同一应用中static变量如何控制,会不会并发出问题,如果Activity由于内存不足被kill掉,再重启的时候static变量的值还可靠吗:设置专门的访问类,进行读写控制,以及Activity重启后的初始化工作。
SQLite在使用时 假如ActivityA是用于修改SQLite,ActivityBCDEF。。。是用来展示SQLite的内容,如何在修改SQLite的同时使得BCDEF...都立刻获得最新的数据?SQLite有没有类似于ContentObserver的这么一种监视类可以监听到SQLite内容的改变?如果广播通知所有类,那么广播可以携带多大的数据?
假设把一个ActivityB向右滑动可以回到上一个ActivityA,B渐渐透明,A渐渐清晰,要怎么编写页面?说说你对android:theme的理解,说说你对alpha值的理解
ListView在数据量很大图片很多的情况下怎么优化?假如一个图片,轻轻的向上滑动一丢丢,那么需要重绘吗?(什么鬼。。。)
详细展开说一下所有LaunchMode的应用场景
假如A-》B-》C,想让C后退直接到A,使用什么样的intentflag?
假如A-》B-》C,C使用singleTask,C后退,后退到什么地方呢?
在全屏显示高清大图的时候,网速慢的情况下如何显示?渐进式显示是怎么做到的?如果想显示下载进度圈圈,该如何实现?
AsyncTask在4.x以后有什么改变?怎样改回并发执行好多个?如果一个AsyncTask结束取得结果之前Activity就因为内存原因被Destroy掉了,那会有什么情况发生?会内存泄露吗?会空指针吗?需要在Activity彻底死掉之前把AsyncTaskcancel掉吗?如果没有cancel掉,然后Activity重启了,那这个Asynctask又当如何呢?
AsyncTask内部实现机理 与Thread+Handler有什么不同
说一下HandlerThread
你的APP里,是每个Activity都有一个Handler呢还是所有Activity共享一个Handler
基于事件监听、基于事件回调 假如一个touch事件发生,那是监听器先收到还是onTouch函数先收到
假如你要记录ListView滚动到的位置,要记录什么信息,view怎样获得坐标信息
说一下canvas
dialog和popupwindow的应用场景 如果popupwindow在没有dismiss的时候Activity finish了,会出现什么情况?
了解过什么三方库?为什么不用三方库?
Service和推送通知,通知有没有可能出现有推送但是通知栏收不到通知?service被kill掉会如何?如何保证service不被kill掉
了不了解Scrollview scrollview和ListView有什么相似点 有什么不同 那如果这两个是继承关系 那应该是谁继承谁?
dp sp px各自的应用场景是什么 换算关系是什么 使用sp的时候如果调整系统字体,显示字体会跟着调整吗?
gallery为什么被废弃?为什么Google推荐使用viewpager代替gallery呢?有什么改进?
handler.postAtTime不是延时post么 那handler怎么延时处理Message
ListView的优化 ;Lru如何实现的 ;OOM的处理 ;GC原理 ;循环引用的问题 引用计数与可达性算法 ;LaunchMode
网络框架实现,volley原理
线程池原理,java提供了哪些线程池
一个activity只能有一个进程么【对进程的理解】
activity任务栈,启动模式相关,四种启动模式
夜间主题的实现方式
动态加载原理,classloader理解
listview实现item左滑需要考虑的问题
view的事件分发与渲染流程
LruCache的理解,原理,以及还有哪些方式实现缓存调度
GC原理,实现方式,能否手动去控制GC回收
OOM,内存泄漏的问题有没有遇到过,如何处理
mvp与mvc的区别,实现,原理
volley原理,发送五个请求(相同以及不同)时,内部所做处理?如何根据发送请求结束后,剔除相同的等待请求?
图片缓存技术的实现,如何结合volley实现,volley自带缓存管理还是需要自己去实现,缓存的底层实现
listview原理,adapter与view是如何绑定的,如何自己设计一个类似listview的自定义view,子item复用,管理以及getView的实现
android线程模型,looper,messageQueue一套机制
线程实现方式,thread+asynctask+handlerThread+intentService,彼此的应用场景以及原理
asynctask底层实现原理,为何不能在非主线程中实例化,其实还是跟onPre and onPost在当前线程实现有关
手机唯一标识方式
手机app耗电量跟什么有关,耗电优化
推送服务原理,心跳机制
service使用注意事项以及原理
服务应用唤醒实现,aidl 的service更新后如何让旧的客户端兼容
多线程实现,通信原理
进程通信原理,使用订阅者模式时,服务端拿到的binder对象为何是新的实例,如何获取到真正客户端实例(RemoteCallbackList)
ssl协议,握手交换密钥过程,加密算法,对称非对称加密原理
lrucache原理实现,linkedhashmap底层,手写代码实现lrucache,对相关的bitmap进行管理
线程池构造函数传参意义,手写代码实现线程池,继承方式,不能用现成的
异步接口实现,实现跨线程通信,不能用handler,looper那一套机制
socket编程实现http请求,手写代码实现
volley原理实现
Android事件分发
scrollview特点
处理listview图片错位方式
Mvp与mvc区别,实现,架构表示
android缓存实现
Java线程 run与start区别,原理实现
打包混淆原理
volley原理,实现
jar封装的private方法能否在外部调用
反编译方式工具及其原理
网络请求方面如何处理
jni使用及其原理
对称加密与非对称加密
使用图片缓存但是服务器改了实际的图片,但url一样,如何在客户端区别
线程间通信,进程间通信,binder原理
sharepreference原理
事件分发原理
设计模式,延迟加载实现单例模式,内部类来解决,加锁也不稳
mvp与mvc
线程池调度实现,不能用executor(当时居然以为blockingqueue存线程呢=_=)
动态加载,dex分包,热修复
缓存原理实现,内存如何分配
如何减小apk体积
性能优化从哪几方面考虑(内存,cpu,fps,ddms灵活dump)
looper,handler等原理
activity的启动模式
listview与recycleView的区别与优缺点
A向B发送消息,A能实时看到B的阅读时间,问A实现方式
volley层次结构,原理,为什么选用volley,不用其他开源框架,对开源框架的看法
MVC与MVP的区别,activity,fragment扮演的角色,presentor之间的通信问题。
进程间的通信,binder的原理,intent与aidl的应用场景及相关比较
图片如何缓存处理,如何处理oom
自定义view实现,注意事项
加载图片请求的超时时间设置,多少秒合适,原因,大图如何加载。
线程间的通信,并发问题解决方案。
快速排序为什么叫做快排,其算法复杂度,及其实现原理
应用签名是为了什么,签名原理是什么
root之后有什么重大的变化,开发者可以操作什么
给出九游android客户端程序,解释下相应的布局,listView做大面积的嵌套,下拉刷新的实现
渠道提示不合法的问题,为何系统能识别渠道非法
说一下Binder机制的底层实现。
Android中进程之间通信,除了Binder还有什么?说一下底层实现原理
说一下Android中的事件处理流程,结合源码解释,不要直接说规律结论。
系统调用的方式?系统调用发生的场景?系统调用常用函数?系统调用的具体过程?
Binder的一次拷贝发生在哪里。
AMS的作用?
一个Activity启动另一个Activity时函数调用流程。
Android中Handler机制?
什么是ThreadLocal,一个线程可以获取到另一个线程的Looper吗?怎么获得?
序列化怎么实现?答安卓端有Serializable和Parcelable。然后问这两个有什么区别,分别怎么实现。
问fragmentPagerAdapter和fragmentStateAdapter的区别。
fragment和fragment怎么通信?
listview怎么优化?
网络通信怎么做的?volley的实现?
http和https的区别?
有看过开源第三方库吗?
登陆注册这块的逻辑一般怎么做?
canvas画了个线,怎么撤销?
性能优化怎么做?
写了多少代码?有开源项目吗?有参与开源项目吗?
bitmap的本质?答到了cpp层。
activity的异常退出和启动调用的方法
activity和service的区别
service启动方式以及区别,以及service的作用
activity的launchmode
过滤规则在manifest和代码中注册有啥区别
布局中优化常用方法,以及分析工具,我答的时候基本围绕层级优化答得,考官建议我从过度绘制等加强学习
屏幕适配问题,老生常谈啦
bitmap加载一个100张图片的优化处理
lrucache和disklrucache,其中还问到软引用和弱引用的使用
listview的优化
自己用过什么开源框架,还有看过源码吗
React-native的通信机制
react-native和phonegap的区别
自己在项目中开发遇到的坑关于react-native
有没有看过react-native的源码,能否讲讲最熟悉的源码
线程和进程的区别,线程自己有没有自己的内存
多线程带来的影响
binder的机制
android为什么使用binder进行跨进程通信
Andorid四大组件
anroid生命周期,opause,onStop区别
Fragment,是否看过源码,如何启动
Service有哪几种
隐式启动和显示启动
Service两种启动方式
启动线程方式有哪几种
handle消息队列相关
几种常用布局,布局到group树过程。。。。
weight属性
布局优化相关
Arraylist LinkList
线程进程区别
一个app能否是多进程?(大概)
converview一些知识点
oom如何发现
handler出现oom如何解决
如何开启多个网络异步请求
线程池内线程的数量如何确定
说说OKHTTP的实现
UIM的实现
讲一下mvp,mvp和mvc区别,讲一下用过的开源项目,说一下如何实现
asynctask实现
线程池如何使用
如何实现多进程,进程间如何通信,具体讲一下socket
surfaceView
如何进行界面优化
如何实现缓存
IOC的思想?
AOP的思想?
为什么android要推出handler啊?handlder能不能用在线程中创建啊?
AysnTask的源码分析,能不能在其他线程中创建的?
一个关于android进程的问题,哪些android进程不能被杀死的?
断点续传的基本原理(问的很细很细)
图片压缩方式
数据结构对一个基本有序的数组应该采用什么方式进行排序,对一个乱序的数组应该采用什么方式排序能快速找到前n个数?为什么?
Java和JavaScript的区别
介绍一下restful框架
多线程安全实现方式,synchronized和lock,信号量的区别
http的理解,http中无状态的含义是
cookie和session的区别
虚拟机相关知识
四大组件生命周期
对我项目中用到一个开源框架中算法了解吗?(IK Analyzer)
数据缓存处理
断点续传原理
Hashmap和hashtable之间的区别
四大组件相关知识
lrucache的基本原理
三级缓存的理解
Volley的原理及使用
对Restful了解
事件分发机制(问的很细很细)
自定义view的绘制方式
Listview的优化(问的很细很细)
Xml解析方式,原理优缺点
自定义控件如何绘制,然后现场画出了一个控件,问我具体应该怎么绘制(如何计算子view的宽高度等等)问的超级细
算法题题目忘了,只记得写的时候时间复杂度过高。
Activity的生命周期及其他相关知识
安卓动画相关知识
service中启动方式有哪些区别是?
线程安全实现方式,线程池具体原理
Linux和安卓中跨进程间通信间的区别,以及安卓中binder基本原理
四大组件的相关知识
java内存模型
GC算法具体内容
接口和抽象类的区别
四大组件的生命周期
Hsahmap的底层原理
断点续传的原理