啊!我亲爱的张姓前老板,真希望你也会逛简书,能看到我对你深深的歉意!
前言
我是一名双非本科毕业一年的Android开发渣渣,坐标深圳。在此次上岸腾讯之前,自己一直都是在一家10多人的创业公司承当“Android首席开发官”的职务。从裸辞准备到上个月20号拿到腾讯的offer,历经2个多月的时间,接下来就给大家分享一下我这段时间的学习心得与面试经验。
所谓“Android首席开发官”,其实也就是跟朋友吹牛皮时的一句玩笑话。包括老板、财务、业务人员、开发人员等,拢共15个人,如果算上物业的保洁,就算15个半吧。我马某很是“有幸”从这15个半的员工当中脱颖而出,出任“Android首席开发官”一职。
“一个人守一座城”的磨练,让我不得不去不断的加深自己的技术深度与广度,来以坐稳高位,但同时提升的还有自己的眼界与“野心”。
“我TN的,全公司Android这块的开发就是我一个人在抗,钱还给得少!”
“辛辛苦苦干了一年,竟然连个年终奖都没得,说是因为今年公司没怎么赚钱,明年补3倍?”
“那你前阵子刚换的奥迪A6L,是TN的中彩票中的?老子还不跑路,还留着过年?”
这是一个悲伤的故事,但现在看来又是个幸运的故事。感谢你的磨练,技术上和身心上双重的。12月底办完离职手续,然后开始面试准备,刷面试题,算法题,面经,然后投了一轮非知名“大公司”来检验自己,查漏补缺,复盘学习。在2月初的时候开始冲击大厂,算下来投了,字节、美团、oppo、阿里、腾讯、百度、网易,最终被腾讯音乐的QQ音乐收了。
一点面经
总的感觉,虽然是社招,但是对于只有一年经验的面试者其实和校招感觉差别不是很大,四轮都是视频面试,面试官都很准时,而且人都很好,在回答卡住的时候会给与提示,在反问环节我也看出了面试官的思路是非常清晰的,总的来说整个面试过程非常nice。接下里就给大家具体分享下腾讯四面的面试题,希望能给准备面试腾讯Android岗的小伙伴一些思路和帮助!
2.9 一面 1h15min
- 为什么离开上家公司
- 在开发中遇到的最大的困难?怎么解决的
- 接口和抽象类的区别,一个类的能不能多继承,能不能实现多个接口
- 接口类的非方法能不能被修改?不能,接口类里非方法的类型都是final修饰,所以必须初始化并且不能被修改
- 抽象类的变量可以被继承和修改么?可以final关键字
- GC如何标记要回收的内存?GC Roots有哪些
- 线程安全问题,sychronized、lock/unlock的区别使用,公平锁和非公平锁的概念
- sychronized是如何体现公平锁和非公平锁的(CAS、锁自旋)
- HashMap原理,在什么时候扩容(当加入的元素大于阈值threshold后)。以及线程安全的
HashTable
、ConcurrentHashMap
的原理
- HashMap原理,在什么时候扩容(当加入的元素大于阈值threshold后)。以及线程安全的
- View的事件分发
- 布局优化怎么做的?LinearLayout和RelativeLayout在性能上的区别
- WebView的优化,如果出现了数据的交互该怎么做?(AIDL),Binder怎么实现进程间通信的?mmap的模型
- 内存优化?RecyclerView的缓存机制,如何优化
- 项目中的联网模块怎么实现的?UDP和TCP的区别
- TCP会检查包的顺序么,Tcp怎么控制包的发送(滑动窗口)
- 看到项目中使用了WebSocket,讲下它和Http的区别
- RxJava的操作符?项目中是如何使用RxJava的
- 快速排序和冒泡排序的稳定性问题
- 编程题:将一个分数转化成小数形式输出,因为分数只可能是有限小数或无限循环小数。如果小数是无限循环小数,则使用小括号括起。(这题思路是做while轮除。我界定是否产生了无限循环小数是使用的HashTable。)
- 对我们公司了解多少?有什么想问的?
2.12 二面 45min
- "abcde"字符串在内存中占多大,这些字节在JVM的编码格式
- JVM堆和栈的作用,进程和线程的作用,堆栈和线程进程的对应关系
- 死锁怎么产生?如何去解决死锁,多个方案
- 线程同步问题,自增是原子操作吗?如果要做到线程安全的自增要做怎么做
- 快排的过程,时间复杂度,n*lgn是如何得来的
- Http是在哪一层,Https使用了非对称加密还是对称加密?
- TCP和UDP的区别?为什么UDP不可靠还要使用UDP
- 拥塞控制和流量控制的区别
- 9 . 智力题:给一篮子鸡蛋,如何用最少的比对次数找到最大的和最小的鸡蛋。
(我的回答是 一开始,随便拿出两个鸡蛋,然后接下来剩下的鸡蛋每拿出一个,就和这两个进行比较,如果比两个中小的鸡蛋小就替换小的那个,如果比大的鸡蛋大就替换掉大的那个,这样比较次数就是 (n-2) *2 ,因为有些鸡蛋只用比一次就行了(因为是最小的就不用往大的比了),所以结果是小于 (n-2) *2的,但我觉得应该还可以更加快...) - 编程题,排序二叉树的插入,如果插入相同的数,需要做什么保证树可以还原(即不允许丢弃到相同的数)?
- 有什么要问的?
2.17 三面 1h20min
- 两桶油漆,A桶全是红色油漆,B桶全是蓝色油漆,将A桶中取一勺倒入B中,再从B桶中取一勺倒入A中,求A桶的蓝红比例和B桶的红蓝比例,是大于、小于还是等于?
- 用一个数组实现一个循环队列
- 给定一个只有“R”“G”“B”三个字母的字符串,用一次遍历基于原字符串将他们以“RGB”的顺序排序好(LeetCode原题)
- 52张扑克牌,取一张不放回,再取一张, 两张为相同颜色的概率是多少?
hr面 45min
- 自我介绍
- 为什么选择计算机这个专业
- 为什么要离开上家的公司
- 在上一个公司学到了什么
- 选择公司因素,按优先级排个序
- 用三个关键词描述自己
- 代入用户思维和不代入用户思维做产品有什么区别
- 家庭情况,有没有女朋友
- 你觉得一个好胜心过强的人会有什么样的问题
- 你会想在团队里面承担一个什么样的角色
- 平时的爱好是什么
- 有没有给自己制定一些计划?对自己的要求有多高
- 学习的渠道、方式,有GitHub吗?看什么样的书
- 学习是基于公司项目学习,还是个人兴趣学习
- 预计到岗时间,期望薪资
- 反问环节
简单总结
总结一下,技术面环节主要考项目和Java基础、编程题要注意规范和思路是否最优。和HR小姐姐聊得很开心,然后在2月20号收到了offer。
一些分享
因为上家公司“Android首席开发官”职责的原因,所以平时加了不少技术交流群,以便于自己在遇到问题后,请教学习。这次能成功跳槽腾讯,也是非常感谢群内一位腾讯的前辈老哥给予的一些学习计划指导,和一些面试题、技术笔记分享,让我在短时间内有实力“入赘”腾讯。再经得大佬同意的前提下,我把这套进阶笔记及面试题集分享出来,希望能帮助到更多有着大厂梦的朋友。
- 架构师筑基必备技能
目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。
知识要点:
1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO
架构师筑基必备技能
- 设计思想解读开源框架
随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。
所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。
知识要点:
1、热修复设计
2、插件化框架设计
3、组件化框架设计
4、图片加载框架
5、网络访问框架设计
6、RXJava响应式编程框架设计
设计思想解读开源框架
- 360°全方位性能调优
在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。
另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。
1、设计思想与代码质量优化
2、程序性能优化
- 启动速度与执行效率优化
- 布局检测与优化
- 内存优化
- 耗电优化
- 网络传输与数据储存优化
- APK大小优化
3、开发效率优化
- 分布式版本控制系统Git
- 自动化构建系统Gradle
4、项目实战
- 启动速度
- 流畅度
- 抖音在APK包大小资源优化的实践
- 优酷响应式布局技术全解析
- 网络优化
- 手机淘宝双十一性能优化项目揭秘
- 高德APP全链路源码依赖分析
- 彻底干掉OOM的实战经验分享
- 微信Android终端内存优化实践
360°全方位性能调优
- Android框架体系架构
Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。
Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。
本篇知识要点:
1、高级UI晋升
2、Android内核组件
3、大型项目必备IPC
4、数据持久与序列化
5、Framework内核解析
Android框架体系架构
- NDK模块开发(音视频系列)
NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C++ 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。
在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。
本篇知识要点:
1、NDK开发之C/C++入门
2、JNI模块开发
3、Linux编程
4、底层图片处理
5、音视频开发
6、机器学习
NDK模块开发
- Flutter学习进阶
2019 年无疑是 Flutter 技术如火如荼发展的一年。
每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。
本篇知识要点:
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门
......
Flutter学习
- 微信小程序开发
微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。
本篇知识要点:
1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战
微信小程序开发
-
Android相关源码解读
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
Android相关源码解读
Android相关源码解读部分内容
- 腾讯历年面试真题集(含解析)
腾讯历年面试真题集(含解析)
网友评论