3、说一下你对 ArrayMap 的了解
ArrayMap 底层通过两个数组来建立映射关系,其中 int[] mHashes 按大小顺序保存 Key 对象 hashCode 值,Object[] mArray 按 mHashes 的顺序用相邻位置保存 Key 对象和 Value 对象。mArray 长度 是 mHashes 长度的 2 倍。
存储数据是根据 key 的 hashcode() 方法得到 hash 值,计算出在 mArrays 的 index 值,然后利用二分查找找到对应的位置进行插入,当出现哈希冲突时,会在 inde 的相邻位置插入。
取数据是根据 key 的 hashcode() 方法得到 hash 值,然后通过 hash 值根据二分查找拿到 mHashes 的 index 索引,最后在根据 index + 1 索引拿到 mArrays 对应的 values 值。
4、你在工作中对 HashMap 和 ArrayMap 还有 SparseArray 是怎么选型的 ?
好的,我总结了一套性能对比,每次需求我都是参考如下的总结。
序号 | 需求 | 性能选择 |
---|---|---|
01 | 有 1K 数据需要装入容器 | key 是 int 选择 SparseArray 节省 30% 内存,反之选择 ArrayMap 节省 10% |
02 | 有 1W 数据需要装入容器 | HashMap |
一、深入理解Java泛型 1、泛型的作用与定义 2、通配符与嵌套 3、泛型的上下边界 4、RxJava中深入理解泛型文章篇幅原因,中高级的部分内容过多,文章篇幅原因,所以我整理了241页PDF。虽然短小,但是精悍!看完这份电子书,保你可以随意应付Android面试中的Java问题,如果不行,请私信我给我寄刀片。文档领取方式:点赞+关注,然后私信关键词 【666】即可获得免费领取方式!
二、注解
- 注解(ANNOTATIONS)概念、什么是注解
- 元注解;什么是元注解、元注解的使用
- 自定义注解
- 默认参数值(DEFAULT PARAMETER VALUES)
- 什么是APT,如何在Android Studio中构建一个APT项目?
- 插桩
- 反射
- Retrofit中的注解
三、并发编程 1、基础概念[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCuxyMY6-1650983351206)(https://upload-images.jianshu.io/upload_images/22976303-8bdd738a783a6968 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 .png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]
1)CPU核心数、线程数
2)CPU时间片轮转机制
1)synchronized内置锁
2)volatile 关键字
3)线程私有变量 ThreadLocal
1)什么是CAS?
2)CAS(Compare And Swap)导致的ABA问题
1)Java中的ThreadPoolExecutor类
2)深入剖析线程池实现原理
3)如何合理配置线程池的大小
四、数据传输与序列化 1、Serializable原理
1.概念
- 序列化:把Java对象转换为字节序列的过程。
- 反序列化:把字节序列恢复为Java对象的过程。
2.用途 对象的序列化主要有两种用途:
1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
2)在网络上传送对象的字节序列。
- Android源码中的Parcelable
一种数据传输格式,与开发语言无关,轻量级。
一开始是javaScript的,但是后面比较流传,几乎所有语言都有相应的使用API。
五、Java虚拟机原理 1、垃圾回收[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UG9cONdv-1650983351207)(https://upload-images.jianshu.io/upload_images/22976303-73bea2df686dce56.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]
1)如何判断对象已“死”
2)回收方法区
3)垃圾回收算法
1)对象优先在Eden分配
2)大对象直接进入老年代
3)长期存活的对象将进入老年代
4)动态对象年龄判定
5)空间分配担保
1)Dalvik指令
2)Dalvik启动过程
3)Dalvik上的垃圾回收
六、反射与类加载 1、反射
1)反射基本概念与三种获取Class对象的方式
2)获取构造器实例化对象与属性信息
3)Android 配置打包签名信息的两种方法
4)Hook动态注入代码
1)动态代理模式
2)Android 中的Dalvik和ART
3)ClassLoader 的构造函数
4)双亲委派机制
七、高效IO 1、基于字节的IO *** 作 2、基于字符的IO *** 作 3、字节流和字符流的区别 4、常用类
1)文件流:FileInputStream/FileOutputStream, FileReader/FileWriter
2)包装流:PrintStream/PrintWriter/Scanner
3)字符串流:StringReader/StringWriter
4)转换流:InputStreamReader/OutputStreamReader
5)缓冲流:BufferedReader/BufferedWriter , BufferedInputStream/BufferedOutputStream
【Android架构师筑基必备Java知识点】文档领取方式:点赞+关注,然后私信关键词 【666】即可获得免费领取方式!
文末我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿!
欢迎关注我的简书,分享Android干货,交流Android技术。
对文章有何见解,或者有何技术问题,都可以在评论区一起留言讨论,我会虔诚为你解答。
也欢迎大家来我的B站找我玩,有各类Android架构师进阶技术难点的视频讲解,只为助你早日升职加薪。
B站直通车:[https://space.bilibili.com/544650554](()
,分享Android干货,交流Android技术。
对文章有何见解,或者有何技术问题,都可以在评论区一起留言讨论,我会虔诚为你解答。
也欢迎大家来我的B站找我玩,有各类Android架构师进阶技术难点的视频讲解,只为助你早日升职加薪。
B站直通车:[https://space.bilibili.com/544650554](()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)