美文网首页Android技术知识Android进阶之路Android开发
“老板,对不起!我胃不好,您给的饼我消化不来”,我去腾讯吃“软饭

“老板,对不起!我胃不好,您给的饼我消化不来”,我去腾讯吃“软饭

作者: 字节跳不动 | 来源:发表于2021-03-03 21:46 被阅读0次

    啊!我亲爱的张姓前老板,真希望你也会逛简书,能看到我对你深深的歉意!

    前言

    我是一名双非本科毕业一年的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

      1. 为什么离开上家公司
      1. 在开发中遇到的最大的困难?怎么解决的
      1. 接口和抽象类的区别,一个类的能不能多继承,能不能实现多个接口
      1. 接口类的非方法能不能被修改?不能,接口类里非方法的类型都是final修饰,所以必须初始化并且不能被修改
      1. 抽象类的变量可以被继承和修改么?可以final关键字
      1. GC如何标记要回收的内存?GC Roots有哪些
      1. 线程安全问题,sychronized、lock/unlock的区别使用,公平锁和非公平锁的概念
      1. sychronized是如何体现公平锁和非公平锁的(CAS、锁自旋)
      1. HashMap原理,在什么时候扩容(当加入的元素大于阈值threshold后)。以及线程安全的HashTableConcurrentHashMap的原理
      1. View的事件分发
      1. 布局优化怎么做的?LinearLayout和RelativeLayout在性能上的区别
      1. WebView的优化,如果出现了数据的交互该怎么做?(AIDL),Binder怎么实现进程间通信的?mmap的模型
      1. 内存优化?RecyclerView的缓存机制,如何优化
      1. 项目中的联网模块怎么实现的?UDP和TCP的区别
      1. TCP会检查包的顺序么,Tcp怎么控制包的发送(滑动窗口)
      1. 看到项目中使用了WebSocket,讲下它和Http的区别
      1. RxJava的操作符?项目中是如何使用RxJava的
      1. 快速排序和冒泡排序的稳定性问题
      1. 编程题:将一个分数转化成小数形式输出,因为分数只可能是有限小数或无限循环小数。如果小数是无限循环小数,则使用小括号括起。(这题思路是做while轮除。我界定是否产生了无限循环小数是使用的HashTable。)
      1. 对我们公司了解多少?有什么想问的?

    2.12 二面 45min

      1. "abcde"字符串在内存中占多大,这些字节在JVM的编码格式
      1. JVM堆和栈的作用,进程和线程的作用,堆栈和线程进程的对应关系
      1. 死锁怎么产生?如何去解决死锁,多个方案
      1. 线程同步问题,自增是原子操作吗?如果要做到线程安全的自增要做怎么做
      1. 快排的过程,时间复杂度,n*lgn是如何得来的
      1. Http是在哪一层,Https使用了非对称加密还是对称加密?
      1. TCP和UDP的区别?为什么UDP不可靠还要使用UDP
      1. 拥塞控制和流量控制的区别
    • 9 . 智力题:给一篮子鸡蛋,如何用最少的比对次数找到最大的和最小的鸡蛋。
      (我的回答是 一开始,随便拿出两个鸡蛋,然后接下来剩下的鸡蛋每拿出一个,就和这两个进行比较,如果比两个中小的鸡蛋小就替换小的那个,如果比大的鸡蛋大就替换掉大的那个,这样比较次数就是 (n-2) *2 ,因为有些鸡蛋只用比一次就行了(因为是最小的就不用往大的比了),所以结果是小于 (n-2) *2的,但我觉得应该还可以更加快...)
      1. 编程题,排序二叉树的插入,如果插入相同的数,需要做什么保证树可以还原(即不允许丢弃到相同的数)?
      1. 有什么要问的?

    2.17 三面 1h20min

      1. 两桶油漆,A桶全是红色油漆,B桶全是蓝色油漆,将A桶中取一勺倒入B中,再从B桶中取一勺倒入A中,求A桶的蓝红比例和B桶的红蓝比例,是大于、小于还是等于?
      1. 用一个数组实现一个循环队列
      1. 给定一个只有“R”“G”“B”三个字母的字符串,用一次遍历基于原字符串将他们以“RGB”的顺序排序好(LeetCode原题)
      1. 52张扑克牌,取一张不放回,再取一张, 两张为相同颜色的概率是多少?

    hr面 45min

      1. 自我介绍
      1. 为什么选择计算机这个专业
      1. 为什么要离开上家的公司
      1. 在上一个公司学到了什么
      1. 选择公司因素,按优先级排个序
      1. 用三个关键词描述自己
      1. 代入用户思维和不代入用户思维做产品有什么区别
      1. 家庭情况,有没有女朋友
      1. 你觉得一个好胜心过强的人会有什么样的问题
      1. 你会想在团队里面承担一个什么样的角色
      1. 平时的爱好是什么
      1. 有没有给自己制定一些计划?对自己的要求有多高
      1. 学习的渠道、方式,有GitHub吗?看什么样的书
      1. 学习是基于公司项目学习,还是个人兴趣学习
      1. 预计到岗时间,期望薪资
      1. 反问环节

    简单总结

    总结一下,技术面环节主要考项目和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相关源码解读部分内容
    • 腾讯历年面试真题集(含解析)
    腾讯历年面试真题集(含解析)
    由于篇幅原因,需要以上完整学习笔记及面经pdf如有需要,可以 点赞+评论 支持下我,然后点击这里免费自取

    相关文章

      网友评论

        本文标题:“老板,对不起!我胃不好,您给的饼我消化不来”,我去腾讯吃“软饭

        本文链接:https://www.haomeiwen.com/subject/lkjcqltx.html