阿里大牛精心整理Java面试突击文档:Spring+Linux+MySQL+Redis等

前言

不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。

运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试:

  1. 自我介绍。(你可千万这样介绍:“我叫某某,性别,来自哪里,学校是那个,自己爱干什么”,记住:多说点简历上没有的,多说点自己哪里比别人强!)
  2. 自己面试中可能涉及哪些知识点、哪些知识点是重点。
  3. 面试中哪些问题会被经常问到、面试中自己改如何回答。(强烈不推荐背题,第一:通过背这种方式你能记住多少?能记住多久?第二:背题的方式的学习很难坚持下去!)
  4. 自己的简历该如何写。

大家要明确的很重要的几点是:

  1. 写在简历上的东西一定要慎重,这可能是面试官大量提问的地方;
  2. 大部分应届生找工作的硬伤是没有工作经验或实习经历;
  3. 将自己的项目经历完美的展示出来非常重要。

一 简历该如何写

俗话说的好:“工欲善其事,必先利其器”。准备一份好的简历对于能不能找到一份好工作起到了至关重要的作用。

为什么说简历很重要?

先从面试前来说:

假如你是网申,你的简历必然会经过HR的筛选,一张简历HR可能也就花费10秒钟看一下,然后HR就会决定你这一关是Fail还是Pass。

假如你是内推,如果你的简历没有什么优势的话,就算是内推你的人再用心,也无能为力。

另外,就算你通过了筛选,后面的面试中,面试官也会根据你的简历来判断你究竟是否值得他花费很多时间去面试, 所以,简历就像是我们的一个门面一样,它在很大程度上决定了你能否进入到下一轮的面试中。

再从面试中来说:

我发现大家比较喜欢看面经 ,这点无可厚非,但是大部分面经都没告诉你很多问题都是在特定条件下才问的。举个简单的例子:一般情况下你的简历上注明你会的东西才会被问到(Java、数据结构、网络、算法这些基础是每个人必问的),比如写了你会 redis,那面试官就很大概率会问你 redis 的一些问题。比如:redis的常见数据类型及应用场景、redis是单线程为什么还这么快、 redis 和 memcached 的区别、redis 内存淘汰机制等等。

所以,首先,你要明确的一点是:你不会的东西就不要写在简历上。另外,你要考虑你该如何才能让你的亮点在简历中凸显出来,比如:你在某某项目做了什么事情解决了什么问题(只要有项目就一定有要解决的问题)、你的某一个项目里使用了什么技术后整体性能和并发量提升了很多等等。

面试和工作是两回事,聪明的人会把面试官往自己擅长的领域领,其他人则被面试官牵着鼻子走。虽说面试和工作是两回事,但是你要想要获得自己满意的 offffer ,你自身的实力必须要强。

** 这3点你必须知道**

1. 大部分公司的HR都说我们不看重学历(骗你的!),但是如果你的学校不出众的话,很难在一堆简历中脱颖而出,除非你的简历上有特别的亮点,比如:某某大厂的实习经历、获得了某某大赛的奖等等。

  1. 大部分应届生找工作的硬伤是没有工作经验或实习经历,所以如果你是应届生就不要错过秋招和春招。一旦错过,你后面就极大可能会面临社招,这个时候没有工作经验的你可能就会面临各种碰壁,导致找不到一个好的工作

  2. 写在简历上的东西一定要慎重,这是面试官大量提问的地方;

  3. 将自己的项目经历完美的展示出来非常重要。

你必须知道的两大法则

①STAR法则(Situation Task Action Result):

  1. **Situation: **事情是在什么情况下发生;
  2. **Task:: **你是如何明确你的任务的;
  3. **Action: **针对这样的情况分析,你采用了什么行动方式;
  4. **Result: **结果怎样,在这样的情况下你学习到了什么。

简而言之,STAR法则,就是一种讲述自己故事的方式,或者说,是一个清晰、条理的作文模板。不管是什么,合理熟练运用此法则,可以轻松的对面试官描述事物的逻辑方式,表现出自己分析阐述问题的清晰性、条理性和逻辑性。

下面这段内容摘自百度百科,我觉得写的非常不错:

STAR法则,500强面试题回答时的技巧法则,备受面试者成功者和500强HR的推崇。 由于这个法则被广泛应用于面试问题的回答,尽管我们还在写简历阶段,但是,写简历时能把面试的问题就想好,会使自己更加主动和自信,做到简历,面试关联性,逻辑性强,不至于在一个月后去面试,却把简历里的东西都忘掉了(更何况有些朋友会稍微夸大简历内容)。在我们写简历时,每个人都要写上自己的工作经历,活动经历,想必每一个同学,都会起码花上半天甚至更长的时间去搜寻脑海里所有有关的经历,争取找出最好的东西写在简历上。但是此时,我们要注意了,简历上的任何一个信息点都有可能成为日后面试时的重点提问对象,所以说,不能只管写上让自己感觉最牛的经历就完事了,要想到今后,在面试中,你所写的经历万一被面试官问到,你真的能回答得流利,顺畅,且能通过这段经历,证明自己正是适合这个职位的人吗?

②FAB 法则(Feature Advantage Benefifit):

  1. **Feature: **是什么;
  2. **Advantage: **比别人好在哪些地方;
  3. **Benefifit: **如果雇佣你,招聘方会得到什么好处。

简单来说,这个法则主要是让你的面试官知道你的优势、招了你之后对公司有什么帮助。

** 项目经历怎么写?**

简历上有一两个项目经历很正常,但是真正能把项目经历很好的展示给面试官的非常少。对于项目经历大家可以考虑从如下几点来写:

  1. 对项目整体设计的一个感受
  2. 在这个项目中你负责了什么、做了什么、担任了什么角色
  3. 从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
  4. 另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。

** 专业技能该怎么写?**

先问一下你自己会什么,然后看看你意向的公司需要什么。一般HR可能并不太懂技术,所以他在筛选简历的时候可能就盯着你专业技能的关键词来看。对于公司有要求而你不会的技能,你可以花几天时间学习一下,然后在简历上可以写上自己了解这个技能。比如你可以这样写:

  1. Dubbo:精通
  2. Spring:精通
  3. Docker:掌握
  4. SOA分布式开发 :掌握
  5. Spring Cloud:了解

其他的一些小tips

  1. 尽量避免主观表述,少一点语义模糊的形容词,尽量要简洁明了,逻辑结构清晰。
  2. 注意排版(不需要花花绿绿的),尽量使用Markdown语法。
  3. 注意简历真实性,一定不要写自己不会的东西,或者带有欺骗性的内容
  4. 项目经历建议以时间倒序排序,另外项目经历不在于多,而在于有亮点。
  5. 如果内容过多的话,不需要非把内容压缩到一页,保持排版干净整洁就可以了。
  6. 简历最后最好能加上:“感谢您花时间阅读我的简历,期待能有机会和您共事。”这句话,显的你会很有礼貌。

下面就来说说面试时面试官所提问的技术性问题,每个人的面试时面试官所问到的问题都是会有所不同的。

Java 基础知识

  1. 重载和重写的区别
  2. String 和 StringBuffffer、StringBuilder 的区别是什么?String 为什么是不可变的?
  3. 自动装箱与拆箱
  4. == 与 equals
  5. 关于 fifinal 关键字的一些总结
  6. Object类的常见方法总结
  7. Java 中的异常处理
  8. 获取用键盘输入常用的的两种方法
  9. 接口和抽象类的区别是什么
image.png

** Java 集合框架**

  1. Arraylist 与 LinkedList 异同
  2. ArrayList 与 Vector 区别
  3. HashMap的底层实现
  4. HashMap 和 Hashtable 的区别
  5. HashMap 和 Hashtable 的区别
  6. HashMap 的长度为什么是2的幂次方
  7. HashMap 多线程操作导致死循环问题
  8. HashSet 和 HashMap 区别
  9. ConcurrentHashMap 和 Hashtable 的区别
  10. ConcurrentHashMap线程安全的具体实现方式/底层具体实现
  11. 集合框架底层数据结构总结
image.png

** Java多线程**

一 面试中关于 synchronized 关键字的 5 连击

  1. 说一说自己对于 synchronized 关键字的了解
  2. 说说自己是怎么使用 synchronized 关键字,在项目中用到了吗
  3. 讲一下 synchronized 关键字的底层原理
  4. 说说 JDK1.6 之后的synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优
  5. 化吗
  6. 谈谈 synchronized和ReenTrantLock 的区别
image.png

二 面试中关于线程池的 5连击

  1. 说说 synchronized 关键字和 volatile 关键字的区别
  2. 为什么要用线程池?
  3. 实现Runnable接口和Callable接口的区别
  4. 执行execute()方法和submit()方法的区别是什么呢?
  5. 如何创建线程池
image.png

三 面试中关于 Atomic 原子类的 4 连击

  1. 介绍一下Atomic 原子类
  2. JUC 包中的原子类是哪4类?
  3. 讲讲 AtomicInteger 的使用
  4. 能不能给我简单介绍一下 AtomicInteger 类的原理

AQS

  1. AQS 介绍
  2. AQS 原理分析
  3. AQS 原理概览
  4. AQS 对资源的共享方式
  5. AQS底层使用了模板方法模式

计算机网络常见面试点总结

  1. TCP、UDP 协议的区别
  2. 在浏览器中输入url地址 ->> 显示主页的过程
  3. 各种协议与HTTP协议之间的关系
  4. HTTP长连接、短连接
  5. TCP 三次握手和四次挥手(面试常客)

** Linux**

  1. 简单介绍一下 Linux 文件系统?
  2. 一些常见的 Linux 命令了解吗?
  3. TCP、UDP 协议的区别
  4. Linux 中主要有哪几种内核锁?
  5. 怎样申请大块内核内存?
  6. 通过伙伴系统申请内核内存的函数有哪些?
  7. Linux 软中断和工作队列的作用是什么?

MySQL

  1. 说说自己对于 MySQL 常见的两种存储引擎:MyISAM与InnoDB的理解
  2. 数据库索引了解吗?
  3. 为什么索引能提高查询速度?
  4. 先从 MySQL 的基本存储结构说起
  5. Mysql如何为表字段添加索引???
  6. Mysql 的技术特点是什么?
  7. 对于大表的常见优化手段说一下
  8. 当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下
  9. 与 Oracle 相比,Mysql 有什么优势?

** Redis**

  1. 为什么要用 redis /为什么要用缓存
  2. 为什么要用 redis 而不用 map/guava 做缓存?
  3. redis 和 memcached 的区别
  4. redis 常见数据结构以及使用场景分析
  5. redis 设置过期时间
  6. redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)
  7. redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)
  8. 缓存雪崩和缓存穿透问题解决方案
  9. 如何保证缓存与数据库双写时的数据一致性?
  10. 如何解决 Redis 的并发竞争 Key 问题

Spring

  1. Spring Bean 的作用域
  2. Spring 事务中的隔离级别
  3. Spring 事务中的事务传播行为
  4. 使用 Spring 框架能带来哪些好处?
  5. 什么是控制反转(IOC)?什么是依赖注入?
  6. IOC 容器对 Bean 的生命周期:
  7. 简述 AOP 和 IOC 概念 AOP:
  8. Spring 框架中都用到了哪些设计模式?
  9. 请举例说明如何在 Spring 中注入一个 Java Collection?

消息队列

  1. 说一下什么是消息队列
  2. 为什么要用消息队列
  3. 使用消息队列带来的一些问题
  4. 常见的消息队列对比
  5. activemq 如果数据提交不成功怎么办(消息丢失)
  6. 如何解决消息重复问题
  7. 向不存在的 exchange 发 publish 消息会发生什么?向不存在的queue 执行 consume 动作会发生什么?
  8. 为什么说保证 message 被可靠持久化的条件是 queue 和 exchange具有 durable 属性,同时 message 具有 persistent 属性才行?

Dubbo

  1. 说下什么是 Dubbo?
  2. 什么是 RPC?RPC原理是什么
  3. 为什么要用 Dubbo?
  4. 什么是分布式
  5. 为什么要分布式?
  6. 解释一下Dubbo 工作原理
  7. 先来解释一下什么是负载均衡
  8. zookeeper宕机与dubbo直连的情况
  9. 再来看看 Dubbo 提供的负载均衡策略

数据结构

  1. 什么是队列
  2. 队列的种类
  3. Java 集合框架中的队列 Queue
  4. 什么是 Set
  5. HashSet 和 TreeSet 底层数据结构
  6. 什么是List的常见实现类
  7. 列的字符串类型可以是什么?
  8. 说说B+树和B树的区别,优缺点等?

写在最后

最后,再强调几点:

  1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目
  2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;
  4. 建议提前了解一下自己想要面试的公司的价值观,判断一下自己究竟是否适合这个公司。

另外,我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

image.png
image.png

本文档小编已经整理好了,适合面试前的突击,有需要的读者朋友可以关注一下小编。

资料获取方式:转发+后台私信关键字(Java)即可获取资料地址

推荐阅读更多精彩内容