java 理论知识随记

理论知识整理(比较杂)

1、Linux命令:
pwd:用于显示当前工作目录
ls:用于查看当前工作目录内容
cd:用于改变当前工作目录
ps -ef|grep java/tomcat :查看tomcat是否启动或关闭
tail -f -n 1000 catalina.out :查看日志

2、Java虚拟机:平台无关的编程语言
Java虚拟机是一个可以执行Java字节码的虚拟机进程。
Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台。

3、JDK、JRE、JVM关系
JDK:Java开发工具包,包含编写Java程序所必须的编译运行等开发工具以及JRE。
(工具如:javac命令、Java命令、JAVAdoc、打包jar命令)
JRE:Java运行环境,包含Java虚拟机、类库等。
JVM:Java虚拟机,提供了字节码文件(.class)的运行环境支持。

4、Java支持的数据类型
基本数据类型:
整数值型:byte、short、int、long
字符型:char
浮点类型:float、double
布尔型:boolean

5、引用类型
引用类型声明的变量是指该变量在内存中实现存储的是一个引用地址,实体在堆中
包括String、类、接口、数组、包装类等

6、自动拆装箱
自动装箱和拆箱就是基本类型和引用类型之间的转换。

7、面向对象四大特性
抽象:属性(数据)和操作(行为)
封装:封装可以使类具有独立性和隔离性,保证类的高内聚
继承:类的继承和接口的实现
多态:三要素:继承、重写、父类引用指向子类对象

8、&和&&的区别
&:按位与、逻辑与
&&:短路与(左边false,右边直接短路不进行运算)

9、值传递和引用传递
值传递:对形参修改不影响实参
引用传递:会影响实参
String、Integer、Double等可理解为值传递

10、是否可以在static环境中访问非static变量
不能。
static变量在Java中属于类,在类的实例中,它的值都是一样的。
在类被jvm载入时,静态变量的值就确定了。
非static变量属于实例,要在new一个实例之后,值才存在。
在static环境中访问非static变量,可能这个变量还不存在,会报错。

11、方法覆盖(重写)Overriding和方法重载Overloading
重写:子类重新定义父类方法(重写方法必须与被重写方法具有相同的方法名称、参数、返回类型等)
重载:同一个类中多个方法名相同但是参数(个数、类型)不同,返回类型可相同可不同。

12、Java支持多继承吗?
Java中,类不支持多继承,只支持单继承。
Java中,接口支持多继承。

13、抽象类和接口的区别
抽象是对类的抽象是一种模板设计,接口是行为的抽象是一种行为的规范。
不同点:
1)一个类实现多个接口,只能继承一个抽象类
2)抽象类可以包含具体的方法,接口的所有方法都是抽象的
3)接口的方法都是public,抽象类的方法public、protected、、
4)抽象类可以定义构造函数,接口不能
5)抽象类可以声明和使用字段,接口不能,但接口可以创建静态的fanal常量

13、内存中的栈、堆、方法区
栈:一个基本数据类型的变量,一个对象的引用,使用栈空间
堆:new的对象则放在堆空间
方法区:

14、手写单例模式(饿汉和饱汉模式)和工厂模式

(1)单例饿汉模式://饿汉式单例类.在类初始化时,已经自行实例化

public class Singleton1 { 
		//私有的默认构造子 
		private Singleton1() {} 
		//已经自行实例化 
		private static final Singleton1 single = new Singleton1(); 
		//静态工厂方法 
		public static Singleton1 getInstance() { 
			return single; 
		} 
	}

(2)懒汉模式://懒汉式单例类.在第一次调用的时候实例化

public class Singleton2 { 
		//私有的默认构造子 
		private Singleton2() {} 
		//注意,这里没有final 
		private static Singleton2 single=null; 
		//静态工厂方法 
		public synchronized static Singleton2 getInstance() { 
			if (single == null) { 
				single = new Singleton2(); 
			} 
			return single; 
		} 
	}

(3)工厂模式:

interface IFactory{ 
		public IProduct createProduct();
	} 
	Class Factory implements IFactory{ 
		public IProduct createProduct(){
			return new Product();
		}
	} 
	Public class client{ 
		Public Static void main (String [] args){
			IFactory factory=new Factory(); 
			IProduct product=factory.createProduct(); 
			product.ProductMethod();
		}
	}	

15、String、StringBuilder、StringBuffer
执行速度:StringBuilder > StringBuffer > String
String:字符串常量,适用于少量的字符串操作的情况
StringBuilder:变量,线程不安全,适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:变量,线程安全,适用多线程下在字符缓冲区进行大量操作的情况

一、JVM知识

1、JVM是什么?其执行程序过程?
Java虚拟机(Java virtual machine),java程序运行的容器;
执行程序过程:A、加载.class文件 B、管理和分配内存 C、执行垃圾收集
2、JRE是什么?
Java运行环境,包含JVM的Java程序运行环境
3、jvm四个常用寄存器
Pc程序计数器;
optop操作数栈顶指针;
frame当前执行环境指针;
vars指向当前执行环境第一个局部变量的指针;
4、Jvm两类存储区
常量缓冲区、方法池
5、Jvm机制
类装载子系统:装载合适的类或接口
运行引擎:执行已装载的类或接口的指令
运行时数据区:主要包括:方法区,堆,Java栈,PC寄存器,本地方法栈
6、简述垃圾回收机制
虚拟机空闲或者当前内存不足时,扫描没有被引用的对象,添加到回收集合,进行回收
7、垃圾收集方法
标记-清除;复制算法;标记-整理;分代收集
8、Java类加载机制
从class文件加载到内存,并对数据进行校验、解析和初始化,最终形成Java类型
9、jdk和jre的区别
a)Jdk:Java开发工具包,包括jre、编译器、JavaDoc、Java调试器等工具
b)Jre:Java运行环境,包括jvm和Java程序所需的核心类库
10、拆装箱
装箱:原始类型转换为对象;拆箱:对象转换为基本类型
11、重写和重载
重写:子类重写父类方法,Java面向对象多态性的体现
重载:一个类中,方法名相同但是参数类型或者个数不同,根据参数类型调用对应参数列表的方法

12、值传递和引用传递
a)值传递:实参拷贝给形参,修改形参数值时,不影响原来实参
b)引用传递:实参是把地址传递给形参,修改数值,就是修改实参
13、String、StringBuffer、StringBuild
a)String:长度不可变,速度最慢
b)StringBuffer:长度可变,线程安全
c)StringBuild:长度可变,线程非安全,速度最快
14、Hash Map和Hash Table区别
a)HashMap基于AbstractMap,key和value允许为null,非同步
b)HashTable基于Dictionary,key和value不允许为null,同步
15、Array和ArrayList、LinkedList
a)Array容纳基本数据类型和对象,指定大小
b)ArrayList容纳对象,大小固定,基于数组实现,查找速度快
c)LinkedList基于链表实现,插入和删除时占优势
16、Java面向对象的四大特性
a)封装
b)抽象
c)继承
d)多态

二、Gradle、Spring boot 、Mybatis、Junit、Spock

1、Gradle
Groovy是一种基于Java平台的面向对象语言
Apache Ivy是一个管理项目依赖的工具
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。
它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。
当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

软件开发工程管理:依赖,打包,部署,发布,各种渠道的差异管理
Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署
DSL的全称是Domain Specific Language,即领域特定语言,或者直接翻译成“特定领域的语言”
Ant和Maven都是基于XML的构建工具,Gradle是用Groovy编写的构建工具,
Groovy是JVM衍生的与JAVA语法高度兼容的动态强类型语言。

2、Spring boot
Spring 是一个“引擎”
Spring MVC 是基于 Spring 的一个 MVC 框架
Spring Boot 是基于 Spring4 的条件注册的一套快速开发整合包

3、Mybatis
4、Junit
5、Spock

三、问题整合
1、面向对象特征
抽象、封装、多态、继承
2、Java基本数据类型
byte、short、int、float、long、double、boolean、char
3、运行时异常
算术异常(ArithmeticException)、
类转换异常(ClassCastException)、
非法参数异常(IllegalArgumentException)、
下标越界异常(IndexOutOfBoundException)、
空指针异常

四、项目中问题
1、@Value(staticConstructor = “of”)是什么意思?
如果变量不加@NonFinal ,@Value会给所有的弄成final的。
当然如果是final的话,就没有set方法了。

2、前端跨域问题
浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
前端解决跨域问题:将http请求变成一个简单的请求:只能使用get、post或者head;
后端可以设置Access-Control-XXX请求头来允许某个源对其跨域请求。

3、http(超文本传输协议)和https(安全套接字层超文本传输协议)区别
http协议以明文的方式发送内容,不提供任何方式的数据加密。
https协议加入SSL协议(Secure Sockets Layer),SSL协议依靠证书验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要如下:
  a、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  b、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  c、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  d、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

4、TCP与UDP区别
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP(用户数据报协议)是一种无连接、不可靠的传输层协议。
a、TCP提供的是面向连接的、可靠的数据流传输;
UDP提供的是非面向连接的、不可靠的数据流传输;
b、TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失、不重复、按序到达;
UDP尽最大努力交付,即不保证可靠交付;
c、TCP面向字节流;
UDP面向报文;
d、TCP连接只能是点到点的;
UDP支持一对一、一对多、多对一和多对多的交互通信;
e、TCP的逻辑通信信道是全双工的可靠信道;
UDP的逻辑通信信道是不可靠信道;
5、数据库:drop、truncate、delete三者删除的区别
一:用法和区别
drop:drop table 表名
删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。
truncate (清空表中的数据):truncate table 表名
删除内容、释放空间但不删除定义(也就是保留表的数据结构)。与drop不同的是,只是清空表数据而已。
truncate不能删除行数据,虽然只删除数据,但是比delete彻底,它只删除表数据。
delete:delete from 表名 (where 列名 = 值)
与truncate类似,delete也只删除内容、释放空间但不删除定义;但是delete即可以对行数据进行删除,也可以对整表数据进行删除。
二:注意
1.delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
2.执行速度一般来说:drop>truncate>delete
3.delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
4.truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发trigger。
5.truncate语句执行以后,id标识列还是按顺序排列,保持连续;而delete语句执行后,ID标识列不连续

猜你喜欢

转载自blog.csdn.net/zcxbd/article/details/82662237