• 碰壁五次!我闭关28天啃完这些书,再战拿下腾讯,爱奇艺,小红书,快手等10家大厂!化身offer收割机!


    一、关于我

    笔者从事Android开发3年了,前两年一直在百度coder。因为业务调整的原因拿了N+1离开了,开开心心的在家休整了一个多月,上月末才开始面试。

    可能是在百度安逸惯了,结果出来碰了一鼻子灰。

    我一开始觉得自己好歹也算是三年大厂经验,要个16K不过分吧,结果,我先后试了今日头条、飞书、陌陌、优酷、微信都碰壁了。

    字节的那两个是算法不过关,优酷是音视频开发苦手,微信和陌陌是因为flutter不会,后面HR又觉得我要价太高,然后……就没有然后了……

    老实说是备受打击的,已经在怀疑人生了。

    但是,总不可能不工作吧。

    回去后闭关复习了20天左右,出关面了12家大厂,拿下了10家,节后到岗。心里美滋滋~ 今天特地来给大家分享我准备面试的经验,以此回馈社会,积攒人品,希望对大家准备面试有帮助~

    二、我的面试准备

    这是我最难熬的一段时间,很忙,但是也是真的非常充实。

    我先是对前面五次碰壁的经历进行了总结,归纳了一下自己的短板,还有一些面试中的表现失误,全部用一个本子记了下来,这样一来,复习思路就清晰来了很多。

    通过归纳我总结出了以下的一些点,大家也可以当做复习参考。

    其实Android岗的面试都是差不多的。常问的这几块知识点,按照其重要程度排序,笔者认为可以这样排:

    • 数据结构与算法,
    • Java,
    • Android(如果不找安卓的就去掉这部分),
    • 计算机网络,
    • 操作系统,
    • 设计模式。

    下面就按照这个重要性顺序给出一些准备的建议。

    数据结构与算法模块

    大家可以看这个:《最短时间搞定算法:字节跳动Android岗算法题考前突击宝典》
    当然,学习和积累都是功在平时,指望临时抱佛脚的思想是非常危险的。这个分享只给那些时间仓促,没有办法的朋友,不过时间充裕的朋友也可以当做一个查漏补缺和重点突破的方向。

    下面说一下我个人的学习方法推荐。

    学习书籍推荐:

    • 《算法导论》
    • 《大话数据结构》
    • 《数据结构与算法分析》(PS:java语言描述)
    • 《剑指offer》
    • 《labuladong的算法小抄》

    推荐在线刷题网站:

    • Leetcode(LeetCode Online Judge),
    • Lintcod(LintCode - 主页),
    • 牛客网(在线编程_C++Java前端经典笔试面试题库)

    Java 模块

    找程序员工作,大多数情况下需要掌握好一门面向对象的语言,主流上分为Java和C++两大阵营。这里讲Java需要怎么准备。

    书籍推荐:

    入门书籍:

    • 《Java核心技术卷一》
    • 《Head first in java》(如果一点面向对象的概念都没有那就看这本)

    提高书籍(我一般只推荐经典书籍,很干):

    • 《Java编程思想》

    Java虚拟机:

    • 《Java编程思想》
    • 《深入理解Java虚拟机》

    Java多线程:

    • 《Java多线程编程核心技术》
    • 《Java并发编程实践》

    其实我觉得如果有一定基础建议直接看Java编程思想,面试中的考点经常都会在这本书中有讲到。当然Java虚拟机和多线程这两块需要再看一些专门讲解的书,每一次java面试考查内容几乎都离不开这两块。

    下面我会对 java考察内容进行一些总结。

    Java模块知识要点整理

    1、深入理解Java泛型

    • 泛型的作用与定义
    • 通配符与嵌套
    • 泛型的上下边界
    • RxJava中深入理解泛型

    2、注解深入浅出

    • 注解(ANNOTATIONS)
    • 元注解
    • 自定义注解
    • APT
    • 插桩
    • 反射
    • Retrofit中的注解

    3、并发编程
    4、数据传输与序列化
    5、Java虚拟机原理
    6、高效IO
    ……

    内容较多,都以PDF的格式整理成文档了,这份笔记免费开源分享,有需要的朋友直接【一键三连】,然后点击【此处】进入群共享资源自取,或者直接通过下方代码块找我领取。

    // Wechat number(可复制): 
    study5233
    

    Android 模块

    主要问的一些问题

    1, Activity,Service,BrocastReceiver,Intent,Fragemnet,ContentProvider,这些组件的基础知识,比如Activity两种启动方式,生命周期,四种启动模式,Service则主要是:两种启动方式,生命周期。还有组件之间怎么通信之类的问题。
    2, Android的数据存储方式,数据库,sd卡,SharedPreferences 这些
    3, Listview的优化,与scollview的区别
    4, view状态与重绘,view的绘制过程,view的事件分发机制,view的事件冲突处理
    5, Android多线程异步机制,AsyncTask工作原理与源码实现,Handler,Message,Looper异步实现机制与源码分析
    6, Android常见的开源框架(主要是网络通信,图片加载这些),了解怎么使用,分析源码
    7, Oom和anr异常引发的原因,怎么解决
    8, 了解一些常见的图片缓存技术

    Android常问知识点答案和解析整理

    1、高级UI晋升

    • 触摸事件分发机制
    • View渲染机制
    • 常用View
    • 布局ViewGroup
    • 自定义View实战

    2、Android组件内核

    • Activity调用栈
    • Fragment管理与内核
    • Service内核原理
    • 内核之组件间通信方案
    • 组件间通信方案

    3、大型项目必备IPC

    • Binder 原理机制
    • 其他 IPC 方式
    • ……

    4、数据持久化

    • Android文件系统
    • 轻量级Kv持久化
    • 嵌入式数据库 SQLite
    • ……

    5、Framework内核解析

    这份笔记免费开源分享,有需要的朋友直接【一键三连】,然后点击【此处】进入群共享资源自取,或者直接通过下方代码块找我领取。**

    // Wechat number(可复制): 
    study5233
    

    计算机网络模块

    书籍推荐:

    《计算机网络自顶向下》
    《tcp/ip协议详解》

    主要看:主要看应用层,传输层,网络层,其中传输层最为重要。

    主要问的一些问题:

    1, TCP和UDP的区别
    2, TCP的三次握手,和四次挥手,为什么需要三次握手,为什么要四次挥手(这两个为什么要考虑非常清楚)
    3, TCP拥塞控制算法(慢启动,拥塞避免,快速恢复),流量控制算法,滑动窗口协议,选择重传。
    4, TCP可靠性是怎么保证的(通过哪些机制保证)?
    5, HTTP协议报文格式,请求方法字段以及各个方法之间的区别,了解常见的响应状态码,了解cookie机制,了解WEB缓存技术(条件get方法)。
    6, DNS协议的各层域名服务器,两种查询方式(递归和迭代),dns缓存
    7, Udp的特点,适用场景,校验机制
    8, 从输入一个网址到最后网页显示整个过程发生了什么?
    9, IP地址组成,ARR,RARP,ICMP协议,路由选择算法

    三、一大把面经

    1. 探探

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

    一面

    OpenGL一些知识,顶点着色器、片元着色器的工作原理,什么是VBO(这个没想起来),以及shader的一些简单问题
    View的事件传递机制
    包体积优化
    JVM相关知识,Dalvik和ART的区别
    组件化的实现方案
    算法题,ViewGroup的层级深度,转换为二叉树的层级深度

    二面

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

    RecyclerView防止内存OOM的一道题,充分利用自身的缓存机制,可能我始终没理解问题所在,虽然给出解决方案,但是面试官不满意,太繁琐
    讨论LRUcache的实现和时间复杂度

    三面

    cto面试

    聊了一下抖音发展的过程中我的角色,做过什么事情,有什么收益
    在华为的一些经历,为什么离开华为
    聊了一到算法题,查找两个字符串的交集和字符串1中有字符串2中没有的问题。
    四面(不是一天)

    这次主要是聊一下我将要做的工作,以及让其他面试官再次了解一下我,因为评级比较高,所以需要谨慎点。

    总结

    整体来说探探发展还是不错,尤其近两年要上市,环境也不错,管三餐,加班不严重,双休,工资也给力,但是也是由于近两年要上市,所以要做的东西还是比较多和急,需要你有一定的能力。

    2. 快陪练

    快陪练整体的环境并不是很好,环境很嘈杂,而且我是在门口面试的,很乱。

    一面

    MVC、MVP和MVVM的原理和区别
    设计的六大基础原则
    使用UML画一下访问者设计模式

    二面

    先聊了聊为什么离开现在公司,毕竟现在这么火
    我做的项目中的一些解决方案,组件化、字节码注入、包体积的极致优化
    直播的架构设计

    三面

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

    总结

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

    3. 猿辅导

    猿辅导面试应该是有硬性的时间指标,应该是每一轮面试都要差不多1个小时,并且会出1~2道算法题。

    一面

    主要聊了下面几个方面

    热修复,主要说了ClassLoader的方式和Rubost的插装方式,重点介绍了Rubost的原理。
    实现直播礼物的一些技术选型,和播放带有alpha通道MP4的解决方案
    怎么实现字节码注入
    抖音组件的探索,SPI到字节码注入,优缺点。
    接下来就是两道算法题
    String字符串的数字相加
    使用三个线程顺序打印有序的数组
    提问环节

    二面

    包体积优化:静态Lint,Proguard,AndResGuard和删除R.java中的所有字段,删除access$方法,在gradle的transform阶段将压缩png和jpeg,使用google开源的redex方案,每种方案的原理以及优缺点
    MVVM-livedata的实现原理
    属性动画的原理,这里没看过,不太清楚
    Kotlin写一个let的扩展函数,大体写了一下代码。
    算法,可能是我写的太慢了,所以就只有一道
    给定一个有序的数组和目标数,找出与目标数最近接的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了,面试流程也相对较少。对趣头条的营收模式看的不是很清楚,类似发钱看新闻,但是现在头条也再做这个,趣头条能够搞得过头条是个问题,如果没有增长点,那后期的转型是什么(我瞎操心啥)?总体来说体验还是不错的,hr也很真诚,多次沟通,虽然最后我没有去,感兴趣的同学可以去看看。

    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. 小红书

    小红书的装修真是豪,办公环境特别棒,但是面试流程有点多,足足面了5轮,不过总体来说技术还是很不错的,不论是广度还是深度,尤其最后一面,专门从上海飞来面试,十分荣幸,从这点就能看出公司对人才的重视程度,是一个值得加入的公司,hr小姐姐人美也真诚。

    7. 饿了么

    总体来说面试体验还是不错的,三面面试官对于职业发展和新技术的见解都是非常深刻,也给与了我很多建议。

    8. 爱奇艺

    这次面试的是奇异果,并不是爱奇艺app,因为我还是想做app,二面之后,我就跟面试官说了我的想法,就没必要聊下去了,就直接走了。

    9. 快手

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

    10. 右划

    右划真的是一家非常不错的公司,有一件事情就体现了整个公司的价值观:由于我当天去公司接待的人比较多,二面和三面中间大概有两个小时的空档,我其实挺不满意的,跟hr反馈了这个事情,hr立马就跟我解释了事情的原因,并且立马跟我道歉了,后面cto还专门为这个事情跟我说了原因。

    虽然后面没有去这个公司,但是我还是很欣赏的,从公司层面,公司的定位很明确,而且有自己的核心技术。从个人来看,公司也是非常人性化,管三餐有房补而且有问题及时改正,我觉得大家可以来看看。

    HR面总结

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

    • 不要说前公司和前leader的坏话
    • 对于为什么离开原公司,标准答案是目前公司不适合现有的自身发展,寻求更好的机会,(当然大部分都是因为钱 心知肚明就行,不用说出来)
    • 展现自己积极乐观和乐于助人的一面

    注意以上几点大体就没问题了。

    最后

    码字不易,希望大家点赞支持一下。
    PS:文中资料都是免费分享的。直接扫码找我就行啦~ 记得给本文三连支持哦~

  • 相关阅读:
    14
    12
    11
    js 元素实现全屏和退出全屏功能
    iOS开发之使用苹果测试工具TestFlight(进行内部和外部测试)
    iOS开发之使用fastlane工具实现自动化打包发布
    iOS开发之使用MQTT协议实现远程通讯
    iOS项目功能模块封装SDK使用总结
    iOS技术之SDK开发注意事项
    iOS开发之登录注册系统
  • 原文地址:https://www.cnblogs.com/chengsisi/p/15272773.html
Copyright © 2020-2023  润新知