美文网首页
Android面试复习笔记 6

Android面试复习笔记 6

作者: 苏坡坡要吃婆婆酥 | 来源:发表于2022-03-14 14:59 被阅读0次

11.Java基础

1. 集合

List,Set,Queue和Map。
List,Set,Queue都是接口,他们都继承至Collection接口。
Map是独立接口。

1.1 List

有序,可重复。(按照进入的先后顺序)

          ArrayList,底层数据结构是数组,查询快,增删慢。线程不安全,效率高。
          Vector,底层数据结构是数组,查询快,增删慢。线程安全,效率低
          LinkedList,底层数据结构是链表,查询慢,增删快。线程不安全,效率高。

1.2 Set

无序,唯一。

HashSet,底层数据结构是哈希表。(无序,唯一)
通过两个方法:hashCode()和equals()保证元素唯一性。

LinkedHashSet,底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
由链表保证元素有序。由哈希表保证元素唯一。

TreeSet,底层数据结构是红黑树。(有序,唯一)
自然排序,比较器排序保证有序。根据比较的返回值是否是0来决定唯一性。

1.3 Map

键值对集合。键唯一,值可重复。

HashMap,无序的。不同步,线程不安全。 允许key/value为空。
TreeMap,有序的。红黑树对所有的键排序。
HashTable,无序的。同步,线程安全。

2. 面向对象的特性

2.1 Java中抽象类和接口的特点

共同点:

  • 抽象类和接口都不能生成具体的实例。
  • 都是作为上层使用。

不同点:

  • 抽象类可以有属性和成员方法,接口不可以。
  • 一个类只能继承一个类,但是可以实现多个接口。
  • 抽象类中的变量是普通变量,接口中的变量是静态变量。
  • 抽象类表达的是is-a的关系,接口表达的是like-a的关系。

2.2 面向对象的三大特性

面向对象的三大特性:继承、封装和多态。

封装:封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。

继承:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

多态:多态同一个行为具有多个不同表现形式或形态的能力。

多态存在的三个必要条件:

  1. 要有继承。
  2. 要有复写。
  3. 父类引用指向子类对象。

Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中的方法重载。

重载:是指多个方法名一样,参数类型和个数不一样,返回值类型可以一样,也可以不一样。
重写:是指在子类中继承父类方法,方法名和参数相同,对该方法进行重新定义。

5. == 和 equals的区别

== 是运算符,当比较对象为基本数据类型时,比较的是数据的大小;当比较对象为引用类型时,比较的是引用类型中存放的地址。

equals,是Objec类的方法,默认用于比较两个对象是否相等,也就是地址值。

案例:

A和B值相同,String A==String B相等吗? true。
如果A和B是2个对象,虽然值相同,但是用==号比较返回false。如果用equals比较就是true。

6. equals和hashcode的关系

默认情况下,equals相等,hashcode必相等,hashcode相等,equals不是必相等。hashcode基于内存地址计算得出,可能会相等,虽然几率微乎其微。

7. String,StringBuffer和StringBuild的区别

  • StringString属于不可变对象,每次修改都会生成新的对象。

  • StringBuilder:可变对象,非多线程安全。

  • StringBuffer:可变对象,多线程安全。

    大部分情况下,效率是:StringBuilder>StringBuffer>String

8. Http和Https

HTTPS = HTTP + SSL/TLS

HTTP作用于应用层,使用80端口,起始地址是http://,明文传输,消息容易被拦截,串改。
HTTPS作用域传输层,使用443端口,起始地址是https://,需要下载CA证书,传输的过程需要加密,安全性高。

9. final,finally,finalize

final关键字:
final修饰的类无法继承
final修饰的方法无法重写
final修饰的变量不可修改

finally关键字:
用于与try语句连用,用于异常处理机制
finally中的语句时必须执行的

finalize标识符:
是一个Object类中的方法名
这个方法是垃圾回收器gc负责调用的
一般用来记录对象在JVM中被释放时的时间,即记录对象内存被释放的时间

12. 算法

1.排序算法

分为两大类,比较类配和非比较类排。

1.1 比较类排

a. 交换排序

冒泡排序

  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  • 针对所有的元素重复以上的步骤,除了最后一个;
  • 重复步骤1~3,直到排序完成。
b. 插入排序

插入排序法

  • 从第一个元素开始,该元素可以认为已经被排序;
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • 将新元素插入到该位置后;
  • 重复步骤2~5。
c. 选择排序

选择排序法

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

d. 归并排序

1.2非比较类排

a.计数排序
b.桶排序
c.基数排序

相关文章

网友评论

      本文标题:Android面试复习笔记 6

      本文链接:https://www.haomeiwen.com/subject/vjnddrtx.html