两个月的准备,从外包公司到成功加入阿里,Java开发三年面试经验总结第一家公司让我入门,进入软件开发行业,学习了一些基础的东西;第二家公司规模小,很多工作都是一个人做的,从产品到开发、测试、运维。我什么都懂,对整个软件开发过程也有很好的理解。但是,为了自己更好的发展,我还是决定去大公司,并在5月初提出辞职。虽然领导劝我留下,但我还是辞职了,然后面试了很多公司,有大公司也有小公司,积累了足够的经验,我就开始往大公司投简历。面了几家公司,终于拿到了一份自己比较满意的offer(已经加入阿里)。做事要三思而后行,职业发展和个人规划都要想清楚再做选择。大公司面试考的是基础和项目经验,而小公司更偏向于项目经验。在这里我总结了一下,给大家一个参考,希望对面临跳槽的同志有所帮助。整体面试事项1.简历要准备好,联系方式要正确、清晰、醒目,项目经历按时间倒序说明,注意描述自己在项目中承担的职责,尽量选择一个简洁的简历模板,毕竟大多数程序员还是喜欢它Plainandsimple。2.推荐boss直聘,我觉得很有用(不是广告)。3.一般整体面试流程是phone->on-site->HR->waiting。4、不要以为HR让你回去等消息就是GG。他们还要和你之前的面试官商量,然后再向领导汇报。如果他们说不着急,可能要和其他候选人比较,所以HR让你回去等。该消息绝对并不意味着您被搞砸了。5.面试前准备好自我介绍。大约需要1分钟。你可以写在纸上,也可以在手机上阅读。到了面试的时候,基本都会把自我介绍背下来。6、准备好基础,基础是万事之本,没有实力也是白搭。7.面试时,可以引导面试官了解你知道的知识(我见过你,他不会问你知道什么)。8、遇到设计题不要着急。面试官不是来让你几分钟就设计出高并发高可用设计模式的完美架构的。他只是想看看你的想法,看看你的适应能力,然后给你一些提示,看看你能不能快速调整。9.offer总会有的,别着急,把面试当成一个沟通的过程。需要准备的知识以下是最近面试印象最深的几个问题,所以就不分公司了,因为没意义,粗略的归类记录一下,暂时只想到这么多,但是要知道,这些问题只是冰山一角,即使知道了发生什么也无所谓,最重要的是扎实的基础和清醒的头脑。Java基础1.HashMap源码,实现原理,JDK8中如何优化HashMap。2、HaspMap的扩容是怎么扩容的,为什么是2的N次方的大小。3、HashMap、HashTable、ConcurrentHashMap的区别。4.极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现。5、HashMap在高并发下不处理线程安全会存在什么样的安全隐患,具体表现在哪些方面。6、java中四种修饰符的作用范围有限。7.Object类中的方法。8.接口和抽象类的区别,注意JDK8的接口是可以实现的。9.动态代理的两种方式及其区别。10.Java序列化方法。11、pass-by-value和pass-by-reference的区别,Java是什么样的,有没有传值引用。12、如果在循环中删除了一个ArrayList,会不会有什么问题?为什么?13、@transactional注解在什么情况下会失效,为什么。数据结构与算法1.B+树2.快速排序,堆排序,插入排序(其实八种排序算法应该都懂3.ConsistentHash算法,一致性Hash算法的应用JVM1.JVM内存结构。2.JVM方法栈的工作过程,方法栈和本地方法栈有什么区别3.JVM栈中的引用与堆中的对象有什么关系4.可以学习逃逸分析技术5.GC、CMS、G1的常用算法垃圾回收过程,CMS有哪两个阶段Stoptheworld,CMS是否会产生碎片,G1的优点6.markclearing和markclearing的理解和优缺点algorithms.7.edensurvivorarea的比例,为什么是这个比例,edensurvivor的工作过程8.JVM是如何判断一个对象是否应该GC,什么类型可以认为是root9.区别strongandweakvirtualreferences之间以及GC如何执行它们10.Java是否可以GC直接内存。11、Java类加载的过程。12.双亲委派模式的流程及优势。13.常用的JVM调优参数。14.转储文件分析。15.Java没有办法主动触发GC(nothing)。多线程1、Java中多线程的实现方式有哪些。2.Callable和Future的理解。3、线程池的参数有哪些,在线程池中创建一个线程的过程。4、volatile关键字的作用及原理。5、synchronized关键字的用法、优缺点。6、Lock接口的实现类有哪些,使用场景有哪些?7、可重入锁的用处及实现原理,写时复制、读写锁、段锁(ConcurrentHashMap中的段)的过程。8.悲观锁,乐观锁,优缺点,CAS的缺陷是什么,如何解决。9、三个ABC线程如何保证顺序执行。10.线程的状态是什么。11.睡眠和等待的区别。12、notify和notifyall的区别。13、了解ThreadLocal及其实现原理。数据库相关1.常见的数据库优化方法2.索引的优缺点,在哪些字段上建索引3.数据库连接池。4.durid的常用配置。计算机网络1.TCP和UDP的区别。2.三次握手,四次挥手,为什么要四次挥手。3、长连接和短连接。4.连接池适用于长连接或短连接。设计模式1.观察者模式2.代理模式3.单例模式,有五种写法,可以参考文章中单例模式的五种实现方式4.大家可以测试下Spring分布式相关使用了哪些设计模式1.正式事务的分配控制。2.如何设计分布式锁。3.如何设计分布式会话。4、dubbo有哪些组件,它们的作用是什么。5、zookeeper的负载均衡算法有哪些。6、dubbo如何使用接口进行通信。缓存相关1.redis和memcached的区别。2、redis支持哪些数据结构。3、redis是单线程的吗?所有工作都是单线程的吗?4、redis是如何存储一个String的。5.Redis部署方式,主从,集群。6、redis的sentinel模式,如何找到一个key值存放在redis集群的什么位置。7.Redis持久化策略。Framework相关1.SpringMVC的Controller是如何将参数和前端传来的数据一一对应的。2、Mybatis如何找到指定的Mapper,如何完成查询。3、Quartz是如何完成定时任务的。4.自定义注解的实现。5、Spring使用了哪些设计模式。6、Spring的IOC有什么优点。7.Spring如何维护它拥有的bean。一些比较新的东西1.JDK8的新特性,流的概念和优势,为什么会有这样的优势。2、如何设计双11交易总面板,实现高并发和高可用。一些小建议1.可以去leetcode刷题,换个思路。2、八大排序算法必须手敲(快排,堆排序尤为重要)。3.了解一些新兴技术。4.面试结束后,面试官会问你有什么问题。不要没事,也不要傻傻的问一些敏感的问题。5、了解应聘公司的产品和竞品。不管是哪个公司,都非常重视高并发高可用的技术,基础,JVM。面试是一个双向选择的过程。不要带着畏惧的心态去面试,这样不利于自己的发挥。同时,你不仅要关注薪水,还要看你是否真的喜欢这家公司,是否真的能得到锻炼。其实我写了这么多,只是我自己的总结,不一定适用于所有人。相信经过一些采访,大家会有这些感受。希望大家能找到适合自己的公司,愉快的码字~JVM、高并发、spring原理、多线程等互联网面试必备问答(以上面试题汇总),大家可以点此领取!
