开篇介绍
个人背景:
不说太多废话,但起码要让你先对我有一个基本的了解。本人毕业于浙江某二本院校,算是科班出身,毕业后就进了一家外包公司做开发,当然不是阿里的外包,具体什么公司就不透露了,在外包一呆就呆了整整2年多,直到现在才从外包离开,如今拿到阿里的offer准备入职了。
阐述原因:
在外包公司的两年里,作为一名菜鸡,确实非常合格,技术没什么长进,眼见也没有提升,没规划没未来,让人实在焦虑,之所以开始改变自己也是家庭发生了变故,才让自己开始思考人生。身边很多人感叹过,能从外包逆袭,算是传奇,所以今天想要分享一下个人的经历,希望能够鼓励到一些与我有相似经历的同行。
注意:这次面试过程比较长,内容繁多,在文章中我基本上简述了,文章里的面试题完整版和我个人的总结方法经验(面试学习和刷题笔记),都整理有PDF完整版,有需要的可以私信我「成长」免费分享给你。
阿里一角
阿里巴巴Java岗面试题分享
1.HashMap的内部结构?内部原理?和HashTable的区别,假如发了hash碰撞,如何设计能让遍历效率?
2.讲一讲讲讲ConcurrentHashMap吧。
3.讲一下JVM虚拟机内存结构,以及它们的作。
4.讲讲JVM的类加载过程双亲委派模型。
5.谈谈Java的垃圾回收算法。
6.谈谈Java垃圾回收的触发条件。
7.synchronized和Lock的区别。
8.volatile的作,为什么会出现变量读取不致的情况,与synchronized的区别?
9.++i在多线程环境下是否存在问题,怎么解决?
10.讲一讲Thread.sleep()和Thread.yield()区别?
11.讲讲常的容器类?
12.如何去除ArrayList的重复元素?
直接采HashSet即可。作为它的参数,然后再addAll。但这种式不能保证原来的顺序,如果要求顺序,可以使LinkedHashSet即可。13.讲讲Java的泛型擦除,泛型主要是为了解决什么问题?如何泛型做Json的解析的?
14.谈谈Java的Error和Exception的区别联系。
Error和Exception均集成Throwable,但Error般指的是和虚拟机相关的问题,如系统崩溃,虚拟机错误,OOM等,遇到这样的错误,程序应该被终。Exception表示程序可以处理的异常,可以捕获并且可能恢复。15.说一下软引和弱引的区别?
16.成员变量和静态法可以被重写么?重写的规则是怎样的?
17.内部类访问局部变量的时候,为什么变量必须加上fifinal修饰符?
因为命周期不同。18.什么情况会造成内存泄漏?
19.什么是线程死锁,如何解决?
20.十亿条淘宝购买记录,怎么获取出现最多的前十个?
这是一道典型的有限内存的海量数据处理的题目。一般这类题目的解答无非是以下几种:分治,hash映射,堆排序,双层桶划分,BloomFilter,bitmap,数据库索引,mapreduce等。具体情形都有很多不同的方案。这类题目可以到网上搜索一下,了解下套路,后面就基本都会了。21.说一下Innodb和MySIAM的区别
22.说一下jvm内存模型,介绍一下你了解的垃圾收集器
其实并没有jvm内存模型的概念。应该是Java内存模型或者jvm内存结构,这里面试者一定要听清楚问的是哪个,再回答。23.如何访问链表中间节点
对于这个问题,我们首先能够想到的就是先遍历一遍整个的链表,然后计算出链表的长度,进而遍历第二遍找出中间位置的数据。这种方式非常简单。若题目要求只能遍历一次链表,那又当如何解决问题?可以采取建立两个指针,一个指针一次遍历两个节点,另一个节点一次遍历一个节点,当快指针遍历到空节点时,慢指针指向的位置为链表的中间位置,这种解决问题的方法称为快慢指针方法。23.HR问
从技术角度来说,你觉得你跟前同事比怎么样?说一下自己的个人优势。工作中觉得哪方面欠缺?为什么想来阿里?阿里的什么方面吸引了你?面试题私信我口令“面试题”领取word文档版(含详细答案解析)
面试总结及建议
每一次Java面试,其实都是一次学习机会,是对自己技术知识栈的梳理、考核、复盘。我们应该抱着学习的态度,认真对待,找到自己比较薄弱的环节,尽快去查漏补缺学习巩固。对于面试来说,其实也没有太多的技巧可言,面试官主要看重的就是个人能力,无非就是两个方面:
技术广度技术深度外包CRUD屌丝,是怎样逆袭的?
外包出身的我,究竟有多么菜,多么屌丝呢?还在外包的我,面试时被问到什么是成员变量,我是什么都不知道,相信这种程度大家应该有所感受了。
那作为一个外包CRUD屌丝,我是怎么做到逆袭的呢?
注意:下文主要是我个人的总结方法经验(面试学习和刷题笔记),都整理有PDF完整版,有需要的可以私信我「成长」免费分享给你。
01梳理知识体系,学会查漏补缺
关于知识体系的梳理,我个人主要分为以下5个部分,有针对性的,将这5个部分逐步击破,那么搞定面试是基本没什么问题了。
并发编程:多线程,高并发,CAS,锁,容器,线程池底层性能调优:Mysql,IO及网络调优,算法调优,JVMSpring全家桶:Spring,SpringMVC,MyBatis,IOC,AOP缓存数据库:Redis,mongoDB,MySQL分布式微服务:SpringBoot,SpringCloud,docker,maven02根据要点,逐个击破(根据大纲内容来进行复习)
1.并发编程(核心技术笔记)
Java多线程技能对象及变量的并发访问线程间通信Lock的使用定时器Timer单例模式与多线程拾遇增补
2.性能调优(Java性能调优+MySQL调优+JVM调优)
3.Spring全家桶(Spring全家桶学习脑图+SpringBoot使用笔记+源码深度解析)
Spring学习思维脑图(Xmind)
Spring使用笔记+实战文档
4.缓存数据库(MySQL+Redis+mongoDB)
03最后看面试题来举一反三(刷题刷题刷题,重要事情说三遍)
关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份pdf文档内,分成了以下几大专题:
Java基础部分
算法与编程
数据库部分
流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)
这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了,需要的可以私信“面试题”免费下载完整版。
写在文末
——“转发文章,