java面试题

发布于:2025-09-07 ⋅ 阅读:(16) ⋅ 点赞:(0)

来自牛客

1. javase

1.1. 抽象方法

  1. 抽象方法只有声明,没有具体实现。
  2. 抽象方法的abstract和public可以省略,并且不能是private,static和final的。
  3. 抽象方法主要用于继承后重写。
  4. 抽象方法只能存在于抽象类和接口中。

1.2. 抽象类

  1. 抽象类不能实例化。
  2. 抽象类可以包含抽象方法和具体方法。
  3. 子类必须实现抽象父类的所有抽象方法,否则子类也为抽象类。

1.3. 接口

  1. 接口中只有常量(public static final)和抽象方法,新版本新增默认方法和静态方法。
  2. 一个类可以实现多个接口。
  3. 无构造方法。

1.4. final

  1. 表示变量不可变,方法不能重写,类不可继承(如string类)。
  2. 修饰的引用变量不能指向其它对象,但是对象内部可以改变。
  3. 使用场景:关键方法不被子类修改;工具类通用方法;私有方法默认final。

1.5. static

  1. static声明的东西属于类,而不是实例对象,通过类名调用。
  2. static方法只能访问静态成员变量和静态方法。

1.6. 内存空间

  1. java内存空间5部分:栈,堆,本地方法栈,方法区,程序计数器。
  2. 堆heap:所有new的东西都在堆里;gc管理的区域;所有线程共享堆内存。
  3. 栈stack:每个方法调用对应一个栈帧;无需gc;每个线程独立分配栈。
  4. 方法区:存储类元数据(父类名,全限定名等),运行时常量池,静态变量,即时编译代码。

1.7. 权限管理

  1. 访问权限是本类中的成员对其他类的可见性。
  2. public:任何地方可见
  3. protected:类内,同包,子类可见
  4. 包访问(默认):类内,同包可见
  5. private:类内可见

1.8. String

  1. string不可变,stringbuffer和stringbuilder可变。
  2. string和stringbuffer线程安全,stringbuilder非线程安全。
  3. string性能低,stringbuffer性能中,stringbuilder性能高。
  4. 少操作用string,单线程用stringbuilder,多线程stringbuffer。

1.9. object类

  1. object是所有对象的父类。
  2. object中有tostring(),equals(),hashcode(),getclass(),clone()等默认方法。

1.10. equals()

  1. ==基本类型比较值,引用类型比较内存地址;equals()默认比较内存地址,和==相同。
  2. equals()经常重写后比较实际值,而不是地址。

1.11. hashcode()

  1. 重写equals()就要重写hashcode(),若equals()相等则hashcode()必须相等(反之不一定成立)。
  2. hashcode()计算对象哈希值,用于哈希表快速定位。

1.12. 包装类

  1. 每种基本数据类型都有对应的包装类,从而支持面向对象操作。
  2. 包装类的作用:支持对象操作,可以调用方法;可以为null;提供了工具方法,如类型转换,字符串处理等。
  3. 自动装箱是基本数据类型自动转换为包装类对象;自动拆箱是包装类自动转换为基本数据类型。
  4. 包装类会缓存一些常用对象,如-128到127。
  5. 包装类不可变,改变值后是返回新对象。
  6. java集合(如arraylist,hashmap)只能存储类对象,不能存储基本数据类型。
  7. 不能有默认值,避免默认值的影响。

1.13. 集合

在这里插入图片描述

  1. list有序可重复,set无序不可重复,queue队列,map映射关系。
  2. 集合只能存储引用类型,不能存储基本数据类型。
  3. 集合优点(对比数组):可以存储不同类型元素;长度不固定;提供了许多操作方法。
  4. 线程安全的集合:ConcurrentHashMap、CopyOnWriteArrayList、BlockingQueue和ConcurrentSkipListSet;非线程安全的集合:HashMap、ArrayList、LinkedList和HashSet。

1.14. HashMap

  1. hashmap的底层是数组+链表/红黑树,数组的每个元素就是链表/红黑树。
  2. 链表长度>=8并且数组长度>=64时,链表转换成红黑树。
  3. 默认容量16,负载因子0.75,元素数量超过容量x负载因子时数组扩容成2倍。

1.15. 重载和重写

  1. 重载:在同一类中,方法名相同,但参数列表不同(类型,数量,顺序),与返回值无关。编译时多态。
  2. 重写:子类和父类中,方法名,参数列表和返回值都必须相同,访问权限不能缩小,异常等级不能扩大。运行时多态。

1.16. 泛型

  1. 在类,接口和方法中定义类型占位符,编译时检查,避免了运行时的强制类型转换。
  2. 类型擦除:java的泛型只存在于编译阶段,运行时没有泛型类型的对象,所有的对象都是普通类的。

1.17. 反射

  1. 反射是在运行时检查和修改代码的能力,可以获取运行时类的信息,存在类的属性和方法。

1.18. 拷贝

  1. 引用拷贝:复制对象地址,新旧变量指向同一对象。
  2. 浅拷贝:常用clone()重写,复制新对象和基本数据类型,引用类型仍指向原对象。
  3. 深拷贝:新旧对象完全独立。

1.19. 序列化

  1. 序列化:将对象转换成字节流或文本等方便存储和传输的格式;反序列化:将序列化的数据转换成对象。
  2. 常见序列化格式:json、xml、protobuf

2. javaweb

2.1. servlet

  1. servlet的工作是接收前端请求,查询数据库,生成动态网页内容,没有servlet只能返回静态网页。

2.2. tomcat

  1. 对servlet的封装。

3. 数据库mysql

4. 消息队列

5. redis

6. spring


网站公告

今日签到

点亮在社区的每一天
去签到