1. 计算机基本概念
从现在开始大家跟着我学习软件开发,这样也就意味着我们以后每天都要和计算机打交道,例如使用台式机、笔记本电脑来学Java开发相关的技术,学完以后去公司使用笔记本、台式机来开发Java项目,使用服务器部署Java项目。因此我们需要对整个计算机系统有个基本的了解。
1.1 什么是计算机
计算机(Computer)俗称电脑,是一种高速计算的电子机器,可以进行数值运算,逻辑判断,能够接收或者是存储信息数据(文本、图片、音频、视频),并且可以按照存储在其内部的程序对海量的数据进行高速、自动化的处理,然后将处理的结果输出的一种现代化的智能电子设备。
1.2 常见的计算机
日常生产和生活中常见的计算机有手机、平板电脑、笔记本电脑、台式机都是属于计算机,
除此以外还有提供各种应用(电商、支付、物流、金融)的大型服务器集群(Server Cluster),服务器就是一台高配的电脑,服务器一般放在机房,所以一般人是接触不到的,互联网公司一般都会安排Linux运维工程师管理这些服务器,服务器集群就是成千上万台(甚至几十万台,上百万台)高配的电脑。
服务器
1.3 计算机的应用场景
计算机几乎无所不在,几乎无所不能
计算机的软硬件的结合实现了生活中的常见需求
- 打游戏(王者荣耀)
- 听歌(QQ音乐、网易云音乐)
- 看电影、追剧(爱奇艺、腾讯视频、优酷)
- 看学习视频(bilibili)
- 打车(高德、美团打车、滴滴)
- 购物(淘宝、京东)
- 在线会议(腾讯会议、金山会议)
- 聊天(微信、企业微信、钉钉)
- 收发邮件(网易邮箱大师、QQ邮箱)
2. 计算机系统组成
计算机系统是由计算机硬件系统和计算机软件系统两部分组成
2.1 计算机硬件系统组成
计算机硬件(Hardware)就是各种客观存在的计算机相关的硬件设备,例如CPU、内存、硬盘、网卡、主板等等。
2.2 计算机软件系统组成
计算机软件(Software)就是利用计算机相关的硬件设备来完成日常生活中常见的需求,例如听歌、看电影、上网、购物、上网课等等。这些需求都是需要通过计算机的软硬件的协作来共同完成的。
计算机系统组成
3.计算机硬件系统
3.1 计算机硬件之CPU
CPU(Central Processing Unit) 中文是中央处理器,CPU是计算机中最核心的部件,类似于人的大脑
CPU是由运算器和控制器组成,运算器是负责数据的运算,控制器是用于控制其他设备协同工作。
CPU主要是用来执行计算机指令以及处理计算机软件的数据
- 目前主流的服务器CPU厂商是Intel,主流的服务器CPU是Intel 志强 可扩展系列
- 主流的PC(笔记本、台式机)领域的CPU厂商是Intel、AMD、苹果Intel最强的CPU是Intel 12代 i9 12900ks\12900k\12900kf苹果最强的CPU是M1 Ultra(2个M1 Max)
3.2 计算机硬件之内存
内存是计算机的存储部件,内存也被称为内部存储器,内存的作用就是用于暂时存储CPU运算的数据和指令以及和硬盘等外部设备进行数据交换。
CPU可以直接访问内存中的数据,而且读写效率比较高
但是内存的容量一般比较小(16GB-256GB),不能永久存储数据,一旦断电之后就会丢失数据,如果你之前使用过台式机开发程序那么就应该深有感触,台式机关机之后,如果之前的数据没有保留就会丢失,因为台式机没有电池,因此我们以后在使用电脑的使用经常使用快捷键Ctrl+s/Command+s 将数据保存到磁盘,从而实现永久存储数据。
内存的厂商有三星、金斯顿、美商海盗船、威刚等等
3.3 计算机硬件之硬盘
硬盘是计算机的存储部件,主要是用于永久存储数据(断电之后数据不会丢失),容量比较大,通常都是TB级,例如1TB,2TB,4TB,8TB,其中1TB=1024GB
CPU不能直接访问硬盘中的数据,如果想要访问硬盘中的数据,需要使用程序将硬盘中的数据加载到内存中再提供给CPU访问。
硬盘分为机械硬盘和固态硬盘
机械硬盘容量大(TB级),价格便宜,读写速度慢,目前主要机械硬盘厂商有希捷、西部数据
固态硬盘容量大(TB级),价格贵,读写速度高,目前主要的固态硬盘厂商有三星、金斯顿
在选配硬盘的时候为了考虑性价比,通常都是机械硬盘和固态硬盘混合使用,例如系统盘都是固态的,数据盘使用机械硬盘,这样开机快,软件运行速度快,节省时间就是挣钱(时间就是金钱)。如果不考虑性价比那么推荐全部使用固态硬盘。
3.4 计算机硬件之网卡
网卡是用于网络上的数据收发,网卡分为有线网卡和无线网卡,日常家用的电脑网卡一般是千兆网卡,而服务器的网卡是万兆网卡。
4.计算机软件系统
4.1 为什么会有软件
假如没有软件,普通人(不懂计算机的人)是没有办法利用计算机硬件资源来实现日常生活中常见的需求,例如订外卖、上网、听歌、上网课、看电影、购物等等。
软件出现的目的就是为了让普通人更好地利用计算机硬件的资源来实现日常生活中常见的需求。
软件实现了更好的人机交互
计算机软件的价值大于计算机硬件价值,例如微信的市值价值几千亿RMB
4.2 软件的组成
软件是程序员/软件工程师/开发工程师/码农/新型农民工采用某种编程语言(C/C++/Java/Python/Go/JavaScript/Scala/Kotlin)编写一系列的指令以及不同业务场景产生的数据组成,软件=指令+数据。例如微信聊天的聊天内容就是数据,而发送微信聊天消息就是指令。
4.3软件的分类
软件分为系统软件和应用软件两大类
计算机系统组成
4.4 软件的交互方式
运行在不同操作系统的软件交互方式是不一样的
- 服务端的软件交互方式是基于命令行/终端的字符界面,主要提供给Linux运维工程师/开发工程师使用
- 桌面端的软件交互方式是基于鼠标、键盘的图形化界面 主要提供给普通用户/开发工程师/Linux运维工程师使用
- 移动端的软件交互方式是手势触控、语音的图形化界面 主要是提供给普通用户和开发工程师使用
5.计算机体系结构
软件是运行在硬件之上的
应用软件/系统软件都是运行在操作系统上的
操作系统是由操作系统内核(OS Kernel)和操作系统外壳( OS Shell)组成
计算机体系结构
6.推荐给Java工程师的计算机配置
6.1 Java项目的开发流程
互联网公司的岗位:运营、产品经理、开发、测试、运维、项目经理
- Java工程师在开发环境开发Java项目
- Java项目开发完成以后部署到测试环境给测试人员提测
- Java项目提测通过以后部署到生产环境对外提供服务
开发环境使用的操作系统是Windows或者macOS
Windows11
macOS12
测试环境、生产环境使用的系统是Linux(CentOS、Ubuntu Server)
CentOS7
CentOS8
Ubuntu Server 20.04
6.2 Java工程师常用的工具
6.2.1 开发环境(Windows/macOS)
- JDK
- Visual Studio Code
- IntelliJ IDEA
- MySQL \ Navicat
- Tomcat
- Git
- Maven
- Postman/Aipfox
- Wireshark
- Chrome
- VMware Workstation(macOS版本叫做 VMware Fusion)\ Parallels Desktop
- Linux (CentOS 、Ubuntu Server) 模拟公司的测试环境和生产环境
- Xmanager\ MobaXterm Windows特有 Termius macOS特有
- 微信、企业微信\ 钉钉
- WPS、Office
- Xmind
- draw.io/ 亿图图示
6.2.2 测试环境/生产环境(CentOS、Ubuntu Server)
- JDK
- MySQL
- Tomcat
- Gitlab
- Maven /Gradle
- Jenkins
- Nginx
- Redis
- RabbitMQ\ RocketMQ\ Kakfa
- ELK
- Docker/Kubernates
- Apollo 分布式配置中心
- Skywalking 分布式链路追踪
- XXL-Job 分布式任务调度中心
在测试环境、生产环境中一个服务可能会有多个实例,比如MySQL服务一般会部署三台服务器
6.3 推荐Java工程师的计算机配置
Java工程师的计算机硬件配置只需要重点关注CPU、内存、硬盘即可
学习Java相关的技术用到几十个工具,而且为了有接近真实的项目经验,还要模拟公司的测试环境、生产环境。
大型的分布式系统架构设计
因此我们需要配置非常高(价格贵)的电脑,但是如果以后你的电脑不能满足需求(如果低于32G内存,32G内存对于开发够用),大家可以去购买阿里云或者是腾讯云的云服务器用来模拟公司的测试环境、生产环境。
- 买硬件产品买新不买旧 因为新的比旧的好,硬件产品每年都在升级(性能更强)
- 只有高配的硬件才能把大型分布式系统架构设计涉及到的各种服务集群运行起来
选笔记本还是台式机?
如果你没有移动办公的需求,那么推荐台式机,因为台式机的性能高于笔记本
如果你有移动办公的需求,那么推荐使用笔记本电脑
6.3.1 Windows+Intel
- CPU Intel 12900ks\12900k\12900kf
- 内存 总容量(开发环境+测试\生产环境)不低于64G,128G更佳
- 硬盘 4TB固态
6.3.2 Mac
- CPU M1 Max 或者M1 Ultra
- 内存 总容量(开发环境+测试\生产环境)不低于64G,128G更佳
- 硬盘 4TB固态
MacBookPro
虽然Windows和macOS都可以做Java开发,但是还是推荐初学者选择Windows ,至于理由就是Windows生态相比macOS系统的生态更加完善
7. 计算机常用单位
计算机常用单位指的是计算机的核心组件(CPU,内存,硬盘,网卡)相关的单位,例如容量单位、速度单位
我们需要了解计算机常用单位,因为它们属于计算机相关的基本常识
7.1 计算机常用容量单位
在购买电脑的时候,通常都会选择高配置的CPU、内存、硬盘等等,例如Mac Studio已经可以选配128GB内存、8TB固态硬盘
Mac Studio
这里的128GB、8TB就是常见的容量单位
在物理层面,我们使用高低电平来记录信息,通常都是使用高电平表示1,低电平表示0,因此在计算机底层只能识别0和1两种状态。但是0和1能够表示的内容太少了,因此需要更大容量的表示方法,所以出现了如下列表所示的容量单位
- 位(bit):计算机最小的容量单位,通常用于门电路
- 字节(Byte):计算机的最基本容量单位,通常用于表示网络传输(上传、下载),文件大小的容量单位
- 千字节(KB):通常用于表示网络传输(上传、下载),文件大小的容量单位
- 兆字节(MB): 通常用于表示网络传输(上传、下载),文件大小的容量单位
- 吉字节(GB): 通常用于表示内存、硬盘的单位
- 太字节(TB): 通常用于表示内存、硬盘的单位
- 拍字节(PB):通常用于表示大数据系统处理的数据容量单位
- 艾字节(EB):通常是用于表示互联网大厂(字节跳动、阿里巴巴、腾讯、华为、百度、美团)的区域数据中心的总容量
它们的换算关系如下所示
1EB=1024PB1PB=1024TB1TB=1024GB1GB=1024MB1MB=1024KB1KB=1024Byte1Byte=8bit
生活中遇到的一个疑问:为什么我买的4T硬盘的实际可用容量大约是3.63TB
因为计算机容量单位是以1024进行换的,但是硬盘厂商是以1000进行换算的
计算机中4TB硬盘换算成字节
4TB=4*1024*1024*1024*1024
硬盘厂商4TB硬盘换算成字节
4TB=4*1000*1000*1000*1000
4T硬盘的实际可用容量
4*1000*1000*1000*1000/1024/1024/1024/1024≈3.63TB
4T硬盘的实际可用容量
7.2 计算机常用速度单位
7.2.1 网速
网络常用的速度单位是Mbps
网络带宽提供商(长城、电信等等)声称百兆带宽实际上就是100Mbps,但是100M带宽的峰值下载速度也就10MB左右,它们之间的换算关系是100Mbit/s=(100/8)MB/s=12.5MB/s
7.2.2 CPU速度
CPU的速度一般是由CPU的时钟频率所体现的,时钟频率的单位是赫兹(Hz),目前主流的CPU一般都是2GHz以上,而赫兹(Hz)就是秒分之一,也就是每秒钟的周期性变动重复次数的计量。
相关影片资源迅雷下载推荐
如何做好应用软件开发?
如何做好应用软件开发?应用软件是指用于商业,生活方面的软件开发,其特点是对于技术要求低于软件实用价值,强调软件的应用性和可用性,强调用户体验,做引用软件开发的公司很多,应用软件类型也很多,但是大部分软 ...
软件开发,如何做好应用软件开发?
GHz、MHz和Hz的换算关系如下所示
1KHz=1000Hz1MHz=1000KHz1GHz=1000MHz
假如你的计算机CPU的速度是5GHz
5GHz=5*1000*1000*1000=50 0000 0000
也就是说5GHz的CPU每秒钟的变化次数是50亿次
Windows系统可以在任务管理器的性能栏目中看到CPU的基准速度
8. 计算机 原码、反码、补码
我们讲解计算机原码、反码、补码和进制的的目的就是为了后面讲解位运算符的运算原理
8.1 有符号数和无符号数
生活中的整数分为正整数和负整数,例如+15和-15
计算机如何表示负数?
计算机内部都是采用二进制来存储数据,例如0000 1111和1000 1111
整数分为有符号数和无符号数
有符号数的二进制位由符号位和数据位组成
有符号数的符号位是1,表示这个二进制数是负数
有符号数的符号位是0,表示这个二进制数是正数
无符号数的二进制位都是数据位,不能表示负数,最小值是0
C语言中变量可以使用signed和unsigned来表示有符号数的变量和无符号数的变量
Java语言中没有signed和unsigned这两个关键字
但是Java语言有两个基本数据类型:short和char,它们都是占据2个字节
short的表示范围 -32768 - +32767 有符号数
char的表示范围 0-65535 无符号数
8.2 原码、反码、补码
原码、反码、补码都是数据二进制的表示方式
- 原码
十进制 +15 二进制原码 0000 1111 (一个字节)
十进制 -15 二进制原码 1000 1111 (一个字节)
- 反码
正数的反码就是原码
十进制 +15 二进制原码 0000 1111 (一个字节) 二进制反码 0000 1111 (一个字节)
负数的反码就是原码的符号位不变,其他位(数据位)按位取反(0变1 1变0)
十进制 -15 二进制原码 1000 1111 (一个字节) 二进制反码 1111 0000 (一个字节)
- 补码
正数的补码就是原码
十进制 +15 二进制原码 0000 1111 (一个字节) 二进制反码 0000 1111 (一个字节)
二进制补码 0000 1111 (一个字节)
负数的补码是反码+1
十进制 -15 二进制原码 1000 1111 (一个字节) 二进制反码 1111 0000 (一个字节)
二进制补码 1111 0001(一个字节)
关于原码、反码、补码的转换规则
- 正数的原码、反码、补码都一样
- 负数的原码求补码:原码的最高位(符号位)不变,其他位数取反得到反码,反码加1得到补码
- 负数的补码求原码:补码减1得到反码,反码的最高位不变,其他位数取反得到原码
为什么原码、反码、补码需要相互转换
- 计算机在执行运算的时候使用补码运算
- 当我们查看计算机执行结果的时候使用原码
8.3 为什么使用补码存储和计算数据?
计算机的数据都是以二进制的补码存储的
- 引入四个整数的原码 (一个字节)
数据 |
原码表示(一个字节) |
1 |
00000001 |
-1 |
10000001 |
+0 |
00000000 |
-0 |
10000000 |
需求1:使用原码计算1-1
CPU内部只有加法器
十进制1-1
1 - 1 = 1 + -1
1+ -1 转换成二进制原码
0000 0001 + 1000 0001= 1000 0010
1000 0010 转换成十进制结果是-2
为什么不使用原码来存储和计算数据?
- 0使用原码有两种表示方式:0000 0000和 1000 0000
- 原码表示的数据在运算的时候得到的运算结果是错误的
需求2:使用反码计算 1-1
- +1 原码 0000 0001 反码 0000 0001
- -1 原码 1000 0001 反码 1111 1110
- +0 原码 0000 0000 反码 0000 0000
- -0 原码 1000 0000 反码1111 1111
数据 |
原码(一个字节) |
反码(一个字节) |
+1 |
0000 0001 |
0000 0001 |
-1 |
1000 0001 |
11111 1110 |
+0 |
0000 0000 |
0000 0000 |
-0 |
1000 0000 |
1111 1111 |
CPU内部只有加法器
十进制1-1
1 - 1 = 1 + -1
1+ -1转换成二进制反码
0000 0001 + 1111 1110=1111 1111
1111 1111 转换成十进制 -127
为什么不使用原码来存储和计算数据
- 0使用反码有两种表示方式:0000 0000和 1111 1111
- 反码表示的数据在运算的时候得到的运算结果是错误的
需求3:使用补码来计算1-1
数据 |
原码 |
反码 |
补码 |
+1 |
0000 0001 |
0000 0001 |
0000 0001 |
-1 |
1000 0001 |
1111 1110 |
1111 1111 |
+0 |
0000 0000 |
0000 0000 |
0000 0000 |
-0 |
1000 0000 |
1111 1111 |
0000 0000 |
CPU内部只有加法器
十进制1-1
1 - 1 = 1 + -1
转换成二进制的补码
0000 0001 + 1111 1111 =0000 0000
因为补码解决了原码、反码的两个问题,因此计算机会使用补码来存储和运算数据。
9. 计算机进制
9.1 计算机进制介绍
进制是一种计数的方式,也称为进位计数法或者位值计数法,进制使用有限的数字符号表示无限的数值,使用的数字符号的数量称为这种进制的基数或者是底数,例如十进制就是由0-9之间的十个数字组成的。
相同进制类型的数据在进行运算的时候会遵守:加法:逢R进1,减法:借1当R,这里的R表示进制
计算机常用的进制有十进制、二进制、八进制、十六进制四种。
- 十进制:生活中使用最多的一种进制,例如账户余额,开发人员的薪水等等,运算的时候逢10进1,借1当10,十进制的权重依次是 10^0、10^1、10^2、10^3、10^4 等等
1234=1000+200+30+4=1*10^3 + 2*10^2 + 3*10^1+ 4*10^0
- 二进制:在计算机底层,数据都是以二进制的补码存储,运算的时候逢2进1,借1当2,整数有正整数和负整数,二进制中最高位(左边第一位)用于表示符号位,符号位如果是0表示正整数,符号位如果是1表示负整数,二进制的权重依次是2^0、2^1、2^2、2^3、
企业网站建设与开发最低只要299元起,包含域名服务器,需要的联系QQ345424724,电话15516990022,18530226930相关影片资源迅雷下载推荐
软件开发改变我的命运!不后悔做程序员
大家好,我叫springmeng,网友也叫我小孟,因为前面搞spring较多,就取了这个网名。小硕一枚,做过程序员、主管、产品经理,高级工程师。混过国企、私企,搞过很多大型的项目以及N个小屁项目(N大于1000)。崇尚自由 ...
软件开发,软件开发改变我的命运!不后悔做程序员
标签: 软件开发 软件开发必知必会的计算机基础