度小满

度小满

一面:

1.内存管理,内存泄漏,监测方法,解决办法

2.App启动流程,优化方法,查看每个阶段耗时的方法

Category和Extension区别,使用场景

Category可以添加属性吗?

3.webView和原生交互,怎么提升webView加载速度?H5怎么加载本地的JS和图片资源?

4.HTTP和HTTPS的区别,HTTPS怎么保证安全?GET和POST区别?请求头里一般有什么?

5.MVC、MVP、MVVM区别,使用场景

6.用OC实现一个栈,push pop isEmpty方法,栈和队列的区别,使用场景

7.了解鸿蒙吗

二面:

1.了解提升研发效率的方法,跨平台框架?

2.Flutter和原生交互方法

3.小程序的实现原理,SN的实现原理

3.设计图片下载框架,包括内存,缓存,解码等;缓存的技术指标是什么?(命中率) 在缓存即将达到最大容量时,同时有大量写入缓存的操作,怎么优化?

4.下载限制并发数量,下载断点续传 http请求码是多少

5.同层渲染怎么实现

6.webView加载速度优化

7.线上卡顿监控,卡顿优化

8.线上内存监控

9.口述快速排序,快速排序用迭代实现

10.HTTPS的流程,客户端校验证书的过程,链式验证

三面:

1.监控

2.原生与H5交互,注入和post message怎么选型的?

3.有没有关注过业务指标,技术手段提升业务指标的情况?收银台支付成功率?

4.其他:年龄、看机会原因,有没有别的offer

参考答案

1.内存管理,内存泄漏,卡顿监测方法,解决办法

2.App启动流程,优化方法,查看每个阶段耗时的方法

3.webView和原生交互,怎么提升webView加载速度?H5怎么加载本地的JS和图片资源?

4.HTTP和HTTPS的区别,HTTPS怎么保证安全?GET和POST区别?请求头里一般有什么?

HTTP(HyperText Transfer Protocol)和HTTPS(HyperText Transfer Protocol Secure)是用于在网络上传输数据的两种协议。它们有以下主要区别:

  1. 安全性
    • HTTP:数据以纯文本形式传输,不加密。因此,数据在传输过程中容易被截获和篡改。
    • HTTPS:在HTTP的基础上增加了SSL/TLS加密层。数据在传输过程中会被加密,提供了数据的保密性和完整性,防止被窃听和篡改。
  2. 端口
    • HTTP:默认使用80端口。
    • HTTPS:默认使用443端口。
  3. 证书
    • HTTP:不需要证书。
    • HTTPS:需要SSL/TLS证书,用于加密通信和验证服务器身份。证书由受信任的证书颁发机构(CA)签发。
  4. 性能
    • HTTP:因为没有加密和解密的过程,速度相对较快。
    • HTTPS:由于需要进行加密和解密操作,性能会有所下降,但现代硬件和优化技术已经极大地减少了这种影响。

GET和POST区别

  • GET:主要用于获取数据,参数在URL中,适合传输较少、非敏感数据,幂等且可缓存。
  • POST:主要用于提交数据,参数在请求体中,适合传输大量、敏感数据,非幂等且通常不缓存。

以下是一些常见的HTTP请求头字段及其作用:

1. 通用请求头字段

  • Host:指定请求的目标主机和端口,例如:Host: www.example.com。这是HTTP/1.1中必须包含的头字段。
  • User-Agent:标识发出请求的客户端软件信息,例如浏览器类型和版本、操作系统等,例如:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
  • Accept:指定客户端能够处理的内容类型,例如:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  • Accept-Language:指定客户端首选的语言和地区,例如:Accept-Language: en-US,en;q=0.5
  • Accept-Encoding:指定客户端支持的内容编码类型,例如:Accept-Encoding: gzip, deflate, br
  • Connection:控制连接的管理,例如:Connection: keep-aliveConnection: close

2. 请求头字段(请求特有)

  • Referer:指示请求的来源页面的URL,例如:Referer: https://www.example.com/previous-page
  • Cookie:发送存储在客户端的Cookie数据,例如:Cookie: sessionId=abc123; theme=light
  • Authorization:用于传递身份验证凭据,例如:Authorization: Bearer token123Authorization: Basic base64credentials
  • Content-Type:指定请求体的媒体类型,常用于POST和PUT请求,例如:Content-Type: application/jsonContent-Type: application/x-www-form-urlencoded
  • Content-Length:表示请求体的字节长度,例如:Content-Length: 348
  • Origin:表明请求的来源,用于跨域请求,例如:Origin: https://www.example.com
  • If-Modified-Since:用于条件请求,只在指定日期之后资源被修改时才返回,例如:If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
  • If-None-Match:用于条件请求,当ETag不匹配时才返回,例如:If-None-Match: "abc123"
  • Range:请求部分资源内容,例如:Range: bytes=500-999

3. 自定义请求头字段

  • X-Requested-With:通常用于标识Ajax请求,例如:X-Requested-With: XMLHttpRequest
  • X-CSRF-Token:用于传递CSRF(跨站请求伪造)令牌,以防止CSRF攻击。
  • X-Forwarded-For:记录原始客户端IP地址,常用于代理服务器,例如:X-Forwarded-For: 203.0.113.195

4. HTTP/2 特有头字段

  • :method:表示HTTP方法,例如::method: GET
  • :scheme:表示请求的协议(http或https),例如::scheme: https
  • :path:表示请求的路径和查询字符串,例如::path: /index.html
  • :authority:表示服务器的主机名和端口,类似于HTTP/1.1的Host头字段,例如::authority: www.example.com

示例请求头

1
2
3
4
5
6
7
8
9
10
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://www.example.com/previous-page
Cookie: sessionId=abc123; theme=light
Authorization: Bearer token123

这些请求头字段在客户端和服务器之间传递时,提供了关于请求和客户端环境的丰富信息,使得服务器能够理解和处理请求,并返回适当的响应。

5.MVC、MVP、MVVM区别,使用场景

6.用OC实现一个栈,push pop isEmpty方法,栈和队列的区别,使用场景

7.了解鸿蒙吗

二面:

1.了解提升研发效率的方法,跨平台框架?

2.Flutter和原生交互方法

3.小程序的实现原理,SN的实现原理

3.设计图片下载框架,包括内存,缓存,解码等;缓存的技术指标是什么?(命中率) 在缓存即将达到最大容量时,同时有大量写入缓存的操作,怎么优化?

4.下载限制并发数量,下载断点续传 http请求码是多少

5.同层渲染怎么实现

小程序同层渲染原理剖析

小程序在同层渲染上的探索

6.webView加载速度优化

7.线上卡顿监控,卡顿优化

8.线上内存监控

iOS微信内存监控

9.口述快速排序,快速排序用迭代实现

10.HTTPS的流程,客户端校验证书的过程,链式验证

第一步是检查证书的链式验证。客户端会使用已信任的根证书(Root Certificate Authority)去验证服务器证书的有效性。根证书是权威机构颁发的,被广泛信任的证书,用于证明其它证书的合法性。客户端会检查服务器证书中的颁发者,然后递归地检查颁发者的证书,直到检查到根证书或者找不到信任的根证书为止。

第二步是检查证书的有效期。客户端会检查证书的有效起始日期和有效截止日期,确保证书在有效期内。如果证书过期,客户端将拒绝连接。

第三步是检查证书的公钥。客户端会验证服务器证书中的公钥和域名是否匹配。客户端会从证书中提取服务器的公钥,并与服务器进行握手协议,验证证书中的公钥是否与服务器的公钥匹配。如果不匹配,客户端将拒绝连接。

除了上述基本的校验步骤,客户端还可以进行更加严格的校验,以提高安全性。例如,客户端可以检查证书中是否包含指纹信息(Fingerprint),从而确保证书的完整性和一致性。客户端也可以检查证书中的扩展字段,查看是否存在其他安全相关的信息。

总结来说,客户端校验证书的过程包括链式验证、有效期验证和公钥匹配验证。通过这些验证步骤,客户端能够确保所连接的服务器是合法且可信赖的,从而保障通信的安全性。

三面:

1.监控

2.原生与H5交互,注入和post message怎么选型的?

在移动开发中,原生与H5(HTML5)交互是一个常见的需求。为了实现这种交互,通常有两种主要的方法:注入(Injection)和 postMessage。各有优缺点,选择哪种方法取决于具体的应用场景和需求。下面对这两种方法进行详细比较和建议:

注入(Injection)

优点:

  1. 灵活性高:可以直接在H5页面中注入原生代码,灵活性较高。
  2. 强大的控制力:原生代码可以直接操作H5页面的DOM和JavaScript,控制力强。
  3. 无需特定API支持:不需要依赖特定的API或者更新H5页面的代码。

缺点:

  1. 安全性问题:注入代码可能会带来安全风险,容易被恶意代码利用。
  2. 维护复杂:代码维护复杂,尤其是原生代码和H5页面频繁变动时。
  3. 浏览器兼容性:不同浏览器对注入代码的支持可能有所不同。

postMessage

优点:

  1. 安全性高:通过消息传递的方式进行交互,安全性较高,不容易被恶意代码利用。
  2. 标准化postMessage是HTML5标准的一部分,具有较好的跨浏览器兼容性。
  3. 易于调试和维护:消息传递方式使得代码逻辑更加清晰,易于调试和维护。

缺点:

  1. 性能影响:在高频率消息传递的情况下,可能会有性能影响。
  2. 依赖API:需要H5页面和原生代码都支持postMessage API。
  3. 有限的控制力:相比直接注入代码,控制力稍弱,只能通过消息进行交互。

如何选择?

选择哪种方法取决于具体的应用场景和需求:

  1. 安全性优先:如果安全性是首要考虑因素,建议使用postMessage,因为这种方法更安全,不容易被恶意代码利用。
  2. 高频交互:如果需要高频率的交互,且对性能要求较高,可以考虑注入方式,但要特别注意代码的安全性和浏览器兼容性。
  3. 跨浏览器兼容:如果需要在多个浏览器中运行,并且希望代码易于维护和调试,postMessage是更好的选择。
  4. 快速开发:如果需要快速实现功能,且不考虑长远的维护和安全性问题,注入方式可能会更快捷。

结论

综合来看,postMessage在大多数情况下是更优的选择,特别是在考虑安全性、标准化和易于维护的情况下。但在某些特定场景下,比如需要高频率的交互或者对H5页面进行强控制时,注入方式也不失为一个可选方案。最终的选择应根据具体的项目需求和开发环境来决定。

3.有没有关注过业务指标,技术手段提升业务指标的情况?收银台支付成功率?

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×