java面试题以及答案整理(持续整理中)

一、Java 基础

1.JDK 和 JRE 有什么区别?

https://www.cnblogs.com/yangming1996/p/8508187.html

2.== 和 equals 的区别是什么?

https://blog.youkuaiyun.com/qq_37358860/article/details/100149986

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不对,两个对象的 hashCode()相同,equals()不一定 true。

https://blog.youkuaiyun.com/qq_35771266/article/details/91345052

4.final 在 java 中有什么作用?

final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。

特征:凡是引用final关键字的地方皆不可修改!

(1)修饰类:表示该类不能被继承;

(2)修饰方法:表示方法不能被重写;

(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

5.java 中的 Math.round(-1.5) 等于多少?

Math.round(1.5)的返回值是2,Math.round(-1.5)的返回值是-1

6.String 属于基础的数据类型吗?

不属于。

Java 中 8 种基础的数据类型:byte、short、char、int、long、float、double、boolean

但是 String 类型却是最常用到的引用类型。

7.java 中操作字符串都有哪些类?它们之间有什么区别?

     String、StringBuffer、StringBuilder

    String : final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
    StringBuffer : 对字符串的操作的方法都加了synchronized,保证线程安全。
    StringBuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append、replace、delete等方法修改字符串。

8.String str="i"与 String str=new String(“i”)一样吗?

   

    String x = "张三";
    String y = "张三";
    String z = new String("张三");
    System.out.println(x == y); // true
    System.out.println(x == z); // false

为什么会输出上边的结果呢,String x = "张三" 的方式,Java 虚拟机会将其分配到常量池中,而常量池中没有重复的元素,比如当执行“张三”时,java虚拟机会先在常量池中检索是否已经有“张三”,如果有那么就将“张三”的地址赋给变量,如果没有就创建一个,然后在赋给变量;而 String z = new String(“张三”) 则会被分到堆内存中,即使内容一样还是会创建新的对象。

9.如何将字符串反转?

使用 StringBuilder 或 StringBuffer 的 reverse 方法,本质都调用了它们的父类 AbstractStringBuilder 的 reverse 方法实现。

10.String 类的常用方法都有那些?

length():求字符串的长度

indexOf():求某个字符在字符串中的位置

charAt():求一个字符串中某个位置的值

equals():比较两个字符串是否相同

replace():将字符串中的某些字符用别的字符替换掉。形如replace(“abc”,”ddd”);字符串中的abc将会被ddd替换掉。

split():根据给定正则表达式的匹配拆分此字符串。形如 String s = "The time is going quickly!"; str1=s.split(" ");

substring():输出一个新的字符串,它是此字符串中的子串,形如substring(3,7);它将字符串中的第三个第四个第五个第六个输出,即输出开始(包括开始)到结束减一之间的字符串。

trim():将字符串开头的空白(空格)和尾部的空白去掉。

format():使用指定的语言环境、格式字符串和参数返回一个格式化字符串。

toLowerCase():将字符串中所有的大写改变成小写

toUpperCase():将字符串中所有的小写改变为大写

11.抽象类必须要有抽象方法吗?

https://blog.youkuaiyun.com/qq_35771266/article/details/96852793

12.普通类和抽象类有哪些区别?

  • 抽象类不能被实例化
  • 抽象类可以有抽象方法,抽象方法只需申明,无需实现
  • 含有抽象方法的类必须申明为抽象类
  • 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
  • 抽象方法不能被声明为静态
  • 抽象方法不能用private修饰
  • 抽象方法不能用final修饰

13.接口和抽象类有什么区别?

https://blog.youkuaiyun.com/danteshenqu/article/details/93981157

14.java 中 IO 流分为几种?

https://blog.youkuaiyun.com/zhcswlp0625/article/details/93461137

15.Files的常用方法都有哪些?

Files.exists() 检测文件路径是否存在
Files.createFile()创建文件
Files.createDirectory()创建文件夹
Files.delete() 删除文件或者目录
Files.copy() 复制文件
Files.move() 移动文件
Files.size()查看文件个数
Files.read() 读取文件
Files.write()写入文件

二、容器

16.java 容器都有哪些?

数组,String,java.util下的集合容器

数组长度限制为 Integer.Integer.MAX_VALUE;

String的长度限制: 底层是char 数组 长度 Integer.MAX_VALUE 线程安全的

List:存放有序,列表存储,元素可重复

Set:无序,元素不可重复

Map:无序,元素可重复

17.Collection 和 Collections 有什么区别?

1、java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

List,Set,Queue接口都继承Collection。
直接实现该接口的类只有AbstractCollection类,该类也只是一个抽象类,提供了对集合类操作的一些基本实现。List和Set的具体实现类基本上都直接或间接的继承了该类。

2、java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态方法(对集合的搜索、排序、线程安全化等),大多数方法都是用来处理线性表的。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

18.List、Set、Map 之间的区别是什么?

https://blog.youkuaiyun.com/meism5/article/details/89730079

List:有序集合

Set:不重复集合,LinkedHashSet按照插入排序,SortedSet可排序,HashSet无序

Map:键值对集合

19.HashMap 和 Hashtable 有什么区别?

https://blog.youkuaiyun.com/SongYuxinIT/article/details/82013701

三、多线程

20.创建线程有哪几种方式?

https://www.cnblogs.com/tanyang/p/11176103.html

21.说一下 runnable 和 callable 有什么区别?

1、两者最大的不同点是:实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果;
2、Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛;

https://blog.youkuaiyun.com/const_/article/details/88105721

22.线程有哪些状态?

新建、就绪、运行、阻塞、死亡

https://blog.youkuaiyun.com/qq_42928918/article/details/88794437

23.创建线程池有哪几种方式?

  • newFixedThreadPool

定长线程池,每当提交一个任务就创建一个线程,直到达到线程池的最大数量,这时线程数量不再变化,当线程发生错误结束时,线程池会补充一个新的线程

  • newCachedThreadPool

可缓存的线程池,如果线程池的容量超过了任务数,自动回收空闲线程,任务增加时可以自动添加新线程,线程池的容量不限制

  • newScheduledThreadPool

定长线程池,可执行周期性的任务

  • newSingleThreadExecutor

单线程的线程池,线程异常结束,会创建一个新的线程,能确保任务按提交顺序执行

  • newSingleThreadScheduledExecutor

单线程可执行周期性任务的线程池

    newWorkStealingPool

任务窃取线程池,不保证执行顺序,适合任务耗时差异较大。

线程池中有多个线程队列,有的线程队列中有大量的比较耗时的任务堆积,而有的线程队列却是空的,就存在有的线程处于饥饿状态,当一个线程处于饥饿状态时,它就会去其它的线程队列中窃取任务。解决饥饿导致的效率问题。

24.ThreadLocal 是什么?有哪些使用场景?

https://blog.youkuaiyun.com/meism5/article/details/90413860

25.说一下 synchronized 底层实现原理?

  • 同步代码块是通过 monitorenter 和 monitorexit 指令获取线程的执行权
  • 同步方法通过加 ACC_SYNCHRONIZED 标识实现线程的执行权的控制

https://blog.youkuaiyun.com/meism5/article/details/90413871

四、反射

26.什么是 java 序列化?什么情况下需要序列化?

https://blog.youkuaiyun.com/meism5/article/details/90413987

RabbitMQ

https://blog.youkuaiyun.com/weixin_41847891/article/details/100663850

Redis

https://blog.youkuaiyun.com/fangchao2011/article/details/89360306

https://www.cnblogs.com/jasontec/p/9699242.html

2020-04-23电话面试

1.说一下redis可存储的数据结构,redis的缓存方式;

2.说一下数据库的隔离级别;

3.说一下数据库中索引的用法;

4.说一下rabbitmq与kafka的区别;

5.说一下SpringBoot的启动过程;

6.说一下Arraylist与HashMap区别;

7.说一下linux中常用命令,nginx修改配置文件之后,哪个命令可以验证。

8.说一下java中锁机制。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值