来自一个六年 Java开发者百度、阿里、腾讯的面试心经

chendada · · 2233 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

我觉得有一个能够找一份大厂的 offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司 / 小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。

因为大厂面试一般都有专业团队负责,某个知识点你到底是掌握了还是单纯背下来,面试官一问就可以看出来(PS:真正到面试特别是你觉得准备面试的时间不够的时候,你可以多挑一些面试常问的问题来看,注意理解,一定不要死记硬背)。一定不要过分寄希望于各种面经,试着去提高自己的综合能力。

“ 80% 的 offer 掌握在 20% 的人手 ” 中这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来越强大。

从大厂实际招聘要求来看到底青睐什么样的人?

首先要明确的一点是:985/211 的学历的确会为你加分很多。

另外,再强调的一点是不要天天把自己的学校是双非学校这个接口当做你无法进入大厂的原因。只要你的能力足够,大厂的大门就会为你打开。也有着很多双非学校甚至是三本的同学就拿到像阿里、腾讯这样的大公司的 offer。

从阿里、腾讯等大厂招聘官网对于 Java 后端方向/后端方向的要求,我们大概可以总结看出大厂对招聘者的能力要求。

下面以阿里巴巴为例子,看看大厂的实际要求

在面试 Java 工程师的时候,下面几点也提升你的个人竞争力:

  1. 熟悉开源框架的底层,阅读源码;
  2. 大型数据库系统经验;
  3. 熟悉分布式,缓存,消息中间件;
  4. 良好的表达和沟通能力, 善于学习, 关注前沿。

“ 一定要有一门自己的特长,不管是技术还好还是其他能力 ” 。我觉得这句话真的非常有道理,大家可以仔细思考一下。在这里再强调一点:公司不需要你什么都会,但是在某一方面你一定要有过于常人的优点。换言之就是我们不需要去掌握每一门技术(你也没精力去掌握这么多技术),而是需要去深入研究某一门技术,对于其他技术我们可以简单了解一下。

我觉得比起你对每一门技术都是浅尝辄止,深入吃透某一门技术对你的个人竞争力提升才更有帮助。

如何获取大厂面试机会?

在讲如何获取大厂面试机会之前,先来对比一下两个非常常见的概念——春招和秋招。

招聘人数:秋招多于春招 ;

招聘时间: 秋招一般 7 月左右开始,大概一直持续到 10 月底。但是大厂(如 BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为 3 月,次佳时间为 4 月,进入 5 月基本就不会再有春招了(金三银四)。

应聘难度:秋招略大于春招;

招聘公司:秋招数量多,而春招数量较少,一般为秋招的补充。

综上,一般来说,秋招的含金量明显是高于春招的。

下面我就说一下我自己知道的一些方法,不过应该也涵盖了大部分获取面试机会的方法。

关注大厂官网,随时投递简历(走流程的网申);

找到师兄师姐或者认识的前公司的技术牛人,帮忙内推(能够让你避开网申简历筛选,笔试筛选,还是挺不错的,不过也还是需要你的简历够棒);

求职类网站投递简历(不是太推荐)。

除了这些方法,我也遇到过这样的经历:有些大公司的一些部门可能暂时没招够人,然后如果你的亲戚或者朋友刚好在这个公司,而你正好又在寻求 offer,那么面试机会基本上是有了,而且这种面试的难度好像一般还普遍比其他正规面试低很多。

想要取得一份自己满意的 offer,前提是自己要有过硬的实力作为资本,下面就如何提高个人硬实力给大家提几点建议!

如何提高个人硬实力及大厂 Java 后端面试主要问些什么??

我在这里所说的个人硬实力更多的指的是个人的专业能力,比如构建高质量网站的能力或者是对专业知识的掌握程度。

我觉得不论是对于新手还是老手,想要提高个人硬实力最重要的就是不断深入学习并且将理论实践,最好可以将理论在具体项目中实践一下。

想要提高个人硬实力,那么学习一门新技术的方法一定是至关重要了。下面分享一下《 Java 工程师修炼之道》一书对于学习一门新技术的一些要点(在这以图片的方式整理了出来,更加方便阅读):

一定要有自己的技术优势,可能你懂得不是最多的,但是别人不会的你却会,那么你就是厉害的!然而如何准备大厂面试?我觉得最关键的一点之一就是搞清楚大厂面试主要在问些什么。下面我将分解每一个知识点,给大家简单说一下大厂面试主要会问些什么?

首先你要明确的是面试官所问的内容一定和你简历所写的东西是紧密联系的,一般你没有记录简历上的技能,面试管很少会去提问。

大厂面试大体上包括下面几方面知识类型:

Java 基础、多线程、IO 与 NIO、虚拟机、设计模式

面试官在多线程这一部分很可能会问你有没有在项目中实际使用多线程的经历。所以,如果你在你的项目中有实际使用 Java 多线程的经历 的话,会为你加分不少哦!

设计模式比较常见的就是让你手写一个单例模式(注意单例模式的几种不同的实现方法)或者让你说一下某个常见的设计模式在你的项目中是如何使用的,另外面试官还有可能问你 “ 抽象工厂 ” 和 “ 工厂方法模式的区别 ” 、“ 工厂模式 ” 的思想这样的问题 ” 。

建议把代理模式观察者模式(抽象)工厂模式好好看一下,这三个设计模式很有用。

数据结构与算法(要有手写算法的能力)

数据结构比较常问的就是:二叉树、红黑树(很可能让你手绘一个红黑树出来哦!)、二叉查找树(BST)、平衡二叉树(Self-balancing binary search tree)、B - 树,B + 树与 B * 树的优缺点比较、 LSM 树这些知识点。数据结构很重要,而且学起来也相对要难一些。建议学习数据结构一定要循序渐进的来,一步一个脚印的走好。一定要搞懂原理,最好自己能用代码实现一遍。

计算机网络(TCP 三次握手和四次挥手)

数据通信(RESTful、RPC、消息队列)

如果你的简历上写了你会某个RPC框架(比如:阿里的开源的dubbo)或者消息队列(比如:RabbitMQ、Kafka)的使用的话,面试官一般会以你写在简历上的技术提问,回答的时候最好能结合在项目中的实际使用。

性能优化及操作系统(常见优化方式,Linux 的基本命令以及使用)

主流框架(Spring 底层原理与源码问的很多)

Spring一般是不可避免的,如果你的简历上注明了你会 Spring Boot 或者 Spring Cloud 的话,那么面试官也可能会同时问你这两个技术,比如他可能会问你 springboot 和 spring 的区别。 所以,一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。

另外,AOP 实现原理、动态代理和静态代理、Spring IOC 的初始化过程、IOC 原理、自己怎么实现一个 IOC 容器?这些东西都是经常会被问到的。

数据存储(最常见的是 MySQL、Redis)

分布式(分布式锁,事务等)

除了这些东西还有什么其他问题:

实际场景题

实际场景题就是对你的知识运用能力以及思维能力的考察。建议在平时养成多思考问题的习惯,这样面试的时候碰到这样的问题就不至于慌了。另外,如果自己实在不会就给面试官委婉的说一下,面试官可能会给你提醒一下。切忌不懂装懂,乱答一气。

面试官可能会问你类似这样的问题:

  1. 假设你要做一个银行 app,有可能碰到多个人同时向一个账户打钱的情况,有可能碰到什么问题,如何解决(锁)?
  2. 你是怎么保证你的代码质量和正确性的?
  3. 下单过程中是下订单减库存还是付款减库存,分析一下两者的优劣。
  4. 同时给 10 万个人发工资,怎么样设计并发方案,能确保在 1 分钟内全部发完。
  5. 如果让你设计 xxx 系统的话,你会如何设计。

生活

  1. 一般到最后的 HR 面的时候,面试官基本就是和你聊聊天。他可能会问你类似如下的问题:
  2. 父母是做什么的,具体一点
  3. 自己平时是如何学习的
  4. 平时的兴趣爱好是什么

性格/其他

  1. 主要是看你个人的性格以及价值观是否适合他们公司,比如他会问你类似下面的问题:
  2. 遇到压力大的情况自己是如何处理的
  3. 遇到很难解决的困难怎么办
  4. 遇到不是很喜欢同项目组的某个成员的情况怎么办
  5. 如何看待加班
  6. 你觉得自己有什么缺点/优点

总结强调

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

最后

针对于上面所提到的知识导图我总结出了一些架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料还有完整高清的java进阶架构学习思维导图免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

资料领取方式:加QQ群930254941,进群既领取资料!

点击链接加入群聊【java架构交流群】:https://jq.qq.com/?_wv=1027&k=57qP2qp


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2233 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传