面试技巧篇 – 编码风格 (Coding Style)

Coding Style 在面试中有什么影响?

算法面试已经是绝大多数high-tech公司的敲门砖,这也导致了求职者花费大量时间准备算法刷题,编码风格作为代码的脸面却往往被忽略。
在网上也经常有人吐槽,为什么算法写出来了面试还是没过?这种情况大概率是你的编码风格出卖了你。

对于一个有多年经验的程序员,代码风格是刻在骨子里的。就如同写字一般,写的一首好字的人会更容易给别人留下较好印象。相应的,好的代码风格会让你的面试效果事半功倍,不健康的代码风格却也可能会导致你的面试功亏一篑。要知道,面试官是在寻找自己未来的同事,如果一个人算法能力再强,但写出的代码可读性很差让人头疼,你会愿意让他成为你未来的同事吗?答案是显而易见的。

Coding Style 实例

很多开源的 Coding Style 文档可以在网上直接查找, 比如Google的开源项目风格指南。但对于准备面试,这些文档显得过于冗长,缺少针对性。在一个45分钟的面试中,我们能被问到的问题大多可以在300行代码之内解决,工程量小。

本文将帮助你在10分钟内掌握面试相关的Coding Style技巧。

面试中需不需要写代码注释?

答案是不需要,面试的代码量很小,通常是一眼就可以看懂,面试官不会将注释做为考察代码能力的点。适当添加注释来辅助自己完成算法是被允许的。

命名规则

在所有的编码规则中,命名规则是面试中一定逃不掉且也是对代码可读性影响最大的。只要牢记以下几点命名规则,瞬间就可以让你的形象从代码小白变成老程序员。

使用驼峰式命名法(Camel Case)

  • 函数名,类名使用大驼峰式命名法(Upper Camel Case),例:UpperCamelCase。
  • 变量名使用小驼峰式命名法(Lower Camel Case),例: lower_camel_case。
  • 尽量不要缩写。不要担心命名过长,约定俗成的缩写除外(如:num)。

下面以leet code上的高频面试题“Longest Substring Without Repeating Characters”的Python代码为例说明不同命名风格之间的差距:

代码小白↓

def substring(s):  # 函数名应遵循 Upper Camel Case 命名规则n = len(s)  # 意义不明确的变量命名ans = 0  # 不建议的缩写mp = {} # 不建议的缩写i = 0  # 意义不明确的变量命名for j in range(n): # 循环中的i, j是约定俗成的方式,是被允许的if s[j] in mp:i = max(mp[s[j]], i)ans = max(ans, j - i + 1)mp[s[j]] = j + 1return ans

潜在的同事↓

def LengthOfLongestSubstring(input_string: str) -> int:  # 函数名遵循 Upper Camel Case 命名规则longest_length = 0  # 变量名遵循 Lower Camel Case 命名规则hash_map = {}  # 意义明确的变量名index_left = 0 # 意义明确的变量名for index_right in input_string:character = input_string[i]if character in hash_map:index = max(character, index_right)longest_length = max(longest_length, index_right - index_left + 1)hash_map[character] = index_right + 1return longest_length

从以上两段代码的比较中我们可以看出,在算法完全相同的前提下,良好的命名规则会大大的提升代码的可读性,也是编程经验的最直接的表现。

代码模块化

  • 当代码量稍大,或明显有重复应用的子函数时,应有意识的将代码拆分成若干个子函数,提高代码的可读性。
  • 函数内部,尽量减少嵌套(如:if…elif…else…)
  • 函数中要加必要的 corner case test。

下面是以经典题目“Letter Combinations of a Phone Number”为例说明如何代码模块化。

代码小白↓

def letterCombinations(digits: str) -> List[str]:# 代码格式可读性差mapper = {'2' : ['a','b','c'],'3' : ['d','e','f'],'4' : ['g','h','i'],'5' : ['j','k','l'],'6' : ['m','n','o'],'7' : ['p','q','r','s'],'8' : ['t','u','v'],'9' : ['w','x','y','z']}l = len(digits)  # 意义不明确的变量命名if l == 0:  # 应尽量减少嵌套return []elif l == 1:return mapper[digits]else:idx = 1array = []# 可读性差while idx < l:newarray = []  # 变量命名未遵循Lower Camel Case命名规则。for combo1 in array:newarray.append(combo1)for combo2 in mapper[digits[idx]]:newarray.append(combo1 + combo2)array = copy.deepcopy(newarray)idx += 1return newarray

潜在的同事↓

def LetterCombinations(digits: str) -> List[str]:# 代码格式可读性好mapper = {'2' : ['a','b','c'],'3' : ['d','e','f'],'4' : ['g','h','i'],'5' : ['j','k','l'],'6' : ['m','n','o'],'7' : ['p','q','r','s'],'8' : ['t','u','v'],'9' : ['w','x','y','z']}length = len(digits)# Corner case test.if not length:return []if length == 1:return mapper[digits]return SearchAlgorithm(digits, hash_map)# 子函数使代码逻辑更简洁
def SearchAlgorithm(digits: str, hash_map: Dict[str, List[str]])-> List[str]:if not digits:return []if len(digits) == 1:return hash_map[digits[0]]pivot = int(len(digits) / 2)left = SearchAlgorithm(digit_lst[:pivot])right = SearchAlgorithm(digit_lst[pivot:])result = []for i in left:for j in right:result.append(i+j)return result

从以上两段代码可以看出,合理的运用子函数,会大大提升代码可读性。同时,子函数的使用会更方便递归调用算法的实现。

只要在日常的算法练习中留心***命名规则***和***算法模块化***这两点,会让你在面试中的表现事半功倍,成为面试官的首选。

面试技巧篇 -- 编码风格 (Coding Style)相关推荐

  1. 编码风格(Coding Style)和编程准则(Programming Guidelines)

    编码风格(Coding Style)和编程准则(Programming Guidelines) 一.编码风格 1.哑元 在类中没有定义该成员变量,但是在成员函数参数列表中出现,以区分其它重载函数的变量 ...

  2. ❤『面试知识集锦100篇』1.面试技巧篇丨HR的小心思,你真的懂吗?

    作者:不吃西红柿 简介:CSDN博客专家.蓝桥签约作者.大数据&Python领域优质创作者. 目录 一.企业考察要点 技巧一:了解自己的专业技能与 JD 中的匹配点 技巧二.把控好企业「味道」 ...

  3. 2021 程序员面试技巧篇

    #面试技巧# 技术面试一般可以分为三个阶段.面试准备.面试阶段.HR面试 面试准备 面试千万不要迟到, 带好笔,简历 程序员面试千万不要穿正装, 干净利落大方即可 在面试官面前千万不要抖脚,手脚不要动 ...

  4. 求职指南~面试技巧篇

    又是一年毕业季 在求职面试过程中 你是否会担心自己的简历不够出彩 无法吸引到面试官的注意 与面试官面对面交流时 你是否又会紧张胆怯 不知道如何讲述自己的优势特长 无领导小组讨论中 是否又不知从何说起. ...

  5. python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  6. python coding style why_python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  7. react 代码编写原则_如何编写易读的React代码— 10种编码风格技巧

    react 代码编写原则 by Nirmalya Ghosh 由Nirmalya Ghosh 如何编写易读的React代码- 10种编码风格技巧 (How to write highly readab ...

  8. python公司大部分编码风格_Python编码风格篇:比较运算符-阿里云开发者社区

    前几天有看到一篇 Flask 开发团队内部 Python 编码风格指南 ,里面有一段关于比较的规范觉得很有意思: 任意类型之间的比较,使用 == 和 != 与单例(singletons)进行比较时,使 ...

  9. python代码风格_Python编码风格,看这篇就够了

    如果有人问起 Python 程序员他们最喜欢 Python 哪一点,他们一定会提到 Python 的高可读性.确实,对于 Python 来说,其高可读性一直是 Python 这门语言设计的核心.一个不 ...

最新文章

  1. 你知道R中的赋值符号箭头(-)和等号(=)的区别吗?
  2. dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
  3. MySQL优化 之 Discuz论坛优化
  4. SAP UI5 应用开发教程之十二 - 使用 CSS 类对 UI 进行进一步美化
  5. java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...
  6. 新零售:从上云到云原生 Serverless
  7. python函数type的用意_Python内置函数Type()函数一个有趣的用法
  8. javascript 理解对象--- 定义多个属性和读取属性的特性
  9. JavaScript 演练(8). 对象成员、类成员(原型、非原型)
  10. Github查看文件历史提交和修改记录
  11. 2010 年下半年系统分析师案例分析真题
  12. Dbgview.exe输出Windows程序调试信息
  13. 一周畅销书速报 | 端午节特别版
  14. 统信UOS桌面版游戏攻略
  15. 微机原理笔记day01 计算机发展史,和计算机组成部分
  16. Gerrit环境与代码Review实战
  17. OllyDbg逆向破解入门攻略?拿来吧你!
  18. peewee mysql_peewee基本使用
  19. Home Assistant 接入 Lifesmart(云起智能)家居的途径。
  20. java将异常写到text,java捕获异常信息存入txt文件示例

热门文章

  1. 请问我接的宽带网线里面那些带颜色的线是什么顺序?
  2. 帝国CMS(EmpireCMS) v7.5 前台XSS漏洞复现
  3. Transformer课程 第46章 Transformer模型TAPAS架构
  4. ECMWF-ERA和ERA5关于累积变量的下载和处理
  5. 无线网络中AP及AC的概念及作用:
  6. 获取Android手机总内存和可用内存最佳方案
  7. 战地服务器打不开网页,战地5打不开的原因及解决方法
  8. 将Android手机屏幕快速投影至WIN7的PC和投影仪
  9. vs2019提示系统资源不足
  10. Dreamweaver正则表达式