阿里Java面试题前200页和答案

有兴趣可以加入我QQ 981713155
1.关键字transient
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

InnoDB
InnoDB在MySQL 5.5后成为默认索引,它的特点是:
支持行锁,采用MVCC来支持高并发
支持事务
支持外键
支持崩溃后的安全恢复
不支持全文索引

重写和重载
(1)重写:需要继承;方法吗和参数、返回值必须相同,权限修饰符必须大于等于父类;不可以重写父类的private方法;不可以抛出父类没有抛出的异常;
(2)重载:方法名必须相同;参数个数、类型有一个不相同;返回值可以相同也可以不同;可以有不同的访问修饰符;可以抛出不同异常。

Get和post区别。
(1)get用于获取数据,而且应该是安全的和幂等的。post用于提交数据。(多用于新建)。
(2)GET请求的数据会附在URL之后,最多只能是1024字节;POST把提交的数据则放置在是HTTP包的包体中,理论上数据大小没有限制。
(3)POST的安全性要比GET的安全性高

Http协议相关。
HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
HTTP/1.0不支持连接保持,所以后来HTTP/1.1增加了Connection:keep-alive以及管道,管道机制则是允许浏览器同时发出A请求和B请求,但是服务器还是按照顺序。
HTTP/2.0是一个彻底的二进制协议;实现双向的、实时的通信(多工),避免了队头阻塞;用ID来区分数据流,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数;可以取消数据流;客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应;引入了头信息压缩机制和信息表;允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送;

Java有没有多继承,接口和抽象类区别。jvm 理解
接口可以多继承,类不可以。
(1)抽象类是由abstract关键字修饰,允许包含未实现的方法。
接口是方法声明和常量值定义的集合,不允许包含变量。
(2)接口是绝对抽象的,不可以被实例化。抽象类不能被实例化。
(3)定义接口时可以使用继承,而且可以使用多继承。抽象类只能单继承。类可以实现很多个接口,但是只能继承一个抽象类;
(4)接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
(5)Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
public是在不同包中也可以访问;protected是必须在同一个包中或者子类才能访问;default是不允许子类访问,可以在类内部或者同一个包中访问;private是只能在类内部访问。

JDK和JRE的区别是什么?
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK) 是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程 序。
JDK中包含JRE,JRE中包含JVM。
JDK中包含的JRE主要是为JDK自带的开发工具提供运行环境,与JDK并列的那个JRE是为用户编写的JAVA代码提供运行环境的。
classpath配置的是JDK的lib目录,path配置的是JDK的bin目录。

数据库四个范式的区别。在设计数据库的时候如何考量。
第一范式(1NF)属性不可拆分 或 无重复的列(保证列唯一)
第二范式(2NF)要求实体的属性完全依赖于主关键字。存在一个列被定义为唯一主键的表就是第二范式。(保证行唯一)
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。(外键关系)
第四范式(4NF)禁止主键列和非主键列一对多关系不受约束用复合列做主键的表。

1.如何停止运行一个线程
interrupt

2.如何实现一个hashmap,需要考虑哪些问题
hashcode

3.equal和==的区别
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
String s2 = new String(“Monday”).intern();会放入缓冲池。

5.为什么四次挥手比三次握手多一次
因为三次握手是要建立和确认客户端和服务器之间的通信线路;而四次挥手是为了关闭两方之间的数据传递,因为是双工的,所以被动方和主动方两个流向都需要关闭和确认,所以是四次。

猜你喜欢

转载自blog.csdn.net/qq_37140828/article/details/85259796