欢迎光临散文网 会员登陆 & 注册

培训班学习Java第一天

2023-06-27 23:35 作者:兴趣使然的无名主播  | 我要投稿

测试题讲解之查缺补漏

选择题

一、标识符

标识符例题

标识符的概念:给类、接口、方法变量取名字的字符序列。

组成:大小写字母、数字、_、$、中文。

注意事项:

  1. 不能以数字开头;

  2. 字母区分大小写;

  3. 不能使用除$和_以外的特殊符号。

  4. 不能使用Java关键字

  5. 考虑编码问题,尽量不使用中文

二、重载

重载例题

重载的概念:方法与方法间的关系。

条件:

  1. 在同一个类中;

  2. 方法名相同;

  3. 参数列表的个数或者类型不一致;

  4. 与返回值无关

好处:系统会根据传入的参数自动匹配相应的重载方法。减少写多个函数名的重复步骤。


三、数组初始化

分为静态初始化和动态初始化。

  1. 静态初始化:数据由程序员给定,数组长度由系统自动分配——String[] name = {"张三","李四","王五"};

  2. 动态初始化:数组长度由程序员给定,数据由系统自动分配——String[] names = new String[3];

不同类型的数组内数据初始值:

  1. 整数类型---0;2.浮点类型---0.0;字符类型---‘ ’(空格);布尔类型---false;引用类型---null。

四、位运算

位运算例题

位运算:十进制数据转换为二进制数据,再做运算。

&:同位比较,两者为1,结果才为1;

|:同位比较,两者有1,结果就为1;

^:同位比较,两者相同为0,不同为1;

<<:整体向左移动n位,就用n个0补位;

>>:整体向右移动n位,就用n个最高位(符号位)补位;

>>> :整体向右移动n位,就用n个0补位。

(正数右移'>>',高位用0补,负数右移,高位用1补,当负数使用无符号右移'>>>'时,用0进行部位(负数变为了整数))


五、能供switch使用的数据类型:byte、short、int、char、字符串(JDK1.7)、枚举(JDK1.5)。

例题


六、构造方法的概念:与类名相同且没有返回项的方法;作用:创建对象、初始化数据。

例题

七、final

final例题

final的含义:被称为最终方法

final修饰类:类不能被继承

final修饰方法:方法不能被重写

final修饰变量:常量。


简答题

1.论述面向对象的三大特征及其使用场景?

封装、继承、多态

封装:一般类的属性都必须封装(私有化属性+get/set),保证了属性的安全性

继承:多个类有共同的属性和方法,就抽取出放在父类中,减少代码的冗余,增加了程序的复杂度和可维护性

多态:编写方法,参数尽可能选择接口或者父类类型,提高了程序的可扩展性


2. 多态的优缺点?

优点:提高了程序的可扩展性,不违反OCP原则

缺点:不能使用子类独有的属性和方法(多态主要作用 :调用子类重写父类的方法)


3. 抽象类和接口的区别?

抽象类:单继承,抽象类中可以有属性、构造方法、成员方法、静态方法、抽象方法

接口:多实现,接口中只能有静态常量、抽象方法、静态方法(JDK1.8)、默认方法(JDK1.8)


4. Java类加载机制的步骤?

含义:JVM会将该类的class文件加载到方法区中的过程


什么时候JVM会将该类的class文件加载到方法区中?

1. 第一次创建该类的对象

2. 第一次调用该类的静态方法

3. 第一次获取该类的class对象 -- Class<?> clazz = Class.forName("com.qf.test01.A");


class文件加载几次?

1次

class文件里的内容有什么?

class文件中包含了该类所有的信息,属性、构造方法、成员方法、静态方法、抽象方法...


class对象的作用是什么?

class对象作为class文件的访问入口


加载步骤:

1. 加载(获取类的全限定名生成字节流,读取到方法区中,并在堆中创建该类的class对象)

2. 连接

2.1验证(验证class文件是否合法 - 是否符合class文件规范、语法/数据、符号引用是否正确)

2.2 准备(类变量开辟空间,给类变量赋系统初始值,但是静态常量直接赋值)

2.3 解析(符号引用,转换为直接引用)

3. 初始化(将代码中的静态值赋值给静态变量)

 

5. Switch的表达式类型,底层原理?

表达式类型:byteshort、int、char、枚举(JDK1.5)、字符串(JDK1.7)

底层原理:

byte、short自动向上转型成int

char获取对应的Unicode码

枚举获取的是对象编号

字符串获取的hash码+equals

总结:表达式的类型最终都会转换为int,去做识别


6. 内部类分类及区别?

成员内部类:内部类可以调动外部类所有的属性

静态内部类:内部类只能调用外部类的静态属性

接口内部类:相当于静态内部类

局部内部类:方法中声明的类,可以调用外部类的方法中的局部变量,局部变量自动使用final修饰(JDK1.8)

匿名内部类:抽象类子类的对象或接口实现类的对象只使用一次,就使用匿名内部类去替代


7. ArrayList与Vector的区别?

ArrayList:线程不安全,扩容机制(原来的1.5倍)

Vector:线程安全,扩容机制(判断容量增量,如果容量增量为0,原来长度的2倍;如果容量增量不为0,原来长度+容量增量)


8. LinkedList删除元素的过程

1. 判断元素是否为空,如果为空,判断条件使用元素==null,如果不为空,判断条件使用equals,直到找到该元素或者遍历到最后一个元素

2. 加入A、B、C三个节点,删除的是B节点,通过B节点找到A节点,将A节点下一个位置指向C节点,通过B节点找到C节点,将C节点上一个位置指向A节点 -- 断链


9. 什么叫做Hash碰撞

多个元素的hash值一样造成Hash碰撞(将数据存入到HashMap或者ConcurrentHashMap,一般会重写Key元素所属类的hashCode()和equals(),从而降低Hash碰撞,因为hash碰撞会损耗性能,因为HashMap或ConcurrentHashMap的数据结构为一维数组+单向链表,数据直接存在数组中的效率胜过存在单向链表中)

 

10. JDK1.7 和 1.8下HashMap的区别?

HashMap - JDK1.7:一维数组+单向链表,头插法

HashMap - JDK1.8:一维数组+单向链表+红黑树,尾插法,计算hash值高16位^低16位

JDK1.8的HashMap什么时候做到一维数组+单向链表 和 一维数组 + 红黑树的转换?

一维数组+单向链表 --> 一维数组 + 红黑树:数组长度大于64,链表长度大于8

一维数组 + 红黑树 --> 一维数组+单向链表:红黑树节店小于6

JDK1.8的HashMap数据结构为什么加上了红黑树?

提高了查询效率


11. 论述多线程的生命周期?

 

多线程的生命周期

12. Java线程安全的几种方式?

1. synchronized

2. lock

 

15.线程池的运行流程?

1. 核心线程

2. 任务队列

3.普通线程

4. 拒绝策略

 

16创建自定义线程池的参数有哪些?

核心线程数、最大线程数、任务队列、线程工厂、闲置时间、时间单位、拒绝策略

 

17.TCP连接机制和断连机制是什么?

三次握手

四次挥手

 

18. 异常的处理机制是什么?

1. 程序中出现的异常,会创建异常对象交给JVM -- 抛出异常

2. JVM会循环是否有处理异常的代码

2.1 有 - 就将异常对象交给其处理 -- 捕获异常+处理异常

2.2 没有 - 程序就终止运行

 

19. 什么叫做序列化接口?有什么作用?

Serializable为序列化接口

ObjecOutputStream将对象写入到文件,该对象所属的类必须实现序列化接口,序列化接口作为写入文件的凭证

钝化/序列化:将程序中的对象写入到文件中

活化/反序列化:将文件中的对象读取到程序中

 

20. 字节流和字符流的区别?

字节流以字节为单位去传输数据

字符流以字符为单位去传输数据,字符流底层由字节流+编译器实现,编译器会根据编码格式去操作数据 



培训班学习Java第一天的评论 (共 条)

分享到微博请遵守国家法律