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,一经查实,立即删除!

相关文章

五、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生成树来做,也可以用倍增来写,但不…

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…

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…

https的连接过程

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

整合多方大佬博客以及视频 一文读懂 servlet

参考文章以及视频 文章&#xff1a; 都2023年了&#xff0c;Servlet还有必要学习吗&#xff1f;一文带你快速了解Servlet_servlet用得多吗-CSDN博客 【计算机网络】HTTP 协议详解_3.简述浏览器请求一个网址的过程中用到的网络协议,以及协议的用途(写关键点即可)-CSDN博客 【…

yolov8旋转目标检测之绝缘子检测-从数据加载到模型训练、部署

YOLOv8 是 YOLO (You Only Look Once) 系列目标检测算法的最新版本&#xff0c;以其高速度和高精度而著称。在电力行业中&#xff0c;绝缘子是电力传输线路上的重要组件之一&#xff0c;它们用于支撑导线并保持电气绝缘。由于长期暴露在户外环境中&#xff0c;绝缘子容易出现损…

【JavaEE】多线程编程引入——认识Thread类

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能帮到你&#xff01; 目录 引入&#xff1a; 一&#xff1a;Thread类 1&#xff1a;Thread类可以直接调用 2&#xff1a;run方法 &a…

【25.6】C++智能交友系统

常见错误总结 const-1 如下代码会报错 原因如下&#xff1a; man是一个const修饰的对象&#xff0c;即man不能修改任何内容&#xff0c;但是man所调用的play函数只是一个普通的函数&#xff0c;所以出现了报错。我们需要在play函数中加上const修饰&#xff0c;或者删除man对…

【计算机网络 - 基础问题】每日 3 题(十八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

SpringBoot环境配置(Spring Boot Profile)

一、介绍 在Spring Boot中&#xff0c;spring.profiles 配置用于定义不同环境下的配置文件。这使得应用可以在不同的环境中使用不同的配置&#xff0c;比如开发环境、测试环境和生产环境等。这种方式可以避免在代码中硬编码配置信息&#xff0c;并且能够更灵活地管理应用的环境…

SpringBootWeb增删改查入门案例

前言 为了快速入门一个SpringBootWeb项目&#xff0c;这里就将基础的增删改查的案例进行总结&#xff0c;作为对SpringBootMybatis的基础用法的一个巩固。 准备工作 需求说明 对员工表进行增删改查操作环境搭建 准备数据表 -- 员工管理(带约束) create table emp (id int …

计算机毕业设计公交站点线路查询网站登录注册搜索站点线路车次/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

选题背景‌&#xff1a; 随着城市化进程的加快&#xff0c;公共交通成为城市居民出行的重要方式。然而&#xff0c;传统的公交站点线路查询方式往往依赖于纸质地图或简单的电子显示屏&#xff0c;查询效率低下且信息更新不及时。因此&#xff0c;开发一个功能全面、易于使用的…

OpenMV学习第一步安装IDE_2024.09.20

用360浏览器访问星瞳科技官网&#xff0c;一直提示访问不了。后面换了IE浏览器就可以访问。第一个坑。