浅谈计算机系统架构
读完本章节,你将收获以下几点
- 计算机硬件架构及其主要硬件的功能描述
- 推荐给全栈开发者的硬件
- 计算机软件架构及其常用软件
计算机硬件系统
现代计算机是由运算器、控制器、存储器、输入设备、输出设备五大部分组成,它们各司其职,完成了数据的计算、存储、传输任务,整体架构如下图所示
下面是它们各个组件的功能介绍:
CPU:也被称为中央处理器,由运算器和控制器组成,其主要作用是用来计算数据(从内存中获取指令并执行后将结果返回给内存或者写入到磁盘)和控制其他设备(声卡显卡,鼠标键盘)协同工作。目前主流的CPU架构有基于Intel的复杂指令集的X86架构(32位和64位)和手机(ARM指令集),服务器(SPARC指令集)的精简指令集。CPU通过总线(数据总线、地址总线、控制总线)和外部进行交互,数据的计算是在CPU内部的寄存器完成的。
内存:采用编址存储,其主要作用是用来作为程序的工作区,程序运行时会被加载到内存,断电后数据会丢失。32位操作系统只能最多使用4G内存(编址的数量2的32次方,已经逐渐被淘汰),64位CPU通常可以使用4G以上的内存(编址可达4G*4G,但是受限于其他组件),单台服务器的内存根据不同的用途通常是16-128G。
硬盘:其主要作用是永久性存储海量(TB或者PB级别)的数据,分为机械式硬盘(HDD)(7500rpm,15000rpm)和固态硬盘(SSD)两大类,门户网站通常是两种硬盘混合使用。
IO设备:其主要作用是用来数据的输入输出,常见的输入设备包括鼠标键盘,常见的输出设备包含声卡,显卡,打印机等等。还有个典型输入输出设备:网卡主要是负责数据在网络上的传输。
在程序故障诊断或者做程序性能优化是时除了考虑程序自身之外还需要考虑CPU,内存,磁盘和网卡的”健康状况“。
计算机硬件的IO各层次性能汇总
组件名称 | 延时、带宽 |
---|---|
CPU | |
Cache L1,L2,L3 | 0.5-15ns、20-60GB/S |
内存 | 30-100ns、2-12GB/S |
SSD硬盘 | 10us-1ms、50MB-2GB/S |
普通硬盘 | 5-20ms、50-200MB/S |
网卡-网卡 | 100us-1ms、10MB-10GB/S |
从该表格中可以看出CPU延时(最低)和带宽(最高),而普通硬盘是性能最差的,根据木桶效应,在性能优化时应该优先优化磁盘。
推荐给全栈开发者(前端+后端(服务端)+大数据/云计算)的硬件配置
目前(2018/01)为止能买到的最好的硬件配置的笔记本
Windows/Linux(Ubuntu):Razer/雷蛇 灵刃专业版 RZ09-0166 GTX1080 Pro游戏笔记本电脑
主要硬件配置如下:
硬件名称 | 规格 |
---|---|
屏幕 | 17.3英寸16:9 4K屏幕 |
CPU | 第七代Intel i7-7820HK 3.9GHz |
内存 | 32GB DDR4-2667MHz |
硬盘 | 512GSSD/1TSSD |
显卡 | NVIDA GeForce GTX1080显卡 8G显存 |
推荐先安装Windows10 x64企业版,然后通过安装的VMWareWorkStation14 Pro虚拟机上安装Linux/CentOS7.3、Linux/OpenSUSE42.2和Linux/Ubuntu16.04三个常见的Linux发行版。
而如果要从事MacOS、IOS和WatchOS的应用开发,首选当然是MacBook Pro,主要硬件配置如下(内容来自于苹果官网):
硬件名称 | 规格 |
---|---|
屏幕 | 15.4英寸 |
CPU | 第七代Intel i7 Turbo Boost 最高可达 4.1GHz |
内存 | 16GB 2133MHz LPDDR3内存 |
硬盘 | 512GB SSD/1T SSD |
显卡 | 显卡Radeon Pro 560 图形处理器,配备 4GB |
MacBookPro则是安装了最新的MacOS10.13,由于缺少极少数必备软件(例如RedisDesktopManager,WPS),可以通过Mac平台上的虚拟机Parallels Desktop 13 安装了Windows10以及一些Mac平台上缺失的软件。
计算机软件系统
软件的出现实现了人和计算机之间更好的交互,软件是由一系列按照特定顺序组织的指令和数据组成。
计算机软件分为系统软件和应用软件两大类,如下列表中包含常见的软件及其运行平台。从交互方式上看经历了字符(命令)交互,图形界面交互和语音手势、重力感应交互的发展过程。
- 系统软件
人机交互方式 | 系统名称 | 平台 |
---|---|---|
命令行界面 | Unix(Solaris,HP Unix,AIX),Linux(CentOS) | 服务器 |
图形界面 | Windows10,MacOS10.13,Linux(Ubuntu17.10) | 桌面 |
自然交互界面(语音、手势) | Android8.0,IOS11 | 嵌入式(手机、汽车、电视) |
* 应用软件
类型 | 名称 | 平台 |
---|---|---|
通讯 | 微信、QQ、钉钉 | Windows,MacOS,Android,IOS |
购物 | 淘宝、天猫 | Android,IOS |
办公 | WPS,Office | Windows,Mac |
支付 | 微信支付、支付宝 | Android,IOS |
外卖 | 美团外卖、饿了么 | Android,IOS |
邮件 | Gmail、网易邮箱 | PC,Android,IOS |
系统软件主要实现和底层硬件交互,给应用软件提供运行平台。操作系统、编译器等都是属于系统软件,目前主流的桌面操作系统是Windows10,Linux(Ubuntu17),MacOS10.13,主流的移动端操作系统是Android8,IOS11,主流的服务端操作系统是Linux(CentOS7.4,Ubuntu17.10),Unix(HP Unix,Solaris,AIX)。
应用软件主要是运行在PC或者是移动终端的操作系统之上,用于解决工作和生活的各种需求,例如购物(淘宝、天猫、),聊天(微信、QQ),听音乐(QQ音乐、网易云音乐),看电影(爱奇艺、腾讯视频,优酷),收发邮件(网易邮箱,Gmail)和支付(支付宝,微信支付)等等。
而应用软分为BS(Broswer/Server)和CS(Client/Server)两种架构。
其中用于BS架构的Browser端应用开发的语言有JavaScript,Server端应用开发有Java,Python,Go,PHP。
而用于CS架构的Client端(Android,IOS,PC端)的开发语言有Java,Objective-C/Swift/C++,Server端的开发语言有Java。* *
MacOS日常开发中常用的软件列表
软件名称 | 功能描述 |
---|---|
Chrome、Firefox、Safari | 浏览器:Web开发必备 |
Tower、GitHub Desktop | Git版本管理、GitHub桌面客户端 |
XCode | MacOS/IOS/WatchOS开发必备 |
SecureCRT | Linux SSH Client |
Postman | Web API 测试 |
AndroidStudio | Android APP开发必备 |
IntelliJ IDEA | Java开发必备 |
Pycharm | Python开发必备 |
WebStorm | 前端开发必备 |
PHPStorm | PHP开发必备 |
GoLand | Go程序开发必备 |
DataGrip、Navicat Permium | Oracle/MySQL客户端 |
EdrawMax | 画图 |
StartUML | 建模 |
PDF Expert | PDF书籍查看 |
微信、钉钉、QQ | 即时通讯必备 |
有道云笔记、印象笔记 | 笔记 |
简书、GitBook、Mweb | 写作 |
TeamViewer | 远程连接 |
ParallelsDesktop | 虚拟机(Mac运行Windows) |
CleanMyMac | 系统管理 |
WireShark、Charles | 网络抓包 |
VPN Plus | 免费VPN |
Axure RP8 | 原型 |
百度网盘 | 资源云端存储 |
Dash | 帮助文档查看器 |
编程语言发展史以及应用场景
读完本章节,你将收获以下几点
- 计算机编程语言的发展史
- 主流编程语言的应用场景
- 信息技术发展方向
编程语言的发展史
计算机程序设计语言经历了机器语言到汇编语言和高级程序设计语言的演进,其特点是让程序越来越容易开发、测试和部署,在了解编程语言发展史以及使用场景前需要了解程序到底是什么?
程序是指为了完成一项特定的任务(例如听音乐,看电影,购物)而用某种编程语言(C,C++,Java)编写的指令序列,指令是计算机进行程序控制的最小单位,由操作码(例如+ -)和操作数(例如010101)组成,所有指令的集合称为计算机的指令系统,常见的指令集包括运行于PC、服务器上基于Intel处理器的X86指令集和运行于手机的ARM指令集。不同的指令集系统是不兼容的,这也就导致PC上的程序不加修改,不能到手机上运行,反之亦然。
机器语言
计算机发展的最早期,程序员编写程序采用二进制的指令(010010101)来实现的,而每种CPU都有各自不同的指令系统(SPARC/Intel X86/ARM),因此在不同的机器上使用不同的机器语言实现。其特点是性能特别高效,而面向机器编程也就意味着不能移植,需要手动处理底层硬件的差异性,而且二进制的指令难以理解和维护。汇编语言
随着时代和计算机技术的发展,汇编语言和编译器的出现解决了机器语言需要记住非常多的二进制机器指令的难题,但是还是没有从根本上解决移植性的问题,只是将机器指令转换为易懂的英文单词,然后由编译器编译成机器指令,因为计算机终归揭底只能识别0001110100110机器指令,而且汇编语言是面向机器的,不同机器(SPARC/Intel X86/ARM)的汇编指令是不相同的。
而机器语言和汇编语言的使用场景只有在追求绝对性能的场合(例如控制导弹的发射等等)中使用。
如下所示案例演示C语言嵌套汇编语言的案例
#include <stdio.h>
/*
C语言嵌套汇编的应用案例
* @author tony ittimeline@163.com
* @date 2017/10/17 16:40
* @website www.ittimeline.net
*/
void use_asm() {
int a, b, c = 0; //初始化声明三个整数变量并赋值为0
a = 4;
b = 6;
printf("before a=%d\tb=%d\tc=%d\n", a, b, c);
_asm {
//将变量a的值赋值给eax寄存器
mov eax, a;
//将变量b的值和寄存器eax相加
add eax, b;
//将相加的结果赋值给c
mov c, eax;
}
printf("after a=%d\tb=%d\tc=%d\n", a, b, c);
}
/*主程序的入口
* @author tony ittimeline@163.com
* @date 2017/10/17 16:38
* @website www.ittimeline.net
*/
int main() {
use_asm();
getchar();
}
高级程序设计语言
高级程序设计语言的高级之处体现在开发人员在编写程序时无需关心硬件差异只需要专注于业务模块实现即可。甚至是可以实现 一次编译,到处运行(**Java通过实现不同平台的JVM,编译生成的字节码文件可以在任意的JVM上运行)。高级语言通常都需要编译器或者是解释器将源码编译或者解释执行。高级语言主要分为面向过程和面向对象两种,其中典型的面向过程语言就是C,面向对象的编程语言有Java,C++等等。**
先看下目前(2018年1月)世界上主流语言的排行榜的前20位,数据来源于tiboe
目前C语言排行第二, 同时C/C++的市场份额是超过Java的。
主流编程语言的应用场景介绍
目前主流的语言主要有Java/C/C++/C#,Pyhton,PHP,JavaScript,Swift,Objective-C,Go语言,它们拥有各种不同的使用场景。
编程语言主要是用来编写软件,而开发软件的类型主要分为系统软件和应用软件,系统软件主要有Windows,Linux(Ubuntu,CentOS,OpenSUSE),MacOS,Android,IOS,通常使用的系统软件开发语言为少量的汇编以及大量的C语言。
目前在典型的中小型互联网公司的应用软件的后台业务逻辑通常都是采用Java或者Python,C/C++/Go实现。前台展示通常包含PC,H5,Android,IOS和微信公众号、微信小程序。
信息技术发展方向
目前国内一线城市(北上广深)中的一线互联网企业主要有阿里巴巴、腾讯、百度、平安、滴滴、新美大等等,他们所涉及的领域包括电商、社交、游戏、人工智能、金融、出行、团购外卖等等。
而这些领域在技术上的实现通常会涵盖移动端、前端和服务端
移动端主要以Android,IOS为主,而开发Android App必须熟练掌握Java/Kotlin技术栈,开发IOS必须掌握Objective-C/Swift技术栈。
前端主要以HTML5+CSS3+JavaScript/ECMAScrip为基础的bootstrap,jQuery,AngularJS,VueJS,ReactJS,NodeJS,Webpack等框架的技术栈。
服务端主要以Linux(CentOS\Ubuntu)为主,如果想做服务端底层开发,必须熟练掌握C/C++技术栈,如果想做服务端应用层开发必须掌握Java/Python/Go技术栈。
游戏主要是Cocos2d-x和Unity3d,主要开发语言是C++和C#。
前言的方向是人工智能(Python)以及区块链(Go),物联网
大数据以及云计算因为是以海量数据为基础的,只有在巨头(Google,Amazon,Facebook,Apple,Microsoft,Alibaba,Tencent,Baidu)公司才会有用武之地
Windows常用命令
读完本章节,你将收获以下几点
- 学会在Windows系统终端上使用文件和目录的命令
- 学会在Windows系统终端上调用系统应用程序的命令
主流的操作系统(Windows,Linux(Ubuntu),MacOS)及大多数应用程序都提供了基于命令行和图形化界面两种交互方式,而移动端是采用手势触控、语音等进行交互。作为普通用户来讲,图形化界面容易上手,而且交互效果更加直观。
但是作为一个程序员来讲,应该去熟悉各个操作系统的命令行(command)的使用,因为命令行相对图形化界面而言,绝大多数场景下使用更加高效。而且图形化界面本质是对命令行的封装,能用图形化界面实现的基本都可以采用命令行实现。而且在服务器端(CentOS,RedHat)基本上是不会安装图形界面。
Windows系统可以使用快捷键Windows+R调出运行,如下图所示
后输入cmd,便可以进入Windows下的命令行终端,如下图所示
Windows下常用的文件目录和系统应用相关的命令如下所示,只要开启了终端就可以在终端内通过使用文件目录相关和系统应用相关的命令实现快捷操作。
文件目录相关
命令名称 | 功能描述 |
---|---|
dir | 列出当前目录列表 |
cd | 切换目录(只能在根盘符(例如C盘)内切换) |
md | 创建目录 |
del | 删除文件 |
type | 显示文本文件内容 |
cls | 清除屏幕内容 |
exit | 退出终端 |
系统应用相关
命令名称 | 功能描述 |
---|---|
notepad | 记事本 |
calc | 计算器 |
mspaint | 画图 |
explore | 文件资源管理器 |
timedate.cpl | 日期和时间 |
cleanmgr | 磁盘清理 |
desk.cpl | 分辨率设置 |
powercfg.cpl | 电源设置 |
regedit | 注册表编辑器 |
msconfig | 系统配置 |
mstsc | 远程连接 |
firewall.cpl | 防火墙 |
appwiz.cpl | 添加或修改程序 |
tasklist | 查看进程列表 |
taskkill /f /im process.exe | 关闭指定进程 |
msinfo | 系统信息 |
sticky notes | 便签 |
ipconfig | 查看ip |
echo | 显示文本内容 例如echo %path% 查看系统环境变量 |
dxdiag | DirectX诊断工具 |
理解计算机信息存储和传输换算单位
读完本章你将收获以下几点
- 计算机信息存储和换算的单位
- 理解国内的网速和硬盘”真实”的计算方式
计算机信息存储换算单位
目前的单台PC服务器内存普遍达到了32-128G,笔记本(面向开发者或者设计人员)的内存已经达到16-32G,而手机的内存也普遍都在4-8G之间。那么1G到底有多大呢?这里有个换算公式,如下所示
1G=1024MB
1MB=1024KB
1KB=1024B
1B=8bit
其中B表示字节(Byte),也就是计算机最常用的基本存储单位,1个字节能存储8个位(bit),而一个位(bit)能够存储一个二进制数字(0或者1),位是度量计算机数据的最小单位。
而日常使用的移动硬盘(以500G为例),通常实际使用的存储空间只有465G,因为计算机的存储单位是以2^10=1024换算的,而硬盘开发商是以10^3=1000来计算的,计算方式如下所示
计算机存储:500G=500*1024MB*1024KB*1024B
硬盘开发商:500G=500*1000*1000*1000
计算结果:500*1000*1000*1000/1024/1024/1024≈465G
计算机信息传输换算单位
家里的网络带宽是100Mb,但是实际的下载速度约等于12.5M,因为计算机的基本存储的单位为字节(Byte),而宽带产商们使用的位(bit)作为传输单位,因此通常需要根据宽带产商提供的数据除以8就是更加真实的下载速度。
以下是100Mb的下载速度的计算公式
100Mb=100*1024KB*1024B/8=12.5MB
完整的计算机信息存储换算单位
1 Byte(B) = 8 bit
1 Kilo Byte(KB) = 1024B
1 Mega Byte(MB) = 1024 KB
1 Giga Byte (GB)= 1024 MB
1 Tera Byte(TB)= 1024 GB
1 Peta Byte(PB) = 1024 TB
1 Exa Byte(EB) = 1024 PB
1 Zetta Byte(ZB) = 1024 EB
1Yotta Byte(YB)= 1024 ZB
1 Bronto Byte(BB) = 1024 YB
1Nona Byte(NB)=1024 BB
1 Dogga Byte(DB)=1024 NB
1 Corydon Byte(CB)=1024DB
目前Google,Apple,Amazon,Microsoft,BAT、新美大、小米、滴滴、平安等公司的数据已经积累到EB级别(1024PB)甚至是ZB级别
让你的Python程序跑起来
在运行Python程序之前必须先去官网下载和安装Python
Python下载
官网提供了各大主流操作系统(MacOS,Windows,Linux(Ubuntu))的Python下载,这也就意味着Python是跨平台的语言,可以实现Java的一次编写到处解释运行。
下面是Python3和Python2的最新版本(截止日期2018年1月)下载地址,包含了Windows和MacOS版本,推荐将下面的链接直接复制到迅雷中下载即可,MacOS的迅雷下载Python如下图所示
Python3下载地址
Windows版Python3.6.4下载地址为:https://www.python.org/ftp/python/3.6.4/python-3.6.4-amd64.exe
Mac版Python3.6.4下载地址为:https://www.python.org/ftp/python/3.6.4/python-3.6.4-macosx10.6.pkg
Python2下载地址
Windows版Python2.7.14下载地址为:https://www.python.org/ftp/python/2.7.14/python-2.7.14-macosx10.6.pkg
Mac版Python2.7.14下载地址为:https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi
如果想要获取更多版本请访问Python官网:https://www.python.org/
Python版本说明
目前主流的两大Python版本分别是Python3和Python2,其中Python2最稳定成熟的版本是2.7.14,Python3目前最新的版本是3.6.4,如果你是一个刚入门的初学者,建议使用Python3.6.4,而且未来的Python2代码会慢慢的转向支持Python3。
Python3和Python2是不兼容的,也就是说Python2的代码不能直接在Python3上运行,如下图的helloworld程序所示
幸运的是Python官方提供工具用于Python2的代码转换为Python3代码。
MacOS10.13安装Python3.6.4
1 双击下载好的安装文件python-3.6.4-macosx10.6.pkg
2 阅读重要信息
3 查看许可证协议
4