2024年最新Java阶段六:面向对象其他 (二)(1),东软医疗java面试题

总结

对于面试,一定要有良好的心态,这位小伙伴面试美团的时候没有被前面阿里的面试影响到,发挥也很正常,也就能顺利拿下美团的offer。
小编还整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家,

在这里插入图片描述

在这里插入图片描述

最后感谢大家的支持,希望小编整理的资料能够帮助到大家!也祝愿大家都能够升职加薪!

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

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

Lambda表达式

内部类

常用API

Object

代码块


概述代码块又称初始化块,属于类中的成员【即是类的一部分】,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来

代码块和方法不同,没有方法名,没有返回,没有参数,只有方法体

不用通过对象或类显示调用,而是加载时,或创建对象时隐式调用

基本语法[修饰符] {代码};

1. 修饰符可选,要写的话也只能写static

2. 代码块分为两类,使用static修饰的叫静态代码块,没有static修饰的,叫普通代码块/非静态代码块

3. 逻辑语句可以为任何逻辑语句 (输入、输出、方法调用、循环、判断等)

4. ;号可以写上,也可以省略

好处1. 相当于另外一种形式的构造器 (对构造器的补充机制),可以做初始化的操作
2. 场景:如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性
注意事项

static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次

如果是普通代码块,每创建一个对象,就执行

类什么时候被加载:

1. 创建对象实例时(new)

2. 创建子类对象实例,父类也会被加载

3. 使用类的静态成员时 (静态属性,静态方法)

普通代码块,在创建对象实例时,会被隐式的调用。被创建一次,就会被调用一次

如果只是使用类的静态成员时,普通代码块并不会执行

创建一个对象时,在一个类调用顺序是:

1. 调用静态代码块和静态属性初始化 (优先级一样,按顺序调用)
2. 调用普通代码块和普通属性的初始化 (优先级一样,按顺序调用)
3. 调用构造方法

构造器的最前面其实隐含了super()和调用普通代码块

创建一个子类对象时 (继承关系)

他们的静态代码块、静态属性初始化,普通代码块、普通属性初始化、构造方法的调用顺序:

1. 父类的静态代码块和静态属性 (优先级一样,按顺序执行)
2. 子类的静态代码块和静态属性 (优先级一样,按顺序执行)
3. 父类的普通代码块和普通属性 (优先级一样,按顺序执行)
4. 父类的构造方法
5. 子类的普通代码块和普通属性 (优先级一样,按顺序执行)
6. 子类的构造方法

静态代码块只能直接调用静态成员 (静态属性和静态方法),普通代码块可以调用任意成员

单例模式


概述:采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
方式一:饿汉式

步骤:

1. 构造器私有化 (防止直接new)

2. 类的内部创建对象 (该对象是static)

3. 提供一个静态的公共方法

代码实现:

GirlFriend类:
private String name;
//为了能够在静态方法中,返回gf对象,修饰为static
private static GirlFriend gf = new GirlFriend("小红红");
private GirlFriend(String name){
        this.name = name;
}
public static GirlFriend getInstance(){
        return gf;
}

测试类:
//通过方法获取对象
GirlFriend instance = GirlFriend.getInstance();
System.out.println(instance);

类加载就会被执行创建对象!

方式二:懒汉式概述:步骤与饿汉式基本一样,只是在提供一个静态的公共方法时加了一个判断是否创建对象实例

代码实现:

GirlFriend类:
private String name;
private static GirlFriend gf;
private GirlFriend(String name){
      this.name = name;
}
public static GirlFriend getInstance(){
      //如果没有创建girlFriend对象
      if (gf == null){
          gf = new GirlFriend("小红红");
      }
      return gf;
}

测试类:
GirlFriend instance = GirlFriend.getInstance();
System.out.println(instance);

调用时才创建对象!

饿汉式VS懒汉式创建对象的时机不同:饿汉式在类加载就创建了对象实例,懒汉式是在使用时才创建
饿汉式不存在线程安全问题,懒汉式存在线程安全问题
饿汉式存在浪费资源的可能,懒汉式不存在
经典单例模式

Java.lang.Runtime (饿汉式)

Lambda表达式


组成Lambda表达式三要素形式参数,箭头,代码块
格式
使用前提有一个接口
接口中有且仅有一个抽象方法
省略模式1. 类型可以省略。但是有多个参数的情况下,不能只省略一个
2. 如果参数有且仅有一个,那么小括号可以省略
3. 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
注意事项使用Lambda必须有接口,并且要求接口中有且仅有一个抽象方法

必须有上下文环境,才能推导出Lambda对应的接口

根据局部变量的赋值得知Lambda对应的接口
Runnable r = ( ) -> System.out.println("Lambda表达式");

根据调用方法的参数得知Lambda对应的接口
new Thread(( ) -> System.out.println("Lambda表达式")).start();

Lambda表达式和匿名内部类的区别

所需类型不同

匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
Lambda表达式:只能是接口

使用限制不同

如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式

实现原理不同

匿名内部类:编译之后,产生一个单独的.class字节码文件
Lambda表达式:编译之后,没有一个单独的.class字节码文件

对应的字节码会在运行的时候动态生成

接口组成更新

接口中默认方法

格式:public default 返回值类型 方法名(参数列表) {   }

注意:默认方法不是抽象方法,所以不强制被重写。但是可以被重写

重写的时候去掉default关键字;public可以省略,default不能省略

接口中静态方法

格式:public static 返回值类型 方法名(参数列表) {   }

注意:静态方法只能通过接口名调用,不能通过实现类名或者对象名调用

public可以省略,static不能省略

接口中私有方法

格式:

private 返回值类型 方法名(参数列表) {   }

private static 返回值类型 方法名(参数列表) {   }

注意:默认方法可以调用私有的静态方法和非静态方法,静态方法只能调用私有的静态方法

方法引用产生原因

在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作
那么考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案

那是否还有必要再写重复逻辑呢?答案是没有必要。那我们如何使用已经存在的方案的呢?
这就是我们要讲解的方法引用,我们是通过方法引用来使用已经存在的方案

方法引用符:: 该符号为引用运算符,而它所在的表达式被称为方法引用
使用方法
推导与省略

1. 如果使用Lambda,那么根据 “可推导就是可省略” 的原则

无需指定参数类型,也无需指定的重载形式,它们都将被自动推导
2. 如果使用方法引用,也是同样可以根据上下文进行推导
3. 方法引用是Lambda的孪生兄弟

引用类方法格式:类名::静态方法

范例:

Integer::parseInt
Integer类的方法:public static int parseInt(String s) 将此String转换为int类型数据

说明:Lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数
引用对象的实例方法概述:引用对象的实例方法,其实就引用类中的成员方法
格式:对象::成员方法

范例:

"HelloWorld"::toUpperCase
 String类中的方法:public String toUpperCase() 将此String所有字符转换为大写

说明:Lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数
引用类的实例方法

概述:引用类的实例方法,其实就是引用类中的成员方法

格式:类名::成员方法

范例:

String::substring
public String substring(int beginIndex,int endIndex) 
从beginIndex开始到endIndex结束,截取字符串

返回一个子串,子串的长度为endIndex-beginIndex

说明:

Lambda表达式被类的实例方法替代的时候
​第一个参数作为调用者
​后面的参数全部传递给该方法作为参数

引用构造器

概述:引用构造器,其实就是引用构造方法

格式:类名::new

范例:Student::new

说明:Lambda表达式被构造器替代的时候,它的形式参数全部传递给构造器作为参数

最后的内容

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)

如何准备面试?

1、前期铺垫(技术沉积)

程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

下面是我会看的一些资料笔记,希望能帮助大家由浅入深,由点到面的学习Java,应对大厂面试官的灵魂追问

这部分内容过多,小编只贴出部分内容展示给大家了,见谅见谅!

  • Java程序员必看《Java开发核心笔记(华山版)》

  • Redis学习笔记

  • Java并发编程学习笔记

四部分,详细拆分并发编程——并发编程+模式篇+应用篇+原理篇

  • Java程序员必看书籍《深入理解 ava虚拟机第3版》(pdf版)

  • 大厂面试必问——数据结构与算法汇集笔记

其他像Spring,SpringBoot,SpringCloud,SpringCloudAlibaba,Dubbo,Zookeeper,Kafka,RocketMQ,RabbitMQ,Netty,MySQL,Docker,K8s等等我都整理好,这里就不一一展示了。

2、狂刷面试题

技术主要是体现在平时的积累实用,面试前准备两个月的时间再好好复习一遍,紧接着就可以刷面试题了,下面这些面试题都是小编精心整理的,贴给大家看看。

①大厂高频45道笔试题(智商题)

②BAT大厂面试总结(部分内容截图)

③面试总结

3、结合实际,修改简历

程序员的简历一定要多下一些功夫,尤其是对一些字眼要再三斟酌,如“精通、熟悉、了解”这三者的区别一定要区分清楚,否则就是在给自己挖坑了。当然不会包装,我可以将我的简历给你参考参考,如果还不够,那下面这些简历模板任你挑选:

以上分享,希望大家可以在金三银四跳槽季找到一份好工作,但千万也记住,技术一定是平时工作种累计或者自学(或报班跟着老师学)通过实战累计的,千万不要临时抱佛脚。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

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

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

net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值