一面
问题一.
介绍一下你自己?
回答:从我是谁,我来自哪里,我什么时候开始学的安卓,我的兴趣爱好是什么这几个角度进行了介绍。
问题二.
做过什么项目?
回答:如实回答了我做过的主要项目。
问题三.
讲述一下mvp和mvvvm?
回答:mvp是由mvc改进来的,区别在于view和model不进行直接交互,而是交给presenter来处理。从而降低了代码耦合性。mvp中随着业务的增加,会有非常多UI相关的case。这样就会造成view的接口很庞大。而MVVM就解决了这个问题。通过双向绑定的机制,实现数据和UI的内容。体现了只要想改其中一方,另一方都能够及时更新的一种设计理念。但MVVM在实际开发过程中并不常用。
问题四.
介绍一下retrofit和rxjava?
回答:retrofit让我们更简单地进行http请求。retrofit是一个restful的HTTP网路请求框架的封装。网络请求的工作本质上是由OKHTTP完成,而retrofit仅负责网络请求接口的封装。retrofit最好是配合rxjava一起使用。rxjava,是响应式编程。响应式编程的本质就是监督事件并且对其作出反应,rxjava采用背压策略。rejava的使用有效的避免了回调地狱。
问题五.
介绍一下你实际用过的OKHTTP吧?
回答:OKHTTP是一个高效的HTTP库。会从很多连接问中自动恢复;如果服务器配置了多个IP地址,当第一个IP连接失败的时候,OKHTTP会自动尝试下一个IP;OKHTTP还处理了代理服务器与SSL握手失败的问题。使用OKHTTP要先创建一个OKHttpClient,然后创建一个request对象,通过内部类builder调用生成;第三步创建call对象,调用execute/enqueue方法。
问题六.
如果不使用OKHTTP,你怎样进行网络请求?
回答:android中提供了两种网络请求的方式,一种是使用apache的HttpClient,另一种是使用java的httpurlconnection。
问题七.
介绍一下canvas?
回答:canvas绘图有三个基本要素:canvas,绘图坐标系,paint。canvas是画布,我们通过canvas的各种drawXXX方法将图形绘制在界面上。在drawXXX方法中我们需要传入要绘制的图形的坐标形状,还要传入一个画笔Paint。然后讲了一下view绘制的三个核心方法,measure(),onlayout(),ondraw()。然后就说具体的我也不记得了。
问题八.
介绍一下Tinker热修复框架?
回答:Tinker生成差分包的方式。
问题九.
怎样优化布局?
回答:主要是要减少布局嵌套。include和merge标签的使用。
问题十.
说说安卓事件分发机制?
回答:简单的说就是大的传给小的,小的处理不了返回给大的。具体就是,Activity传消息给viewgroup,viewgroup再传给view。
二面
只让写了一道排序题,说排出来就可以。
public class sort {
public static void main(String args[]){
int[] a={4,6,7,3,9,2};
sortz(a);
}
private static void sortz(int[] a) {
int t=0;
for(int i=0;i<a.length;i++){
for(int j=i;j<a.length;j++){
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
然后问我有没有想到用treeset。我就简单的介绍了一下treeset。