北漂七年 Java 开发的一路辛酸史:面试腾讯、阿里、美团、字节后的一点心得
前言
我觉得有一个能够找一份大厂的 offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司 / 小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。
因为大厂面试一般都有专业团队负责,某个知识点你到底是掌握了还是单纯背下来,面试官一问就可以看出来(PS:真正到面试特别是你觉得准备面试的时间不够的时候,你可以多挑一些面试常问的问题来看,注意理解,一定不要死记硬背)。一定不要过分寄希望于各种面经,试着去提高自己的综合能力。
“ 80% 的 offer 掌握在 20% 的人手 ” 中这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来越强大。
从大厂实际招聘要求来看到底青睐什么样的人?
首先要明确的一点是:985/211 的学历的确会为你加分很多。
另外,再强调的一点是不要天天把自己的学校是双非学校这个接口当做你无法进入大厂的原因。只要你的能力足够,大厂的大门就会为你打开。也有着很多双非学校甚至是三本的同学就拿到像阿里、腾讯这样的大公司的 offer。
从阿里、腾讯等大厂招聘官网对于 Java 后端方向/后端方向的要求,我们大概可以总结看出大厂对招聘者的能力要求。
下面以阿里巴巴为例子,看看大厂的实际要求
资料获取方式:麻烦一键三连+评论,然后添加VX(tkzl6666)即可免费领取
在面试 Java 工程师的时候,下面几点也提升你的个人竞争力:
熟悉开源框架的底层,阅读源码;
大型数据库系统经验;
熟悉分布式,缓存,消息中间件;
良好的表达和沟通能力, 善于学习, 关注前沿。
“ 一定要有一门自己的特长,不管是技术还好还是其他能力 ” 。我觉得这句话真的非常有道理,大家可以仔细思考一下。在这里再强调一点:公司不需要你什么都会,但是在某一方面你一定要有过于常人的优点。换言之就是我们不需要去掌握每一门技术(你也没精力去掌握这么多技术),而是需要去深入研究某一门技术,对于其他技术我们可以简单了解一下。
我觉得比起你对每一门技术都是浅尝辄止,深入吃透某一门技术对你的个人竞争力提升才更有帮助。
如何获取大厂面试机会?
在讲如何获取大厂面试机会之前,先来对比一下两个非常常见的概念——春招和秋招。
招聘人数:秋招多于春招 ;
招聘时间: 秋招一般 7 月左右开始,大概一直持续到 10 月底。但是大厂(如 BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为 3 月,次佳时间为 4 月,进入 5 月基本就不会再有春招了(金三银四)。
应聘难度:秋招略大于春招;
招聘公司:秋招数量多,而春招数量较少,一般为秋招的补充。
综上,一般来说,秋招的含金量明显是高于春招的。
下面我就说一下我自己知道的一些方法,不过应该也涵盖了大部分获取面试机会的方法。
关注大厂官网,随时投递简历(走流程的网申);
找到师兄师姐或者认识的前公司的技术牛人,帮忙内推(能够让你避开网申简历筛选,笔试筛选,还是挺不错的,不过也还是需要你的简历够棒);
求职类网站投递简历(不是太推荐)。
除了这些方法,我也遇到过这样的经历:有些大公司的一些部门可能暂时没招够人,然后如果你的亲戚或者朋友刚好在这个公司,而你正好又在寻求 offer,那么面试机会基本上是有了,而且这种面试的难度好像一般还普遍比其他正规面试低很多。
想要取得一份自己满意的 offer,前提是自己要有过硬的实力作为资本,下面就如何提高个人硬实力给大家提几点建议!
如何提高个人硬实力及大厂 Java 后端面试主要问些什么??
我在这里所说的个人硬实力更多的指的是个人的专业能力,比如构建高质量网站的能力或者是对专业知识的掌握程度。
我觉得不论是对于新手还是老手,想要提高个人硬实力最重要的就是不断深入学习并且将理论实践,最好可以将理论在具体项目中实践一下。
想要提高个人硬实力,那么学习一门新技术的方法一定是至关重要了。下面分享一下《 Java 工程师修炼之道》一书对于学习一门新技术的一些要点(在这以图片的方式整理了出来,更加方便阅读):
一定要有自己的技术优势,可能你懂得不是最多的,但是别人不会的你却会,那么你就是厉害的!然而如何准备大厂面试?我觉得最关键的一点之一就是搞清楚大厂面试主要在问些什么。下面我将分解每一个知识点,给大家简单说一下大厂面试主要会问些什么?
首先你要明确的是面试官所问的内容一定和你简历所写的东西是紧密联系的,一般你没有记录简历上的技能,面试管很少会去提问。
大厂面试大体上包括下面几方面知识类型:
Java 基础、多线程、IO 与 NIO、虚拟机、设计模式
面试官在多线程这一部分很可能会问你有没有在项目中实际使用多线程的经历。所以,如果你在你的项目中有实际使用 Java 多线程的经历 的话,会为你加分不少哦!
面试题
由于篇幅原因,答案在这就不做全部展示了,这些题我已经整理成pdf文档免费分享给那些有需要的朋友
资料获取方式:麻烦一键三连+评论,然后添加VX(tkzl6666)即可免费领取
Java225道面试专题
面向对象编程(OOP )
常见的Java问题
Java战程
Java集合类
垃圾收集器
Java支持的数据类型有哪些?什么是自动拆装箱?
Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
什么是值传递和引用传递?
进程和线程区别是什么?
什么是死锁(deadlock)?
Netty12道面试专题
BIO、NIO和AIO的区别?
NIO的组成?
Netty的特点?
TCP粘包/拆包的原因及解决方法?
了解哪几种序列化协议?
Netty的零拷贝实现?
了解哪几种序列化协议?
如何选择序列化协议?
Spring25道面试专题
什么是Spring框架? Spring 框架有哪些主要模块?
使用Spring框架能带来哪些好处?
什么是控制反转(IOC)?什么是依赖注入?
请解释下Spring框架中的IoC?
BeanFactory和ApplicationContext有什么区别?
如何用基于XML配置的方式配置Spring?
Spring有几种配置方式?
如何用基于Java配置的方式配t Spring?
Spring Bean的作用域之间有什么区别?
什么是Spring inner beans?
请举例说明如何在Spring中注入一个Java Collection?
设计模式面试专题
1.请列举出在 JDK 中几个常用的设计模式?
2.什么是设计模式?你是否在你的代码里面使用过任何设计模式?
3.Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
4.在 Java 中,什么叫观察者设计模式(observer design pattern)?
5.使用工厂模式最主要的好处是什么?在哪里使用?
6.举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类
层次?
7.在 Java 中,为什么不允许从静态方法中访问非静态变量?
8.设计一个 ATM 机,请说出你的设计思路?
9.在 Java 中,什么时候用重载,什么时候用重写?
10.举例说明什么情况下会更倾向于使用抽象类而不是接口
Redis面试专题
什么是redis?
Reids的特点
Redis支持的数据类型
Redis是单进程单线程的
虚拟内存
Redis锁
读写分离模型
redis相比memcached有哪些优势?4
redis常见性能问题和解决方案
MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据245
Memcache与Redis的区别都有哪些?
Redis 常见的性能问题都有哪些?如何解决?
Redis 最适合的场景
多线程面试专题
1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
2)在Java中Lock接口比synchronized块的优势是什么?你需要实现一一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?
3)在java中wait和sleep方法的不同?
4)用Java实现阻塞队列。
5)用Java写代码来解决生产者—消费者问题。
6)用Java编程一个会导致死锁的程序,你将怎么解决?
7)什么是原子操作,Java 中的原子操作是什么?
8)什么是竞争条件?你怎样发现和解决竞争?
9)为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
10) Java中你怎样唤醒-一个阻塞的线程?
11)什么是不可变对象,它对写并发应用有什么帮助?
12)在Java中CydiBarriar和CountdownLatch有什么区别?
JVM与调优21题
Java 类加载过程?
描述一下 JVM 加载 Class 文件的原理机制?
Java 内存分配。
GC 是什么? 为什么要有 GC?
简述 Java 垃圾回收机制
如何判断一个对象是否存活?(或者 GC 对象的判定方法)
垃圾回收的优点和原理。并考虑 2 种回收机制
垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
Java 中会存在内存泄漏吗,请简单描述
深拷贝和浅拷贝。
System.gc() 和 Runtime.gc() 会做什么事情?
finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?
如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
什么是分布式垃圾回收(DGC)?它是如何工作的?
串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
在 Java 中,对象什么时候可以被垃圾回收?
简述 Java 内存分配与回收策略以及 Minor GC 和 Major GC。
JVM 的永久代中会发生垃圾回收么?
Java 中垃圾收集的方法有哪些?
什么是类加载器,类加载器有哪些?
类加载器双亲委派模型机制?
MySQL性能优化21个最佳实践
1.为查询缓存优化你的查询
2. EXPLAIN 你的SELECT查询
3.当只要一-行数据时使用LIMIT 1
4.为搜索字段建索引
5.在Join表的时候使用相当类型的例,并将其索引
6. 千万不要ORDER BY RAND()
7.避免SELECT *
8.永远为每张表设置一个ID
9.使用ENUM而不是VARCHAR
10.从PROCEDURE ANALYSE() 取得建议
11.尽可能的使用NOT NULL
12.Prepared Statements
13.无缓冲的查询
由于篇幅原因,答案在这就不做全部展示了,这些题我已经整理成pdf文档免费分享给那些有需要的朋友
评论 (1 条评论)