
八月初入职了新公司字节跳动Android岗位。故事开始于六月在上一家公司呆了三年多作为一名互联网从业者三年多的时间确实挺长的也学到了很多东西但是感觉自己再待下去没有意义了因为已经学不到什么技术了也到了一个瓶颈期就感觉是时候走了决定出去看看就选择了去上海字节试试机会。整个面试过程还是挺快的两个星期就面完了谈的也比较顺利。这不已经上了一个月班了。这边的工作环境硬件条件生活福利都非常好最重要的是入职第一天我发现公司内部的技术文档好多Android相关的技术分享抖音头条性能优化技术讲解基础组件源码在这里都能看到不论你是哪一个部门的都是无障碍阅读只要你想学这里都有感觉自己没有来错地方而且同学们都很优秀工作起来确实跟以前不一样。哈哈哈说了一堆废话下面就闲聊下Android面试的东西吧。Android面试其实技术面挺广的大概分为以下5个方面吧1.Java技术知识这方面的内容的内容其实挺多的。比如JVM内存模型垃圾回收机制类加载机制泛型常用的集合类IO线程等等这里面就有好多问题可以问了比如弱引用与软引用HashMap的各个版本差异什么是线程安全如何实现线程安全常用的线程池种类为什么要这么设计单例常见的实现方式DCL为什么要加两层判断。更深一点的话就有ReentrantLock如何实现公平锁的线程池里面非核心线程什么时候会被回收Type接口与泛型联系等等。2.Android技术知识前面的Java知识都是为了给Android开发的铺垫对于初级的开发者来说就是API了中高级就是对源码的了解程度涉及到Android四大组件Fragment事件分发自定义View,动画原理常用的开源框架RetrofitOKHttp,Glide等等如果是中高级岗位的话光了解API使用还不够还要了解源码、原理。比如说handler机制AsyncTask原理Activity窗口层级binder机制Activity的启动流程mmapIntent传输数据的限制ANR原理SP的性能问题RxJava 线程池的使用注意问题OKHTTP拦截器Activity的启动流程打包等等这都是实际开发会遇到的问题。3.网络知识这部分应该属于基础了开发应该都要知道TCP与UDPHTTP与HTTPSHttp1.1存在的问题HTTP2解决了什么还存在的问题HTTP与Websocket,Https如何实现安全传输的TCP如何保证可靠的HTTPS握手过程等等建议大家多看看开源库OKhttpRetrofit的源码有没有什么网络优化的点比如DNS之类的。4.Android性能优化这部分的内容实在太多了根本讲不完建议大家还是根据实际项目来谈平时多想想自己的项目有没有什么优化的地方布局优化内存优化网络优化apk瘦身等这部分应该是最考验开发者技术能力的点了如果有相关的实践经验那么同学你很nice5.其他kotlin常用设计模式MVCMVVM等等。这次面试能这么顺利非常感谢在字节跳动工作了五年多的一位学长是他内推了我的简历并且给我分享了一份他们内部流传的《Android大厂面试宝典》在这里分享给大家希望大家都能在金九银十找到满意的工作。《Android大厂面试宝典》Java相关1.容器HashMap、HashSet、LinkedList、ArrayList、数组等2.内存模型3.垃圾回收算法JVM4.垃圾回收机制和调用 System.gc()的区别5.类加载过程需要多看看重在理解对于热修复和插件化比较重要6.反射7.多线程和线程池8.设计模式六大基本原则、项目中常用的设计模式、手写单例等9.Java 四大引用10.Java 的泛型11.final、finally、finalize 的区别12.接口、抽象类的区别Android 相关1.自定义 View2.事件拦截分发3.解决过的一些性能问题在项目中的实际运用4.性能优化工具5.性能优化 讲讲你自己项目中做过的性能优化6.Http[s]请求慢的解决办法DNS、携带数据、直接访问 IP7.缓存自己如何实现LRUCache 原理8.图形图像相关OpenGL ES 管线流程、EGL 的认识、Shader 相关9.SurfaceView、TextureView、GLSurfaceView 区别及使用场景10.动画、差值器、估值器Android中的View动画和属性动画 - 简书、Android 动画 介绍与使用11.MVC、MVP、MVVM12.Handler、ThreadLocal、AsyncTask、IntentService 原理及应用13.GradleGroovy 语法、Gradle 插件开发基础14.热修复、插件化15.组件化架构思路16.系统打包流程17.Android 有哪些存储数据的方式。18.SharedPrefrence 源码和问题点20.sqlite 相关21.如何判断一个 APP 在前台还是后台22.AMS 、PMS23.Activity 启动流程App 启动流程24.Binder 机制IPC、AIDL 的使用25.为什么使用 Parcelable好处是什么26.Android 图像显示相关流程Vsync 信号等源码理解Glide 加载、缓存、LRU 算法 (如何自己设计一个大图加载框架) LRUCache 原理EventBusLeakCanaryARouter插件化不同插件化机制原理与流派优缺点。局限性热修复RXJava RxJava 的线程切换原理Retrofit Retrofit 在 OkHttp 上做了哪些封装动态代理和静态代理的区别是怎么实现的OkHttp算法与数据结构时间复杂度 / 空间复杂度常用的排序算法有哪些字符串反转链表反转头插法如何查找第一个只出现一次的字符Hash查找如何查找两个子视图的共同父视图无序数组中的中位数(快排思想)如何给定一个整数数组和一个目标值找出数组中和为目标值的两个数。二叉树前序、中序、后序遍历最大 K 问题广度、深度优先搜索算法String 转 int。核心算法就三行代码不过临界条件很多除了判空还需要注意负数、Integer 的最大最小值边界等如何判断一个单链表有环100 亿个单词找出出现频率最高的单词。要求几种方案链表每 k 位逆序镜像二叉树找出一个无序数组中出现超过一半次数的数字计算二叉树的最大深度要求非递归算法。String 方式计算加法。网络1.网络框架对比和源码分析2.网络七层协议有哪些3.Http 和 Https 的区别Https为什么更加安全4.HTTPS的连接建立流程5.解释一下 三次握手 和 四次挥手6.TCP 和 UDP的区别7.Cookie和Session8.DNS是什么9.DNS解析过程10.HTTP报文结构11.HTTP与HTTPS的区别以及如何实现安全性12.如何验证证书的合法性?13.https中哪里用了对称加密哪里用了非对称加密对加密算法如RSA等是否有了解?14.client如何确定自己发送的消息被server收到?15.谈谈你对WebSocket的理解16.WebSocket与socket的区别17.谈谈你对安卓签名的理解。18.请解释安卓为啥要加签名机制?19.视频加密传输20.App 是如何沙箱化为什么要这么做21.权限管理系统底层的权限是如何进行 grant 的Kotlin 相关1.从原理分析Kotlin的延迟初始化: lateinit var和by lazy2.使用Kotlin Reified 让泛型更简单安全3.Kotlin里的Extension Functions实现原理分析4.Kotlin系列之顶层函数和属性5.Kotlin 兼容 Java 遇到的最大的 “坑”6.Kotlin 的协程用力瞥一眼7.Kotlin 协程「挂起」的本质8.到底什么是「非阻塞式」挂起协程真的更轻量级吗9.资源混淆是如何影响到Kotlin协程的10.Kotlin Coroutines(协程) 完全解析11.破解 Kotlin 协程Flutter相关1.Flutter 原理与实践2.揭秘 Flutter Hot Reload原理篇3.Flutter 动态化探索4.Flutter 如何和 Native 通信-Android 视角5.深入理解 Flutter Platform Channel6.Flutter Engine 编译指北7.深入理解 Flutter 多线程8.Flutter 状态管理 - 初探与总结9.Flutter | 状态管理指南篇——Provider10.深入理解Flutter应用启动11.Flutter渲染机制—UI线程小伙伴们如果需要这份完整版的《Android大厂面试宝典》扫描下方二维码【免费】领取。面试之外有人说知道这些有啥用平时又用不到就面试前背一背就可以了。这~我也没法反驳啊。因为这些都属于知识学到了就是你的知识下一次你在实际开发中用了这就是技术。如果没有前面的知识积累没有这个知识面是想不出来的解决方案的所以要多学习也不是为了面试而是为了将来的技术应用。比如项目中要读取本地一张大图片要注意什么读取大图片IO时间长CPU占用少如果经常性的去读取会浪费时间并且多次读取会占用更多的内存所以要做什么做缓存缓存解决了多次IO时间长的问题并且内存只有一份图片文件但是一张大图片的缓存对于一些低配的机器来说本来内存就吃紧一直存着也不是办法那么内存不够用的时候应该释放掉的那么这个时候缓存要用强引用弱引用还是软引用呢那就留给大家去思考了。