前言
博主是广东某双非本科学校计算机专业的学生,2021年应届毕业生,我的秋招时间线为8-11月,经历了一段煎熬的秋招历程最后成功上岸某大厂,因此写下这篇文章对自己的秋招做一个总结及自己的经验分享,如果能给22届及以后的毕业生带来启发那更好了。文章主要分为几个部分:
- 背景篇:主要讲述自己的一些基本情况
- 简历篇:主要讲述下根据自己秋招的心得,简历要如何准备
- 知识篇:主要讲述下应该储备的知识
- 建议篇:主要分享自己对后人的一些建议
- 面经篇:主要分享自己的一些面经
背景篇
我是双非本科的应届生,求职的方向主要是互联网公司,岗位是Java研发,两段小公司实习经历,两个比较一般般的项目(SpringBoot+redis+kafka),获奖经历的话三个水水的省级奖项不过没啥用。
我大概是从3-4月开始准备秋招的,那个时候比较无知,觉得懂框架才是无敌,所以不重视计算机基础的学习,直至去面试了暑期实习的第一家公司----某家教育行业的大厂,面试官不问项目,直接JVM计算机网络操作系统数据结构高并发一套流程问下来,我才发现我是如此地渣渣,计算机基础一问三不知,此时才知道计算机基础的重要性,很明显这次面试就挂了,这家大厂今年秋招价格也是太香了,后悔当时没把握住这个机会。。经历完这次面试,我痛定失痛,打算开始好好学习计算机基础知识。
我秋招大概是八月开始投递的,大规模投递是从9月开始,基本上我投递算很晚,完美地错过了提前批。在今年这种情况下,晚投递的话其实是一件很亏的事情,因此各种22届的选手,想投递简历的话要早点投,最好就提前批就可以冲了,今年提前批大概是7月就陆陆续续开始了。真不要觉得等到准备好了才投,因为你永远都不可能准备好。其实都是边面试边进步的。我现在才懂得这句话的真理。。
简历篇
对于技术岗简历的话,大概要有如下板块组成:
- 基本信息
- 教育背景
- 实习/项目经历
- 专业技能
- 获奖经历
基本信息的话,就是你的姓名,学历,联系电话,邮箱,github,博客之类的东西,对我而言的话我只写了上述我说的这几个模块,对于身高,政治面貌这些我觉得不是很必要,因为简历的话讲究的是用最少的字描述出你自己自身的价值,所以对于一些必要的个人信息就可以写上去,一些没有必要的个人信息就没必要写上去了。
教育背景这一块就基本上也不能改变什么了,大致上就是学校,GPA,获奖之类的。
实习/项目经历,这一块的话是简历上的重中之重,对于有知名公司实习的童鞋来说,如果学历很差的话,但是有一个大厂实习,基本上就可以逆天改命了,因此推荐童鞋们去找一个实习。项目的话呢,我自己的项目也比较水,所以也没什么经验可以传授,大概的话就是说在写项目经历的时候要尽量突出项目的亮点。
专业技能,专业技能这一块的话,就要注意了解、掌握、精通、熟悉等词语了,毕竟现在面试的话,你写一个技术上去一般都是会问你原理的,你如果用词太狠的话,可能就会给面试官怼凉凉了,对于不是很熟悉的技术建议不要写上去。
获奖经历这个就因人而异了,我把他放在我项目最后一个模块的原因是我压根就没有什么牛的奖项(acm),只有几个省级水奖,所以我就把他放最后了,如果有acm奖项的,建议把他放在比较前面的位置!!!!
知识篇
对于Java开发来说,大概有以下知识需要掌握:
- Java
- 数据结构与算法
- 设计模式
- 计算机基础(计算机网络、操作系统..)
- 并发编程
- 数据库
- 框架
Java语言的话,我记得是看的《Java核心技术卷1》这本书,这本书讲得还可以,不过也可以去b站搜一些视频看看,个人建议的话先看视频入门,再看看书加深理解巩固基础。
数据结构与算法,我看的是尚硅谷的数据结构与算法的视频,还有《啊哈算法》这本书,然后刷题的话呢可以去leetcode上面刷,上面的一些hot题之类的都可以刷刷。
设计模式看的是b站尚硅谷的设计模式视频,计算机基础直接看书(我看的图解TCP/IP和图解HTTP),操作系统看的王道的考研操作系统视频。
并发编程看的是《并发编程的艺术》这本书,数据库可以看《高性能数据库》、《MySQL技术内幕》等书。
对于框架,我只学了spring、SpringMVC、mybatis、SpringBoot、redis、kafka而已,这一块我看的基本上都是尚硅谷的视频,对于框架其实我们学习的话不应该只会调用api,而应该了解其原理实现,这一块的话,我觉得肯定是学越多越好,比如各种中间件啊,nosql数据库,微服务框架,分布式等等。但是呢你只要写在简历上了,那你就要去了解它的原理,不然面试就是老炮灰玩家。因为面试不仅仅考察你是否会用这个技术,还会考察你对这个技术掌握的深度是如何的,而且在这种内卷的时代,其实考察都是直接面试早火箭的,所以写技术的时候一定要慎重哈哈哈,不太熟悉的最好不要写上去。
下面这些书都是我买的,觉得挺不错的(三张图片合成一张了,可能有点糊,凑合看了hhhh)
建议篇
其实吧,互联网公司的技术岗有很多的,比如后端开发(go/java/c++等等),前端开发,测试,测试开发,客户端开发,算法等等。就我个人所知所闻,我发现大部分同学,包括我学校的同学还有我认识的一些朋友,基本上找工作都是备战Java的,甚至有的人觉得学Java是因为Java工作很好找,需求量大。其实大家对于就业形势的判断需要有一个明确的判断,不能听培训机构说Java好找工作,公众号发一些数据说Java好找工作,那么你们就认为Java好找工作。按照今年的我了解到的形势来说,大概找工作的话:算法>Java>前端>客户端,意思就是说Java现在基本上,除了算法之外,就是最难找工作的岗位了,为什么这么说呢,因为今年很多985211硕士都来投递Java岗位,所以竞争就是相当大了,相比之下前端就会好找很多。说这么多其实是为了让你们明白其实技术岗有很多岗位,不一定全部都要来卷Java的,可以结合就业形势和发展前景和自己的兴趣来选择。
还有一个很多人会问的问题就是需要去培训吗?,我发现其实不管是我身边的人,还是一些认识的人,很多人都有这个疑问,我的答案肯定是不需要的。首先培训机构只会教你各种框架的使用,只是教一些皮毛而已,并不会太深入的去传授一些知识,而且也不会培养你一个学习的习惯。你自己自学的话又可以省钱又可以锻炼学习能力,何乐而不为呢?有人说去培训的话,你demo敲错了有人帮你改bug,你自学的话在学习中遇到困难没人帮你改,我的想法是:“如果学习中遇到的困难你都没能力想办法克服,那么工作中遇到真正的线上bug的时候你又如何解决呢?”其实自学就是一个很好的锻炼自己能力的过程,所以对自己狠一点,跳出舒适圈,好好学习吧。
面经篇
这里主要分享一些我面试的时候遇到的一些比较经典的问题吧,有些太杂的还有问项目之类的问题我就删除了,主要还是分享比较常见的一些。
Java
- 除了java外还用过什么语言,和java的区别
- 讲讲引用(强引用、弱引用、软引用、虚引用),那哪些可以作为强引用
- 讲讲异常
- 讲讲java封装继承多态(顺便给了几种情形要判断)
- 接口和抽象类区别
- 接口可以继承接口吗,可以new吗
- 讲讲熟悉的集合(吹了arraylist,hashmap)
- arraylist扩容过程,为啥要扩成原来的1.5
- arraylist与linkedlist区别,讲讲linkedlist的添加方法源码
- hashmap哪些可以作为key,如果其他对象作为key要怎么处理
- 那我如果对象的字段不是final的,那么字段给更改后对那个hashmap有啥影响吗
- 讲讲hashmap和concurrenthashmap
- 分析下红黑树,为啥hashmap要在到达一定的长度后就变成红黑树呢?有啥优点吗?
- hashmap扩容过程
- hashmap和hashtable区别
- hashmap为啥不用链表
- Java基本数据类型
- 集合了解哪些(八股文吹就完了)
- 讲讲java反射
- ArrayList和LinkedList
- ArrayList扩容
- HashMap和CurrentHashMap
- HashMap初始容量10000,插入10000条数据,会不会扩容。
- 数据非常大,用ArrayList和linkedlist哪个空间浪费大
虚拟机
- 内存泄漏和内存溢出
- 讲讲垃圾回收机制
- 有了回收机制后还会内存溢出吗,会的话讲讲哪种情况
- 怎么判断对象死亡(讲了可达性分析),那哪些可以作为GC root
- 讲讲运行时内存
- new个对象的过程
- 设置最大堆和最小堆的JVM参数
多线程
- java进程什么时候会终止,单核cpu可以启动几个进程
- 进程线程区别
- cpu调度的是线程还是进程
- 多线程用过吗?什么时候需要用多线程
- wait和sleep的区别
- 加锁的话是如何使用
- java锁的升级过程(详细)
- java锁的一些信息存储是在哪里呢?(对象头)
- 那上面锁升级的过程在对象头里面怎么变化的,具体点
- 实现线程的方式
- 线程有什么状态
- volatile怎么实现内存可见
- 线程实现的几种方式
- 实现Runnable和Callable的区别
- 直接调用run方法不行吗?为什么要调用start方法
- synchronized和ReentrantLock的区别
- ReentrantLock如何实现公平锁
- 创建线程有几种方式,你用过哪几种?
- 讲讲线程池
- ThreadLocal会发生内存泄露吗
计算机网络
- 计算机网络了解吗
- 讲讲osi模型
- http和https区别
- tcp,udp区别
- 浏览器输入url全过程
- session和cookie区别
- session工作原理
- session和cookie各自适合场景
- 项目部署在HTTPS环境下,要访问HTTP的资源能访问吗
数据库
- 数据库如何分析慢查询
- explain命令会有很多参数,你比较关注哪些
- 你对数据库哪些比较有了解?讲讲(讲了事务八股文,从概念到并发带来的问题到隔离级别到mvcc)
- 数据库隔离级别、MYSQL默认隔离级别
- 数据库有哪几种索引
- B+Tree讲讲
Redis
- 项目为什么用redis?不用其它类似组件?
- 讲讲Redis
- 讲讲redis持久化机制
- redis缓存
- redis缓存雪崩、缓存击穿
- 布隆过滤器原理
- 了解redis高可用吗
- 讲讲redis的五种数据结构
- 项目中为什么要用zset和set
全家桶
- 讲讲spring 的ioc
- spring常用的注解
- SpringMVC的前端控制器
- mybatis用过吗
- 项目控制权限怎么做的
- 讲讲spring security的权限实现原理
- spring aop讲讲?
- 动态代理实现的源码看过吗
- mybatis的缓存了解吗
- mybatis的#和{}
- spring ioc原理
- bean的生命周期
其它
- 数据结构(栈,队列..)在项目中的使用,为何要这样使用
- 讲讲mvc
- 你项目怎么体现mvc、解决了什么问题
- 常用的linux命令及其应用场景
- 栈和堆
- 单例模式(手撕双重检验)
- 算术表达式
- 镜像二叉树
- 分解因式
- md5原理
- 手撕:分解质因数,写后叫改成递归
- 会不会消息队列
- 讲讲树
- 讲讲二叉树、平衡二叉树
- 讲讲树的遍历
- 讲讲图、图的遍历(BFS、DFS)
- 讲讲无向图最短路径算法
- 单例模式,懒汉式怎么实现线程安全
- 统计字符串出现的次数(说用hashmap来计数,问有没有更好的)
- 一张数据表非常大,几千万上亿数据,然后要将这个表的数据复制到另一张表中怎么实现
人事
- 为啥要投游戏服务器开发
- 平时喜欢玩啥游戏
- 那么多编程技术为什么要选择JAVA,技术选型原因
- 如何看待加班
- 叫我讲一些获奖经历
- 如何看待微信对人际交往产生的影响
- 如何看待互联网996
- 从项目中找一个点来介绍一下你在其中担任的角色,起到什么作用
- 如何评价项目成员
- 项目中遇到困难如何解决
- 平时喜欢玩什么游戏
- 王者荣耀大概是什么等级的
- 有投递其他游戏公司吗?目前的进度是什么样的
- 有拿其他offer吗
- 平时都是怎么学习技术的
- 看过什么书籍
- 期望薪资
- 如何看待互联网加班现象
- 有没有做过游戏方面的项目
- 问获奖经历
- 项目出现分歧咋办...
- 了解过go语言吗
- php和java有什么区别
- 平时参加实验室,然后成绩还这么高,不会有什么冲突吗?
- 了解过游戏公司的加班情况吗
- 最近比较关注哪块知识呢
- 为什么关注这块知识呢