前言

      去年四月份大一下半学期正式开始学习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);雇比人挣钱(企业主);让钱自己挣钱(投资)

互联网公司的职业发展图如下

0、计算机相关知识了解_反码


我是长路,感谢你的阅读,如有问题请指出,我会听取建议并进行修正。
欢迎关注我的公众号:长路Java,其中会包含软件安装等其他一些资料,包含一些视频教程以及学习路径分享。