面试之前,我又特地去了解一下这家公司,据说这家公司18年秋招的 hc 就非常少,春招我估计只有个位数的 hc,但是我还是抱着面经++的心态来面对这次面试。

本来说好的是4:30开始面试,35分来电话的时候我心里一惊,然后告诉我我要拖到五点,难道这家公司多出几个面试官的钱都出不起吗。很快五点就到了,早就听闻面试官是个女的,果不其然,虽然我对程序媛并没什么感觉。

一开始,并没有让我自我介绍,面试官似乎并不怎么看我的简历。下面开始说问到的问题:

  1. HashMap 的数据结构

    这个稍微看过源码的人都应该知道是 数组+链表,Java8开始引入了红黑树,因此1.8之后是数组+链表+红黑树

  1. 让我实现HashMap

    我就大概说了一下数据结构,put方法大概说了一下,然后面试官就没有让我往下说了,感觉自己表达可能的并不是很清楚。

  1. 到这里开始问了JVM,首先问的是内存模型

    内存模型我就答了虚拟机栈,本地方法栈,Java堆和方法区,面试官并没有问的特别深。

  1. Java new出来的对象存放在哪里

    这题已经是很基础了,我答的是存在堆里面

  1. 垃圾收集算法

    • 标记清除

    • 复制

    • 标记整理

    • 分代收集

  1. 虚拟机控制内存的参数是什么

    初始内存:-Xms

    最大内存:-Xmx

  1. 如何查看jvm虚拟机的进程

    jps

  1. 如何杀死一个Java进程

    kill

  1. 如何查看虚拟机的内存使用情况

    这里我回答的是使用 jconsole 和 visualVM工具

  1. 给我十亿条整数数据在32位系统上面进行去重

    面试前我就听说这个这个女面试官喜欢问这个问题,果不其然。

    我的思路是对 hash 值对N取模,然后分别放到N个文件中,这样所有的相同的数据就一定在同一个文件中,然后分别对这些文件去重。这样能大大地提高去重的效率。

    我以为我答的还不错,然后面试官又补充了一句:如果十亿数据里面有非常大的一部分都是重复的,那又该如何处理?

    对于这个问题当时并没有想到合适的答案,但如今回想起来,应该使用bitmap

  1. 问我懂不懂SpringMVC,Nginx

    niginx了解的不是很多,不敢说懂,只说了懂SpringMVC。然后面试官让我讲SpringMVC,当时有点懵,SpringMVC的东西也不少,到底想让我讲一些什么。总之这一部分答得不太好,主要感觉问的问题太泛了,只希望面试官可以问的稍微具体一点

  1. 数据库的话就问了我MySQL的数据结构

    数据结构的话肯定就要答B+树了,然后面试官让我讲一下B+树,这个地方我答的不太好,总之是基础打的不够牢固吧。这个知识点下次会进行总结。

  1. Http的状态码

    很惭愧只能说出最经常碰见的几个:

    • 200(请求成功)
    • 404(没找到请求的页面)
    • 500(服务器程序出错)

    但是当面试官问我知不知道以3开头的状态码,这个我确实没有特意去记过,很遗憾。

  1. 接下来就是紧张刺激的手撕代码的环节了,这个环节撕得我有点痛苦(算法有点硬伤)

    问题是给我一个非完全二叉树,要求奇数层从左往右层序遍历,偶数层从右往左遍历。我大致思路有了,但是时间有点紧迫,最后讲的并不是特别好,面试官最后赶时间就结束了

最后面试官让我等HR通知,大约过了半个小时,我邮箱的垃圾箱里面就出现了一封拒信。有点透心凉,但是心里多少有底,只能说是面经+1了。