你1、基于JDK 1.8进行开发,可以边开发边学习JDK 1.7的新特性。1.6是JDK很稳定的版本,讲JDK1.8是因为现在的技术体系在下一个版本会发生一个变化,如果再不学习一些新的特性你会发现要学的东西越来越多,以后就追不上去,所以是基于JDK 1.8进行学习,它是基于JDK 1.6和 1.7加了一些新的特性,不是完全的推翻之前的,只是在原来的基础之上进行了一些新的改进。
2、java历史-很干,可以选择不看
android:android运行于Linux的服务器基础之上,但是它的API依托于java的虚拟机,所以说android它编写的时候是java,但是运行的时候是基于安装在手机Linux上的虚拟机,它只是在安卓操作系统里面那个你运行的手机端的Linux里面内置了一个这样的虚拟机。手机里面肯定会安装一个Linux版的虚拟机在里面,只是肯定有点不一样,肯定改进了谷歌公司。
3、语言
学习编程的时候不要求多,学任何一个语言都行,新学一个,另外的了解,可以入个门,这样你不可能走到终点,走到最后,接触的都是些皮毛。
如果没有语言基础,一开始新不要学C语言,它里面主要讲的是数据结构和指针的一些概念,更加的偏向底层,C++的底层就接近于C了,可能学几个月也上不了项目,等以后用到的时候也忘差不多了;如果是开发一个新的语言,C语言的学习是必须的,还要学一些硬件、内存、还要对操作系统有一些了解。
语言是什么?是用来沟通的,语言是双方的,人和人之间的沟通是因为人有了认知,大脑里面存储了大量的知识,通过知识去组织你的话语,你就可以进行沟通。编程语言就是讲我们现实生活中的东西进行抽象化了,我们编程语言,如果计算机要实现人与人之间的沟通的话,那么它必须符合几点条件,第一:数据要找地方存储起来,第二:必须有计算能力,说白了语言就是人机交互的手段而已,根据语言的规则计算机就可以帮你执行掉。存储起来,存哪里?计算机里面会有CPU、内存条、磁盘。编程就是人机交互的过程,这些东西怎么进行运作和原理。在电脑里面的计算都是CPU,只有CPU才有计算的能力,它是核心的核心,相当于大脑,任何的指令都是CPU棒我们计算的,它怎么计算的?每个电脑里面应用太多了,可能要打开QQ又要打开word文档等等,它的CPU怎么进行运作的,它肯定找了个东西做了缓冲,在早期是那样内存的概念的,用过软盘的知道,以前的数据都是安装在磁盘里面,你打开都是从磁盘里面进行打开,CPU从IO进行读取的时候都是跟磁盘打交道的,但是有个问题IO瓶颈太严重了,打开非常的慢,会卡顿,IO寻道的时候就会产生很大的延迟和你的电脑根本承受不住,后面有一种东西叫着软区,就是软盘,插个软盘进去,你把那些应用放在哪里就超快,后来随着软区的流行,就出现了内存条,64兆、128、256的内存啊。后面就出现了内存的概念,内存就会有一些寄存器,就会把这些东西缓存到内存里面,为什么要缓存在内存里面?内存里面又开始分一个东西,叫着进程,但是内存肯定是个多线程,内存里面肯定有个寄存器去寄存数据,寄存器里面有很多的进程,进程是干什么的?每个应用它都会对应一个进程,进程肯定是一个可执行的文件(exe),接下来就会把它打包成一个可执行的文件,安装在我们的内存里面,让它在哪里运行着,为什么会一定是一个进程,因为进程是独立的,数据存储的空间,就是说白了,我开一个进程接下来就会产生一个内存区域,这个内存区域内的所有东西都在这个进程里面进行执行,它们之间是互不干扰互补牵制的,那么内存的产生同时可以缓解CPU的计算压力,没有内存会爆掉,就像人又想喝咖啡又想看书又想去睡觉,你说如果没有进程没有内存是什么概念尼,一个人想做很多的事情就相当于多线程,CPU就相当于这个人,CPU要处理这种多任务的方式,如果把这些东西一次性直接塞进去,是不可能做得了的,CPU里面的东西就那么一点点,CPU会执行不了的,一次给这么多的任务,到时候电脑直接蓝屏,CPU肯定堵死在那了,就是进程阻塞,电脑很可能蓝屏或者重启,现在很好解决蓝屏,蓝屏要不就是你的内存里的东西CPU出现紊乱了,计算不过来,大脑卡死在那里了,给的任务太多堵死在那里,内存的东西是很复杂的,有了内存的东西,就会有多线程的监控,它会帮你检测哪些应用是闲置的,哪些是正在运行中的,正在运行中的会多给你一些内存,它会有这样一些机制在里面,它会有一些内存回收和分配在里面,在内存里面全帮你做掉了,那么CPU拿到内存中的东西就是稳定的运行掉,当然里面有一些算法,像堆栈。java也是一个可执行的应用程序,它里面也会产生一个exe文件,产生一个进程在里面,进程里面的东西都是一个独立的内存空间区域,它有自己的一个维护的东西,也就是你打开一个PHP的应用和一个java的应用,它在电脑里面都不会影响的,两个应用互不影响,但是CPU也就是大脑只有一个,现在CPU的计算速度是非常快的,可能一个应用是0.000几微秒就会执行掉,具体和CPU本身有关。
内存?硬盘?磁盘?内存和硬盘都有读取数据和记录数据的能力,但是内存的东西它响应的速度是非常快的,内存它有一个致命的缺点,它是临时的,如果把电脑重启或者关闭了,那么内存的东西会全部的丢失,比如打开QQ,你电脑关机之后再次打开QQ要重新登录一样,磁盘里的东西是永久存储的,只要在你电脑不坏的情况下都是永久存储在那里面的。数据库是属于磁盘性的东西,保存的每一条数据都存储到磁盘里面某一个文件里面,只是它的文件比较的特殊进行了一些加密和压缩一些算法,非常的优化,查找起来更方便更快速,如果数据库的数据不存在磁盘里面难道下次出现服务器爆掉了,难道你的数据全都丢失?或者重启了里面的数据丢失了,这是灾难性的。这就是为什么一定要学数据库,数据库中的数据都是存在磁盘里面的。当然可以对数据加索引存到内存,后面会遇到,它为了响应查询速度更快,会把一些数据存到内存中去,所以要学索引。
所有的语言,java、PHP等等它们都属于内存型语言,只要你把电脑关了,你的应用就关了。你的那些东西就会全部的丢了,但是通过语言进行磁盘操作就必须通过一个东西,所有语言都提供的和磁盘打交道的操作-IO,可以通过这样语言直接去删磁盘的文件,javascript没有但是它现在通过nodejs去弥补了,java有PHP肯定有,Ruby肯定也有操作磁盘的东西的,通过语言去进行操作,这些操作都是CPU去控制的,CPU去帮我们去执行,比如java调用命令去写文件,CPU立马做相应,它是IO进行读写。
下面以java为例:
java是内存型语言(只要你把电脑关了那么你的应用就关了,那些东西全部丢了),内存是不是有极限,内存既然有大小那么内存就有极限,理解了这些原理下面学习负载均衡就会很清楚也很有方向感,接下来学负载均衡,那大数据的数据集群服务器集群等等,你就很清楚你要怎么做,要有方向性,内存有极限8G、6G,不说内存有极限磁盘也有极限,你的硬盘1T你最多存1T的东西,存完了之后尼,你就开始加硬盘,我们处理应用越来越大的时候,举个例子,既然内存是有大小的,所以会学一个东西叫着字节,1MB=1024KB,1KB=1024B,1B(字节)=8位,和网速有关系已开始学习的时候,不知道和磁盘和内存有什么关系,位就是很多的格子,内存既然有大小,是不是会把内存的8G都给java,肯定不会的,因为电脑里面除了java这个应用还有很多其它的应用需要去打开,所有的语言都有一个内存大小的划分,在所有的语言它都会设定它内存的上限,到了这个设定的上限之后它就会出现警告或者内存溢出,不可能全部给你,因为每个语言它会核算一个数量,根据这个极限来核实到底多大的数值,语言它都是规定了的,不是我们来规定的,但是我们可以改变它这个是可以的,这就是我们开发应用的时候突然内存溢出是什么原因,是因为已经超出了JDK里面虚拟机设定我们内存的上限,它就会出现内存溢出。磁盘你的MYSQL和Oracle一样会出现磁盘溢出的,磁盘溢出,就是磁盘IO什么什么space,说明磁盘满了,超出了磁盘的存储能力,接下来要赶紧的加磁盘,或者做数据库的集群,这是接下来要做的事情。
java是内存型语言,java给我们的内存到底瓜分了多少尼,现在已经瓜分了64MB,在JDK1.6里面是64MB,不知道JDK1.7和JDK1.8中到底提升了没有,这个东西是可以改变的,提升到128,说白了就是内存中给java128,上线最大128,这个很重要,未来一定会出现内存溢出的,除非只写一个helloworld的程序,那肯定不会出现内存溢出,当然是可以调整,调整也是根据你的电脑去进行调整,不可能说调个1280,这是不可能的,这是不可以的,这种调配是根据电脑的配置和这些东西有关系,不是随便给一个数字就可以的。既然有大小,那么它里面是怎样去写入的,以什么样的形态去写入的,既然是语言,那么计算机最终都会转换成计算机代码,也就是我们的bit代码(二进制代码)。在编码的过程中java是一种给予编译和运行的一门语言,它写代码和运行代码是进行分离的,说白了,就是编写代码的过程和运行代码的过程它是进行分离的,它最终会帮我们转换成机器码,也就是0、1代码(不只是java语言,适用于所有的语言),这就是为什么在学java里面要去学二进制转换,无需深入了解就可以了,这就是为什么一定要了解二进制是什么原因,因为要了解内部的存储结构是什么样子。我们的语言接收到我们的解析器,java有java的解析器、虚拟机,根据它的语意去写代码的时候它会去编译,在解析阶段就会把它变成我们的0、1代码进行存储,存储在java的内存区域里面也就是java的虚拟机,我们写的任何代码都会把它放在java的虚拟机里面进行运行,当放到这个内存区域之后它是运行着的,因为它放在内存里面的,当读到这个内存区域的时候,它会发指令,java这个可执行程序它会给我们的CPU发送指令,java JDK里面有个指令器,它会不断的给CPU去发送指令,这里有东西要执行了你(CPU)赶紧过来执行,java虚拟机不断的给CPU发送指令,就像有蛋糕了,告诉CPU你赶紧过来吃,CPU把执行的结果返回给java的指令器,赶紧去执行,执行之后就会改变这个内存区域的状态,CPU是很忙的,一直在工作。所以在开发里面要知道什么是二进制,内存区域是怎么去存储的,