饿了么客户端实习面经

答的很烂……就没几个问题是答出来的 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树

Activity的生命周期和启动模式详解

Fragment在显示到销毁的过程中会执行自己的生命周期:onAttach -> onCreate ->onCreateView -> onActivityCreate -> onStart -> onResume -> onPause -> onStop -> onDestroyView -> onDestroy -> onDetach

同时也受到Activity生命周期的影响,如果Activity触发onPause,Fragment也会执行相应的onPause。