android每日一问

1.SharedPrefrences的apply和commit有什么区别?

答案链接
1.commit方法有如下特点:

  • 有返回值,设置成功为true,否则为false。
  • 同时对一个SharedPrefrences设置值最后一次的设置会直接覆盖前次值
  • 如果不关心设置成功与否,并且是在主线程设置值,建议使用apply方法。
  • 存储的过程是原子操作

2.apply方法

  • 没有返回值,存储是否成功不知道
  • apply写入过程分成两步,第一步先同步写入内存,第二步在异步写入物理磁盘,并且写入的过程会阻塞同一SharedPrefrences对象的其他写入操作。
  • 存储的过程是原子操作
原子操作:不可中断的一个或一系列操作,一个操作一旦开始,在结束前不会被打断。
以++i为例,该操作就不具有原子性,因为他包含了三个步骤的。(1)先取i的值,(2)对i值加1,(3)写入加1后的值

总结
commit相对apply方式效率较低,commit直接是向物理介质写入内容,apply是先同步将内容提交到内存,然后在异步的向物理介质写入内容。
参考答案
apply没有返回值而commit返回boolean表明修改是否提交成功。
apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘。

2. SurfaceView和View的区别

View需要在UI线程对画面进行刷新,而SurfaceView可在子线程进行页面的刷新。SurfaceView在底层已实现双缓冲机制,因此SurfaceView比View更适用于需要频繁刷新,刷新时数据处理量很大的页面(比如视频播放界面)。

3.TCP/IP协议分为哪几层?TCP和HTTP分别属于哪一层?

分为四层:应用层、传输层、网络层、网络接口层。
应用层:在这一层有很多协议来支持不同的应用,就用户而言,看到的是大多为图形化的操作界面,而世纪后台运行的是协议(FTP、SMTP、telnet、DNS、tftp)。Http协议就属于应用层
传输层:这一层的功能主要是提供应用程序间的通信,协议族在这一层的协议有TCP和UDP
网络层:主要定义了IP地址格式,从而能够使得不同应用类型的数据在 Internet上通畅的传输,IP协议就是一个网络层协议。
网络接口层:TCP/IP的最底层,负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。

4.如何理解java中强引用、软引用以及虚引用?

参考答案:
(1)强引用
一般的Object obj = new Object(),就属于强引用。
(2)软引用
一些有用但是并非必须,用软引用关联的对象,系统将要发生OOM之前,这些对象就会被回收。一个程序用来处理用户提供的图片,如果将所有图片读入内存,这样虽然可以很快的打开图片,但内存空间使用巨大,一些实用较少的图片浪费内存空间,需要手动从内存中移除。如果每次打开图片都从磁盘文件中读取到内存再显示出来,虽然内存占用较少,但一些经常使用的图片每次打开都要访问磁盘,代价巨大。这个时候就可以用软引用构建缓存。
(3)弱引用
一些有用(程度比软引用更低)但是并非必须,用弱引用关联的对象,只能生存到下一次垃圾回收之前,GC发生时,不管内存够不够,都会被回收。
注意:软引用 SoftReference和弱引用 WeakReference,可以用在内存资源紧张的情况下以及创建不是很重要的数据缓存。当系统内存不足的时候,缓存中的内容是可以被释放的。
实际运用(WeakHashMap、ThreadLocal)
(4)虚引用
作用只是GC回收时得到一个通知

LayoutInflater 的 inflate 方法的几个参数分别代表什么?

 public View inflate(int resource, @RecentlyNullable ViewGroup root, boolean attachToRoot) {
        throw new RuntimeException("Stub!");
    }

第一个参数代表的是想要加载进来的子布局id(layout文件的名字),第二个是想要插入的到的父容器(注意这个要是layout的id),第三个是否将layout文件添加进root中去。

 val view = inflater.inflate(R.layout.layout,mainlayout,true)
 就是下面这个效果

在这里插入图片描述
如果boolean变量设为false就不会加载进来,需要手动添加。

val view = inflater.inflate(R.layout.layout,mainlayout,false)
        mainlayout.addView(view)

在这里插入图片描述
如果root==null,在添加view的时候它的根节点的宽高属性会失效。
在这里插入图片描述
参考答案:第一个参数为布局文件ID
方法用三个参数时,root的参数是否为空,决定了我们要不要沿用root的布局属性,attachToRoot是否为true,决定了是否将我们的layout作为子View添加进去。
方法用两个参数时,root既决定了是否要沿用root的布局属性,也决定了是否要将我们的layout作为子View添加进去。

5.五层协议的体系结构分别是什么?每一层都有哪些协议?

1.物理层
2.数据链路层:逻辑链路控制LLC、媒体接入控制MAC
3.网络层:IP协议、地址解析协议ARP、逆地址解析协议RARP、因特网控制报文协议ICMP
4.传输层:传输控制协议TCP、用户数据报协议UDP
5.应用层:文件传输协议FTP、远程登录协议TELNET、超文本传输协议HTTP、域名系统DNS、简单邮件协议SMTP、简单网络管理协议SNMP。

6.请谈一下,什么情况会发生死锁

死锁发生的四个条件。
(一)互斥条件一个资源一次只能被一个进程访问。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。
(二)请求与保持条件一个进程因请求资源而阻塞时,对已获得的资源保持不放。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。
(三)不剥夺条件进程已经获得的资源,在未使用完之前不能强行剥夺,而只能由该资源的占有者进程自行释放
(四)循环等待条件:若干资源形成一种头尾相接的循环等待资源关系

发布了55 篇原创文章 · 获赞 28 · 访问量 9237

猜你喜欢

转载自blog.csdn.net/weixin_41796401/article/details/103800203