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

发布时间 2023-09-15 09:54:08作者: Blunt-Razor

JavaSe

  • 变量和运算符:

    • 基本数据类型介绍
      • java中浮点数精度怎么解决,有了解过实现吗,为什么有精度问题
        • BigDecimal,如何判断BigDecimal是否相等。如何进行计算、怎么四舍五入
      • 基本类型几种,分别占用空间
    • int和Integer区别--包装类,int有几个字节。
      • 包装类常量池
      • 怎么判断相等的?为什么不用 == ?
      • Integer缓存是放在哪里的。缓冲池范围
      • integer valueof 和 new有啥区别,谁更快
      • Int i =1 和 integer i=1存储区别。
      • 如何声明一个int的List(不能,只能声明Integer的List)
      • Integer是线程安全的吗,哪些类是线程安全的。是的
      • 给Integer最大值+1,是什么结果
    • Long 缓存池,包装类
      • 数据传输,比如RPC or HTTP,使用数据类型,用基本类型还是包装类型好?
    • switch可以放哪些类型
  • Java自动装箱和自动拆箱

  • 方法参数传递:

    • JAVA中值传递还是引用传递的问题,参数传递都是值传递。
  • 面向对象

    • new一个对象的流程

    • 怎么样唯一确定一个类?如果要加载的两个类的全限定名相同怎么办?

    • json 封装:通过private修饰,通过get和set获取。

      • 为什么要有封装类
    • static和final区别。

      • static表示属于类,只有一个
      • final修饰一个对象是什么不变。final关键字使用
      • static修饰的字段什么时候初始化
      • 对于static变量的理解?static变量分配内存的时候发生在哪个环节?
      • static关键字,static加在类上和不加区别,除了修饰类、属性、方法还有吗?(现在想起还有代码块!)
      • 写一个static main方法,能调用非静态方法吗?如果要调用要怎么调用?为什么不能不创建对象调用?
      • 静态方法和非静态方法的区别
    • final和继承:

      • final修饰的对象,如果是变量,和静态变量,在哪里可以赋值。
      • Java支持多继承吗?从开发的角度说一下为什么不支持多继承
    • 接口和抽象类的区别?应用场景?

      • 两者是否可以实例化
      • set接口可以定义私有成员变量吗
    • 多态用在哪里,有什么用处。

    • 实例化:

      • 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();
            }
        }
        //输出什么
        
    • 重载重写,构造方法的重载

  • 面向对象的三个特性,三大特性深层次。

    • 说一说面向对象编程的特点?和面向过程编程有什么区别?
    • 生成一个对象的全过程,对象的组成
    • Java权限修饰符
  • 编程范式:什么是结构化编程、面向对象编程以及函数式编程?


  • 内部类: 匿名内部类访问外部成员变量时编译器会提示需要final修饰为什么


  • java原生类中用的最多的类

API

  • Object 类有什么方法,举出常用方法

    • == 和equals的区别
      • == 判断堆内存地址,指针
      • equals是判断引用是否一样。看是否重写。
        • 默认使用 ==
        • 重写equals 要重写hashcode 自己实现equals要注意什么
        • ava底层集合框架中,为了提高查询效率,往往使用hashCode方法来确定元素的保存位置。 hashcode返回值不同。
      • String str = "i"; String str2 = new String("i") || 不一样-常量池
      • String类里面的equals方法实现看过吗
    • 浅拷贝和深拷贝的区别,深拷贝怎么实现,引用拷贝。
      • 浅拷贝会在堆上创建一个新的对象。引用类型/值类型
      • 基本类型浅克隆可以
      • 引用类型在浅克隆后,要对引用的变量再进行嵌套克隆。
      • 可以看javaguide,引用/浅拷贝/深拷贝的区别 图
  • String类

    • 7-String 存储结构和API 变更

      • string为什么设计成不可变

        • 底层char数组,hash。 final
        • 在 Java 9 之后,String 类的实现改用 byte 数组存储字符串
        • javaguide
          • 私有且final无法继承。
      • String直接赋值 stringpoll 和 new一个对象的区别。

        • String str = new String("abc") 创建字符串对象 --这里涉及两个对象
        • new String("a") + new String("b") 涉及几个对象
        • String a = "str_a", String b = new String(a + "str_b"); 创建了几个对象
      • String 的最大长度

      • 字符串常量池 --字面量

        • 如何设置大小
        • intern( )方法
        • string的一些题。
        • 内存位置,堆中。
        • 优化常量池的方法:
      • 不可变好处


      • StringBuffer(synchronized)和StringBuilder的区别,和String的区别

        • StringBuilder的方法

        • String是不可变的,那么StringBuffer和StringBuilder是如何实现可变的呢?底层原理是什么?
          如果让你来实现StringBuffer和StringBuilder,你会怎么实现?
          
      • java的string类的设计思想,jdk1.9前后区别。String类,底层实现

      • string底层的char[]数组存储都是两个字节,如果我换成不定长的存储数组会有什么问题,比如字符串 "12我是",12占用两个字节,我是占用应该是6个字节,这样存在什么问题?


  • Arrays类,常用方法

  • DateFormat

    • 正则表达式掠过。

集合框架:单列Collection-双列Map

怎么理解随机存放
那定义一个Object[] o, 那它可以存放各种类型的数据,底层怎么存放的呢
Object o = 1L 是怎么存储的

集合和集合概述、特点存储结构红黑树。java常见容器,如何升级成线程安全的容器

  • 介绍Java集合,说几个常用的数据结构的底层原理

    • 介绍Java里面常见的集合、整体框架,父类之类的
  • Collection--可以看pdf的继承图

    • collection的方法:add clear remove
    • toArray()
    • Collection集合的输出方式:
  • 简单讲讲List和Set的区别(都是接口),List和Set都继承了哪个接口,Map继承了上述接口吗

  • List, Set, Queue, Map 四者的区别

    • List 和 map的实现类 和各自的底层结构
  • List:

    • ArrayList和LinkedList区别,优缺点,底层结构,使用场景。
      • ArrayList:

        • 为什么平时都用arraylist,无需同步

        • 惰性初始化

        • arraylist扩容机制,底层arraycopy函数,删除和加入代价都很大

        • 数组为什么可以随机读取,底层Object[]数组

        • 写时复制 并发安全CopyOnWriteArrayList 写入操作的实现

        • copyOnWriteArrayList

        • ArrayList中删除偶数,不能用remove

        • 多线程往ArrayList中写10万条数据,会出现什么问题

      • LinkedList

        • arraylist对大片的连续内存有很高要求,linkedlist只需要碎片空间
        • LinkedList为什么是双端链表,如果一个链表没有被引用,会被立马删除吗
        • 分别分析一下插入、删除、查找的时间复杂度。LinkedList,增删快查询慢,
        • 可以通过什么数据结构来加快LinkedList的访问
      • 这两个插入哪个快。插入海量数据,arraylist和linkedlist哪个快

      • 数组是否有并发安全问题(如何解决),ArrayList和linkedlist的多线程问题

  • Set:

    • HashSet: hashset是怎么基于hashmap实现的。

      • 如果自己什么设计
    • 如何去重:两步

      • 如果保存的是一个自定义的对象的话,那我这个对象应该是有什么动作吗
    • Set的底层:是哈希表。--即为下面的HashMap

      • 什么时候转为红黑树。--为什么是无序的。
    • LinkedHashSet为什么有序:

      • 多一个顺序存储的链占据空间。
    • HashSet和TreeSet有什么区别?

      • 集合是如何排序的
      • 如果传入TreeMap的key值是对象,那么对象应该满足什么条件(有Comparable接口)
        • 为对象的类//用的集合设置比较器,implements Comparable接口。重写compareTo方法。
        • 代码
        • 比较器底层原理
      • treeSet和treeMap的区别?
  • Queue

    • 常用的方法。
  • Collections的区别

    • 工具类
    • Collections.sort和Arrays.sort:
    • 集合的选用,是否排序
    • collections有什么实现

Map:

  • 集合关系(Collection、Map)

    • Map集合的体系特点。键的特点,有key重复的Map吗。
    • Map是接口,HashMap是实现,用new
    • map集合下常用的子类有哪些/实现类
  • 常用的api

    • 如何获取键值对,keySet( ) 和 .values( )
  • Map集合的遍历方式:有几种

    • 通过键,函数KeySet, entrySet()
    • Iterator<Map.Entry<String, Integer>> iterator = maps.entrySet().iterator();
  • hashmap

    • 特点:

      • key如何保证唯一,是否可为null

      • 是有序还是无序的

    • hashmap在1.7和1.8的区别

    • 底层结构--源码

      • 1.8之前为什么这么设置,解决hash冲突有别的办法吗
      • 阈值初始大小
      • 为什么引入红黑树(为什么不用avl树,而不是BST、B+、堆等等)? 。红黑树自旋条件? 红黑树的性质、红黑树如何调节平衡
    • 成员属性:

      • 什么时候转红黑树,为什么红黑树阈值是8不是6或者10
      • 红黑树会退化成链表吗
      • 为什么负载因子是0.75 ,初始容量
    • 成员方法:

      • Put,如果Key冲突的是怎么处理的?如何判断是覆盖还是加数据?
        • JDK1.7 冲突的时候为什么采用头插法,添加元素怎么确定。头插法和尾插法的区别。循环链表问题
        • 头插的问题,单线程扩容时先遍历数组table,接着遍历table[i]对应的链表。
        • hash去重的方法,hash碰撞的解决方法。(哈希算法有几种、一次性哈希、如何判断这个哈希算法优秀)。hash表怎么实现?答了线性探测,二次探测和开链,追问会在不同情况下会用哪种实现方式。了解一致性哈希吗
      • resize()
      • get流程、怎么哈希
      • hashCode()在HashMap的containsKey()函数中的用法,底层实现
      • hashCode()和equals()有什么作用、区别。
    • 并发异常

      • java的hashmap的fastfail机制。

      • 为什么不是线程安全的。它在什么情况下会出现线程不安全的问题,不安全情况下会出现什么现象?说一下场景

      • 如何线程安全,回答读写锁或者concurrenthashmap

      • 平时使用hashmap要关注那些方面的东西

      • 有措施能让Hashmap变得线程安全吗?除了ConcrrentHashmap和Hashtable呢?

        • 加锁()--synchronize-读写锁-reentrylock
          • 读写锁的实现原理
        • cas(乐观锁)cas和syn加在哪
  • hashmap和treemap有什么区别,什么时候用?treemap底层数据结构是什么?

  • concurrentHashmap


泛型的理解和应用场景

  • 使用泛型有什么好处

  • 类方法接口

  • 通配符

    • 泛型中如何确定上下限(<? extends T> <? super T>
  • 泛型检查

异常:

  • 基本介绍
    • exception和error区别。
    • 异常继承的根类, 根类有哪些方法
    • 编译期异常和非编译期异常区别
  • 编译异常:
    • Exception , throws,的作用
    • try/catch机制
      • try finally不用catch行吗
  • 运行时异常:
    • 遇到过哪些异常,(空指针在哪遇到了、SQL 异常、类型转换异常)
    • Exception有哪些,从上往下说说看
    • 谈谈 Java 异常处理机制
  • final/finally/finalize的使用?

IO:

  • File

    • 打开一个文件的流程
  • IO stream

    • 序列化Serializable。
    • 实现 Serializable 的类修改了类包的路径,那么反序列化还能成功吗?使用 JSON 可以反序列化成功吗?上面的问题,使用 Object write 的方式会不会有影响
    • serializable 接口的作用 是否实现这个接口在类上有什么区别。自带的序列化方法有哪些
    • 序列化的兼容性问题
    • jdk的stream,Java streamAPI,parallel StreamAPI
  • IO了解吗

    • BIO、AIO、NIO用过吗。谈一下 I/O 多路复用,基于IO多路复用(epoll),两个线程之间如何通信。epoll的优点。
    • 异步IO是如何实现的
  • IO流都有哪些、继承关系和应用场景;Stream流的实现原理;

反射

  • 反射的理解
    • 能干吗
    • 原理和思想
    • 优缺点
  • 应用场景:什么时候用,怎么用,用过吗
    • 第一步: 获取类
    • 获取构造: 你自己写过反射吗,反射可以调用私有构造函数吗
      • 私有构造器
    • 一个类的某个属性是私有的没有get/set方法,如何通过反射获取,代码上怎么具体实现
  • 获取私有变量要怎么做,获取注解的信息要怎么做,反射效率低将反射结果进行缓存有遇到过吗

设计模式

  • 单例模式:

    • 两种分类:

      • 区别
      • 分别应用在什么场景下
    • 饿汉式:

      • 静态变量的方式:
    • 懒汉式:

      • 静态内部类实现单例模式为什么属于懒汉式的?
      • 安全吗,如何实现安全,锁加在哪
      • 加锁比较影响性能,那除了加锁以外有什么其他方法吗
      • 单例模式双check,太慢
        • 为什么进行第二次非null判断
      • 如何实现线程安全单例模式?
    • 手写单例模式,各种情况,怎么保证线程安全

      • 为什么要用DCL,为什么要用volatile,为什么要用synchronized,为什么要锁住类的.class
  • 代理模式:

    • 代理模式的作用:代理包一层,通过代理对象访问原始对象

      • 代理对象,访问对象
    • 静态代理

    • 动态代理原理

      • 什么时候用
      • JDK代理 和 CGLib 对比区别
        • 优缺点
        • 常用处CGLib在哪用到了
        • 如果被代理对象不实现接口怎么实现代理
      • 具体实现
    • 方式对比:

      • 优缺点
      • 动态代理和静态代理区别
  • 观察者模式,说说怎么设计相应的类

  • 工厂模式

  • 装饰器模式,代理模式,以及两者的区别

  • 适配器和装饰器模式的区别?装饰者模式和策略模式的区别

  • OOP设计模式六大原则

  • 说一下模板模式,举一些例子

  • 实现工厂模式

  • 手写单例模式

  • 责任链模式在哪里用到了


  • Java新特性

为什么要重构,重构解决了什么问题,怎么检验重构的正确性

java开发规范,看过阿里的开发规范吗

类加载顺序,构造器,代码块,哪个先加载