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]