Files
knowledge-kit/Chapter7 - Geek Talk/7.13.md
2020-02-25 17:46:51 +08:00

3.5 KiB
Raw Permalink Blame History

面试学问

  1. 技术面试问你遇到的难题是什么,如何解决的? 在考察你的技术边界

  2. 至今遇到过的比较麻烦的技术问题?

  • 在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一个版本新、一个版本旧。主工程中链接到旧工程中了所以一直找不到文件。

网络篇

系统优化

稳定性、常见的稳定排查、crash率监控、提升工程效率的工具性能效率安全成本体验、电量优化、看大图体验

思考

组件:重用、解耦。模块:封装、隔离。

架构中模块复用的第一要求便是代码的功能组件化。组件化意味着拥有独立功能的代码从系统中进行抽象并剥离再以“插件”的形式插回原有系统中。这样剥离出来的功能组件便可以供其他APP使用从而降低系统中模块与模块之间的耦合性也同时提高了APP之间代码的复用性

借助于 Redux 的方式,将 MVC 更改为 MVCSs为store。MVC 中的 view 做到无状态,完全依赖于 Store 中返回的各种状态信息。

组件化之后分为技术组件、公用业务组件、每个业务线都是单独组件。通过把不同功能的组件代码拆分到不同的 pod 里,实现了业务线仅依赖于公共就可以迭代开发。改善了功能开发和协同版本。

流量过大,和服务器交互过多,采用 protoBuf 作为数据载体,有效减小流量消耗。

热修复JavascriptCore + Aspects

组件化、模块化、热修复、RN 兜底后架构模式: App架构

  • Runtime
  • 网络
  • Hybrid
  • RN、Weex
  • JavascoriptCore 如何传递 Block