1-1 算法面试不仅仅是正确的回答问题

远远不需要啃完一整本《算法导论》

算法面试不是高考

把这个过程看成是和面试官一起探讨一个问题的解决方案

对于问题的细节和应用环境,可以喝面试官沟通

这种沟通本身很重要,它暗示着你思考问题的方式

比如,要求对一组数据进行排序

那么我们要跟面试官讨论,这组数据有没有什么具体特征

  • 有没有大量重复元素?---> 三路快排
  • 没有大量重复元素? ---> 普通快排
  • 是否数据近乎有序?--->插入排序
  • 是否取值范围有限?比如学生成绩 ---> 计数排序
  • 对排序是否有额外要求? 是否稳定?---> 归并排序
  • 数据的存储状况?是否使用链表?---> 归并排序
  • 数据的存储状况?内存很大或者很小不足以装载在内存里---> 外排序

“正确”还包含了对该问题的独到见解;优化;代码规范;容错性

1-2 算法面试只是面试的一部分

项目经理和项目中遇到的实际问题

你遇到的印象最深的bug

面相对象

设计模式

网络相关;安全相关;内存相关;并发相关

设计系统;scalability: 我的系统在大规模使用上会遇到的问题

创建自己的项目:

自己的小应用:计划表;备忘录;播放器

自己解决小问题:爬虫;数据分析;词频统计

分享:自己的技术博客;github等

1-3 如何准备算法面试

远远不需要啃完一整本《算法导论》

高级数据结构和算法面试提及率很低:红黑树、计算几何、斐波那契堆、数论、B-tree

算法面试的准备范围:

  • 各种排序算法
  • 基础数据结构和算法的实现: 堆、二叉树、图
  • 基础数据结构的使用:链表、栈、队列、哈希表、图、Trie、并查集
  • 基础算法:DFS、BFS、二分查找、递归
  • 基本算法思想:递归、分治、回溯搜索、贪心、动归

1-4 如何回答算法面试问题

注意题目的条件

  • 给定一个有序数组(有序)
  • 设计一个o(nlgn)的算法(八成离不开分治)
  • 无需额外空间
  • 数据规模大概是10000

当没有思路的时候

  • 测试用例走一遍
  • 暴力解法

优化算法(培养出一种思路)

  • 遍历常见的算法思路
  • 遍历常见的数据结构
  • 空间换时间(哈希表)
  • 预处理(先排序)

实际编写代码

  • 极端条件的判读
  • 数组为空?字符串为空? 数量为0? 指针为null?
  • 变量名尽量有意义且通俗易懂
  • 模块化、复用性

results matching ""

    No results matching ""