备战Java面试

ops/2024/10/11 13:26:06/

一.JAVA基础


1.八个基本数据类型,长,占几个字节,取值范围是多少。

基本类型:

Byte   一般的数据 1个字节  取值范围  -128—127

short   极大的数据 2个字节  取值范围 -2的15次方到2的15次方减一

int    4个字节  取值范围 -2的31次方到2的31次方减一

long 8个字节  取值范围 -2的63次方到2的63次方减一

byte、short、int、long都是整数类型,并且是有符号整数 分别占用、2、4、8个字节。

浮点数

float  有效数字最长是7位 占四个字节,共32位,称为单精度浮点数

double  有效数字最长是15位 占八个字节,共64位,称为双精度浮点数

Java中的浮点型常量数值默认是double类型

注意: java提供的浮点类型不适合进行精确的运算

boolean

Boolean在内存中占用一个字节。

java编译器把java源代码编译为字节码时,会用int或byte来表示boolean。在java虚拟机中,用整数零来表示false,用任意一个非零整数表示true。 java虚拟机这种底层处理方式对java虚拟机是透明的,在java源程序中boolean类型的变量取值只能是true或false。

char

char是字符类型 占用两个字节,java语言对字符采用Unicode字符编码

2.面向对象的特征

1. 封装(Encapsulation)

封装是面向对象编程中最基本的特征之一,它将数据和操作数据的方法(即方法)封装在一个单独的单元(即类)中。通过封装,我们可以隐藏对象的内部细节,只暴露出必要的接口供其他对象进行交互,从而实现了信息的隐藏和保护。

2. 继承(Inheritance)

继承是面向对象编程中的另一个重要特征,它允许一个类继承另一个类的属性和方法,从而实现代码的重用和扩展性。被继承的类称为父类(或超类),继承这个类的类称为子类。子类可以继承父类的所有非私有属性和方法,并可以在其基础上添加新的属性和方法。

3. 多态(Polymorphism)

多态是面向对象编程的第三个特征,它允许一个对象在不同的情况下表现出不同的行为。多态分为编译时多态和运行时多态。编译时多态是通过方法重载来实现的,而运行时多态是通过方法重写和向上转型来实现的。

3.实现多态的几种方式

1. 方法重载

        方法重载是一种实现多态的简单方式。它允许在同一个类中定义多个同名但参数列表不同的方法。当调用这些方法时,编译器会根据参数的类型和数量来确定具体调用哪个方法。这样就实现了多态性。

2. 方法重写

         方法覆盖是一种实现多态的常用方式。它允许子类重新定义父类中已经定义的方法。当子类对象调用这个方法时,将会执行子类中的方法实现,而不是父类中的方法。

3. 接口实现

        接口是一种定义了一组方法的抽象类型。类可以通过实现接口来达到多态的目的。当一个类实现了一个接口时,它必须实现该接口中定义的所有方法。

方法重载允许根据不同的参数类型来实现多态;方法覆盖允许子类重新定义父类中的方法以实现多态;接口实现允许类根据实现的接口来实现多态

4.什么叫装箱什么叫拆箱

装箱就是自动将基本数据类型转换为包装器类型;

装箱(Boxing): 装箱是指将基本数据类型转换为对应的包装类对象。这是通过调用包装类的构造函数或静态工厂方法来完成的。装箱过程将基本数据类型的值封装成一个包装类对象。

拆箱就是自动将包装器类型转换为基本数据类型

拆箱(Unboxing): 拆箱是指将包装类对象转换为基本数据类型。这是通过调用包装类的 xxxValue() 方法来完成的。拆箱过程将包装类对象中的值提取出来,转换为对应的基本数据类型。

5.装拆箱分别调用的是那个方法

装箱:这是通过调用包装类的构造函数或静态工厂方法来完成的。装箱过程将基本数据类型的值封装成一个包 装类对象。

拆箱:这是通过调用包装类的 GetValue() 方法来完成的。拆箱过程将包装类对象中的值提取出来,转换为对应 的基本数据类型。

6.Integer a=100; Integer b=100;   a == b (true)
Integer a=200;  Integer b=200;     a == b(false)
为什么?

integer :integer是int的包装类,首先它是一个类用==比较的是内存的地址,在integer类里面有一个成员静态 内部类IntegerCache,这成员静态内部类缓存了-128到127之间的所有的整数对象,并在jdk1.5之后引用了自 动 装箱,在将整数类型装箱时进行了判断,如果这个之大于-128到127之间就会重新new一个新的integer, 所 以尽 管两个数值相同,但地址不同,所以返回false。

7.Object有那7个方法

  1. getClass():获取类的class对象。返回对象的运行时类。返回的是 Class 对象,可以获取类的信息,如类名、父类、接口等。
  2. hashCode:返回对象的哈希码值。哈希码是根据对象的内容计算得出的一个整数,用于快速查找和比较对 象。在重写 equals 方法时,通常也要同时重写 hashCode 方法,以保证相等的对象具有相同的哈希码
  3. equals():比较对象是否相等,比较的是值和地址,子类可重写以自定义。默认情况下,使用 == 运算符进行比较,即判断两个对象的 引用是否指向同一个内存地址。如果需要自定义比较规则,可以重写该方法。
  4. clone():克隆方法。创建并返回当前对象的副本。默认情况下,使用浅拷贝方式复制对象,即只复制对象的字段值,而不 复制引用类型的对象。如果需要实现深拷贝,可以重写该方法
  5. toString():将对象转换为字符串表示形式。 如果没有重写,应用对象将打印的是地址值。
  6. notify():随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
  7. notifyall():解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
  8. wait():导致线程进入等待状态,并释放对象锁。直到它被其他线程通过notify()或者notifyAll唤醒。该方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
  9. finalize(饭no来吱):在对象被垃圾回收器回收之前调用。可以重写该方法来执行资源释放等清理操作。

8.常量(final)关键字的作用 他与finally,finalize的区别

final:

  1. 定义:在Java等编程语言中,final是一个关键字,用于表示某个变量、方法或类是不可变的。
  2. 用途:使用final关键字可以使变量成为常量,一旦赋值后不能修改;方法不能被子类重写;类不能被继承。

finally:

finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。

  1. 定义:在异常处理中,finally块是用来指定无论是否发生异常都要执行的代码块。
  2. 用途:无论try块中的代码是否抛出异常,finally块中的代码都会执行,例如关闭文件、释放资源等。

finalize:

  1. 定义:在Java等面向对象的编程语言中,finalize()方法是Object类的一个方法,当垃圾收集器决定回收对象时,会先调用该对象的finalize()方法。
  2. 用途:在这个方法中,你可以定义一些清理资源或执行必要操作的代码,以防止资源泄漏和其他问题。finalize()方法通常在对象的生命周期结束时被调用。

9.*Voliate,(单例模式)

单例模式:

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

特点
 1、单例类只能有一个实例。
 2、单例类必须自己创建自己的唯一实例。

 3、单例类必须给所有其他对象提供这一实例。

优点:

系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能。

缺点:

没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

Voliate:

volatile主要有两层语义:

  1. 内存可见性。
  2. 禁止指令重排序。

在实现单例模式时,通常会将构造函数私有化,并提供一个静态的getnstance()方法来获取单例对象。由于单例对象只会被创建一次,因此需要保证其线程安全性,避免多个线程同时访问导致的并

发问题。

在Java 1.5之前,通常使用双重检査锁定(double-checked locking)来实现单例模式的线程安全性,这种实现方式会在getlnstance()方法中使用synchronized关键字来保证线程安全,但synchronized关键字会影响性能。为了避免synchronized关键字的影响,可以使用volatile关键字来保证单例对象的可见性和原子性,从而保证线程安全性。

具体来说,当一个变量被声明为volatie时,它的值的修改会立即被其他线程可见,避免了多线程访问时出现的问题。在使用双重检查锁定实现单例模式时,使用volatile关键字可以保证在初始化单例对象时,多个线程能够正确地访问和修改变量。如果不使用volatile关键字,则可能出现多个线程同时访问变量导致的并发问题。

需要注意的是,使用volatile关键字不能完全避免线程安全问题,它只能保证可见性和原子性,不能保证有序性和互斥性。在实现单例模式时,需要考虑到多种因素,包括性能、可靠性和安全性等,选择最合适的实现方式。

10.Static的作用

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,

11.*String buffer和String 以及String builder的区别

12.==和equals的区别

13.Java当中的四种引用类型(后续补充)

二.集合


1.*Java当中有那些集合类

2.**HashMap的底层原理(存储结构,put的过程,0.75,8,6,16)


3.*ArryList和LinkdcList的区别

4.HashMap的HashTable的区别

5.*如何使用线程安全的Map

6.ConcurrentHashMap的原理

三.线程


1.*创建线程有几种方式

2.线程的生命周期

3.***线程池的原理以及7个参数是什么(有什么作用),4个拒绝策略是什么

4.线程安全,线程通信

5.*Reentrantlock和synchromied lock的区别

6.synchromied lock 修饰实例方法  静态方法 代码块 分别的含义

7.Sleep和wait的区别

8.什么是反射机制

9.*Cglib的动态代理和jdk的动态代理的区别

10.JVM内存模型(每一步分别放什么内容)

11.垃圾回收算法

12.Java当中的四种引用类型

13.(如何控制线程的执行顺序)

14.*接口和抽象类的区别

15.JDK1.8的新特性

16.什么是双亲委派

17.为什么需要双亲委派


四.Redis


1.Redis为什么快?(单线程,内存)

2.*Redis常用的数据类型(5个)

3.*Redis的持久化策略

4.数据淘汰策略

5.*Redis中的大K问题

五.Mysql


1.sql语句的执行顺序

2.***Mysql索引失效的场景

3.**Sql语句如何优化

4.***Mysql数据库的优化(数据库里加索引一定有效吗?一定效率快吗?)

5.Mysql中索引有哪些类型

6.*B+树索引和Hash索引的区别

7.Mysql为什么使用B+树索引而不使用B-树索引

8.*列举一些Mysql当中常用的聚合函数

9.列举Mysql开窗函数

10.行转列,列转行

11.****Mysql事务的隔离级别

12.*事务的四个特性

13.****Mysql是如何使用MVC解决,脏读,幻读,不可重复读现象的

14.*Mysql的七大日志

15.Union和UnionAll的区别

16.*Mysql中常用的日期函数和字符串函数

六.Linux


1.列举常用的Linux命令

ps , kill(和kill -9的区别), telnet, tail ,  source ,
top* ,grep |(管道符) ,mvn 查看帮助,history,cat,vim ,yum,rpm,ping ifconfig ipconfig
 


http://www.ppmy.cn/ops/13417.html

相关文章

毕业设计注意事项(2024届更新中)

1.开题 根据学院发的开题报告模板完成,其中大纲部分可参考资料 2.毕设 根据资料中的毕设评价标准,对照工作量 3.论文 3.1 格式问题 非常重要,认真对比资料中我发的模板,格式有问题,答辩输一半! 以word…

如何在原生项目中集成flutter

两个前提条件: 从flutter v1.17版本开始,flutter module仅支持AndroidX的应用在release模式下flutter仅支持一下架构:x84_64、armeabi-v7a、arm6f4-v8a,不支持mips和x86;所以引入flutter前需要在app/build.gradle下配置flutter支持的架构 a…

2024HW --->蓝队面试题

这段时间在写横向移动,搞得鸽了很久(内网真的很玄学) 还没写完。。。 但是这不是准备HW了吗。小编也来整理一下自己收集到的题目吧!!! (仅为个人见解,不代表最终答案)&…

React - 基础学习

React基础 React更新视图的流程 是 一层一层查找 到对应的视图做更新 如何生成React工程 // 生成简单的react npx create-react-app react-app// 生成typescript的react npx create-react-app react-app-ts --template typescriptReact的基本能力 父子组件 // 父组…

【C++类和对象】const成员函数及流插入提取

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

Docker搭建Muximux

Muximux 是一个轻量级的门户网站,用于查看和管理家庭影院电脑(HTPC)应用程序。它允许用户通过一个集中的界面访问和管理多个不同的应用程序,而不需要为每个应用程序单独打开浏览器标签页或记住多个URL。Muximux 可以在任何支持PHP…

通过python实现分析出生日期辨识你的星座 出生日期判断星座

目录 一.总体说明 二.完整代码 三.逐行分析 一.总体说明 这段代码的主要功能是根据用户输入的出生日期,判断并输出对应的星座。 首先,定义了一个名为sdate的列表,其中包含了每个星座所对应的日期。接下来,定义了conts列表,存储了星座的名称,以及signs列表,存储了星座…

Typora for Mac:轻量级Markdown编辑器

Typora for Mac是一款专为Mac用户设计的轻量级Markdown编辑器,它以其简洁的界面和强大的功能,成为了Markdown写作爱好者的首选工具。 Typora for Mac v1.8.10中文激活版下载 Typora的最大特色在于其所见即所得的编辑模式,用户无需关心复杂的M…