Skip to content

Latest commit

 

History

History
111 lines (55 loc) · 3.7 KB

面试题记录(持续).md

File metadata and controls

111 lines (55 loc) · 3.7 KB

一面:

触摸的事件分发机制->ViewGroup中又是如何确认是点击的某个空间?(通过位置来区分)->如何扩展view的点击区域(可以在ViewGroup中的分发部分来进行处理)

内存优化

包体积优化

启动优化

常见的内存泄漏

如何检测内存泄漏?

如何设计一个网络库

网络库的缓存是何时清理

开启使用Okhttp的缓存其实很简单,只需要给OkHttpClient对象设置一个Cache对象即可,创建一个Cache时指定缓存保存的目录和缓存最大的大小即可。

如何控制内存缓存的大小?

为什么对于UI的操作只能在主线程处理?->引出并发处理->常见的并发处理方案

如何文件上传

断点下载是如何实现的

图片的占用内存的大小是如何计算的

如何设计一个HashMap

MVC,MVP,MVVM的区别

线程同步方法,

常用的锁机制

Handler机制

POST请求,用GET方法可以执行么,反过来呢?

常用的Header信息:gzip,keepalive,content-language,cache-control,mime-type。accept-language

TCP/UDP的区别

基于UDP的HTTP3.0是如何保证消息可靠性的

HTTP协议

HTTP是无状态的,那么HTTP如何保存状态——

Session(服务端保存):数据存在服务器,给浏览器一个key,是针对单个服务器的,多服务器共享会比较麻烦,而且对服务器压力比较大

Cookie区别,token机制:用户信息保存在数据库,给客户端一个字符,token每次都需要自己带上来,比较安全,没有跨域攻击,可以在不同服务器之间公用

jwt:token就包含了加密后的信息,直接解密就可以使用

HTTP1.0与HTTP2.0的区别:

http2是进行了性能的优化:头部压缩,二进制格式报文(相对于可阅读的文本形式)

算法题:

写一个算法来计算两个链表的交叉点,说明时间和空间复杂度

二面

自我介绍

  • okhttp的缓存是如何实现的,内部的相关机制是如何实现的

  • okhttp中的socket的复用是如何实现的

有一个双端队列,会缓存对应的connect连接,每次需要进行新连接的时候,会查找当前是否有可用的连接。

可复用规则:

  1. 当前流数量,http1只允许一个流操作,http2则允许多路复用,每个流都有对应的id
  2. 请求的http配置和ssl配置要相同
  3. 域名相同

连接池的清理:有一个单独的线程来执行清理工作,如果有多个没有使用的,会记录最近的那个时间,然后wait线程,醒来后执行清理工作。

  • 哪个项目你觉得让你学到的东西最多

排队+TV+自助取号终端:涉及断线重连,pingpang机制,数据库牌号在内存中处理并发情况(后台取号,当前取号,还有其他机器上取号),对于后台并发拉取信息,则使用AutomaticBoolean处理,有新消息的时候,设置为true,然后设置为false,执行完毕之后。

  • 大文件的上传下载、断点上传是如何实现的

使用RandomAccessFile来进行文件的分块处理。对于要下载的大文件,创建连接之后,通过conn设置Range属性,设置我要下载的文件具体的起点和终点位置然后启动线程去下载。

为了实现断点续传,则需要通过数据库保存每个线程具体下载了多少的数据量,当下次续传时,直接从未下载的位置开始进行继续下载。

  • Flutter是如何实现快速刷新的,和RN相比较,有什么优势

  • Flutter的内部原理了解多少

  • Http和HTTPS的区别

  • HTTPS是如何保证安全的

算法题:

找到第一组能够满足数之和是固定数据的下标。(处理的时候忘了,可能存在数据重复时,会导致的hashmap覆盖问题了。)