当前位置: 首页 > news >正文

【JavaSE】面试01

文章目录

    • 1. JDK、JRE、JVM之间的关系
    • 2. 补充
    • 3. 面试题:重载和重写的区别?
    • 4. super和this
    • 5. (重点!!)若父类和子类均有静态代码块、实例代码块以及无参构造方法,则继承关系上的执行顺序:
    • 6. 静态绑定和动态绑定
    • 7. 抽象类了解
    • 8. 接口了解
    • 7. 抽象类和接口的区别(重点!)
    • 8. Object类有12个成员方法,分别是
    • 9. 为什么String要设计成不可变的?(不可变对象的好处?)
    • 10. String、StringBuffer、StringBuilder的区别
    • 11. 异常体系


努力经营当下 直至未来明朗!

1. JDK、JRE、JVM之间的关系

0
1

2. 补充

1) 前置和后置++的使用,后置++只有在表达式结束之后才对本身进行++
2)& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算;但与 && || 相比, 它们不支持短路求值
3)三目运算符:表达式1 ? 表达式2 : 表达式3;
表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换(注意最后的输出结果)
4)不能做switch的参数的类型: long float double boolean
补:字符串以及枚举(1.5之后版本才有)都可以、byte 、char、short、int可以作为参数
5)2的k次方二进制只有一个1,so:n=n & (n-1) ==0
6)方法签名:经过编译器编译修改过之后方法最终的名字。
具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
7)找出仅出现一次的数字并打印输出(按位异或):0^n=n. n^n=0
8)java中局部变量必须初始化,否则会报错!!
9)二维数组打印:Arrays.deepToString(数组名);
10) ①先执行静态代码块【加载了类就会被执行】
② 如果有多个静态的,那么看定义顺序(会存在覆盖)
③ 如果没有实例化对象,那么只会执行静态的(注:静态的只会执行一次)
⑤ 实例的数据【有多个实例对象,要看定义的顺序】
⑥ 构造方法的执行(即:静态块、实例块、构造方法)
11)局部变量在使用时需要进行初始化
12)static与super不共存–super依赖父类对象
13)String 字符串类, 就是用 final 修饰的, 不能被继承
14)重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参类型都不能改变
15)向上转型:子类对象可以直接赋值给父类对象,此时只能引用父类里面的方法和属性,子类自己的不可以调用。

3. 面试题:重载和重写的区别?

  1. 重写规则】
    1)子类在重写父类的方法时,一般必须与父类方法原型一致:修饰符 返回值类型 方法名(参数列表) 要完全一致
    2)被重写的方法返回值类型可以不同,但是必须是具有父子关系的(父子类关系!!)
    3)子类访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected
    4)父类被static、private、final修饰的方法、构造方法都不能被重写。
    5)重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写

  2. 重写和重载的区别
    2
    即:方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

  3. 小结:
    补充【方法重写】:方法返回值、方法名、参数列表(顺序、个数、类型)一致、static的方法不能重写、private修饰的方法不能重写、final修饰的方法不能重写、构造方法不能重写、子类的访问修饰符需要大于等于父类的访问修饰符
    (注意:重写返回值类型可以不同:子类的返回值和父类的返回值是父子类关系也可以 【协变类型】

4. super和this

  1. 【相同点】
    1)都是Java中的关键字
    2)只能在类的非静态方法中使用,用来访问非静态成员方法和字段
    3)在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
  2. 【不同点】
    1)this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用
    2)在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
    3) this是非静态成员方法的一个隐藏参数,super不是隐藏的参数
    4) 在构造方法中:this(…)用于调用本类构造方法,super(…)用于调用父类构造方法,两种调用不能同时在构造方法中出现
    5)构造方法中一定会存在super(…)的调用,用户没有写编译器也会增加,但是this(…)用户不写则没有

5. (重点!!)若父类和子类均有静态代码块、实例代码块以及无参构造方法,则继承关系上的执行顺序:

1、父类、子类静态代码块
(即:父类静态代码块优先于子类静态代码块执行,且是最早执行)
2、父类实例代码块和构造方法
3、子类实例代码块和构造方法
若再new实例化一次对象,则静态代码块不会执行,因为静态代码块只执行一次

6. 静态绑定和动态绑定

【静态绑定】:也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用哪个方法。典型代表:方法重载。
【动态绑定】:也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法。

7. 抽象类了解

  1. 抽象类中不一定含有抽象方法,但是抽象方法属于抽象类。
  2. 注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法。
  3. 抽象方法没有具体的实现体
  4. 抽象方法不能是private的
    注意:抽象方法没有加访问限定符时,默认是public.
  5. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写
  6. 抽象方法不能被private、static、final等修饰,不能实例化对象
  7. 抽象类可以有构造方法

8. 接口了解

  1. 类重写父类方法时,修饰符一定要大于等于父类的(注意:接口总默认省略的是public,则子类重写时一定要加public修饰,否则编译报错)
  2. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)
  3. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
    (注:必须赋初值;且后续不能被修改,具有final属性)
  4. 接口中不能有静态代码块和构造方法
  5. 深拷贝与浅拷贝
    浅拷贝Cloneable:改变原来的对象,拷贝好的对象也会被影响–即:地址不改变
    深拷贝:两者互不干涉-地址并不相同–类与对象均拷贝

7. 抽象类和接口的区别(重点!)

核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法。

  1. 共同点:都不能实例化
  2. 异:
    1)抽象类可以包含非抽象方法,而接口只能包含抽象方法。
    2)类只能继承一个抽象类,但可以实现多个接口。
    3)抽象类可以有构造方法,而接口不能有构造方法。
    4)抽象类可以有成员变量,而接口只能有常量。
    5)抽象类的方法可以有public、protected和default访问修饰符,而接口的方法只能有public访问修饰符。
    6)抽象类的子类必须实现所有抽象方法,而实现接口的类必须实现所有接口中的方法。
    7)抽象类可以有普通方法,而接口不能有普通方法。
  3. 区别图
    7
  4. 注:抽象方法均没有方法体!也没有花括号!
  5. 接口当中可以有静态成员方法,但是不管静态成员方法还是default方法,都是public修饰的(没有abstract)
  6. 接口中不能有静态、实例代码块、构造方法,抽象类可以有构造方法、静态块和实例块。

8. Object类有12个成员方法,分别是

clone():Object、equals(Object):boolean、finalize():void、getClass()、hashCode():int、notify():void、notifyAll():void、toString():String、wait():void、wait(long):void、wait(long,int):void

9. 为什么String要设计成不可变的?(不可变对象的好处?)

1)方便实现字符串对象池。如果 String 可变, 那么对象池就需要考虑写时拷贝的问题了。
2)不可变对象是线程安全的。
3)不可变对象更方便缓存 hash code, 作为 key 时可以更高效的保存到 HashMap 中。

10. String、StringBuffer、StringBuilder的区别

1)String的内容不可修改,StringBuffer与StringBuilder的内容可以修改. (内容可修改性
2)StringBuffer与StringBuilder大部分功能是相似的 (功能
3)StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作 (处理与线程安全

11. 异常体系

1)Throwable:是异常体系的顶层类,其派生出两个重要的子类: Error 和 Exception
2) Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError,一旦发生回力乏术。
3) Exception:异常产生后程序员可以通过代码进行处理,使程序继续执行。我们平时所说的异常就是Exception。
11

相关文章:

【JavaSE】面试01

文章目录 1. JDK、JRE、JVM之间的关系2. 补充3. 面试题:重载和重写的区别?4. super和this5. (重点!!)若父类和子类均有静态代码块、实例代码块以及无参构造方法,则继承关系上的执行顺序&#xf…...

Elasticsearch(二)kibana数据检索

Elasticsearch(二)kibana数据检索 1.简述 有了数据学习使用kibana调用api检索数据,熟练kibana操作后再进一步使用spring data。 term用于keyword类型数据精准查询,类似mysqlmatch 用于text类型数据分词查询,倒排索引 首先针对keyword文本…...

JavaScript编程语法作业

目录 目录 前言 思维导图 1,作业资源 2,if语句练习 2.1代码解读: 2.2,结果展示: 3,switch语句练习 3.1,代码解读: 3.2,结果展示: 4.while循环练习 4.1,代码解读: 4.2.结果展示: 5.do-while循环练习 5.1,代码解读: 5.2,结果展…...

服务器中了Malloxx勒索病毒应该怎么办?勒索病毒解密,数据恢复

Malloxx勒索病毒是一种近年来发现的电脑病毒,它以加密用户电脑中的重要文件数据为手段,威胁用户并以此勒索钱财。这种病毒的传播方式多种多样,可以通过电子邮件、恶意网站、网络下载等方式进行传播。一旦电脑被感染,病毒会立即锁住…...

如何实现Spring的事务管理功能:@Transactional声明式事务

在Spring MVC中处理SQL事务,可以使用Spring的事务管理功能来实现。Spring提供了多种配置和编程方式来管理事务,以下是一种常见的基于注解的方法来处理SQL事务: 1. 配置数据源和事务管理器:首先,您需要配置数据源和事务…...

LeetCode(力扣)122. 买卖股票的最佳时机 II

LeetCode122. 买卖股票的最佳时机 II 题目链接代码 题目链接 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/ 代码 class Solution:def maxProfit(self, prices: List[int]) -> int:result 0for i in range(1, len(prices)):result max((prices[i…...

串行通信协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、UART二、SPI二、IIC 前言 UART为异步串行通信,使用各自的时钟控制数据的发送和接受过程,不使用同步时钟,而是使用一些特…...

Elasticsearch中RestClient使用

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...

【LeetCode-中等题】208. 实现 Trie (前缀树)

文章目录 题目方法一:利用数组构建26叉树方法二:利用哈希表构建26叉树 题目 方法一:利用数组构建26叉树 插入图示: 全搜索和前缀搜索: 注意:全局匹配匹配完直接返回插入时的标志位 而前缀匹配时&#xff…...

python队列与多线程——生产者消费者模型

队列相关知识点 多线程相关知识点 import random import time from queue import Queue import threadingclass Consumer(threading.Thread):def __init__(self, name, Q: Queue):super(Consumer, self).__init__()self.name nameself.Q Qdef run(self):while True:time.sl…...

idea的安装

大家可以关注博主,加个微信,私下聊聊 我们先到idea的官网里下载一个ideaidea官网 idea的安装非常简单,只需要一直next就行, 安装完后到你的文件里找到idea64.exe.vmoptions文件,在最后一行添加-javaagent:D:\idea\jetb…...

Unity下如何实现RTMP或RTSP播放端录像?

好多开发者问我们,Unity环境下,除了RTSP或RTMP的播放,如果有录像诉求,怎么实现?实际上录像相对播放来说,更简单一些,因为不涉及到绘制,只要拉流下来数据,直接写mp4文件就…...

【Python】Python基础语法

总感慨万千,虽只道寻常 文章目录 前言1. python与Java的主要区别2. 数据类型3. 输入与输出3.1 输入3.2 输出 4. 注释5. 运算符6. 条件语句7. 循环8. 函数9. 列表9.1 创建9.2 根据下标访问元素9.3 列表切片9.4 遍历9.5 插入元素9.6 查找元素下标9.7 删除元素9.8 列表…...

I2C总线驱动:裸机版、应用层的使用、二级外设驱动三种方法

一、I2C总线背景知识 SOC芯片平台的外设分为: 一级外设:外设控制器集成在SOC芯片内部二级外设:外设控制器由另一块芯片负责,通过一些通讯总线与SOC芯片相连 Inter-Integrated Circuit: 字面意思是用于“集成电路之间…...

Unix Network Programming Episode 77

‘gethostbyaddr’ Function The function gethostbyaddr takes a binary IPv4 address and tries to find the hostname corresponding to that address. This is the reverse of gethostbyname. #include <netdb.h> struct hostent *gethostbyaddr (const char *addr…...

解决Ubuntu无法安装pycairo和PyGObject

环境&#xff1a;虚拟机Ubuntu20.04&#xff0c;vscode无法安装pycairo和PyGObject 虚拟机Ubuntu20.04&#xff0c;vscode中运行Anaconda搭建的vens 的Python3.8.10 首先在vscode中点击ctrlshiftp&#xff0c;选择Python3.8.10的环境&#xff0c;自动激活Python 最近在搞无人…...

Android Handler 机制解析

1、前言 在 Android 开发中&#xff0c;Handler 的机制和运行原理这方面的知识可以说是每个人都需要熟悉的。这不仅是因为 Handler 是 Android 应用的基石之一&#xff0c;也因为 Handler 整体设计上也是十分优秀的。接下来我就梳理总结一下常见的 Handler 相关知识点。 2、基…...

酒店固定资产管理怎么分类

在酒店业中&#xff0c;固定资产的管理是至关重要的一环。它不仅影响到企业的运营效率和盈利能力&#xff0c;而且直接影响到客户体验和品牌形象。因此&#xff0c;对于酒店管理者来说&#xff0c;合理、有效地进行固定资产管理是一项必不可少的任务。本文将探讨酒店固定资产的…...

OpenCV(三十一):形态学操作

​​​​​​1.形态学操作 OpenCV 提供了丰富的函数来进行形态学操作&#xff0c;包括腐蚀、膨胀、开运算、闭运算等。下面介绍一些常用的 OpenCV 形态学操作函数&#xff1a; 腐蚀操作&#xff08;Erosion&#xff09;&#xff1a; erode(src, dst, kernel, anchor, iteration…...

Python之面向对象(二)

目录 属性和方法静态属性/方法、普通属性/方法、类方法保护和私有属性/方法魔术方法构造方法(\_\_new__/\_\_init\_\_)析构方法(\_\_del__)调用方法&#xff08;\_\_call__&#xff09;toString方法\_\_str__、\_\_repr\_\_\_\_getitem__、setitem、delitem\_\_add__、\_\_gt\_…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...