01 个人情况
非211本科非计算机专业,没有任何实习经验
大大小小的公司一共投递60多家,不过也放弃了很多家(这里一定不要嫌麻烦,集中投简历确实是一件很枯燥的事情,但是为了增加求职成功的概率,是必须要克服的)
最后拿到的offer:vivo、oppo、平安科技、360、美团、腾讯、蘑菇街、爱奇艺等等
还有一些小公司或者知名度不太高的就不列举了,之所以投递也是为了积累面试经验,爱奇艺是我最近投岗面试的公司,先回忆一波爱奇艺的三轮技术面经,在来谈谈我怎么备战各大面试的。
02 爱奇艺三轮技术面回忆
2.1 技术面一轮 2020/03/28(1h zoom)
一面的面试官算是春招中遇到过最好的面试官了, 说错时会引导,还会纠正错的认知,亲和。一面在周末,周一下午HR小姐姐打电话约了二面
- Java多线程(问的比较多,尽量回忆)
1. Java中创建线程的方法2. 线程安全3. 线程安全在JVM中的体现4. Java中锁的种类5. 如何解决多线程下数据不安全的情况
- JVM(记不太清)
1. JVM构成部分2. 垃圾回收机制3. GC的种类
- Java数据结构
排序算法,算法题,直接说思路:1.第K大个数2.大量数字中只出现过一次的数字
- Spring核心: IOC AOP
- 计算机网络
1.http协议2.从浏览器输入一个url,到客服端得到反馈渲染页面的总过程3.为什么我们输入域名时不用输入端口号,而我们通过IP访问时要输入端口号4.TCP协议的概念5.TCP的三次握手
- MongoDB与MySQL(问的啥不太清楚了)
- 用过ElasticSearch么
- 项目中遇到的困难,是如何解决的
2.2 技术面二轮 2020/04/01(35min zoom)
晚上五点面的,面完一小时后HR小姐姐来电话说通过了,约的周五最后一轮技术面非常贴心的是HR把一二面面试官的评价反馈给了我,之后还问了目前收到什么offer
- 自我介绍+项目介绍
- 项目中遇到的困难,是如何解决的
- java中的基本变量类型,各占多少比特
- Java多线程
1.ThreadLocal2.Java中的乐观锁
- 计算机网络
1.TCP和UDP的区别2.HTTP状态码 403什么意思
- MySQL的默认隔离等级
- MySQL与MongoDB的区别,什么情况适合用mongodb,什么时候适合用MySQL
- Java中比较熟悉的设计模式
- Spring中事务性的体现,还有具体如何实现的
- Spring Cloud熟悉么,Spring Cloud有哪些重要的组件
- Redis了解么。Redis除了了解用于缓存,还了解作为消息队列的用法么
- zookeeper有用过么
- 开放题: 要实现一个像京东商城中的购物车,数据存储应该如何设计
追问 1: 对于游客账号,这些数据应该如何存储追问 2: 如果数据量超过数据库承载能力,有什么方案
2.3 技术面三轮 2020/04/03 (25mins zoom 主管面)
主管就感觉气场很强, 问完一个问题后会沉默一下再问下一个
- 自我介绍+项目介绍
1.项目介绍中提到了异步调用,问异步调用的用途是什么2.项目中提到了serverless,询问serverless的用途和与用容器部署的区别
- JVM
1.JVM的基本组成2.JVM调优问题(没答上来)
- Java多线程
1.多线程下的线程安全问题2.线程池的种类3.线程池达到数量上限后的措施(没具体了解过,说了想法)Spring与Spring Boot的区别
- MySQl
1.mysql数据结构的实现2.说一下B+树3.为什么高度平衡的搜索树时间复杂度小4.说一下红黑树
- 聊了聊其他项目
- 以后想往全栈的方向发展,还是只专注后端
总体来说爱奇艺面试的感受很舒服,面试官都很和蔼,感觉还是比较注重基础,多线程肯定会问,通过一次面试还是能学到不少东西的。
03 我的秋招备战阶段
我找工作的方向是技术岗,需要学习掌握的知识很多,所以我用一年的时间来学习相关内容,代码语言我选择了JAVA,有能力和精力的话强烈建议再掌握C语言或C++,对面试有加成效果,针对所有需要掌握的能力,我来分别总结一下重点内容(还有一些学习推荐,可以看看哟~):
3.1 项目(最重要)
想要在秋招中收获不错的成果,拥有项目经历肯定是必不可少的。不管是自己做项目,还是有一份不错的实习经历,都可以在面试中游刃有余。如果你的项目很不错的话,拿到sp offer,更高的年薪都是可能的。
而我因为之前太愚钝,没有找实习的意识,所以只能通过自己做一些项目来补足短板。
对于项目的选择上,不要选太简单的,那样含金量不够。项目期间要注意收集难点和问题,面试时候都会问到。不过在这里提醒大家,同一个项目,每个人钻研的深度不一样,那效果肯定不一样,也要结合自己的实际情况进行针对性学习。
3.2 数据结构
数据结构是必须掌握的内容,是面试的必考点,一般会以单个知识点的形式问一些小问题
- 数组:包括概念、用法、基本操作,多维数组等
- 队列和栈:包括区别、用法、常用方法、双端队列等
- 链表:包括特性、使用场景、不同链表元素特点、单双链表、反转等
- 字符串:包括常用方法、操作字符串、切割、反转、元素等
- 哈希表:包括键值对、存储格式、哈希函数等
- 树和图:包括较复杂的算法、遍历、二叉树和完全二叉树、最优路径算法等
推荐学习:《Java数据结构和算法.(第二版)》,有需要的朋友文末看需自取吧!
《栈和队列、字符串、链表、二叉树》面试题及解析
3.3 数据库和SQL语句
技术岗是必须具备数据库能力的,熟悉常用数据库,熟练掌握常用的SQL语法
- 主键、外键、超键、候选键概念
- drop、truncate、 delete区别
- 什么是临时表,临时表什么时候删除
- 非关系型数据库和关系型数据库区别,优势比较
- 数据库范式;varchar和char的使用场景
- 什么是内连接、外连接、交叉连接
- 索引的概念和用法;事务的概念和用法
- 乐观锁、悲观锁、死锁、主从数据库的概念
- SQL语法:insert、delete、update、select、where、or、and
- SQL关联查询、排序、分页查询、效率优化等
推荐学习:《MySQL性能调优与架构设计–全册》,有需要的朋友文末看需自取吧!
《20 数据库高频知识点》
3.4 操作系统
不同的公司对操作系统的考察要求不一样,但是总体来说对操作系统的要求不高,只需要记住一些重要知识点
- 线程和进程的区别;进程间的通信的几种方式
- 多线程;线程的实现方式;内存溢出
- Linux或Windows下常用的操作命令
推荐学习:《Java核心知识整理》(第4章:多线程并发),有需要的朋友文末看需自取吧!
《多线程高并发面试真题解析》
《Linux.命令全集》
3.5 计算机网络
- OSI七层模型、TCP/IP协议簇、IP掩码网关、ARP、DHCP的概念
- TCP和UDP的区别;TCP三次握手四次挥手;TCP中的流量控制和拥塞控制,TCP可靠性传输
- 交换机和路由器、HTTP/HTTPS协议内容、DNS解析、socket通信
推荐学习:《Java核心知识整理》(第9章:网络),有需要的朋友文末看需自取吧!
3.6 手撕代码(算法)
面试中极大概率会让你在白纸上手写算法,所以常见的算法一定要烂熟于心,频繁练习和理解,能做到不假思索就写出来。因为事实证明,如果你只是一般程度的理解,那么在面试中,极大概率会因为紧张,一个字都写不出来,那就很危险了
- 八大排序算法;递归;实现队列和栈;
- 单例模式;二叉树遍历;二分法查找;字符串操作;
- 哈希算法;算法的时间复杂度和空间复杂度
推荐学习:《算法刷题LeetCode中文版》,有需要的朋友文末看需自取吧!
最后总结
不管你是各方面都了解还是只突出某一方面,只要自己真的懂知识,会技能,那就不愁找不到工作。
不过说实话,面试确实是个玄学问题,有时候莫名其妙就挂了,有时候莫名其妙就过了,也看一部分运气吧。
另外,上面谈到我的春招备战,关于推荐学习的
- 数据结构篇(《Java数据结构和算法.(第二版)》+《栈和队列、字符串、链表、二叉树》面试题及解析)
- 数据库和SQL语句篇(《MySQL性能调优与架构设计–全册》+《20 数据库高频知识点》)
- 操作系统篇(《Java核心知识整理》(第4章:多线程并发)+《多线程高并发面试真题解析》+《Linux.命令全集》)
- 计算机网络篇(《Java核心知识整理》(第9章:网络))
- 手撕代码(算法)篇(《算法刷题LeetCode中文版》)
这些都有整理成册,需要的话可以内容太多就不一一展示了,如果有需要,尽管拿走,添加名片领取就行。