JavaEE初阶——初识EE(Java诞生背景,CPU详解)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能帮到你!

目录

零:Java的发展背景介绍

一:EE的概念

二:计算机的构成

1:CUP

(1)CPU的计算单元

(2)架构和指令集

(3)CPU的核心

①多核cpu和并发编程:

②超线程技术:

③大小核技术:

(4)CPU的频率

(5)CPU的指令

①寄存器的概念:

②模拟cpu执行指令的过程

③:总结CPU是如何计算的


零:Java的发展背景介绍

1:9几年,java之父詹姆斯想做一个面包机,当时流行的编程语言是c++,因为门槛比较高,团队里的新人上手慢,詹姆斯就简化了c++的代码,做出了java语言,后来面包机没搞成,java这一套编程语言却流传下来了

2:后来互联网兴起,人们从网页获取信息,网站开发成了热门,java就衍生出了一种技术applet,这是一种让java代码在浏览器上运行的技术,能够控制网页和用户之间的交互

3:同期微软的windows也崛起,当时主流浏览器是网景Netspace,windows的崛起让IE浏览器取代了网景,微软想让VBScript在IE上取代Java的前端开发位置,但是却成全了JAVAScript(跟java没啥关系,只是名字),JavaScript也一直为前端霸主之一流传到现在(现在微软下的TS市场份额超过了JavaScript),但是Java只好另寻出路

4:进军服务器后端开发领域(当时后端是Linux的天下),当年后端开发网站服务器首选PHP(世界上最好的编程语言,官网上这么写的,叠甲!!),用到的技术栈是LAMP(Linux,Apache,MySQL,PHP),Java就参考PHP搞了一个JSP,Java凭借JSP就站稳了

微软则是仿照开发了一个叫ASP。

随着网站规模变大,PHP招架不住了,(PHP是把代码嵌入到html中),这种方式耦合性非常高,所以规模变大就出问题了

②JSP同样也是,这时Java中出现了Spring(是一系列用于构建后端服务器的相关工具组件),把前端和后端解耦合了,即分开开发,这种方式把界面和逻辑分开,界面只由前端这些技术来构建,逻辑用其他语言来开发服务器,服务器只给界面提供数据,并不干预界面是什么样子的。

5:进军移动端应用开发,在00年,手机上的很多游戏都是Java开发的,用到的技术是J2ME,像贪吃蛇啥的,进游戏的界面会有个咖啡杯的logo

①:07年水果发布,12年安卓崛起,水果用的开发语言是Objective-C,生态非常封闭,相对安卓生态更加开放(是一个开源的操作系统),后来java就成了谷歌(安卓)力推的开发编程语言,

                                                                                                                                                                          

一:EE的概念

JavaEE就是java开发网站后端用到的一系列的技术栈

前端:通俗简单的讲就是我们现在在浏览器上看到的网页界面

后端:简单理解就是服务器,数据库等

学习的六个方面

1:操作系统基础

2:多线程

3:文件操作

4:网络编程

5:网络原理

6:jvm

二:计算机的构成

(1)计算机  =  软件  +  硬件

输入设备:鼠标,键盘,麦克风

输出设备:显示器,音响,耳机

既是输入也是输出:触摸屏,网卡

1:CUP

引入:CPU人类科技巅峰之作

(1)CPU的计算单元

cpu的计算单元非常的小,是通过光刻机在硅晶片上雕刻电路,想要提高cpu的算力,就得提高cpu计算单元的集成程度,就需要更高精度的光刻机,目前我国这一领域还是处于被卡脖子的一个阶段,且看诸君了!!

(2)架构和指令集

①cpu的设计方式有很多种,这就是架构,每种架构方式都有不同的“指令集”

   intel  和   AMD  搞的CPU是同一种架构——x86

高通、苹果搞得是另外一套架构——ARM(低功耗高续航,但性能略逊色于x86)

②指令集:我们说的编程,就是通过编程语言写出来一些逻辑,这些逻辑最终被转换成cpu能够识别的“指令”(机器语言)最终执行。

③编程语言一般分为三种:机器语言,汇编语言,高级语言

④软件开发:我们所说的软件开发并不局限于图形化界面,而一个软件难易程度也跟图形化界面没有关系,软件开发说的是通过一些代码解决问题,如何写出一个软件就需要程序员具有相当高的内功和外功了

(3)CPU的核心

引入:上面说到,cpu的算力跟它的计算单元有关,计算单元越小,它的集成程度越高,算力越强,那么这玩意可以无限小吗?显然不行,涉及到量子力学了,原来的那一套逻辑就行不通了,那么没有办法了吗?no~no~no~

多核cpu和并发编程:

让一个cpu上具有多个“核心”,每一个核心都是一个完整的cpu,例如8核CPU:我们把要处理的一个大任务合理拆分成8个小任务,交给每一个核心去处理,此时大大提升了效率,这就是(并发编程)。当然仅靠核心是不足以完成这一任务的,还需要通过软件的配合

超线程技术

在cpu多核的基础上还能不能继续提升呢?可以的!在超线程技术的支持下,我们把一个“核心”当成两个来用,即如果是八核cpu,一个核心为两份劳动力,那我们就拥有了16份劳动力(一个核心干两个人的活)。(赤裸裸的剥削QwQ!!)

大小核技术

那还能提升吗?yes,后来intel搞出来个大小核技术,就是把一个核心分为两份(一份次大核心,一份次小核心),次大核心带有超线程技术(一个顶俩),次小核心不带超线程技术(一个顶一个)。

(4)CPU的频率

引入:由上提问,那是不是cpu的核心越多,算力就越强呢?不一定,cpu的算力还跟cpu的频率有关,频率是描述每秒钟cpu核心工作处理的次数,一般是按亿为单位的

①超睿频技术

cpu核心的频率是随当前任务的多少而动态变化的,即频率大小是有一个区间的,基础频率(下限)——最大睿频(上限)

注:除此之外还有很多指标可以衡量cpu的性能

(5)CPU的指令

①寄存器的概念:

寄存器是CPU上的存储数据的单元,因为cpu自身能存储的数据不多,所以cpu计算的很多中间结果就可以先放到寄存器当中(随放随取),等要用的时候再拿出来,寄存器的读写速度非常快,比内存能高出3~5个数量级

解释:RAM内存,opcode操作码

②模拟cpu执行指令的过程

步骤一:假设从0号地址开始

数据四位一分   0010     1110(14)

0010(opcode)对应的指令是LOAD_A,从内存的指定地址加载到A寄存器当中

1110(14)地址对应的数据是0000 0011,也就是(放)A寄存器中:0000  0011

步骤二:光标下移到了地址1执行                                 同理(放)B寄存器中:0000  1110

步骤三:继续光标下移到了地址2 (计算两个制定寄存器中数据的和并放到第二个寄存器当中)

步骤四:

③:总结CPU是如何计算的

例如:上述步骤三  3 + 14 = 17;

第一步CPU从内存读取指令,并存放至寄存器当中(读取指令非常耗时,比CPU执行计算开销大很多,因此CPU引入了缓存,流水线等技术来进行优化,下面会详细讲到)

第二步:CPU解析指令,需要用到指令表,不同的cpu架构有不同的指令表,指令表是写死到cpu中的,cpu很容易识别出来

第三步:CPU执行指令,执行过程中,指令可能会带有一些操作数,不同的操作数的额含义有所不同,

总结:指令,是内存当中的一段数据,我们写好的代码编译后,转化成cpu能够读懂的机器语言(指令),经过操作系统加载到内存当中,然后cpu从内存中读取数据才能执行

(我们把想法通过编程编译,转化成cpu能够识别的指令,操作系统把指令存储到内存,cpu读内存的指令到寄存器,cpu根据指令表解析寄存器中的指令,最后执行)

注:寄存器只是用来存放一些中间结果的一个地方,CPU只从内存当中读取数据和指令,读完之后根据指令表,CPU开始解析指令,最后执行指令

(简单理解:读、解析、执行)

(6)CPU的缓存和流水线

①背景引入:冯诺依曼体系

在当年,冯大佬提出的冯诺依曼体系的精髓就在于:将“执行”和“存储”分开,即“解耦合”,这在计算机设计之初,大大降低了硬件的成本,当时cpu执行“指令”的速度,和从存储器(分为内存和外存)中读取指令的速度差不多。

但是随着时代的发展,硬件越来越NB,cpu执行的速度大大超过了从存储器中读取指令的速度,所以,就提出了一种“缓存”的机制来解决这个问题

②缓存 

打个比方:(当年硬件还没发展起来的时候)有一个舞台,现在有5个演员依次要从很远的地方来舞台演出(每个演员可能需要演多场戏),一个演员演出结束后,后一个演员出发去演出(此时舞台是空闲的,因为路上耽误很多时间,这就是从存储器中读取指令成本过高的原因),走了很久终于到舞台了,以此类推

第一个演员第一场演出完了之后,可不可以让他先住在宾馆不回去,因为后面他还要继续演出。从而出现了一个东西就叫作缓存

缓存:就是将执行完毕的指令,先暂时放到缓存区中,一会还要用到的时候直接再取出来即可,速度快多了(即提升了cpu从存储器中读取指令的速度)xian

③流水线:

前面说到,一个演员演出结束后,后一个演员才出发去演出,此时舞台是空闲的,就浪费了很多资源,那么我们能不能让A演员在演出的时候下一个B演员就提前出发呢?(即A演员演出结束后,B演员刚好到舞台,无缝衔接演出)这就是流水线!!!

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

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

相关文章

前端基于Rust实现的Wasm进行图片压缩的技术文档

在现代Web开发中,图片压缩是一个常见且重要的需求。随着WebAssembly(Wasm)技术的成熟,我们可以使用Rust语言编写高性能的图片压缩代码,并将其编译成Wasm模块在前端运行。相对于传统的后端压缩方案,可以减少…

五、CAN总线

目录 一、基础知识 1、can介绍 2、CAN硬件电路 3、CAN电平标准 4、CAN收发器芯片介绍 5、CAN帧格式 ① CAN帧种类 ② CAN数据帧 ③ CAN遥控帧​编辑 ④ 位填充 ⑤ 波形实例 6、接收方数据采样 ① 接收方数据采样遇到的问题 ② 位时序 ③ 硬同步 ④ 再同步 ⑤ 波…

Java的IO流(二)

目录 Java的IO流(二) 字节缓冲流 基本使用 使用缓冲流复制文件 字符缓冲流 缓冲流读取数据原理 字符编码 字符集 转换流 序列化流与反序列化流 基本使用 禁止成员被序列化 序列号不匹配异常 打印流 基本使用 系统打印流与改变流向 Prop…

【网络安全】依赖混淆漏洞实现RCE

未经许可,不得转载。 文章目录 正文 依赖混淆是一种供应链攻击漏洞,发生在企业的内部依赖包错误地从公共库(如npm)下载,而不是从其私有注册表下载。攻击者可以在公共注册表中上传一个与公司内部包同名的恶意包&#xf…

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器 服务雪崩熔断、限流、降级熔断降级限流 手写实现一个微服务熔断限流器架构设计代码实现整体逻辑ProtectorAspect#aroundMethod(ProceedingJoinPoint)具体实现1、获取接口对…

低级编程语言和高级编程语言

一.区分低级编程语言和高级编程语言的方法 1.低级编程语言 低级编程语言,并不是简单的编程语言,而是写起来很费事的编程语言,如所有编程语言的"祖宗":汇编语言,写起来极其麻烦,说不定一个 int a1; 它就得写好几行,甚至十几行 这样麻烦的编程语言为什么还没消失那,因…

P9235 [蓝桥杯 2023 省 A] 网络稳定性

*原题链接* 最小瓶颈生成树题,和货车运输完全一样。 先简化题意, 次询问,每次给出 ,问 到 的所有路径集合中,最小边权的最大值。 对于这种题可以用kruskal生成树来做,也可以用倍增来写,但不…

Go语言并发模式详解:深入理解管道与上下文的高级用法

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在Go语言中,并发编程是其最强大的特性之一。合理地使用并发模式,可以让我们的程序高效而优雅地处理复杂的任务。在本文中,我们将深入探讨Go语言中的一些高级并发模式,包括管道的技巧和上下文包的应用。通过丰…

react:组件通信

组件通信 父组件向子组件通信 function App() {return (<div><div>这是父组件</div><Child name"这是子组件" /></div>); }// 子组件 function Child(props) {return <div>{props.name}</div>; }props说明 props可以传…

[Python学习日记-26] Python 中的文件操作

[Python学习日记-26] Python 中的文件操作 简介 操作模式 循环文件 其他功能 混合模式 修改文件 简介 在 Python 中的文件操作其实和我们平时使用的 Word 的操作是比较类似的&#xff0c;我们先说一下 Word 的操作流程&#xff0c;流程如下&#xff1a; 找到文件&#x…

go/函数

go/函数 函数定义 func 函数名(参数)(返回值){函数体 } - 函数名&#xff1a;由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内&#xff0c;函数名也称不能重名&#xff08;包的概念详见后文&#xff09;。 - 参数&#xff1a;参数由参数变量和参数变…

re题(39)BUUCTF-[FlareOn3]Challenge1

BUUCTF在线评测 (buuoj.cn) 查壳是32位&#xff0c;ida打开&#xff0c;进入main函数&#xff0c;进入sub_401260看看 查看byte_413000存的字符串 _BYTE *__cdecl sub_401260(int a1, unsigned int a2) {int v3; // [espCh] [ebp-24h]int v4; // [esp10h] [ebp-20h]int v5; //…

python selenium网页操作

一、安装依赖 pip install -U seleniumselenium1.py&#xff1a; from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Chrome() driver.get("https://www.selenium.dev/selenium/web/web-form.html") title driver.ti…

flutter基础 --dart语法学习

由于想要写一款性能较好,但是又可以一套代码多个平台运行的客户端app,所以选择了flutter 就去看了官方文档,大体发现flutter使用的dart语言和java和js差不多,感觉就是缝合怪。 Dart 是一种面向对象的编程语言&#xff0c;语法上与 Java、JavaScript 等语言有一些相似之处&…

Docker工作目录迁移

文章目录 前言一、迁移步骤1.停掉docker服务2.创建存储目录3.迁移docker数据4.备份5.添加软链接6.重启docker服务&#xff0c;测试 总结 前言 安装docker&#xff0c;默认的情况容器的默认存储路径会存储系统盘的 /var/lib/docker 目录下&#xff0c;系统盘一般默认 50G&#…

深入解析网络七层模型:从基础到实践

在网络通信的世界中&#xff0c;OSI七层模型&#xff08;Open Systems Interconnection Model&#xff09;是理解计算机网络结构和通信过程的基础框架。无论你是网络新手还是资深技术人员&#xff0c;理解这一模型对分析和解决网络问题至关重要。在这篇博客中&#xff0c;我们将…

怎么让Nginx可以访问某一IP的每个后台controller接口

http { upstream backend { server 192.168.1.10; # 后端服务器IP } server { listen 80; location /controller1/ { ##proxy_pass http://localhost:801; proxy_pass http://backend/controller1/; # 后端controller1…

ArcGIS Pro SDK (十四)地图探索 6 图形与工具

ArcGIS Pro SDK (十四)地图探索 6 图形与工具 文章目录 ArcGIS Pro SDK (十四)地图探索 6 图形与工具1 图形叠加1.1 图形叠加1.2 图形叠加与 CIMPicture图形1.3 添加带有文本的叠加图形2 工具2.1 更改草图工具的符号2.2 创建用于地图中单击的点的返回坐标的工具2.3 创建用于…

JetsonNano、Ubuntu开机自启动脚本编写(一遍过)

本文章的开机自启动脚本结合.service文件和gnome工具来实现。 需要实现的功能大概是&#xff1a;初始化&#xff08;给端口权限&#xff09;板卡与下位机&#xff08;STM32&#xff09;相连的串口&#xff0c;然后运行相关的python代码。 参考文章&#xff1a; Jetson nano开机…

https的连接过程

根证书: 内置在操作系统和浏览器中,可手动添加,下级是中间证书或服务器证书,只有当中间证书或服务器证书关联到已存在的根证书时,中间证书或服务器证书才视为有效 中间证书: 位于根证书和服务器证书之间,他们之间也可以没有中间证书,作用是对根证书增加一个下级,方便管理,由根…