文章目录
- 一、刷题范围建议
- 二、代码规范
一、刷题范围建议
面试算法 侧重实践 , 工程 ; 并不是所有的算法都适合面试 , 靠背诵解决问题的算法 , 只能解决单个问题没有推广性的算法 , 有简称 , 带人名的算法 , 这些算法与编程能力关系不大 , 基本面试中不会出现 ; 算法工程师岗位除外 ;
刷题关注点 : 不要乱刷题 , 刷题范围如下 ;
① 算法: 字符串处理 , 排序算法 ( 快速排序 , 归并排序 ) , 双指针算法 , 二分法 , 分治法 , 宽度优先搜索 , 深度优先搜索 , 二叉树遍历 , 动态规划 , 拓扑排序 , 递归 ;
② 数据结构 : 数组 , 链表 , 二叉树 , 堆 , 哈希表 , 线段树 , 树状数组 , 跳跃表 , 红黑树 , 字典树 , 并查集 ; 不同的数据结构 , 增删查改的算法复杂度是不同的 ; 每种数据结构都有其擅长处理的问题 , 如 : 数组方便查询 , 链表方便增删 ;
一些大部头的书 , 如 : 算法导论 , 尽量避免陷进去 , 搞算法研究 , 或算法工程师才去看这些书 , 面试看这些就废了 ;
二、代码规范
代码缩进 : 缩进一般 不要超过 3 层 , 缩进量层次越深 , 出 BUG 几率越高 ; 超过 3 层的逻辑放在子函数中完成 ;
算法耦合性 : 一个算法如果需要 多个步骤 进行 , 每个步骤之间有交叉重复的情况 , 尽量 将每个步骤抽出放在一个单独的函数中完成 ;
代码注释问题 : 推荐使用 变量 / 方法 清晰易懂的命名 , 逻辑简单易懂 ; 需要一定的编程功底 , 感觉纯属扯淡 , 注释能加还是多加 ;
多拆分代码 : 代码 适当地拆分成子函数 , 拆分的越细 , 子函数越多 , 代码越长 , 但是 代码可读性增强 , 更易于维护 , 出错较少 ;
变量 / 方法名称 :
- 变量 / 方法 命令 , 都要有实际的意义 , 不允许出现无意义名称 ;
- 使用 1 ~ 2 个单词作为名称 ;
多重判定 : 多使用 continue 关键字 , 少用 if 关键字 ;
使用空格 :
- 二元运算符两边 都要添加空格 ;
- 单元运算符不加空格 ;
- if 与括号之间 加空格 ;
- if , for 括号与花括号之间 添加空格 ;
- 逗号后面 添加空格 ;
使用空行 : 一个方法中 , 使用空行分隔不同逻辑模块 ;
异常检测 :
- 所有的函数 , 进来第一件事就是 验证参数是否符合要求 ;
- 只要涉及到函数 , 都要 确保下标不越界 ;
- 访问对象 , 确保对象不为空 , 避免空指针异常 ;
- 避免使用全局变量 ;
算法面试 :
- 如果拿到算法题目没有头绪 , 可以找面试官要提示 , 或者算法逻辑 , 但是问的问题不要太小白 ;
- 如果太难 , 给出思路 , 完成部分模块即可 ;