带着思考去学习软件开发

1.项目开发,你考虑了什么?

2.算法只是实现就行了?

3.设计模式为什么重要?

最近在面试和复习中,有些感悟,便分享给大家。

肯定有很多小伙伴们都是计算机相关的,而我自身也是计算机软件方面的,而经过这大概一个月的时间,通过面试和复习,带给我的感受还是蛮多的,这里我不想说那些学习的东西,而是想表达一点,带着思考去学习。

项目开发,你考虑了什么?

 在上周面试的时候,一个老哥看了我的简历。

老哥:小伙子做过项目是吧,我看你这写了负责登录,那你说说你们登录是怎么弄的。

我:我便说用户登录,将账号密码进行比对,如果有,那么就返回确认登录,如果没有,就不让登录。

老哥:除了这些呢?

我:进行了权限校验,去进行判断是否具有权限访问。比如会员登录,或者普通用户登录。

老哥:那还有呢?

我:进行了优化,比如当前用户如果没有,传入数据库数据检查是十分耗性能,那么我们进行了优化,采用Redis的布隆过滤器。

我们会发现,一个功能的产生,需要很多地方去思考,权限,安全,性能方面的考虑,如果只是单纯的实现账号密码匹配,对自己的个人成长也是没有多少好处的,这里我想说,多思考,带着问题去设计,而不是直接开干

算法

这个是我今天做程序员算法经典题时看一个老哥的见解,如果我是面试官,我会怎么问?

面试题 01.01. 判定字符是否唯一

实现一个算法,确定一个字符串 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分。

就是说,有些东西,没想到或者一时没想到根本不是问题,日常工作中稍微提示一下即可,但是缜密的思维对于程序员来说更重要。

所以,对于算法,我们不是说实现了就可以,而是要多去判断,多去思考,分不同的情况考虑

设计模式

设计模式自我感觉在实际开发中的用处还是很大的,因为这也是前人经过大量的应用实战,总结经验,使得我们在开发的时候,避开一些弯路,错路,使得开发效率提升。而不仅仅是使得代码的耦合一堆,不好维护不好管理。

虽然脑子里想了很多,但发现其实总结下来也就几句话,多带着问题思考,多想多问,追求性能,分多个场景考虑。如果我们只是一味的完成任务,那么很可能对自己的成长并没有那么的大,这也是送给今后的我,希望能在日常中多思考,而不只停留在简单的完成。

你可能感兴趣的:(带着思考去学习软件开发)