尚未崩坏 发表于 2023-12-3 23:47:46

25届实习/秋招-java面试-JavaSe面试题整理-牛客网近一年

JavaSe

面向对象


[*]Java对象创建的流程步骤,和方法

[*]new初始化过程,和反射相比谁更快?

[*]怎样唯一确定一个类?如果两个类的全限定名相同怎么办?
[*]为什么要有封装类
[*]static和final区别。

[*]static表示属于类,只有一个
[*]static修饰的字段什么时候初始化,放在哪

[*]对于static变量的理解,有什么用
[*]static变量分配内存的时候发生在哪个环节?

[*]static加在类上和不加区别,除了修饰类、属性、方法还有吗? 代码块

[*]使用static需要注意什么

[*]写一个static main方法,能调用非静态方法吗?如果要调用要怎么调用?为什么不能不创建对象调用?

[*]静态方法和非静态方法的区别


[*]实例化:

[*]class B {
    static B t1 = new B();
    static B t2 = new B();
    {
      System.out.println("代码块");
    }
    static {
      System.out.println("静态块");
    }
}
public class Main {
    public static void main(String[] args) throws Exception {
      B b = new B();
    }
}
//输出什么

[*]重载的重写的区别

[*]构造方法的重载

[*]多态用在哪里,有什么用处。

[*]多态的原理

[*]final

[*]final修饰变量和静态变量在哪里可以赋值
[*]final修饰类、方法(重写)、字段、对象的作用,fin al修饰一个对象是什么不变。
[*]final可以修饰接口吗。不可
[*]final修饰变量 不能改写 修饰list集合,可以加数据吗

[*]继承:Java支持多继承吗?从开发的角度说一下为什么不支持多继承
[*]接口和抽象类的区别?应用场景?

[*]普通类和抽象类区别,可以被new吗
[*]抽象类可以实现接口吗 -- 可以
[*]两者是否可以实例化
[*]set接口可以定义私有成员变量吗
[*]接口:多继承

[*]Java权限修饰符

[*]四个的区别

[*]面向对象的三个特性

[*]和面向过程编程有什么区别?
[*]什么是结构化编程、面向对象编程以及函数式编程?

[*]Object 类有什么方法--举出常用方法

[*]== 和equals的区别

[*]equals是判断引用是否一样。看是否重写。

[*]默认使用 ==

[*]String类里面的equals方法实现看过吗,源码解析
[*]自己实现equals要注意什么

[*]finalize方法

[*]JVM中自救

[*]hashcode方法

[*]什么时候要重写hashcode

[*]java底层集合框架中使用hashCode方法来确定元素的保存位置。


[*]浅拷贝和深拷贝的区别,深拷贝怎么实现,引用拷贝。

[*]深拷贝会在堆上创建一个新的对象。

[*]基本类型浅克隆可以,引用类型

[*]引用类型在浅克隆后,要对引用的变量再进行嵌套克隆。
[*]可以看javaguide,引用/浅拷贝/深拷贝的区别
[*]浅拷贝

[*]Object[] o, 可以存放各种类型的数据,底层怎么存放的

[*]Object o = 1L 是怎么存储的


[*]内部类--了解即可:

[*]匿名内部类是局部内部类
[*]匿名内部类访问外部成员变量时编译器会提示需要final修饰为什么

常用工具类String-Arrays

java原生类中用的最多的类

[*]Arrays类(工具类),常用方法

[*]特性,扩容
[*]Java的sort是怎么实现的?数据量阈值具体是多少?

[*]String类

[*]常用方法和构造,valueOf
[*]java7 String 存储结构和API 变更

[*]string为什么设计成不可变,好处

[*]private且final无法继承。
[*]java的string类的设计思想,jdk1.9前后区别。

[*]底层char / byte,在 Java 9 之后,String 类的实现改用 byte 数组存储字符串
[*]解释

[*]换成不定长的存储数组会有什么问题, "12我是"12占用两个字节,我是占用应该是6个字节,这样存在什么问题。
[*]string为什么不能是基本数据类型

[*]String直接赋值 stringpoll 和 new一个对象的区别。

[*]String str = new String("abc") 创建字符串对象 --这里涉及两个对象
[*]new String("a") + new String("b") 涉及几个对象
[*]String a = "a", String b = new String(a + "b"); 创建了几个对象
[*]String str = "i"; String str2 = new String("i")   一样吗

[*]字符串常量池

[*]字面量,字面量是对象吗,能调用方法吗
[*]如何设置大小
[*]intern( )方法, 见JVM
[*]内存位置在哪

[*]方法区-元空间- 本地内存
[*]探秘位置在哪 -- 真正意义上字符串常量池在堆中存储,元空间可能有引用堆中字符串常量,运行时常量池在方法区中

[*]优化常量池的方法

[*]StringBuffer(synchronized)和StringBuilder的区别和String的区别

[*]StringBuilder的方法
[*]StringBuffer和StringBuilder是如何实现可变的呢?底层原理是什么?如何优化
如果让你来实现StringBuffer和StringBuilder,你会怎么实现?
[*]String的+=和stringBuilder哪个性能高?面试官答其实差不多,+=在一行的时候会隐性转换为stringbuilder



[*]基本数据类型和包装类

[*]String是什么类型
[*]基本数据类型介绍

[*]基本类型几种,分别占用空间

[*]成员变量没有手动赋值,系统会默认赋值(局部变量不会)

[*]除了基本数据类型,数组存放的都是对象的引用地址

[*]包装类,为什么要包装类

[*]Number抽象类
[*]非自动装箱和自动装箱拆箱
[*]自动拆装箱会有什么问题
[*]传输对象如RPC/Http要用包装类吗

[*]包装类常量池

[*]Integer的范围,哪些有常量池
[*]常量池是放在哪里的
[*]new Integer()与Integer.valueOf()的区别,谁块
[*]判断相等的为什么不用 == ?

[*]int和Integer区别,int有几个字节

[*]Integer的构造方法。
[*]Int i =1 和 integer i=1存储区别
[*]如何声明一个int的List(不能,只能声明Integer的List)
[*]Integer是线程安全的吗,哪些类是线程安全的
[*]给Integer最大值+1结果
[*]String int Integer直接相互转换 : 静态方法

[*]类都是valueOf,到int不一样。


[*]Long 缓存池,包装类

[*]switch可以放哪些类型

[*]String / int, 但byte,short,char自动转成int

[*]方法参数传递:JAVA中值传递还是引用传递
[*]DateFormat

[*]正则表达式略。

[*]java中浮点数精度怎么解决,有了解过实现吗,为什么有精度问题

[*]判断BigDecimal是否相等
[*]如何进行计算、怎么四舍五入

[*]常量池和包装类的缓存

[*]为什么有常量池,思想
[*]分类,两类。

[*]符号引用和字面值的关系

[*]包装类和常量池的区别

[*]同样思考,为什么是安全的,为什么要安全


异常:


[*]基本介绍

[*]exception和error区别
[*]异常继承的根类

[*]根类有哪些方法,处理错误

[*]Exception有哪些,从上往下说说看

[*]编译期异常和非编译期异常区别

[*]编译时异常是在编译阶段发生的吗
[*]是否必须处理

[*]异常的本质是什么,发生在什么时候


[*]编译异常:
[*]运行时异常:

[*]遇到过哪些异常,(空指针在哪遇到了、SQL 异常、类型转换异常)

[*]谈谈 Java 异常处理机制,异常处理的两种方式:

[*]throws的作用

[*]throw和throws的区别

[*]try/catch机制

[*]try finally不用catch行吗
[*]finally一种情况下不会执行

[*]为什么有些异常需要捕获try catch,有些直接往上抛就可以,面试官提示了一下编译那一块

[*]final/finally/finalize
[*]如何自定义异常
集合框架:


[*]介绍Java集合(容器),什么是集合存什么

[*]几个常用的数据结构的底层原理

[*]特点,存储结构,红黑树。

[*]介绍Java里面常见的集合、整体框架,父接口
[*]如何升级成线程安全的容器--Collections

[*]两个大的父类
[*]Collection接口

[*]继承了哪个接口:

[*]Iterator怎么用
[*]本质是什么,remove的使用。ediary

[*]哪些继承了Collection,特点和函数
[*]常用方法方法:add clear remove toArray()
[*]Collection集合的输出方式
[*]简单讲讲List和Set的区别(都是接口),都继承了哪个接口,Map继承了上述接口吗

[*]List, Set, Queue, Map 四者的区别

[*]List 和 map的实现类 和各自的底层结构

[*]Collections 和 Collection

[*]Collections.sort和Arrays.sort

[*]怎么确保一个集合不可修改

[*]集合的选用,是否排序

[*]如何选

[*]collections有什么实现

List:


[*]List集合的特有方法(List是接口)
[*]ArrayList和LinkedList

[*]区别,底层结构,优缺点和使用场景

[*]为什么都用arraylist

[*]无需同步,大部分尾插

[*]arraylist对大片的连续内存有很高要求,linkedlist只需要碎片空间
[*]ArrayList和LinkedList哪个快

[*]知道容量,还要看位置


[*]ArrayList:

[*]惰性初始化,构造方法

[*]arraylist扩容机制(初始容量,为啥扩容是1.5),底层arraycopy函数,删除和加入代价都很大
[*]一个关于ArrayList扩容的场景题优化扩容,让自己设计增强类去实现。

[*]为什么可以随机读取,

[*]底层Object[]数组,为什么限制只能存一类

[*]应用:

[*]ArrayList中删除偶数,不能用remove
[*]多线程往ArrayList中写10万条数据,会出现什么问题
[*]ArrayList一边遍历一边删除的时候怎么做,remove

[*]写时复制并发安全CopyOnWriteArrayList

[*]写入操作的实现,不适用于哪种场景。参考
[*]Collections/vector


[*]LinkedList

[*]LinkedList为什么是双端链表

[*]便于查找和修改
[*]个链表没有被引用,会被立马删除吗

[*]分别分析一下插入、删除、查找的时间复杂度
[*]可以通过什么数据结构来加快LinkedList的访问

[*]ArrayList和linkedlist的多线程问题如何解决
[*]数组和List的转换方法有哪些

[*]Vector ,扩容
Map:


[*]集合关系(Collection和Map)

[*]Map集合的体系特点。

[*]键的特点,键和值都是什么类型

[*]map集合下常用的子类有哪些/实现类

[*]map接口,HashMap是实现

[*]常用的api

[*]如何获取键值对

[*].values( ),参考


[*]Map集合的遍历方式:有几种,效率

[*]第一种获取key

[*]keySet,用什么承接

[*]第二种,全部转成Set

[*]Map.Entry 是什么
[*]怎么写



[*]HashMap集合

[*]源码
[*]key如何保证唯一

[*]是否可为null,有几个,对并发的影响
[*]是有序还是无序的

[*]底层结构-哈希表优点

[*]Node是什么,里面存了什么东西,hashMap底层是什么数组
[*]contains方法底层用的什么,原理
[*]hashCode()和equals()有什么作用、区别。

[*]key通过hashCode得到hash值(怎么算的,为什么要扰动),怎么到下标-长度,hashMap数组长为什么是2的整数幂

[*]hash值与数组下标的关系

[*]equals的作用,不重复equals比对象的key,什么时候调用。

[*]如果key指向的对象一样不用比较

[*]什么时候要重写hashcode和equals

[*]不重写hashcode的后果,以hashSet/hashMap为例。重写equals必须重写hashcode
[*]map中的key如果是对象并且是我们自己声明需要注意什么

[*]注意

[*]hash碰撞的解决方法,分为开放地址(线性-平方)和链地址法,各自的场景,一致性hash


[*]1.8之前为什么这么设置,解决hash冲突有别的办法吗
[*]数组初始容量,为什么负载因子是0.75 ,怎么扩容

[*]成员属性:

[*]1.8之后:为什么引入红黑树(为什么不用avl树,而不是BST、B+、堆等等)?红黑树自旋条件,平衡自旋怎么做的复杂度多少? 红黑树的性质、红黑树如何调节平衡
[*]什么时候转红黑树,为什么红黑树阈值是8,不是6或者10

[*]红黑树会退化成链表吗,什么时候
[*]转红黑树的数组最小长度(64)见源码,先扩展数组,resize()为短链表


[*]成员方法:

[*]1.8的三个优化:红黑树,尾插,插入扩容逻辑还有位置
[*]Put操作流程,源码

[*]Key冲突的是怎么处理的,如何判断是覆盖还是加数据
[*]插入还要看是链表还是红黑树
[*]JDK1.7 冲突的时候为什么采用头插法,有什么缺点(循环链表),头插法和尾插法的区别,扩容

[*]连环提问
[*]扩容死链-死循环 -- 头插法链表位置会翻转
[*]1.7和1.8都存在数据丢失问题

[*]扩容机制的区别,前扩容和后扩容

[*]并发异常

[*]java的hashmap的fastfail机制。
[*]为什么不是线程安全的。它在什么情况下会出现线程不安全的问题,不安全情况下会出现什么现象?说一下场景

[*]jdk7/8有都什么问题?问题有什么区别?

[*]平时使用hashmap要关注那些方面的东西
[*]有措施能让Hashmap变得线程安全吗?

[*]ConcrrentHashmap,Hashtable,Collections.synchronizedMap




[*]hashmap和treemap有什么区别,什么时候用?

[*]treemap底层数据结构是什么?
[*]怎么实现有序

[*]concurrentHashmap

[*]见JUC

Set:


[*]HashSet:hashset是怎么基于hashmap实现的。

[*]如果自己什么设计
[*]如何去重:

[*]hashcode比较和equals比较
[*]一个自定义的对象的话,那我这个对象应该是有什么动作吗


[*]LinkedHashSet为什么有序:

[*]多一个顺序存储的链占据空间。

[*]HashSet和TreeSet有什么区别?

[*]集合是如何排序的
[*]如果传入TreeMap的key值是对象,那么对象应该满足什么条件

[*]为对象的类//用的集合设置比较器,实现Comparable接口,重写compareTo方法。
[*]比较器底层原理Comparator,比较器类

[*]compare和compareTO
[*]左>右,返回正。怎么区分交换。 一般升序就写左右即可。

[*]代码如何写

[*]treeSet和treeMap的关系

Queue


[*]常用的方法。
泛型

<ul>什么时候起作用
使用泛型有什么好处 ,理解和应用场景
类方法接口
通配符
<ul>泛型中如何确定上下限(
页: [1]
查看完整版本: 25届实习/秋招-java面试-JavaSe面试题整理-牛客网近一年