渣本肺炎疫情下的面试总结

371 阅读5分钟

总共面试了5家公司,涉及主要有Java Android Flutter 相关的

1.某物流公司

第一家公司就遇到了个比较牛的面试官,问了Java Android Flutter iOS 相关的技术

1.1 Java相关的

双亲委托机制主要讲了一下委托机制的原理,以及对应为啥这样设计。多线程问的比较多,有HashMap(CurrentHashMap) 的在jdk 1.7和1.8的区别,底层实现,扩容机制,indexFor函数的&与运算,JDK1.8的中为什么链表长度是8位之后转变成红黑树,之后就是volatile 和synchronize 的实现,以及锁升级,原子性,可见性,指令重排,内存屏障这些。

看来HashMap(CurrentHashMap)是Android/Java面试必问的,需要特别关注

1.2 Android相关的

主要是问了setContent方法中的xml解析流程,特别是问到了LayoutInflater Factory 中的创建View的细节,主要是在createViewByTag中的细节。可以通过Factory 创建View以及反射创建View的对象。还问了AsyncLayoutInflater的相关细节

之后问了一下EventBus的底层数据结构CopyOnWriteArrayList的细节,又是一个线程安全数据结构。主要答了一下读写分离,适合读多写少的场景,适合EventBus这样的框架,还有EventBus的四个线程模式,以及对应的实现细节

1.3 Flutter相关的

主要是问了Flutter的渲染机制,布局绘制合并渲染,以及Widget/Element/RenderObject这三者的联系,理清三者的树结构和对应关系。之后问了状态管理框架Provider的底层实现原理,这里主要讲一下setState的刷新机制,主要是InheritedWidget这个Widget,共享的数据就是存在Element中的Map<Type,InheritedElement>_inheritedWidget中,而Provider只是对其做了进一步的封装。之后问了methodChannel相关的

1.4 iOS相关的

由于时间问题,面试官就问了一个runLoop的原理

很多东西自己没准备好,特别是多线程的东西,没答好,不过面试官都给我讲解相关的知识,让我学习了很多。后面肯定也没啥消息

2.某车载公司

这个公司问的很多都是Flutter相关的,产品是做车载销售平台

Flutter的四大线程io/cpu/gpu/plateform,StatefulWidget生命周期流程,Dart线程的组织形式(事件循环,消息队列)。之后就问源码相关的,主要有Image控件加载图片的流程,涉及到ImageProvider,ImageStream ImageStreamComplter,PaintingBinding等的交互过程,以及Platform Channel和原生Native的通信流程,还有一个涉及到平台原生View的加载过程,PlatformView的实时控件截图渲染技术(副屏显示技术)。

3.某海外电商平台

一开始就问Flutter的状态管理框架Provider的原理,前面整理过,一下子就答出来了,之后就问Flutter和RN的区别,以及各自的优缺点。之后就是问网络相关的http的细节,问http的 Header Body,错误码,GZip压缩的压缩算法。以及Http2.0的新特性,大致讲了一下二进制分帧/多路复用/头部优化,以及需要后台的支持,Android中okhttp都支持的特性。之后就是问https中的TLS握手流程。

之后开始问Android相关的事件分发机制的流程以及NestScrollView的源码解析,反射使用的场景。开发中涉及的设计模式,主要讲了一下主流框架的OkHttp的责任链模式,单例模式,retrofit的动态代理等。

最后还问了一个图片压缩相关的,采样率+像素压缩,还讲了一下类似于微信压缩的鲁班Luban算法的实现细节

4.某车险公司

问的比较多的也是Flutter相关的,很多和前面的面试有重合,还问了一些开发技巧相关的,svg的Icon使用,Flutter的屏幕适配,对话框管理,以及使用Flutter实现类似移动端的MVP和MVVM开发框架的交流以及状态管理

5.某Sass业务公司

问的和前面不重合的有,Android的打包流程,MVP的中V和P生命周期统一管理,项目相关的问了多线程的机制,主要回答了token的刷新过程中的同步机制,以及对应的多线程上传和下载的流程,这块主要是项目中使用了多线程的图片上传需求,使用两个线程池处理,一个线程池做图片压缩操作,一个线程做图片上传操作,这块细节有点多,二面的时候,面试官问的很细。还有就是JetPack框架主要是讲了LiveData的实现原理,而对应的Flutter相关的,主要是问了flutter_boost混合开发框架的细节,对应的原生native路由和Flutter的路由管理,插件的书写等。之后就是flutter_boost的框架底层实现,我大致讲了一下Android端的实现。

6.总结

面试五家公司,就只有一家问了一个Top K的算法题,疫情期间,面试也比较少,也发现现在要求也是越来越高了。所以还是要持续学习,招Flutter相关的公司还是相对于比较少。渣本学历,投大公司基本是石沉大海,再加上自己算法也没怎么看。所以基本是投一些业务比较匹配的公司,在此记录一下自己的面试经历。