字节-Android开发面经(五)

扶摇就业

共 4190字,需浏览 9分钟

 ·

2021-06-07 13:03

点击蓝字关注我们,获取更多面经








SharedPreference




Android的四大数据存储方式之一“SharedPreference”,其他三个分别是SQLite、Content Provider 和 File

一般使用SharedPreference来存储应用程序的配置信息。它一般存储在应用程序的私有存储区,文件权限是私有的。也就是说只能供写入者读取。它使用键/值(NVP机制)来存储数据。支持的数据类型(boolean、int、float、long和String)。它存储在应用程序的私有目录下(data/data/包名 /shared_prefs/)自定义的XML文件中。

 

1.创建SharedPreference

SharedPreference myPreference=getSharedPreferences("myPreference", Context.MODE_PRIVATE);

 

第一个参数:SharedPreference 的名称

第二个参数:打开的方式,一般有两个值(0和MODE_PRIVATE)我们一般用MODE_PRIVATE

 

2.写入,更新SharedPreference

//获取SharedPreferences对象

 

SharedPreference myPreference=getSharedPreferences("myPreference", Context.MODE_PRIVATE);

//像SharedPreference中写入数据需要使用Editor

Editor editor = myPreference.edit();

 

//存入键值对数据,注意此处的put[type]("key",value);

 

editor.putString("STRING_KEY", "string");

 

editor.putInt("INT_KEY", 0);

editor.putBoolean("BOOLEAN_KEY", true);

 

//提交保存

 

//editor.apply();

editor.commit();

 

提示:

(1)apply和commit都是提交保存,区别在于apply是异步执行的,不需要等待。不论删除,修改,增加都必须调用apply或者commit提交保存。

(2)关于更新:如果已经插入的key已经存在。那么将更新原来的key。

(3)应用程序一旦卸载,SharedPreference也会被删除。


3.读取

SharedPreference myPreference=getSharedPreferences("myPreference", Context.MODE_PRIVATE);

//读取这里主要用到了get[type]("key",defaultvalue),第一个参数是要获取的key,第二个参数是默认值,是当没有为这个key保存值的时候使用。

String name=preferences.getString("name", "defaultname");


String age=preferences.getString("name", "暂无");

String age=preferences.getInt("age", 0);

String age=preferences.getBoolean("isRead", false);



4.检索

SharedPreference myPreference=getSharedPreferences("myPreference", Context.MODE_PRIVATE);

//检查当前键是否存在

boolean isContains=myPreference.contains("key");


//使用getAll可以返回所有可用的键值

//Map<String,?> allMaps=myPreference.getAll();







http2.0




  一. 介绍

HTTP/2是HTTP协议自1999年HTTP1.1发布后的首个更新,主要基于SPDY协议。


1.1 什么是SPDY协议

SPDY是Speedy的昵音,意为“更快”。它是Google开发的基于TCP协议的应用层协议。目标是优化HTTP协议的性能,通过压缩、多路复用和优先级等技术,缩短网页的加载时间并提高安全性。SPDY协议的核心思想是尽量减少TCP连接数。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。


1.2 HTTP1.X的缺点

任何事物的更新都是为了弥补或修复上个版本的某些问题,那么我们来看看HTTP1.x都有哪些缺点以至于我们要使用HTTP2.0。


HTTP1.x有以下几个主要缺点:

HTTP/1.0一次只允许在一个TCP连接上发起一个请求,HTTP/1.1使用的流水线技术也只能部分处理请求并发,仍然会存在队列头阻塞问题,因此客户端在需要发起多次请求时,通常会采用建立多连接来减少延迟。

单向请求,只能由客户端发起。

请求报文与响应报文首部信息冗余量大。

数据未压缩,导致数据的传输量大

我们可以通过一个链接来对比一下HTTP2.0到底比HTTP1.x快了多少。链接地址


二. 二进制分帧

在不改变HTTP1.x的语义、方法、状态码、URL以及首部字段的情况下,HTTP2.0是怎样突破HTTP1.1的性能限制,改进传输性能,实现低延迟高吞吐量的呢?关键之一就是在应用层(HTTP)和传输层(TCP)之间增加一个二进制分帧层。


在整理二进制分帧及其作用的时候我们先来铺垫一点关于帧的知识:


帧:HTTP2.0通信的最小单位,所有帧都共享一个8字节的首部,其中包含帧的长度、类型、标志、还有一个保留位,并且至少有标识出当前帧所属的流的标识符,帧承载着特定类型的数据,如HTTP首部、负荷、等等。

消息:比帧大的通讯单位,是指逻辑上的HTTP消息,比如请求、响应等。由一个或多个帧组成

流:比消息大的通讯单位。是TCP连接中的一个虚拟通道,可以承载双向的消息。每个流都有一个唯一的整数标识符

HTTP2.0中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据。基于文本的方式传输数据存在很多缺陷,文本的表现形式有多样性,因此要做到健壮性考虑的场景必然有很多,但是二进制则不同,只有0和1的组合,因此选择了二进制传输,实现方便且健壮。

在HTTP2.0中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。


为了保证HTTP不受影响,那就需要在应用层(HTTP2.0)和传输层(TCP or UDP)之间增加一个二进制分帧层。在二进制分帧层上,HTTP2.0会将所有传输的信息分为更小的消息和帧,并采用二进制格式编码,其中HTTP1.x的首部信息会被封装到Headers帧,而Request Body则封装到Data帧。


三. 首部压缩

HTTP1.1并不支持HTTP首部压缩,为此SPDY和HTTP2.0出现了。SPDY是用的是DEFLATE算法,而HTTP2.0则使用了专门为首部压缩设计的HPACK算法。


HTTP每次通讯(请求或响应)都会携带首部信息用于描述资源属性。


在HTTP1.0中,我们使用文本的形式传输header,在header中携带cookie的话,每次都需要重复传输几百到几千的字节,这着实是一笔不小的开销。


在HTTP2.0中,我们使用了HPACK(HTTP2头部压缩算法)压缩格式对传输的header进行编码,减少了header的大小。并在两端维护了索引表,用于记录出现过的header,后面在传输过程中就可以传输已经记录过的header的键名,对端收到数据后就可以通过键名找到对应的值。


四. 多路复用

在HTTP1.x中,我们经常会使用到雪碧图、使用多个域名等方式来进行优化,都是因为浏览器限制了同一个域名下的请求数量,当页面需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求时,资源需要等待其他资源请求完成后才能继续发送。


HTTP2.0中,基于二进制分帧层,HTTP2.0可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来。通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。


五. 请求优先级

把HTTP消息分为很多独立帧之后,就可以通过优化这些帧的交错和传输顺序进一步优化性能。


六. 服务器推送

HTTP2.0新增的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确的请求。


服务端根据客户端的请求,提前返回多个响应,推送额外的资源给客户端。如下图,客户端请求stream 1(/page.html)。服务端在返回stream 1的消息的同时推送了stream 2(/script.js)和stream 4(/style.css)

服务端推送是一种在客户端请求之前发送数据的机制。在HTTP2.0中,服务器可以对一个客户端的请求发送多个响应。如果一个请求是由你的主页发送的,服务器可能会响应主页内容、logo以及样式表,因为他知道客户端会用到这些东西。这样不但减轻了数据传送冗余步骤,也加快了页面响应的速度,提高了用户体验。


推送的缺点:所有推送的资源都必须遵守同源策略。换句话说,服务器不能随便将第三方资源推送给客户端,而必须是经过双方的确认才行。







更多面经





阿里-Android开发面经(一)


百度-Android开发面经(一)


滴滴-Android开发面经(一)


    扫描二维码

   获取更多面经

  扶摇就业  


浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报