码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Android基础第九天 | 字节跳动第四届青训营笔记


    这是我参与「第四届青训营 」笔记创作活动的的第9天

    文章目录

      • 客户端架构设计和应用
        • 01 架构面临的问题
          • 1.1 产品和架构的生命周期
          • 1.2 不同技术领域的架构问题
          • 1.3 一些其他挑战
          • 1.4 典型的客户端架构——Android OS
          • 1.5 典型的客户端架构——IOS
          • 1.6 典型的客户端架构——flutter
          • 1.7 小结
        • 02 常见的架构手段
          • 2.1 小的架构手段——GoF设计模式
          • 2.2 小的结构手段——MVC
          • 2.3 小的架构手段——MVP
          • 2.4 小的架构手段——MVVM
          • 2.5 MVC/MVP/MVVM
          • 2.6 小的架构手段——AOP
          • 2.7 小的架构手段——IOC
          • 2.8 小的架构手段——IoC:实例SPI
          • 2.9 大的架构手段
          • 2.10 小结
        • 03 架构演进的例子
          • 3.1 孕育期
          • 3.2 婴儿期
          • 3.3 学步期
            • 3.3.1 学步期——分层架构
          • 3.4 青春期
            • 3.4.1 青春期——事件驱动架构
            • 3.4.2 青春期——事件驱动架构实例
          • 3.5 壮年期
            • 3.5.1 壮年期——微内核架构
            • 3.5.2 壮年期——插件原理Mira ClassLoader
            • 3.5.3 壮年期——插件原理Mira插件注册
          • 3.6 稳定期
            • 3.6.1 稳定期——微服务架构
          • 3.7 贵族期
          • 3.8 官僚期
          • 3.9 不同形态的架构
          • 3.10 小结
        • 04 成为优秀架构师
          • 4.1 认清问题
            • 4.1.1 认清问题——分类
            • 4.1.2 认清问题——分级
            • 4.1.3 认清问题——问题背后的问题
          • 4.2 勤于编码
          • 4.3 架构追求

    客户端架构设计和应用

    01 架构面临的问题

    1.1 产品和架构的生命周期

    在这里插入图片描述

    1.2 不同技术领域的架构问题

    在这里插入图片描述

    1.3 一些其他挑战

    在这里插入图片描述

    在这里插入图片描述

    1.4 典型的客户端架构——Android OS

    在这里插入图片描述

    1.5 典型的客户端架构——IOS

    在这里插入图片描述

    1.6 典型的客户端架构——flutter

    在这里插入图片描述

    1.7 小结

    • 架构设计是为了解决特定领域不同发展阶段的业务问题

    • 不同领域的架构有明显的技术差异,但也有很多相似性

    • 架构不仅面临技术挑战,还要应对组织业务膨胀的嫡增

    • 移动端需要利用有限的设备资源设计符合小屏幕的架构

    02 常见的架构手段

    2.1 小的架构手段——GoF设计模式

    2.2 小的结构手段——MVC

    在这里插入图片描述

    视图:XML

    控制器:Activity中设置点击事件

    模型接口:更新UI

    数据和视图并没有完全解耦,控制器和视图耦合在一起,Activity会膨胀

    2.3 小的架构手段——MVP

    在这里插入图片描述

    数据和视图完全解耦了,控制回路太庞大。

    2.4 小的架构手段——MVVM

    在这里插入图片描述

    2.5 MVC/MVP/MVVM

    在这里插入图片描述

    2.6 小的架构手段——AOP

    面向切片编程思想。

    在这里插入图片描述

    2.7 小的架构手段——IOC

    在这里插入图片描述

    2.8 小的架构手段——IoC:实例SPI

    在这里插入图片描述

    2.9 大的架构手段

    在这里插入图片描述

    2.10 小结

    • 不同架构手段的共同目标是高内聚低耦合

    • 找到适合业务场景的架构而不是炫技滥用

    • 一个复杂的系统是多种架构模型的组合体

    03 架构演进的例子

    3.1 孕育期

    做一个信息流产品,可以无限刷的列表

    • 首先,需要实现一个列表,支持上下滑动

    • 然后,每次滑动,都需要请求服务端数据

    • 接着,列表的每一项都需要响应点击操作

    在这里插入图片描述

    3.2 婴儿期

    产品功能开始变多,需要拆分模块

    • 首先,需要支持图文内容的组合混排显示

    • 接着,需要引入账号体系,用户注册登录然后,用户可以收藏感兴趣的内容并分享
      …

    • 继续,场景越来越多,拆分网络和多线程

    在这里插入图片描述

    3.3 学步期

    业务场景变多,需要拆分业务

    • 首先,支持用户发布文章,并给予奖励

    • 接着,视频这个重要的内容也需要支持

    • 然后,不同业务之间越做越大需要拆分

    • 继续,拆分出视频业务,架构自成体系

    • 继续,拆分出中台业务,供多业务使用

    在这里插入图片描述

    3.3.1 学步期——分层架构

    在这里插入图片描述

    3.4 青春期

    不同业务和模块混合,需要解耦

    • 首先,需要约定模块可以对外提供的能力

    • 接着,模块之间需要遵循相同的调用方式

    • 然后,旧的模块需要按照相同标准来改造
      …

    • 继续,使用方不应该直接依赖于实现方

    在这里插入图片描述

    3.4.1 青春期——事件驱动架构

    在这里插入图片描述

    3.4.2 青春期——事件驱动架构实例

    在这里插入图片描述

    3.5 壮年期

    业务变得更加内聚,需要灵活插拔

    • 首先,扫一扫等能力不是所有场景都需要

    • 接着,视频的子能力可以拆解后按需使用

    • 然后,越来越多的业务想动态化发布产物

    • 继续,动态化发布引入很多问题需要调优

    在这里插入图片描述

    3.5.1 壮年期——微内核架构

    在这里插入图片描述

    3.5.2 壮年期——插件原理Mira ClassLoader

    在这里插入图片描述

    3.5.3 壮年期——插件原理Mira插件注册

    在这里插入图片描述

    3.6 稳定期

    用户规模和团队稳定,历史包袱重

    • 首先,经过前期快速发展已经积累了大量历史包袱

    • 接着,需要深入了解业务才能设计出更合理的架构

    • 然后,很多改动牵一发动全局,代码被迫变得更差
      …

    • 继续,新旧技术栈共存,版本依赖冲突,冗余代码

    在这里插入图片描述

    3.6.1 稳定期——微服务架构

    在这里插入图片描述

    3.7 贵族期

    在这里插入图片描述

    3.8 官僚期

    • 人们相互甩锅

    • 代码混乱无序

    3.9 不同形态的架构

    在这里插入图片描述

    3.10 小结

    • 架构随业务发展由简单变得复杂是规律

    • 没必要最初用复杂架构来解决简单问题

    • 需要用规范持续重构来对抗代码的腐朽

    04 成为优秀架构师

    定义问题 → 确定架构 → 方案落地 → 结果复盘

    4.1 认清问题

    4.1.1 认清问题——分类

    架构的问题是盘根错节的,将所有问题放在一起,就有轻重缓急之分,就有类别之分

    区分问题的类别,就能在一定的边界内,匹配上对应的人来解决问题

    4.1.2 认清问题——分级

    挑战、问题、手段这些经常混为一谈,哪些是挑战?哪些是问题?那些是手段?

    其实这些都是一回事,就是矛盾,只是不同场景下,矛盾所在的层级不同

    4.1.3 认清问题——问题背后的问题

    在这里插入图片描述

    4.2 勤于编码

    Ctrl c + v

    4.3 架构追求

    在这里插入图片描述

  • 相关阅读:
    编译失败-报大量无关错误(未结束的字符串字面值、需要;、非法的表达式开始...)
    淘宝客服话术《挖掘每一个潜在客户》
    java毕业设计晶研电子公司业务网站(附源码、数据库)
    TensorRt推理部署优化方案及流程概述
    spring.factories 的妙用
    VUE2中routes和router,$route和$router的区别
    【数据库系统概论】数据定义之索引的创建、修改与删除
    525. 连续数组 (前缀和 + 哈希)
    Vue3+vite打包配置及部分打包优化~
    高压放大器在制备功能材料中的应用
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126342714
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号