Java面试基础知识

什么是重写?什么是重载?

方法的重写(Override)和重载(Overload)是Java多态性的不同表现,重写是父类与子类之间多态性的表现,重载是一个类多态性的表现。

(1)方法重载是一个类中定义了多个相同的方法名,但是他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overload)。

(2)方法重写是在子类存在的方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Override)。

List接口和Set接口有什么特点?

List接口:顺序存储、可以有重复值。

Set接口:无序存储、不能有重复值。

ArrayList与LinkedList有什么区别?

ArrayList与LinkedList都实现了List接口。

ArrayList是线性表,底层是使用数组实现的,它在尾端插入和访问数据时效率较高

LinkeListd是双向链表,他在中间插入或者头部插入时效率较高,在访问数据时效率较低

++i与i++的区别是什么?

++i:先赋值,后计算,i++:先计算,后赋值

Java中异常分为哪两种?

编译时异常,运行时异常

几个Java常见的编译时异常类?

NullPointerException:空指针异常

ArrayIndexOutOfBoundsException:数组下标越界

NumberFormatException:数字转换异常

IllegalArgumentException:参数不匹配异常

InstantiationException:对象初始化异常

ArithmeticException:算术异常

Java中主要有哪三种的循环结构?

(1)for循环

基本格式:

for(初始化语句;布尔表达式;更新循环控制变量){

//循环体

}

(2)while循环

基本格式:

While(布尔表达式){

//循环体

}

(3)do..while循环

基本格式:

do{

//循环体

}While(布尔表达式);

While循环和do...while循环的不同之处是什么?

do...while 循环的循环体至少执行一次,而While循环的循环体一次也不执行

continue 关键字的用法?

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

在 for 循环中,continue 语句使程序立即跳转到更新语句。

在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。

Spring框架中bean的创建方式和生命周期?

Bean的创建方式:构造器创建、静态工厂创建、实例工厂创建

Bean的生命周期:

  1. 实例化(Instantiation)

  1. 属性设置(populate)

  1. 初始化(Initialization)

  1. 销毁(Destruction)

(1)实例化Bean

(2)根据属性,注入需要的 Bean

(3)如果Bean 实现了BeanNameAware 等 aware 接口,则执行 aware 注入

(4)如果有BeanPostProcessor,则执行BeanPostProcessor#postProcessBeforeInitialization 方法

(5)如果Bean 是InitializingBean,则执行afterPropertiesSet 方法

(6)如果有initMethod ,则执行

(7)如果有BeanPostProcessor,执行BeanPostProcessor#postProcessAfterInitialization 方法

(8)使用Bean

(9)如果Bean 是DisposableBean,则执行 destroy 方法

(10)如果有destroy 方法,则执行

java8的新特性lambda表达式

Lambda表达式(闭包):lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加简洁。

Lambda表达式的使用场景:用以简化接口实现。

lambda表达式只能实现函数式接口。

Lambda 表达式的标准格式:

(参数类型 参数名) -> {

方法体;

return 返回值;

}

Lambda 表达式的省略规则:

1. 小括号中的参数类型可以省略。

2. 如果小括号中只有一个参数,那么可以省略小括号。

3. 如果大括号中只有一条语句,那么可以省略大括号,return,分号。

java8的新特性流式API

集合接口有两个方法来生成流:(1)stream()-为集合创建串行流。(2)parallelStream()-为集合创建并行流。

forEach: 用来迭代流中的每个数据。以下代码片段使用forEach输出了10个随机数:

Random random = new Random();

random.ints().limit(10).forEach(System.out::println);

map: 用于映射每个元素到对应的结果。以下代码片段使用map输出元素对应的平方数:

List<Interger> numbers=Arrays.asList(3,2,4,5);

//获取对应的平方数

List<Integer> squaresList =numbers.stream().map.(i->i*i).distinct().collect(collector.toList());

Filter: 用于通过设置的条件过滤出元素。以下代码片段使用Filter方法过滤出空字符串:

List<String> strings =arrays.asList(“abc”,”bcd”,”cde”,””);

//获取空字符串的数量

Long count = strings.stream.filter(string->string.isEmpty()).count();

Limit: Limit方法用于获取指定数量的流。以下代码片段使用Limit方法打印出10条数据:

Random Randoms = new Random();

Randoms.ints()limit(10).forEach(Systemout::println);

Sorted: 用于对流进行排序。以下代码片段使用Sorted方法对输出的10个随机数进行排序:

Random Randoms = new Random();

Randoms.ints().Limit(10).sorted().forEach(Systemout :: Println);

并行(parallel)程序:ParallelStream是流并行处理程序的代替方法。以下实例我们使用parallelStream来输出空字符串的数量

List<String>strings = Arrays.asList(“ab”,”bc”,””,”cd”,””,”ef”)

Longcount = strings.ParallelStream().filter(string-> string.isEmpty()).count();

Collectors类: 实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors可用于返回列表或字符串:

List<String>strings= Arrys.asList(“abc”,”bcd”,”def”,””,”efg”);

List<String>filtered=strings.stream.filter(string->!string.isEmpty()).collect(collectors.toList());

System.out.println(“筛选后的列表”+filtered);

StringmergedStrings = strings.stream().filter(string->!string.isEmpty()).collect(collectors.joining(“,”));

System.out.println(“合并后的字符串:”+mergedStrings);

统计: 产生统计结果的收集器,主要用于int,double,long等基本类型上

List<Integer> numbers = Arrays.asList(1,3,2,5,6,8);

IntSumarryStaticsstats = numbers.stream().mapTopInt((x)->x).sumarryStatics();

System.out.println(“列表中最大的数:”+stats.getMax());

System.out.println(“列表中最小的数:”+stats.getMin());

System.out.println(“列表中所有数之和:”+stats.getSum());

System.out.println(“列表中的平均数:”+stats.getAverage());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值