答的很烂……就没几个问题是答出来的 T^T
共四十多分钟。
- ✔ 自我介绍
- ✔ 详细讲一下实习期间做了哪些事情?实现的细节?
- ❌ LazyColumn和Column有什么区别?为什么能提升性能?
- ❌ 长列表的数据如果一次性加载会卡顿,如何处理?分页查询相关。如何刷新?前一页的数据如何处理?
- ❌ Flutter三个树?嵌套的组件渲染绘制的步骤?
- ✔ UDP和TCP的区别
- ❌ 2M的数据流,通过TCP发送,要经过哪些步骤?
- ❌ APP的启动过程
- ✔ Activity的生命周期?两个Activity跳转其分别的生命周期函数调用顺序?哪些情况下不会进入onStop?
- ❌ 说一下快排
- ✔ 最大递增子串
- ✔ 链表翻转
长列表性能问题应该是想问RecyclerView
四级缓存机制吧。即Scrap缓存
、Recycle缓存
、ViewCacheExtension缓存
、RecycledViewPool缓存
。
RecyclerView在滚动时会复用已经存在的ViewHolder对象,而不是每次都创建新的ViewHolder。这样做的好处是减少了对象的创建和销毁次数,提高了内存利用率和性能。当列表项滚出屏幕时,对应的ViewHolder会被移除并加入到RecyclerView的内部缓存池中,当新的列表项需要显示时,RecyclerView会尝试从缓存池中获取可用的ViewHolder对象,避免了重新创建ViewHolder。
RecyclerView提供了setItemViewCacheSize()方法来设置缓存的ViewHolder数量。通过适当调整这个值,可以控制缓存的大小,避免过多的缓存导致内存占用过高。
Flutter三棵树指的是Widget树
、Element树
、RenderObject树
。
Fragment
在显示到销毁的过程中会执行自己的生命周期:onAttach
-> onCreate
->onCreateView
-> onActivityCreate
-> onStart
-> onResume
-> onPause
-> onStop
-> onDestroyView
-> onDestroy
-> onDetach
同时也受到Activity
生命周期的影响,如果Activity触发onPause
,Fragment也会执行相应的onPause。