本文素材来源于一位粉丝分享经验,希望能对大家有所帮助。
可能每个程序员都有个大厂梦,我也不例外。最近准备跳槽,前段时间在准备各种面试,也面了几个大厂,包括阿里、拼多多和京东等。但最后,还是没能通过阿里四面,很是遗憾啊。这篇文章来总结一下我在阿里四轮的面试经历,希望能对大家有所启发帮助。
阿里社招一般有四到五轮,我这次的流程是第一轮技术面、第二轮写代码、第三轮boss面、第四轮boss面、第五轮HR面。然而我没能和HR聊上一句······
阿里一面
首先自我介绍一下?参加的比赛用到的技术?Java的集合类有哪些?详细讲List、Set、MapArrayList和HashMap的区别是什么?HashMap如何解决hash冲突?有几大类hash冲突的解决方式?hash函数?红黑树的特点?TreeSet说一下?应用场景?CocurrentHashMap了解?详细说说底层和锁的机制?应用?和HashTable的区别?StringBuilder和StringBuffer的区别?讲到底层和各自应用场景Java的锁都有哪些?偏向锁、轻量级锁、重量级锁、Lock包等都说了说synchronized和Lock的区别?ReentrantLock?什么是线程?线程进程区别?实现线程有几种方式?线程池这块了解嘛?创建线程池的方式?用哪个方式创建比较好?说一说线程池的工作原理?拒绝策略?sleep()和wait()的区别?IO模型了解?BIO、NIO、AIO?快排和堆排?时间复杂度?如果数据量非常大,要进行排序的话直接快排性能不好,怎么进行优化?计算机网络OSI模型都有哪些?TCP和UDP的区别?应用场景?JVM的内存模型说一下?运行时数据区?你了解的垃圾回收算法都有哪些?引用计数和可达性分析区别?什么是索引?索引的作用?InnoDB底层结构?和MyISAM的区别?假设要对sql语句优化,一般从哪几个方面来进行?事务隔离级别有哪几类?各自解决什么问题?当前读和快照读?MVCC机制?undolog?数据库的乐观锁和悲观锁说一下?乐观锁的实现?next-key锁?Spring了解嘛?说一下IoC?AOP?JDK动态代理和CGlib?项目应用?Spring创建的bean默认什么作用域?并发的情况下会不会存在问题?提到threadLocal,又讲到了自己项目的用threadLocal怎么用的。又问那threadLocal存在什么问题?一开始想了半天没想到,停顿了一段时间很尴尬,还好想起来了,内存泄露。反问。如果希望进入贵司的话自己还有什么不足需要改进?面试官很好,指出了有些基础不足,这块确实自己答得不太好,非常感谢一面面试官老师,引导着我回答问题,面试体验很好!
阿里二面
自我介绍说一说项目,深挖讲一下SpringIoCAOP,AOP的原理?项目哪里用了?MyBatis?Dao接口的工作原理?讲到了AOP谈谈你认知中的Redis?RDB、AOF?在项目里怎么用的Redis,谈到自己实现了一个异步事件处理框架,感觉面试官基本都是全程深挖项目。了解RabbitMQ吗?zookeeper?反问二面基本就是问一些偏框架和中间件的知识,以及深挖项目。面试官全程非常耐心和蔼地对话,感觉就是想挖掘出我的亮点,总之体验非常好!非常感谢二面面试官老师!
阿里三面
JVM的编译优化对Java内存模型的理解,以及其在并发中的应用指令重排序,内存栅栏等OOM错误,stackoverflow错误,permgenspace错误JVM常用参数tomcat结构,类加载器流程volatile的语义,它修饰的变量一定线程安全吗g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择说一说你对环境变量classpath的理解?如果一个类不在classpath下,为什么会抛出ClassNotFoundException异常,如果在不改变这个类路径的前提下,怎样才能正确加载这个类?说一下强引用、软引用、弱引用、虚引用以及他们之间和gc的关系zookeeper原理和适用场景zookeeperwatch机制redis/zk节点宕机如何处理分布式集群下如何做到唯一序列号如何做一个分布式锁用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗MQ系统的数据如何保证不丢失列举出你能想到的数据库分库分表策略;分库分表后,如何解决全表查询的问题。三面明显强度提升,主要涉及多线程、JVM和分布式架构,貌似很多程序员的短板都是分布式,我虽然也是,但还是在面试官的指引下答出来了,阿里面试官态度是真的好,非常感谢!!!
阿里四面
四面就比较吃力了,部门经理面试,就是围绕两大块,第一是根据我的项目来提出漏洞,让我解决;第二是他自己设定场景,让我给出解决方案。
第一个还相对简单,主要是倒在了第二方面,因为对电商项目不是很了解,没有足够的经验,当时就感觉可能要凉,果不其然,过来几天在邮件里看到回复信息:您的职业经历与该职位的要求略有差异······
面对这些问题,你又是否能答出来?
笔者就这位粉丝的阿里面试过程,给大家简单分析一下:
1.社招面试,技术问的相对来说更加深入,所以对有些源码还是要了解点,比如多线程、高并发相关的原理,是经常被问到的。JVM就更不用说了,几乎是必问到的。
2.所有的问题都是围绕具体场景,一般大厂都会结合具体场景来问你问题,所以你只会纯理论肯定不行的,你还要知道为什么要用这个技术,以及如何做到高可用等等。
3.以后面试,基本上都会让你写代码的,招软件开发工程师,光会嘴说是不行的,这就要平时抽空多练习了,我指的是练练算法题,而不是那种业务代码。
有了面经,接下来我们要做的就是补齐自己的知识短板!!!
实战Java高并发程序设计
在单核CPU时代,单任务在一个时间点只能执行单-程序,随着多核CPU的发展,并行程序开发变得尤为重要。
本篇主要介绍基于Java的并行程序设计基础、思路、方法和实战。第一,立足于并发程序基础,详细介绍Java进行并行程序设计的基本方法。第二,进一步详细介绍了JDK对并行程序的强大支持,帮助读者快速、稳健地进行并行程序开发。第三,详细讨论了“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍了并行的基本设计模式,以及Java8/9/10对并行程序的支持和改进。第五,介绍了高并发框架Akka的使用方法。第六,详细介绍了并行程序的调试方法。第七,分析Jetty代码并给出一些其在高并发优化方面的例子。
JVM高级特性和最佳实践
目前商用的高性能Java虚拟机都提供了相当多的优化参数和调节手段,用于满足应用程序在实际生产环境中对性能和稳定性的要求。如果只是为了入门学习,让程序在自己的机器上正常工作,那么这些特性可以说是可有可无的;但是,如果用于生产开发,尤其是大规模的、企业级的生产开发,就迫切需要开发人员中至少有一部分人对虚拟机的特性及调节方法具有很清晰的认识。所以在Java开发体系中,对架构师、系统调优师、高级程序员等角色的需求一直都非常大。学习虚拟机中各种自动运作特性的原理也成为Java程序员成长路上最终必然会接触到的一课。
Zookeeper分布式过程协同技术详解
构建分布式系统并不容易。然而,人们日常所使用的应用大多基于分布式系统,在短时间内依赖于分布式系统的现状并不会改变。ApacheZooKeeper旨在减轻构建健壮的分布式系统的任务。ZooKeeper基于分布式计算的核心概念而设计,主要目的是给开发人员提供一套容易理解和开发的接口,从而简化分布式系统构建的任务。
有多线程、高并发,到分布式架构、JVM调优,这些高频面试文档等学习资料,助你更加系统的提升进阶,不要留下明显短板,因为那就将是你的致命破绽。
笔者在这里已经帮大家打包整理好了这些文档,有需要深度了解学习的朋友,请帮忙分享此文章,并