Skip to content

Commit c22e528

Browse files
committed
python 内置数据结构和面试指南
1 parent d01b9a3 commit c22e528

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed

docs/07_哈希表/hashtable.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ h(388) = 388 % M = 1
120120
GROWTH_RATE 这个关键字,你会发现不同版本的 cpython 使用了不同的策略。python3.3 的策略是扩大为已经使用的槽数目的两倍。开辟了新空间以后,会把原来哈希表里
121121
不为空槽的数据重新插入到新的哈希表里,插入方式和之前一样。这就是 rehashing 操作。
122122

123-
# HashTalbe ADT
123+
# HashTable ADT
124124
实践是检验真理的唯一标准,这里我们来实现一个简化版的哈希表 ADT,主要是为了让你更好地了解它的工作原理,有了它,后边实现起 dict 和 set 来就小菜一碟了。
125125
这里我们使用到了定长数组,还记得我们在数组和列表章节里实现的 Array 吧,这里要用上了。
126126

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Python 常用内置算法和数据结构
2-
3-
之前在每章的数据结构和算法中涉及到的章节我都会提到对应的 python 内置模块,一般如果内置的可以满足需求,我们优先使用内置模块,一般在性能和容错性方面要好于我们自己实现。(比如有些是 c 实现的),这里我们重新列举一下。
4-
5-
6-
7-
8-
# 结语
9-
这套教程列举的算法很有限,包括图算法、贪心,动态规划,机器学习算法等很多没有涉及到,因为它们确实需要读者更深入的理论基础,而且这套教程的目的也不是针对算法竞赛。
10-
不过了解了本教程涉及到的大部分算法是可以应付绝大多数的业务开发的。如果读者对算法有兴趣,本教程引用的几本参考书都可以去深入学习。希望本教程能对你学习算法、养成良好的思维方式和编码习惯等有所帮助。
2+
相信到这里大家对常用的数据结构和算法及其实现都比较熟悉了。
3+
之前在每章的数据结构和算法中涉及到的章节我都会提到对应的 python 内置模块,一般如果内置的可以满足需求,我们优先使用内置模块,
4+
因为在性能和容错性方面内置模块要好于我们自己实现(比如有些是 c 实现的)。本章我们不会再对每个模块的原理详细说明,仅列举出一些常见模块供大家参考,
5+
如果有需要最好的学习方式就是参考 Python 的官方文档。很多高级的数据结构我们也可以通过 google 搜索现成的库拿来直接用。
6+
7+
- 常用内置数据类型:list, tuple, dict, set, frozenset
8+
- collections
9+
- heapq
10+
- bisect

docs/20_面试指南/interview.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# 注意事项
2+
3+
- 电子简历尽量用 pdf 格式,方便跨平台打开。doc 等格式在不同的电脑上打开会有排版问题,很多后端技术面试官可能使用的是 mac 或者 linux。
4+
- 提前复习回顾重点知识,防止卡在基础上。比如 mac 下著名的 brew 工具作者面试 google 就因为没写出来反转二叉树被拒,后来去了苹果😂.(这就只能看人品和运气和眼缘了,如果没见到二面面试官或者 hr,大概率是挂了)。(树、链表、哈希表、二分、快排、TCP/UDP、HTTP、数据库ACID、索引优化等常考点)。
5+
- 白板编程,练习在纸上手写代码。虽然很多求职者都很抵触手写代码,但是白板编程确实是一种比较好的区分方式。你的思考过程、编码习惯、编码规范等都能看出来。
6+
- 如果被问到工程里不会使用但是比较刁钻的算法题,建议你和面试官沟通的时候问问这个算法或者题目在开发中有哪些实际使用场景,看看对方怎么说😎。
7+
- 面试的时候准备充分,简历要与招聘方需求对等,甚至可以针对不同公司准备不同的简历内容。笔者每次面试都会带上白纸、笔、简历、电脑等,即使面试没过,至少也让面试官感觉我是有诚意的,给对方留下好印象。
8+
- 加分项:github、个人技术博客、开源项目、技术论坛帐号等,让面试官有更多渠道了解你,有时候仅仅根据几十分钟的面试来评判面试者是有失偏颇的。(比如面试者临场发挥不好;面试官个人偏好;会的都不问,问的都不会等)
9+
10+
11+
# 白板编程
12+
其实我个人是反对出纯算法题目的,尤其是有些比较刁钻的直接出算法竞赛题,这对与很多做工程的同学来说是比较吃亏的。
13+
14+
- 练习手写常见的算法,比如快排,二分,归并等,记住常见排序算法时间复杂度
15+
- 逻辑正确是前提
16+
- 有图示描述思路最好,如果时间紧代码没写出来,可以直接描述自己的思路。
17+
- 字不要写太大,尽量工整。每行代码之间留有一定的空隙,方便你修改
18+
- 如果实在写不出来可以和面试官交流,很多时候如果给不出最优方案尽量想一个次优方案,别上来就说不会
19+
- 想不起来的函数名写伪代码,一般面试官不会强制说让你记住每个 api 的名字
20+
- 如果有多余的时间(一般不会有)注意一些边界条件,防御性编程、代码风格、单元测试等东西
21+
22+
# 结语
23+
这套教程列举的算法很有限,包括图算法、贪心,动态规划,机器学习算法等很多没有涉及到,因为它们确实需要读者更深入的理论基础,而且这套教程的目的也不是针对算法竞赛。
24+
不过了解了本教程涉及到的大部分算法是可以应付绝大多数的业务开发的。如果读者对算法有兴趣,本教程引用的几本参考书都可以去深入学习。希望本教程能对你学习算法、养成良好的思维方式和编码习惯等有所帮助。
25+
26+
# 延伸阅读
27+
28+
- [那些年,我们一起跪过的算法题[视频]](https://zhuanlan.zhihu.com/p/35175401)

0 commit comments

Comments
 (0)