读书笔记-Java程序员面试笔试宝典--持续更新中

在这里插入图片描述


第一至三章为作者心得,不做记述。

第四章 Java基础知识

4.1 基础概念

4.1.1 java语言的优点
答:面向对象、跨平台、由C++改进而来

4.1.2 java与c++有什么异同
答:java要经过编译和解释,有自动的垃圾回收机制,c++只有解释,c++不跨平台。

4.1.3 为什么需要public static void main (String[] args)这个方法
答:是程序的入口方法,一个程序运行时至少有两个线程,一个是垃圾回收线程,另一个就是这个main主线程

4.1.4 如何在main方法执行前输出hello,world
答:

public class Test {
	public static void main (String[] args) {
		System.out.println("hello, world2.);
	}
	// 静态代码块会在main方法之前执行
	static {
		System.out.println("hello, world.);
	}
}

4.1.5 Java程序初始化的顺序是怎样的
答:静态或非静态的变量和代码块的初始化顺序是根据源代码顺序决定的
在这里插入图片描述

4.1.6 Java中的作用域有哪些
答:
变量:成员变量、静态变量、局部变量;
访问控制修饰符:public(任何地方)、protected(同包及其他包中它的子类)、default(同包)、private(同类);
private、protected不能用来修饰类。

4.1.7 一个java文件中是否可以定义多个类
答:可以,但只能有一个public修饰的类与文件名相同

4.1.8 什么是构造函数
答:构造函数名称必须与类名相同,并且不能有返回值,当然void也不可以;
构造函数不能被继承,构造函数中的this super引用只能在第一行,所以它们俩在一个构造器中最多只有一个。

4.1.9 为什么java中有些接口没有任何方法
答:没有任何方法的接口被叫做标识接口,标识接口对实现它的类没有任何要求,它只是充当一个标识的作用,
例如Cloneable、Serializable接口就是标识接口。

4.1.10 java中的clone方法有哪些
答:类实现Cloneable接口,重写Object的clone()方法,该方法返回的是一个新对象,而不是一个引用;
浅复制指只复制了对象本身,对象的中的引用变量所指向的对象并没有复制,
深复制不只复制了对象本身,连对象中的引用变量所指向的对象也进行了复制。

4.1.11 什么是反射机制
答:程序在运行时可以进行自我检查,可以得到一个对象所属的类,一个类的所有成员变量和方法,在可以创建对象,得到对象的属性和方法,简而言之就是程序在运行时可以达到类、对象。

4.1.12 package有什么作用
答:防止大量的命名冲突,包名+类名=完全限定名,来唯一标识一个类。

4.2 面向对象技术

4.2.2 面向对象由哪些特征
答:抽象、封装、继承、多态

4.2.4 什么是继承
答:java只支持单继承,最多只能有一个父类。单继承、多实现。

4.2.5 组合和继承有什么区别
答:组合和继承都是代码复用的方式,组合就是在一个类中引用另一个类,车子和轮胎的关系的组合,车子和交通工具就是继承关系。

4.2.6 多态的实现机制是什么
答:方法的重载和重写。

4.2.7 重写和重载的区别
答:重写:有继承关系的两个类中,方法名、形参相同,子类返回值类型和抛出异常的类型更小,访问控制修饰符更大。
重载:在一个类中,两个方法方法名相同,形参不同。

4.2.8 抽象类和接口有什么异同
答:只要包含一个抽象方法的类就是抽象类,抽象类不能实例化,现在抽象类和接口都可以有实现方法,及方法可以有方法体,
接口中定义的成员变量默认用public static final修饰,方法用public abstract修饰。

4.2.9 内部类有哪些
答:静态内部类、成员内部类、局部内部类、匿名内部类

4.2.10 如何获取父类的类名
答:getClass().getName()

4.2.11 this与super的区别
答:this执行当前对象,super指向当前对象的父类

4.3 关键字

4.3.1 变量命名有哪些规则
答:字母、数字、下划线、$,不要以数字开头

4.3.2 break、continue以及return有什么区别
答:continue是退出所在(内层)循环的当前循环,break是终止所在(只是内层)循环,return是退出方法并返回值。

4.3.3 final、finally、finalize有什么区别
答:final用来声明属性、方法和类,分别表示属性不可变,方法不能重写,类不能继承;
finally是异常处理的一部分;
finalize是垃圾回收器回收一个对象时,会调用这个对象的finalize()方法,让这个对象做好准备,下一轮gc时会进行回收。

4.3.4 assert有什么作用
答:编写测试用例时用来断言

4.3.5 static关键字有哪些作用
答:静态变量在内存中只有一个,可以用来实现单例

4.3.6 使用switch时有哪些注意事项
答:

switch(a) {
	case "":
	break;
	case "":
	break;
	default:
	sout;
}

每一个case都要有break,否则匹配之后的case语句也会执行。
a的类型可以是:byte、short、int、char、String、枚举

4.3.7 volatile有什么作用
答:volatile用来修饰被多个线程访问和修改的变量,且会阻止代码的优化,让代码不会重排序。
有时候重排序是会出错的,比如 a=1; a=2;如果改变了执行的顺序,结果就不同了。

4.3.8 instanceof 有什么作用
答:判断一个引用变量的类型

4.3.9 strictfp有什么作用
答:strict float point,表示精确浮点,用来确保浮点数运算的准确性

4.4 基本类型与运算

4.4.1 java提供了哪些基本数据类型
答:byte、short、int、long、char、boolean、float、double

4.4.2 什么是不可变类
答:成员变量用private修饰,方法用final修饰

4.4.3 值传递
答:都是传递引用变量中存储的值,只是基本数据类型的值就是自己的值,引用变量的值是对象的引用地址。

4.4.4 不同数据类型的转换有什么规则
答:byte<short<char<int<long<float<double,从低精度像高精度转换,否则值较大时会引发精度丢失。

4.4.5 强制类型转换的注意事项有哪些
答:short a=1;a=a+1;会报错,因为1默认是int类型,所以a+1的结果也是int类型,所以会报错,
而shot a=1;a+=1;不会报错,因为java编译器对+=符号进行了特别处理。

4.4.6 运算符优先级是什么
答:用括号

4.4.7 Math类中round、ceil和floor 方法的功能各是什么
答:round四舍五入,ceil向上取整,floor向下取整

4.4.8 ++1和i++的区别
答:++i的iinc指令操作会先执行,虚拟机操作栈的局部变量表中的i会先进行加1操作。

4.4.9 如何实现无符号数的右移操作
答:>>>

4.4.10 char型变量是否可以存储一个中文汉字
答:java默认采用unicode编码方法,即每个字符占用两个字节,因此可以用来存储中文。

4.5 字符串与数组

4.5.1 字符串创建与存储的机制是什么
答:创建一个对象之前要先到堆中的字符串常量池中查找有没有这个字符串,没有才创建新的对象,然后再将其放入字符串常量池中。

4.5.2 “==”、equals和hashcode有什么区别
答:==比较的是内存中存储的数值是否相同,基本数据类型比较数值,引用类型比较地址;
equals默认是使用“= =”进行比较,所以有时候需要重写;
hashcode就是根据对象的内存地址生成一个int值;
hashcode和equals的关系是如果两个对象用equals比较相等,则hashcode值必相等,所以equals重写,hashcode必重写;
另外说明:hashcode相等,equals不一定相等,hashcode不相等,eqluals肯定不相等,原因是hashcode是根据存储地址计算出来的
int值,是有可能出现两个地址生成相同的hashcode值。hashcode值比较效率较高,所以先用hashcode比较,再用equals准确比较。
在这里插入图片描述
4.5.3 Character、String、StringBuffer、StringBuilder和StringTokenizer 有什么区别
答:Character操作的单个字符;
String不可变,其实String自身增加字符串时也是使用了StringBuffer,只是有可能生成新对象;
StringBuffer线程安全,性能较StringBuilder低;
StringBuilder线程不安全,性能较高;
StringTokenizer是用来分割字符串的。

4.5.4 Java中的数组是不是对象
答:是

4.5.5 数组的初始化方法有哪几种
答:int[] arr1 = new int[3];
int[] arr2 = new int[]{1,2,3};
int[] arr3 = {1,2,3};

4.5.6 length属性和length()方法有什么区别
答:String.length();
array.length;
list.size();

4.6 异常处理

4.6.1 finally 块中的代码什么时候被执行
答:如果try和finally中都有return,则finally会覆盖try中的;
如果try中有return,finally中没有return,那么finally中的代码将在return之前执行;
程序exit,程序没进入try块,程序进入try块但出现死锁或死循环(两个方法互相引用)
都会导致finally中的代码不会执行,其他情况都会执行。

4.7 输入输出流

4.7.1 Java IO流的实现机制是什么
答:字节流:InputStream、OutPutStream
字符流:Reader、Writer

4.7.2 管理文件和目录的类是什么
答:File

4.7.3 Java Socket是什么
答:两个程序进行通信,我们肯定要有一个东西来唯一的表示一个程序,这个东西就是套接字,
套接字由三个部分组成:通信协议、ip地址、端口。

4.7.4 Java NIO是什么
答:在非阻塞IO(Nonblocking IO, NIO)出现之前,程序之间的通信是根据传统的Socket来实现的;

4.7.5 什么是Java序列化
答:序列化就是将java对象转化为字节序列

4.7.6 System.out.println()方法使用注意点
答:重写类的toString()方法可以改变输出

4.8 Java平台与内存管理

4.8.3 类加载的显式加载和隐式加载
答:显式加载:class.forName()
隐式加载:new 构造器

4.8.5 Java是否存在内存泄漏问题
答:存在,内存泄漏是指一个不被引用的对象仍然存在于内存中,造成内存的浪费
造成原因很多,比如:
1):静态集合类,静态类的声明周期是跟程序一样的,导致容器中的对象迟迟不能释放,例如Vector。
2):各种连接:连接对象不显式的关闭,也会造成对象无法回收
3):同1,单例模式中,变量是静态的,所以变量即时用不到了也是一直存在的,这样对象的引用一直存在就导致了内存泄漏。

4.9 容器

4.9.2 什么是迭代器
答:迭代器是一个容器,提供了访问其他容器的方法。

4.10 多线程

4.11 Java数据库操作

第五章 Java Web

第六章 数据库原理

第七章 设计模式

第八章 数据结构与算法

第九章 海量数据处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值