高阶进阶面试题,博你眼球了吗?

196 阅读8分钟

从这里开始吧,唯美

f9GNxRkuoc1yrpj9tjr_248787202604_hd_hq.00_00_00_00.Still001.bmp

网络题

APP网络层有哪些优化方式呢?

1 优化DNS解析和缓存 2 对传输的数据进行压缩,减少传输的数据 3 使用缓存手段减少请求的发起次数 4 使用策略来减少请求的发起次数,比如在上一个请求未着地之前,不进行新的请求 5 避免网络抖动,提供重发机制

二 TCP为什么要三次握手,四次挥手?

三次握手:

  1. 客户端向服务端发起请求链接,首先发送SYN报文,SYN=1,seq=x,并且客户端进入SYN_SENT状态
  2. 服务端收到请求链接,服务端向客户端进行回复,并发送响应报文,SYN=1,seq=y,ACK=1,ack=x+1,并且服务端进入到SYN_RCVD状态
  3. 客户端收到确认报文后,向服务端发送确认报文,ACK=1,ack=y+1,此时客户端进入到ESTABLISHED,服务端收到用户端发送过来的确认报文后,也进入到ESTABLISHED状态,此时链接创建成功

四次挥手:

1 客户端向服务端发起关闭链接,并停止发送数据

2 服务端收到关闭链接的请求时,向客户端发送回应,我知道了,然后停止接收数据

3 当服务端发送数据结束之后,向客户端发起关闭链接,并停止发送数据

4 客户端收到关闭链接的请求时,向服务端发送回应,我知道了,然后停止接收数据

三次握手就是为了防止已失效的连接请求报文文段突然又传送到了服务端,因而产生错误,就好比一个失效的报文段,server收到失效的连接请求报文段后,同意建立连接,不采用三次握手,只要server发出确认,新的连接建立了。由于client并没有发出建立连接的请求,就不会理睬server的确认,也不会向server发送数据。但是server以为新的运输连接已经建立,并一直等待client发来数据,这样server的很多资源就白白浪费了。

四次握手因为TCP是全双工通信,在在接收到客户端的关闭请求时,还可能在向客户端发送着数据,因此不能再回应关闭链接的请求时,同时发送关闭链接的请求

对称加密和非对称加密的区别?分别有哪些算法的实现?

对称加密,加密的加密和解密使用同一密钥。

非对称加密,使用一对密钥用于加密和解密,分别为公开密钥和私有密钥。公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

对称加密常用的算法实现有AES,ChaCha20,DES,不过DES被认为是不安全的;非对称加密用的算法实现有RSAECC

HTTPS的握手流程?为什么密钥的传递需要使用非对称加密?双向认证了解么?

这是HTTPS的握手流程图

image.png

  1. 客户端发送Client Hello 报文开始SSL通信。报文中包含客户端支持的SSL的版本,加密组件列表。
  2. 服务器收到之后,会以Server Hello 报文作为应答。和客户端一样,报文中包含客户端支持的SSL的版本,加密组件列表。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
  3. 服务器发送Certificate报文。报文中包含公开密钥证书。
  4. 然后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
  5. SSL第一次握手结束之后,客户端以Client Key Exchange报文作为会议。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串
  6. 接着客户端发送Change Cipher Space报文。该报文会提示服务器,在次报文之后的通信会采用Pre-master secret密钥加密
  7. 客户端发送Finished 报文。该报文包含链接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确揭秘该报文作为判定标准
  8. 服务器同样发送Change Cipher Space报文。
  9. 服务器同样发送Finished报文。
  10. 服务器和客户端的Finished报文交换完毕之后,SSL连接建立完成,从此开始HTTP通信,通信的内容都使用Pre-master secret加密。然后开始发送HTTP请求
  11. 应用层收到HTTP请求之后,发送HTTP响应
  12. 最后有客户端断开连接

为什么密钥的传递需要使用非对称加密?

答:使用非对称加密是为了后面客户端生成的Pre-master secret密钥的安全,通过上面的步骤能得知,服务器向客户端发送公钥证书这一步是有可能被别人拦截的,如果使用对称加密的话,在客户端向服务端发送Pre-master secret密钥的时候,被黑客拦截的话,就能够使用公钥进行解码,就无法保证Pre-master secret密钥的安全了

双向认证了解么?(这里我真想说一句不了解)

答:上面的HTTPS的通信流程只验证了服务端的身份,而服务端没有验证客户端的身份,双向认证是服务端也要确保客户端的身份,大概流程是客户端在校验完服务器的证书之后,会向服务器发送自己的公钥,然后服务端用公钥加密产生一个新的密钥,传给客户端,客户端再用私钥解密,以后就用此密钥进行对称加密的通信

 HTTPS是如何实现验证身份和验证完整性的?

使用数字证书和CA来验证身份,首先服务端先向CA机构去申请证书,CA审核之后会给一个数字证书,里面包裹公钥、签名、有效期,用户信息等各种信息,在客户端发送请求时,服务端会把数字证书发给客户端,然后客户端会通过信任链来验证数字证书是否是有效的,来验证服务端的身份。

使用摘要算法来验证完整性,也就是说在发送消息时,会对消息的内容通过摘要算法生成一段摘要,在收到收到消息时也使用同样的算法生成摘要,来判断摘要是否一致。

 如何用Charles抓HTTPS的包?其中原理和流程是什么?

流程:

1 首先在手机上安装Charles证书 2 在代理设置中开启Enable SSL Proxying 3 然后添加需要抓取的服务端的地址

原理:

Charles作为中间人,对客户端伪装成服务端,对服务端伪装成客户端。简单来说:

  • 截获客户端的HTTPS请求,伪装成中间人客户端去向服务端发送HTTPS请求
  • 接受服务端返回,用自己的证书伪装成中间人服务端向客户端发送数据内容。

图:

image.png

中间人攻击,如何避免?

中间人攻击就是截获到客户端的请求以及服务器的响应,比如Charles抓取HTTPS的包就属于中间人攻击。

避免的方式:客户端可以预埋证书在本地,然后进行证书的比较是否是匹配的

**计算机系统题 **

了解编译的过程么?分为哪几个步骤?

  1. 预编译:主要处理以“#”开始的预编译指令。

2 编译:

  • 词法分析:将字符序列分割成一系列的记号。

  • 语法分析:根据产生的记号进行语法分析生成语法树。

  • 语义分析:分析语法树的语义,进行类型的匹配、转换、标识等。

  • 中间代码生成:源码级优化器将语法树转换成中间代码,然后进行源码级优化,比如把 1+2 优化为 3。中间代码使得编译器被分为前端和后端,不同的平台可以利用不同的编译器后端将中间代码转换为机器代码,实现跨平台。

  • 目标代码生成:此后的过程属于编译器后端,代码生成器将中间代码转换成目标代码(汇编代码),其后目标代码优化器对目标代码进行优化,比如调整寻址方式、使用位移代替乘法、删除多余指令、调整指令顺序等。

3 汇编:汇编器将汇编代码转变成机器指令。

  • 静态链接:链接器将各个已经编译成机器指令的目标文件链接起来,经过重定位过后输出一个可执行文件。

  • 装载:装载可执行文件、装载其依赖的共享对象。

  • 动态链接:动态链接器将可执行文件和共享对象中需要重定位的位置进行修正。

  • 最后,进程的控制权转交给程序入口,程序终于运行起来了。

今天的高级面试题就分享到这啦

iOS的开发的你处于哪个事业阶段呢?,学习完这些,掌握它们,未来的方向和职业规划 docs.qq.com/doc/DZXpKSU…