大数据学习笔记――Java篇

匿名 (未验证) 提交于 2019-12-02 21:52:03

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. 位运算符 以及 或与非运算符

但是,右移的情况则有所不同,由于被移出的是最右侧的数字,那就会涉及到一个问题,左侧的符号位应该一律使用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);              } }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!