华为云 BU 校招 Java 后端开发,一面、二面面经

不知道是个例还是整个华为,至少我面的这个部门给我的面试体验相当好,面试官会当场给我比较积极的反馈,面试结束后 5 分钟内就发短信通知通过。美中不足的是笔试后面还有很长很罗嗦的性格心理测评题,个人说实话比较反感这类测评以及行测题,但总之瑕不掩瑜。

一面

二面

自我介绍,聊了聊非科班毕业后的一些不相干的工作经历,坦陈自己缺乏项目经验,于是面试官后面就问了些八股文。运气还不错,面试官的引导技巧也很在线,卡壳的地方也能引导我回答出来。

Java基础

  1. 了解 Java 哪些数据结构?
  2. 说说 HashMap 实现吧?
  3. 了解一致性 Hash 吗?
  4. 线程同步有什么需要注意的地方?
    设置锁,限制对资源的争夺。(多线程这块了解不多)
  5. 对 Java 的锁有什么认识吗?
    回答面试官对 Java 当中多线程不熟,锁的具体实现不了解,但是粗略了解一些操作系统涉及的锁的抽象原理,于是面试官让我从抽象的角度介绍锁。
    回答锁其实就是对某一种资源(某个对象、某个代码块)的分配限制,如果资源能分配若干份,锁就表现为信号量,如果资源是唯一的,锁就表现为二元互斥量。竞争中获得锁的线程可以成功获得对应资源进入下一步执行,而没能获得锁的线程通常会阻塞于同步队列中等待下次分配。
  6. 什么是乐观锁、悲观锁?
  7. 自旋锁了解吗?
  8. 你对 JVM 比较了解,说说 Java 什么内存区域是线程共享的,什么又是私有的?
  9. 如果写了一个方法,里面有一些 private 修饰的变量,这些字段可能存在内存中什么区域?
    没回答好,说了基本数据类型应该放在栈里(但不确定),对象(类的实例)放在堆里。在面试官的引导下回答出来。
  10. 栈里还有什么东西?
    有点懵,前面说过了栈里主要放了局部变量表,其他我也想不起来。面试官提示说栈里有栈帧,我黑人问号。。。赶忙抢答,栈帧对应了线程的方法执行巴拉巴拉,调用方法对应压入栈帧、方法返回对应弹出栈帧。
  11. 说到 JVM 就不得不提 GC,你对 GC 有哪些认识呢?
    这个问题被虾皮面试官问倒一次,圣斗士不可能在同一条阴沟里翻船第二次,详见这篇面经总结 Java 基础知识、JVM、Java多线程 里面我对 GC 理解的总结。反正我答完以后当场征服面试官,表示这个回答很棒,很系统。

数据库

  1. 数据库有哪些事务的并发隔离级别?MySQL 的默认隔离级别?
  2. 数据库索引的组织形式,聚簇和非聚簇的区别。
  3. 索引是越多越好吗?
  4. Redis 的跳表了解吗?
  5. 跳表各节点的数据项存在哪里?

算法题

单向链表的倒数第 n 个节点,本地 IDE 共享屏幕作答。链表类的题不方便现场调试,简单写完核心逻辑(快、慢指针)、讲解完思路就过关了。

反问、闲聊

略。

终面

终面虽然是部门大主管面的,但是不涉及技术问题,因此也没什么好分享了,大家尽量展现出自己自信积极的一面应该就问题不大。