面试资料简结

203 阅读2分钟

JAVA

基础

equals与==的区别

equals:默认实现为比较两个对象的内存地址是否相同,不同的对象有不同实现,比如String中比较的是字符串是否相同 ==:对于基本数据类型,判断的是他们的值是否相等,对于其他对象是判断他们的引用地址是否相等

Java的四种引用,强弱软虚,用到的场景

  • 强引用,最常用引用,GC时不会被回收
  • 弱引用,当内存不足,即将发生OOM时,弱引用关联的对象才会被回收
  • 软引用,GC时必被回收
  • 虚引用,任何时候都可能被GC回收,相当于没有引用,被GC回收时引用者会收到一个系统通知

String、StringBuffer与StringBuilder的区别

  • String:只读字符串,值一旦确定就不能修改
  • StringBuffer:可修改,线程安全的。
  • StringBuilder:可修改,单线程下使用,效率更高

容器框架

Collection

List :表示为一个集合接口,实现类如下

  • ArrayList :基于数组实现,所以查找的效率高,删除和移动需要移动大量元素,效率低,默认大小为10,每次扩容到原来大小的1.5倍加1。
  • LinkedList : 基于双向链表实现,查找需要遍历效率低,删除和移动的效率高
  • Vector : 类似于ArrayList,线程安全,很少使用

Set :表示没有重复元素的集合

Map

Map : 表示一种键值对的映射关系,键唯一,值可以为空。

  • HashMap : 其主要实现是一个数组,每一项是一个单链表。构建::初始容量:initialCapacity默认16,加载因子:loadFacor默认0.75 ,put(K,V)过程: 1. 传入key和value,判断key是否为null,如果为null,则调用putForNullKey,以null作为key存储到哈希表中。 2. 然后计算key的hash值,根据hash值搜索在哈希表table中的索引位置,若当前索引位置不为null, 则对该位置的Entry链表进行遍历,如果链中存在该key,则用传入的value覆盖掉旧的value,同时把旧的value返回,结束 3. 否则调用addEntry,用key-value创建一个新的节点,并把该节点插入到该索引对应的链表的头部 ,get(K)过程读取的步骤比较简单,调用hash(key)求得key的hash值,然后调用indexFor(hash)求得hash值对应的table的索引位置,然后遍历索引位置的链表,如果存在key,则把key对应的Entry返回,否则返回null

JVM(Java虚拟机)

Java并发

Android

性能优化总结

内存泄露总结

适配问题

数据结构

算法

网络基础

设计模式