阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能帮到你!
目录
零: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演员刚好到舞台,无缝衔接演出)这就是流水线!!!