加油,成功通过阿里 P7Java 岗面试,分享一些面试心得
面试流程
先说下面试流程,一般大公司都有 3-4 轮技术面,1 轮的 HR 面。就阿里而言,我共经历了 4 轮技术面,前两轮主要是问基础和项目实现,第 3 轮是交叉面,两个面试官,主要是问项目实现和拓展。第 4 轮是部门老大面,主要就问一些架构、技术和业务的理解、个人发展比较抽象的东西了。
HR 面主要就是跟你聊聊天,看看你的个人稳定性、价值观、主动性之类的,一般 HR 是不会挂人的,但很多人在 HR 面后挂了,原因其实不是你在 HR 面的表现不好(少数情况除外),而是你之前几面的表现一般,比 60 分要高一点(所以没在前面的面试直接挂了你),但是又没达到 80 分,这个时候公司基于 hc、人才配比、与其他候选人的对比等多个维度考虑,最终决定是否给你 offer。
另外要特别说下的是,今日头条对算法的考察会比较多,我面了 4 轮技术,每一轮都会问 1 到 2 个算法题,大概是 leetcode 上 easy 和 medium 难度。所以想去头条的同学最好先去 leetcode 上刷刷题。
要注意的点
简历一到两页为最佳,将项目经历写 2-3 个左右就差不多了,一定要写最有亮点的项目
工作经历的起始时间要写清楚,另外大公司都有背调,不要合并或省略一些比较短的工作经历,影响的可能不只是这次面试,而是之后可能都无法进这家公司
博客没什么好文章,github 没好项目就不要写在简历中了
对于面试官的问题,想清楚再回答,如果觉得需要的时间可能比较长,可以跟面试官说我思考下、我整理下思路之类的
遇到不会的问题直接说不会,不要不懂装懂
遇到比较确定的问题,要有自信一点,有时候面试官可能会故意用怀疑的语气来考察你
面试的过程中注意语速和吐字,本人在做面试官后,发现很多人说话语速很快,或吐字不清,导致原本会的问题也会让面试官觉得你没答到点上(尤其是电话面)
面试过程中可以自信但不要与面试官争执
面试完后不要直接问面试结果
面试保持自信而不自大,曾经问一位候选人说对 hashmap 是了如指掌,结果问到 hashmap 扩容时需不需要重新计算 hash 就懵逼了。对于很多人来说,面试官总有办法把你问倒的。
每次面试后都总结有哪些答的不好的地方,有哪些知识点的盲区,解决掉。
被问到为什么想跳槽的时候,因该从自身发展等角度出发,而不是吐槽前公司。
另外,在求职的过程中也碰到过少数没有素质的面试官,比如一上来就一副很不屑的语气,话没说两句开始 diss 你的项目,给人的体验很不好。所以也请各位面试官或将来要做面试官的同学,能在面试的过程中保持基本的礼貌和尊重,就像在阿里常说的:你面试别人的时候,别人也在面试着你。
最重要的一点,不要因为几次的面试失败就开始怀疑自己,永远记住,面试的结果=实力+运气。有时候你擅长的东西可能面试官根本不会,所以他也不可能花很多时间去问他不懂的东西;有时候可能他问你的你都会,但是可能因为对方提问方式、语气等原因,答的就是不顺畅。
接下来说技术相关的考察。
总的来说,技术相关的考察主要分为两大块,一是基础,二是经验。
基础包括 java 基础、数据库、中间件等,来自于日常的积累和面试前的准备。
经验包括以往做过的项目、解决的问题、以及一些场景题(比如你的项目如果流量大了十倍如何保证可用)。
本文主要说基础,下篇文章将说经验。
基础
以下都是我认为面试中经常会被考察到的知识点的整理,不够完整,但大部分都是常见面试题。
java 基础
集合
集合分为两大块:java.util 包下的非线程安全集合和 java.util.concurrent 下的线程安全集合。
List
ArrayList 与 LinkedList 的实现和区别
Map
HashMap:了解其数据结构、hash 冲突如何解决(链表和红黑树)、扩容时机、扩容时避免 rehash 的优化
LinkedHashMap:了解基本原理、哪两种有序、如何用它实现 LRU
TreeMap:了解数据结构、了解其 key 对象为什么必须要实现 Compare 接口、如何用它实现一致性哈希
Set
Set 基本上都是由对应的 map 实现,简单看看就好
常见问题
hashmap 如何解决 hash 冲突,为什么 hashmap 中的链表需要转成红黑树?
hashmap 什么时候会触发扩容?
jdk1.8 之前并发操作 hashmap 时为什么会有死循环的问题?
hashmap 扩容时每个 entry 需要再计算一次 hash 吗?
hashmap 的数组长度为什么要保证是 2 的幂?
如何用 LinkedHashMap 实现 LRU?
如何用 TreeMap 实现一致性 hash?
线程安全的集合
Collections.synchronized
了解其实现原理
CopyOnWriteArrayList
了解写时复制机制、了解其适用场景、思考为什么没有 ConcurrentArrayList
ConcurrentHashMap
了解实现原理、扩容时做的优化、与 HashTable 对比。
BlockingQueue
了解 LinkedBlockingQueue、ArrayBlockingQueue、DelayQueue、SynchronousQueue
常见问题
ConcurrentHashMap 是如何在保证并发安全的同时提高性能?
ConcurrentHashMap 是如何让多线程同时参与扩容?
LinkedBlockingQueue、DelayQueue 是如何实现的?
CopyOnWriteArrayList 是如何保证线程安全的?
并发
synchronized
了解偏向锁、轻量级锁、重量级锁的概念以及升级机制、以及和 ReentrantLock 的区别
CAS
了解 AtomicInteger 实现原理、CAS 适用场景、如何实现乐观锁
AQS
了解 AQS 内部实现、及依靠 AQS 的同步类比如 ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier 等的实现
ThreadLocal
了解 ThreadLocal 使用场景和内部实现
ThreadPoolExecutor
了解线程池的工作原理以及几个重要参数的设置
常见问题
synchronized 与 ReentrantLock 的区别?
乐观锁和悲观锁的区别?
如何实现一个乐观锁?
AQS 是如何唤醒下一个线程的?
ReentrantLock 如何实现公平和非公平锁是如何实现?
CountDownLatch 和 CyclicBarrier 的区别?各自适用于什么场景?
适用 ThreadLocal 时要注意什么?比如说内存泄漏?
说一说往线程池里提交一个任务会发生什么?
线程池的几个参数如何设置?
线程池的非核心线程什么时候会被释放?
如何排查死锁?
今天整理了一套 5000 页的 Java 学习手册,,新鲜出炉,分享给大家!此手册内容专注 Java 技术,包括 JavaWeb,SSM,Linux,Spring Boot,MyBatis,MySQL,Nginx,Git,GitHub,Servlet,IDEA,多线程,集合,JVM,DeBug, Dubbo,Redis,算法,面试题等相关内容。
领取方式
需要获取得话麻烦一键三连+评论,然后添加 VX(tkzl6666)即可免费领取
一些比较常见出现的问题,顺便列举下:
JAVA
5 个常用的 java-api 包。
String 类中常用的 5 个方法。
API 接口开发的注意事项。
TCP/IP、HTTP 协议。
集合相关的问题(重点)
HashMap、TreeMap、Hashtable、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList 的实现和区别之类的。
上述集合中的那些是线程安全的,那些不是。
在那些场景使用这些集合。
List、Map、Set 三个接口,存取元素时,各有什么特点。
线程相关问题(重点)
创建线程的几种方式。
线程同步的方法。
wait 和 sleep 区别。
Runnable 接口和 Callable 接口的区别。
如何实现线程安全。
框架相关知识(这块反而不多)
Mybatis#和 $的区别.
Hibernate 和 Mybatis 的区别。
Spring MVC 和 Struts2 的区别.
Hibernate 的缓存机制。
什么是 Hibernate 延迟加载.
为什么要用 spring
SQL(主要考察 Group by 和 Order by 相关知识)
查询每个班级成绩最高的学生。
查找出每个班级成绩第二的学生。
按照班级查询每个班上总分前三的学生。
查找入职员工时间排名倒数第三的员工所有信息。
薪水排序后薪水排名在第 2--8 的员工。
按工资进行排名,排名从 1 开始,工资相同排名相同(如果两人并列第一则没有第二名,从第三名继续排)。
用一条 sql 语句取出所有姓名有重复的学员姓名和重复的记录数。
JavaScript/JSP/Servet (这些一般是基础题)
JSP 的内置对象以及作用。
JSTL 的常用标签。
Servlet 的生命周期。
URL 和 URI 的区别。
Ajax 同步和异步的区别。
使用 ajax 发送异步请求的流程。
其它
&和 &&的区别。
==和 equals 的区别。
int 和 Integer 的自动拆箱/装箱相关问题。
IO 和 NIO 的区别。
final、finally、finalize 的区别。
重载(Overload)和重写(Override)的区别。
String、StringBuffer 和 StringBuilder 的区别。
如何实现浅克隆和深克隆。
单例模式的实现以及最优。
排序的实现(冒泡、选择、快速等)。
去除重复的元素(实际是重写 equals 和 hashcode)。
需要获取得话麻烦一键三连+评论,然后添加 VX(tkzl6666)即可免费领取
评论 (1 条评论)