面试旺季来即,分享面经 毕业1年的我是怎么斩获腾讯系公司的offer?来看看我的面试是怎样的。
这里是双非本科毕业一年的Android开发渣渣,坐标深圳。在毕业和准备面试的时候看了牛客上的许多面经,因此现在准备回馈分享一波我的面试经历。
我社招的状态是在职精投,除了富途,还投了腾讯和字节。其中腾讯音乐的QQ音乐部门捞了我,但是很可惜,倒在了二面,QQ音乐的面经后面整理了再发吧。
感觉一年经验的社招和校招差不多,四轮都是视频面试,面试官都很准时,而且人都很好,在回答卡住的时候会给与提示,在反问环节我也看出了面试官的思路是非常清晰的,总的来说整个面试过程非常nice。
5.28投简历,5.29晚约视频面试。
一面 1h15min
- 为什么想换公司
- 在开发中遇到的最大的困难?怎么解决的
- 接口和抽象类的区别,一个类的能不能多继承,能不能实现多个接口
- 接口类的非方法能不能被修改?不能,接口类里非方法的类型都是final修饰,所以必须初始化并且不能被修改
- 抽象类的变量可以被继承和修改么?可以final关键字
- GC如何标记要回收的内存?GC Roots有哪些
- 线程安全问题,sychronized、lock/unlock的区别使用,公平锁和非公平锁的概念
- sychronized是如何体现公平锁和非公平锁的(CAS、锁自旋)
- HashMap原理,在什么时候扩容(当加入的元素大于阈值threshold后)。以及线程安全的
HashTable
、ConcurrentHashMap
的原理 - View的事件分发
- 布局优化怎么做的?LinearLayout和RelativeLayout在性能上的区别
- WebView的优化,如果出现了数据的交互该怎么做?(AIDL),Binder怎么实现进程间通信的?mmap的模型
- 内存优化?RecyclerView的缓存机制,如何优化
- 项目中的联网模块怎么实现的?UDP和TCP的区别
- TCP会检查包的顺序么,Tcp怎么控制包的发送(滑动窗口)
- 看到项目中使用了WebSocket,讲下它和Http的区别
- RxJava的操作符?项目中是如何使用RxJava的
- 快速排序和冒泡排序的稳定性问题
编程题:将一个分数转化成小数形式输出,因为分数只可能是有限小数或无限循环小数。如果小数是无限循环小数,则使用小括号括起。
这题思路是做while轮除。我界定是否产生了无限循环小数是使用的HashTable。
对我们公司了解多少?有什么想问的?
二面 45min
- 为什么想要离开当前的公司
- "abcde"字符串在内存中占多大,这些字节在JVM的编码格式
- JVM堆和栈的作用,进程和线程的作用,堆栈和线程进程的对应关系
- 死锁怎么产生?如何去解决死锁,多个方案
- 线程同步问题,自增是原子操作吗?如果要做到线程安全的自增要做怎么做
- 快排的过程,时间复杂度,n*lgn是如何得来的
- Http是在哪一层,Https使用了非对称加密还是对称加密?
- TCP和UDP的区别?为什么UDP不可靠还要使用UDP
- 拥塞控制和流量控制的区别
智力题:给一篮子鸡蛋,如何用最少的比对次数找到最大的和最小的鸡蛋,。
我的回答是 一开始,随便拿出两个鸡蛋,然后接下来剩下的鸡蛋每拿出一个,就和这两个进行比较,如果比两个中小的鸡蛋小就替换小的那个,如果比大的鸡蛋大就替换掉大的那个,这样比较次数就是 (n-2)2 ,因为有些鸡蛋只用比一次就行了(因为是最小的就不用往大的比了),所以结果是小于 (n-2)2的,但我觉得应该还可以更加快....
编程题,排序二叉树的插入,如果插入相同的数,需要做什么保证树可以还原(即不允许丢弃到相同的数)?
- 有什么要问的?
三面 1h20min
两桶油漆,A桶全是红色油漆,B桶全是蓝色油漆,将A桶中取一勺倒入B中,再从B桶中取一勺倒入A中,求A桶的蓝红比例和B桶的红蓝比例,是大于、小于还是等于?
- 用一个数组实现一个循环队列
- 给定一个只有“R”“G”“B”三个字母的字符串,用一次遍历基于原字符串将他们以“RGB”的顺序排序好(LeetCode原题)
- 52张扑克牌,取一张不放回,再取一张, 两张为相同颜色的概率是多少?
hr面 45min
- 自我介绍
- 为什么选择计算机这个专业
- 为什么要离开当前的公司
- 你是深圳的,为什么会选择在东莞工作
- 在上一个公司学到了什么
- 选择公司因素,按优先级排个序
- 用三个关键词描述自己
- 代入用户思维和不代入用户思维做产品有什么区别
- 家庭情况,有没有女朋友
- 你觉得一个好胜心过强的人会有什么样的问题
- 你会想在团队里面承担一个什么样的角色
- 平时的爱好是什么
- 有没有给自己制定一些计划?对自己的要求有多高
- 学习的渠道、方式,有GitHub吗?看什么样的书
- 学习是基于公司项目学习,还是个人兴趣学习
- 预计到岗时间,期望薪资
- 反问环节
总结一下,技术面环节主要考项目和Java基础、编程题要注意规范和思路是否最优。
和HR小哥哥聊得很开心,他说下周会给offer call,我就乖乖的等着。
关于面试复习路线
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
这里给大家提供一个方向,进行体系化的学习:
1、看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
2、进行系统梳理知识,提升储备
客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
系统学习方向:
- 架构师筑基必备技能:深入Java泛型 注解深入浅出 并发编程 数据传输与序列化 Java虚拟机原理 反射与类加载 动态代理 高效IO
- Android高级UI与FrameWork源码:高级UI晋升 Framework内核解析 Android组件内核 数据持久化
- 360°全方面性能调优:设计思想与代码质量优化 程序性能优化 开发效率优化
- 解读开源框架设计思想:热修复设计 插件化框架解读 组件化框架设计 图片加载框架 网络访问框架设计 RXJava响应式编程框架设计 IOC架构设计 Android架构组件Jetpack
- NDK模块开发:NDK基础知识体系 底层图片处理 音视频开发
- 微信小程序:小程序介绍 UI开发 API操作 微信对接
- Hybrid 开发与Flutter:Html5项目实战 Flutter进阶
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
3、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
4、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三。
这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。