1. RN中原生和js端是如何通信的?你说后面使用JSI了,你能说下JSI的实现原理吗?
      5.如果要你对这个app进行性能优化,你有哪些办法(面试官问了三次还有其他办法吗?)
      代码层面,按照react的优化,减少re-render次数。图片加载用react-native-fast-image,页面初始化的逻辑使用InteractionManager.runAfterInteractions。去掉无用的View层。
      进行分包加载,启动时只加载启动页面bundle,二级及更深页面等访问到再加载。
      一些复杂的控件,写原生模块,比如日期选择、下拉选择、级联、播放器等。
      6.你们的RN热更新服务是怎么做的?热更新原理是什么?你们的热更新策略怎么做的?
      客户端用的微软的code-push,服务端用的code-push-server。
      热更新原理就是app每次启动会请求热更新服务器,对比下本地bundle版本和服务器的bundle版本,如果版本不一致,就会根据配置的更新策略下载、更新bundle,然后重新reload bundle。
      我们就是在检查到新的bundle后,会弹窗强制更新。
      7.设计一个RN热更新服务,需要考虑哪些地方?
      bundle体积大的问题。打包的时候需要进行分包,使用增量更新,减少下载体积。
      用户的网络不稳定、网速差问题。需要用CDN加速,支持断点续传。
      安全性问题。
      bundle被中间人劫持篡改。使用https下载,并按照https的加密思路,对bundle用hash算法进行签名,然后app端检验签名是否被篡改。
      bundle下载地址被暴力攻击。检查User-Agent,只允许手机设备下载,记录设备id,在一定时间内限制下载次数。