很明显,公式2的计算效率更高,主要是体现在汇编指令更少,机器周期自然更短,所以说算法更好。
实际上真正的算法比这个要复杂得多,这里只是举个例子而已。
像这种公式,一般我们在小笔记本上先算好,最后转成用加减乘除之类的公式用程序写出来。
大多数情况,只要产品实时性要求不是特别苛刻的,公式1和公式2你看不出任何区别。
并不是每个行业的产品都需要算法,每个行业的算法肯定也是不一样。
哪怕你数学很差,都没关系,你找个数学厉害的人,告诉他你要算什么。
让他用加减乘除、与、或、移位运算帮你算出一个最佳解题公式,你带入到程序直接用就行了。
所以我们在做产品的时候,不要过度去追求程序执行效率,只要能满足需求就好,并不是刚需。
研究算法是很浪费时间的,通用性也不强,反正就是性价比很低。
下面再来说说程序架构,这个实用性和通用性极强。
而且可以说不懂架构中大型项目绝对做不来,不是做不好,而是做不来!
可能很多人工程师做了几年,已经碰到了瓶颈期,一直想提升,又无能为力。
比如说,变量多了,函数多了,程序总是乱糟糟的,一整合起来一堆BUG。
这个功能好了,影响了别的功能,改了别的功能,这个功能又不行了。
最后马马虎虎把代码好不容易整合起来实现完整的产品功能了,也没BUG了。
挨千刀的老板又跟你说要改功能,在刚开始做研发那几年,我就最怕增加功能、改功能。
哪怕只是把LED改成每秒闪1次,又或者说增加一个按键这么小的功能,如果架构不好的话,都有可能花上你一周甚至更长。
那程序架构到底是什么?
我认为是一种成熟的编程思维,是经验的总结,比如RTOS就是属于一种程序架构,STM32固件库也是一种程序架构。
不同的人,编写出来的程序架构都不一样,有大的有小的,最重要是够用就好。
而全局变量多导致程序乱的问题,就可以用程序架构的模块化编程特点来解决。
具体怎么做?
1.以不同的层次不同的文件区分
一般在写STM32级别项目,我都会分为两层:硬件层和应用层。
硬件层主要负责单片机的相关外设配置和一些功能驱动。
拿我们无际单片机编程的wifi报警主机项目来举例。
硬件层有临界管理、喇叭PWM驱动、EEPROM存储、按键检测、LED特效功能、OLED屏驱动、无线数据软解码、定时器矩阵、串口数据收发这些功能。
每个功能都是单独的.c和.h文件,这样更好区分和管理各个不同功能模块代码。
如果把这些都写在一个.c文件里,那涉及的函数和全局变量非常多,很混乱,查找也不方便。
2.我一般会把不同功能模块的全局变量、数组定义到对应的.c文件里。
这样定义以后,只要你不搞extern声明,别的.c文件基本是访问不了你这些变量或数组的,一定程度上起到保护的作用。
还有一点就是,如果你在不同的.c文件定义了同一个变量名,编译器一般也会报错。
还有一种方法,可以解决这种可重名问题,就是用static关键词。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
oNKAXMyy-1713018935140)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!