面试的时候遇到这个问题,我们要先考虑这个问题的意图是什么,是要考察你哪些方面的能力。
你的沟通能力,表达能力
技术能力(业务难题,技术难题)
领导能力(团队资源协调,总结,分享,成长)
下面是根据我自身职业的需要列出来的回答:
代码规范问题
维护了很长一段时间的旧代码,这个我觉得是几乎所有企业都会有的问题,就是一些旧代码很难维护,逻辑、文档、规范等等,对于需要长期使用的代码,有很多维护的成本。对于代码规范,我把ESLint
带进了我们的公司,像缩进、空格、引号、ES6简写等等,这些规范可以节约大量的维护成本。
本来是想把这个检验的步骤放到编译平台的,但是由于老项目特别多,所以只是在本地去进行。其实我第一家公司把ESLint写到编译平台上了,不符合规则的时候,直接不允许编译通过。
兼容CSS3、ES6
我之前也说了,我维护了很长一段时间的旧代码,有时候在旧代码的基础上开发的时候,我想用一些相对比较新的技术,例如CSS3、ES6,就会发现,有些低版本的手机不支持。以前解决这个问题的方法就是不使用CSS3、ES6,但是我在ESLint
上面引用了ES6的规范,造成了一个冲突。
解决方法就是在自动化编译平台里面,使用Gulp
把所有JS文件进行了编译操作。对于CSS3的浏览器厂商前缀,我也是用gulp
写了一个配置,处理所有的CSS文件。
全局修改或兼容旧版本发现了代码优化空间
在全局位置维护一个全局配置常量,例如,币种以前是0、1、2对应人民币、美元、港币,现在突然改成CNY、USD、HKD,我在改的时候发现所有用到的地方都要改,此时我就在全局位置写了一个常量,这样以后如果有修改的话,只需要改一个地方。另外,就是让代码语义化。我们直接在代码里写0、1、2,这个就叫做魔术数字。
更新规范的问题
我们有个老项目用到的是版本很早的jQuery,然后客户在做安全监测的时候发现了一些漏洞,然后就要替换成更新版本的jQuery。结果发现代码里其他地方用到了一些只有低版本jQuery才有的方法,导致更新之后有很多报错。比如$(ele).size()
然后平时工作中也会遇到类似的问题,就是后端更新之后,导致一些功能无法正常运行。随后我们就制定了一个更新的规范,每次更新都要包含:新增了哪些功能,修改了哪些功能,删除了哪些功能,即将删除哪些功能。针对即将删除的功能,要提前对影响范围作出改造优化的计划。
技术和实现的问题,总会有解决方案。人员的沟通、协调、遵守规范,其实占用了更多的时间。
其实,这个问题没有必要用各种高深的技术来回答,任何自己做过的优化或者解决的问题都可以拿出来分享一下,关键在于解决的过程、收获的描述。