我宣布,腾讯才是宇宙的终点......
继阳关普照、应届生房补后,在一重拳福利......
不说了,我跪久了,站不起来了......
这条命,以后就是我司的了。
自面试上之后再一次嗨起来
我先分享一波我的面试经历吧
六月份就收到腾讯的面试通知一共经历了三面,可谓是困难重重~
腾讯六月份面试
一面 42min 电话面试
- 项目经历,开发中遇到什么问题,最后怎么解决的
- TCP三次握手,拥塞控制
- 一面更多的是聊项目,面试官没有问太多基础的知识,面试官主要是在我介绍自己项目的时候切入问问题,整个过程氛围很开心。
二面 45min 视频面试 3.21
- 安卓的设计模式有没有了解,工厂模式之类的
- IPC,多线程
- hashmap相关 1.扩容因子 2.hashmap与hashtable区别 3.hashmap重写了equals方法但是不重写hashcode方***怎么样 4.haspmap查找的时间复杂度,可不可以优化 5.我说把链表改成双向链表,还可以改成avl树,b树,b+树,减少查找的时间复杂度。
- 计网三次握手,四次挥手
- 两道算法 1.一个简单博弈问题,两个人分别选择最大的数直到选完,求最后两个手上数的和之差,实际上是排序就行了,重点在排序算法的选择,可以直接用C++的sort函数,我自己手写了归并排序来用。 2.提供一种大小为N的CD,还告诉你有两种大小A,B的歌,每种歌的数量也告诉你为x,y,往CD里放歌,尽量利用CD的空间能放多少放多少,每首歌不可拆分放,可用的CD总数不限,求有多少种排列方式。最后理了思路,就是用递归就行了。
- 项目相关,开发中遇到的问题及解决办法
- 问面试官问题,问的是面试官您认为哪些能力是更重要的,面试官说是基础更重要——数据结构,计网,算法。
三面 2h10min 视频面试
- 操作系统相关知识 1.栈内存,堆内存 2.进程,线程 3.竞争
- 计网 1.TCP三次握手 2.TCP拥塞控制 3.浏览器访问网址,具体发生了什么 4.DNS协议怎么工作的
- 安卓相关知识 1.activity生命周期 2.为什么要有任务栈,任务栈有什么作用 3.viewholder的作用 4.view绘制过程 5.view,window和activity之间的区别 6.OOM什么情况会发生,怎么解决
- 两道算法题 1.a[100]中逐个填1~100的随机数,且不能重复 2.大数相乘
- 项目经历,开发中遇到的问题及解决办法
- 谈谈你的优点
- 你之前腾讯面试失败,是为什么,那两道题为什么没做出来 1.那道题是输入一个字符串,从中删除n个字符,剩下的字符构成回文串,求n的最小值,确实难;另一题是无权图中两点最短路径,思路很简单就是BFS
- 最后问问题环节 1.第一个问题问的依旧是,面试官您认为哪方面的能力或者是能力更重要,面试官说基础,操作系统,计网,数据结构算法这些。 2.最后问了面试官才知道,是QQ部门的,嘿嘿......
最后顺利入职啦~
想要想我一样收获腾讯Offer其实也不难,不管你是不是应届生,能力提升总是没错。下面就和大家分享一些准备面试的技巧
第一点:心态
首先一个,心态要好,要相信自己,稳住不要慌。
第二点:基础知识
初级所需要的知识
掌握Android 四大组件知识,深入了解相关生命周期,对于Application、Fragment、Intent常见的开发知识也必须掌握。 掌握Android 基本布局和控件的属性和使用,常用布局有LinearLayout、RelativeLayout、ConstraintLayout等,控件有TextView、ImageView、RecyclerView、ScrollView等。 对Android的资源访问使用有基本了解,了解Android针对不同国家、语言、屏幕、API的适配原理。 掌握android系统服务和工具类的使用,对网络访问和数据库操作有基本认知。 熟练掌握研发工具,如IDE、模拟器、网络代理、日志等。
中级所需要的知识
熟悉SOLID基础设计原则,掌握23种设计模式。 对于研发语言特性java/kotlin有深入理解,如反射、动态代理、apt等。 对Android架构有基础了解,对apk结构和打包原理有深入了解。 对于Android各个版本特性有基本了解,如MD设计、权限管理、doze模式等。 熟练掌握各种研发调试工具,如git、gradle、mat、layout inspector等。 掌握Handler\AsyncTask原理,熟悉多线程开发。 对绘页面制原理有初步理解,能够实现一个复杂自定义控件。 能够熟练掌握开源库的使用,如图片库(Glide\Fresco)、网络库(Volley\okhttp\Retrofit)、工具(Dagger\RxJava\EventBus)等,能够对这些常用的库进行二次封装。 熟悉应用常见的优化方法,避免编写内存泄漏的代码。
高级所需要的知识
掌握java高级特性,如JUC、线程池、NIO\BIO等;掌握jvm虚拟机知识,如内存模型、GC原理、类加载机制、线程模型等。 对Android运行环境有深入理解,理解Android沙盒机制,掌握AIDL原理及Binder通信原理,了解app和activity启动原理。 掌握热修复原理,各大厂商方案的优缺点。 对于Android事件分发有深入理解,重点掌握触摸事件机制。 深入理解Android绘制原理,理解VSYNC和surface机制和窗口原理。 深入理解Android动画原理,包括补间动画和属性动画。 对于Android安全机制有基本认知,理解Android安全原理。 深入理解端上设计范式思想,如mvc\mvp\mvvm\clean-arch等。 理解架构演进,有良好的分层和拆分思路,掌握模块化、插件化、动态部署等。 对新技术敏感,理解掌握下一代架构dynamic feature等
这里把腾讯等大厂经常问的那些题目进行了综合性的搜集整理(含答案解析)。
整理目录
整理内容(部分截图)
第一章Android 相关
第二章 性能优化
第三章 Java 相关
第四章 Kotlin 相关
第五章 网络相关
第六章 插件化&热修复&模块化&组件化&增量更新&Gradle
第七章.图片相关
第八章 Flutter 相关
大家可以扫码找我免费获取,希望这份资料对大家的学习和工作有所帮助。帮助大家进行知识的查漏补缺。 ↓↓↓↓↓
第三点:算法
但凡互联网大厂算法都必不可少。
作为一个过来人提醒大家:想要从事计算机技术岗位,在大学本科阶段一定要早早的刷题,打好扎实的算法与数据结构基础。
时间充足的朋友建议在刷题之前看一些书
《漫画算法之旅》
《剑指 offer》
《labuladong的算法小抄》
《算法导论》
《数据结构与算法之美》
《算法面试通关40讲》
下面就是我自己根据上面书籍整理的部分知识。
算法笔记
第一章、动态规划系列
- 动态规划解题套路框架
- 动态规划答疑篇
- 动态规划设计:最⻓递增⼦序列
- 经典动态规划:0-1 背包问题
- 经典动态规划:完全背包问题
- 经典动态规划:⼦集背包问题
- 经典动态规划:编辑距离
- 经典动态规划:⾼楼扔鸡蛋
- 经典动态规划:⾼楼扔鸡蛋(进阶)
- 经典动态规划:最⻓公共⼦序列 .... ...
- 贪⼼算法之区间调度问题
- 团灭 LeetCode 股票买卖问题
- 团灭 LeetCode 打家劫舍问题
第二章、数据结构系列
- 算法学习之路
- 学习数据结构和算法读什么书
- ⼆叉堆详解实现优先级队列
- LRU算法详解
- ⼆叉搜索树操作集锦
- 如何计算完全⼆叉树的节点数
- 特殊数据结构:单调栈
- 特殊数据结构:单调队列
- 设计Twitter
- 递归反转链表的⼀部分
- 队列实现栈|栈实现队列
第三章、算法思维系列
- 学习算法和刷题的思路指南
- 回溯算法解题套路框架
- 回溯算法团灭⼦集、排列、组合问题
- 回溯算法最佳实践:解数独
- 回溯算法最佳实践:括号⽣成 ⼆分查找详解
- 双指针技巧总结
- 滑动窗⼝技巧 ... ...
- 信封嵌套问题
- ⼏个反直觉的概率问题
- 洗牌算法
- 递归详解
第四章、高频面试系列
- 如何实现LRU算法
- 如何⾼效寻找素数
- 如何⾼效进⾏模幂运算
- 如何计算编辑距离
- 如何运⽤⼆分查找算法
- 如何⾼效解决接⾬⽔问题
- 如何去除有序数组的重复元素
- 如何寻找最⻓回⽂⼦串
- 如何运⽤贪⼼思想玩跳跃游戏
- 如何k个⼀组反转链表 ... ...
- Union-Find算法应⽤
- ⼀⾏代码就能解决的算法题
- ⼆分查找⾼效判定⼦序列
第五章、计算机技术
- Linux的进程、线程、⽂件描述符是什么
- 关于 Linux shell 你必须知道的
- Linux shell 的实⽤⼩技巧
- ⼀⽂看懂 session 和 cookie
- 加密算法的前⾝今世
- Git/SQL/正则表达式的在线练习平台
总结
这份资料最具价值的就是实战项目部分。
理论部分教科书上已经足够了,但是实战的分析是很难找到的。阅读这份资料,就是在和大佬对话,相信你的收获一定不少。
PS:除了学习,这份资料还可以当做一个面试宝典来用,里面有很多大项目的组件化分析,相信你看过后再次面对面试官的时候一定能侃侃而谈。
最后在这里希望大家工作顺利,没有BUG,不加班,没有工作的朋友,面试顺利,offer不断。
有需要的朋友可以直接点击【下方的二维码】找我免费获取全套资料。
↓↓↓↓↓