移动端架构师都需要具备怎样的技术栈和能力

news2025/1/19 10:24:46

移动端架构师都需要具备怎样的技术栈和能力

主要的能力

技术深度

技术广度

动手能力: 比如说造轮子的能力, UI(高级自定义UI, 通用UI组件库), LibrarySDK(通用基础库, 项目框架/架构)

经验丰富

辅助的能力

领导力

沟通能力

洞察与前瞻

赋能业务

技术栈

T字形技术栈语言语言高级特性多线程与并发Andorid高级技术网络数据持久化图片路由与导航架构技术构建与打包性能优化扩展技术开发工具混合架构技术(动态化容器)运维三方技术技术全栈
深度   广度

主要语言: java, Kotlin

辅助语言: javascript, TypeScript, Dart

泛型,

注解,

反射,

高阶函数,

闭包,

扩展,

Lambda

线程/线程池, java.util.concurrent, kotlin协程

消息机制,

虚拟机原理,

类加载机制

HttpURLConnection,

OkHttp,

retrofit,

RESTful,

网络调试与抓包

File&I/O, SharedPreferences,

SQLite, ORM(Room等)

Bitmap,

LruCache/三级缓存,

Glide/Fresco

ARouter,

Navigation component

Jetpack架构组件: Lifecycle,LiveData,ViewModel...

架构模式:MVC,MVP,MVVM

设计模式:单例模式,建造者模式,适配器模式....

工程架构:模块化,组件化,插件化,容器化

IOC架构:Dagger2

Gradle:构建优化,插件开发,插件发布,

APK打包原理

持续集成: Jenkins, GitLab Cl,

Travis Cl,

一体化: 打包上传(私服/蒲公英)

机器人通知(钉钉)

安全与逆向: 混淆/加固, 逆向/反编译

启动速度优化,加载耗时优化,流畅度FPS优化,内存优化,

网络优化,包大小瘦身

Android X适配与升级,大厂多屏幕适配,Android Q黑暗模式,AppBunle,权限治理

主要:Android

辅助:webStorm,VScode,IDE

协作: 开发规约, Git

构建:Gradle,Maven,Jcenter

调试工具:开发支持工具,云真机平台

web Debugging:Charels,Fiddler,Wiresshark

扩展工具:Xmind,Axure,UML

Flutter,

RN,

小程序,

快应用

监控(Crash监控):自建, Firebase,Bugly,友盟

日志系统:HiLog

热修复:Tinker,Robuse,Hotpatch

支付,埋点统计,推送,分享,扫码

后端技术:SpringBoot2,MuBatis,MySQL,Redis,Tomcat,Nginx

前端技术:javascript, TypeScript,react.js,less,AntDesign

小程序/快应用技术

如何从0开始架构一个中大型APP

需要考虑的事情

业务理解: 首先是业务理解,架构是服务于业务的,脱离业务谈架构,就是纯粹的耍流氓

赋能业务: 架构要能够赋能业务,比如业务是否有动态性的需求,以及灵活配置的一些需求,这些不能仅靠业务方来想,作为架构师要能够发掘业务潜在的一些诉求,从技术角度帮助业务更好更快的发展。有人会说,技术不能代替业务方。但技术能够帮助业方更好的去向前冲,如果说理解业务会让架构师走的快,那么赋能业务则会让架构师走的更久.

研发效率: 

  • 多人多团队协作: 我们需要考虑架构之间的解偶/模块间相互独立/ 单独仓库/jar/arr依赖
  • 复杂度控制: 复杂度控制在组件内部, 对外简单可以依赖
  • 复用: 为矩阵产品输出轮子, 一个中大型公司, 他的产品不仅仅单单是一个APP,有可能是很多APP的一个矩阵, 那么我们做架构的时候在考虑加工每个组件或者某个框架的时候,我们要能考虑能够横向的为其他的一些矩阵的产品输出这些轮子,而不是只服务于我们当前的这个APP。
  • 编译速度提升: 组件单独编译, Maven私服, 构建加速

技术选型:

  • 开发语言: 反面案例是单JAVA或单kotlin的模式, 正面案例是使用kotlin和java的混合方式进行开发,因为有很多第三方库是使用Java开发的, 所以单独使用kotlin过于时髦
  • 架构模式: 架构模式方面的反面案例是MVC, 这对一个单工程小应用来说还是可以的,对于较大的工程应用就需要在架构模式上应用我们的MVP或者mvvm来
  • 工程架构: 工程架构方面的反面案例是单一工程, 会显得我们的项目特别的庞大, 难以维护,不利于多人协作, 这个时候我们就需要应用到我们的模块化/组件化/容器化
  • 混合架构: 混合架构方面的反面案例是Native+H5, 因为H5的性能跟不上, 所以说我们只用native+H5的方式的话, 显然不是最优的一些方案, 好的方案推荐使用Native+Flutter/RN+H5,既能体现我们flutter rn的一个动态信号, 又能够兼顾native的相关的体验和性能
  • 网络: 网络方面的反面案例是直接拿网络库(OkHttp/retrofit)来使用, 正面案例应该封装统一的网络层接口, 我们的业务层不直接依赖网络库, 而是依赖我们统一的网络接口,然后我们底层提供可插拔的一些设计,比如哪一天我们决定不用OKHttp了,我们要切成其他的一些网络库, 这个时候只需要我们网络层做一些相关的适配,我们的业务层不需要做任何的改动
  • 数据持久化:数据持久化反面案例是SharedPreferences+SQLite, 正面案例是File+SharedPreferences+SQLite/Room 

数据层设计 

一款APP在动手写业务之前我们先要设计好它的数据层,因为市面上大部分APP无不需要和数据进行打交道,数据层设计的好坏,在整个APP的架构中起决定性的作用,为两个方面

网络层:RESTful风格,提供统一的API接口

本地数据:提供ORM数据操作框架,减少对SQLite的直接操作,提供统一的数据缓存框架

容灾能力

三个方面可以供我们做架构的时候进行参考, 分别是监控与预警, 动态发布,热修复

开发支持工具

开发规约: 代码规范, codeStyle, CodeReview

Debug Tool

自动构建与持续集成, 自动化构建和持续集成是提升延高效率的很重要的一个抓手

架构大图

底层基础库: 组件库, 工具库

业务层设计

工程结构设计

如何做好项目的技术选型

技术选型的方法论

技术判断: 要实现的目标/要解决什么问题—影响因素—识别风险/利弊—整体最优/次优

影响因素: 业务阶段—技术趋势—行业趋势—未来趋势—切换成本

理性决策: 自己想清楚,听多数人的意见和少数人商量,最后自己做决定, 做技术选型通常为公司为团队,做技术选型不能寻求自己爽,更要能够服众, 

仰望星空与脚踏实地

做技术选型, 架构师既要能仰望星空, 也要脚踏实地

仰望星空—技术与产业的发展, 技术成熟度,再看业务方向与技术选型,做到技术与业务的匹配和融合。

脚踏实地—业务与技术的匹配与融合,需要技术选型的落地技术,为业务服务, 我们要分清业务的重点,还有技术的重点。

业务重点与技术重点

技术选型首先要考虑的是业务是什么, 技术如何服务于业务, 赋能业务.

其实自己商业和业务的重点就是我们技术的重点,比如说对于一款视频类APP,那么它的解码推拉流弹幕。滤镜特效等这些不能完全依赖于外部,不然会被卡着脖子

然后是核心技术的一些自建,避免关键技术的一些依赖

跟风与寻找适合自己的

反面案例, 微软在用Xamarin, 我们也要用, 阿里巴巴搞中台,我们也要搞,盲目的跟风会发现在项目推进的过程中,这些项目技术并不适合自己,进而,反复的修改技术选型,造成了效率上的降低和资源的浪费。

为了避免这种情况的出现,正确的做法是将技术和我们的业务进行结合, 根据我们自己团队的一些实际情况来选择适合自己的才是最好的。

科学与大数据

使用科学的手段, 结合大数据进行技术选型

都有哪些科学的手段呢?首先是技术成熟度曲线(The Hype Cycle)

利用时间轴与市面上的可见度,也就是媒体曝光度上来决定要不要采用新技术的一种工具。

其次是Google趋势,通常我们了解和使用一个新技术,我们最先做的是搜索对我们搜索的这些数据都会被全球最大的搜索引擎哈谷歌收集起来,我们可以在谷歌趋势上使用这些数据。来分析和对比一些技术热度随时间的变化,以及其在不同国家和地区的一些热度。它能够精确到每一个城市对应某个技术的一些热度.

另外就是GitHub Start趋势, 一个开源软件的受欢迎程度,可以通过它的start show来很好的体现

技术选型取舍之道

选型的核心在于取舍, 取舍也是体现一个架构师技术视野和综合判断力的关键因素,它分以下几个部分:

投入成本上的取舍, 技术方面需要投入的时间成本和人力成本

技术特性取舍:, 技术选型+定制开发

技术管理的取舍, 在技术选型时,维护团队的稳定性,技术产品的稳定性等因素的重要性要远大于较低的迁移成本的重要性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TPS79650DCQR低压差线性稳压器、TPS54040ADGQR一款42V,0.5A降压稳压器数据手册资料

TPS79650DCQR低压差(LDO)低功耗线性稳压器具有高电源抑制比(PSRR)、超低噪声、快速启动,以及出色的线路和负载瞬态响应,采用小外形、33 VSON、SOT223-6和TO-263封装。该系列的每个器件在输出端都有一个小型…

14届蓝桥杯Python总结

在比赛的时候大家头脑注意力都高度集中,比较紧绷, 我是不喜欢太紧绷的神经的,这时候电脑就夸得一下关机重启了,我当时真的想说关的好,休息一会(哈哈哈) 重启后我就继续做题,虽然出了…

AcWing 第一讲 打卡例题习题题目

AcWing 第一讲 打卡&例题&习题题目 1. AcWing 1. A B #include<iostream>using namespace std;int main(){int a,b;cin >> a >> b;cout << ab << endl;return 0; }2. AcWing 608. 差 #include<iostream>using namespace std;int…

他98年的,我真的玩不过他...

现在的小年轻真的卷得过分了。前段时间我们公司来了个98年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里条…

ChatGPT做爬虫的第一步

做爬虫就是搞数据, 专业的人做专业的事, ChatGPT阅虫无数, 搞个小爬虫, So Easy! 我知道可以百度到下载图片的代码, 但是我不想百度了, 一切交给ChatGPT 你只需要问他: 怎么用Nodejs下载图片? 其中&#xff0c;url是图片的地址&#xff0c;filePath是保存图片的本地路径。使…

安装stable-diffusion时遇到卡的情况

安装过程中&#xff0c;假如出现Installing gfpgan并且卡了很久不动&#xff0c;见下图&#xff1a; 遇到这个情况&#xff0c;怎么解决呢&#xff1f; 去TencentARC/GFPGAN官网&#xff0c;点击绿色的“Code”按钮&#xff0c;然后点击“Download ZIP”按钮&#xff1a; 将下…

MySQL--数据类型--0409

目录 1.数值类型 1.2 tinyint类型 2.bit类型 3.小数类型 3.1 float 3.2 decimal 4.字符类型 4.1 char 4.2 varchar 4.3 char 和 varchar 比较 5. 日期类型 6. enum 和 set 6.2 set和enum的查找 6.2.1 enum的查找 6.2.2 set的查找 1.数值类型 1.2 tinyint类型 只…

IDE装上ChatGPT,一天开发一个系统

昨天白天在写代码&#xff0c;晚上看了一场直播&#xff0c;是两个技术的直播&#xff1a; 一个是技术总监&#xff0c;一个是号称Java之父的余**。 结果Java之父被技术总监吊打。然后匆匆下播。 技术这玩意&#xff0c;真的就是真的&#xff01; 白天我开发了一个系统&…

二叉搜索树的oj

目录 一、根据二叉树创建字符串 二、二叉树的层序遍历 三、二叉树的层序遍历Ⅱ 四、二叉树的最近公共祖先 ①递归求解 ②回溯求解 五、二叉搜索树和双向链表 六、根据一棵树的前序遍历与中序遍历构造二叉树 七、从中序与后序遍历序列构造二叉树 八、二叉树的任一遍历…

大厂面试-算法优化:冒泡排序你会优化吗?

关注公众号&#xff1a;”奇叔码技术“ 回复&#xff1a;“java面试题大全”或者“java面试题” 即可领取资料 原文&#xff1a;冒泡排序及优化代码 https://blog.csdn.net/weixin_43989347/article/details/122025689原文&#xff1a;十大经典排序算法 https://frxcat.fun/pa…

矩阵相似题型总结

矩阵相似题型总结 &#xff08;一&#xff09;题型一&#xff1a;判断含重特征值的方阵A能否相似对角化&#xff08;即能否相似于对角阵&#xff09; 所有特征值均不同的矩阵必可相似对角化&#xff0c;含重特征值的矩阵呢&#xff1f;可如下做 &#xff08;1&#xff09;求A的…

C++linux高并发服务器项目实践 day4

Clinux高并发服务器项目实践 day4模拟实现ls -l指令文件属性操作函数access函数chmod 与chowntruncate函数目录操作函数mkdir和rmdirrenamechdir和getcwd目录遍历函数dup、dup2函数dupdup2fcntl函数模拟实现ls -l指令 #include<sys/types.h> #include<sys/stat.h>…

为何巴菲特和马斯克站在了一起?

股神巴菲特虽然非常传奇&#xff0c;但是马斯克对其并不感冒。马斯克曾经在一档电视节目中表示&#xff0c;实业才是王道&#xff0c;埋怨金融业抢走太多人才和精英&#xff0c;暗指巴菲特为年轻人做了错误示范。当然&#xff0c;巴菲特的投资非常厉害&#xff0c;但也有失手的…

2-修改example适用于不同开发板

1.问题 手上只有基于nRF52811芯片的BMD360开发板,与pca10056e开发板同一个芯片.所以pca10056e的example都可以适用于BMD360开发板,只需要修改开发板相同的输入输出硬件管脚即可.因为BMD360开发板与pca10056e开发板的输入输出管脚不同. 而BMD360开发板输入输出管脚于PCA10040相同…

【数据结构】七大排序算法详解Java

目录 1.排序算法分类 1.直接选择排序 代码展示&#xff1a; 2.直接插入排序 核心思路&#xff1a; 代码展示&#xff1a; ​编辑 3.希尔排序 思路分析&#xff1a; 代码展示&#xff1a; 4.归并排序 代码展示&#xff1a; 5.快速排序(挖坑法) 思路分析&#xff1a; …

OJ系统刷题 第十篇

13444 - 求出e的值 时间限制 : 1 秒 内存限制 : 128 MB 利用公式e11/!1​1/2!​1/3!​...1/n!​&#xff0c;求e的值&#xff0c;要求保留小数点后10位。 输入 输入只有一行&#xff0c;该行包含一个整数n&#xff08;2≤n≤15&#xff09;&#xff0c;表示计算e时累加到1/…

计算机操作系统第四版第六章输入输出系统—课后题答案

1.试说明I/O系统的基本功能。 隐藏物理设备的细节、与设备的无关性、提高处理机和I/O设备的利用率、对I/O设备进行控制、确保对设备的正确共享、错误处理 2.简要说明I/O软件的4个层次的基本功能。 用户层I/O软件&#xff1a;实现与用户交互的接口&#xff0c;用户可直接调用该层…

4.8、socket介绍

4.8、socket1. socket介绍1. socket介绍 所谓 socket&#xff08;套接字&#xff09;&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用网络协议交换数据的机制。从所处的地位…

阿里云centos7搭建ChatGPT网站

需要的环境 有一台外网的服务器 拥有一个OpenAI API Key Centos7&#xff08;其他服务器也行&#xff09; nodejs 前端github上 大神写的 https://github.com/ddiu8081/chatgpt-demo/ 一.安装node.js centos7 安装node.js 二.安装pnpm npm i -g pnpm三.下载web前端项目从…

【2023最新】超详细图文保姆级教程:App开发新手入门(3)

上文回顾&#xff0c;我们已经完成了一个应用项目创建、导入、代码更新、代码同步和代码提交&#xff0c;本章继续我们的新手开发之旅&#xff0c;讲述一下如何将开发完成的应用进行编译&#xff0c;生成可供他人安装、可上架的应用安装包。 6 应用打包 应用打包&#xff0c;…