1:svn在什么情况下会导致一个文件提交不了
2:git分支的原理,和svn有什么区别
3:LeakCanary是哪个开发的
4:什么是注解
5:Butter Knife中最新的采用的是什么原理?
6:rx+retrofit在网络请求后返回的格式是什么格式?怎么用rx统一封装后台返回的{result:200,data:xxxx},表单提交时候的关键字是什么
7:反射时候是否可以反射到私有属性?
8:自定义控件中分为哪几种,android内核启动的原理过程描述.
9:热修复的原理
10:减小apk的方法有哪些
1:svn在什么情况下会导致一个文件提交不了?
假设a,b用户和服务器,服务器对于text.class文件的版本号是20,然后a,b用户也是版本为20的text.class,这时候如果b用户在text.class中添加了文件,然后提交服务器,此时服务器的text.class版本为21,当a用户执行修改本地text.class时候然后提交就是提示冲突,因为a用户当面的text.class为20,解决办法就是update或者对当前文件revert.
2:git分支的原理,和svn有什么区别
通过可变指针来实现对提交数据的历史版本的控制,每当我们提交新的更新,当前分支(设为master)则指向最后一个提交更新A,而最后一个提交对象则存在一个指针指向前一次的提交更新Q。如果我们创建一个新的分支,child,它和master共同指向A,这时,如果我们向child分支提交更新B,我们会发现child指向B,而master依然指向A。无论我们在child分支进行了任何开发,只要回到master分支,就能恢复到更新A的数据状态了。区别就是1.GIT是分布式的,SVN不是;2.GIT把内容按元数据方式存储,而SVN是按文件;3:GIT分支和SVN的分支不同;4.GIT没有一个全局的版本号,而SVN有;5.GIT的内容完整性要优于SVN
3:LeakCanary是哪个开发的
LeakCanary项目是square公司为Java&Android开发提供的一个自动检测内存泄漏的工具
4:什么是注解
用来对这些元素进行说明,注释,注解是以‘@注解名’在代码中存在的,1:【生成文档doc文档】2:【使用反射】3:实现基本的编译检查【Override】
5:Butter Knife中最新的采用的是什么原理?
Butter Knife最新version:8.2.1,以前的版本通过反射,大量使用反射会影响App的运行性能,造成卡顿以及生成很多临时Java对象更容易触发GC,现在通过Java Annotation Processing技术,就是在Java代码编译成Java字节码的时候就已经处理了@Bind、@OnClick(ButterKnife还支持很多其他的注解)这些注解了.
6:rx+retrofit在网络请求后返回的格式是什么格式?怎么用rx统一封装后台返回的{result:200,data:xxxx},表单提交时候的关键字是什么
rxjava中统一的返回对象都是Subscriber对象
public classBase CallModel {
public int errno;
public String msg;
public T data;
}
@GET("user/login")
Calll <CallModel<User>> doLogin(@Query("email") String email,@Query("password") String pwd);
多文件上传:
@Multipart
@POST("upload")
xxx
多参数表单:
@FormUrlEncoded
@POST("login")
xxx
7:反射时候是否可以反射到私有属性?
可以;在访问前防止检查访问权限.
Method method = classType.getDeclaredMethod("sayHello",newClass[] { String.class});
method.setAccessible(true);//抑制Java的访问控制检查
8:自定义控件中分为哪几种,android内核启动的原理过程描述.
1:自绘控件,实现ondraw()
2:组合控件
3:继承控件
启动原理:
ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期
ActivityThread,App的真正入口。当开启App之后,会调用main()开始运行,开启消息循环队列,这就是传说中的UI线程或者叫主线程。与ActivityManagerServices配合,一起完成Activity的管理工作
ApplicationThread,用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityManagerService需要管理相关Application中的Activity的生命周期时,通过ApplicationThread的代理对象与ActivityThread通讯。
ApplicationThreadProxy,是ApplicationThread在服务器端的代理,负责和客户端的ApplicationThread通讯。AMS就是通过该代理与ActivityThread进行通信的。
Instrumentation,每一个应用程序只有一个Instrumentation对象,每个Activity内都有一个对该对象的引用。Instrumentation可以理解为应用进程的管家,ActivityThread要创建或暂停某个Activity时,都需要通过Instrumentation来进行具体的操作。
ActivityStack,Activity在AMS的栈管理,用来记录已经启动的Activity的先后关系,状态信息等。通过ActivityStack决定是否需要启动新的进程。
ActivityRecord,ActivityStack的管理对象,每个Activity在AMS对应一个ActivityRecord,来记录Activity的状态以及其他的管理信息。其实就是服务器端的Activity对象的映像。
TaskRecord,AMS抽象出来的一个“任务”的概念,是记录ActivityRecord的栈,一个“Task”包含若干个ActivityRecord。AMS用TaskRecord确保Activity启动和退出的顺序。如果你清楚Activity的4种launchMode,那么对这个概念应该不陌生。
9:热修复的原理
资源替换
类替换(四大组件、类)
SO补丁
PathClassLoader:通过Context getClassLoader()获取。
DexClassLoader:通过构造函数new DexClassLoader()获取。
10:减小apk的方法有哪些
压缩图片,对图片进行有损压缩;
放弃一些图片资源;
so在gradle中配置
开启gradle minifyenabled:ture
....................