没有合适的资源?快使用搜索试试~ 我知道了~
2018年阿里一面面试题整理集合1
需积分: 0 0 下载量 111 浏览量
2022-08-08
20:56:37
上传
评论
收藏 78KB DOCX 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/86371302/0001-14f14c63366c3bc530e979911c4e8eac_thumbnail-wide.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
16页
- 核心思想是空间换时间 - 应用 1. 字符串检索 1. 词频统计## 算法题(剑指 Offer 上原题不少)1. 怎么查询一个单向链表的倒数第五个节点2.
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/86371302/bg1.jpg)
更多技术干货
关注公众号:【IT 技术思维】
## 数据结构
1. HashMap 的原理,内部数据结构?
- 底层使用哈希表(数组 + 链表),当链表过长会将链表转成 红黑树以实现 O(logn) 时间
复杂度内查找
2. 讲一下 HashMap 中 put 方法过程?
1. 对 Key 求 Hash 值,然后再计算 下标。
1. 如果没有碰撞,直接放入桶中,
1. 如果碰撞了,以链表的方式链接到后面,
1. 如果链表长度超过阀值(TREEIFY_THRESHOLD == 8),就把链表转成红黑树。
1. 如果节点已经存在就替换旧值
1. 如果桶满了(容量 * 加载因子),就需要 resize。
3. HashMap 中 hash 函数怎么是是实现的? 还有哪些 hash 的实现方式?
1. 高 16bit 不变,低 16bit 和高 16bit 做了一个异或
1. (n - 1) & hash --> 得到下标
1. 还 有 哪 些 Hash 实 现 方 式 : 可 以 参 考 之 前 的 博 客 [Effective Java 学 习 笔 记 --
hashCode()](../reading-notes/Effective-Java.md)
4. HashMap 怎样解决冲突,讲一下扩容过程,假如一个值在原数组中,现在移动了新数组,
位置肯定改变了,那是什么定位到在这个值新数组中的位置,
- 将新节点加到链表后,
- 容量扩充为原来的两倍,然后对每个节点重新计算哈希值。
- 这个值只可能在两个地方,一个是原下标的位置,另一种是在下标为 <原下标+原容量>
的位置。
5. 抛开 HashMap,hash 冲突有那些解决办法?
- 开放定址,链地址法
1. 针对 HashMap 中某个 Entry 链太长,查找的时间复杂度可能达到 O(n),怎么优化?
- 将链表转为红黑树, JDK1.8 已经实现了。
1. 数组和 ArrayList 的区别;
1. 数组可以包含基本类型和对象类型,ArrayList 只能包含对象类型
1. 数组大小固定,ArrayList 大小可以动态变化
1. ArrayList 提供了更多的特性(`addAll`、`removeAll`)。
1. Arraylist 如何实现排序
- `Collections.sort(List<T> list)`;
- `sort(List<T> list, Comparator<? super T> c)`;
![](https://csdnimg.cn/release/download_crawler_static/86371302/bg2.jpg)
6. HashMap
1. 数组 + 链表方式存储
1. 默认容量: 16(2^n 为宜,若定义的初始容量不是 2^n,容量会定义为大于该初始容量的
最小 2^n)
- 例如:初始容量为 13,则真正的容量是 16.
1. put:
1. 索引计算 : ((key.hashCode() ^ (key.hashCode() >>> 16)) & (table.length - 1))
1. 在链表中查找,并记录链表长度,若链表长度达到了 TREEIFY_THRESHOLD(8),则将
该链转成红黑树。
1. 若在链表中找到了,则替换旧值,若未找到则继续
1. 当总元素个数超过容量*加载因子时,扩容为原来 2 倍并重新散列
- (元素的下标要么不变,要么变为【原下标+原容量】)。
1. 将新元素加到链表尾部
1. 线程不安全
7. HashTable
1. 数组 + 链表方式存储
1. 默认容量: 11(质数 为宜)
1. put:
1. 索引计算 : (key.hashCode() & 0x7FFFFFFF)% table.length
1. 若在链表中找到了,则替换旧值,若未找到则继续
1. 当总元素个数超过容量*加载因子时,扩容为原来 2 倍并重新散列。
1. 将新元素加到链表头部
1. 对修改 Hashtable 内部共享数据的方法添加了 synchronized,保证线程安全。
8. HashMap ,HashTable 区别
1. 默认容量不同。
2. 索引计算方式不同。
3. HashMap 特有的将过长链表转换为红黑树。
4. 新元素的位置不同。
5. 线程安全性
9. HashMap、ConcurrentHashMap 区别。
1. 索引计算消除了最高位的影响
1. 默认容量: 16(若定义了初始容量(c),容量会定义为大于(c + (c >>> 1) +1) 的最小 2^n)
- 例如:初始容量为 13,则真正的容量是 32.
1. 线程安全,并发性能较好
- 并发性能好的原因是 ConcurrentHashMap 并不是定义 synchronized 方法,而是在链表
头上同步,不同的链表之间是互不影响的。
10. ConcurrentHashMap 原理
1. 最大特点是引入了 CAS(借助 Unsafe 来实现【native code】)
1. CAS 有 3 个操作数,内存值 V,旧的预期值 A,要修改的新值 B。当且仅当预期值 A
和内存值 V 相同时,将内存值 V 修改为 B,否则什么都不做。
1. Unsafe 借助 CPU 指令 cmpxchg 来实现
1. 使用实例:
1. 对 sizeCtl 的控制都是用 CAS 来实现的
>1. sizeCtl :默认为 0,用来控制 table 的初始化和扩容操作。
![](https://csdnimg.cn/release/download_crawler_static/86371302/bg3.jpg)
> - -1 代表 table 正在初始化
> - N 表示有 -N-1 个线程正在进行扩容操作
> - 如果 table 未初始化,表示 table 需要初始化的大小。
> - 如果 table 初始化完成,表示 table 的容量,默认是 table 大小的 0.75 倍,居然用这个
公式算 0.75(n - (n >>> 2))。
1. CAS 会出现的问题:ABA
- 对变量增加一个版本号,每次修改,版本号加 1,比较的时候比较版本号。
11. TreeMap 和 TreeSet 区别和实现原理
- `TreeSet` 底层是 `TreeMap`,`TreeMap` 是基于红黑树来实现的。
12. 红黑树的特点及相比平衡二叉树的优点(先介绍各自特点)?
- 红黑树
1. 每个节点要么是红色,要么是黑色。
1. 根节点永远是黑色的。
1. 所有的叶节点都是空节点(即 null),并且是黑色的。
1. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的路径上不会有两个连续
的红色节点)
1. 从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点。
- 平衡二叉树
1. 任何节点的两个儿子子树的高度最大差别为一
- 红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,
从而提高了性能。
1. B+树的了解
- 多分支结构有效降低了树的高度
- B 树的各种操作能使 B 树保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取
操作,从而有效提高查找效率
13. Trie-Tree 原理及其应用;
- 字典树
- 特点
1. 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。
1. 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。
1. 每个节点的所有子节点包含的字符互不相同。
- 核心思想是空间换时间
- 应用
1. 字符串检索
1. 词频统计
## 算法题(剑指 Offer 上原题不少)
1. 怎么查询一个单向链表的倒数第五个节点
2. 判断链表是否成环
3. 两条相交的单向链表,如何求他们的第一个公共节点
4. 在无序数组中找最大的 K 个数?
5. 给定 n 个数,寻找第 k 小的数,同时给出时间复杂度
6. 找一个数组中的第三大数
![](https://csdnimg.cn/release/download_crawler_static/86371302/bg4.jpg)
7. 找出数组中第一个出现 2 次的数,
8. 求 1-N 中数字 1 的个数。
9. 判断一个数是不是丑数;
10. 求第 K 个丑数;
11. 10w 行数据,每行一个单词,统计出现次数出现最多的前 100 个。
12. 一个文本文件,给你一个单词,判断单词是否出现。
13. 一进去要求敲代码二叉排序树的插入、删除及查找
14. 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网
站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为 2 亿;积分为
非负整数,且小于 100 万;
15. 判断一棵二叉树是否是 BST。
16. 一副扑克 54 张牌,现在分成 3 份,每份 18 张,问大小王出现在同一份中的概率是多少;
17. 50 个白球 50 个红球,两个盒子,怎么放让人随机在一个盒子里抽到红球概率最高。。。
这个就是一个盒子放一个红球,另一个盒子放 99 个球。
18. logN 查找一个有序数组移动后类似 4 5 6 7 1 2 3 里面的一个数
1. 0 ~ n 连续 n + 1 数,现在有一个长度为 n 的数组存放了上面 n + 1 个数的其中 n 个,找出
哪一个数没有被放进数组
19. 将 M 个平均长度为 N 的有序队列组合成一个有序队列
20. 10 亿条短信,找出前一万条重复率高的
21. 对一万条数据排序,你认为最好的方式是什么
22. 假如有 100 万个玩家,需要对这 100W 个玩家的积分中前 100 名的积分,按照顺序显
示在网站中,要求是实时更新的。积分可能由做的任务和获得的金钱决定。问如何对着
100 万个玩家前 100 名的积分进行实时更新?
- 除了前 100 名,后 100W-100 名玩家的积分,让变化的积分跟第 100 名比较,如果比第
100 名高,那就替换的原则。
## Java 基础
1. Java 的优势
- 语法简单
- 跨平台
- 当开发规模膨胀到一定程度,Java 在规范、协作和性能调优上还是占有很大优势,在大
型应用,尤其是企业应用上,Java 的地位仍然难以撼动
2. boolean 占几个字节
1. 如果 boolean 变量在栈上,那么它占用一个栈单元(32-bits)
1. 如果在堆上,那么就跟 JVM 的实现有关了
1. 在 Oracle 的 JVM 实现,boolean[] 中每个元素占用一个字节(8-bits)
3. Java 访问修饰符权限的区别;
- `public` 所有类都可访问
- `protected` 只允许包内、子类访问。
- `默认` 只允许包内访问
- `private` 只允许类内访问
4. String 是否可以继承, “+” 怎样实现?
- `String` 是 `final` 类,不可继承。
剩余15页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar](https://profile-avatar.csdnimg.cn/9968d1675c3141c3a6402080bcaa9a37_weixin_35796461.jpg!1)
天使的梦魇
- 粉丝: 32
- 资源: 321
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0