阿里面试总结(复盘)

1、一个键值对如何插入hashmap?

方法一:使用hashmap的put()方法
hashmap.put(key, value);

方法二:使用hashmap的putIfAbsent()方法
hashmap.putIfAbsent(key, value);

2、哈希的应用场景?

哈希可以应用于多种领域,其中一些应用场景如下:

1. 数据存储:哈希可以用于存储结构化的数据,比如内存对象,键值对等。

2. 加密:哈希算法可以被用来为安全信息加密,比如数字签名,消息摘要等。

3. 校验:哈希算法可以用来校验数据完整性,比如校验文件完整性,校验文件下载等。

4. 搜索:哈希算法可以用来快速搜索,它可以用来将搜索对象映射到一个字符串,通过字符串快速搜索。

 

3、图搜索场景如何应用哈希来优化?

可以使用哈希来对图搜索中的节点和边进行存储,并将其映射到字符串,以实现快速搜索。

此外,可以使用哈希表来进行分块处理,只要将图中的节点按照任意哈希算法进行存储就可以实现,而不需要遍历整个图。这样能够大大提高搜索的效率,以及对大型数据的处理能力。

4、MD5使用哈希冲突,会有什么问题?

MD5是一种唯一的哈希函数,可以将任意长度的信息映射到一个128位的输出。但是,由于MD5是一个不可逆的函数,有可能会出现哈希冲突,也就是说,多个不同的输入可能会映射到同一个输出。这样就会导致安全问题,比如数据篡改攻击,伪造攻击等。

5、1T数据,内存有限,如何把这些数据排序

在内存有限的情况下,可以使用桶排序或基数排序来将1T数据进行排序。

桶排序:通过分桶的思想将元素放入不同的桶中进行排序,然后再将每个桶中的元素合并起来,从而实现排序。

基数排序:通过将T数据依次按位排序,分拆不同的桶中,再将各个桶中的数据进行归并排序,最终实现排序。

6、一个医院,有病人,会按照先来后到排序,现在来了个病重患者,你如何设计一个数据结构和算法来处理这些病人。

可以使用优先队列的数据结构和算法来处理这些病人。优先队列是一种特殊的队列,其中元素以具有优先级的方式存储,具有更高优先级的元素先于具有更低优先级的元素出队列,可以用于处理这种情况。具体步骤如下:

1. 将发生变更的病人的优先级设置为最高;
2. 将已入队的病人按照先来后到的原则放入优先队列;
3. 通过优先队列的性质取出最先来的病人进行治疗。

 

7、桌子放硬币,轮流放一个,放不下时算输,如何设计必赢策略。

可以使用反悔策略,具体步骤如下:

1. 在每一次轮到自己放硬币时,先放一块小硬币,这样可以使得最后一块硬币无法放下;
2. 如果另一个玩家在轮到自己之前,把最后一块硬币放下,则可以反悔,拿走前面的小硬币,选择放置一块大的硬币。

这样就可以保证自己最后一块硬币放下,实现必赢策略。

8、输入一个正数n,输出所有和为n的连续正数序列。

可以使用双指针的方法来解决这个问题,具体步骤如下:

1. 定义两个指针low和high,初始时low和high都指向1,表示从1开始搜索;
2. 计算low和high指向的数字序列和,如果和小于n,则high右移;
3. 如果和大于n,则low右移;
4. 如果和等于n,则输出这个序列,并将low右移;
5. 重复上述步骤,直到low大于n/2。

9、有一段文字,包含6个字母 ABCDEF,假设这六个字母出现的频率分别是 A 27 B 8 C 15 D 15 E30 F5。现在要进行编码,如何设计让总文本最短

 

可以使用Huffman编码,步骤如下:

1. 将出现频率最高的字母A分配最短的编码(例如:0);

2. 将其他字母按照字母出现的频率从高到低进行排列,依次分配“1”开头的编码(例如:E 30 -> 1, C 15 -> 10, D 15 -> 11, B 8 -> 100, F 5 -> 101);

3. 将上述编码应用到原文本中,得到最短的编码文本。根据本例,原文本ABCDEF编码为0110011101

 

posted @   开源遗迹  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示