我三年开发经验,从字节跳动抖音组离职后,一口气拿到15家公司Offer,薪资再一次直线上涨~...

点击上方“俊林”,立刻关注,天天早上8:50准时推送前端

真爱,请置顶或星标java

本文做者:K-night(垭超)下文中的“我”均指垭超,不是鱼哥,阅读本文须要40分钟,建议先收藏本文,本文已获做者受权,转载请联系做者。原文连接:https://blog.csdn.net/a296777513/article/details/90728308android

前言

我这篇文章并非简单的描述一些面试中的题,或者总结一些Android的知识,而是想记录我整个的想法和准备的过程,以及一些心得体会,让你们更加全面的去看待工做、跳槽和生活(从个人角度,固然确定有不合理的地方,你们借鉴就好),以前17年跳槽曾在鱼哥公号独家受权过一篇文章《一年Android工做经验,一举拿下百度、网易、美团、小米、快手等Offer面经》你们能够先看了解我一些背景,上次跳槽选择去了字节挑动抖音组。此次是19年上半年离开抖音(鱼哥点评:做者真牛逼,又一次开挂了)c++

在字节跳动的两年时间中见证了抖音从百万日活到2.5亿、团队从10人到100多人的过程,技术上不一样时期的选型以及迭代、沉淀和更替。项目上经历了一个工程到模块化再到组件化最后插件化,深入理解项目不一样阶段和不一样体量的时候技术框架的选型。流程上不一样阶段不一样的方案,一直在探索最大的效率的协同开发。产品上从不断试错到稳步发展的过程,也就是数据驱动业务的过程。git

字节跳动是一个伟大的公司,优秀的同事真是数不胜数,我在其中只是一个菜鸟,仰望各类大佬,无论是从技术方面仍是作人作事的方面都学到了不少、成长了不少。在抖音的两年十分感谢个人同事、领导对个人帮助和提携,尤为是亨惠、火火老师、马老师、夏老师、将军、若雷、乐华、龙博等等一群大牛,还有漂亮的pm小姐姐佳鑫,和帅气的设计师冬冬,只能说我是何其的幸运,可以和一群优秀的同事一块儿共事、见证一款伟大app的崛起。程序员

此次面试了如下几个公司(不是面试顺序):Airbnb快陪练探探猿辅导趣头条脉脉动动瓜子二手车伴鱼最右BIGO音娱快手小红书美菜网微软亚马逊Ihandy饿了么爱奇艺右划。其中面试没经过的是:脉脉(一面挂),其余的公司都到了hr面谈薪资,美菜网、音娱、动动、猿题库等公司hr开诚布公的跟我说给不了我要的价钱,虽然技术面评价不错,我也明白,因为拿到一些offer后,我对不太想去的公司会要的比较高,我本身都以为确定不会给。微软和亚马逊有另外的状况,由于当时已经基本肯定拿到Airbnb的offer加上眼睛由于上火长了针眼,特别疼,就直接拒绝了。可能有同窗发现了,为何此次我没有去BAT去试试(百度、阿里、腾讯),百度的确没有投递,阿里和腾讯不是我不想去,实在是太慢了(多是我没有走内推,而是在boss投递的缘由),基本上是投递后一个月后才告诉我简历经过去面试。github

为何要跳槽

为何要跳槽,这个问题必定要思考清楚,由于跳槽的成本实际上是挺大的,在一家公司积累的不只仅是人脉还有对当前行业以及业务的熟悉度,新进入一家公司,一切须要从头再来,须要快速的证实本身,尤为是技术人员,还有就是对新环境和代码的熟悉,这些都是成本,因此在跳槽前,必定要想好,为何要跳槽。其实马爸爸有一句经典的话“要么钱没给到位,要么心委屈了”,说的很形象,我这里再细说一下:web

  • 钱没给到位,其实全部的人对本身的评价都是比本身真实的水平要高一些,这就致使,大部分人认为本身如今贡献很大,老板应该加薪,尤为是看到一些同事作的不如本身(多是本身认为),工资拿的和本身同样,甚至比本身高,那就更加有钱给的少了的感受。面试

  • 作的事情是否有价值或者说是否有持续盈利的趋势,这个很重要,一个公司的产品不盈利没前景,就算给你开不错的工资,做为一个不想混吃等死的人来讲,都不想继续再待下去。算法

  • 机会,做为一个已经有3年工做经验的人来讲,这个时候更加须要的是一个机会,可以证实本身,给公司带来更大的价值,完成进一步的突破,若是当前的公司并不能给你这个机会,那么你就须要考虑跳槽了。

那么跳槽的核心就是利益最大化,固然这里说的利益,不只仅是薪资福利,还有本身的职业规划。

职业规划

做为技术人员,我大概总结了下面三个方向,其实哪一个方向都是大有可为,关键仍是要看本身。

  • 技术经理

  • 架构师

  • 专项领域的专家

  • 薪资福利

做为一个再也不年轻的程序员来讲,已经不能忽略薪资和福利,再也不像刚毕业的同窗,只要能成长、只要平台好,薪资什么的不重要。其实每一个阶段都有本身的侧重点,我大概对薪资、平台、成长排了个序(本身的观点)

  • 1~3年,平台>=成长>薪资

  • 3~5年,平台>=薪资>=成长

  • 5~10年,平台=薪资>成长(这个阶段也可叫作规划)

上面是本身不成熟的见解,从自身的一些经验出发的,仅供参考。

准备

这是最辛苦的阶段,你不只要把平常的工做作好,还要开始着手准备刷题、基础知识准备以及高阶知识的准备,除此以外我还对英语进行了一些准备,因为无论是想去外企、出国以及看英文的文档,英语都是必不可少的,英语在咱们的平常生活中也愈来愈重要,咱们要,整个阶段大概持续了4个多月。其实每一次跳槽,都是对这几年工做的一个梳理和总结,虽然你们都明白“面试造火箭、进去拧螺丝”的道理,对于公司而言,这是筛选人才的一个方式,毕竟人是第一辈子产力,只要有优秀的人才,那么造出的火箭才可能“一飞冲天”。对于我的而言,若是公司里同事优秀的人,那么你确定也不会差,咱们确定更但愿和优秀的人一块儿共事。

刷题

个人方式仍是以前的老套路LeetCode+《剑指offer》,虽然老,可是效果很是不错。这个过程不只是个脑力活仍是体力活,因为不能再公司刷题,我通常的选择方式是在晚上回到家后,因为公司常常加班,我一般到家是10:00-11:00期间,先锻炼半个小时(一会再聊这个事情),而后刷题半个小时到一个小时。固然也能够在上下班的路上抽时间看看题。

LeetCode,刷了300+的题,这里的刷并非指仅仅只刷一遍,我来回刷了四遍,手写了一遍(写了200多道),保证我看到题目或者相似的题目,我能第一时间想出最优的解题思路。《剑指offer》,这本书真的很棒,总结的很到位,以及每一个阶段的思路写的都很详细,我是百看不厌,大概50+题,多看几遍,这能作到触类旁通。

基础知识

因为面的Android岗位,须要准备一些Java和Android方面的知识,有不少的文章都会去介绍怎么去复习基础的知识或者进阶知识,或者是阅读一些经典的面试数据,例如任玉刚的《Android开发艺术探索》,都是很是不错的。你们能够根据网上的文章和一些数据梳理一个本身的知识体系,将一个一个知识点造成点再到面,这样能更加深入的理解,并且有本身的侧重点

简历

简历的重要性就不言而喻了,怎么样写好简历是个技术活,固然若是你有很好的背景(学校或者公司),那么无论你怎么写,基本上都不刷掉你,咱们做为通常的人仍是须要下一番功夫的。拿个人简历做为例子,大概有如下几个部分:

  • 我的信息:姓名、出生日期、教育背景、博客地址、github地址、联系方式(手机、邮箱和微信号)

  • 工做经历:毕业后待过哪些公司,通常是倒序,项目尽可能精简明了,能够参考SMART原则

  • 专业技能:本身熟悉的一些技能,这个为何我写到最后,由于对于工做三年的同窗来讲,面试官更加注重的是你的项目经历,大部分面试都是看你的项目经从来提问。

  • 怎样写简历,这个开源网站不错,教你怎么写简历,并且有一个在线markdown在线网站,能够导出pdf。

英语

其实这个过程对于大部分同窗来讲是不用准备的,因为我此次想去外企试试,并且,英语在咱们的平常生活中也愈来愈重要,不管是看英文文档、电影、外出旅游,都成为了必不可少的一种技能,因此我在2018年中旬就开始准备学习英语了,我学习英语的方式有下面三种

  • 薄荷阅读,到写这篇文章为止已经坚持了259天,天天10分钟,薄荷阅读通常在下班的路上听读,这个确实不错,并且能够选择适合本身水平的小说,天天就当看小说,这个过程仍是很愉悦和放松的(感受又回到我大学,看玄幻和武侠小说的时候,诛仙、庆余年、雪中悍刀行、将夜以及金庸的小说,鹿鼎记我就看了3遍),目前看了黑骏马、小王子、纳尼亚传奇、傲慢与偏见、真爱至上(碰见你以前)和真实人类(正在读)

  • 百斩词,坚持了214天,天天10-20分钟,在午休的时间。

  • 流利说,坚持了188天,天天30-40分钟,在午休时间(头条是12:00-14:00),因为须要跟读一些文章,通常会找一个小的会议室。
    整个过程真的很枯燥,因为目标很模糊,只是学好英文,能够简单对话,可是这个目标太宽泛和不明确,中途好几回想要放弃,可是想了想仍是坚持了下来,得出的结论是,作一件事情前要设定一个明确的目标。

  • 收获:单词量增长了不少,阅读的水平也提升了,能够无障碍的阅读大部分的英语文档和英文小说。听力增加的也比较快,通常的文章,不看文字,大体能挺动,可是口语就是通常了,因为流利说只是跟读或者背诵,提升的并很少,可是纠正了一些读音。640?wx_fmt=png

锻炼

“身体是革命的本钱”,这句话我本人十分承认,就算你技术世界第一,若是身体很差,那么也是空谈,我一直坚持着健身,基本上天天早上半个小时和晚上回到家半个小时,跟着Keep来作运动。

天天早上半个小时和晚上回到家半个小时,跟着Keep来作运动。周六日,若是没事,游泳2个小时,将近4千米。前一段时间体检,个人尿酸太高,这是是因为肉类、豆制品以及海鲜吃的过多(字节跳动的伙食真是太好了,天天各类肉类,每次都忍不住要多夹一些),并且不运动,我这个就纳闷了,我天天都在坚持运动呀,医生告诉我,我作的是无氧运动,会产生肌酸,和尿酸还会产生竞争关系,因为都是经过肾来分解,中间也有大概半年中止了游泳,因此我就克制吃肉了,并且又恢复了游泳,过了1个月检查,就减下来了。

你们必定要挤出时间来锻炼,身体好才能工做有精神,并且身体是本身,必定要珍惜。

640?wx_fmt=jpeg

面试

因为时间的缘由,有一些面试题记录的不是很是的详细,可是大体是这些,可能会漏掉一些题。这篇总结与2017年面试总结同样,我并不会给出答案,一个是由于,面试太多,细节实在记不住,并且有些题也有可能记错,有时候一天最多面试了4家,从早上10点到晚上9点一直在面试,我连续面试一周后,直接上火了,眼睛长了个针眼,肿的老大了。二是由于,我这篇文章主要目的并非带你复习Android的相应知识点,并且每一个人都有本身的侧重点。

“求其上者得其中,求其中者得其下”,按照这个原则此次面试我就大胆的面试架构师或者可以带人的职位,因此不少问题都是架构的考虑和知识的广度以及本身的思考,这些回答很大程度上是开放题,相信你们都有本身的想法和看法,我就不班门弄斧了,真的是由于抖音发展的太快,见识了太多的问题和优秀解决方案,因此只要本身用点心,能够学的地方仍是不少的。

1

公司:快陪练

仍是先填我的信息表格,其实我不太喜欢这种方式,一上来就是我的的详细信息,你又没有给我发offer,我也没决定要来,并且还没技术面。不过既然来了就要尊重公司的办事方式,我只简单写了一下我以为能够告诉公司的我的信息。而后作了一份笔试题,一道算法和一些网络方面的知识,不难。快陪练总体的环境并非很好,环境很嘈杂,并且我是在门口面试的,很乱。

一面
  • MVC、MVP和MVVM的原理和区别

  • 设计的六大基础原则

  • 使用UML画一下访问者设计模式

二面
  • 先聊了聊为何离开如今公司,毕竟如今这么火

  • 我作的项目中的一些解决方案,组件化、字节码注入、包体积的极致优化

  • 直播的架构设计

三面

设计一个上传日志的大小,涉及到,性能、文件大小、怎样压缩、时机、TopK问题等
聊了聊在字节跳动作的事情

总结

是一家创业公司,给的薪资仍是挺不错的,可是因为是996,没有加班工资,多出来的钱可能就是加班工资吧,后面听hr说公司正在打算取消996

2

公司:探探

是经过脉脉上网红马映怡推荐的,马映怡以前在字节跳动,今年4月份到了探探,在脉脉找到了我,正好我有出去看看的意向,就约了时间去面试,探探的办公环境仍是比较好的。

一面
  • OpenGL一些知识,顶点着色器、片元着色器的工做原理,什么是VBO(这个没想起来),以及shader的一些简单问题

  • View的事件传递机制

  • 包体积优化

  • JVM相关知识,Dalvik和ART的区别

  • 组件化的实现方案

  • 算法题,ViewGroup的层级深度,转换为二叉树的层级深度

二面
  • 二面面试官,比较注重思惟,我理解为聪不聪明的意思,有点脑筋急转弯的意思,要求的最简单有效的方法。

  • RecyclerView防止内存OOM的一道题,充分利用自身的缓存机制,可能我始终没理解问题所在,虽然给出解决方案,可是面试官不满意,太繁琐

  • 讨论LRUcache的实现和时间复杂度

三面

cto面试

  • 聊了一下抖音发展的过程当中个人角色,作过什么事情,有什么收益

  • 在华为的一些经历,为何离开华为

  • 聊了一到算法题,查找两个字符串的交集和字符串1中有字符串2中没有的问题。

四面

此次主要是聊一下我将要作的工做,以及让其余面试官再次了解一下我,由于评级比较高,因此须要谨慎点。

总结

总体来讲探探发展仍是不错,尤为近两年要上市(和陌陌签了对赌协议),环境也不错,管三餐,加班不严重,双休,工资也给力,可是也是因为近两年要上市,因此要作的东西仍是比较多和急,须要你有必定的能力。很尴尬的是在给我offer的第二周,探探就被Android市场下架了。

3

公司:猿题库

我是在boss投递的猿题库的Android开发岗位,结果hr小姐姐把我当成了server开发,先进来一位server的童鞋,让我写了一到算法题(二叉树的镜像),而后看看个人简历问我,是否是面试android的,我说是,她尴尬的说我是server面试官,而后赶忙与hr沟通,调整成为Android。猿题库面试应该是有硬性的时间指标,应该是每一轮面试都要差很少1个小时,而且会出1~2道算法题。

一面
  • 热修复,主要说了ClassLoader的方式和Rubost的插装方式,重点介绍了Rubost的原理。

  • 实现直播礼物的一些技术选型,和播放带有alpha通道MP4的解决方案

  • 怎么实现字节码注入

  • 抖音组件的探索,SPI到字节码注入,优缺点。

  • 接下来就是两道算法题

  • 1. String字符串的数字相加

  • 2. 使用三个线程顺序打印有序的数组

  • 提问环节

二面
  • 包体积优化:静态LintProguardAndResGuard和删除R.java中的全部字段,删除access方法,在gradle的transform阶段将压缩png和jpeg,使用google开源的redex方案,每种方案的原理以及优缺点

  • MVVM-livedata的实现原理

  • 属性动画的原理,这里没看过,不太清楚

  • Kotlin写一个let的扩展函数,大致写了一下代码。

  • 算法,多是我写的太慢了,因此就只有一道

  • 1. 给定一个有序的数组和目标数,找出与目标数最近接的index,要求复杂度是log(n)的时间复杂度

三面
  • 三面就比较轻松了,面试官一直乐呵呵的,又问了一下alpha视频的解决方案,而后聊了聊为何要离开这么火的项目,问了问个人经历之类的,最后写了两道算法题

  • 二叉树的深度和广度,要求一次遍历
    给定一个二叉树和一个目标数,在二叉树中是否存在一条路径的全部节点的和与目标数是相同的case,而且打印。

总结

效率并非很高,并且并不主动,多是跟我要的薪水过高有关系,后面经过询问才知道,技术面试是经过了,可能字节跳动原本薪水就很高,我再跳过来,猿辅导考虑到个人工做年限和年龄,会倒挂一大批人,因此只能平薪过来,并且这样知道我确定不会来,就没主动跟我说。

整个面试环节整体来讲还能够,可是就是效率不高,也多是我运气很差,我是4:10到猿题库的,而后在前台等了20所分钟,hr才来,说了刚才在电话会议耽误了,这个理解,而后等待面试又等了10多分钟,来了server的面试童鞋,写了道算法题,从新调整到Android面试,又等了15分钟,真正Android面试开始在5:10左右,面试完成后基本到了8:30了。对本身的表现基本满意,就是很久不手写代码,有点生疏,写的比较慢,大多数问题和答案都获得了面试的承认,对一些知识点没有复习到,其实我是这样认为的,并非全部的问题或者知识都须要知道,你只须要有1~2个方面了解的很透彻,获得面试官的承认就行。

4

公司:趣头条

一面
  • 在抖音上显示本身作的功能,框架的搭建,实现原理,所作的优化点等。

  • 组件化的实现,为何作组件化,不一样实现的优缺点。

  • hashmap的实现原理

  • view的优化,减小层级,异步加载,x2c框架引入,优缺点,textview的优化。

  • mp4播放alpha视频实现的原理

  • 一面面试官大概聊了1个小时左右,没让我写算法,细究原理和细节,很是仔细。

二面
  • 冷启优化的一些方案。

  • 数据驱动业务的理解,怎么作,和pm产生分歧怎么解决。

  • 我全部作的优化的收益是什么,有什么数据支撑。

  • 事件分发机制,举了一个具体的例子来解决。

  • http的一些问题,1.1和2.0区别,心跳机制,https怎么创建连接,怎么进行数据加密等。

  • 为何离开抖音,职业发展,诉求等。

  • 聊了大概一个小时,面试官的思路相对独特,不是为作技术而作技术,技术始终要服务于业务,我很是承认。

总结

趣头条北京位于海淀,位置不靠近地铁,须要步行一段时间,总体的环境也通常,不过效率挺高的,在面试完的次日就给我发offer了,面试流程也相对较少。对趣头条的营收模式看的不是很清楚,相似发钱看新闻,可是如今头条也再作这个,趣头条可以搞得过头条是个问题,若是没有增加点,那后期的转型是什么?
ps:从我拿到offer到如今已经一个多月了,股价从10美金跌倒了5美金,也就是说,我若是来趣头条,个人期权已经退水了一半,瑟瑟发抖,看来期权什么的仍是很虚呀。

5

公司:瓜子二手车

瓜子二手车真的是太远了,从海淀到工做地方将近花费了2个小时,并且还不在地铁附近,还须要坐公交。

一面
  • 聊了一下项目中作过的东西,字节码注入相关知识,transform优化,mp4礼物实现等

  • 从桌面点击icon图标开始,整个启动activity的启动过程

  • Binder的实现原理

  • 插件化的原理,以及hook点,大概有两个,能够网上搜索一下

  • hashmap的实现原理

  • 单例的实现,sychrnized的实现原理,以及双锁不加violate,会不会有线程安全问题

  • 二叉树,读取每一层最右边的节点

二面
  • 聊聊大概履历,以及在华为、字节跳动都作了什么,为何要离开。

  • 职业规划,怎么带领团队

  • 代码设计的基础原则,以及用UML画出工厂模式

  • 将两个有序的链表合并成一个有序的链表,递归和循环两中方式

  • 时间分发机制,而且须要从Android的sensor开始到应用层,我只知道从Activity开始的流程。

  • 聊操做系统Unix,汗颜,我知之甚少。

  • 对新技术的见解(flutter),瓜子二手车也已经开始在项目中使用fultter相关技术

三面(总监)
  • 自我介绍,为何要离开抖音

  • 线程安全的问题,sychronized和viloated的使用

  • 实现一个CAS(乐观锁)的方法

  • HashMap的实现原理,怎么优化内存占用,优化resize的过程,这个是开放的问题

四面(VP?)
  • 自我介绍,在抖音作了什么

  • 在抖音作的比较好的两件事情

  • 设计一个美团的框架,组件化

总结

瓜子二手车是众多二手车中作的还算比较好的公司,如今像优信、人人二手车好像都不是很好了,就是太远了,公司附近也没有地铁站,就算是公交站还须要走2千米,可是面试官感受仍是比较有水平的,后期的hr跟我谈也是诚意满满,整个团队在我来看,仍是一个想作事情的态度。整体来讲hr仍是很是真诚的,想去的朋友能够考虑考虑。

6

公司:伴鱼

笔试
  • 双锁单例,为何要价violate

  • 内部类访问外部类

  • 函数值传递的一些题

  • 子类继承父类,个字都有静态变量、静态代码块、构造函数,执行的顺序

  • int数组,除了一个数字外,其余数字都出现两次,找出这个只出现一次的数字

一面
  • 图片压缩原理,以及在transform阶段进行的必要性,讨论的还挺激烈

  • 内部类引用外部函数的参数,为何要final定义,值传递

  • 判断一个应用是否切到后台

  • 组件化的探讨,假设场景,怎么处理

  • 插件化的实现方式,以及对相应的场景进行讨论

二面(伴鱼的架构师)
  • 一个疑难杂症,也是自定义插件,讨论是否有更好的方式,最后结果是,他想了一个比较巧妙的方式,没有实践过,可是告诉我能够,保留本身的意见。

  • 字节码相关知识,ASM以及MD5的实现原理,png的压缩原理,这里比较乱,就是说到哪问道哪,比较发散。

  • 对成为架构师的几点见解

三面
  • mp4实现alpha通道的原理,优缺点,收益是什么

  • m*n的二维数组,作(0,0)出发,能够上下左右走,0为畅通,1为阻塞,目标位置(k,j),问是否能到达这个位置,相似迷宫的算法
    总结

感受伴鱼的面试目的是问倒你,不少次讨论问题,我说你有什么见解或者正确答案的时候,面试官就让我回去本身上网搜一下,或者给出的方案,经不起个人推敲,我问上两三个问题,面试官反而有点语塞,感受很奇怪。

7

公司:最右

笔试题
  • Android中的引用关系

  • 自定义view步骤

  • activity生命周期

一面
  • 介绍最右的现状

  • 经常使用的播放器,以及优缺点

  • opengl的绘制流程

  • 音视频编解码的流程

二面
  • 在抖音作的工做

  • 性能优化,包体积优化,冷启优化,卡顿优化的一些实现方案

  • mvc mvp mvvm的区别,以及本身实现的轻量级mvvm的原理

  • 编解码的相关知识

  • ijkplayer的优缺点,以及是否看过相关源码

  • flutter的探讨

总结

整体来讲面试流程中规中矩,可是面试官的问题并非很全面,更加关心的是本身的关心的领域,对于我提出的问题(大前端和flutter),看法也仅仅是须要对新技术保持必定的敏感度,从公司产品来看,尤为是4月份出过一些事故,dau跌的很是厉害,好像只有100w+的日活,办公环境也通常,后面hr让我去跟cto再谈一轮,由于考虑到各个方面的因素,就直接拒绝了。

8

公司:BIGO

BIGO是YY旗下的一个公司,目前刚刚收购了一个海外的直播产品,并且未来会把业务放到北京,仍是想作一些事情,员工福利也是不错的。因为如今主要的人员仍是在广东,前两面都是电话面试

一面
  • 多线程怎么保证线程安全,violated、sychronized、reenterLock,这三个锁的原理以及区别,JVM是怎样实现sychronized线程安全的。

  • HashMap的实现原理,put()原理。hash冲突,resize,1.8的改动,什么是红黑树,优势。

  • ui优化,主要从检测和优化两个部分说明,优化又分为通用的优化,和改变绘制流程的优化。

  • jvm的介绍,内存介绍,gc等

  • binder机制

二面
  • hashmap是否线程安全,concurenthashmap实现原理,1.8以后有什么改变

  • 播放透明的mp4的原理

  • 冷启优化和ui卡顿的监测和优化

  • thinker实现插件化的原理,咱们使用什么什么实现热更新,热更新的通用方案,以及优缺点

三面
  • 介绍本身以前的工做经历,在华为作了什么,为何离开华为,在抖音都作了什么工做

  • 实现mp4播放alpha视频的原理

  • 是否使用过kotlin,kotlin的一些特性

  • 内存泄漏和oom怎么产生的,内存泄漏的监控,leakcanery的实现原理

  • 看过哪些第三方框架的源码,具体的实现原理。retrofit、okhttp和eventbus等

总结

BIGO一二面仍是偏基础的知识,并无很深或者很偏的问题,三面面试官是以前腾讯的大佬,面试更多的我作过的项目讨论和架构的问题,以及其余方面的一些问题,总体感受仍是比较好的,hr小姐姐是广东人,说话的声音很好听,也很真诚。

9

公司:音娱科技

主要作的日本的直播产品,好像是A轮,公司并不大,创始人好像也是头条出来的,各类福利制度和头条进本相似。

一面
  • activity生命周期 以及各个函数的含义

  • activity task的四种类型

  • fragment的生命周期

  • 启动server的两种方式

  • intent传输数据的大小限制

  • binder的原理

  • activity的启动流程

  • hashmap实现原理,1.8的改动,红黑树概念

  • 合并两个有序的链表

二面
  • 为何离开抖音

  • 组件化实现方案 spi的缺点,怎么使用字节码注入

  • Dex的组成,为何每一个dex会有65536的限制

  • 还有好多,时间太长记不太清楚了

总结

是A轮创业公司,面试技术是经过了,最终卡在薪资,可能我要的过高,公司可能以为依照我如今背景,性价比不高,就没谈下去,后面跟其余公司聊的时候,又了解了一些这个公司的状况,拿完年终奖后,不少人开始跳槽了。

10

公司:小红书

一面
  • Activity的生命周期、fragment的生命周期,onRestart()何时调用

  • service的两种启动方式,service的生命周期

  • binder机制

  • 进程保活:1.防止进程被杀 2.杀死后再拉起,详细的答案网上搜一下,这里就不列举出来了
    app的包体积优化,lint、proguard、andresguard原理,字节码注入,删除R.java的变量,删除access001方法,压缩图片资源和使用redex等。

二面
  • 自我介绍

  • 对JNI和C++了解吗?基本不了解,就略过了

  • Activity的launchMode,每一个Mode的含义,Activity的启动流程

  • 怎么样实现MP4播放alpha的视频,编解码的一些流程,NV20、YUV、RGB一些概念,SurfaceView和TextureSurfaceView的区别

  • 组件化的实现,都有什么技术方案,优缺点

  • 使用数组实现一个队列,有void add(int val)和void pop()两个函数,并且须要考虑扩容

三面(业务线负责人)
  • 介绍本身,介绍在抖音作过的事情

  • 哪两件事情作得最有成就感

  • 怎样重构代码,基本的6大原则,详细讨论每一个原则的含义,使用过的设计模式

  • 假定场景,接口定义的有缺陷,第二版须要修改,是增长仍是直接修改,以及还有没有其余的方案,怎么去作,为何,这个是开放的题,结合设计原则,以及真实的状况和本身的一些例子说明便可

四面(Android负责人)
  • 介绍本身,为何离开抖音

  • mp4播放alpha视频的实现方案,详细解说

  • 跨部门合做,具体的一个例子,怎么去沟通,假设一个例子,用最恰当的方式去沟通。

  • 怎么向上管理以及向下管理

五面(相似VP级别)
  • 对技术选型的见解,flutter、c++、java、kotlin,核心是解决问题

  • 是否会使用kotlin,优点,以及在项目中真正带来的收益

  • 组件化,依赖版本号不一样的解决办法

  • 插件化,一些实际问题的,具体是什么记不太清楚了

总结

小红书的装修真是豪,办公环境特别棒,可是面试流程有点多,足足面了5轮,不过整体来讲技术仍是很不错的,不管是广度仍是深度,是一个值得加入的公司。

11

公司:饿了么

一面
  • 包体积优化,Lint、proguard、andResGuard的原理,以及抖音作的一些包体积优化的方案

  • 线程和线程池的讨论,为何要用线程池,线程池各个参数的含义,若是队列满了会发生什么,为何线程池的数量是cpu核数+1
    好吧,记不起来了

二面
  • 自我介绍

  • 线程安全的方式,sychronized和violated的区别

  • 怎么自定义Transform、自定义Task,Task之间怎么依赖,大体顺序是什么,增量编译的概念,异步加快文件的读取,ASM接口的使用
    cookie、session、token的含义和区别,这里我确实不熟悉,就直接说我不太清楚了。

三面
  • 自我介绍

  • 在抖音都作过什么事情,相关的几个方向深刻讨论一下

  • 对于架构的思考,怎样设计一个好的架构,6大设计原则,分别说明一下

  • 用过什么设计模式,为何要用设计模式,对于设计模式的思考

  • 怎样提升开发效率,较少沟通成本,实例说明下

  • 为何要引入kotlin,优缺点

  • 之后的规划

四面(交叉面)
  • 介绍本身,为何离开抖音

  • 音视频的相关知识,NV20,YUV,RGB的关系,为何mp4的压缩率比webp的动画要高,编解码的流程,通用的编码格式,软硬解的区别。

  • View的绘制流程,硬件加速的原理和软件绘制的区别,以及相关的view的优化

总结

整体来讲面试体验仍是不错的,三面面试官对于职业发展和新技术的看法都是很是深入,也给与了我不少建议。

12

公司:美菜网

一面
  • 动画实现的方式,帧动画和属性动画的实现原理

  • 一张图片加载到手机内存中真正的大小是怎么计算的

  • OOM产生的原理,内存泄漏是因为什么引发的,GCRoot有哪几种类型,JVM等

  • 一个二分查找的变形题,具体的题目记不清楚了

  • 为何要作组件化,组件化的实现方案都有什么,优缺点

  • Activity的启动流程

  • View的绘制流程,从VSYNC信号开始

二面
  • 性能优化,包体积优化,R.java优化,access$xx方法优化,资源优化原理

  • MVVM是什么,我本身作的轻量级的MVVM的实现方式,优势是什么

  • 看过什么第三方的源码,retrofit原理,动态代理和静态代理的区别,是否使用反射,okhttp的原理,Http和Https的区别,Https的socket security layer的握手,EventBus的原理,3.0的区别,APT的使用以及怎样处理字节码(ASM、javaassit、BECEL等)

总结

美菜网真的是好乱呀,面试人感受有几十个,如今美菜网扩张这么厉害吗?我面试的时候我旁边的哥们也在面试,真的是很嘈杂,不过面试官的基础还不错,看过一些源码,可是并无问到什么特别好的点,对整个新技术的看法和对个人建议(通常会问面试官一些对于新技术例如flutter见解,和对个人一些建议)感受不是很深。跟hr谈完后就离开了。

13

公司:爱奇艺

一面
  • 从Activity A跳到Activity B的生命周期的调用过程,若是是异步进程呢

  • 冷起优化,systrace怎么使用,实现原理

  • ANR是什么,怎么上报ANR,有些手机拿不出,有些手机拿不出anr/traces.txt,怎么查找ANR问题

  • 插件化的原理,Activity的启动流程,hook点

  • 一个类,内部有一个链表的数据结构,实现void add(Node n)和void remove(int index)的函数

二面
  • 介绍工做经验,为何离开抖音

  • HashMap的实现原理

  • 在抖音作的工做,主要说了ui优化和冷起优化两个部分,扩展开来,讨论了不少相关的知识点

  • 手写消费者生产者模型的代码

总结

此次面试的是爱奇艺TV端奇异果,并非爱奇艺移动端app,由于我仍是想作app,二面以后,我就跟面试官说了个人想法,就不必聊下去了,就直接走了。

14

公司:快手

一面
  • handler介绍,为何阻塞不会形成anr,屏障消息,产生内存泄露缘由,handler内存泄露的引用链

  • 事件拦截机制,view的绘制流程

  • android的系统渲染原理,renderthread的解释,三缓冲机制播放透明mp4的原理,surfaceview和textureview的区别

  • opengl的绘制流程,texturesurface是什么,顶点着色器和片元着色器各自做用,VOB是什么

  • 一个无序的int数组,给一个target数字,找出数组中两个数字相加为target,并输出坐标

二面

二面面试官是facebook回来的,面试风格的确和以前的面试官讨论不同

  • hashmap的实现原理,怎样找到index,size为何是2的倍数,怎样resize,resize事后,以前的hash冲突还存在吗?currenthashmap的实现原理

  • 怎样保证多线程的安全,什么是乐观锁,怎么使用

  • 设计一个发送语音模块的架构,须要写出全部接口函数,而且须要详细说明,可能面试官更加在乎设计能力,这里讨论的时间很是长。
    view的绘制流程,onMeasure、onLayout、onDraw,各个参数是什么含义,尤为是widthMeasureSpec、heightMeasureSpec以及对应的AT_MOST、EXACTLY和UNSPECIFIED

  • 数组中存有1-3的三种数字,例如[1,2,3,1,2,2,1,3,3],将其排序为[1,1,1,2,2,2,3,3,3],要求时间复杂度,后续将内容变为一个对象,继续排序

三面
  • 工做经历介绍,为何离开抖音

  • mp4播放alpha视频的原理,与其余方案的对比,收益点是什么

  • "之"字形打印二叉树

  • 1~100盏灯,都是亮的,第一次将能被1整除的数的灯按下,变暗,第二次将能被2整除的数的等按下,变亮,第三次将能被3整除的数的等按下,变暗…第100次将能被100整除的数的灯按下,问,最后有多少盏灯是亮的。

总结

整体来讲面试官的技术仍是很厉害的,二面面试官的背景很好,思路也独特,有点外企风格。三面面试官比较注重算法,和解决问题的思路。整个面试流程真的是不太友好,三次面试去了三次,并且前两次都是在茶水间,一直说会议室订不到,环境特别嘈杂,并且前两次都是临近饭点,茶水间送饭更是杂乱,感受快手效率和环境有一些混乱(我的面试感受),可是不可否认快手在2018年的成绩仍是很好的,尤为是直播的营收甩抖音直播几条街。

HR面总结

在大多数互联网公司内(除了外企),到了HR面,基本上已经定下来,正常的聊聊就能发offer了,只要别太“个性”,或者三观异于常人就能收到offer,大致就是一个积极乐观的态度。有几点须要注意下:

  • 不要说前公司和前leader的坏话

  • 对于为何离开原公司,标准答案是目前公司不适合现有的自身发展,寻求更好的机会,(固然大部分都是由于钱 心知肚明就行,不用说出来)

  • 展示本身积极乐观和乐于助人的一面

  • 注意以上几点大致就没问题了

讨论

我会讨论几个话题,固然都是从我认知出发,并不必定对,欢迎你们一块儿探讨。

面试

面试过程其实大部分时候是,面试官或者公司是主导方,大部分的节奏是跟着面试官走,可是我以为面试其实就是一个相互探讨的过程,不只是公司在选择你,你也在选择公司、之后工做的同事和leader。因此我此次面试中,更多的是和面试官探讨,也会反问面试官一些问题,不只仅是最后面试官说能够问他几个问题,在面试过程当中就会询问一些,优秀的面试官会跟你探讨,而且讨论出一个合理的方案或者正确的答案,整个过程很是愉悦,相互都学习到了,可是有一些面试,则不太友好,问道的问题老是说本身回去百度一下,这个很让我无语。

此次最大的收获就是跟60多位面试官的交流,更加让我认清我本身,认清本身的长处、短板和之后的规划,和对作人作事的见解,在这里真诚的感谢60多位面试官。

互联网寒冬

对于这个话题,从我自身的角度而言有一些感触,从2018年开始互联网就一直有寒冬的说法,各大互联网开始裁人、缩减HC甚至对码农的年终奖下手(辛辛苦苦一年,就期望年终奖~),固然最近确实环境有一些波动,可是远没有网上传的寒冬已至那么严重。从个人面试结果来看就知道,互联网并非寒冬,只不过是更加理智,对全部的面试者来讲要求的更高,因此咱们更加要注重自身能力的培养,这并非说咱们要全身心的投入到刷算法,背理论知识等,咱们更加注重本身的理论知识怎样可以为公司、产品带来更大的价值,从软实力方面来讲,不只要把事情作好,更要作好向上管理和向下管理。我的建议:想好为何要跳槽,无脑跳是最很差的状况,若是必定要跳槽,最好的状况是骑驴找马,不要裸辞,跳槽需谨慎!!跳槽需谨慎!!跳槽需谨慎!!

学历是否重要

个人答案是重要,我就是学历的受益者,只要投递出的简历都会邀请面试(除了一些对工做年限限制很是严格的企业,hulu)。固然,在互联网的圈子中,核心是你自己的技术,可是有多少人的技术能达到逆天或者很是牛逼的地步,若是你是这样的人,啥都不用说了,可是我以为绝大部分的程序员都是普通人、日常人,不要说什么3年之后公司就不看学历了,学历是一生的事情,那些高考可以碾压你的人,出了社会只要他们愿意,照样能碾压你,你努力,你拼命,别人也不会睡大觉等你,因此,能提高本身的学历,仍是要尽可能提高的。

大公司VS小公司

“大公司拧螺丝、小公司独当一面,进步更快”,我不太认同这句话,固然具体状况具体分析,每一个人的状况不一样,可是我仍是以为你们能去大公司仍是尽可能去大公司,缘由我总结了如下几点:

镀金,这一点我相信大部分同窗都是赞同的,我就不赘言了。知识的深度和积累,在大公司你能学到的东西更深和更加系统,并且能够有时间本身去思考和学习,尤为对于工做时间不长的同窗。和优秀的人一块儿工做,大公司碰到优秀同事的几率更大,像我这样的普通人其实都是在模仿和学习,正是因为身边有了优秀太多的人,才会有危机感,才有机会跟着他们去学习,学习他们怎样学习、怎样思考问题甚至怎样为人处世。在华为中有到鑫和李桥,在抖音中,有夏老师、江老师还有乐华大佬等等,太多人,我从他们身上学到太多的东西,有一些能让我受益终身。

选择

选择一样是很是重要的,选择的首要前提是你要有不少机会,否则你都没机会怎么选择,在不少机会摆在你面的时候,必定要认真思考,不要冲动,想好本身须要的,多听别人的意见,最后本身决定。咱们不能保证每一次选择都是正确的,可是能保证咱们是不后悔的,遇事要冷静,多思考。

这里说的选择不只仅是选择去哪一个公司,从事什么方向,还有与什么样的同事工做,选择什么样的leader,甚至是生活中的事情,网上说一我的要有一些成就,须要具有下面几点,我以为很是的对:

  • 你本身要行

  • 有人以为你行

  • 以为你行的人也行

生活与工做

其实这个话题对我来讲有一些困惑,“工做是为了更好的生活”,这句话是很是正确的,可是做为一个没有背景、父母帮你付不起首付的普通人来讲哪里来的享受生活,惟有不断努力、不断的进步才有更好的物质回报,北京是全中国的人才汇集地,在工做的三年中,我不敢有一丝的懈怠,由于身边比我条件好,能力比我强,年龄比我小的人太多了,不论在哪里资源的分配都是二八原则。有不少身边人说我是苦行僧,不懂得享受生活,太无趣,的确我不否定,可是我知道惟有这样,我才能为个人父母、爱人以及之后的孩子撑起一片天,反过来说,这些又是个人动力。感慨有点多了,这个话题全看本身,我满意目前的一个状态。我的拙见,你们看看就行。

最后

感谢你们能耐着性子,看完我啰哩啰嗦的面经,以上仅是我的的观点。感受两年稍纵即逝,在这两年中成长了不少,感谢全部帮助过个人人。

说句题外话,有很多人想加鱼哥微信,鱼哥姑且放出来,可是坑位有限哦

640?wx_fmt=png

 推荐阅读

Java线程基础回顾及内存模型,看你还记得多少?

那些年,让我面试头大的几个排序算法,今天终于搞懂了!

刷了一个半月算法题,我薪资终于Double了

你的 APP 为什么启动那么慢?


640?wx_fmt=png

喜欢就点个在看吧