前奏(介绍)
Sometimes it’s the very people who no one imagines anything of who do the things no one can imagine. -- By 电影:模仿游戏
学知识灵魂三问: 是什么?为什么?怎么用?
开始学习前,一定要明白一点. 计算机组成原理、操作系统、计算机网络很重要很重要!但是现目前我们时间有限, 在有限的时间里, 只需要跟着egon老师先简单了解一些对接下来编程有帮助的知识点即可..!!! 不要当完美主义者、不要当完美主义者、不要当完美主义者. 不要想着对这三大块知识面面俱到!! 理论为辅,实践编程为主, 不然学起来会很痛苦, 切勿自乱阵脚, 后续再挤时间重新一丝不苟的将这三大块全面学习一遍!!!
# 计算机
# 灵魂问答
程序是什么?
程序 就是一堆代码文件. 若程序只有一个文件,通常将此文件称之为 脚本文件 .
程序 = 数据结构 + 算法;
程序从属于软件,软件是一堆完成各自特定功能的程序的集合.
But很多时候,我们在阐述过程中说软件就是指程序,说程序就是在说软件.. 可结合具体语境分析,别纠结..
计算机的分类
计算机 = 硬件 + 软件.
计算机只有硬件的话,就相当于是一堆废铁.
计算机的运行全都受到软件(一堆应用程序的集合)的控制. 可以说 软件/程序是计算机硬件的灵魂 .
软件分为两大类
1> 操作系统: 就是一个协调、管理、控制计算机硬件资源与应用软件的一个控制程序.
2> 应用软件/应用程序
# 计算机的三层结构
应用程序调用操作系统接口; 操作系统管理硬件; cpu是硬件中的最高指挥官.. 换句话说, cpu是硬件的老大, cpu的老大是操作系统..Hhh
计算机体系的三层结构:
最上面 -- 应用程序 支付宝 微信 滴滴...
中间层 -- 操作系统 Linux Windows Mac
最底层 -- 硬件
首先要明确,开发的工作就是使用解释器规定的一系列命令堆砌成一个应用程序..给用户使用.
而命令是干啥的?eg: shell解释器的ls命令就是对操作系统一些接口封装后的产物
说白了, 用软件的某一个功能, 就是执行了某个程序(一堆代码/命令),进而去调用OS对应的系统接口,完成对计算机硬件的操作. 所以说, 应用程序调用硬件是需要经过操作系统的 .所有的应用程序都是运行在操作系统之上的.
要理解的非常底层才能直接使用计算机硬件.
操作系统内核负责帮我们管理硬件,但内核提供的功能还是比较多比较细的.
系统接口将内核的一些功能封装封装.(做个比喻:内核功能十几万个,系统接口封装完可能就几万个)
有了系统接口后仍然不够简单,于是乎有了应用程序. shell解释器、python解释器等等..
而我们学python,学的是python解释器的一系列命令(即python解释器的一系列进一步封装的功能)
用这些python命令我们可以开发出更加上层的应用程序(解释型语言开发的应用程序)
注意哦,有些应用程序是可以直接调用系统接口的.
2
3
4
5
6
7
8
Ps: 有一些软件(编译型语言 -- c语言 go语言写的..)是不通过解释器的,它 直接调用系统接口 .这样的效率会高一些.
# 项目完整开发流程
UE: 交互设计,负责软件好不好用
UI: 界面设计,负责界面好不好看
FE: 前端开发
RD: 后端开发
QA: 测试
OP: 运维
# 需求分析阶段
1> 产品经理( PM ) 根据调研提出一个需求,
2> 公司的产品部门对需求进行评审,判断是否是一个伪需求(不合理的需求);
3> 若需求合理,PM会召集项目相关技术人员开需求讨论会.
相关技术人员 [eg: UE'用户体验' UI'界面设计' RD'研发' QA'测试' 等]
4> 这一过程中,PM会先讲解产品原型(产品的样本草图)... 讨论这些需求的可行性,能否通过技术实现
不断开会,直到确定此需求是没问题的.
注意: 若作为开发人员,需求不明确,千万别进入开发环节; 不要看见某需求很简单,就马上说能实现,很多坑的
# 项目开发阶段
这一阶段分为 设计阶段 和 真正开发阶段 (前后端根据接口规范分头开发). 最后合并.
PM把控软件的整体质量,UE负责将PM脑中如何跟用户交互的抽象想法具像化, UI根据UE的交互设计稿设计页面.
PM会跟UE泡在一起.-- 画出交互原型图.
交互式设计师( UE ) 负责产品与用户的交互,如何交互更符合用户的习惯. 负责软件好不好用.
UE注重的是用户体验.是不管页面的具体内容的
eg: 此按钮应该大致放在页面哪个位置,跳转到哪个界面.出错了在哪弹出信息
界面设计师( UI ) 负责设计页面具体的样子.每个页面的边边脚脚是什么样子的.本质就是画画.
eg: 背景是什么, 字体多大, 距离是怎样的, 布局是怎样的
前端开发( FE ) 负责根据UI的设计图进行客户端程序(eg: web界面,手机app,微信小程序)的开发...
后端开发( RD ) 负责收到前端的请求提供数据接口
在啥功能都没写的时候,PE和RD就会定好接口规范,要封装哪些数据接口,每个接口叫什么名,怎么用.
后端开发的项目经理 project manager 也称为 PM... 它负责将项目的技术框架搭建好
一两周小迭代,一两月大迭代 -_- 我真的会谢.
# 项目测试阶段
1> 开发人员会先进行 code review(代码评审 重新过一遍代码)
2> 测试人员( QA ) 负责设计好测试用例等.开发好的软件或多或少有点bug..
测试环境 -- 准生产环境(与线上环境尽可能一比一 QA也会在这里面测试) -- 线上/生产环境(互联网用户使用的环境).
# 项目上线阶段
环境 | 作用 |
---|---|
dev | 前后端联调的环境 (数据自己造,乱七八糟的) |
test | 交给测试测试的环境 (数据自己造,乱七八糟的) |
release | 预发布环境, 数据从真实环境拉过来的.一般不会改 |
master | 正式环境/主分支 |
Ps: 一旦进入test环境,开发就会来新项目了. 就项目测试测出问题,还要占用开发新项目的时间. (つД`)ノ
运维人员编写上线方案, 在准生产环境staging进行一遍测试.没问题后部署上线.
运维人员( OP ) 负责设计好整套系统的架构. 环境、网络安全、计算机硬件等都归OP管.
比如: 软件要上线时,计算机硬件需要什么配置,用什么操作系统.是否需要集群去承载这个软件
此版本出现问题了立刻回滚到上一个版本等.(上线时所有人都在 小问题马上改 大问题赶紧回滚)
细分的话,运维分为,devops自动化运维;dba数据库管理 等等 .
运维职责:
1> 画架构图
2> 保证应用程序7*24*365小时不间断的运行
稳定性 做好监控
可靠性 数据备份 解决单点故障
性能 优化调优,扩展, 所有的优化都会停留到IO性能上
OP在服务器上主要部署的是服务端,用户在应用商店下载的是客户端..
运维要有集群的概念(电源、风扇、硬盘等),集群性能更高,也能防止单点故障..当出现问题后,及时解决问题
要知道哦,不是一上来就用集群,慢慢根据需求改变的
后续的操作系统部分更多的会从应用角度阐述..