40__动态化实践,如何选择适合自己的方案?
在专栏第 36 期《跨平台开发的现状与应用》中,我分享了 H5、React Native/Weex、小程序这几种常见的跨平台开发方式。站在开发的角度,虽然跨平台的开发效率要比 Native 开发更高,但是这并不是大前端在国内盛行的最主要原因。
在专栏第 36 期《跨平台开发的现状与应用》中,我分享了 H5、React Native/Weex、小程序这几种常见的跨平台开发方式。站在开发的角度,虽然跨平台的开发效率要比 Native 开发更高,但是这并不是大前端在国内盛行的最主要原因。
你好,我是七牛云许式伟。
相比桌面程序而言,服务端程序依赖的基础软件不只是操作系统和编程语言,还多了两类:

上周我们分享了故障管理中,应该如何对待故障,怎样做好故障定级和定责方面的管理工作。今天我就和你分享当故障真正发生后,我们在故障通报和故障复盘方面的实践经验。
你好,我是陈航。
在上一篇文章中,我与你分享了如何捕获 Flutter 应用的未处理异常。所谓异常,指的是 Dart 代码在运行时意外发生的错误事件。对于单一异常来说,我们可以使用 try-catch,或是 catchError 去处理;而如果我们想对异常进行集中的拦截治理,则需要使用 Zone,并结合 FlutterError 进行统一管理。异常一旦被抓取,我们就可以利用第三方数据上报服务(比如 Bugly),上报其上下文信息了。
你好,我是温铭。
在前面缓存的那节课中,我为你介绍了,共享字典和 lru 缓存在高性能方面的一些优化技巧。其实,我们还遗留了一个非常重要的问题,也值得我们今天用单独的一节课来介绍,那就是“缓存风暴”。
看完了参数学习,我们再来看看结构学习。
结构学习(structure learning)的任务是找到与数据匹配度最高的网络结构,需要同时学习未知图模型的结构和参数。这也很容易理解:模型的结构都不知道,参数自然也是不知道的,所以需要一并来学习。结构学习的任务是根据训练数据集找到结构最恰当的模型,这无疑比参数学习要复杂得多,也有更多的不确定性。
我们在专栏一开始说过,计算机有五大组成部分,分别是:运算器、控制器、存储器、输入设备和输出设备。如果说计算机最重要的组件,是承担了运算器和控制器作用的 CPU,那内存就是我们第二重要的组件了。内存是五大组成部分里面的存储器,我们的指令和数据,都需要先加载到内存里面,才会被 CPU 拿去执行。
你好,我是四火。
专栏更到这里,我们已经把基于 Web 全栈的这棵大树,主要的枝枝丫丫大致都覆盖到了,可是,技术上我们总是希望“更进一步”。这棵大树所在的森林中,还有着广阔的领域等待着探索。当然,我想明确的是,我知道很多程序员还是会继续坚持这条路,因为全栈工程师本身是一个非常理想的职业发展方向,毕竟这个角色,大厂招,创业小团队更是需要;但同时我也知道,也有很多走在 Web 全栈路上的工程师,有着更多的想法,想尝试不一样的“可能性”,而这,就是我想说的个人的“全栈衍化”了。
你好,我是唐扬。
在前一节课中,我带你了解了如何用推模式来实现信息流系统,从中你应该了解到了推模式存在的问题,比如它在面对需要支撑很大粉丝数量的场景时,会出现消息推送延迟、存储成本高、方案可扩展性差等问题。虽然我们也会有一些应对的措施,比如说选择插入性能更高的数据库存储引擎来提升数据写入速度,降低数据推送延迟;定期删除冷数据以减小存储成本等等,但是由于微博大 V 用户粉丝量巨大,如果我们使用推模式实现信息流系统,那么只能缓解这些用户的微博推送延迟问题,没有办法彻底解决。
上一节课中,我们针对版本 1 存在的问题(特别是 Aggregator 类、ConsoleReporter 和 EmailReporter 类)进行了重构优化。经过重构之后,代码结构更加清晰、合理、有逻辑性。不过,在细节方面还是存在一些问题,比如 ConsoleReporter、EmailReporter 类仍然存在代码重复、可测试性差的问题。今天,我们就在版本 3 中持续重构这部分代码。