1 wait和 sleep 的差异

wait是Object的办法,wait是目标锁,锁定办法不让持续履行,当履行notify办法后就会持续履行,sleep 是Thread的办法,sleep 是使线程睡觉,让出cpu,结束后主动持续履行

2 View和SurfaceView的差异

View根据主线程改写UI,SurfaceView子线程又能够改写UI

3. View的制作原理

View为一切图形控件的基类,View的制作由3个函数完结
measure,核算视图的巨细
layout,供给视图要显现的方位
draw,制作

4. 简述TCP,UDP,Socket

TCP是经过3次握手,4次挥手完结一串数据的传送
UDP是无衔接的,知道IP地址和端口号,向其发送数据即可,不论数据是否发送成功
Socket是一种不同核算机,实时衔接,比方说传送文件,即时通讯

5.进程和线程的差异

概念:进程包括多个线程,一个程序一个进程,多线程的长处能够进步履行功率,进步资源利用率
创立:Thread类和Runnable接口,
常用办法有:
start()用于发动线程
run()调用线程目标中的run办法
join()兼并插队到当时线程
sellp()睡觉开释cpu资源
setPriority()设置线程优先级

6.RecyclerView和ListView的差异

缓存上:前者缓存的是View+ViewHolder+flag,不必每次调用findViewById,后者则仅仅缓存View
改写数据方面,前者供给了部分改写,后者则悉数改写

7.MVC ,MVP,MVVM

MVC:View是能够直接访问Model的!然后,View里会包括Model信息,不可防止的还要包括一些 事务逻辑。 在MVC模型里,更关注的Model的不变,而一起有多个对Model的不同显现,及View。所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些事务逻辑在View里完成了,导致要更改View也是比较困难的,至少那些事务逻辑是无法重用的。
MVP:MVP 是从经典的形式MVC演化而来,它们的根本思想有相通的当地:Controller/Presenter担任逻辑的处理,Model供给数据,View负 责显现。作为一种新的形式,MVP与MVC有着一个重大的差异:在MVP中View并不直接运用Model,它们之间的通信是经过Presenter (MVC中的Controller)来进行的,一切的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是经过 Controller。
MVVM:数据双向绑定,经过数据驱动UI,M供给数据,V视图,VM即数据驱动层

8.说下 Activity 跟 跟 window , view 之间的联系?

Activity 创立时经过 attach()初始化了一个 Window 也就是PhoneWindow,一个 PhoneWindow 持有一个DecorView 的实例,DecorView 自身是一个 FrameLayout,继承于 View,Activty 经过setContentView 将xml 布局控件不断 addView()添加到 View 中,最终显现到 Window 于我们交互;

9.Java中堆和栈的了解

在Java中内存分为两种,一种是栈内存,另一种是堆内存

堆内存:用于存储Java中的目标和数组,当我们new一个目标或创立一个数组的时分,就会在堆内存中拓荒一段空间给它,用于寄存,堆内存的特点:先进先出,后往后出,②能够动态的分配内存的巨细,生存期不必告诉编译器,但存取速度较慢;

栈内存:主要用来履行程序用,比方根本类型的变量和目标的引用变量,其特点:①先进后出,后进后出,②存取速度比堆快,仅次于寄存器,栈数据能够同享,但其在栈中的数据巨细和生存期必须是确认的;

栈内存和堆内存都属于Java内存的一种,体系会主动去收回它,但关于堆内存开发人员一般会主动收回。

栈是一块和线程严密相关的内存区域,每个线程都有自己的栈内存,用于存储本地变量、办法参数和栈调用一个线程中存储的变量,关于其他线程是不可见的,而堆是一切线程同享的一个共用内存区域,目标都在堆里创立,但为了提升功率,线程会从堆中拷贝一个缓存到自己的栈中,假如多个线程运用该变量,就可能引发问题,这是volatile润饰变量就能够发挥作用,他要求线程从主存中读取变量的值。

10.Android常用的数据存储办法(4种)

运用SharedPreference存储:保存根据xml文件存储的key-value键值对数据,通常用来存储一些简单的装备信息;

文件存储办法:Context供给了两个办法来打开数据文件的文件IO流;

SQLite存储数据:SQLite是轻量级的嵌入式数据库引擎,支撑SQL语言;

网络存储数据:经过网络存储数据;

11.Activity生命周期中的7个办法:

onCreate( ):当Activity被创立时调用;

onStart( ):当Activity被创立后将可见时调用;

onResume( ):(持续开端)当Activity坐落设备最前端,对用户可见时调用;

onPause( ):(暂停)当另一个Activity遮挡当时Activity,当时Activity被切换到后台时调用;

onRestart( ):(从头发动)当另一个Activity履行完onStop()办法,又被用户打开时调用;

onStop( ):假如另一个Activity完全遮挡了当时Activity时,该办法被调用;

onDestory( ):当Activity被毁掉时调用;

12.Activity的四种发动形式

standard、singleTop、singleTask和singleInstance,他们是在装备文件中经过android:LauchMode属性装备;

standard:默许的发动形式,每次发动会在使命栈中新建一个发动的Activity的实例;

SingleTop:假如要发动的Activity实例已坐落栈顶,则不会从头创立该Activity的实例,否则会发生一个新的运行实例;

SingleTask:假如栈中有该Activity实例,则直接发动,中间的Activity实例将会被封闭,封闭的次序与发动的次序相同;

SingleInstance:该发动形式会在发动一个Activity时,发动一个新的使命栈,将该Activity实例放置在这个使命栈中,而且该使命栈中不会再保存其他的Activity实例;

Activity使命栈:即寄存Activity使命的栈,每打开一个Activity时就会往Activity栈中压入一个Activity

使命,每逢毁掉一个Activity的时分,就会从Activity使命栈中弹出一个Activity使命,

因为安卓手机的限制,只能从手机屏幕获取当时一个Activity的焦点,即栈顶元素(

最上面的Activity),其余的Activity会暂居后台等待体系的调用;

13.View的制作原理

View为一切图形控件的基类,View的制作由3个函数完结
measure,核算视图的巨细
layout,供给视图要显现的方位
draw,制作

14.Okhttp衔接池复用机制

15. Rxjava里边有几个人物

Observable:俗称被订阅者,被订阅者是事情的来源,接纳订阅者​​(Observer)​​​的订阅,然后经过发射器​​(Emitter)​​发射数据给订阅者。
Observer:俗称订阅者,注册过程传给被订阅者,订阅者监听开端订阅,监听订阅过程中会把​​Disposable​​​传给订阅者,然后在被订阅者中的发射器​​(Emitter)​​​发射数据给订阅者​​(Observer)​​。
Emitter:俗称发射器,在发射器中会接纳下流的订阅者​​(Observer)​​​,然后在发射器相应的办法把数据传给订阅者​​(Observer)​​。
Consumer:俗称消费器,消费器其实是​​Observer​​​的一种变体,Observer的每一个办法都会对应一个​​Consumer​​,比方Observer的onNext、onError、onComplete、onSubscribe都会对应一个Consumer。
Disposable:是开释器,通常有两种办法会回来​​Disposable​​​,一个是在​​Observer​​​的​​onSubscribe​​​办法回调回来,第二个是在​​subscribe​​订阅办法传consumer的时分会回来

16.RxJava操作符包括的操作符类型有如下几种:

1、创立操作符 :创立被观察者(Observable)目标&发送事情
2、转化操作符:改换被观察者(Observable)发送的事情。将Observable发送的数据按照必定的规则做一些改换,然后再将改换的数据发射出去。改换的操作符有map,flatMap,concatMap,switchMap,buffer,groupBy等等。
3、 兼并操作符:组合多个被观察者(Observable)&兼并需求发送的事情。包括:concatMap(),concat(), merge(),mergeArray(),concateArray(),reduce(),collect(),startWith(),zip(),count()等
4、功用操作符:辅助被观察者(Observable) 发送事情时完成一些功用性需求,如错误处理,线程调度。
5、过滤操作符:用于将Observable发送的数据进行过滤和挑选。让Observable回来我们所需求的数据。过滤操作符有buffer(),filter(),skip(),take(),skipLast(),takeLast(),throttleFirst(),distainctUntilChange()。

17.为什么要在项目中运用OKHttp这个库?

  • OkHttp 供给了对最新的 HTTP 协议版别 HTTP/2 和 SPDY 的支撑,这使得对同一个主机发出的一切恳求都能够同享相同的套接字衔接。

  • 假如 HTTP/2 和 SPDY 不可用,OkHttp 会运用衔接池来复用衔接以进步功率。

  • OkHttp 供给了对 GZIP 的默许支撑来降低传输内容的巨细。

  • OkHttp 也供给了对 HTTP 响应的缓存机制,能够防止不必要的网络恳求。

  • 当网络出现问题时,OkHttp 会主动重试一个主机的多个 IP 地址。

18.OKHttp各个拦截器的作用:

  • interceptors:用户自定义拦截器

  • retryAndFollowUpInterceptor:担任失利重试以及重定向

  • BridgeInterceptor:恳求时,对必要的Header进行一些添加,接纳响应时,移除必要的Header

  • CacheInterceptor:担任读取缓存直接回来(根据恳求的信息和缓存的响应的信息来判断是否存在缓存可用)、更新缓存

  • ConnectInterceptor:担任和服务器树立衔接

19.从这个库OKHttp中学到什么有价值的或者说可学习的规划思想

运用责任链形式完成拦截器的分层规划,每一个拦截器对应一个功用,充分完成了功用解耦,易保护。

20.Retroft是做什么的

Retrofit 是一个 RESTful 的 HTTP 网络恳求框架的封装。Retrofit 2.0 开端内置 OkHttp,前者专心于接口的封装,后者专心于网络恳求的高效。

21.RXJava改换操作符 Map flatMap concatMap buffer

  • map:【数据类型转化】将被观察者发送的事情转化为另一种类型的事情。

  • flatMap:【化解循环嵌套和接口嵌套】将被观察者发送的事情序列进行拆分 & 转化 后兼并成一个新的事情序列,最后再进行发送。

  • concatMap:【有序】与 flatMap 的 差异在于,拆分 & 从头兼并生成的事情序列 的次序与被观察者旧序列出产的次序共同。

  • buffer:定期从被观察者发送的事情中获取必定数量的事情并放到缓存区中,然后把这些数据集合打包发射。