前言
某天下午五点半突然接到了一个杭州来电,是蚂蚁金服打来的,当时心里一阵发慌,由于还在上班,就和面试官约定6点下班之后再来。挂完电话,心里忐忑得不行,感觉自己这也没准备好,那也没准备好。剩下半个小时完全没有心思再工作了,把常问的HashMap,concurrentHashMap底层看了一下,算是临时抱佛脚吧。一下班,就收拾出发在公司楼下找了个地方等面试电话。
电话面试
六点电话如期而至。先是聊了下大概情况,然后聊了下工作经历。叫我挑选一个自己觉得掌握得最好的项目开始发问。
最开始问了你觉得项目中最难的地方,我毕业了一直在小公司,也没有感觉遇到特别困难的地方,憋了半天憋不出来。
面试官也放弃了,直接问,项目中用到Map集合吧,用到过哪些Map。自己就说了个最熟悉HashMap。但是面试官好像不太想问这个,又问有没有用到过排好序的Map,当时自己脑子短路了,没想TreeMap是排序的,当时竟然一时想不出有排好序的Map,就说了没有排好序的Map,但是可以实现Compareble接口来实现排序。肯定面试官也很无语,这送分题都不会啊!
又问HashMap put方法的时间复杂度,我说因为HashMap底层是数组加链表实现的,如果没有hash碰撞时间复杂度就是O(1),有碰撞最坏情况就是O(n)。然后看到我建立上有写线程池,就问了下创建线程池的具体参数的含义,这个没啥难的,然后又问线程池的缓存队列,然后又问是否自己去实现过缓存队列。最后一问完全不知道咋回答,因为平时都是直接使用现成的。
继续发问,问了下JDK bin目录下的工具除了java javac还有没有用过其他的。又问项目除了开发,有没有用到优化方面的。我想肯定是想问JVM方面的了。就说了下自己在测试环境服务老是启动没多久就挂了,自己调整了下堆内存的大小。其实当时只是试探性地加大了堆内存,根本没有怎么去分析过。
面试官问,你是根据什么觉得要去调整堆内存大小的,自己当时就慌了,因为没有实际做过,所以就说自己在启动项目的时候加了输出GC日志的命令,看到有很多Full GC,所以就调整了。感觉面试官不是很满意。然后又问我你知道JVM垃圾回收机制吗?自己其实对JVM垃圾回收这一块还是挺熟悉的,但是这么一问自己一时不知道怎么回答,就把垃圾收集器说了一下,但是感觉不是很对。后来回来百度JVM垃圾回收机制,感觉都有说到JVM内存结构,对象可达性分析,垃圾回收算法,垃圾回收器都有讲到。其实自己这块挺熟悉的,但是一笼统地问JVM垃圾回收机制当时一直在想我该回答哪一块的内容。
最后面试官问了如果你要让现在做的项目更好,你会添加一些什么功能,但我想了很久也没有想出来。面试官应该也很无语,但是不得不说面试官全程都是态度非常好,电话面试都能感受到面试官是一个又谦虚又有真才实学的人。
最后
通过这次电话面试,我觉得自己还有很多底层知识需要巩固学习,所以最近一直在到处搜集一些Java学习资料以及互联网大厂面试题,在这里我也免费分享给准备面试的Java程序员朋友们包括并发编程、JVM调优、SSM、设计模式、spring等知识技术、阿里面试题精编汇总、常见源码分析等录播视频免费分享出来,需要领取的麻烦点这里自行下载或者是添加QQ1404119194,备注csdn