采用的是双人抢答形式后互相补充回答,整个面试过程持续了一个半小时左右

环节一:自我介绍

环节二:java基础和数据库基础

  1. String和StringBuilder的区别

  2. List有几类

    1. linkedList和ArrayList的区别
    2. CopyOnWriteArrayList的线程安全
  3. 树与链表的区别

  4. java异常有哪几种

    1. 栈溢出和OOM的场景
    2. 如何改变栈内存大小
    3. 除了内存与栈最大可容纳数有关外,还受什么因素影响
  5. 线程的特性有哪些,线程的创建方式有哪几种

    1. 线程如何返回线程处理的结果值
  6. 停止线程的方式有哪些

  7. volatile的作用,volatile的特性,volatile为什么不是绝对线程安全的

    1. CAS到ABA现象
  8. 为什么hashMap中有使用红黑树而不是其他的树

  9. mysql中的存储引擎有哪些

  10. MyISAM和InnoDB的区别

  11. 在一个自增id的表中,如何最快找到第二大id的数据

  12. 学生表,课程表,课程得分表,请使用语句查询到每个课程中得分最高的学生的名字和他的分数。

  13. 在选择一张1000w数据的表时,使用MyISAM和InnoDB查询,哪个更快,为什么

  14. 如何避免数据库查询过慢。

    1. 在什么情况下,你会设计表的数据冗余(防止join过多)

15.补码的作用

环节三:逻辑与算法

  1. 给你一个单向链表,你如何在最小的时间复杂度内寻找到链表中间下标的对象
  2. 给你一个对象链表,你如何将其中id相同的对象去重(并未重写hashCode方法)
  3. 给你一个整数,怎么样区分他的奇偶性
  4. 一条分布不平均的绳子烧完需要一小时,给你两条一模一样的绳子,如何计算45分钟
  5. 两个瞎子,各自买了一黑一白两双袜子,但回家的过程中被打乱了,请问他们如何才能正确拿到自己的袜子(一黑一白)
  6. 一箱苹果有1000个,如何打包可以在客户来到时选择任意个苹果时,都可以直接不需要打包直接拿走(动态规划)
  7. 一串数字,如何才能最快的判断这串数字里有多少个零。

环节四:项目相关

(在我一个模仿spring框架的项目中提问我注解的知识点)

  1. java原生注解类型有多少种,分别是哪些,说出他们的作用
  2. 你在注入时是如何解决注入的并发问题的。
    1. 那你如何保证你注入的组件是单例的还是多例的
  3. 框架工作时大致的工作流程和原理。

(在我一个使用了mybatis中提问)

  1. mybatis如果字段与数据库字段不统一,你有几种方法可以解决。
  2. mybatis中的一对多查询,有几种方法可以实现。区别是什么。

(关于之前说到io模型,和之前长流跟打器使用bio的一些知识点)

  1. io模型分为几种,他们的区别是什么
  2. 为什么要重构,bio的弊端。

(linux)

  1. linux中你需要知道程序是否在运行,如何编写命令