Android面试题总结(一)

1. overload 与 override 区别
    overload(重载) 与 override(重写)都体现了 Java 的多态性,但是 overload 是一个类的多态性体现,override 是父类与子类之间多态性的体现。
    overload:同一个类中定义多个方法,方法名相同,但参数类型或参数个数或参数的顺序不同。overload可以改变返回值类型。
    override:子类定义与父类中方法的方法名、参数、返回值都相同的方法。

2. String、StringBuffer、StringBuilder 区别
    String 为字符串常量,一旦创建不可以被修改,是线程安全的;String 类使用 final 修饰符,不可以被继承;String 的长度是不变的。适用于少量操作的字符串。
    StringBuffer 为字符串变量,长度是可变的,线程安全。适用于多线程下在字符缓冲区进行大量字符串操作
    StringBuilder 为字符串变量,长度是可变的,线程不安全。适用于单线程下在字符缓冲区进行大量字符串操作。
    字符串操作在执行速度:StringBuilder > StringBuffer > String

3. 抽象类(abstract) 与 接口(interface) 区别
    抽象类是由 abstract 修饰的类,该类可以被继承(extends),不能被实例化。抽象类中的方法可以有抽象方法(抽象方法子类必须重写),可以有普通方法。
    接口是由 Interface 修饰的类,该类可以被实现(implements),不能被实例化。接口中的方法只有抽象方法,默认使用 public 修饰,不能使用其他修饰符。接口中的字段都是公有常量,默认使用 public static final 修饰。

4. 介绍 List、Set、Map
   List、Set 接口 都是继承自 Collection 接口。
    List 接口 元素有序可重复,可存多个null值。
      ArrayList:动态数组实现轻量级,运行快,但线程不安全,查询操作快。
      Vector:动态数组实现重量级,运行慢,但线程安全。
      LinkedList:链表实现,增删操作快。
   Set 接口 元素无序不可重复,最多存一个null值。
      HashSet:是哈希表实现的,HashSet中的数据是无序的,最多存入一个null值,两者中的值都不能重复。底层用 hashCode() 算法实现, 保证元素的无序唯一, 自定义对象存进 HashSet 为了保证元素内容不重复需要覆盖 hashCode() 与 equals() 方法。
      TreeSet:是二差树(红黑树的树据结构)实现的,要求元素有序,自定义的对象需要实现 Comparable 接口的compareTo(object o) 方法。不允许存入null值。
   Map接口 元素是 key-value 形式存入,key 是唯一的,无序,value 可重复
      HashMap:基于哈希表实现。线程不安全。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。允许 key 或 value 为 null 。
      HashTable:线程安全。不允许 key 或 value 为 null
5. 线程状态,run() 与 start() 的区别
    新建状态:新建一个线程对象;
    就绪状态:调用该线程对象的 start() 方法,该线程位于可运行线程池中,等待获取 CPU 使用权;
    运行状态:该线程获取到 CPU 使用权,执行 run() 方法;
    阻塞状态:该线程因为某种原因放弃 CPU 使用权,暂时停止运行。
    死亡状态:该线程执行完毕或因异常退出 run() 方法,该线程结束生命周期。
    阻塞情况分三种:
      1.等待阻塞:运行的线程执行 wait() 方法,该线程放弃 CPU 使用权;
      2.同步堵塞:运行线程在获取对象的同步锁时,该同步锁被其它线程占用,运行线程会被放入到锁池中。
      3.其他堵塞:运行的线程执行 sleep() 或 join() 方法,或发出了 I/O 请求。当 sleep()状态超时、 join()等待线程终止或者超时、 或者 I/O 处理完毕时, 线程重新转入就绪状态。sleep() 方法不会放弃CPU 使用权。
6. final、finally、finanlize 的区别
    final:修饰符,可以修饰类、方法、变量。修饰类表示该类不能作为父类被继承;修饰方法表示该方法不能被子类重写;修饰变量表示该变量不能被修改。
    finally:异常处理中使用,可以保证 finally 代码块一定被执行。经常使用在 try-catch-finally 或 try-finally 中关闭流等必须执行的操作。
    finanlize:是基础类 java.lang.Object 的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9 开始被标记为 deprecated。
7. 强引用、软引用、弱引用、虚引用的区别
    强引用:最常见的普通对象引用,只要有强引用的存在,不管该对象是否闲置,垃圾收集器都不会去管理该对象。那什么时候会被回收呢?如果没有其他引用关系,只要超过了引用作用范围或者显示得将引用赋值为null,就可以被回收了。
    软引用:通过 SoftReference 类实现,它的生命周期要比强引用短一些,当内存不足才会被垃圾收集器回收。
    弱引用:通过 WeakReference 类实现,它的生命周期比软引用短一些,当垃圾收集器线程扫描到它的时候,不管内存是否不足都会被回收,不过垃圾收集器线程优先级很低,所以不一定会很快回收该对象。
    虚引用:又叫“幻象引用”,通过 PhantomReference 类实现,你不能通过它访问对象。幻象引用仅仅是提供了一种确保对象被 finalize 以后,做某些事情的机制。这个在日常开发中很少用到。
8. 请介绍 Exception、Error 以及之间的区别
    Exception 与 Error 同继承自 Throwable 类,在 Java 中只有 Throwable 类的实例才能被抛出(throw) 或者捕获(catch),它是异常处理机制的基本组成类型。
    Exception:程序正常运行中可以预料到的意外情况,可以被捕获并进行处理。可以分为可检查异常或不检查异常,可检查异常在代码中必须显式的进行捕获处理,这是编译期检查的一部分;不检查异常,即运行时异常,如 NullPointerException 等,可以通过代码避免的异常,该异常不会在编译期强制要求。
    Error:在正常情况下不大可能出现的情况,绝大部分的 Error 会导致程序处于不可运行与不可恢复状态。如 OutOfMemoryError 等。


PS: 对于 Java 基础知识,推荐大家订阅“极客时间”的“Java 核心技术36讲”,讲的很不错。当然这需要知识付费的!扫海报上的二维码可以返现6元,也不过才二十几块钱,还是听推荐大家学习一下的。这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值