day01
1.jdk,jre,jvm分别是什么,有什么关系
JDK是Java开发工具包
JRE是Java运行环境
JVM是Java虚拟机
JDK包含JRE
JRE包含JVM
2.环境变量配置为jdk的哪个目录
bin目录为单词binary 的简写表示此目录下存放的全部为可执行的二进制文件
3.编译命令是什么,编译是将什么文件编译为什么文件
javac 是将java文件编译为class 文件
4.使用什么命令运行class 文件
java命令执行class 文件
5.public ,class ,static ,void,main(String []args)单词表示什么意思
public 公开的
class 类
static 静态的
void 反参,空的无效的
main主要的
String 字符串
args arguments 入参复数
6.java跨平台的核心是什么
跨平台的核心是JVM,JVM属于一个软件,用于在不同的平台模拟相同的环境
7.公开的类,名称有什么要求
必须和文件名保持完全一致
day02
1.变量的作用是什么
- 存储数据:变量用于存储程序运行过程中需要的数据,以便随时读取和修改。
- 命名和抽象:变量可以赋予数据一个有意义的名称,使代码更易读和维护。
- 作用域和生命周期:变量的作用域决定了其可访问的范围,生命周期决定了变量的存活时间。
- 访问控制:通过变量的访问修饰符(如public、private、protected),可以控制变量的访问权限,实现封装。
2.八种基本数据类型有哪些?
整形:byte short int long
浮点型:float double
布尔型:boolean
字符型:char
3.定义变量有哪些方式,分别书写
- 先声明 再赋值
int a;
a = 10;
System.out.println("a 的值是:" + a);
- 连声明带赋值写为一条语句
int b = 20;
System.out.println("b 的值是:" + b);
- 同时声明多个同类型的变量
int c = 30, d = 40, e = 50;
System.out.println("c 的值是:" + c);
System.out.println("d 的值是:" + d);
System.out.println("e 的值是:" + e);
可以将这些代码放到 Java 程序的 main 方法中运行,或者分别在不同的方法中测试。
4.byte取值范围?最大取值的原因?
-128 ~127
因为一个字节占8位 每一个都只能存储一个0或者一个1 最大的取值为每一位都存储一个1
还要注意 计算机以首位(最高位)作为符号位 0表示正数 1表示负数 所以 最大的取值为0111 1111 转换为十进制为127
5.javac、java、javadoc命令的作用
javac是编译命令 表示将java文件编译为class文件
java是执行命令 执行class文件
javadoc是生成帮助文档命令
6.println和print的区别
println有换行效果 打印完以后会换行
print没有换行效果
7.注释有哪些种类,哪些注释会体现在帮助文档中
单行注释
多行注释
文档注释
文档注释会体现在帮助文档中
8.包的命名规范,包的作用
全部小写 域名倒置 不能以点开头或者结尾 可以包含点 每存在一个点表示一个子文件夹
用来对java文件 分门别类管理
day03
1.char类型有哪些赋值方式
三种方式
方式 1:直接使用英文的单引号包括任意一个字符
方式2:直接赋值取值范围在0~65535之内的整数
方式3:使用英文的单引号包括以\u开头的十六进制的unicode编码值
// 第一种方式
char c1 = 'A';
System.out.println("第一种方式:" + c1);
// 第二种方式
char c2 = 65;
System.out.println("第二种方式:" + c2);
// 第三种方式
char c3 = '\u0041';
System.out.println("第三种方式:" + c3);
// 输出结果:
// 第一种方式:A
// 第二种方式:A
// 第三种方式:A
2.自动类型转换的前提条件?
- 两种类型要兼容
- 目标类型取值范围大于源类型取值范围
3.强制类型转换的写法?
short s1 = 100;
byte b1 = (byte)s1;
4.++表示什么意思?++在前在后的区别
++表示自增1
++在前 表示先执行++ 再执行其他的
++在后 表示先执行其他的 再执行++
5.a*=3表示什么意思?
结果等同于 a = a * 3
6.&&和&的区别?
&& 短路与 有短路的效果 如果前边的条件不成立 则后续的不再执行
& 与 没有短路的效果 不管前边的条件结果如何 都将执行完所有的条件
7.||和|的区别?
|| 短路或 有短路的效果 如果前边的条件已经成立 则后续的不再执行
| 或 没有短路的效果 不管前边的条件结果如何 都将执行完所有的条件
8.以下语句将执行什么?
System.out.print(20==20 ? "条件成立" : "条件不成立");
输出 “条件成立”
day04
1.if(表达式) 表达式的最终值为什么类型?
布尔类型
2.多重if用来处理什么样的情况?
通常用于处理某个值处于连续的区间的情况
3.多重if中的else必须写吗
不是必须写 根据需求是否书写
4.Scanner类接收整数,浮点数,字符串分别使用哪些方
法
nextInt()
nextDouble()
next()
5.Scanner类需要导入哪个包?如何导包
java.util包 使用import关键字
6.多重if处理区间的值,条件编写有什么顺序要求
必须为升序或者降序 不能是乱序的
7.类名的命名规范
每个单词首字母大写 全部使用单词 大写驼峰
8.变量的命名规范
首单词 首字母小写 后续每遇到一个新的单词 首字母大写 小写驼峰
9.局部变量的特点 分别从 定义位置 ,作用范围,默认
值,重名等方面描述
定义在方法体内
离当前变量最近的大括号之内(从包含其结构开始 到结构结束 结构就是大括号)
没有默认值 必须先赋值才能使用
重合的作用范围以内不能重名
随着方法的入栈而生效 随着方法的出栈而死亡
基本数据存在栈中 引用数据类型名字在栈中 值存在堆中
day05
1. 基本数据类型都有哪些?
byte short int long float double boolean char
2. 多重循环中,外层循环和内层循环的关系
外层循环变量变化一次 内层循环变量变化一轮
3. 多重循环打印图案的规律,行和列
外层循环控制行数 内层循环控制列数
4. Scanner类需要导入哪个包?如何导包
使用import关键字 打入 java.util包
5. 多重if和switch的应用场景有什么区别?多重if中的else必须
写吗?
多重if擅长处理某个值处于连续区间的情况
switch擅长处理某个值属于固定等值的情况
不是必须写的 根据需求是否书写
6. 多重if处理区间的值,条件编写有什么顺序要求
必须为升序或者降序 不能是乱序的
7. 比较字符串的内容使用什么方法?
equals方法
8. switch支持的数据类型以及break在switch中的作用
byte short int char String 枚举
break在switch中表示跳出switch结构
9. case后边的值可以有重复的吗?比如有两个 case 2: ……case 2:……
不可以
10. while循环和do–while的区别
while循环先判断后执行
do-while先执行后判断
11. 循环中包含switch,switch中的break会中断循环吗?*
不会
12. 循环的必要条件有哪些
1.计数器初始化
2.判断条件
3.循环体
4.计数器变化
13. while和for循环应用场景区分
while循环用于处理循环次数不确定去情况
for循环用于处理循环次数确定的情况
14. for循环的执行顺序
1.先执行计数器初始化
2.判断条件
3.循环体
4.计数器变化
后续直接从判断条件开始
15. 循环问腿
for(int i=0; i<5;i++){
for(int j=1;j<=5;j++){
System.out.print("好好学习");
}
}
这段代码一共会输出几次 好好学习?
25次
day06
1.如何定义方法,定义在哪里?
public static 返回值类型 方法名(形参列表){
方法体;
}
定义在类中,与main方法平级
2.如何调用方法?
在需要调用方法的位置直接书写方法名调用 如果有参数则传参
3.形参和实参的区别?形参规定了哪些内容
形参表示形式参数 属于在方法定义的时候书写的参数 规定了参数的个数、类型、顺序
实参表示调用方法的时候实际传入的参数 必须符合形参的规定
4.break和continue以及return的区别
break用于switch或者循环中 分别表示跳出switch或者循环结构
continue只能用在循环中 表示跳出本次循环 继续执行下一次循环
return用于方法中 表示结束方法 并且返回内容
5.双重循环外层循环变量与内层循环变量的关系
外层循环变量辩护一次 内层循环变量变化一轮
6.switch支持的数据类型
byte short int char String 枚举
7.循环中存在switch,switch中的break会影响循环吗
不会
8.描述局部变量:定义位置 默认值 作用范围 是否可重
名等几个方面
定义在方法体内
没有默认值必须先赋值才能使用
离当前变量最近的大括号以内
在重合的作用范围以内不能重名
9.包名的命名规范,类名的命名规范
域名倒置 全部小写 不能以点开头或者结尾 可以包含点 每存在一个点表示一个子文件
夹
大写驼峰 由一个或者多个单词组成 每个单词首字母大写
day07
1.用一句话描述数组(三个特点)
内存中一块连续的空间 存储多个相同数据类型的值 长度是固定的
2.数组的长度是哪个属性
length属性
3.数组的下标从几开始
0
4.创建数组的四种方式
1.先声明 再开辟空间
2.连声明 带开辟空间
3.声明并且赋值 繁琐
4.声明并且赋值 简单
5.分别写明各个类型数组的默认值
整数:0
浮点:0.0
布尔:false
字符:\u0000
其他:null
6.数组长度为3,添加下标为3的元素可以吗?会发生什么
不可以 会发生数组下标越界异常 ArrayIndexOutOfBoundsException
7.数组在内存中的位置,数组名和数组值
数组名在栈中 值在堆中
8.方法的定义格式、定义位置和调用方式
public static 返回值类型 方法名(形参列表){// 方法体}
写在类中,与main方法平级
在需要调用的位置 直接书写方法名
9.值传递和引用传递的区别?
基本数据类型 属于值传递 传递的是一个值 在方法对参数的改变 不会影响原变量
引用数据类型 属于引用传递 传递的是一个地址 在方法中对参数的改变 会影响原变量
String是特殊的引用数据类型 作为参数 不会影响原变量
10.可变长参数如何书写,有何要求
数据类型…变量名 形参列表中只允许存在一个 并且 只能在形参列表的末尾
11.数组的长度如何获取
length属性
12.描述方法重载
同一个类中 方法名相同 参数列表不同 参数的个数 类型 顺序 跟返回值 访问权限修饰
符无关
day08
1.用一句话描述数组
在内存中 一块连续的空间 存储相同类型的数据 长度是固定的
2.数组各个类型的默认值
整数:0
浮点:0.0
布尔:false
字符:\u0000
其他:null
3.Arrays类toString,copyOf,sort,binarySearch方法的作用
toString 将数组中的元素转换为字符串
copyOf 复制数组
sort 数组升序排序
binarySearch 二分查找法查找某个元素在数组中的下标 数组必须先升序排序
4.复制数组的几种方式
1.编写循环实现
2.System.arraycopy(原数组,起始位置,新数组,起始位置,个数);
3.Arrays.copyOf(原数组,新长度);
5.手写冒泡排序
for(n - 1){
for(n - 1 - i){
if(条件成立){
交换位置;
}
}
}
6.break和continue的区别?
break可以用于switch或者循环中 分别表示跳出switch结构或者中断循环
continue只能用于循环中 表示跳出本次循环 继续下一次循环
7.外层循环与内层循环的关系?
外层循环变量变化一次 内层循环变量变化一轮
8.描述局部变量特点,从以下几个方法面:定义位置,作
用范围,是否可以重名,默认值等
定义在方法体内
从定义行开始 到包括其结构结束
在重合的作用范围以内不能重名
没有默认值 必须先赋值才能使用
生命周期:随着方法的入栈而生效 随着方法的出栈而死亡
存储位置:基本数据类型存在栈中 引用数据类型 名字在栈 值在堆中
9.选择排序的比较原理
使用一个固定位置的元素 一次与其他元素进行比较 如果遇到需要交换位置的元素
先不交换 使用新的元素 继续跟其他元素比较 等待一轮比较完成 交换一次位置
10.数组在内存中的位置,名字和值分别存在哪里
名字在栈中 值在堆中
day09
1.类和对象什么关系
类是对象的抽象
对象是类的具体
2.什么是属性和方法
一类事物共有的特征,使用属性描述
一类事物共有的行为,使用方法描述
3.普通方法的定义格式
public 返回值类型 方法名(参数列表){}
4.什么是形参,什么是实参
形参是方法定义的时候书写的参数 规定了参数的个数、类型、顺序
实参是方法调用的时候传入的参数 必须遵循形参的约定
5.怎样创建对象
类名 对象名 = new 类名();
6.怎样访问对象的属性和方法
通过对象名加点访问
7.你怎么理解万物皆对象
自然界中的任何事物,都可以通过分析其属性和方法,
将其描述的完整,理解为一个对象。
8.局部变量和实例变量的区别
定义位置不同:局部变量定义在方法、代码块或者构造函数内部,而实例变量定义在类的内部,方法的外部。
作用域不同:局部变量的作用域只限于定义它的代码块内部,一旦离开该代码块,其作用域就结束了;而实例变量的作用域则是整个对象实例。
初始化方式不同:局部变量在使用之前必须进行明确的初始化,否则编译器会报错;而实例变量在创建对象时会被自动初始化为默认值。
9.构造方法重载的要求
同一个类中的构造方法,参数列表不同
10.this关键字可以访问那些内容,如何访问,有什么要求
可以访问本类的属性、方法、构造方法
访问构造方法必须在本类构造方法的第一句
11.无参构造的特点
无参构造默认存在 如果书写了有参构造 无参构造将被覆盖 如需使用 必须显式书写
day10
1.封装的作用,实现封装的步骤?
便于使用者正确的使用系统 降低构建大型系统的风险 提高代码的重用性 降低程序的耦
合度
属性私有 方法公开
2.封装中get和set方法分别作用?
get方法表示获取值
set方法表示设置值
3.现有Student类属性:String name,int age,
手写实现封装
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
4.根据第三题提供的属性手写所有的构造方法 只写构造声明即可
public Student(){}
public Student(String name){}
public Student(int age){}
public Student(String name,int age){}
public Student(int age,String name){}
5.包的命名规范是什么?
域名倒置 全部小写 不能以点开头或者结尾 可以包含点 每存在一个点表示一个子文件
夹
6.this关键字的含义和适用场景
this表示当前对象 可以访问本类的属性、方法、构造方法
7.类的访问修饰符有哪些,分别代表什么意义?
public:表示在任何位置都可以访问
默认不写:表示在同包中才可以访问
8.类的成员访问修饰符有哪些,分别代表什么意义?
private:表示私有的 只能在本类中访问
默认不写:只能在同包中访问
protected:受保护 只能在本类 本包 以及子类中访问
public:任何位置都可以访问
9.继承关键字,子类与父类的关系
extends 子类与父类是is-a的关系
10.super关键字的含义和适用场景
super表示当前对象中的父类信息
可以访问父类的属性、方法、构造方法
11.子类构造方法访问父类构造方法的规则
子类构造方法默认访问父类的无参构造方法
除非显式访问父类的有参构造方法
子类构造必须访问父类的有参 或者 无参构造其中一个
day11
1.super和this的区别
super表示当前对象的父类信息
this表示当前对象
2.分别说明方法重载和方法重写的特点
同一个类中,方法名相同,参数列表不同,跟返回值,访问权限修饰符无关
父子类之间,方法名相同,参数列表相同,返回值相同或者是其子类,访问权限不能严
于父类
不能抛出、声明比父类更多的异常,静态方法可以被继承,不能被重写
3.静态方法中如何访问实例属性和方法?
先new对象 通过对象名访问
4.子类将继承父类的哪些内容?
继承父类访问权限允许的属性和方法
5.在同一个构造方法中可以同时使用this和super吗?
可以同时使用
6.break和continue的区别
break用于switch或者循环中 表示跳出switch结构或者中断循环
continue只能用在循环中 表示跳出本次循环 继续下一次循环
7.类型转换的规则,举例说明
byte b1 = 10;
short s1 = b1; // 自动类型转换
int a = 100;
short b = (short)a; // 强制类型转换
8.static关键字可以修饰哪些内容,分别有什么特点
修饰属性:属于静态变量,属于整个类,不属于任何对象,可以被此类的所有对象共享,内存中只存在一份
修饰方法:本类中直接访问,其他类通过类名加点访问
修饰代码块:静态代码块 随着JVM加载类而执行 多个静态代码块按照书写顺序 每个执行一次
9.对象创建的过程
1.将当前对象对应类的class文件加载到方法区(类只加载一次)
2.在堆中开辟空间 创建对象
3.将堆中的地址赋值给栈中的引用
10.继承关键字,java支持多继承吗
extends 不支持 一个类只能有一个直接父类
day12
1.instanceof关键字的作用
判断左侧的对象是否属于右侧的类型
2.描述方法重写
1.父子类之间
2.方法名相同
3.参数列表相同
4.返回值相同或者是其子类
5.访问权限不能严于父类
6.静态方法可以被继承 但是不能被重写
7.不能声明、抛出比父类更多的异常
3.在同一个构造方法中可以同时使用this和super吗?
可以同时使用
4.向上转型可以调用哪些方法?如何调用子类独有的方法
可以调用子类继承父类或者重写父类的方法 不能访问子类独有的方法
向下转型
5.访问修饰符和含义
private 私有的本类中可以访问
默认不写 本包中可以访问
protected 受保护的 本类 本包 以及子类中
public 公开的 任何位置都可以访问
6.==和equals的区别
==比较基本数据类型比较值
==比较引用数据类型比较地址
equals方法本身也比较地址 但是我们可以重写自定义比较规则
7.描述构造方法重载
同一个类中的构造方法 参数列表不同
8.static关键字可以修饰哪些内容,分别有什么特点
修饰属性:不属于任何对象 属于整个类 可以被此类的所有对象共享 内存中只存在一份
修饰方法:本类中直接访问 其他类通过类名加点访问
修饰代码块:随着JVM加载类而执行 多个静态代码块按照书写顺序执行 每个只执行一
次
9.面向对象三大特征
封装:属性私有 方法公开 降低程序的耦合度
继承:子类继承父类 必须符合 is - a的关系 父类中书写共有的信息 子类中书写独有的
信息 提高代码的重用性
多态:父类引用指向子类对象 提高程序的灵活性
父类作为形参 实参为子类类型
父类作为返回值 实际返回值为子类类型
父类类型的数组 集合 元素为子类类型
10.Java支持多继承吗
不支持 一个类只能有一个直接父类
day13
1.写出抽象类的所有特点
1.抽象方法必须存在于抽象类中 均使用abstract修饰
2.抽象类不能直接new对象 必须通过new子类的方式创建对象
3.子类必须重写抽象类中的所有抽象方法 除非子类也是抽象类
4.抽象类中可以书写普通属性 普通方法 构造方法 静态方法
2.写出接口的所有特点
1.接口中所有的方法默认为全局抽象方法 不管是否书写均使用public abstract修饰
2.接口不能直接new对象,必须通过new实现类的方法创建对象
3.实现类必须实现接口所有的抽象方法 除非实现类也是抽象类 或者 是接口
4.接口中不能书写普通属性、普通方法、静态方法、构造方法
5.一个实现类可以实现多个接口 接口也可以继承多个接口
3.接口和抽象类的区别是什么?
抽象类中可以书写普通属性 普通方法 构造方法 静态方法
而接口中不能书写普通属性、普通方法、静态方法、构造方法
4.final关键字可以修饰哪些内容,分别有什么含义
修饰属性:表示常量 基本数据类型值不能改变 引用数据类型 地址不能改变
修饰方法:表示此方法不能被重写
修饰类:表示此类不能被继承
5.java中支持多继承吗?
不支持 但是可以使用接口继承多个接口的方式实现类似多继承的效果
6.描述开闭原则
程序应该对扩展开方法 对修改源代码关闭
7.描述多态
同一个事物,条件不同,实现不同的效果。父类引用指向子类对象
8.向上转型有几种情况?
1.父类作为形参 子类作为实参
2.父类作为声明返回值 实际返回值为子类类型
3.父类类型的数组、集合 元素为子类类型
day14
1.异常的体系结构,写出三个父类
Throwable Exception RuntimeException
2.try-catch-finally-throw-throws关键字分别用途是什么?
try表示用于执行可能出现异常的代码
catch表示捕获异常
finally表示最终都将执行的代码
throw表示抛出异常
throws表示声明异常
3.RuntimeException和CheckedException有在处理上有什么不同?
RuntimeException不必处理
CheckedException必须处理 :继续声明 或者 使用try-catch处理
4.try-catch-finally中 如果try中已经return了值 那么finally中对返回值的操作会不会改变返回值?
如果为基本数据类型 不会改变
如果为引用数据类型 会改变
5.接口的所有特点
1.接口中默认全部为抽象方法
2.接口不能直接new对象 必须通过new实现类的方式创建对象
3.实现类必须重写接口中所有的抽象方法 除非实现类也是抽象类 或者 接口
4.接口中不能书写普通属性、普通方法、构造方法、静态方法
6.自定义异常的步骤
1.继承异常父类
2.编写构造方法 调用父类构造完成异常信息初始化
7.多态向上转型的三种表现形式
1.父类作为形参 子类作为实参
2.父类作为声明返回值 实际返回值为子类类型
3.父类类型的数组、集合 元素为子类类型
8.java支持多继承吗?
不支持 但是可以使用接口继承多个接口的方式 实现类似多继承的效果
9.什么时候使用接口,什么时候使用抽象类?
当你关注事物的本质使用抽象类
当你关注某个功能 使用接口
day15
1.基本数据类型以及对应包装类
Byte Short Integer Long Float Double Boolean Character
2.什么是自动拆箱和装箱,jdk版本有什么要求?代码举
例并标明
Integer a = 100; // 装箱
int b = a; // 拆箱
从JDK1.5才开始支持
3.NumberFormatException是什么异常?代码说明会导致
这种异常的情况
数字格式化异常
Integer i = new Integer(“abc”);
4.Math类获取随机数的方式,向上取整,向下,四舍五入
Math.random()
Math.ceil()
Math.floor()
Math.round()
5.Random类获取随机数的方式
nextInt()
nextInt(int bounds)
nextFloat()
nextDouble()
nextLong()
nextBoolean()
6.静态常量的写法
static final
7.this和super的区别
this表示当前对象 super表示当前对象中父类的信息
8.写出你知道的String类常用方法
length()
equals()
toString()
equalsIgnoreCase()
toLowerCase()
toUpperCase()
concat()
indexOf()
lastIndexOf()
trim()
substring()
split()
startsWith()
endsWith()
contains()
isEmpty()
replace()
charAt()
toCharArray()
9.面向对象的特征是什么?详细描述
封装:属性私有 方法公开 降低程序的耦合度 提高代码的重用性
继承:子类继承父类 父类中书写共有的信息 子类中书写独有的信息 子类与父类是is-a
的关系
多态:父类引用指向子类对象 同一个引用类型 指向不同的实例类型
day16
1.String类为什么不可变,有没有什么方式使String可变
1.因为String类使用final修饰
2.String底层维护的是char数组 此数组使用private修饰
2.String底层维护的是char数组 此数组使用final修饰
有 使用反射可以修改字符串内容
2.String,StringBuffer和StringBuilder的区别
String是不可变对象
StringBuffer和 StringBuilder是可变字符串对象
StringBuffer是线程安全的 StringBuilder是线程不安全
3.int,long,char,short包装类使用==比较的特点
如果直接使用等号赋值 取值范围在byte以内 相同取值的多个对象==为true
如果不再byte范围以内 多个对象==比较为false
4.写出你所知道的日期相关类
Date
Calendar
LocalDate
LocalTime
LocalDateTime
SimpleDateFormat
5.写出你知道的异常以及异常出现的原因
InputMismatchException
ArrayIndexOutOfBoundsException
NullPointerException
ClassCastException
NumberFormatException
ArithmeticException
IOException
SQLException
6.什么时候使用接口,什么时候使用抽象类
当你关注事物的本质 使用抽象类
当你关注某个功能 使用接口
7.描述多态以及向上向下转型
向上转型:父类引用指向子类对象 此时可以访问子类重写 或者 继承父类的方法 不能
访问子类独有的方法
向下转型:将指向子类对象的父类引用 强制转换为子类类型 可以访问子类独有的方法
8.instanceof关键字的作用
判断左侧的对象是否属于右侧的类型
9.final、finally、finalize的区别?
final表示关键字 修饰属性 方法 类
finally用于处理异常 表示任何情况都执行的代码
finalize属于Object类中的方法 表示当前对象被垃圾回收将自动调用此方法
day17
1.ArrayList增删改查的方法是什么,LinkedList独有的方法有哪些?
add()
remove()
set()
get()
addFirst()
addLast()
getFirst()
getLast()
removeFirst()
removeLast()
2.ArrayList集合的特点(是否有序,是否有下标,是否
线程安全,是否可重复,是否允许为null,扩容多少,增
删改查效率)
有序 有下标 线程不安全 元素可以重复 允许元素为null 扩容为原长度的1.5倍
查询 修改 效率高
添加 需要扩容的情况 删除需要移动元素的情况 效率低
3.Collection和List的关系,List和ArrayList、
LinkedList的关系
List接口是Collection接口的子接口
ArrayList和LinkedList是List接口的实现类
4.LinkedList数据结构是什么,集合的特点,问题同2
双向链表 有序 有下标 线程不安全 元素可以重复 允许元素为null 不需要扩容
操作头部或者尾部效率高
添加 删除头部 尾部 效率高
删除 修改 查询 效率低
5.向上转型如何书写,可以调用哪些方法?
父类 对象名 = new 子类();
可以访问子类重写 以及 继承父类的方法 不能访问子类独有的方法
6.泛型的作用
可以用于统一集合中的数据类型
7.遍历ArrayList和LinkedList,可以使用哪些方式,有
什么注意事项,说明原因
可以使用三种方式:普通for循环,迭代器,增强for循环
不推荐使用普通for循环 遍历LinkedList 因为根据下标查询LinkedList元素必须先找到
相邻的元素
效率低
8.LinkedList的get(int index)方法是如何获取到当前集
合中的元素的,做了哪些优化
根据下标查询LinkedList元素必须先找到相邻的元素
如果查询的下标小于集合长度中间值 则从前往后查找
如果下标大于等于集合长度中间值 则从后往前查找
9.StringBuffer和StringBuilder区别
StringBuffer是线程安全的
StringBuilder线程不安全
10.ArrayList和Vector的区别?
ArrayList线程不安全 无参构造初始化长度为0的数组 扩容为1.5倍
Vector线程安全 无参构造初始化长度为10的数组 扩容为2倍
11.Collection和Collections的区别
Collection是集合父接口
Collections是集合工具类
day18
1.JDK8HashMap数据结构
数组 + 单向链表 + 红黑树
2.HashMap特点(是否有序,是否可为null,是否可重复,是否线程安全,初始容量多少,负载因子的含义,扩容多少)
无序 可以为null 键不能重复 值可以重复 线程不安全 初始数组长度为16 负载因子
0.75 表示数组的使用率达到75% 就扩容 扩容为原数组长度的2倍
3.HashMap和Hashtable的区别
HashMap初始化长度为0的数组 第一次添加元素数组初始化为16
Hashtable初始化长度为11的数组
HashMap线程不安全 Hashtable线程安全
HashMap扩容2倍 Hashtable扩容2倍 + 1
4.Properties类,推荐使用什么方法存放数据,不推荐使用什么方法,为什么
setProperty() 不推荐使用put 或者 putAll 方法 因为这两个方法允许添加非String数据
5.遍历HashMap的几种方式
1.获取所有的键 keySet()
2.获取所有的值 values()
3.获取所有建制对的组合 entrySet()
以上三种的迭代器形式
6.说出你所知道的集合体系中的接口和实现类分别都有哪些
Collection
List ArrayList LinkedList Vector
Set HashSet LinkedHashSet Treeset
Map HashMap LinkedHashMap TreeMap Hashtable Properties
7.HashMap添加元素的过程,什么时候扩容,什么时候转换红黑树,什么时候取消转换红黑树?
使用hash值对数组长度-1 进行与运算 得到存在数组中的下标
如果此位置没有数据 则直接存放
如果此位置有数据
比较是否为完全相同的键
如果键完全相同 则直接覆盖
如果键不同 向下添加 判断为树节点 还是链表节点 分别以不同的方式添加
数组的使用率达到75%
当链表的长度大于8 并且数组的长度大于64转红黑树
当链表的长度小于6
8.TreeMap存储自定义的数据类型 有什么要求
必须实现Comparable接口 或者 编写 实现Comparator接口的比较器 来定义比较规则
9.HashSet去除重复元素的依据是什么?
两个对象equals比较为true hashCode相同 则认为是重复的对象
10.Comparable和Comparator接口的区别?
Comparable接口属于自然排序 因为是直接在类中书写
Comparator属于非自然排序 因为是单独书写排序类
day19
1.写出你所知道的File类用于操作文件的方法
getName()
getPath()
length()
isHidden()
canRead()
canExcute()
delete()
exists()
……
2.字节流读写父类分别是,读写方法分别是什么,支持什么类型的参数
InputStream read() 可以读取byte数组
OutputStream write() 可以写入一个字节 或者写入byte数组
3.如何每次读取两个字节
定义长度为2的byte数组
4.字符流读写父类分别是,读写方法分别是什么,支持什么类型的参数
Reader read() 字符 和字符类型的数组
Writer write() 字符和 字符类型的数组
5.如果读取文件乱码,如何处理
可以使用InputStreamReader指定读取文件的编码格式
6.泛型<? extends Animal> 这里的泛型表示可以传入哪些内容
Animal或者 Animal的子类
7.泛型<? super Dog> 这里的泛型表示可以传入哪些内容
Dog或者Dog类的父类
day20
1.线程的五种状态
创建 就绪 运行 阻塞 死亡
2.创建线程的两种方式
继承Thread类 重写run方法
实现Runnable接口 重写run方法
3.调用start和调用run方法的区别
调用start方法表示会开启新的线程
run方法不会开启新的线程
4.线程调度常用的方法
sleep()
join()
yield()
5.进程和线程的区别
进程是进行中的应用程序 属于CPU分配资源的最小单位
线程是CPU执行运算的最小单位 包含在进程之中
6.礼让和插队有什么区别
礼让只是提供一种可能 不一定会礼让
插队一定会插队
7.同步的关键字是什么,可以修饰哪些内容,同步的作用是什么?
synchronized 修饰代码块 或者 方法 分别表示同时只能有一个线程执行代码块 或者方法
8.我们之前接触过哪些线程安全的类,底层如何实现线程安全?
StringBuffer Vector Hashtable 使用synchronized同步关键字修饰方法
9.sleep和wait的区别?
sleep属于Thread类的静态方法 不会释放锁
wait属于Object类的实例方法 会释放锁
10.final,finally,finalize的区别?
final属于Java关键字 用于修饰属性 方法 类
finally属于Java关键字 用于异常处理 表示任何情况都执行的代码
finalize属于Object类的实例方法 表示当前对象被回收将自动调用此方法
10.notify和notifyAll的区别?
notify表示随机唤醒单个线程
notifyAll唤醒所有线程
day21
1.ip地址的组成包含什么?
网络地址 和 主机地址
2.tcp和udp的特点是什么?
tcp是面向连接的安全的 可靠的传输协议 效率低
ucp是非面向连接 不安全的 不可靠的传输协议 效率高
3.描述tcp三次握手和四次挥手
4.TCP/UDP 协议传输涉及到哪些类
位于java.net包中
Socket
ServerSocket
DatagramPacket
DatagramSocket
InetAddress
5.如何获取一个Class对象,有哪些方式
类名.class
Class.forName(String className)
对象名.getClass()
类加载器对象.loadClass(String className)
6.根据Class对象调用无参构造创建一个实例(代码实现)
Class<?> clazz = Class.forName(String className);
clazz.newInstance();
7.手写单例模式任意一种
private static HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){}
public static HungrySingleton getInstance(){
return instance;
}
8.获取一个类对象的所有字段(代码实现)
Class<?> clazz = Class.forName(String className);
Field [] fields = clazz.getDeclaredFields();
9.根据名字获获取一个类对象的某个字段,设置值并且访问(代码实现)
Class<?> clazz = Class.forName(String className);
Field field = clazz.getDeclaredField(String fieldName);
field.set(obj,value);
field.get(obj).sout;
10.反射的概念
在程序运行中动态的获取某个类对象 然后访问类中的属性 方法 构造器
11.元注解有哪些,分别表示什么含义
@Target 表示注解可以添加的位置 不写表示任何位置
@Retention 表示注解保留策略 不写表示在二进制文件生效
@Documented 被此注解修饰的注解 可以生成在帮助文档中
@Inherited 被此注解修饰的注解 可以被子类继承
12.注解属性赋值的特点
如果注解中只有一个属性 并且属性名为value 可以直接写值
如果属性类型为数组 单个元素 直接写值 多个元素使用大括号包括
其他的情况都必须写为属性名=属性值
day22
1.模糊查询关键字,%和_的含义
like %表示任意个数的任意字符
_表示一个任意字符
2.常用的聚合函数和含义
avg()
sum()
count()
max()
min()
3.in关键字的作用
用于查询某个结果在某个集合中
4.连接查询的类型和区别
内连接 取交集
等值连接 取交集
左连接 以左表为主表取交集 右表未匹配的 以null填充
右连接 以右表为主表取交集 左表未匹配的 以null填充
5.如何创建数据库,使用数据库,以及删除数据库
create database 数据库名;
use 数据库名;
drop database 数据库名;
6.去除重复关键字
distinct
7.查询关键字,七大子句包含哪些 按照顺序书写
select
from
where
group by
having
order by
limit
8.插入数据使用什么语句
insert into
9.什么是 DQL DDL DML DCL?
DQL 数据查询语句
DDL 数据定义语句
DML 数据操纵语句
DCL 数据控制语句
10.什么是DB
database 数据库
11.什么是DBMS
database management system 数据库管理系统
day23
1.事务的特性和含义
原子性:表示事物是一个整体 不可拆分 要么都执行 要么都不执行
一致性:事物执行前后数据保持一致 不能凭空消失
隔离性:事务与事务之间相互隔离 根据不同的隔离级别会有不同的效果
持久性:通过事务持久化的数据 将永久保存在磁盘上 无法撤销
2.事务的隔离级别和会产生的问题
read-uncommitted 读未提交 会产生脏读
read-committed 读已提交 会产生不可重复读
repeatable-read 可重复读 会产生幻读
serializable 串读 串行化 不会产生任何问题 效率最低
3.分别说明DQL,DML,DDL,DCL都属于什么语句
DQL 数据查询语句 select
DML 数据操纵语句 insert update delete
DDL 数据定义语句 create
DCL 数据控制语句 grant revoke
4.写明查询语句相关的关键字,尽量多写
select from where group by having order by asc desc limit in not in
(not)between and
5.事务回滚和提交的命令分别是什么
commit;
rollback;
6.row_number() rank() dense_rank()的区别和含义
row_number() 根据条件按照行1234排序
rank() 根据条件按照 1134排序
dense_rank() 根据条件 按照1123排序
7.增加、删除、修改、查询分别是什么语句
insert into
delete
update
select
8.有哪些约束,分别有什么作用
非空 表示不能为空
唯一 表示不能重复
默认值 表示拥有默认值
主键 非空 不能重复
外键 表示必须符合主表中的数据
检查 数据必须符合某个条件
9.创建用户,授权、取消权限的命令
create user ‘用户名’;
grant 权限 on 数据库.表名 to 用户名;
revoke 权限 on 数据库.表名 from 用户名;