2024年最新java中Lambda表达式,这些数据库索引的高频面试题你会吗

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

/**

* @author:guan

* @2021/12/7 22:11

* 文件信息:

*/

public class TestTimer {

public static void main(String[] args) {

TimePrinter printer = new TimePrinter();

Timer timer = new Timer(1000,printer);

timer.start();

JOptionPane.showMessageDialog(null,“Quit”);

System.exit(0);

}

}

class TimePrinter implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

System.out.println(“我是测试Timer的!”);

}

}

运行结果就是每秒打印一下:我是测试Timer的!

换句话说,就是Timer每秒执行的,就是System.out.println(“我是测试Timer的!”);这段代码而已!

2. 如果这个比较陌生,我们再举一个例子,我们都知道,java中的sort函数是可以自定义比较器的,例如我们需要按长度给字符串排序:

package com.mark.spDefault.controller.test;

import java.lang.reflect.Array;

import java.util.Arrays;

import java.util.Comparator;

/**

* @author:guan

* @2021/12/7 22:26

* 文件信息:

*/

public class TestString {

public static void main(String[] args) {

String[] strings = new String[]{

“1”,“22”,“1111”,“333”};

Arrays.sort(strings,new LenghtCom());

for (String s :strings){

System.out.println(s);//结果:1 22 333 1111

}

}

}

class LenghtCom implements Comparator{

@Override

public int compare(String o1, String o2) {

return o1.length()-o2.length();

}

}

在sort方法开始运行时,便会调用compare()方法进行比较,实际上,调用的就是compare中的return o1.length()-o2.length();这段代码。

从上面两个例子,也许你能够发现相似点,就是都是将一段代码传递给了某个对象,第一个例子的Timer,第二个例子的sort方法。这段代码块不会立即调用,而是在未来的某一个时刻调用。

  1. 此时也许你已经发现了问题,java中传递一各代码段太复杂了!!!为了一段代码,我们需要构造一个对象!

2. Lamda简介


由于上面的原因,lamda表达式便提出了,并在java1.8正式引入!

2.1 组成元素


运算符:->

左侧:指定了Lambda表达式所需要的所有参数

右侧:制定了Lambda体,即Lambda表达式所要执行的功能。

话不多说,直接上例子吧,我们前面已经说明了,没有lambda表达式之前,java中传代码段必须要创建对象,那么使用了lambda表达之之后呢?我们来看一下定时器函数:

public class TestTimer {

public static void main(String[] args) {

// lambda表达式

Timer timer = new Timer(1000,(event)-> System.out.println(“我是测试Timer的Lambda版本!”));

timer.start();

JOptionPane.showMessageDialog(null,“Quit”);

System.exit(0);

}

}

看到差别了吗?一句话就能搞定,其中->左侧能够看到,有一个参数event,有人会说,这里后面就一个打印语句,也没有用到参数event啊,可以删除吗?这是不可以的哈!!!具体原因我们后面再分析。下面来看一下第二个sort函数使用lambda表达式之后是什么样:

public class TestString {

public static void main(String[] args) {

String[] strings = new String[]{

“1”,“22”,“1111”,“333”};

Arrays.sort(strings,(s1,s2)->{

return s1.length()-s2.length();});

for (String s :strings){

System.out.println(s);

}

}

}

怎么样?很方便吧!这里同样的,有两个参数,而且还有返回值,我们接下来聊一下参数问题哈!

2.2 lambda表达式中的参数问题

我们还是先看上面那两个例子哈,在没替换之前,我们是怎么搞的?那定时器那个为例:是不是要先定义一个TimerPrinter对象,然后将这个对象传到定时器里:如下TimePrinter 对象:

class TimePrinter implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

System.out.println(“我是测试Timer的!”);

}

}

我们再来仔细看一下这个对象,里面实现了一个方法,actionPerformed(ActionEvent e),前面也已经说了,传递给定时器的,就是方法中的这段打印信息的代码,我们现在使用Lambda表达式来完成同样的任务,是不是就要和这个方法对应呢?即:

  1. 参数对应,这里有个参数,那对应的lambda表达式也要有对应的参数。

  2. 方法为void,那对应的lambda表达式就不需要有return返回值。

到这里,其实就大致能看出,在定时器这里的lambda表达式,其实就是实现了ActionListener中的actionPerformed方法,我们可以debug以下:

设置断点如下:

在listenerList中我们能够看到其中一个listener是我们定义的lambda生成的!

同样的,我们在sort排序中,是不是在没有使用lambda表达式之前创建了一个LenghtCom对象,该对象实现了Comparator接口,并重写了一个public int compare(String o1, String o2)方法,注意了哈,这里这个方法是有返回值的,int类型的,并且有两个String类型的参时。那么,同样的,在我们实现的Lambda表达式中,

Arrays.sort(strings,(s1,s2)->{

return s1.length()-s2.length();});

同样有两个参数s1和s2,和一个return返回值为int。这里s1和s2你也可以带上String声明,就类似如下:

Arrays.sort(strings,(String s1,String s2)->{

return s1.length()-s2.length();});

都是没关系的,lambda在特定情况下能够智能推断出你的参数类型,所以这里不加String声明也可以正常运行。

3 如何定义一个可以使用lambda表达式的对象?

讲到这里,相信大家对lambda表达式已经有一定的了解了,但是是不是所有的对象方法都可以使用lambda表达式呢?答案肯定是否定的,不信你可以试试!!!那什么时候可以用呢?或者说,如何定义一个可以使用lambda表达式的对象方法呢?别着急,我这就介绍!!!

最后

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

表达式的对象方法呢?别着急,我这就介绍!!!

最后

[外链图片转存中…(img-lYpMet85-1715141446372)]

[外链图片转存中…(img-mGBCEmsk-1715141446373)]

[外链图片转存中…(img-nosYHznT-1715141446373)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值