• 作者:老汪软件技巧
  • 发表时间:2024-10-15 04:00
  • 浏览量:

四年前,当我决定找工作后大概又过一年时间,经历好几场面试又经由身边大佬提醒,我终于意识到自己作为技术人员所欠缺的点之一:深度不够。

我提升深度的方法,大致分作两个阶段。

第一阶段是看教学视频,视频来源于两位老师,它们是李建忠老师的《C++设计模式》,以及侯捷老师的一系列C++教学视频。

看设计模式当时,我的感受又分作两点,一是前人的抽象总结能力真厉害,二是搭建我们项目的几位哥哥好厉害,他们在项目中用到许多设计模式,那种学习同时能于实际项目中立马验证的感觉真不错。

看完侯捷老师的视频,我写过以整理自己的收获:除收获技术认知之外,听侯捷老师沉稳、温和的讲课让我静心;知道底层原理之后的“胸中自有沟壑”,依然是我喜欢的评语。

第二阶段是看书,我已经整理过许多篇文章来讲述自己以及读书如何:我读很多书,很多不同类型的书,这些书帮助我以不同视角去看世界、看自己,其中一个方向是技术。关于技术,近四年的读书,可以这样分类:

过去四年的技术阅读书目

(我原有想法,只是列举一下近4年的阅读主线,从《》,到,到《操作系统导论》,再到《》,大概每年都有一本主要的每天都会阅读的技术书。待打开XMind记录时,又出现想法“不然将所有书都列举一下吧”。看到上图,即便最近半年读技术书很少,但我当下依然是感受到满足与信心的。再一次的:这样的每日积攒,正给予我许多信心。)

随着面试次数增多,我发现自己突破不了一面的很大一个原因是:算法题没做出来。刷题对我来说,是一件很难坚持事情,于是我便找寻折中方案:既然已经养成阅读习惯,不然在每天的某个固定时间段读一读专讲做题的书好啦?

由此,我依次读完《》《》《我的第一本算法书》,正阅读的是《算法(第4版)》。(对的,《算法》这本书,目前进展龟速……)

《我的第一本算法书》,今年3月便已经读完,这本书的作者是一位日本作家,有日本作家那种简练、实用风格,简练于是短小;本书,算是一本算法方向的入门书籍。作者在书中说:“数据存储于内存时,决定了数据顺序和位置关系的便是‘数据结构’,而算法是借助于数据结构来计算或者解决问题的步骤。”

我不确定自己迟迟不写本书读书笔记的原因是由于本书太短小,还是在于就算法和数据结构这一块的理解不够自信;总之,就这样一周周耽搁下来。转眼已到10月,今年已经读完但没写读书笔记的书还有很多,可不能再拖。

我强迫自己先靠记忆行事,列举出数据结构与算法都有哪些内容。

常用的数据结构有数组、字符串(也可以算作数组)、链表、队列(先进先出)、栈(后进先出)、哈希表、树(二叉树感觉出现的会更多些、B+树曾经有过整理、堆也是一种树)、图。

排序是最基础内容,绝大部分基于数组,有时候会和链表联动,也会需要对链表进行排序。

(关于排序,我曾经有一个囧囧问答。面试官问我:“归并排序知道么?”我回答说:“我不太知道,但比较熟悉冒泡排序。”啊!当我会为面试做些准备时候,开始对这回答感到惭愧,特别是我说自己熟悉冒泡排序时,似乎还带着些骄傲情绪。)

(啊哈哈,我现在写出来其实是有脸红的,记下之后又生出些坦然,坦然接受当年那个不想着跳槽的我;然后,读书笔记偏了题,我将本篇加到“第四份工作”系列。)

对排序过的数据进行二分查找,会将时间复杂度从遍历的O(n)缩小到O(log2n)。

我对O(log2n)的概念并不甚清晰,整理本篇时,问了一下ChatGPT:这就是放麦子的国际象棋棋盘

如果某个题目某种场景中需要对字符串或是链表做些判定(比如字符串是否回文,链表是否有环),可以使用的算法之一叫做“双指针”,一快一慢或者一前一后。

哈希表,常用来以空间换时间,当数据存储于哈希表时,定位数据的时间复杂度,可以缩小到O(1)。

队列与栈的实现,可以是一道题目。但它们更多是给其它算法打辅助,比如二叉树的广度优先搜索,需要用到队列,而深度优先搜索,则使用栈。

书中内容虽然简洁,但除了以上我能看懂部分之外,还有安全算法以及许多需要很花时间、心力去学习的内容,比如回溯法、动态规划、聚类、A*等。

回溯法和动态规划,很常见,我在阅读当时有搞懂算法流程。但现在?老话常谈,我已然不能(阅读当时也不太能)使用自己语言将它们呈现出来。

一张好看的书中图片:二叉树的广度优先搜索

《我的第一本算法书》是一本有许多图片的书,书中图片很好看,对算法的阐述很直观。然而,仅仅看书真的能够帮助自己提高做题成功率么?

就我的经验来看,答案是可以的。

随着看的算法、解法多些,我开始对算法有一种“慢慢都能理解”的感受。对的,此处又关于读书,即便读过之后会忘记,但一点点积攒,借不同书一遍遍思考,慢慢将那些不熟悉记忆变做较熟悉的,较熟悉的变做熟悉的,慢慢汇总成一种对于数据结构和算法的一个笼统信心:算法题并不难,一点点回忆,是能想出解决方案来的,请不要害怕。

当然,临上阵时依然会紧张,那些不熟悉题目,在有限时间内依然会做不出来。这信心对我说:“别怕,你过去的积攒已经让成功做题的概率,更大了些。”

最后,要再谈一谈我对面试中需要做算法题态度的转变。最开始,我是全不知道面试要现场做题的,也就对面试不做准备,全靠工作中的不多积攒与面试当时的“聪明才智”。待发现面试时要做题,一开始的想法是抵触的:“这些工作中又不常用,真不知道考了做啥。”当自己看了些算法书,又生出许多崇拜:“还能这样做么?数据结构与算法确实该是计算机基础,多看些基础内容,对敲代码,对拓展思维,是真会有些帮助的。”

技术迭代很快,AI已经到来,对于“了解更多底层规则后对新事物的理解速度会变快”,我依然相信着。