乐趣区

关于面试:精心分享10道大厂高频java面试题助你备战金三银四

面向对象

面向过程更重视于事件的每一个步骤和程序,面向对象则更重视于事件有哪些参与者以及各须要做什么

JDK JRE JVM

jdk:Java 开发工具包
jre:Java 运行时环境
jvm:Java 虚拟机

== 和 equals

== 比的是栈中的值,根本类型是变量值,援用类型是堆中内存对象的地址
equals:object 默认也是采纳 == 比拟,通常会重写,重写后 equals 其实是比拟两个字符串的内容

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

 String str1 = "hello";
 String str2 = new String("hello");
 String str3 = str2;  // 援用传递
 System.out.println(str1 == str2);  //false
 System.out.println(str1 == str3);  //false
 System.out.println(str2 == str2);  //true
 System.out.println(str1.equals(str2));  //true
 System.out.println(str1.equals(str3));  //true
 System.out.println(str2.equals(str3));  //true

简述 final 作用,为什么局部变量外部类和匿名外部类只能拜访部分 final 变量

final 能够润饰:类(不可被继承)、办法(不可被重写)、变量(不可更改值)

String、StringBuilder、StringBuffer

String 是 final 润饰的,不可变,每次操作都会产生新的 String 对象
StringBuilder 和 StringBuffer 都是在原对象上操作,StringBuffer 是线程平安的,StringBuilder 线程不平安,
性能:StringBuilder>StringBuffer>String

重载和重写的区别

重载:产生在同一个类中,办法名必须雷同,参数类型不同,个数、程序、不同,办法的返回值和拜访修饰符能够不同,产生在编译时;
重写:产生在父子类中,办法名、参数列表必须雷同,返回值范畴小于等于父类,抛出异样方位小于等于父类,拜访修饰符范畴大于父类,富国父类办法为 private 则不能重写该办法。

接口和抽象类

  • 抽象类能够存在一般成员函数,而接口中只能存在 public abstract 办法
  • 抽象类中的成员变量能够时各种的,而接口中成员变量只能是 public static final
  • 抽象类只能继承一个,而接口能够实现多个
  • 接口的设计目标是对行为进行束缚,而抽象类的设计目标是代码复用,
  • 抽象类是对类实质的形象,表达式是 is a 的关系,而接口是对行为的形象,表达式是 like a 的关系,接口的外围是定义行为,即实现类能够做什么,至于主体是谁,如何实现的,接口并不关怀。

- 应用场景:当你关注一个事物本质的时候,用抽象类,当你关注一个操作的时候,用接口。

List 和 Set 的区别

List:有序,按对象进入的程序保留对象,可反复,可容许多个 null 元素对象,取元素能够应用 iterator 接口获得所有元素,在遍历一遍,还能够应用 get(int index)获取指定下标的元素
Set:无序,不可反复,最多容许有一个 null 元素对象,取元素只能用 Iterator 接口获得所有元素,再逐个遍历各个元素
Iterator 取值遍历:

       // 遍历 Set
       Set<String> set = new HashSet<>();
       set.add("1");
       set.add("2");
       set.add("3");
       set.add("3");
       Iterator<String> iterator = set.iterator();
       while (iterator.hasNext()) {String nest = iterator.next();
           System.out.println(nest);
       }

hashCode 和 equals

ArrayList 和 LinkList 的区别

ArrayList:基于动静数组,间断内存存储,适宜下标拜访(随机拜访),扩容机制:因为数组长度固定,超出长度时须要新建数组,而后哦将老数组的数据拷贝到新数组,如果不是尾部插入数据还会波及到元素的挪动(往后复制一份,插入新元素),应用尾插法并指定初始容量能够极大晋升性能,甚至超过 LinkList(须要创立大量 node 对象)
LinkList:基于链表,能够存储在扩散的内存中,适宜做数据插入及删除操作,不适宜查问:要逐个遍历 LinkList 必须应用 Iterator,不能应用 for 循环,因为每次 for 循环体内通过 get(i)获得某一元素时都要对 list 从新进行遍历,性能耗费极大。

HashMap 和 HashTable 有什么区别,HashMap 其底层实现是什么?

区别:
(1)hashmap 办法没有 synchronized 润饰,线程不平安,HashTable 线程平安
(2)hashmap 容许 key 和 value 为 null,而 HashTable 不容许
底层实现:数组 + 链表实现

如何实现 IOC 容器

1、配置文件,配置包扫描门路
2、递归包扫描获取.class 文件
3、反射,确定须要交给 IOC 治理的类
4、对须要注入的类进行依赖注入

什么是字节码?采纳字节码的益处?

Java 源码 —-> 编译器 —–>jvm 可执行的 Java 字节码(即虚构指令)——>JVM——->JVM 中解释器 ——–> 机器可执行的二进制机器码 —-> 程序运行

采纳字节码的益处:java 语言通过字节码的形式,在肯定水平上解决了传统解释型语言执行效率低的问题,同时又保留了解释性语言可移植性的特点,所以 Java 程序运行时比拟高效,而且,因为字节码并不专对一种特定的机器,因而,Java 程序无需从新编译便可在多种不同的计算机上运行。

最初

欢送关注公众号:前程有光,支付一线大厂 Java 面试题总结 + 各知识点学习思维导 + 一份 300 页 pdf 文档的 Java 外围知识点总结!
这些材料的内容都是面试时面试官必问的知识点,篇章包含了很多知识点,其中包含了有基础知识、Java 汇合、JVM、多线程并发、spring 原理、微服务、Netty 与 RPC、Kafka、日记、设计模式、Java 算法、数据库、Zookeeper、分布式缓存、数据结构等等。

退出移动版