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

打印 上一主题 下一主题

主题 941|帖子 941|积分 2823

JavaSe

面向对象


  • Java对象创建的流程步骤,和方法

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

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

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

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

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

      • 使用static需要注意什么

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

      • 静态方法和非静态方法的区别


  • 实例化:

      1. class B {
      2.     static B t1 = new B();
      3.     static B t2 = new B();
      4.     {
      5.         System.out.println("代码块");
      6.     }
      7.     static {
      8.         System.out.println("静态块");
      9.     }
      10. }
      11. public class Main {
      12.     public static void main(String[] args) throws Exception {
      13.         B b = new B();
      14.     }
      15. }
      16. //输出什么
      复制代码

  • 重载的重写的区别

    • 构造方法的重载

  • 多态用在哪里,有什么用处。

    • 多态的原理

  • final

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

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

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

  • Java权限修饰符

    • 四个的区别

  • 面向对象的三个特性

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

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

    • == 和equals的区别

      • equals是判断引用是否一样。看是否重写。

        • 默认使用 ==

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

    • finalize方法

      • JVM中自救

    • hashcode方法

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

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

        • 基本类型浅克隆可以,引用类型

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

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

      • Object o = 1L 是怎么存储的


  • 内部类--了解即可:

常用工具类String-Arrays

java原生类中用的最多的类

  • Arrays类(工具类),常用方法

  • 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的方法
          1. StringBuffer和StringBuilder是如何实现可变的呢?底层原理是什么?如何优化
          2. 如果让你来实现StringBuffer和StringBuilder,你会怎么实现?
          复制代码
        • String的+=和stringBuilder哪个性能高?面试官答其实差不多,+=在一行的时候会隐性转换为stringbuilder



  • 基本数据类型和包装类

    • String是什么类型
    • 基本数据类型介绍

      • 基本类型几种,分别占用空间

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

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

    • 包装类,为什么要包装类

    • 包装类常量池

    • 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的作用

    • try/catch机制

      • try finally不用catch行吗
      • finally一种情况下不会执行

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

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


  • 介绍Java集合(容器),什么是集合存什么

    • 几个常用的数据结构的底层原理

      • 特点,存储结构,红黑树。

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

  • 两个大的父类
  • Collection接口

    • 继承了哪个接口:

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

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

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

  • Collections 和 Collection

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

      • 如何获取键值对


    • Map集合的遍历方式:有几种,效率

      • 第一种获取key

        • keySet,用什么承接

      • 第二种,全部转成Set

        • Map.Entry 是什么
        • 怎么写



  • HashMap集合

    • 源码
    • key如何保证唯一

    • 底层结构-哈希表优点

      • 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 冲突的时候为什么采用头插法,有什么缺点(循环链表),头插法和尾插法的区别,扩容

        • 扩容机制的区别,前扩容和后扩容

      • 并发异常

        • 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,比较器类

      • 代码如何写

    • treeSet和treeMap的关系

Queue


  • 常用的方法。
泛型

<ul>什么时候起作用
使用泛型有什么好处 ,理解和应用场景
类方法接口
通配符
<ul>泛型中如何确定上下限(
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表