2021最新Android必备面试题

再过两个月就到了“金三银四了”应该有不少程序员已经开始备战了,看了这个回答下有关于面试的分享,我也把我遇到过的和收集到的一些常见面试题和部分答案给大家分享一些吧(纯分享欢迎补充)。

1、java 中==和 equals 和 hashCode 的区别
基本数据类型的 比较的值相等. 类的 比较的内存的地址,即是否是同一个对象,在不覆盖 equals 的情况下, 同比较内存地址,原实现也为 ,如 String 等重写了 equals 方法. hashCode 也是 Object 类的一个方法。返回一个离散的 int 型整数。在集合类操 作中使用,为了提高查询速度。(HashMap,HashSet 等比较是否为同一个) 如果两个对象 equals,Java 运行时环境会认为他们的 hashcode 一定相等。 如果两个对象不 equals,他们的 hashcode 有可能相等。 如果两个对象 hashcode 相等,他们不一定 equals。 如果两个对象 hashcode 不相等,他们一定不 equals。

2、int 与 integer 的区别
int 基本类型
integer 对象 int 的封装类

3、String、StringBuffer、StringBuilder 区别
String:字符串常量 不适用于经常要改变值的情况,每次改变相当于生成一个新 的对象

StringBuffer:字符串变量 (线程安全)

StringBuilder:字符串变量(线程不安全) 确保单线程下可用,效率略高于 StringBuffer

4、什么是内部类?
内部类的作用 内部类可直接访问外部类的属性 Java 中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿 名内部类(没构造方法)、静态内部类(static 修饰的类,不能使用任何外围类 的非 static 成员变量和方法, 不依赖外围类)

5、进程和线程的区别
进程是 cpu 资源分配的最小单位,线程是 cpu 调度的最小单位。 进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。 一个进程内可拥有多个线程,进程可开启进程,也可开启线程。 一个线程只能属于一个进程,线程可直接使用同进程的资源,线程依赖于进程而 存在。

6、final,finally,finalize 的区

final:修饰类、成员变量和成员方法,类不可被继承,成员变量不可变,成员方 法不可重写

finally:与 try…catch…共同使用,确保无论是否出现异常都能被调用到

finalize:类的方法,垃圾回收之前会调用此方法,子类可以重写 finalize()方法实现对 资源的回收

7、Serializable 和 Parcelable 的区别

Serializable Java 序列化接口 在硬盘上读写 读写过程中有大量临时变量的生 成,内部执行大量的 i/o 操作,效率很低。

Parcelable Android 序列化接口 效率高 使用麻烦 在内存中读写(AS 有相关插件 一键生成所需方法) ,对象不能保存到磁盘中

8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?

可继承 不可重写 而是被隐藏 如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之 为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变 量名完成。

9、成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中 的应用

ava 中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名 内部类(没构造方法)、静态内部类(static 修饰的类,不能使用任何外围类的 非 static 成员变量和方法, 不依赖外围类) 使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实 现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有 影响。 因为 Java 不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很 难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或 者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部 分问题,而内部类使得多重继承的解决方案变得更加完整。

10、哪些情况下的对象会被垃圾回收机制处理掉?*
1.所有实例都没有活动线程访问。
2.没有被其他任何实例访问的循环引用实例。
3.Java 中有不同的引用类型。判断实例是否符合垃圾收集的条件都依赖于它的 引用类型。

要判断怎样的对象是没用的对象。

这里有 2 种方法:

1.采用标记计数的方法: 给内存中的对象给打上标记,对象被引用一次,计数就加 1,引用被释放了, 计数就减一,当这个计数为 0 的时候,这个对象就可以被回收了。当然,这也 就引发了一个问题:循环引用的对象是无法被识别出来并且被回收的。所以就 有了第二种方法:

2.采用根搜索算法: 从一个根出发,搜索所有的可达对象,这样剩下的那些对象就是需要被回收的

11、string 转换成 integer 的方式及原理

12、静态代理和动态代理的区别,什么场景使用?

14、Java 中实现多态的机制是什么?

15、说说你对 Java 反射的理解

16、说说你对 Java 注解的理解

17、Java 中 String 的了解

18、String 为什么要设计成不可变的?

19、Object 类的 equal 和 hashCode 方法重写,为什么?

20、List,Set,Map 的区别

21、ArrayMap 和 HashMap 的对比

22、HashMap 和 HashTable 的区别

23、HashMap 与 HashSet 的区别

24、HashSet 与 HashMap 怎么判断集合元素重复?

25、ArrayList 和 LinkedList 的区别,以及应用场景

26、数组和链表的区别

27、开启线程的三种方式?

28、线程和进程的区别?

我会持续更新我收集到的Android相关的题,也祝大家能斩获心仪的offer!

猜你喜欢

转载自blog.csdn.net/A_pyf/article/details/112364106