Android开发1年背了几十份面经还是连挂了6个面试,拿到最终字节腾讯offer后我总结了这些坑点(4)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

  • View的onMeasure,onLayout,onDraw都分别用来干什么

  • 除了上面三个,还有哪些关键的方法

  • invalidate的原理

  • invalidate和requestlayout的区别

  • requestlayout的作用范围是多大

  • 一个View被添加后第一个回调的方法是哪个(onAttacthToWindow)

  • 为什么View.post能拿到view的宽高

  • 讲一些字节做过的自定义VIew的例子

触摸事件分发

  • 讲一下Android事件分发的流程

  • 怎么处理滑动冲突

  • 怎么判断手势

  • 讲一些自己做过的处理滑动冲突的原理

  • 事件分发

  • handler这套机制的原理

  • IdleHandler是什么

  • handler的postDelay怎么实现的

  • Message有个缓存池,缓存池大小是多少知道吗

  • MessageQueue的中没有消息的时候为什么不会ANR

  • 知道epoll的底层原理吗

  • epoll是阻塞的吗

ANR

  • ANR是什么

  • ANR的原理

  • 什么情况下会发生ANR

  • 如何检测是否发生了ANR

SharedPreference

  • SharedPreference原理

  • SharedPreference的优化

  • SharedPreference的commit和apply区别

  • 什么情况下会选择用SharedPreference

序列化

  • Serlizeable和Parceable的区别

  • 什么情况下选择用哪个,为什么

  • 有没有了解过别的序列化方法

RecyclerView

  • RecyclerView的缓存机制

  • RecyclerView和ListView对比

  • Recycler是怎么进行回收和复用的

  • LayoutManager怎么进行布局的

内存泄漏

  • 内存泄漏的常见场景

  • 怎么检查内存泄漏

Binder

  • Binder原理

  • Binder比起其他跨进程的通信方式好在哪

网络

  • HTTP报文格式

  • HTTP在网络体系架构中的意义是什么

  • HTTPS和HTTP的区别

  • 对称加密和非对称加密

  • TLS四次握手的过程

  • CA是干什么的

  • 校验证书的详细过程

  • HTTPS一定是安全的吗

  • TCP和UDP的区别(高频)

  • HTTP1.0,1.1,2.0的区别

  • 有没有实际了解过HTTP2.0到底比1.1快了多少

  • 详细解释“Keep-Alive”有什么用

  • UDP为什么比TCP快(存在误导,UDP不一定比TCP快)

  • UDP可以进行广播为什么TCP不行

  • 为什么要三次握手,四次挥手

  • 为什么握手仅需要三次而回收需要四次

  • HTTP是基于什么协议的(一般来说是TCP,可以借此引出QUIC,KCP等协议进行进一步的探讨)

操作系统

  • 线程间通信方式

  • 线程的几种状态

  • 进程间通信方式

  • 线程和进程的区别

设计模式

设计模式没有必要全都看,重要的是你会的几种设计模式他们的优点是什么,缺点是什么,在哪些常见的地方用到了他们,要能够举一反三,例举几个我面试时常说的。

  • 单例——单例一定要特别熟,特别高频,尤其是DCL为什么这么写,synchronized为什么那么加,有什么讲究,volatile在这个地方起到了什么作用,不加会导致什么问题。静态内部类的单例怎么能够保证线程安全。等等。

  • Builder——常见,知道什么时候用就行了

  • 责任链——要能扩展到Android的事件分发,okhttp的拦截链等。

  • 观察者模式——要能知道Android中哪些地方用到了观察者,什么情况下使用。比如广播机制就使用的是观察者

  • 享元模式——要知道享元模式是为了避免重复创建对象而导致的开销,Message,String,线程池都是这样的设计思想。

  • Adapter——要能想到ListView和RecyclerView,以及为什么他们设计的时候要用Adapter

  • 代理模式——静态代理,动态代理

算法(手撸代码)

就算法来说,其实大部分公司(除了字节和腾讯)问的都不是很难,一般都集中在数组和链表上,基本就是剑指offer难度甚至直接就是原题。

  • 移动零——一个数组有0和其他数,不更改原本其他非0数字的顺序,把0都移到数组最末位(猿辅导)

  • 手写栈(伴鱼)

  • 数组中只出现一次的数字——剑指原题(伴鱼)

  • 判断链表是否有环(顺丰,腾讯,美团)

  • 有环链表环的长度(腾讯)

  • 反转链表(腾讯)

  • 一道贪心——题目太长了且没有原题(腾讯)

  • 字符串转数字(百度)

  • 回字形打印数组(老虎证券)

  • 插入5(老虎证券)

  • 斐波那契数列(美团)

  • 手写DCL单例(字节)

  • 二叉树路径和——从根节点到叶子节点是否有一个路径之和等于给定值(字节)

  • 最短子数组长度——滑动窗口(字节)

  • 手写观察者模式(字节)

  • 两个栈实现队列(字节)

  • 获取一个VIewGroup的最深深度(美团)

设计题

设计题这个部分其实大部分并没有标准答案,更多的是看以你的知识量能够想到什么比较好的解决方案。

  • 设计进程安全的SharedPreference(字节,腾讯)

  • 设计一个gif加载框架(微博)

  • 一个进程只有读操作,一个进程只有写操作,你怎么设计(微博)

  • 如果一个APP需要有闲时加载任务的能力,你怎么设计(美团)

  • 让你设计一个流式标签布局你怎么做,有哪些要考虑的点(最右)

  • 设计一个下拉刷新的RecyclerView你有几种方法(美团)

  • APP使用经常会有弱网环境,怎么确保APP数据的即使同步更新以及正确性(顺丰)

  • 让你设计一个push的框架,你会怎么设计,考虑到哪些问题(百度)

  • 设计一个检测内存泄漏的框架(腾讯)

  • 设计一个事件总线(最右)

项目

在项目上,一定要能做到融汇贯通,不仅从技术上也要从业务上。比如你做过的一个需求,为什么要做这个需求,这个需求的背景是什么,这个需求上线后带来了什么影响或者有哪些收益,虽然你是个技术,但是你能够知道这写得话肯定是更好的。其次在技术细节上,要能知道为什么要这样技术选项,这么做的好处是什么,以及能够横向纵向拓展。

比如说我的项目中有一个地方用JobService实现了定时任务,那么可以横向拓展的点就有,Android中实现定时任务的方式都有哪些,他们都有哪些好处坏处,你的这个场景为什么要选JobService,JobService和普通Service的区别是什么。纵向扩展的话就有,JobService的原理是什么,JobService在参数配置上的一些细节,JobService是不是会严格按照你配置的时间运行。这些都是可以扩展出来的,所以当你在对项目复盘的时候,一定不要只盯着你做的那一部分,还要把自己做的部分横纵拓展一下,这样才能做到无懈可击。

除此之外,良好的表达能力也是非常重要的一环,如果不觉得麻烦的话可以在复盘项目的时候把自己做了什么,为什么这么做打个草稿,自己看自己的逻辑以及表达是否通顺,以此来做调整。

面试前的系统复习路线参考

面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责!

接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用

**帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。**无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。

1、看视频进行系统学习

前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。

2、进行系统梳理知识,提升储备

客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

  • **架构师筑基必备技能:**深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO

  • **Android高级UI与FrameWork源码:**高级UI晋升+Framework内核解析+Android组件内核+数据持久化

  • **360°全方面性能调优:**设计思想与代码质量优化+程序性能优化+开发效率优化

  • **解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack

  • **NDK模块开发:**NDK基础知识体系+底层图片处理+音视频开发

  • **微信小程序:**小程序介绍+UI开发+API操作+微信对接

  • **Hybrid 开发与Flutter:**Html5项目实战+Flutter进阶

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。

主要内容:

Java 基础(★★)

  • 面向对象思想

  • 多态

  • 异常处理

  • 数据类型

  • Java 的 IO

  • 集合

  • Java 多线程

Java 高级(★★)

  • Java 中的反射

  • Java 中的动态代理

  • Java 中的设计模式&回收机制

  • Java 的类加载器

Android 基础(★★★)

  • Android 基本常识

  • Activity

  • Service

  • BroadCastReceiver

【附】相关架构及资料

源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

eceiver

【附】相关架构及资料

源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。

[外链图片转存中…(img-K5boMJW6-1713447353571)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-PlhiPXfU-1713447353571)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值