星星博客 »  > 

大厂实习之路|记录我的腾讯9面之旅

文章目录

    • 自我介绍
    • 简历投递情况
    • 腾讯面试情况
      • 腾讯某部门一面、二面(3.22 3.24 )
      • 微信安卓一面(3.29):
      • 不知名安卓部门一面(4.6):
      • 不知名安卓部门一面与二面(4.24,4.26):
      • 腾讯视频面试(4.28):
    • 总结
    • 面试题总结
      • Android面试题
      • 计算机网络面试题
      • 操作系统面试题
      • Java面试题(重点)

自我介绍

首先介绍自己情况: 广东某带学院结尾二本。投递的岗位是Android开发实习,有两个练手的小项目,没有任何奖项,算法差,基础不好。在寻找实习开始阶段,基本上属于迷茫与菜的。后来在一次又一次的面试经历中慢慢提升,最后收获腾讯视频的实习offer。

简历投递情况

在牛客网上见到的大厂招聘内推贴全部都投递过,已经忘记投递了多少个公司。其中最终收获面试机会的只有腾讯、字节、阿里、京东、网易互娱、蘑菇街、cvte(视源股份)。也是非常感谢有这么多的面试机会,让我能够像打怪升级一样,在每一次面试中慢慢进步。

腾讯面试情况

3月22号经历 第一场面试,4月27号晚收到人生第一个offer(京东),5月12号收获腾讯offer,我的面试经历属于比较坎坷且艰难的,其中腾讯的面试我失败了4次,被捞了5次,最后在第9次面试后成功收到了offer,其中艰辛,一言难尽,接下来复盘一下腾讯的面试经历:

腾讯某部门一面、二面(3.22 3.24 )

在第一面当中问到的内容与最近复习的知识都很匹配,与面试官对答入流,因此侥幸通过。

在二面当中自己基础不好、算法不好的缺点便很明显的暴露了出来,被面试官吊打了一顿。

这两面是人生第一面,在二面中,手撕代码部分暴露了自己算法能力极差的缺点,遂凉凉。

一二面面经地址

微信安卓一面(3.29):

这一面当时由于太过挫败,没有做面经。原因就是在询问基础阶段比较良好,但是在手撕代码部分反转链表写半天写不出来(这也能暴露我前期代码能力到底有多差),遂挂。

这一面是我算法的转折点,开始明白自己算法的不足之处,开始有的放矢,严抓自己的算法。

不知名安卓部门一面(4.6):

这一面是最累的一面,一路深扒基础,聊数据结构,从树一路递进到B+树,聊算法,从冒泡排序一路到快排,最后算法题也做出来了,总耗时80分钟,最后6天后横向对比不过别人,流程变灰。不过在这一轮中也是明白自己的基础有哪里不足,补足自己的基础。

面经链接

在这一面之后开始明白自己 知识不成体系的缺点,我相信这是很多人都会出现的一种情况,感觉会的不少,但是很散乱,不知道如何表述。发现这点之后,我开始做知识的 思维导图 ,整理自己零碎的知识点,这一点十分有帮助,在做思维导图之后自己知识像网一样,成体系,更加有助于自己的理解!

这一面之后将自己的知识点开始 串联成体系,之后就几乎没有在基础知识上栽过跟头

不知名安卓部门一面与二面(4.24,4.26):

这一面反映了我上一面之后做的 思维导图给我带来的收获,很多知识点问到都是 一套组合拳打的面试官找不着北 ,算法题手撕快排也顺利手撕出来,遂通过。

二面的时候可能是自己确认参加后,要去京东hr面,打电话改了面试时间,导致面试官不开心。面试官 全程敷衍 ,开局两道算法题之后就不怎么理我,最后也是随便问了几个问题就溜之大吉,面试结束后瞬间流程结束。

心里想着安心接受京东offer了,去跟东哥做朋友算了,结果流程结束后不到7个小时又被捞起…

腾讯视频面试(4.28):

这一面当中问我的知识点全部对答如流,两道算法题,一道合并有序数组,一道反转链表秒杀

最后问面试官怎么样,表示已经满足他对一个实习生的要求,遂通过。

4.30约了二面, 但是被面试官鸽了,于是改期到5.7。

二面当中面试官非常好,问的问题也比较基础,自己也以一个比较好的表现顺利通过,最后达到了hr面,最终收到了offer。二面的面经链接:腾讯视频二面

总结

总体上腾讯的面试时间线很好的展示了自己一个进步的过程, 从啥都不会,算法垃圾的一批,每一轮面试结束后总结反思,查漏补缺(这点万分重要),于是到最后的面试,面试官表示 没啥好问的了,满足一个实习生的要求

在这面试期间,几乎每一场都会发现自己的不足之处,然后开始 查漏补缺 ,补全知识,提升自己

这个过程当中,需要每一次面试都认真对待,反思总结。就像打怪升级,不断提升自己。坚持在每一场面试中汲取营养,慢慢成长。

自己知识点的一个大的突破是 开始做思维导图(这个我建议所有人都做),在做思维导图的过程中能够很好的 发现自己有什么地方有欠缺,很好的看见自己的知识体系中有什么部分是比较薄弱的,提醒自己继续查漏补缺。并且思维导图最好的点在于能够很清晰的让你知道自己哪里有欠缺,更加能够加深你对一个知识体系的理解。

分享一下自己做的思维导图:
Android思维导图
操作系统思维导图
计算机网络思维导图
Java思维导图
里面还写了很多注解,以文件形式可见,需要的同学可以在评论留下邮箱,我发给你。

思维导图对自己的帮助真的巨大,在觉得自己的知识十分散乱的时候,真的应该去做一下思维导图,满满的收获!

整体上来说自己一直是 螺旋式提升,每次面试都当成一次 打怪升级的过程, 面试完后的总结与反思必不可少,面试后进行查漏补缺,在查漏补缺的时候要有 深究的热心,才能更好的提升自己。

有跟我一样带学院二本甚至三本出身的同志们不要害怕, 多投多面多总结,终总会达成自己的目标,收获到属于自己的offer!

最后做一些面试题的总结吧。

面试题总结

Android面试题

Android常问的知识点都在这张图里了,有兴趣的看看就好了,还有一些备注xmind转成图片后看不见,有兴趣的 可以私聊我发给你。

Android思维导图

计算机网络面试题

TCP部分:
TCP与UDP差别
基于TCP与UDP实现的协议
TCP三次握手全过程
两次握手行不行
TCP四次挥手全过程
time_wait状态是第几次挥手之后
time_wait持续多久?为什么?
TCP拥塞控制全过程

HTTP部分:
HTTP报文结构
HTTP返回状态码(一些重点的301,302,304,404等要熟悉)
HTTP的常用8种方法
HTTP缓存相关
GET和POST区别(这个我遇到了五六次)
HTTP1.0缺点
HTTP1.1跟HTTP1.0
HTTP2.0跟HTTP1.1
HTTP2.0的局限点
HTTP与HTTPS
HTTS链接建立过程
对称加密与非对称加密
常见的对称加密算法与非对称加密算法
cookie和session的作用和区别

计网OSI七层模型与五层模型。

基本上计网问来问去就这些。

  • 计网基础知识可以看看我的系列文章,质量保证!

操作系统面试题

基本知识:
内核态与用户态
为什么要有内核态
为什么内核态切换效率低
大端与小端
堆和栈

进程线程:
进程线程区别
进程主要有什么数据
线程有什么数据
有了进程为什么要有线程
线程过多会怎么样
线程与进程的生命周期
进程调度算法
进程间通信的方式
线程间通信的方式
孤儿进程与僵尸进程

内存管理:
分段式管理
内存分配算法
分页式管理
分段式管理
段页式管理
虚拟内存
页面调度算法
抖动现象

死锁:
死锁的必要条件
死锁的产生原因
死锁的处理方法

Java面试题(重点)

基础知识:
面对对象面向过程
对多态与封装的理解
final关键字的作用(这个几乎问了我10次)
static关键字的作用
String、StringBuffer、StringBuilder区别
String、StringBuffer、StringBuilder三者效率对比
自动装箱与拆箱
Object有什么方法(记住常用的七八个就好了)
notify跟notifyAll区别 (腾讯问过一次)
抽象类与接口区别(常问)
反射机制 (这个也经常问)
深浅拷贝区别 (字节、腾讯都问过)

集合:
讲一下List、Set、Map三个的特点
LinkedList和ArrayList的底层实现
ArrayList底层使用了什么数组
LinkedListHashSet和TreeSet有序性区别
HashMap底层数据结构(经典八股文,一定要熟悉)
其他解决Hash冲突的方法(开放地址、再哈希等)
为什么HashMap改用尾插法(防止多线程导致链表成环)
头插法有什么优点
HashMap扩容机制
HashMap是先插入还是先扩容
为什么扩容因子设置0.75
为什么每次成二倍扩容
HashTable扩容机制(初始为11,每次扩容2N + 1)
Hashtable扩容的数组长度为什么时旧数组长度乘以2加1(保证奇数,减少哈希冲突,但是效率低)
TreeMap的底层数据结构
LinkedListHashMap的底层数据结构
ConcurrentHashMap的底层数据结构
ConcurrentHashMap在元素插入时要用几次哈希,为什么?
Segment的初始大小
ConcurrentHashMap的put操作全过程(分JDK1.7与1.8回答)
ConcurrentHashMap的get操作
ConcurrentHashMap的size操作

并发:
volatile关键字作用(不可原子性、可见性、防止指令重排)
volatile关键字在双重锁实现单例作用(防止指令重排导致多线程并发获取问题)
volatile 可见性如何实现(直接刷新缓存,使其他缓存失效)
synchronize关键字实现(静态方法flag上设置ACC_ synchronized,同步代码块使用monitorenter和monitorenter)
synchronize的优化有什么(自旋锁、锁清除、锁碰撞、锁升级)
锁升级全过程(无锁、偏向锁、轻量级锁、重量级锁)
讲一讲对象头(主要的数据:HashCode、GC代、锁标志位等)
重量级锁锁标志位是什么(10,网易问过一次)
为什么线程切换效率低(需要内核态用户态切换,进行上下文交换)
如何减少上下文切换(无锁编程、使用最少线程、协程、CAS操作)
讲一讲ReentrantLock(等待可中断、公平策略、可重入、可选择Condition)
讲一讲CAS操作
有什么基于CAS操作实现的类(Atomic下的原子类)
讲一讲AQS
有什么基于AQS实现的类(ReentrantLock、Semaphore、ReentrantReadWriteLock、CountDownLatch等)
讲一讲乐观锁与悲观锁以及具体例子
讲一下线程池的主要参数(7个参数)
线程池一个任务进入的全过程
有什么类型的线程池(newCachedThreadPool(任务进入无空闲线程开新)、FixedThreadPool(固定核心数)、SingleThreadExecutor(单线程))
线程过多会怎么样
线程过过少会怎么样

JVM:
最常遇到的几个问题是:

讲一讲 GC机制(这个问题至少16次面试遇到10次)
这里建议从 三个问题去讲:

  • 什么对象需要回收?(引用计数法、GCroot)
  • 什么时候回收?(安全点与安全区域)
  • 如何回收? (回收算法与垃圾回收器)

讲一讲类加载机制:
加载: 三个要点,把文件转为二进制流形式,把静态数据结构转为运行时数据结构,生成class文件
验证:验证文件是否会损害虚拟机
准备:静态变量初始化
解析:符号引用转直接引用
初始化:开始初始化

new一个对象要经过哪几步:
1、堆中创建对象
2、初始化值
3、赋予引用

讲一讲JVM内存区域:
执行引擎、本地方法库接口、本地方法库、运行时区域

讲一讲 运行时区域:
线程私有:程序计数器,虚拟机栈,本地方法栈(要很熟悉)
线程共有:堆、方法区

了解元数据区嘛?
元数据区会溢出嘛?溢出报什么错误?

讲一讲双亲委派机制(老八股文了,不会的多看看)
如何打破双亲委派机制(复写类加载器的loadClass和findClass)
打破双亲委派机制的例子?

问题主要出自以下知识点,以下知识点掌握就OK了。

JVM
限于自己水平不足,以上可能有很多错误,请各位指正。

以上,结束,愿各位早日拿到满意的offer。


相关文章