四面阿里,三面百度,成功斩获阿里offer!分享下经验总结和面试问题(Java岗)

面试过程

最近去阿里的菜鸟国际做了一次面试交流,发现大公司对于面试者的知识结构考核非常严谨,可以作为我们日常工作学习的指导。虽然很多人说面试问到的东西在实际工作中很少用到,甚至有「面试造火箭,工作拧螺丝」的说法。

但从面试中,其实可以看得出来现在的公司对于面试者的知识体系要求。如果我们能在工作中就按着这样的要求去不断提升,那么在面试的时候必然也能游刃有余。

一般来说,阿里的面试会有两轮的技术电面,分别交叉检验你的技术基础。后面还有两轮的现场技术面试,主要检验你的项目经验。但从知识体系的角度来看,阿里面试对于知识的考核可以分为三个层次:对于基础知识的考核、对于项目经验的考核、对于项目深度的考核

一、基础知识考核

在这个层次上,主要考核你对 Java 语言本身原理的理解以及各种框架的原理理解。对于 Java 开发岗位上来说,这些知识点包括但不限于:

  • 集合 HashMap 的原理,与 Hashtable、ConcurrentHashMap 的区别?
  • Java 线程池的核心属性以及处理流程
  • Java 并发包原理、Synchronized关键字、锁
  • 线程的生命周期
  • JVM类加载机制
  • JVM内存模型
  • JVM分代以及垃圾回收机制
  • Spring Bean 容器生命周期
  • Spring AOP 原理
  • Dubbo 请求流程以及原理
  • 数据库 SQL 优化、数据库索引、索引原理
  • ……

看到这么多的知识点,我一下子就懵逼了,这么多得看到什么时候才看得完啊?但后面我想明白了,其实你不需要全部都懂,但需要了解大部分知识点,并且在这大部分知识点中,还需要有部分是了解得非常深入的。如果达到这个水平,基本上都能通过考核。

对于基础知识的考核多出现在阿里的前两轮电话面试上。对于这块,你事前把常见的面试题目看一遍,多面试几次基本上都没有问题

二、项目经验的考核

当你成功通过基础知识的考核之后,你会进入下一关的考验:项目的理解程度。

面试官首先会让你选择一个你最拿手的项目,画出架构图,之后的一切问题都从这个架构图触发。当你画出架构图之后,你肯定需要解释清楚每个模块的作用,每个框架的原理以及与其他框架的区别

例如我就用我做过的一个搜索项目作为经典项目,与面试官探讨

项目中用到了 Kafka 这个框架,那么面试官就会问 Kafka 和 RocketMQ 之间的区别是什么,它们两个有什么不同?
项目中还用到了 Canal 这个阿里巴巴开源的框架,那么面试官自然会问这个东西是干嘛的,原理是怎样的?
项目中还用到了 Zookeeper 作为协调者,那么 Zookeeper 在这个项目中的作用是什么,扮演了什么角色?
对于「项目理解程度」的考核会发生在技术面试的三四轮。在这个层次上,你必须要有一个拿得出手的项目,并且对其中的所有框架以及原理都了如指掌,否则你会被虐惨。

三、项目深度的考核

通过上一轮对于「项目理解程度」的考核后,基本上你对整个项目都会有一个全面的认识,应用层面上的问题基本上不会难倒你了。但在「项目思考深度」的考核上,就不仅仅只是考核应用层面上的问题了

还是用我做过的一个搜索项目作为例子,其中 Canal 这个开源框架暂时是没有实现集群这个功能的,那么面试官就问了:

你如何去改造这个项目,从而实现 Canal 的集群功能?
这个时候,你会发现你懵逼了,因为你从来没有去思考过这个问题。你所有的工作内容都是在想如何使用开源框架,而没有进一步思考这些开源框架好不好,有什么可以改进的地方。
所以,在这一个层次上考核的是你对开源框架的思考深度,这些框架到底好不好,好在哪里,不好在哪里,有什么可以改进的地方。

对于「项目思考深度」的考核同样发生在技术面试的三四轮。在这个层次上,你不仅要对项目本身理解足够深刻,还要跳出项目本身,去思考开源框架本身的问题。

四、总结

当我们回过头来总结,你会发现这三个层次都是层层递进的,而且逐步深入。虽然这是面试中总结出来的经验,但是这却是一个很好的学习指引。读者可以自己自查,看看自己现在是处于哪个层次,这样在工作中也可以不断地向更高层次迈进。

对于我来说,我缺乏的是对于项目的思考深度,很多时候都是业界觉得好,那我就用了。但是作为一个高级开发,甚至是一个即将成为架构师的高级开发来说,你必须知道为什么要用这些框架?它有什么问题,我们能不能做得更好?只有这样,我们才能有所成长。

阿里面试真题:

一面(主要是jvm,并发,锁,数据结构等基础)

  1. 自我介绍(说说自己的擅长及拿手的技术)
  2. 说说treemap和HashMap的区别?HashMap和ConcurrentHashMap的区别?
  3. HashMap底层如何实现(JDK1.8有所改动)?
  4. 说说Hash的一致算法?
  5. 你知道的GC算法和回收策略有哪些?GC的机制是什么?
  6. 垃圾回收器的基本原理?是否可以立即回收内存?怎么样主动的通知JVM进行垃圾回收?
  7. 双亲委派模型机制线程池创建的几个核心构造参数是什么?
  8. 乐观锁和悲观锁?可重入锁和Synchronized?他们都是可重入锁吗?哪个效率更高?
  9. CountDownLaunch和Cylicbarrior的区别以及分别是在哪样场景下使用的?
  10. Http和Https的区别以及Https加密的方式?
  11. 以后的职业规划和想法

二面(主要是数据库,协议 , Spring等 )

  1. 自我介绍,聊下自己认为做得很好的项目!
  2. InnoDB支持的四种事务隔离级别名称是什么?之间的区别是什么? MySQL隔离级别是什么?
  3. 说说事务的特性?讲讲对慢查询的分析?
  4. 你理解的BTree机制?
  5. 有哪些MySQL常用的优化方法?6. Http请求过程, DNS解析的过程?7.三次握手和四次握手的过程?
  6. B+树索引和Hash索引之间的区别?
  7. Spring IOC如何管理Bean之间的依赖关系,怎么样避免循环依赖?
  8. SpringBean创建过程中的设计模式?11.说说AOP的实现原理?
  9. Tomcat的基本架构是什么?

三面(主要是缓存,并发,分布式)

  1. 自己项目中的总结的并发经验
  2. 说说MySQL的锁并发?加锁的机制是什么?
  3. 高并发场景下如何防止死锁,保证数据的一致性?
  4. 集群和负载均衡的算法与实现?
  5. 说说分库与分表设计?
  6. 分库分表带来的分布式困境与对应之策有哪些?
  7. Redis和Setnx命令使如何实现分布式锁的?
  8. 使用Redis怎么进行异步队列?会有什么缺点?
  9. 缓存击穿的概念和解决方案?
  10. Redis的数据结构?线程模型? Redis的数据淘汰机制?
  11. Redis的数据一致性问题12. MQ底层原理的实现?
  12. 阻塞队列不用Java提供的该怎么实现?
  13. 讲讲负载均衡的原理?
  14. 如何实现高并发环境下的削峰、限流?

百度面试真题:

百度一面

  1. 手写ArrayList
  2. 手写进制转换算法,求出一个数的二进制数1的个数
  3. JAVA基础 equals和==
  4. 多线程方式、threadlocal,各种锁,synchronized和lock
  5. 设计模式、spring类加载方式、实例保存在哪、aop ioc、反射机制
  6. 类加载器,双亲委派模型,热部署
  7. jvm内存模型,内存结构、堆的分代算法、堆的分区、gc算法、gc过程。
  8. tcp ip 七层模型 rest接口规范 get和post区别,长度,安全。
  9. tcp ip的arp协议,两个同一网络的主机如何获得对方的mac地址。
  10. 负载均衡、高并发、高可用的架构
  11. mysql的引擎区别
  12. redis缓存,redis的集群部署,热备份,主从备份,主从数据库,hash映射找到知道指定节点。
  13. 了解云计算么,了解云容器docker么,容器和虚拟机的区别

百度二面

  1. 自我介绍 项目中负责哪些 做了哪些
  2. 项目中的数据库备份,主从数据库、集群
  3. 数据库的索引原理,b+树原理,trie树引申,二叉查找树的原理
  4. 海量数据中查找一个单词,分布式计算map reduce ,或者用hsah映射筛选部分结果
  5. java的抽象类和接口区别、java的hashmap,java的内存模型,分区,分代垃圾回收算法。实例、常量放在哪里。
  6. int 4个字节,double 8个字节。
  7. 多线程中的wait和sleep区别,notify的作用
  8. 设计模式了解哪些,写一个观察者模式。实现两个接口,一个是主题一个是观察者,并写出对应方法。
  9. 写一个生产者消费者队列的方法,分别写两个类代表生产者和消费者,并且用队列模拟其生产消费。用while循环和waitnotify可以实现,但我忘记在队列上加synchronize关键字,于是让我再写一题。写的是:输入一个字符串,输入第一个只出现一次的字符,写出来了。
  10. tcp ip的四次挥手 子网掩码的作用, 子网掩码(subnet mask)又叫 网络掩码 、 地址掩码 、子网络遮罩,它是一种用来指明一个IP地址 的哪些位标识的是 主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成 网络地址 和主机地址 两部分。
  11. 了解linux么,说一下linux的内核锁?没接触过。
  12. 有没有用过sed 使用shell脚本写一个将文本中的字符替换掉的脚本,大概说了一下用grep || 替换。没再问linux的

百度三面

  1. 自我介绍
  2. 负责模块,哪些模块,项目一的架构,我说太久了忘了,说最近的项目。
  3. 数据库连接池用的是什么,配置文件呢,数据库驱动怎么下载的,持久层框架呢。
  4. 为什么要用数据库连接池,有什么好处。
  5. java的内存模型,变量和实例存在哪。java栈的作用,java的堆存什么,方法区存什么。
  6. java的分代回收。
  7. 项目如何部署到云主机上,有什么速度提升,为什么有提升,答主要是设备性能和带宽。
  8. tomcat的配置,堆得初始大小是多少,达不知道。
  9. 问遇到过什么难题。
  10. 问在遇到问题时候的办法。
  11. 抗压能力
  12. 优缺点
  13. 接受加班。
  14. 遇到工作问题,同事不配合怎么办。
  15. 快速上手工作的办法。
  16. 平时学习的方法,举几点。
  17. 职业规划

最后
感谢各位程序员同仁阅读。

感谢支持,我会更加努力分享,喜欢的朋友可以关注下,祝大家面试通过拿到心仪offer。
面试题答案解析,直接点击 这里,对,就是这里,回复暗号;CS 即可免费领取。含有各种面试题以及答案解析,Java进阶架构知识点资源。包含但不限于(分布式架构、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等知识点解析)也有各大互联网公司人才,可以交流讨论共同进步。

更多笔记分享

最全最新面试文档分享,先一步了解大型互联网面试题及答案,对面试文档总结感兴趣可以直接点击 这里,对,就是这里,回复暗号;CS 即可免费领取(整理不易)大型互联网企业面试答案获取详情!

猜你喜欢

转载自blog.csdn.net/weixin_50520844/article/details/108697265