面试官,ming字结尾,具体名字我就不说了
没有自我介绍
上来一题:
/**
* @return int
* @Author Lei
* @Description
* 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
* 示例 1:
* 输入: s = "aabcbcbb"
* 输出: 3
* 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
* 示例 2:
* 输入: s = "bbbbb"
* 输出: 1
* 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
* 示例 3:
* 输入: s = "pwwkewfp"
* 输出: 5
* 解释: 因为无重复字符的最长子串是 "kewfp",所以其长度为 5。
* 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
* 示例 4:
* 输入: s = ""
* 输出: 0
* @Date 19:48 2022/8/29
* @Param [str]
**/
第一想法暴力搜,代码已写
面试官:是否有优化,简单说一下思路哈,不需要你实现
(思考了下)采用计数加上双指针
面试官:怎么样的一个思路,不要大概
下面是我给面试官讲解的大概的思路的代码:
public static int getMaxLen1(String str) {
if ("".equals(str)) {
return 0;
}
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
map.put(str.charAt(i), map.getOrDefault(str.charAt(i), 0) + 1);
}
int left = 0, right = str.length() - 1;
while (map.get(str.charAt(left)) != 1 && map.get(str.charAt(right)) != 1) {
while (map.get(str.charAt(left)) != 1) {
map.put(str.charAt(left), map.get(str.charAt(left)) - 1);
left++;
}
while (map.get(str.charAt(right)) != 1) {
map.put(str.charAt(right), map.get(str.charAt(right)) - 1);
right--;
}
}
return right - left + 1;
}
我也不是很确定,所以没有太肯定这个就是优化算法,但是讲解的时候演示正确了。
然后再来讲解一些面试的简单题目:
1:项目当中优化到5秒是怎么实现的,redis(是我太菜了没有明白面试官想要问什么,在哪里解释了半天,面试官说:你还是没有正面回答我的问题)
2:虚拟内存是干啥的?1:提供超过自身物理内存访问范围的访问地址范围,2:对于不同的程序,都有自己的访问地址空间,互不干扰,面试官:不是很满意
3:多线程访问会出现什么问题,怎么解决?多线程访问共享变量的时候会出现线程安全性问题,一般是使用加锁,或者是使用信号量的同步机制来进行解决。
4:那你知道像这种遇到多线程访问共享变量的场景是否可以检测到?Java工具包好像可以提供死锁的线程分析(dump线程),像这种访问冲突的场景我不是很清楚
5:一致性hash是什么,不是很清楚
面试官:我没有什么问题了,你还有什么问题么?
反问:
1:部门情况:和一面情况一样都是不是很清楚,校招不代表之后的部门
2:自己的表现:面试官自己都笑了好多秒,我也尬笑了,感觉无了
面试感受:自己太菜,快准备!!!
#神策数据校招后端面经##23届秋招笔面经#