Android-面试官:这些Java知识点我必问

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

Android进阶必备Java高阶知识点

文章篇幅原因,中高级的部分内容过多,文章篇幅原因,所以我整理了241页PDF。虽然短小,但是精悍!看完这份电子书,保你可以随意应付Android面试中的Java问题,如果不行,请私信我给我寄刀片。文档领取方式:点赞+关注,然后私信关键词 【666】即可获得免费领取方式!

一、深入理解Java泛型

1、泛型的作用与定义
2、通配符与嵌套
3、泛型的上下边界
4、RxJava中深入理解泛型

二、注解

  • 注解(ANNOTATIONS)概念、什么是注解
  • 元注解;什么是元注解、元注解的使用
  • 自定义注解
  • 默认参数值(DEFAULT PARAMETER VALUES)
  • 什么是APT,如何在Android Studio中构建一个APT项目?
  • 插桩
  • 反射
  • Retrofit中的注解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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、基础概念

1)CPU核心数、线程数
2)CPU时间片轮转机制

2、线程之间的共享

1)synchronized内置锁
2)volatile 关键字
3)线程私有变量 ThreadLocal

3、线程间的协作

1)什么是CAS?
2)CAS(Compare And Swap)导致的ABA问题

4、线程池的使用

1)Java中的ThreadPoolExecutor类
2)深入剖析线程池实现原理
3)如何合理配置线程池的大小

四、数据传输与序列化

1、Serializable原理

1.概念

  • 序列化:把Java对象转换为字节序列的过程。
  • 反序列化:把字节序列恢复为Java对象的过程。

2.用途 对象的序列化主要有两种用途:
1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
2)在网络上传送对象的字节序列。

2、Parcelable的原理和使用方法
  • Android源码中的Parcelable
3、Json

一种数据传输格式,与开发语言无关,轻量级。
一开始是javaScript的,但是后面比较流传,几乎所有语言都有相应的使用API。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UG9cONdv-1650983351207)(https://upload-images.jianshu.io/upload_images/22976303-73bea2df686dce56.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

五、Java虚拟机原理

1、垃圾回收

1)如何判断对象已“死”
2)回收方法区
3)垃圾回收算法

2、内存分配策略

1)对象优先在Eden分配
2)大对象直接进入老年代
3)长期存活的对象将进入老年代
4)动态对象年龄判定
5)空间分配担保

3、Dalvik虚拟机

1)Dalvik指令
2)Dalvik启动过程
3)Dalvik上的垃圾回收

六、反射与类加载

1、反射

1)反射基本概念与三种获取Class对象的方式
2)获取构造器实例化对象与属性信息
3)Android 配置打包签名信息的两种方法
4)Hook动态注入代码

2、类加载

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](()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值