Java / 计算机基础知识整理

在进行知识梳理同时也是个人的第一篇技术博客之前,首先祝贺一下,经历了一年左右的学习,从完完全全的计算机小白,现在终于可以做一些产出了!可以说也是颇为感慨,个人认为,学习本身就应该是有方法论的,前人总结了不少比较好的学习方法(比如说费曼学习法,金字塔原理),我们在进行好方法借鉴的同时,也不要忘了让整个学习过程形成一个闭环,我认为,向他人教学,或是定期将已有的知识进行一些梳理,总结,就是闭环的一种,这种方式在向他人传授知识的同时,更是对自己已有知识体系的一次查漏补缺。好了,废话不多说了,开始我们的行程了吧,第一次以这种方式进行分享,势必还有很多不够完善之处,我自己也会坚持博客的撰写,希望能够越写越好,技术进步的同时,也锻炼自己的文笔!(仪式感还是需要滴)

实际上,对于大数据技术本人已有一些应用场景了,特此开了自己的博客,将以往的知识点进行梳理:

   

1. Java发展历史及其语言概述

1946年2月,美国数学家冯 诺伊曼研发出了世界上第一台计算机,ENIAC,而这也标志着人类科技发展史上的一座伟大里程碑。不同于自然语言,计算机并听不懂人类所说的话,因此,计算机语言诞生了,计算机语言的发展史经历了机器码到汇编语言再到高级语言三个阶段,第一代的机器码完全就是01代码,而汇编语言则出现了一些简单的英文单词,第三代的高级语言更接近于人类语言,因此容易理解、记忆,Java就是其中一种高级语言。

1995年,SUN(Stanford University Network)公司推出了java这门高级语言,它并不是一开始就是非常热门的,直到Web端,当其他语言都只能做出静态页面的效果时,唯独java可以做出动态效果,从此,java大放异彩。

2009年,业界的科技巨头甲骨文(Oracle)以74亿美元收购了SUN公司,当然也包括java。

目前,java已成为Web应用程序的首选开发程序,同时也是Hadoop等大数据开源框架的首选开发语言,具有面向对象,完全可靠以及与平台无关等的特点

既然说到了Web,那就有必要提一提何为B/S,B/S是browser/server的缩写,简单理解就是用户在客户机上安装一个浏览器,在浏览器中输入网址,就连接到了服务器上,也就是数据库了,这样的架构好处在于,用户发送请求给服务器,绝大部分的业务逻辑放在了服务器端实现,而只有极少一部分逻辑放在前端实现,这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量。

Java语言的三种技术架构:

1. Java EE(Enterprise Edition):是为企业环境下应用程序的解决方案,主要针对web应用程序开发

2. Java SE(Standard Edition):是为开发普通桌面和商业应用程序提供的解决方案,可完成桌面应用程序的开发

3. Java ME(Micro Edition):为开发电子消费产品和嵌入式设备提供的解决方案,是安卓(Android)的前身

java 5.0(也可以称之为jdk1.5)之前,旧称为J2EE,J2SE,J2ME

java语言的跨平台性:

JVM : java virtual machine, java虚拟机,可以在不同的操作系统上运行

明确JDK和JRE分别是什么:

jdk: java development kit

jre: java runtime environment

jre包含于jdk,jdk包含了java运行环境以及java开发工具,如果是客户端仅仅需要运行一个java程序,那jre足够了,而对于开发人员来说,既需要开发又需要运行,那么光有jre就不行了,必须要有jdk,其中开发工具指的是javac.exe以及jar.exe等

2. Java软件包详解

a. bin: binary,java的二进制文件,在windows中就是指可执行文件,往往以.exe结尾,在之后的学习中一直需要用到的配置环境变量都会接触到这个文件夹

这里稍微提一下dll文件,可以发现也出现在了JAVA_HOME\bin目录下,dll指的是本身并不能单独执行,跟API类似,必须要被其他程序所调用才能执行

b. db: 软件自带的一些重要数据加密

c. include: 这个文件夹通常是指用C语言写的一些头文件

d. jre: java runtime environment,是jdk自带的运行环境

e. lib: 第三方的API库,此文件夹也会在之后的学习中经常遇到,(编程遇到的坑之一:出现报错时需要考虑是否是因为没有导第三方jar包)

f. src.zip: 包含所有java的源代码

3. 计算机中负数的表示形式及规律

在复习这个话题前,先介绍以下几个概念:

符号位:存储空间的第一个bit

数值位:存储空间除符号位以外的其他位

负数的原码:把对应的正数的符号位变为1,而其他位不变,举例:求-10的原码,先求的-10对应的正数的二进制表示形式为0000 1010,则其负数的原码就为1000 1010

负数的反码:在原码的基础上,数值全部取反,即为1111 0101

负数的补码:在反码基础上再加上1,即为1111 0110

规律总结:求一个负数的二进制位的简便方法,先写出这个负数对应正数的二进制位,然后从右往左,遇到第一个不是0的把它的右侧全部保留,而左侧全部取反

byte类型所能表示的十进制数的范围推导:

1. 求出byte中的最大正数:0111 1111,转换为十进制数为127

2. 使用上述总结的规律求出-127的二进制数为:1000 0001

3. 将这个数再减一,即可得到负数的最小值为1000 0000,十进制数则为-127-1 = -128

4. 值得注意的是,将127的二进制数加上一也能变成1000 0000,因此可得,在计算机中127 + 1 = -128

4. 位运算符 以及 或与非运算符

位运算符分为两种,左移以及右移,计算原理如下图所示,以左移7为例:计算  7 << 2 :

将7的二进制形式左移两位,那么最左侧的两个0就被移了出去,而最右侧用0填充,这样一来,每一个数现在都变成了原来的2^2倍,因此7 <<  2 = 7 * 2 ^ 2 => m << n = m * 2 ^ n

但是,右移的情况则有所不同,由于被移出的是最右侧的数字,那就会涉及到一个问题,左侧的符号位应该一律使用0来填充,还是用原来的符号位填充,于是引出了个概念,即有符号右移及无符号右移,有符号右移,>>,无论移动多少位,空缺的位永远用符号位进行填充,而无符号右移,>>>,则是将空缺的位一律使用0来填充

对于正数来说,有符号右移和无符号右移应该是完全一样的,因为不管哪种情况,都会使用0来填充,但是对于负数,则不一样了,如果是有符号右移,移动后仍然为负数,而如果是无符号右移,因为使用0来填充,因此负数会被移动成正数,典型例子,-1有符号右移无论多少位都是-1不变,而无符号右移则会变成整数的最大值 Integer.MAX_VALUE

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

按位与运算符 / 按位或运算符 / 按位取反运算符 / 异或运算符  (& / | / ^ / ~)

不同于逻辑的或与非运算符,按位的操作是将两个二进制数的每一位取出来各自进行或与非操作,得到的新值则为操作结果

异或操作有一个特性,那就是将将一个数与另一个数异或两次,最终得到的还是原来的数,使用这个原理可以用来做简单加密,代码如下

public class BitDemo{
public static void main(String[] args){
//对数据简单加密
int x = 9527;
int key = 123;
x = x ^ key;
System.out.println(x);
//
System.out.println(x ^ key);
}
}

交换两个数的三种实现方式:

public class Exchange {
public static void Exchange(int a, int b){
//普通方式交换两个数
int temp = a;
b = a;
a = temp;
//不使用第三方变量
a = a + b;
b = a - b;
a = a - b;
//使用异或
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
}

5. Java中方法调用过程详解:

6. Java中创建对象时的内存图详解:

1. 程序运行时,首先将本例中出现的两个类LaptopDemo以及Laptop的已经编译好了的class文件加载进方法区,其中Laptop.class有brand,price以及size三个成员变量,以及playMusic和playMovie两个成员方法,而LaptopDemo由于主要功能是测试类,无成员变量,只有一个成员方法main方法

2. 程序调用main函数时首先压入栈中

3. 执行语句Laptop laptop = new Laptop();时,由于赋值语句是从右往左执行的,因此首先在堆中新开辟了一片内存区域,该内存区域中有三个成员变量,它们都赋上了默认值,以及成员方法在堆中的一个内存地址值,然后程序查看在Laptop类中有没有显示的赋值,在此例中,成员变量brand被赋上了2000的值,然后进行构造方法的初始化,如果不是空参构造,将再次对成员变量进行赋值,最后这个内存空间也有一个内存地址值,这个值保存在了栈中,并赋给了变量laptop

4. 执行laptop.brand = "DELL"等三句语句时,在堆中已有的三个成员变量的值再次发生了改变,并在之后的打印语句中被打印了出来

5. 执行语句laptop.playMusic()以及laptop.playMovie()方法时,程序先在堆中找到方法区方法的地址值,再根据地址值找到方法区的方法,然后调用该方法压入栈中,当方法结束后,所有局部变量立即释放,然后弹栈

6. 执行语句Laptop book2 = new Laptop();时,堆中又新开辟了一块区域并将成员变量赋上了默认值,后续的流程则与之前相同

7. main函数中所有的语句执行完毕后,main方法弹栈,所有程序宣告执行完毕

大数据学习笔记——Java篇之基础知识的更多相关文章

  1. 大数据学习笔记——Java篇之网络编程基础

    Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...

  2. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  3. 大数据学习笔记——Java篇之IO

    IO学习笔记整理 1. File类 1.1 File对象的三种创建方式: File对象是一个抽象的概念,只有被创建出来之后,文件或文件夹才会真正存在 注意:File对象想要创建成功,它的目录必须存在! ...

  4. 大数据学习笔记——Linux完整部署篇(实操部分)

    Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...

  5. 大数据学习笔记——Hadoop编程实战之HDFS

    HDFS基本API的应用(包含IDEA的基本设置) 在上一篇博客中,本人详细地整理了如何从0搭建一个HA模式下的分布式Hadoop平台,那么,在上一篇的基础上,我们终于可以进行编程实操了,同样,在编程 ...

  6. 大数据学习笔记之Hadoop(一):Hadoop入门

    文章目录 大数据概论 一.大数据概念 二.大数据的特点 三.大数据能干啥? 四.大数据发展前景 五.企业数据部的业务流程分析 六.企业数据部的一般组织结构 Hadoop(入门) 一 从Hadoop框架 ...

  7. 大数据学习笔记——Linux基本知识及指令(理论部分)

    Linux学习笔记整理 上一篇博客中,我们详细地整理了如何从0部署一套Linux操作系统,那么这一篇就承接上篇文章,我们仔细地把Linux的一些基础知识以及常用指令(包括一小部分高级命令)做一个梳理, ...

  8. 大数据学习笔记——Hadoop编程之SequenceFile

    SequenceFile(Hadoop序列文件)基础知识与应用 上篇编程实战系列中本人介绍了基本的使用HDFS进行文件读写的方法,这一篇将承接上篇重点整理一下SequenceFile的相关知识及应用 ...

  9. 大数据学习笔记之Hadoop(三):MapReduce&YARN

    文章目录 一 MapReduce概念 1.1 为什么要MapReduce 1.2 MapReduce核心思想 1.3 MapReduce进程 1.4 MapReduce编程规范(八股文) 1.5 Ma ...

随机推荐

  1. HTML 颜色输入框修改事件的触发,以及获取修改后的颜色

    HTML 颜色输入框修改事件的触发,以及获取修改后的颜色 <!DOCTYPE html> <html lang="en"> <head> < ...

  2. 领扣(LeetCode)删除链表的倒数第N个节点 个人题解

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  3. 并行模式之Guarded Suspension模式

    并行模式之Guarded Suspension模式 一).Guarded Suspension: 保护暂存模式 应用场景:当多个客户进程去请求服务进程时,客户进程的请求速度比服务进程处里请求的速度快, ...

  4. c# 发送邮箱,企业邮箱测试成功

    今天在项目中需要实现一个发送邮箱的功能,来实现用户邮箱激活功能!!! 之前采用的是个人的邮箱进行测试,一切都是很顺利的,后来换成了公司的企业邮箱,遇到了一点小问题,问题如下: 发送邮件失败,原因:命令 ...

  5. 编译k8s1.11 kube-apiserver源码

    说明 修改k8s1.11 kube-apiserver源码并构建成镜像,最终替换运行在集群中的kube-apiserver pod来验证本次源码修改 参看链接:https://xinchen.blog ...

  6. PostGIS 存储过程返回类型

    Postgresql存储过程返回值的方式有很多,在此先只记录一下自己用到过的,慢慢拓展 1.type型,这里geometry可以是任何postgresql支持的类型(integer/text/char ...

  7. Nmap强大在哪之主机发现

    1.概述 博主前段时间刚入坑渗透测试,随着学习的深入,越来越发现Nmap简直无所不能.今天先从主机发现功能入手分析. 2.Nmap主机发现 nmap --help #nmap帮助 3.参数分析 3.1 ...

  8. NN入门,手把手教你用Numpy手撕NN(三)

    NN入门,手把手教你用Numpy手撕NN(3) 这是一篇包含极少数学的CNN入门文章 上篇文章中简单介绍了NN的反向传播,并利用反向传播实现了一个简单的NN,在这篇文章中将介绍一下CNN. CNN C ...

  9. java this,super简单理解

    *****this****** 表示对当前对象的引用. 作用:1.区分实例变量和局部变量(this.name----->实例变量name) 2.将当前对象当做参数传递给其它对象和方法.利用thi ...

  10. Scala: Case classes

    Case classes are like regular classes with a few key differences which we will go over. Case classes ...