Java学习笔记 0、计算机相关知识了解
@[toc]
前言
去年四月份大一下半学期正式开始学习Java,一路从java基础、数据库、jdbc、javaweb、ssm以及Springboot,其中也学习了一段时间数据结构。
在javaweb期间做了图书商城项目、ssm阶段做了权限管理项目,springboot学了之后手痒去b站看视频做了个个人博客项目(已部署到服务器,正在备案中)。期间也不断进行做笔记,总结,但是越学到后面越感觉有点虚,觉得自己基础还有欠缺。
之后一段时间我会重新回顾java基础、学习一些设计模式,学习多线程并发之类,以及接触一些jvm的相关知识,越学到后面越会感觉到基础的重要性,之后也会以博客形式输出学习的内容。
现在整理的java知识基础点是在之前学习尚硅谷java课程的笔记基础之上加工汇总,部分图片会引用尚硅谷或网络上搜集或自己画,在重新回顾的过程中也在不断进行查漏补缺,尽可能将之前困惑的点都解决,让自己更上一层楼吧。
博客目录索引:博客目录索引(持续更新)
一、计算机基本知识
1、认识CPU
早期cpu由运算器、控制器组成,之后随着ULSI技术发展,cpu芯片增加了其他逻辑功能部件,cpu开始变得越来越复杂,基本部分包含运算器、cache缓存、控制器三个部分,称为中央处理器。
cpu中的计量单位是赫兹。
- 1khz=1024hz
- 1mhz=1024khz
- 1Ghz=1024mhz
CPU中的核实现指令的读取和执行的部分。
2、认识内存
内存(RAM):内存读取速度比硬盘快10倍,是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都是在内存中进行的。内存的运行决定计算机整体运行快慢的程度。
- 计算机执行时,操作系统会将运算数据从内存调到CPU中进行运算,当运算完成之后,CPU将结果传送出来。
单位是比特或字节,在计算机中最基本的是字节。
- 1字节=8比特
- B<KB<MB<GB<TB
二、三大定律
摩尔定律:英特尔创始人之一戈登-摩尔(Gordon Mooore)提出,价格不变的情况,每隔18-24个月会增加一倍集成电路上可容纳的元器件数量,也就是说同样的价格过了18或24个月以上,买到机器的性能会高出一倍。
安迪比尔定律:阐述硬件厂商与软件厂商的关系,硬件设备的提升,也会使软件公司开发出更庞大、更消耗资源的软件,与此同时会将硬件提升的性能消耗掉。
反摩尔定律:是Google的前CEO埃里克.施密特提出的,若是一个IT公司现阶段卖出与18个月之前同样多的产品,那么营业额就会降低一半,这种则称为反摩尔定律。其定律逼迫所有硬件设备公司要赶上摩尔定律所规定的更新速度,也是十分苦逼的。
三、IT两大鼻祖
两位鼻祖介绍
艾伦.图灵:计算机科学和人工智能之父,相关电影《模仿游戏》可以去看下。
冯诺依曼:计算机之父和博弈论之父。
各自做出贡献:计算机的基本概念属于图灵,冯诺依曼的基本作用是使世界认识了由图灵引入的计算机基本概念
图灵机与图灵奖
图灵机:1936年,英国数学家阿兰・麦席森・图灵提出了一种抽象的计算模型——图灵机。将人们使用纸笔进行数学运算过程进行抽象,由一个虚拟的机器来替代人类进行数学运算。
图灵奖:名称取自阿兰・麦席森・图灵,奖励对计算机事业做出重要贡献的人,一年仅授予一名计算机科学家。图灵奖也是计算机领域的国际最高奖项,誉为计算机界的诺贝尔奖。
- 中国人姚期智2000年获得图灵奖,至今唯一华人学者,他教的班级就叫做姚班。
四、万维网
万维网
万维网(World wide web):环球信息网,也称Web。其发明者:蒂姆.伯纳斯.李,是无数个网络站点和网页的集合,在一起构成了因特网最初要的部分。它实际上是多媒体的集合,是由超级链接连接而成的,我们一般在浏览器上上网观看的就是万维网内容。
万维网分为web客户端以及web服务器程序。
统一资源定位器(URL):通过超文本协议(http)获取资源并传送给用户,可通过点击链接虎丘。
万联网、因特网、互联网的相包含关系
互联网包含因特网,因特网包含万维网。
看一下两种架构:
- B/S(browser server):通过浏览器来与网路服务器交互获取资源。
- C/S(client server):通过桌面客户端与服务器进行交互。
五、windows下的常用命令
dir
:查看当前下的目录。
md 名称
:创建文件夹 (make direction)。
cd 目录
:进入指定目录,若是当前盘符是C盘,想要进到D盘的某个文件中,首先输入如D:
进入到d盘了之后再cd d盘路径
。
cd..
:返回上一层目录。
cd/
:直接回到最初盘符位置如:D:\。
echo 内容>1.doc
:创建1.doc在当前目录下将内容写到1.doc中。
del 1.doc
:删除当前目录下的1.doc。
del *.txt
:删除以txt结尾的文件。
rd 文件名
删除空的文件目录。
如何删除不为空的文件?
- 首先使用
del 文件名
,输入Y,此时就清空了该文件,然后在使用rd 文件名
,删除文件夹。
六、各类语言及应用
第一代:机器语言
第二代:汇编语言 使用助记符来表示
第三代:高级语言
面向过程/对象的语言:
- c,Pascal,Fortran 面向过程
- c++ 面向过程,面向对象
- java 跨平台的纯面向对象的语言
- .NET跨语言平台
- Python,Scala … 面向对象
应用方向:
- 底层linux内核,libray部分c语言(开发效率不高,但是运行快),框架使用java语言
- Javascript是解释语言(前端)与python都是轻型语言,
- Java主要霸占web开发
- Objective-C 开发苹果的语言
- MATLAB 用于做图表的
效率排行:c/c++<java<python
七、各种进制数
四个进制介绍
计算机中包含二进制、八进制、十进制以及十六进制
二进制(binary):0-1,满2进1,以0b或者0B开头,例如:0b110
,表示数字6。 (4+2)
八进制(octal):0-7,满8进1,以数字0开头表示,例如061
,表示数字49。(6*8+1)
十进制(decimal):0-9,满10进1,与我们的日常生活相关联,如1,20,30。
十六进制(hex):0-9及A-F,满16进1,以0x或0X开头表示,例如:0x21
,表示33。(2*16+1)
- A-F表示数字10-15,由于是16进1,所以字母只表示到F。注意:A-F不区分大小写,a与A在十六进制中表示相同含义,例如:
0xbA
,表示为186。(11*16+10)
扩展:上面只是列举了常用的进制数,还有三进制,四进制,七进制等等,规则也与上面相同,三进制就是逢三进一,四进制就是逢四进一,只不过这些进制在生活中不太实际用得到。
原码、反码、补码
二进制、机器数
在计算机中使用二进制来表示的数就叫做这个数的机器数,计算机底层就是使用的机器数。
机器数:机器数是带符号的,使用二进制表示,如何区分是正数还是负数呢?通过在最高位存放符号,若这个数是正数,最高位为0;若是负数,最高位为1。
首先我们使用8位二进制表示一个十进制数,例如:十进制正数10转为二进制数为00001010
,十进制负数-10转为二进制数则为10001010
。他们的最高符号位使用0、1表示正负数。
接下来介绍一下原码、反码、补码,正数与负数对于这三个码的规则都不相同。
- 正数:原码、反码、补码都相同
- 负数:原码就是本身;反码就是在原码基础上最高位不变,其余位都取反;补码就是在反码基础上加1。、
此时我们会发出疑问,为什么会存在反码,补码呢,我们使用原码不就可以计算了嘛?在计算机底层若是使用原码计算会导致最后结果有问题,因为其考虑数字本身还需要考虑符号位参与运算。
转换问题:
- 负数的原码转补码:除最高位取反,加1
- 负数的补码转原码:除最高位取反,加1
- 负数的反码转补码:末位加1
- 负数的补码转反码:末位减一
- 负数的原码转反码:除最高位取反
- 负数的反码转原码:除最高位取反
重要说明:计算机底层是使用补码形式来存储数据的。
实际举例,通过使用8位字长来举例
若是通过符号位运算的话,那么机器就只有加法而没有减法了,这样使得计算机运算设计更加简单。我们来看下面例子:
①此时阶段没有出现反码,只有原码情况下:
1-1=1+(-1)=[00000001]原+[10000001]原=[10000010]原=-2
原码相加后此时就会出现问题了,最后结果为-2。这显然是不对的,紧接着出现了反码。
②解决原码做减法的问题此时出现了反码,情况如下:
1-1=1+(-1)=[00000001]原+[10000001]原=[00000001]反+[11111110]反
=[11111111]反=[10000000]原=-0
结果真值正确,但是其符号位却有问题,从人的眼光来看+0与-0不都一样嘛,若是机器码中0包含符号就会有两个编码如:[00000000]原与[0000000]原。针对于这样的问题出现了补码。
③解决符号问题以及0的两个编码问题出现了补码,情况如下:
1-1=1+(-1)=[00000001]原+[10000001]原=[00000001]反+[11111110]反=[00000001]补+[11111111]补
=[100000000]补=[00000000]补=[00000000]原=0 //注意前面带有1的不在计算机的字长中,正数的补码就是原码,则最终结果为0
最终省去不在计算机字长的1,结果为0,解决了以前使用反码计算得到-0的结果。
上面列举了出现反码与补码的原因,解决了符号问题与0的编码问题,以及最终通过补码做加法运算成功取值到了0。之前在上面说了在计算机底层是使用补码来存储数据的。
- 0在计算机底层通过补码表示:
[00000000]补
那么对于8位字长的二进制,正数的话最大也就只有127,[0111111]原,又正数的原码转补码不变,还是[01111111]补,结果为127。
接着我们探讨负数最小会是多少,在这里先明确说最小负数使用补码表示是-128,怎么算的呢?如下:
-1-127=(-1)+(-127)=[10000001]原+[1111111]原=[11111111]补+[10000001]补=[1000000]补
按常理来说-1-127=-128,这里通过补码计算得到[10000000]补,这不是-0吗,实际上就是使用以前的-0,[10000000]补来表示-128。并且需要说明的是这个特殊补码表示的的-128并没有原码与反码。
总结:8位的原码、反码、补码取值范围
- 原码:[-127,127]
- 反码:[-127,127]
- 补码:[-128,127] 包含一个最小值。
八、职业发展
博客园文章(别人写的笔记可以看一下):《程序员跳槽全攻略》读书笔记
若是我们的目标是CTO(Chief Technology Officer,首席技术执行官),发展路线大致是这样:应届生----->初级程序员----->小组主管----->部门经理----->总监----->CTO。
挣钱的四种形式:帮别人挣钱(打工);为自己挣钱( SOHO);雇比人挣钱(企业主);让钱自己挣钱(投资)
互联网公司的职业发展图如下:
参考资料
[1]. 正负数的源码、反码、补码相互转换
[2]. 原码、反码、补码 详解!不懂的请看过来!
[3]. 尚硅谷_Java零基础教程(宋红康主讲)
- 点赞
- 收藏
- 关注作者
评论(0)