找回密码
 注册
搜索
查看: 68|回复: 0

程序员|八股文里也有真正的技术?

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式

在国内的面试环境下,相信很多人都有背八股文找工作的经历。


但大部分人看完后,其实很多可能没有完全理解八股文中包含的技术和知识。

仅仅可能是背下来,或者只有浮于表面的理解,如果面试官多问一层,又或者换个角度去问。

我们往往就不知道该怎么回答了。


而且当我们应付掉面试,找到工作之后:


这些八股文知识点,很快就会忘记。

因为之前的这些内容,都是靠短期记忆的,并没有完全理解相关技术知识。

而且等到后面的工作中,一定会暴露出问题:

比如写出技术BUG,或者遇到性能问题无法优化等。


所以我们得想办法把八股文中的技术学明白才行。


其实我们会发现,八股文中的每一条结论,其背后都会有复杂且丰富的问题场景。

还有对应的问题思考解决过程。

这才是这些技术问题的真正价值所在。

如果只是单靠八股文,我们无法培养出工程师的思维和能力。

工程师的价值在于解决问题,你能解决的问题越复杂,就越有价值。

所以,我们需要培养解决问题的能力。



最好的方式就是参与到问题的解决过程中,学习问题是如何被别人解决的。

然后模仿/借鉴这些问题解决的思路,运用到自己的应用实践中去。

总结一下:



我们要在八股文表面技术之上,弄清楚问题的来龙去脉,然后学习问题的解决思路,并有意识的运用起来。

反正就是:我们学习八股文,不在于学一个技术结论,而在于学习每个问题以及其产生结论的思考过程。


<顺便吆喝一句,技术大厂年前捞人,前后端测试→集会,感兴趣试试,待遇给的还可以~>


每日一题
题目描述


给定一个字符串 s ,请你找出其中不含有重复字符的最长。

示例 1:

  1. 输入: s = "abcabcbb"

  2. 输出: 3
复制代码


示例 2:

  1. 输入: s = "bbbbb"
  2. 输出: 1
复制代码



示例 3:

  1. > 输入: s = "pwwkew"

  2. 输出: 3
复制代码


解题思路

给定一个字符串s ,请你找出其中不含有重复字符的 最长子串 的长度。

定义一个 map 数据结构存储,其中 key 值为字符,value 值为字符位置 +1,加 1 表示从字符位置后一个才开始不重复。

定义不重复子串的开始位置为 start,结束位置为 end。

随着 end 不断遍历向后,会遇到与 [start, end] 区间内字符相同的情况。

此时将字符作为 key 值,获取其 value 值。

并更新 start,此时 [start, end] 区间内不存在重复字符。

代码实现

Java代码:

  1. class Solution {
  2.     public int lengthOfLongestSubstring(String s) {
  3.         int n = s.length(), result = 0;
  4.         Map<Character, Integer> map = new HashMap<>();
  5.         for (int end = 0, start = 0; end < n; end++) {
  6.             char c = s.charAt(end);
  7.             if (map.containsKey(c)) {
  8.                 start = Math.max(map.get(c), start);
  9.             }
  10.             result = Math.max(result, end - start + 1);
  11.             map.put(s.charAt(end), end + 1);
  12.         }
  13.         return result;
  14.     }
  15. }
复制代码


Python代码:

  1. class Solution:
  2.     def lengthOfLongestSubstring(self, s: str) -> int:
  3.         n = len(s)
  4.         result = 0
  5.         char_map = {}
  6.         start = 0
  7.         
  8.         for end in range(n):
  9.             c = s[end]
  10.             if c in char_map:
  11.                 start = max(char_map[c], start)
  12.             result = max(result, end - start + 1)
  13.             char_map[c] = end + 1
  14.         
  15.         return result
复制代码


Go代码:

  1. func lengthOfLongestSubstring(s string) int {
  2. n := len(s)
  3. result := 0
  4. charMap := make(map[rune]int)
  5. start := 0

  6. for end, c := range s {
  7.   if index, found := charMap[c]; found {
  8.    start = max(index, start)
  9.   }
  10.   result = max(result, end-start+1)
  11.   charMap[c] = end + 1
  12. }

  13. return result
  14. }

  15. func max(a, b int) int {
  16. if a > b {
  17.   return a
  18. }
  19. return b
  20. }
复制代码


复杂度分析:


时间复杂度 O(N) :

其中 N 为字符串长度。
空间复杂度 O(1)

——转载自作者:程序员飞鱼
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-1-22 13:54 , Processed in 0.047621 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表