3.5 KiB
面试学问
-
技术面试问你遇到的难题是什么,如何解决的? 在考察你的技术边界
-
至今遇到过的比较麻烦的技术问题?
-
在App首次安装启动的时候,商品列表快速滑动到底部,再向上慢慢滑动,看到商品view上面的文字和价格都显示正确,但是图片显示是有问题的。想到的是由于SDWebImageView图片问题导致的,因为再快速滑动的时候,图片开启了下载任务,但是异步下载的,cell也在复用池了,所以当你停止滑动看到商品view的时候正是之前的其他的图片任务下载结束,这样子再去响应给view设置图片就会造成当前的显示的图片并不是当前model对应的图片。知道问题的原因那么事情就好解决啦。思路就是如何区分当前下载好的cell是不是当前正在现实的cell。所以思路有2个。
- 自定义的 cell 里面可以拿到 model.imageUrl,那么当下载图片完成的时候可以在 block 里面去判断回调完成里面的 url 和 model.imageUrl 是否一致,一致的话就设置图片,否则不设置
- 在 cellForRow 里面去通过 indexPathForCell: 这个 api 拿到 indexPath,然后根据拿到的复用的 indexPath.row 再和当前现实的 indexPath.row 做比较,如果一致则设置图片,不一致则不设置图片
-
代码在编译的时候一直报出问题:某个pod的某个头文件file not found。最后排查问题发现工程中存在2个同名的 Framework,一个版本新、一个版本旧。主工程中链接到旧工程中了,所以一直找不到文件。
网络篇
- App网络优化
- [IP 直连](https://www.jianshu.com/p/63a94cb46cd20。SNI:Server Name Indication。一个服务器的 IP 可能对应多个域名,也就说可能有多个 HTTPS 证书,如果在请求的时候不指定具体哪个的证书,服务器可能会返回错误的证书
- 多路复用
系统优化
稳定性、常见的稳定排查、crash率,监控、提升工程效率的工具(性能,效率,安全,成本,体验)、电量优化、看大图体验
思考
组件:重用、解耦。模块:封装、隔离。
架构中,模块复用的第一要求便是代码的功能组件化。组件化意味着拥有独立功能的代码从系统中进行抽象并剥离,再以“插件”的形式插回原有系统中。这样剥离出来的功能组件,便可以供其他APP使用,从而降低系统中模块与模块之间的耦合性;也同时提高了APP之间代码的复用性
借助于 Redux 的方式,将 MVC 更改为 MVCS(s为store)。MVC 中的 view 做到无状态,完全依赖于 Store 中返回的各种状态信息。
组件化之后分为技术组件、公用业务组件、每个业务线都是单独组件。通过把不同功能的组件代码拆分到不同的 pod 里,实现了业务线仅依赖于公共就可以迭代开发。改善了功能开发和协同版本。
流量过大,和服务器交互过多,采用 protoBuf 作为数据载体,有效减小流量消耗。
热修复:JavascriptCore + Aspects
- Runtime
- 网络
- Hybrid
- RN、Weex
- JavascoriptCore 如何传递 Block
