关于一些代码习惯

这篇具有很好参考价值的文章主要介绍了关于一些代码习惯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

修改完代码,记得自己测试一下

「改完代码,自己先测试」是每位程序猿们必备的基本素养。
尤其不要抱着这种「侥幸心理:我只是改了一个变量或者我只改了一行配置代码,没必要自己测试」。
改完代码后最好要求自己去测试一下,这样可以规避很多不必要的bug。

方法入参尽量都检验

入参校验也是每个程序员必备的基本素养。你的方法处理「必须先校验参数」。
比如入参是否允许为空,入参长度符合你的预期长度了没。
这个尽量养成习惯吧,要知道很多「低级bug」都是「不校验参数」导致的。


比如你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,
你不校验参数,「插入数据库那就直接异常」了。这个经常发现没?

修改老接口的时候,要先思考接口的兼容性

很多bug都是因为修改了对外老接口,但是「不做兼容导致」的。
关键这个问题还多数是比较严重的,可能直接导致系统发版失败了。
这个也是新手程序员经常犯的错误哦~

所以,如果你的需求是在原来接口上修改的,并且这个接口是对外提供服务的,那你就一定要考虑接口兼容。

复杂的代码逻辑,添加清楚的注释

写代码的时候是没有必要写太多的注释的,好的方法或变量命名就是最好的注释。
但是如果是「业务逻辑很复杂的代码」,真的非常有必要写「清楚注释」。
清楚的注释,更有利于后面的维护,不然别人会看不懂你的代码是在干嘛的。

尽量不在循环里远程调用、数据库操作,要优先考虑批量进行

远程操作或者数据库操作都是「比较耗网络、IO资源」的,
所以尽量不在循环里远程调用、不在循环里操作数据库,能「批量一次性查回来最好是不要循环多次去查」。
(但是呢,也不要一次性查太多数据哈,分批查询,效果会好很多,不然你的电脑又要卡很久了)

手动写完业务代码的SQL,先拿去数据库运行一下,同时也explain看下执行计划

手动写完业务代码的SQL,可以先把它拿到数据库运行一下,看看有没有语法错误嘛。
有些小伙伴不好的习惯就是,写完就把代码打包上去测试服务器,
其实把SQL放到数据库执行一下,可以规避很多错误的。

同时呢,也用「explain看下你Sql的执行计划」,尤其走不走索引这一块。可以一目了然。

explain select * from user where userid =10086 or age =18;

调用第三方接口,需要考虑异常处理、安全性、超时重试这几个点

调用第三方服务,或者分布式远程服务的的话,需要考虑:

异常处理(比如,你调别人的接口,如果异常了,怎么处理,是重试还是当做失败)
超时(没法预估对方接口一般多久返回,一般设置个超时断开时间,以保护你的接口)
重试次数(你的接口调失败,需不需要重试,需要站在业务角度上思考这个问题)
❝
举一个简单例子,一个http请求别人的服务,需要考虑设置connect-time和retry次数。

❞
如果是转账等重要的第三方服务,还需要考虑「签名验证」、「加密算法」等。

接口需要考虑幂等性

接口是考虑幂等性是必须的,尤其是在抢红包、转账等这些重要接口的时候。最直观的业务场景,就是「用户连着点击两次或者多次时」,你的接口有没有hold得住。

❝
幂等(idempotent、idempotence)是一个数学与计算机学概念,经常出现在抽象代数中。
在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。
❞
一般「幂等技术方案」有下面这几种:

查询操作
唯一索引
token机制,防止重复提交
数据库的delete删除操作
乐观锁
悲观锁
Redis、zookeeper 分布式锁(比如抢红包需求,用了Redis分布式锁)
状态机幂等

主从延迟问题考虑

先插入数据,接着就去查询,这类代码逻辑比较常见,这「可能」会有问题的。
一般数据库都是有主库、从库的。写入的话是写主库,读一般是读从库。
如果发生主从延迟,很有可能出现你插入成功了,但是却查询不到的情况。

如果是重要业务,需要考虑是否强制读主库,还是再修改设计方案。
但是呢,有些业务场景是可以接受主从稍微延迟一点的,但是这个习惯还是要有吧。
写完操作数据库的代码,想下是否存在主从延迟问题。

使用缓存的时候,考虑缓存跟DB的一致性,还有(缓存穿透、缓存雪崩和缓存击穿)

通俗点说,我们使用缓存就是为了「查得快,接口耗时小」。但是呢,用到缓存,就需要「注意缓存与数据库的一致性」问题了。同时还需要规避缓存穿透、缓存雪崩和缓存击穿三大问题。

缓存雪崩:是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至宕机。
缓存穿透:指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,
查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。
缓存击穿:指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db。

文章来源地址https://www.toymoban.com/news/detail-833693.html

到了这里,关于关于一些代码习惯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【经验】STM32的一些细节

    这两天 碰到的奇葩问题是 STM32定时器同步的问题。 我的设计本意是:使用定时器T3以100us的周期来定时发送命令给 FPGA。由于编码器出结果的最长时间为51us。因此,希望PWM中断要滞后于T3 约60us 。 调试过程:分别在T3和PWM中断中置IO1, IO2. 观察波形,发现IO1和IO2的周期都对,但

    2024年02月20日
    浏览(40)
  • 前端学习路线图和一些经验

    关于前端目前个人建议的一个路线,也是自己之前前端学习时候的一个大致路线,给想要学习前端的小白一个参考, 以前自己刚开始接触前端的时候就是不知道该按照什么路线学习 eg-前端是做什么的? 就是开发网站,移动端,小程序之类的页面  调调接口完成页面的渲染 个人比

    2024年01月19日
    浏览(51)
  • 杂谈项——关于我在bw上的见闻,以及个人对二次元游戏行业方面的前瞻

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,今天为大家带来一点不一样的,首先先光速叠一下甲: 在此说明博主并不是一个什么都知道的大佬,只是一个普通的老二次元以及期望以后能进入游戏行业的小白,这篇博客主要是我个人的

    2024年02月15日
    浏览(31)
  • 低代码技术杂谈

    “Low-Code”是什么?身为技术人员听到这种技术名词,咱们第一反应就是翻看维基百科 或者其他相关技术论文,咱们想看维基百科的英文介绍: A low-code development platform (LCDP) provides a development environment used to create application software through a graphical user interface inste

    2024年01月23日
    浏览(36)
  • automa插件使用的一些实战经验2

    automa的工程还是要经常导出备份,因为经常出现突然模块消失的情况。 1 滑动分页条件区分 传统的页面都是有分页标签,这样你很容易知道,应该用分页来做。但是现在手机端的应用基本都是上滑就可以分页,再混合式开发的环境下,公司为了节省成本,大部分都可以实现一

    2024年02月02日
    浏览(154)
  • Unity地形动态生成的一些经验记录

            正经人谁写日记啊                                                 --汪涵         我以前也一直认为一个正经忙碌的人哪有时间和精力去写日记呢?         但是我错了,正因为忙绿没有精力,才要将重要的事情记录下来.         我记录的

    2024年02月09日
    浏览(38)
  • 提高代码封装性的好习惯:Java中的get和set方法

    在Java中,get和set方法是用于访问对象的私有属性的一种常见方法。通常情况下,属性被声明为私有的,以防止其他类直接访问该属性,而是通过get和set方法来访问。本篇博客将介绍Java中的get和set方法,它们的作用以及如何使用它们。 get方法用于获取对象的私有属性值,并返

    2024年02月03日
    浏览(41)
  • 使用K8s的一些经验和体会

    Java应用程序的奇怪案例 ​在微服务和容器化方面,工程师倾向于避免使用 Java,这主要是由于 Java 臭名昭著的内存管理。但是,现在情况发生了改变,过去几年来 Java 的容器兼容性得到了改善。毕竟,大量的系统(例如Apache Kafka和Elasticsearch)在 Java 上运行。 ​回顾 2017-18 年

    2024年02月12日
    浏览(35)
  • 单片机IAP升级的一些问题与经验

    前阵子做项目时需要IAP升级,遇到了很多问题,我在此总结一下,避免后面再次踩到同样的坑。这个过程还是有些学问的,有时往往理论正确但是实践起来却遇到各种bug,需要好好研究,特别是对应单片机型号不同,也有很多地方需要修改。 本人使用的芯片型号是AT32F413CB,

    2024年02月03日
    浏览(41)
  • 一些实用Android的开源库,阿里架构师经验分享

    试想这么一个场景,在 A 页面打开 B 页面,然后 B 页面打开了 C 页面,C 页面又打开了 D 页面,而且还需要传递参数,在 D 页面修改了一些信息,然后这些信息更新之后,A、B、C 页面很可能都需要对应的进行数据更新,碰到这种需求该怎么处理? 有人说用 startActivityForResult

    2024年04月10日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包