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中文版》

这些都有整理成册,需要的话可以内容太多就不一一展示了,如果有需要,尽管拿走,添加名片领取就行。