阿里大淘宝商业化中心暑期实习Java一面(1.5h)
- 自我介绍
- 项目
- 后端为什么采用token机制进行幂等性校验而不用订单号?
- 为什么用redis来存储token?
- redis单机实现会有问题吗?(无法高可用)
- redis集群(主从、分片)
- 采用什么协议实现?
- 主从架构下当我数据很多的时候怎么办?
- 缓存雪崩、缓存穿透、缓存击穿
- 如果一个key刚才数据库里没有现在有了,布隆过滤器怎么处理?
- 布隆过滤器的优势劣势
- 布隆过滤器如何删数据
- redis数据结构
- zset底层
- redis为什么使用跳表来实现zset?
- MySQL隔离级别,解决了什么问题,默认隔离级别
- 可重复读的情况下能实现串行化吗?(解决幻读)
- MySQL在可重复读的情况下一定能防止幻读吗(引擎)
- innodb和myisam的区别
- 聚簇索引与非聚簇索引的区别
- innodb为什么采用聚簇索引?
- 二级索引
- MySQL索引为什么使用B+树而不用调表?
- 简单做个题:
给定一个未排序的整数数组`nums`,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 示例 输入:`nums = [100,4,200,1,3,2]` 输出:`4` 解释:最长数字连续序列是 `[1,2,3,4]`。它的长度为 `4`。 输入:`nums = [0,3,7,2,5,8,4,6,0,1]` 输出:`9`
实现思路:
首先将数组中的所有数存入哈希表中,并标记为未访问过。依次遍历每个数,如果它之前没有被访问过,那么就向左、向右依次扩展,直到找到不连续的数为止。记录下连续数字序列的长度,并更新哈希表中访问过的数的标记。最后返回最长连续序列的长度即可。
代码实现:
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> num_set = new HashSet<Integer>();
for (int num : nums) {
num_set.add(num);
}
int max_len = 0;
for (int num : num_set) {
if (!num_set.contains(num - 1)) {
int cur_num = num;
int cur_len = 1;
while (num_set.contains(cur_num + 1)) {
cur_num += 1;
cur_len += 1;
}
max_len = Math.max(max_len, cur_len);
}
}
return max_len;
}
}
好长时间不面试了,转部门的转了快一个月突然约面试了,有点措手不及,答得不是很好,面试八股还是得常复习啊,两三周不碰就生疏了。也算是敲响了一个警钟吧。
