文章首发到公众号:月伴飞鱼,每天分享程序员职场经验!
大家好呀,我是飞鱼。
在国内的面试环境下,相信很多人都有背八股文找工作的经历。
❝
但大部分人看完后,其实很多可能没有完全理解八股文中包含的技术和知识。
仅仅可能是背下来,或者只有浮于表面的理解,如果面试官多问一层,又或者换个角度去问。
- 我们往往就不知道该怎么回答了。
而且当我们应付掉面试,找到工作之后:
❝
这些八股文知识点,很快就会忘记。
因为之前的这些内容,都是靠短期记忆的,并没有完全理解相关技术知识。
而且等到后面的工作中,一定会暴露出问题:
- 比如写出技术BUG,或者遇到性能问题无法优化等。
所以我们得想办法把八股文中的技术学明白才行。
❝
其实我们会发现,八股文中的每一条结论,其背后都会有复杂且丰富的问题场景。
- 还有对应的问题思考解决过程。
这才是这些技术问题的真正价值所在。
如果只是单靠八股文,我们无法培养出工程师的思维和能力。
- 工程师的价值在于解决问题,你能解决的问题越复杂,就越有价值。
所以,我们需要培养解决问题的能力。
❝
最好的方式就是参与到问题的解决过程中,学习问题是如何被别人解决的。
然后模仿/借鉴这些问题解决的思路,运用到自己的应用实践中去。
总结一下:
❝
我们要在八股文表面技术之上,弄清楚问题的来龙去脉,然后学习问题的解决思路,并有意识的运用起来。
反正就是:我们学习八股文,不在于学一个技术结论,而在于学习每个问题以及其产生结论的思考过程。
有啥其他看法,欢迎在评论区留言讨论。
❝
想看技术文章的,可以去我的个人网站:hardyfish.top/
- 目前网站的内容足够应付基础面试(
P6
)了!
每日一题
题目描述
❝
给定一个字符串
s
,请你找出其中不含有重复字符的最长。
示例 1:
ini
输入: s = "abcabcbb"
输出: 3
示例 2:
ini
输入: s = "bbbbb"
输出: 1
示例 3:
ini
输入: s = "pwwkew"
输出: 3
解题思路
❝
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。定义一个
map
数据结构存储,其中key
值为字符,value
值为字符位置 +1,加 1 表示从字符位置后一个才开始不重复。
- 定义不重复子串的开始位置为
start
,结束位置为end
。随着
end
不断遍历向后,会遇到与[start, end]
区间内字符相同的情况。此时将字符作为
key
值,获取其value
值。
- 并更新
start
,此时[start, end]
区间内不存在重复字符。
代码实现
Java
代码:
Java
class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length(), result = 0;
Map<Character, Integer> map = new HashMap<>();
for (int end = 0, start = 0; end < n; end++) {
char c = s.charAt(end);
if (map.containsKey(c)) {
start = Math.max(map.get(c), start);
}
result = Math.max(result, end - start + 1);
map.put(s.charAt(end), end + 1);
}
return result;
}
}
Python
代码:
Python
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
n = len(s)
result = 0
char_map = {}
start = 0
for end in range(n):
c = s[end]
if c in char_map:
start = max(char_map[c], start)
result = max(result, end - start + 1)
char_map[c] = end + 1
return result
Go
代码:
Go
func lengthOfLongestSubstring(s string) int {
n := len(s)
result := 0
charMap := make(map[rune]int)
start := 0
for end, c := range s {
if index, found := charMap[c]; found {
start = max(index, start)
}
result = max(result, end-start+1)
charMap[c] = end + 1
}
return result
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
复杂度分析:
❝
时间复杂度
O(N)
:
- 其中
N
为字符串长度。空间复杂度
O(1)