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

news2024/11/13 7:51:44

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

目录

零: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.coloradmin.cn/o/2145867.html

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

相关文章

Python面试宝典第50题:分割等和子集

题目 给你一个只包含正整数的非空数组nums,请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1, 5, 11, 5] 输出:True 解释:数组可以分割成[1, 5, 5]和[11]。 示…

C++之第十二课

课程列表 哎呀呀,失踪人口回归了!(前段时间跑去B站了,久等了) 今天来讲——数组 有一道题是这样的: 有n个数,请输出其中最大的数。 原来我们就要: int a,b,c... 但是——数组…

Golang开发的OCR-身份证号码识别(不依赖第三方)

身份证号码识别(golang) 使用golang的image库写的身份证号码识别,还有用了一个resize外部库,用来更改图片尺寸大小,将每个数字所在的图片的大小进行统一可以更好的进行数字识别,库名 :“github…

ARM 工业边缘计算机与 C# 编程的完美融合

在工业领域,随着智能化和数字化的不断推进,ARM 工业边缘计算机凭借其出色的性能和低功耗等优势,逐渐成为众多应用场景的重要支撑。而 C# 编程语言的强大功能和广泛适用性,使其在与 ARM 工业边缘计算机的结合中展现出了巨大的潜力。…

Python | Leetcode Python题解之第415题字符串相加

题目: 题解: class Solution:def addStrings(self, num1: str, num2: str) -> str:res ""i, j, carry len(num1) - 1, len(num2) - 1, 0while i > 0 or j > 0:n1 int(num1[i]) if i > 0 else 0n2 int(num2[j]) if j > 0 e…

C++ -命名空间-详解

博客主页:【夜泉_ly】 本文专栏:【C】 欢迎点赞👍收藏⭐关注❤️ C -命名空间-详解 1.C语言缺点之一 -- 命名冲突2.命名空间2.1定义2.2使用访问命名空间中的变量展开命名空间域指定访问命名空间域 2.3其他功能 3.C 标准库中的命名空间指定展开…

华为OD机试 - 二维伞的雨滴效应(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

徒增成本,还是有备无患?说说4G模组SIM双卡切换

初学开发的小伙伴提出疑问: 手机双卡可以理解,人情世故各种缘由…… 物联网设备有必要双卡吗,会不会太浪费? 实际应用中,双卡可不是徒增成本的摆设,而是有备无患的必需。 在使用4G模组双卡功能的场景下&a…

2024年数学建模比赛题目及解题代码

目录 一、引言 1. 1竞赛背景介绍 1.1.1数学建模竞赛概述 1.1.2生产过程决策问题在竞赛中的重要性 1.2 解题前准备 1.2.2 工具与资源准备 1.2.3 心态调整与策略规划 二、问题理解与分析 三、模型构建与求解 3.1 模型选择与设计 3.1.1 根据问题特性选择合适的数学模型类…

每日学习一个数据结构-红黑树

文章目录 什么是红黑树?示意图红黑树的特点红黑树的节点结构插入和删除操作旋转操作重新着色 红黑树的应用 树的构造过程插入新节点自平衡调整策略 示例 查询过程 什么是红黑树? 红黑树(Red-Black Tree)是一种自平衡的二叉查找树…

关于嵌入式硬件需要了解的基础知识

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于嵌入式硬件基础知识的相关内容&#xff…

TCP: Textual-based Class-aware Prompt tuning for Visual-Language Model

文章汇总 存在的问题 原文:具有图像特定知识的图像条件提示符号在提升类嵌入分布方面的能力较差。 个人理解:单纯把"a photo of {class}"这种提示模版作为输入是不利于text encoder学习的 动机 在可学习的提示和每一类的文本知识之间建立…

2024短剧系统开发,付费短剧小程序app源码教程,分销功能讲解搭建上线

短剧系统技术栈 前端:vue3uniapp 后端: php 数据库:mysql 服务器环境: centos7.6 宝塔 php7.4 MySQL5.7 一、短剧系统功能 短剧用户端: 小程序、抖音小程序、快手小程序、APP、 z付宝小程序 系统用户端详细功能&…

Java创建教程!(*  ̄3)(ε ̄ *)

Java 构造函数 Java面向对象设计 - Java构造函数 构造函数是用于在对象创建后立即初始化对象的代码块。 构造函数的结构看起来类似于一个方法。 声明构造函数 构造函数声明的一般语法是 <Modifiers> <Constructor Name>(<parameters list>) throws <…

安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制

背景&#xff1a; 看SystemUI的锁屏相关代码时候发现SystemUI有一个日志打印相关的方法调用&#xff0c;相比于常规的Log.i直接可以logcat查看方式还是比较新颖。 具体日志打印代码如下&#xff1a; 下面就来介绍一下这个ShadeLogger到底是如何打印的。 分析源码&#xff1…

scanf()函数的介绍及基础用法

目录 scanf&#xff08;&#xff09;函数的介绍及基础用法 一&#xff1a;头文件 二&#xff1a;一般用法 三&#xff1a;返回值 1. 正整数的情况&#xff1a; 2. 0 的情况&#xff1a; 3. EOF的情况&#xff1a; 四&#xff1a;说明 scanf&#xff08;&#xff09;函数…

CCF202006_1

问题描述 试题编号&#xff1a;202006-1试题名称&#xff1a;线性分类器时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 题解&#xff1a; #include<bits/stdc.h>using namespace std; int n, m;struct Node {int x, y;char ch; }node[1010…

9.16日常记录

1.LRU算法 核心思想:LRU算法&#xff08;Least Recently Used&#xff09;是一种常用的缓存淘汰策略&#xff0c;它的核心思想是“如果数据最近被访问过&#xff0c;那么将来被访问的几率也更高”。LRU算法主要用于内存管理和缓存系统。当内存或缓存空间已满&#xff0c;需要腾…

【工具变量】气候适应型试点城市DID(2005-2022年)

数据来源&#xff1a;本数据来源于中国ZF网发布的《关于深化气候适应型城市建设试点的通知》 时间跨度&#xff1a;2005-2022年数据简介&#xff1a;适应型试点城市是指在应对气候变化、提高城市适应能力方面进行先行先试的城市。根据中国ZF网发布的《关于深化气候适应型城市建…

在 Stable Diffusion 1.5 中 Lora, Dreambooth, Textual Inversion的详解指北

Lora, Dreambooth and Textual Inversion 说明 您是否想象过您可爱的宠物与埃菲尔铁塔合影的画面&#xff0c;或者想象过如何生成一张带有您朋友面孔的人工智能图像&#xff1f; 是的&#xff0c;通过稳定扩散技术的微调&#xff0c;这完全是可能的&#xff01; 创建这些场景…