幸好有了这份“星级”的阿里面经!“穷苦乡村”小伙就得安于现状?(终获阿里Java开发P7岗)

215 阅读9分钟

前言

相信大家看到这个标题其实就已经可以联想到我大概是个什么样的情况了,很多人都在生活中或者是网络上甚至是家庭中都大致听过这样的话,“你这样的出生,达到现在这样的生活已经很不错了,还是别为了不切实际的梦想去冒险了,安安逸逸的挺好”。

我知道其实这样的话本没有错,也没有恶意,因为这也是一种选择一种生活,只是我自己不甘心就这样了罢了。的朋友希望可以耐心往下看。

自我阐述

坐标湖南邵阳某个贫穷的小乡村里,砍柴、放牛、做家务对我们来说是常态,也是该做的,因为没有接触过大城市,甚至连城镇都是难得见到几次的,而且身边的人都是这样活的。直到有一次爸妈带我到他们打工的地方呆了几天,这是对我产生影响的导火索,这让我真真切切的感受到了大城市与山村的差距感。

直到我到了上高中的年纪,虽然穷,但是好在我爸妈对我的教育还是蛮看重的,就把我送到了镇里的高中读寄宿,我自己也很渴望学习,也算争气,考上了湖南的一家一本院校,选择了软件工程专业,至此开始走上了Java的不归路。

后续

毕业后我在一家普通互联网公司做后端开发,其实当时的工作和薪资对我来说已经很不错啦,如标题所述,我的目标不单单如此,我一直都是很想进入号称是“中国程序员技术天花板”的阿里巴巴从事Java相关的岗位。

我的室友劝我不要野心那么大,现在工作稳定、收入稳定就已经很不错啦,但我最终还是不管不顾的辞掉了工作去了阿里面试,但因自己技术不精连连被面试官吊打,当时有段时间非常低迷,甚至怀疑自己是不是错啦,最终还是我爸妈给了我勇气和鼓励(爸妈的爱是无私的)。

不甘平凡,砥砺前行

我给了自己两个月的时间,狂补技术,当然过程是非常难熬的,我也是靠着自己的梦想和不负爸妈的期望熬了过来,最终斩获了阿里Java开发p7岗,面试前自然也是做过不少的面试准备:

需要领取“2020java面试宝典+java深度学习资料”戳我即可免费领取!

(1)Java面试的必有基本流程

  • 自我介绍
  • 做过的项目

(2)Java基础

  • Java基本的四个特性,对多态的理解以及在项目中的应用
  • 面向对象和面向过程的区别?用面向过程可以实现面向对象吗?那是不是不能面向对象?
  • 重载和重写,如何确定调用哪个函数面向对象开发的六个基本原则(单一职责、开放封闭、里氏替换、依赖倒- - 置、合成聚合复用、接口隔离),迪米特法则。在项目中用过哪些原则
  • static和final的区别和用途
  • Hash Map和Hash Table的区别,Hash Map中的key可以是任何对象或数据类型吗? HashTable是线程安全的么?
  • HashMap和Concurrent HashMap区别,Concurrent HashMap线程安全吗,ConcurrentHashMap如何保证线程安全?
  • 因为别人知道源码怎么实现的,故意构造相同的hash的字符串进行攻击,怎么处理?那jdk7怎么办?
  • String.StringBuffer、StringBuilder以及对String不变性的理解
  • String有重写Object的hashcode和toString吗?如果重写equals不重写hashcode会出现什么问题?
  • Java序列化,如何实现序列化和反序列化,常见的序列化协议有哪些
  • Java实现多线程的方式及三种方式的区别
  • 线程安全
  • 多线程如何进行信息交互
  • 多线程共用一个数据变量需要注意什么?
  • 什么是线程池?如果让你设计一个动态大小的线程池,如何设计,应该有哪些方法?
  • Java是否有内存泄露和内存溢出concurrent包下面,都用过什么?
  • volatile 关键字的如何保证内存可见性sleep和wait分别是那个类的方法。有什么区别
  • synchronized与lock的区别,使用场景。看过synchronized的源码没?
  • synchronized底层如何实现的?用在代码块和方法上有什么区别?
  • 常见异常分为那两种(Exception,Error),常见异常的基类以及常见的异常
  • Java中的NIO, Bl0, AI0分别是什么?
  • 所了解的设计模式,单例模式的注意事项,jdk源码哪些用到了你说的设计模式
  • 匿名内部类是什么?如何访问在其外面定义的变量?如果你定义一个类,包括学号,姓名,分数,如何把这个对- 象作为key?要重写equals和hashcode吗
  • 为什么要实现内存模型?

(3)数据库

  • 常用的数据库有哪些?redis用过吗?
  • 数据库索引的优缺点以及什么时候数据库索引失效
  • 事务隔离级别
  • 数据库中的范式有哪些?
  • 数据库中的索引的结构?什么情况下适合建索引?
  • Redis的存储结构,或者说如何工作的,与mysql的区别?有哪些数据类型?
  • 数据库中的分页查询语句怎么写?
  • 数据库ACID
  • 脏读、不可重复读和幻读
  • MyISAM和InnoDB引擎的区别

(4)JAVA虚拟机

  • JVM垃圾处理方法(标记清除、复制、标记整理)
  • JVM如何GC,新生代,老年代,持久代,都存储哪些东西,以及各个区的作用?
  • GC用的引用可达性分析算法中,哪些对象可作为GC Roots对象?
  • 什么时候进行MinGC,FullGc
  • 各个垃圾收集器是怎么工作的
  • Java虚拟机内存的划分,每个区域的功能
  • 用什么工具可以查出内存泄漏
  • JVM如何加载一个类的过程,双亲委派模型中有哪些方法有没有可能父类加载器和子类加载器,加载同一个类?如果加载同一个类,该使用哪一个类?
  • JVM线程死锁,你该如何判断是因为什么?如果用VisualvM,dump线程信息出来,会有哪些信息
  • Java是如何进行对象实例化的
  • 用什么工具调试程序?JConsole,用过吗?
  • 了解过JVM调优没,基本思路是什么
  • Servlet的生存周期
  • Jsp和Servlet的区别
  • 保存会话状态,有哪些方式、区别如何
  • cookie和session的区别

(5)Spring&Hibernate

  • Spring iOC、AOP的理解以及实现的原理
  • loc容器的加载过程
  • 动态代理与cglib实现的区别
  • 代理的实现原理呗
  • Hlbernate—级缓存与二级缓存之间的区别
  • Spring MVC的原理
  • 简述Hibernate常见优化策略。

(6)操作系统

  • 操作系统什么情况下会死锁?
  • 如何理解分布式锁?
  • 进程间通信有哪几种方式?
  • 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?
  • 操作系统如何进行分页调度?

(7)Linux

  • Linux是如何进行进程调度的?
  • Linux下你常用的命令有哪些?

(8)其他

  • 常用的hash算法有哪些?
  • 如何设计存储海量数据的存储系统
  • 缓存的实现原理,设计缓存要注意什么
  • 什么是一致性哈希?用来解决什么问题?
  • 现在有一个进程挂起了,如何用工具查出原因?
  • 你知道的开源协议有哪些?
  • 你知道的开源软件有哪些?
  • 计算机网络
  • Http和https的区别
  • TCP如何保证可靠传输?三次握手过程?
  • 为什么TCP连接需要三次握手,两次不可以吗,为什么
  • 如果客户端不断的发送请求连接会怎样?
  • 问:那怎么知道连接是恶意的呢?可能是正常连接?
  • GET和POST的区别?
  • TCP和UDP区别?如何改进TCP
  • 滑动窗口算法?
  • TCP的拥塞处理- Conqestion Handlinq
  • 从输入网址到获得页面的过程

(9)算法

  • 如何判断一个单链表是否有环?
  • 快速排序,过程,复杂度?什么情况下适用,什么情况下不适用?
  • 什么是二叉平衡I树,如何插入节点,删除节点
  • 二分搜索的过程
  • 归并排序的过程?时间复杂度?空间复杂度?
  • 给你一万个数,如何找出里面所有重复的数?用所有你能想到的方法,时间复杂度和空间复杂度分别是多少
  • 给你一个数组,如何里面找到和为K的两个数
  • 100000个数找出最小或最大的10个?

当然除了面试,技术扎实才是根基,期间我也看过很多很有深度的Java学习资料,对我技术的增长也是起到挺大帮助的

需要领取“2020java面试宝典+java深度学习资料”戳我即可免费领取!

给大家的一个小建议

其实我现在也有几位面试官朋友,据我了解其实现在面试越来越综合化了,技术方面当然是重中之重,但是现在企业对员工的综合素质也是非常看重的,也会是一个加分项,希望大家面试前可以对自己进行“查漏补缺”;

结尾

有些人喜欢安逸的生活,而有些人就像我一样不达到自己的目标绝不甘心,不管大家是什么样的选择,希望都能去遵循自己的内心去奋斗。

出生不好是谁也不想的,但是已经这样了,就不要永远只是抱怨,通过自己的奋斗得到应有的成就是完完全全有可能的,这不,阿里的offer就被我拿到了!不要羡慕,哈哈哈!

需要领取“2020java面试宝典+java深度学习资料”戳我即可免费领取!