深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 是不是线程安全
- 是不是进程安全的
- 怎么实现进程安全
context
- android有哪些Context
两个虚拟机区别
Dalvik
- Dalvik基于寄存器
- jvm基于栈
- 执行的是dex字节码格式
- 多个class装载在一个dex文件
ART
- 应用在第一次安装的时候会预编译成机器码
- Dalvik每次启动都要编译、ART只需要首次。所以后面启动速度更快
- ART占用空间大(原始代码占用空间大)
- 减少编译、减少cpu使用频率
进程
- 进程之间的优先级。 前台进程、可见进程、后台进程、不可见进程与空进程
- 如何起多进程
- 起多进程有什么好处
- 实现跨线程通信和跨进程通信的方式
其他
- aar打包R文件怎么处理的
- 65535方法数限制的原理、及怎么解决
- android里面的序列化方式有哪些,分别有什么区别,性能上哪个好,为什么,parceable可以持久化到本地吗?
- AsyncTask内部实现原理
- 安卓里有哪些ClassLoader,有用过pathClassLoader吗
- Serializable和Parcelable的区别,各自的优势
- 一个bitmap,怎么计算内存(RGB888)
- Android 4.0, Android5.0,Android8.0版本安装过程有啥区别
- 不同drawe文件加载在内存的区别
- 一个图片加载到内存占用占有多大内存
- 一个图片像素除了四个字节的表示还有什么表示方法
- recylerview缓存机制
- ASyncTask原理
Part 2—Java基础
类加载
- ClassLoader的双亲委派原理
- loadclass和findclass方法的关系
- 类加载机制:
DexClassLoader可以加载jar/apk/dex,可以从SD卡中加载未安装的apk
PathClassLoader只能加载系统中已经安装过的apk - java类在虚拟机中分哪几种状态
引用类型
- 内存泄漏的场景
- 强软弱虚引用分别什么区别
- 什么场景下使用虚引用
JVM
- GC的原理
- java垃圾回收算法
- JVM内存模型
- 方法区里面存的是什么
- 虚拟机中堆有几个栈有几个
- java内存结构,分成哪几个区域,其中哪些区域是线程共享的?
- jvm哪些放在栈哪些放在堆
语言特性
- hash和equel方法的区别,不都实现会有什么问题
- 对多态的理解
- 对泛型的理解和使用场景
- 什么是类型擦除
- 内部类为什么能使用外部类的私有方法
- 反射的实现原理
- 面向对象6大原则
Part 3—数据结构
- hashmap的实现原理
- hashmap扩容因子是怎么计算的,分子分母是谁
- hashmap怎么找到index
- size为啥是2的倍数
- 怎么样resize,resize之后之前的hash冲突还存在吗
- hashmap1.7之前和之后有什么区别
- 为什么1.7以后hashmap用了红黑树 不用别的树
- hashmap是不是线程安全的、有没有什么实现线程安全的方案
- CocurrentHashMap的实现原理
- LinkedHashMap 是不是线程安全的
- SparseArray与HashMap的区别
- ArrayList是线程安全的吗?默认初始容量是多少?
- ArrayMap和SparseArray
- LruCache实现原理(分为内存lru和diskLru两种实现)
- 了解红黑树吗
- recyclerview工作原理与绘制流程,以及多层缓存机制怎么做的
- 系统中用到代理模式的地方
Part 4—性能优化
包体积
- 包体积优化
1.删除无用资源
2.图片只保存一份
3.资源下沉,上层业务只使用一份
4.开启代码混淆、优化代码混淆
5.图片压缩
6.资源混淆,微信的资源混淆工具
7.zip压缩
8.so静态链接转动态链接。
9.搬,将大文件进行远程下载
10.监控:图片过大、体积过大、无用资源。
内存优化
- 内存泄漏的检测
- 内存泄漏出现的场景
- 内存泄露的本质原因
长生命周期对象引用短生命周期对象 - 什么是内存抖动
不断创建和回收重复对象,导致系统频繁GC,而GC会引起主线程阻塞,最终导致UI卡顿 - 不用Leatcanary怎么分析内存泄露
- 如果要加载一个大图片如何优化
1.缩放比例
2.采样率
3.解码格式
4.lrucache
布局绘制
- 布局优化的几个方法
1.减少嵌套层级使用 include、merge和viewstub等标签 - 减少重复绘制
1.减少不必要的背景
2.widow设置空背景
3.clipRect方法设置绘画区域 - viewstub 可以重复加载吗
不能,只能inflate一次 - 绘制优化(不要在onDraw方法里面创建新的对象)
- 影响feed流体验的关键指标,如何优化
- 如何优化fps
网络优化
- 网络优化
1.优化数据结构,压缩数据
2.根据业务合并/拆分请求
3.根据屏幕密度下发不同size的图片
4.dns缓存,缓存多个域名对应的缓存,减少解析频率
5.根据网络状态下发不同size的图片
6.根据网络状态动态调整轮训频率
7.列表数据分页加载
启动速度优化
- 启动速度优化
1.延迟初始化
2.耗时操作开线程
3.设置主题背景,防止黑屏
卡顿优化
- cpu占用过大怎么排查
- ANR是怎么发生的,如何排查
1.5S内无法响应用户输入事件
2.广播在10s内没处理结束 - trace文件内容和如何生成
- 如果一个list中加载了很多图片怎么优化
Part 5—计算机网络
- http1.0和2.0之前的区别
- https的加密原理
- https抓包原理
- 如何防止抓包
- 对称加密和非对称加密的区别
- md5和sha1区别
- http协议的组成
- .http请求头中都有哪些参数
- 简单说下网络请求的整个过程。
- 发起一个网络请求,经历哪些步骤
- http协议几次握手,几次挥手?
- TPC为什么需要三次握手
- UDP和TCP的区别
- http和https的区别:
- https的请求流程
- http1.0和2.0区别
- post和ger区别
- tcp链接数据包什么时候发出,数据包间时间间隔
- 网络优化有啥方案
Part 6—设计模式
- mvc 、mvp、mvvm的区别
- mvp的内存泄露怎么搞
- mvvm使用livedata会不会有什么内存泄露问题
- 你理解的MVVM是什么样的
- 动态代理的实现
- 项目中用到了哪些设计模式
- 责任链模式的优缺点
- 了解android中哪些设计模式
- AOP IOC DI
- 代理模式的类图
- 依赖注入和控制反转
- 一系列依赖任务的场景用什么设计模式
- 看源码中哪些设计比较印象深刻
- 静态代理和动态代理的区别
Part 7—算法
- 经典的排序算法
- N中有多少个7 (77算两个7)
- 二叉树的层序遍历
- 算数表达式转化成二叉树
- 01背包问题
- LeetCode 11 盛水最多的容器
- 两个无序数组,查找重复元素
- 链表上删除倒数第K个节点
- 写个二分查找
- 在旋转数组中输出一个数的index,不存在就输出-1
- 一个字符串去重且保持原有相对顺序
- 一个数组中,数都是成对出现只有一个是单独的 如何快速的找出它
- 链表逆转
- 最大子段和
- 层序遍历二叉树
- 合并两个有序的数组
- 归并排序
- 一个无序的int数组,给一个target数字找出数组中两个数字相加为target并输出坐标
- 桶排序
- 之字形打印二叉树
- 插入排序
- 快排
- 二维数组中全是0和1,求岛的个数
- 二维数组(n,n),横向和纵向都是升序,给定数字查找是否在其中:从(0,n)位置开始找,大于往下走,小于往左走
- 无序数组找第K大的值:采用快排思路,先按某个值划分大小组,如果大组数量大于K,那么用大组的数据继续进行大小组划分,如果大组数量小于K,累计记录大组的个数和,
- 两个有序链表合并成一个链表
- 二分查找
- 二叉树公式
Part 8—其他技术
- hotpach的实现
- 多渠道怎么打
- 进程保活的方法
- .google的jetpact
- 安卓中进程分哪几种,什么区别,这么分的作用
- webview和js通信的方式
flutter
- flutter三个绘画树的工作原理
- Flutter channel设计
- flutter如何做状态管理
- Flutter中inheritedwidget是怎么实现的
- Flutter的动态化怎么搞的
- flutter和native直接怎么共享图片,内存的共享
- dart的消息机制
Part 9—HR
- 为什么离职
- 和前面面试官聊的怎么样
- 了解我们公司吗
- 讲一个你最骄傲的项目
- 你之前公司给你带来了哪些成长
- 这次出来主要看哪个方向的机会
以上这些问题的参考答案我也给大家整理成PDF文档了,内容均免费分享给大家,需要完整版的朋友扫描下方官方认证二维码免费领取(如遇图片违规,移步文末微信名片)
一些过来人的建议
有些程序员自认自己技术挺好在面试时薪资谈判时觉得自己要求很低,但还是被淘汰了,因此想不通原因,这都是因为对自身的技能层级认知不够清晰,进行了错误的判断。2022可谓是招聘面试寒冬,不少大厂,如腾讯、字节的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言。过硬的技术功底是最起码的考核要求,面试前做准备是很重要的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
无言。过硬的技术功底是最起码的考核要求,面试前做准备是很重要的。
[外链图片转存中…(img-vHvKPyTn-1715605901633)]
[外链图片转存中…(img-rQuH52ZJ-1715605901634)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!