刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。

下面是面试经历,分享出来是为了给大家一个借鉴,知道这些一线互联网企业注重那些技术,自己去面试也好有个准备,千万别像我,挂了三家公司才知道去准备面试。

快手

一面
  • viewBinding的原理

  • Recycleview滑动怎么优化

    • 缓存设计

      • 一级缓存和二级缓存的区别

      • LayoutManager原理

  • 绘制

    • onMeasure描述一下

    • onDraw描述一下

    • invalidate一定会调用onDraw么

  • 事件分发

    • 事件是由谁分发的
  • fragment

    • 销毁与恢复

    • 与Activity的通信

  • Activity

    • Activity的生命周期

    • 销毁与恢复

  • 国际化插件

  • hashmap

    • 2^n的原因(有多个原因)

    • 扩容

  • 22反转链表

二面
  • 协程原理

  • rxjava原理

  • leakcanary

    • 如何分析引用链
  • 线程池

  • 给你一堆数据,如何画曲线?

  • 事件分发

  • 责任链模式

  • 汽车加油问题

三面
  • 有序无序时删除链表的重复节点

    • 都删除

    • 保留一个

  • 如何实现快手和抖音的整屏滑动效果

  • 如何让运营能看懂社区文章

  • 项目中的难点(问得很细)比如有没有遇到什呢难点呀

美团

一面
  • 线程池原理,几个参数

    • 线程池里面的阻塞队列是什么类型
  • 设计模式

    • 状态模式和策略模式的区别
  • sleep和wait的区别

  • android序列化

    • Parcelable与Serializable
  • Handler

  • Hashmap

  • 深拷贝与浅拷贝

    • 如何实现深拷贝
  • sync和Reenterlock

    • 遇到异常的区别
  • 可重入锁和不可重入锁

    • funA,funB,funC,funD
  • postInvalidate和Invalidate的区别

    • requestLayout
  • 两个有序链表合并

  • anr 分类及原理

二面
  • 基本都是问的项目

支付宝

一面
  • 项目

  • viewmodel原理

  • 用了哪些jetpack的东西

  • livedata为何具有生命周期感知能力

二面
  • shareperference如何保证线程安全,

    • 为什么不是进程安全的

    • 如何实现进程安全的

  • viewmodel是如何解决内存泄漏问题的?能解决么

  • mmkv共享内存和binder的区别

  • magic ocr项目

  • 有做过多线程开发么

  • room如何实现orm的

  • kotlin和java产物一样么有

  • 各种图片格式的区别

  • 如何保证内存与文件的同步

  • 开一个线程commit,commit不用加锁么?

  • bitmap

    • 怎么确定bitmap被复用了

    • 一张图片占用的内存大小

说来也挺惋惜的,前三家公司都是到了二面甚至是三面才挂掉,如果是一面就挂掉我也不用花那么多时间去煎熬、等待结果,只怪自己自视过高,在一家公司做久了对自己的能力没有一个正确的认知。

之后我开始猛刷大厂的面试题,在朋友的内推下收到了字节的面试题通知,又把字节近几年的面试题都翻出来刷了个遍,终于在四轮技术面+一轮HR面后收到了offer。下面是字节面经:

一面
  • MVC,MMVM,MVP

    • MMVM如何解决MVP中存在的问题
  • 内存泄漏

    • 内存泄漏的几种情况

    • LeakCancary分析内存泄漏的原理

  • 手写单例模式,并分析

  • 算法

    • 找到两个数组中的两个元素的和等于某个值
二面
  • activity

    • onSaveInstance
  • service

    • StartService和BindService的生命周期
  • 求浮点数的平方根

  • Binder的原理

  • 设计模式

    • 工厂模式

      • 抽象工厂模式和普通工厂模式
    • 建造者模式

  • 启动模式有几种

  • 共享内存原理

    • java能实现共享内存么
  • kotlin协程的四个dispatcher及区别

三面
  • window,decorview,ViewRootImpl的关系

    面试官 想让你回答如何window和windowManager如何联系的。viewRootImpl是联系window和decorview的纽带

  • 进程间的通信方式

  • AIDL的用法

    • 用法和原理
  • 事件分发

    • onIntercept在哪用

    • 事件分发底层的产生

  • RecycleView的用法

    • 里面的各种Manager作用
  • wake lock:使屏幕常亮

  • Activity是如何被限制到状态栏和导航栏之下的

  • canvas

    • canvas的save和restore的作用

    • canvas的density有什么作用

  • vsync

    • vsync是如何生成的
  • android中异步一般怎么实现

  • android中内存泄漏发生的情况

  • 如何去获取view的宽高

  • 悬浮窗

    • 如何实现一个悬浮窗

    • 一个悬浮窗悬浮在顶层,覆盖了底层的app的启动图标,如果让事件启动图标接收到click事件

  • Android M之前与之后的权限变化

  • ContentProvider

    • 使用

    • 如何找到该contentProvider的

  • RxJava中map和flatmap的区别

  • view的绘制

    • viewgroup是如何刷新的

    • onMeasure,onlayout,onDraw分别起什么作用

    • onLayout的时候可以layout自己么?

  • AndroidManifest

    • 和的区别

      一个是系统的权限,一个是自定义的权限
四面
  • 两道算法

    • 洗牌问题

    • 接雨水

  • 两道设计

    • 面向对象原则

    • 用代码描述你觉得最有设计感的项目

后面就是HR面了,我就省略了,相信这些大厂HR面试都不会有太大的差别。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

面试官通常会问一些开放性的问题,对你的思维拓展能力、多方位的思考能力也是一种考验

永远不要打无准备之仗!早做准备,多做准备!

下面分享一下我之前刷过的面试题以及算法资料,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

Java部分

  • 操作系统相关
  • JDK&JVM&JRE
  • 面向过程 & 面向对象
  • 八大基本数据类型&引用类型
  • 数组
  • Java异常
  • 集合(容器)
  • 线程
  • 泛型
  • 反射
  • 注解
  • Socket编程
  • 设计模式
  • JVM相关

Android部分

Activity

  • 典型情况下的Activity生命周期?
  • 异常情况下的Activity的生命周期 & 数据如何保存和恢复?
  • 从Activity A跳转到Activity B之后,然后再点击back建之后,它们的生命周期调用流程是什么?
  • 如何统计Activity的工作时间?
  • Activity的启动模式 & 使用场景
  • 如何在任意位置关掉应用所有Activity & 如何在任意位置关掉指定的Activity?
  • Activity的启动流程(从源码角度解析)?
  • Activity任务栈是什么?在项目中有用到它吗?说给我听听

由于篇幅有限,只能分享部分面试题,更多面试题及答案去我的【GitHub】阅读下载哦~无偿分享给大家,算是一个感恩回馈吧

BroadcastReceiver

  • 广播是什么?
  • 广播的注册方式有哪些?
  • 广播的分类 & 特性 & 使用场景?

ContentProvider

  • 什么是内容提供者?
  • 说说如何创建自己应用的内容提供者 & 使用场景
  • 说说ContentProvider的原理
  • ContentProvider,ContentResolver,ContentObserver之间的关系
  • 说说ContentProvider的权限管理

Service

  • 什么是Service?
  • 说说Service的生命周期
  • Service和Thread的区别?
  • Android 5.0以上的隐式启动问题及其解决方案。
  • Service保活方案
  • IntentService是什么 & 原理 & 使用场景 & 和Service的区别。
  • 创建一个独立进程的Service应该怎样做?

Handler

  • 子线程一定不能更新UI吗?
  • 给我说说Handler的原理
  • Handler导致的内存泄露你是如何解决的?
  • 如何使用Handler让子线程和子线程通信?
  • HandlerThread是什么 & 原理 & 使用场景?
  • 一个线程能否创建多个Handler,Handler和Looper之间的对应关系?
  • 为什么Android系统不建议子线程访问UI?

AsyncTask

  • AsyncTask是什么?能解决什么问题
  • 给我谈谈AsyncTask的三个泛型参数作用 & 它的一些方法作用。
  • 给我说说AsyncTask的原理
  • 你觉得AsyncTask有不足之处吗?

Fragment

  • Android中v4包下Fragment和app包下Fragment的区别是什么?
  • Fragment的生命周期 & 请结合Activity的生命周期再一起说说。
  • 说说Fragment如何进行懒加载。
  • ViewPager + Fragment结合使用会出现内存泄漏吗 & 如何解决?
  • Fragment如何和Activity进行通信 & Fragment之间如何进行通信?
  • 给我谈谈Fragment3种切换的方式以及区别 & 使用场景。

文件存储

  • 说说Android中数据持久化的方式 & 使用场景
  • 接触过MMKV吗?说说SharedPreference和它的区别
  • 第三方数据库框架用过哪些?有没有自己封装过一个SQLite的库
  • SQLite是线程安全的吗 & SharedPreference是线程安全的吗?
  • 请简单的给我说说什么是三级缓存?
  • SharedPreference的apply和commit的区别
  • 谈谈你对SQLite事务的认识

ListView & RecyclerView

  • ListView是什么?如何使用?
  • RecyclerView是什么?如何使用?如何返回不一样的Item。
  • ListView和RecycyclerView的区别是什么?
  • 分别讲讲你对ListView & RecyclerView的优化经验。
  • 给我说说RecyclerView的回收复用机制
  • 说说你是如何给ListView & RecyclerView加上拉刷新 & 下拉加载更多机制
  • 谈谈你是如何对ListView & RecycleView进行局部刷新的?

图片编程

  • 你对Bitmap了解吗?它在内存中如何存在?
  • 有关Bitmap导致OOM的原因知道吗?如何优化?
  • 给我谈谈图片压缩。
  • LruCache & DiskLruCache原理。
  • 说说你平常会使用的一些第三方图片加载库,最好给我谈谈它的原理。
  • 如果让你设计一个图片加载库,你会如何设计?
  • 你知道Android中处理图片的一些库吗(OpenCv & GPUImage ...)?

WebView

  • WebView会导致内存泄露吗?原因是什么?解决方式有哪些?
  • 你知道Hybrid开发吗?说说你的相关经验
  • 说说WebSettings & WebViewClient & WebChromeClient这三个类的作用 & 用法。
  • 说说你了解的Hybrid框架。
  • 如何提高原生的WebView加载速度?
  • 谈谈你对webView工作机制的认识,你在项目中优化过它吗?说说是从哪些方面着手的?

ViewPager

  • 什么是ViewPager?说说它的那些适配器。(校招&实习)
  • 你了解ViewPager2吗?和ViewPager 1有哪些区别?
  • ViewPager + Fragment结合使用存在的内存泄漏的原因是什么?如何解决?

View事件分发机制

  • 什么是事件分发机制?主要用来解决什么问题?(校招&实习)
  • 给我说说事件分发的流程 & 你项目解决事件冲突的一些案例。
  • 分别讲讲有关事件分发的三个方法的作用及关系。
  • 如果我在一个设置了点击事件的TextView中dispatchTouchEvent方法强制返回ture或

    者false会发生什么?
  • 谈谈你对MotionEvent的认识?Cancel事件是什么情况下触发的?
  • requestLayout(),onLayout(),onDraw(),drawChild()区别和联系?
由于篇幅有限,只能分享部分面试题,更多面试题及答案去我的【GitHub】阅读下载哦~无偿分享给大家,算是一个感恩回馈吧

除此之外,还有一份全套的BAT、TMD面试真题资料,含解析,需要的朋友也可以去我的GitHub无偿获取。

三年Android开发快手、美团、支付宝连挂,怒刷1549页面试题字节上岸的更多相关文章

  1. 一个三年Android开发的总结-开篇

    一个三年Android开发的总结-开篇 转眼间全职从事Android开发已有三年,想把这一阶段的积累总结记录并展现出来,作为Android开发必备的知识,希望对有一定Android开发基础的人进阶有裨 ...

  2. 三年Android开发,月薪一万二,不敢跳槽,每天都很焦虑

    在我们的身边,存在一个普遍现象:很多人从事Android开发工作多年,走过的弯和坎,不计其数,经历的心酸难与外人道也.可是技术确难以提升.止步不前,薪资也只能看着别人水涨船高,自己却没有什么起色. 虽 ...

  3. 三年Android开发,竟只会增删改查,被面试官一顿怼!

    最近看到某公司面试官发的这样一个帖子: 我面试了一个有三年Android开发经验的小伙子,也是我有史以来给别人面试时间最短的一次,不到十分钟就结束了,原因很简单,底子太差只会curd,很多技术性的问题 ...

  4. 【Android开发那点破事】打开APP加载页面实现

    今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...

  5. Android开发支付集成——支付宝集成

    微信支付传送门:https://www.cnblogs.com/dingxiansen/p/9209159.html 一.支付宝支付 1. 支付宝支付流程图 2. 集成前准备 去蚂蚁金服注册应用获取a ...

  6. android开发 ,对接支付宝,服务器(PHP)校验失败

    已备忘记,资料链接: http://my.oschina.net/u/256646/blog/174222 注意: 里面有一个设计到支付宝公钥的地方: 注 意这个是2048位的公钥应该是9行或者10行 ...

  7. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  8. Android开发之通过反射获取到挂断电话的API

    Android开发黑名单工具类,需要用到挂断电话的API,但是该API处于隐藏状态,需要通过反射得到该方法.. 步骤: 1.通过当前类获取到ServiceManager的字节码 Class< ? ...

  9. Android开发:仿美团下拉列表菜单,帮助类,复用简单

    近期在项目中须要用到下拉菜单.公司比較推崇美团的下拉菜单,于是要实现该功能.想着.这个功能应该是一个常常会用到的.于是何不写一个帮助类,仅仅要往这个类里面传入特定的參数,既能够实现下来菜单,并且还能够 ...

随机推荐

  1. 第1章:Kubernetes 系统基础

    51.1.kubernetes介绍: 1.什么是kubernetes: (1)Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. (2)使 ...

  2. idea中快捷键的设置

    IDEA快捷方式改成eclipse的 File -> Settings -> Keymap 这里选Eclipse 然后Applay 即可: 快速生成main方法设置以及System.out ...

  3. 使用xcode实现IM的那些坑

    想用xcode基于XMPP实现即时通讯,mac必须安装openfire(xmpp服务器),mysql(本地数据库,用于配置openfire),JDK(打开openfire必须本地具备java环境),x ...

  4. 每日英语——the rest of my life

    <the rest of My life> 词面意思:我的余生 实际意思:我的余生 1.  歌曲:<The Rest of My life> Less Than Jake 歌词 ...

  5. HanLP使用教程——NLP初体验

    话接上篇NLP的学习坑 自然语言处理(NLP)--简介 ,使用HanLP进行分词标注处词性. HanLP使用简介 HanLP是一系列模型与算法组成的NLP工具包,目标是普及自然语言处理在生产环境中的应 ...

  6. 性能基准DevOps之如何提升脚本执行效率

    1.宝路说 宝路最近一直在自我思考:性能基准DevOps工作已经开展一段时间了,目前我们确实已经取得了一些成果,显然这还远远不够.趁闲暇之余跟组员进行了简单的头脑风暴!于是这就有了今天的主题,当然这仅 ...

  7. 常见内部排序算法对比分析及C++ 实现代码

    内部排序是指在排序期间数据元素全部存放在内存的排序.外部排序是指在排序期间全部元素的个数过多,不能同时存放在内存,必须根据排序过程的要求,不断在内存和外存之间移动的排序.本次主要介绍常见的内部排序算法 ...

  8. Java基础00-异常25

    1. 异常 异常 1.1 异常概述 1.2 JVM的默认处理方案 有一行代码报错,下面的代码就不会执行. 1.3 异常处理 如果程序出现了异常,需要我们自己来处理,因为在实际的开发中,不能因为一处的报 ...

  9. [刘阳Java]_Spring相关配置介绍_第5讲

    这一节我们介绍一下Spring框架的相关常用配置 Spring依赖注入的两种方式(构造方法注入和setter方式注入) p-namespace方式配置 properties属性文件配置方式 集合对象配 ...

  10. svo论文随手记

    论文链接:http://rpg.ifi.uzh.ch/docs/ICRA14_Forster.pdf 论文提出了一种半直接单目视觉里程计,在精确性.鲁棒性和速度方面都有较大的优势.将基于特征的方法(包 ...