前言

金三银四已经过完了,该上岸的的朋友已经上岸了,没上岸的朋友真的该好好努力准备了,赶紧刷刷面试题出去找工作。,给大家整理一份今年各大厂的Android面试题,有需要的朋友可以收藏了

算法和数据结构面试题汇总

1.1 请说一说HashMap,SparseArrary原理,SparseArrary相比HashMap的优点、ConcurrentHashMap如何实现线程安全?

  • 这道题想考察什么?
    1、HashMap,SparseArrary基础原理?
    2、SparseArrary相比HashMap的优点是什么?
    3、ConcurrentHashMap如何实现线程安全?
  • 考察的知识点
    HashMap,SparseArrary、ConcurrentHashMap
  • 考生如何回答
    HashMap和SparseArray,都是用来存储Key-value类型的数据。
  • SparseArray和HashMap的区别:
    双数组、删除O(1)、二分查找
    数据结构方面:hashmap用的是链表。sparsearray用的是双数组。
    性能方面:hashmap是默认16个长度,会自动装箱。如果key是int 的话,hashmap要先封装成
    Interger。sparseArray的话就就会直接转成int。所以spaseArray用的限制是key是int。数据量小
    于1k。如果key不是int小于1000的话。可以用Arraymap。
  • HashMap的基本原理
    HashMap内部是使用一个默认容量为16的数组来存储数据的,而数组中每一个元素却又是一个链表的头
    结点,所以,更准确的来说,HashMap内部存储结构是使用哈希表的拉链结构(数组+链表)

1.2 请说一说HashMap原理,存取过程,为什么用红黑树,红黑树与完全二叉树对比,HashTab、concurrentHashMap,concurrent包里有啥?

  • 这道题考察什么
    1、HashMap,HashTab基础原理?
    2、ConcurrentHashMap相比HashMap的优点是什么?
    3、Concurrent包里面有什么样的的函数?
  • 考察的知识点
    HashMap,HashTab、ConcurrentHashMap
  • 考生如何回答
    HashMap的原理
    HashMap内部是使用一个默认容量为16的数组来存储数据的,而数组中每一个元素却又是一个链表的头
    结点,所以,更准确的来说,HashMap内部存储结构是使用哈希表的拉链结构(数组+链表)。

1.3 请说一说hashmap put()底层原理,发生冲突时,如何去添加(顺着链表去遍历,挨个比较key值是否一致,如果一致,就覆盖替换,不一致遍历结束后,插入该位置) ?

  • 这道题想考察什么?
    1、Hashmap的put函数基础原理?
  • 考察的知识点
    HashMap底层的源码
  • 考生如何回答
  • 思路如下:
    对key的hashCode()进行hash后计算数组下标index;
    如果当前数组table为null,进行resize()初始化;
    如果没碰撞直接放到对应下标的bucket里;
    如果碰撞了,且节点已经存在,就替换掉 value;
    如果碰撞后发现为树结构,挂载到树上。
    如果碰撞后为链表,添加到链表尾,并判断链表如果过长(大于等于TREEIFY_THRESHOLD,默认8),就把链表转换成树结构;
    数据put后,如果数据量超过threshold,就要resize。

1.4 请说一说ArrayList 如何保证线程安全,除了加关键字的方式 ?

  • 这道题想考察什么?
    1、ArrayList的底层原理?
  • 考察的知识点
    ArrayList底层的源码的理解
  • 考生如何回答
    ArrayList 如何保证线程安全
    继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些
    synchronized的方法中调用ArrayList的方法。
    可以使用Collections.synchronizedList()这个函数

1.5 请说一说ArrayList、HashMap、LinkedHashMap ?

  • 这道题想考察什么?
    1、ArrayList、HashMap和LinkedHashMap的底层原理?
  • 考察的知识点
    ArrayList、HashMap、LinkedHashMap的源码的理解
  • 考生如何回答
  • ArrayList
    ArrayList:底层结构是一个数组,初始长度为10 容量不足时,扩展为原来的1.5倍也就是扩展为15
    ArrayList底层是一个双向链表,好处是不用扩容,坏处是当你要寻找第N个元素时,实践复杂度为O(n),
    就是遍历N个元素去找到他 而ArrayList的时间复杂度是 O(1)
    List:元素有序 有序值的是在内存中存放,可重复
  • HashMap
    底层结构是 一个元素为链表的数组 , 虽然是数组 但是是无序插入数组的。根据哈希值来插入。
    当hash相同则需要用到链表结构 , 把新插入的但 hashcode值相同的 链在之前插入的后面形成链表,
    当连得太多 就会形成红黑树,新加入的元素形成连头,第一存放在位置上的就成链尾
  • LinkedHashMap
    底层是一个元素为链表的数组 + 元素之间的形成的双向链表 , 即是单向链表形成的双向链表。 双向链
    表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。也就是说,当遍历LinkedHashSet集
    合里元素时,HashSet将会按元素的添加顺序来访问集合里的元素,因此LinkedHashSet可以保证元素
    按插入顺序输出。

1.6 请说一说HashMap实现原理,扩容的条件,链表转红黑树的条件是什么 ?

  • 这道题想考察什么?
    1、HashMap的底层原理?
    2、HashMap的扩容条件以及链表转换红黑树的条件
  • 考察的知识点
    HashMap原理、HashMap扩容条件的理解
  • 考生如何回答
    HashMap实现原理
    HashMap内部是使用一个默认容量为16的数组来存储数据的,而数组中每一个元素却又是一个链表的头
    结点,所以,更准确的来说,HashMap内部存储结构是使用哈希表的拉链结构(数组+链表)

1.7 请说一说二叉树遍历步骤?

  • 这道题想考察什么?
    1、二叉树的基本原理和遍历的方法?
  • 考察的知识点
    二叉树遍历的基本流量、二叉树的基本原理
  • 考生如何回答
    二叉树的基本概念
    简单地理解,满足以下两个条件的树就是二叉树:
  1. 本身是有序树;
  2. 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;

1.8采用递归和非递归对二叉树进行遍历?
-这道题想考察什么?
1、二叉树的基本原理和遍历的方法?

//filename: BinTreeNode.h
template <typename T>
void travPre_R(BinTreeNode<T> * root) {//二叉树先序遍历算法(递归版)
if (!root) return;
cout << root->data;
travPre_R(root->LeftChild);
travPre_R(root->RightChild);
}
template <typename T>
void travIn_R(BinTreeNode<T> * root) {//二叉树先序遍历算法(递归版)
if (!root)
return;
travPre_R(root->LeftChild);
cout << root->data;
travPre_R(root->RightChild);
}
  • 考察的知识点
    二叉树遍历的基本概念、二叉树的基本原理
  • 考生如何回答
    二叉树的基本概念
    简单地理解,满足以下两个条件的树就是二叉树:
  1. 本身是有序树;
  2. 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;

1.9对称和非对称加密,MD5的原理?

  • 这道题想考察什么?
    1、对称和非对称加密算法的原理?
    2、MD5的基本的概念和原理?
  • 考察的知识点
    MD5算法原理、对称和非对称加密算法
  • 考生如何回答
    对称和非对称加密算法的基本概念
    对称加密和非对称加密的基本概念

1.10MD5的基本概念

  • MD5的基本概念
    MD5加密
    MD5本身是一个128位的0/1比特。一般被表示为16进制的字符串。4个比特位组成一个16进制字符,因
    此常常能见到的是(128/4=)32个16进制字符组成的字符串 4951 dd1c bff8 cbbe 4cd4 475c a939
    fc8b,当然它实质是一种消息摘要算法。
  • MD5加密的特点:
  1. 不可逆运算
  2. 对不同的数据加密的结果是定长的32位字符(不管文件多大都一样)
  3. 对相同的数据加密,得到的结果是一样的(也就是复制)。
  4. 抗修改性 : 信息“指纹”,对原数据进行任何改动,哪怕只修改一个字节,所得到的 MD5 值都有很大区
    别.
  5. 弱抗碰撞 : 已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即伪造数据)是非常困难
    的.
  6. 强抗碰撞: 想找到两个不同数据,使他们具有相同的 MD5 值,是非常困难的

写在最后

每一章节都是站在企业考察思维出发,作为招聘者角度回答。从考察问题延展到考察知识点,再到如何优雅回答一面俱全,可以说是求职面试的必备宝典,每一部分都有上百页内容,接下来具体展示,完整版可直接下方扫码领取。

第一章 算法和数据结构面试题汇总

在这里插入图片描述

第二章 Java核心基础面试题汇总

在这里插入图片描述

第三章 Java深入泛型与注解面试题汇总

在这里插入图片描述

第四章 Java并发编程面试题汇总

在这里插入图片描述

第五章 Java虚拟机原理面试题汇总

在这里插入图片描述

第六章 Java反射类加载与动态代理面试题汇总

在这里插入图片描述

第七章 网络编程面试题汇总

在这里插入图片描述

第九章 高级UI面试题汇总

在这里插入图片描述

第十章 Framework内核解析面试题汇总

在这里插入图片描述

第十一章 Android组件内核面试题汇总

在这里插入图片描述

第十二章 程序性能优化与数据持久化面试题汇总

在这里插入图片描述

第十三章 开源框架面试题汇总

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐