1.项目开发,你考虑了什么?
2.算法只是实现就行了?
3.设计模式为什么重要?
最近在面试和复习中,有些感悟,便分享给大家。
肯定有很多小伙伴们都是计算机相关的,而我自身也是计算机软件方面的,而经过这大概一个月的时间,通过面试和复习,带给我的感受还是蛮多的,这里我不想说那些学习的东西,而是想表达一点,带着思考去学习。
项目开发,你考虑了什么?
在上周面试的时候,一个老哥看了我的简历。
老哥:小伙子做过项目是吧,我看你这写了负责登录,那你说说你们登录是怎么弄的。
我:我便说用户登录,将账号密码进行比对,如果有,那么就返回确认登录,如果没有,就不让登录。
老哥:除了这些呢?
我:进行了权限校验,去进行判断是否具有权限访问。比如会员登录,或者普通用户登录。
老哥:那还有呢?
我:进行了优化,比如当前用户如果没有,传入数据库数据检查是十分耗性能,那么我们进行了优化,采用Redis的布隆过滤器。
我们会发现,一个功能的产生,需要很多地方去思考,权限,安全,性能方面的考虑,如果只是单纯的实现账号密码匹配,对自己的个人成长也是没有多少好处的,这里我想说,多思考,带着问题去设计,而不是直接开干。
算法
这个是我今天做程序员算法经典题时看一个老哥的见解,如果我是面试官,我会怎么问?
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = "leetcode"
输出: false
示例 2:
输入: s = "abc"
输出: true
限制:
0 <= len(s) <= 100
如果你不使用额外的数据结构,会很加分。
这个题其实很简单,那么我们来看老哥以面试官的角度怎么看待问题。
如果我是面试官,我会希望看到什么?
可能有点偏题,毕竟这里主要就是做题的地方。。
如果我是面试官,会考虑主要考察什么,就我的工作经验看,大多数主要是招聘工程师的,面试者如果什么问题都没有,直接写个二重循环搞定,会首先给个50分,如果能写点判断字符串是否为null的,60分。
直接上手什么bitset,什么位运算的,我会先问他,题目中有没有交代字符串的字符一定是26个英文字母?如果是unicode环境,你是不是要准备2^16/8个字节的空间?在实际项目中,风险可控,结果可期更重要,绝大多数时候不在乎那点时间和资源。
所以我期望面试者不要急于解答,我希望他先问我问题:
字符串的字符范围,如果我告诉他,26个小写英文字母,那可能一开头直接判断如果字符长度>26, 直接返回False,做到这一点的,80分
如果我告诉他ascii字符集,然后他的代码里有边界检查,并且针对不同的范围有不同的侧重点,比如说ascii字符集,那也就是128个可能性,16个字节的位运算比较好
如果我告诉他是unicode,没有字符范围,老老实实排序再判断是比较符合我对工程师的要求的,因为算法性能稳定,没有额外资源要求,一眼看出没什么不可预见的风险,100分。
就是说,有些东西,没想到或者一时没想到根本不是问题,日常工作中稍微提示一下即可,但是缜密的思维对于程序员来说更重要。
所以,对于算法,我们不是说实现了就可以,而是要多去判断,多去思考,分不同的情况考虑。
设计模式
设计模式自我感觉在实际开发中的用处还是很大的,因为这也是前人经过大量的应用实战,总结经验,使得我们在开发的时候,避开一些弯路,错路,使得开发效率提升。而不仅仅是使得代码的耦合一堆,不好维护不好管理。
虽然脑子里想了很多,但发现其实总结下来也就几句话,多带着问题思考,多想多问,追求性能,分多个场景考虑。如果我们只是一味的完成任务,那么很可能对自己的成长并没有那么的大,这也是送给今后的我,希望能在日常中多思考,而不只停留在简单的完成。
网友评论