Java架构师成长之道之浅谈计算机系统架构

Java架构师成长之旅

1.1 信息技术发展趋势

目前信息技术主要经历了互联网、移动互联网以及以大数据、云计算、人工智能和区块链为代表的新兴技术三个阶段。而5G网络的到来则会加速物联网、无人驾驶的应用场景落地。

  • 互联网
    互联网从20世纪90年代逐渐兴起,主要是连接了世界各地的笔记本、台式机以及背后提供后台数据服务的服务器集群,其中绝大多数笔记本、台式机运行着Windows,macOS系统,而服务器主要是以类Unix(CentOS,Ubuntu)占据主要市场。依靠互联网崛起的硬件公司有Intel,软件公司有微软、谷歌、亚马逊、阿里巴巴、腾讯、百度等等。
  • 移动互联网
    移动互联网自从2010年由智能手机的普及以及谷歌的Android系统和苹果的IOS系统发展而使得移动互联网将世界各地的移动设备(手机、电视、汽车等等)连接起来。依靠移动互联网崛起的硬件公司有小米,三星,华为,苹果,软件公司有美团、滴滴、字节跳动和蚂蚁金服等等。
  • 云计算、大数据
    随着用户规模的爆发式增长,以海量数据为基础的大数据(Hadoop,Spark,Flink)、云计算(OpenStack)技术在大型互联网公司(BAT)拥有广泛的落地场景。
  • 人工智能
    人工智能作为目前炙手可热的技术之一,国内的BAT纷纷开始布局在各自的业务场景中,阿里巴巴最早将人工智能应用在电商和物流领域,百度开发出了对话式人工智能操作系统和自动驾驶平台Apollo,腾讯则将人工智能应用在游戏领域,目前国内著名的人工智能公司有商汤科技,旷视科技。
  • 区块链
    区块链经历了数字货币、智能合约和超级账本三个阶段,区块链技术可以广泛使用在金融、供应链、物流以及公共服务领域,解决互联网的信任问题,目前国内的蚂蚁金服、京东有大量的区块链应用落地。
  • 物联网
    随着5G技术的成熟,世界各地的智能设备都将会通过5G网络连接起来,形成万物互联的时代,到时候就可以实现通过终端控制物联网的世界。

1.2 计算机系统

计算机系统主要由硬件系统和软件系统所组成,通过软硬件一体化的协作,完成人们生活和工作中所需的各种日常任务,例如听歌、看电影、购物、聊天等等。

1.2.1 计算机硬件系统

现代计算机是基于冯.诺依曼体系结构,主要由运算器、控制器、存储器、输入设备和输出设备五大部分组成,它们各司其职完成了数据的存储、计算以及传输的任务。

1.2.1.1 常用组件及其功能

计算机硬件的核心组件包含了CPU,内存、磁盘和IO设备。

  • CPU:
    冯诺依曼的计算机体系结构中的运算器和控制器组成了CPU,主要功能负责数据的计算以及其他设备的控制,程序运行时CPU负责从内存中读取程序的指令和数据执行后将结果返回给内存或者是写入磁盘。

  • 内存
    冯诺依曼体系结构中的存储器就是指的内存和外存,其中内存是程序运行时的工作区,即程序运行时的指令和数据都会被加载到内存中,断电后内存的数据容易丢失,内存是编址存储的,通常32位操作系统只能寻址4G,而64位操作系统则会操过4G,通常按照计算机不同的用途是16G-128G之间。

  • 磁盘
    磁盘是冯诺依曼体系结构中存储器的一种,负责永久性存储大容量的数据(TB甚至是PB级别),按照不同的用途可以分为机械硬盘和固态硬盘两大类。

  • IO设备
    顾名思义就是负责计算机数据的输入输出,常用的输入设备有鼠标、键盘,常用的输出设备有声卡、显卡。
    网卡也是IO设备的一种,主要是负责数据在网络中的传输。

在后期程序排查异常时除了考虑程序本身的问题,还要考虑硬件问题,例如网络不通、磁盘存储空间以及内存运行空间不足等等。

1.2.1.2 计算机各组件IO性能汇总

每个计算机组件的IO性能也各不相同,核心组件(CPU,内存,磁盘)都遵循容量越大,IO性能越差,如下图所示,汇总了它们的IO性能,在后期程序优化时,通常需要考虑时间和空间的问题。

计算机各组件IO性能汇总

1.2.1.3 开发者必备硬件配置

开发者在购买笔记本或者台式机时,通常需要关注CPU,内存、磁盘以及显卡的相关配置。
和普通用户不同,由于开发时需要安装许许多多相关的应用程序和配置各个集成开发环境,因此推荐购买高配置的电脑,如果你想购买MacBookPro,可以参考如下配置。

组件名称 配置
CPU i9 2.3HZ
内存 32G
磁盘 512SSD
显卡 Radeon pro Vega 20

macOS

如果你想购买运行Windows的笔记本,参考如下配置。

如果是想要成为软件开发人员,电脑最低配置不要低于8代 CPU i7 + 内存 16G+ 固态硬盘 256G

1.2.2 计算机软件系统

计算机软件就是运行在硬件之上的各种应用程序。软件的出现改善了人和计算机的交互方式,软是由开发者编写的一系列计算机指令和不同业务逻辑产生的数据所组成。

1.2.2.1 计算机软件系统分类

软件按照不同的用途分类可以分为系统软件和应用软件。
系统软件:系统软件有Unix,Linux,macOS,Windows,Android,IOS,编译器、数据库等等。
应用软件:应用软件有淘宝、京东、微信、支付宝等等。

1.2.2.2 计算机软件的交互方式

不同平台的软件有不同的交互方式:
服务器端:运维开发人员基于命令行的字符界面实现人机交互。
PC桌面端:开发人员、普通用户通常是基于图形化界面实现人机交互。
移动端:用户通常是通过语音,手势触控实现人机交互。

1.2.2.3 Windows系统常用命令

主流的操作系统(Windows,Linux(Ubuntu),MacOS)及大多数应用程序都提供了基于命令行和图形化界面两种交互方式,而移动端是采用手势触控、语音等进行交互。作为普通用户来讲,图形化界面容易上手,而且交互效果更加直观。

但是作为一个程序员来讲,应该去熟悉各个操作系统的命令行的使用,因为命令行相对图形化界面而言,绝大多数场景下使用更加高效。而且图形化界面本质是对命令行的封装,能用图形化界面实现的基本都可以采用命令行实现。而且在服务器端(CentOS,RedHat)基本上是不会安装图形界面。

Windows系统可以按下windows键然后输入cmd,如下图所示

windows键搜索cmd

回车之后,便可以进入Windows下的命令行终端,如下图所示

dos命令窗口

Windows下常用的文件目录和系统应用相关的命令如下所示,只要开启了终端就可以在终端内通过使用文件目录相关和系统应用相关的命令实现快捷操作。

文件目录相关

命令名称 功能描述
dir 列出当前目录列表
cd 切换目录(只能在根盘符(例如C盘)内切换)
md 创建目录
rd 删除空目录
echo 输出提示信息 例如echo %PATH%查看环境变量
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
winver 查看windows版本
dxdiag DirectX诊断工具

1.2.2.4 常用应用的软硬件协作实现

聊天:应用程序监听键盘输入的数据,放到内存,然后传给网卡,通过网络传递给另外一个网卡,再从网卡传到内存,显示在显示器上。
听音乐:应用程序将音乐数据加载到内存之后,然后写到声卡上。
看视频:应用程序将视频数据加载到内存,然后写到显卡上。
读文档: 应用程序将磁盘中的文档数据加载到内存后显示到屏幕上。
写文档: 应用程序将内存中的数据写入到磁盘上。

1.2.3 操作系统

操作系统(Operating System)是实现通用目的的程序,其内核(Kernel)负责和底层硬件交互,应用软件运行在操作系统之上。因此操作系统起着承上启下的作用,操作系统提供的功能如下

  • 硬件驱动
  • 进程管理
  • 内存管理
  • 网络管理
  • 安全管理
  • 文件管理
    操作系统分类:

桌面:Windows10,macOS10.14,Ubuntu18.04
服务器:CentOS7.6, RHEL,Ubuntu Server
移动设备:Android,IOS

ABI(Application Binary Interface)描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行

API(Application Programming Interface)定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译

开发人员在编写应用程序时,通常都是借助API接口实现通用目的的功能,而应用程序编译后,通过ABI接口编译链接后运行。

1.2.4 开发者必备软件

1.2.4.1 社交篇

  • 微信/企业微信
  • QQ
  • 钉钉
  • 阿里旺旺

1.2.4.2 常用应用篇

  • 百度网盘
  • 迅雷下载
  • WPS Office
  • 有道词典
  • 网易邮箱大师
  • QQ音乐

1.2.4.3 开发篇

  • JDK
  • Visual Studio 2019
  • QT
  • XCode
  • Visual Studio Code
  • IntelliJ IDEA/Pycharm/Goland/WebStorm
  • Git/Github /Gitlab
  • Maven
  • Navicat/DataGrip
  • Chrome/Firefox
  • SecureCRT
  • Xmind Zen
  • 亿图图示
  • PowerDesigner
  • 印象笔记/剪藏
  • Typora/小书匠
  • VMWare WorkStation/Parallels Desktop

1.2.4.4 macOS特供篇

  • Dash 帮助文档
  • iTerm 终端
  • IINA 视频播放
  • Screen Flow 录屏
  • Parallels Desktop 虚拟机
  • iStat Menus 系统资源监控
  • Fantanstical 日历
  • CleanMyMac X

1.3 编程语言发展史及其应用场景

1.3.1 编程语言发展史

任何事物都是从无到有,逐步发展壮大起来的,编程语言也是一样。

计算机程序设计语言经历了机器语言到汇编语言和高级程序设计语言三个阶段,其特点是使得程序员用编程语言开发、测试、部署应用程序越来越方便、高效。但是是以牺牲效率为代价,但是随着计算机硬件的发展,绝大多数应用场景的效率损失可以忽略不计。

  • 机器语言
    计算机发展的最早期,程序员编写程序采用二进制的指令(010010101)来实现的,而每种CPU都有各自不同的指令系统(SPARC/Intel X86/ARM),因此在不同的机器上使用不同的机器语言实现。其特点是性能特别高效,而面向机器编程也就意味着不能移植,需要手动处理底层硬件的差异性,而且二进制的指令难以理解和维护。

  • 汇编语言
    随着时代和计算机技术的发展,汇编语言和编译器的出现解决了机器语言需要记住非常多的二进制机器指令的难题,但是还是没有从根本上解决移植性的问题,只是将机器指令转换为易懂的英文单词,然后由编译器编译成机器指令,因为计算机终归揭底只能识别0001110100110机器指令,而且汇编语言是面向机器的,不同机器(SPARC/Intel X86/ARM)的汇编指令是不相同的。

  • 高级程序设计语言
    高级程序设计语言的高级之处体现在开发人员在编写程序时无需关心计算机底层硬件差异而只需要专注于业务模块实现即可。甚至是可以实现 一次编译,到处运行,这里以Java为例子:通过实现不同平台的JVM,编译生成的字节码文件可以在任意的JVM上运行。
    高级语言通常都需要编译器或者是解释器将源码编译或者解释后执行。

高级语言主要分为面向过程和面向对象两种,其中典型的面向过程语言就是C,面向对象的编程语言有Java,C++,Python等等。

1.3.2 编程语言应用场景

如果想知道目前主流的编程语言有哪些,可以访问tiobe 首页获取编程语言排行榜,如下图所示,从Tiobe官网获取最新(2019年6月)的编程语言排行榜的前20名,

根据Tiobe排行榜得知,Java/C/Python 分别排在前三名, 随后紧跟着C++,VB.NET,C#,JavaScript,PHP等等,每种语言都有不同的应用场景和擅长的领域,如下表格所示。

编程语言 应用场景
C 硬件驱动、操作系统、系统软件
C++ 系统软件、网络通讯、科学计算、游戏
C# Windows应用,Web应用、游戏
Java 大型互联网应用(淘宝、天猫),Android,大数据
Python 人工智能、机器学习、自动化运维、数据分析 、图形处理
PHP 中小型网站开发
Objective-C/Swift macOS,iPhone,iPad应用开发
JavaScript 浏览器端、服务端、PC桌面
Go 高并发、区块链

1.4 程序及其运行机制

1.4.1 程序和指令

程序:程序是为了完成某项特定任务(例如聊天,听音乐等等)而使用某种编程语言编写的一组指令序列
指令:令是对计算机进行程序控制的最小单位,由操作码和操作数组成,操作码指的是机器要执行什么操作(例如加减乘除),而操作数就是具体执行的对象(具体的数据以及存放数据的位置),所有指令的集合称为计算机的指令系统,常见的电脑指令系统有Intel X86指令集,常见的手机指令系统有ARM。因此手机上的应用程序不加修改是不能在电脑上直接运行,因为不同的指令集是不兼容的。

1.4.2 程序的运行机制

无论哪种编程语言编写的程序,最终都会转换成二进制的机器码后在内存中执行。

目前主流的编程语言按照运行机制可以分为编译型和解释型两种。

编译型使用编译器将源程序一次性编译成特定平台(Windows,Linux,macOS)二进制格式机器码,并链接生成特定平台的可执行程序格式(例如Windows通常是.exe),可以脱离开发环境独立运行。其特点就是运行效率高,但是不能移植。典型的编译型语言有C/C++/Swift等等

解释型是使用解释器对源程序进行解释成特定平台的机器码并立即执行,解释型语言编写的程序通常不能脱离开发环境独立运行,可以理解成每次运行时都需要再次编译;因此解释型的语言相对于编译型的语言而言运行效率低,但是可以移植。典型的解释型语言有Python/Ruby等等。

1.5 计算机数据存储

1.5.1 常用计算机存储单位及其换算

在计算机最底层,数据都是以二进制(01010)的补码方式存储,而计算机中最小的存储单位是位(bit),用来表示0或者1。
计算机中最基本的存储单位是字节(Byte),1个字节对应8个位(Bit)。
而日常应用中常使用的基本存储单位包括KB,MB,GB,TB。它们之间都是以1024换算的,如下所示

1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B
1B=8bit

1.5.2 计算机内存存储

现在通常笔记本的内存通常是8G,16G,32G,64G等等,而运行在笔记本之上的操作系统普遍都是64位的,因为32位系统只能使用4G内存,下面是4G的内存换算

4G=2^2 * 2^10 * 2^10 * 2^10 =4*1024*1024*1024=2^32

因为4G只能够寻址到2^32,使用16进制表示就是0xFFFFFFFF,这里可以借助Visual Studio的调试功能查看内存的寻址,如下图所示

1.5.3 计算机网速换算

使用迅雷下载某些资源时的网速就是KB或者MB,而网络运营提供商(例如长城宽带、移)声称的百兆带宽实际上是100Mb(bit),但是网络下载速度是以字节(KB)为单位的,因此真实的网速(下载速度)理论上只有100Mb/8=12.5MB

1.5.4 计算机磁盘容量换算

在购买内存或者买移动硬盘时,通常使用的存储单位就是GB或者是TB,
但是在买4T的移动硬盘时,实际的可用容量却只有3T多,因为计算机的存储单位是以2的10次方(即1024)换算,而硬盘厂商们是以1000为换算单位。

4T的硬盘换算成位如下所示

4T=4*1024GB*1024MB*1024KB*1024B*8bit

而硬盘厂商的实际容量

4T=1000*1000*1000*1000*8

因此实际的可用容量是

4*1000*1000*1000*1000/1024/1024/1024/1024≈3.63T

而在一些互联网巨头(例如国内的BAT,国外的亚马逊、苹果、微软、谷歌,脸书)公司中,可能使用到比TB更大的海量数据,也就是PB或者EB,它们的换算单位如下所示。

1PB=1024TB
1EB=1024PB

转载于:https://www.cnblogs.com/ittimeline/p/10608834.html

Java架构师成长之道之浅谈计算机系统架构相关推荐

  1. Java架构师成长之道之Java数据计算

    Java架构师成长之道之Java数据计算 Java架构师成长之道 3.1 Java数据计算概述 计算机最主要的任务就是完成生产生活中的各种数据的运算,在Java中提供了诸多的运算符来完成相关数据的运算 ...

  2. Java架构师成长之道之计算机组成原理组成篇

    Java架构师成长之道之计算机组成原理组成篇 Java架构师成长之道 2.1 计算机总线 2.1.1 总线概述 以通用串行总线USB(Universial Serial Bus)为例子来理解什么是总线 ...

  3. Java架构师成长之道之Java架构师技术栈

    Java架构师成长之道之Java架构师技术栈 Java架构师成长之道 JavaSE篇 Java概述与开发环境搭建 Java数据存储 Java数据运算 Java程序流程控制 Java数组 Java面向对 ...

  4. Java架构师成长之道之Java程序流程控制

    Java架构师成长之道之Java程序流程控制 Java架构师成长之道 4.1 程序流程控制概述 之前编写的绝大多数程序都是顺序执行,也就是从main函数开始,由上到下一行一行的执行,也被称为顺序结构. ...

  5. JAVA资深架构师成长路线

    文章目录 JAVA资深架构师成长路线 架构师筑基必备技能 并发编程进阶 JVM性能深度调优 网络编程与高效IO 深入Tomcat底层 MySql深度优化 架构基础必备Linux 设计思想 六大原则 种 ...

  6. JAVA资深架构师成长路线-架构师筑基必备技能-深入Tomcat底层

    文章目录 JAVA资深架构师成长路线大纲 深入Tomcat底层 Tomcat体系架构 Tomcat容器及运行机制 Tomcat类加载机制 Tomcat核心组件 Tomcat优化 Tomcat面试题集 ...

  7. Java架构师成长直通车(一):学习指南

    大型网站的特点和设计宗旨 罗马不是一天建成的,对应的,大型网站也不是一来就有的.淘宝诞生在马云的家中,谷歌一开始是在斯坦福大学的宿舍中设计出来的,后面搬到了车库中.任何大型网站不可能一来就设计成能扛得 ...

  8. App架构师成长路线

    点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识​ ​ ​ ​参与文末话题讨论,每日赠送异步图书 --异步小编 架构师,软件技术领域一个高大上的名词,业界有言"人人 ...

  9. 如何成长为优秀的架构师?架构师成长的4大必经之路

    进阶架构师|作者 陈睿Mike 之前谈到架构师核心技能,如果你对架构师这个职位从技能的角度有比较清晰的认识了,本篇文章将为你继续揭示架构师这个职位的成长周期,文末有架构师资料~ 在国内架构师需要多年的 ...

最新文章

  1. 使用 Cufon 渲染网页字体
  2. hive 安装_7.Hive介绍以及安装
  3. php之工作积累 (一)
  4. lisp调用qleader端点_标注时自动切换到DIM图层 lisp程序
  5. 生物信息考研C语言,四川大学生物信息学初试经验分享
  6. Struts2第九篇【OGNL、valueStack详解】
  7. yii2 跨域请求配置_如何在SpringBoot应用中实现跨域访问资源和消息通信?
  8. VB中PictureBox控件使用教程
  9. 软件维护类型的基础知识
  10. 如何把Excel中表格复制粘贴到PPT中,并更改表格边框颜色
  11. C++线程编程-内存顺序
  12. iPhone iPad分辨率
  13. WIN10下装Ubuntu 18.04双系统
  14. 小青龙的Java面试笔记
  15. Masking Layer的作用
  16. java图片式验证码的实现(引入hutool工具类和自己编写工具类两种方法)
  17. java开源 mooc,GitHub - bo5509/TinyMooc: 轻量级Java平台在线幕课学习网站
  18. 最新教程:java(IDEA,eclipse都有)通过JDBC链接SQLServer2012数据库
  19. koa框架(一) 认识koa
  20. 站长说说之SEO中跳出率是多少才正常呢

热门文章

  1. colease函数 mysql_SqlConnection 概述
  2. 初学者python用什么开发软件-对于自学python的初学者来说,应该使用什么编辑工具?...
  3. 计算机科学与技术python方向是什么意思-大学计算机科学与技术相关专业学习路线...
  4. python学生管理系统-学生管理系统python
  5. python网页爬虫-python网页爬虫浅析
  6. python流程控制语句-Python流程控制语句详解
  7. python画曲线-Python绘制各种简单优美曲线
  8. python爬虫教程书-Python 爬虫:把廖雪峰教程转换成 PDF 电子书
  9. python爬百度翻译-用python实现百度翻译
  10. 为什么叫python编程-月薪上万的Python编程,为什么你还没入门就放弃了?