首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进阶优质代码的捷径

分离 这里的分离是指关注点分离,也就是我们常说的单一职责. 也就是一个类,只有一个引起它变化的原因....这一原则即可以应用到代码解耦上,也可以应用于业务拆分 以下面告警系统中节选代码为例 反例: 整个类中既要处理既要处理告警的类型逻辑,又有告警的发送逻辑 public class AlertSystem...抽象 抽象是指关心的是能做什么,而不关心怎么做. 常用的抽象方式就是接口....例如,现在业务上需要使用异步消息中间件,那我们就可以抽象出来一个接口,调用方只需关心这个接口就行了,而不用关心具体是用kafka或者RocketMq实现的....~~ 其实这三种非常实用的原则,在spring也是有体现的 分离: controller, service, dao 抽象: service接口, mapper 注入: @Autowire, @Resource

23220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    优质牛肋骨

    枚举从最高位开始,之后枚举每一位的数,直到达到指定位数为止。 枚举每一位后,需要判断当前位的数和高位数的组合数是否为质数,只有如此才能满足条件。...举例说明对于 7331 的枚举过程: 第一位为 7,是质数,枚举下一位; 第二位为 3,和高位数组合为 73 是质数,枚举下一位; 第三位为 3,和高位数组合为 733 是质数,枚举下一位; 第四位为...由上述例子可知,最高位必定取值为 \set{ 2, 3, 5, 7 },且后续添加的数不能为偶数(从 1 枚举到 9 后续再判断也可以)。...因此,递归的每一层,枚举剩余位从 0 开始枚举到 9 与高位数组合判断。 若组合数为质数,则递归到下一层,否则跳过。 最终满足的组合数直接输出即可。.../ i; i ++){ if(x % i == 0) return 0; } return 1; } int sum(int u, int x){ // 求高位数的和

    96520

    「优质题解」出圈

    这道题的地址,想尝试的小伙伴可以来试哦: https://www.dotcpp.com/oj/problem1160.html 思路: 解题思路:(原:1047: C语言程序设计教程(第三版)课后习题10.5...)在1047的 的基础上,把报数的数m改为自己输入,同时改为多组测试数据,并且输出带换行符; 思路一:(公式法) 思路二(循环链表法) 1:创建长度为n的循环链表(单链表的最后一个结点与首结点连接...,不是头结点); 2:链表结点包括编号和next指针; 3:从首结点p开始报数(p=p->next),但是只报数到离开的结点的前一个结点,然后删除它后面的结点,更新报数的第一个结 点...了,因为删除过程中,头结点的next被删除的话,头结点next指向不安全地方,就不要用它了; 以上就是链表的实现过程,要挑战自己可以弄一个单链表实现的,再厉害一点可以顺序表,但顺序表不推荐, 1....顺序表删除要移动大量元素 2.报数到最后一个之后,返回第一个的实现过程复杂,需要用下标关系,很容易晕; 注意事项: 每个结点删除后都要free了,输出留下来的那个人之后也要把它的free了,

    57920

    「优质题解」DNA

    这道题的地址,想尝试的小伙伴可以来试哦: https://www.dotcpp.com/oj/problem1115.html 思路: (这里A,B就是题目中的a,b); 1.总的思路,把整个DNA的输出变成得到每一行...,然后输出; 2.首先得到DNA的第一行,用字符数组记录; 3.第一行DNA的宽度就是A,即字符数组的有效长度为A,且第一行DNA的型式都是第一个字符和最后一个字符都是'X' 中间的为空格; 4.交换X...的输出变成每一行的输出; 7.输出第一行,交换后; 8.再次递归处理,直到输出所有行; 9.每组DNA输出的行数等于A*B-(B-1);(即DNA的行数,也就是递归的次数,题目例子中如上图输出4组,就是...X和它前面的空格交换; 2.交换时,必须先记录第一个位置(p)的X,和最后一个位置(q)的X; 3.然后让(p)位置的X,等于它后面的空格,让(q)位置的X等于它前面的空格; 4.然后再把前面记录的X,...放到它们各自交换了的空格上; if(p==A-1&&q==0) 这句代码,表示交换了一个来回了,需要重置p,q; 交换实现代码: 这样交换是因为:当交换到图中,绿色标记的X的位置时,会导致,它前后的交换不正确

    59520

    开发常用的优质开源项目

    接口管理工具 YApi 官网:https://github.com/YMFE/yapi YApi是由去哪网前端团队开源的一款接口管理工具,功能强大,可以轻松的自己部署。...部署可以参考这篇文章:https://www.jianshu.com/p/a97d2efb23c5 Rap2 官网:https://github.com/thx/rap2-delos Rap2是由阿里妈妈前端团队开源的一款接口管理工具...Eolinker 官方网站 开源地址 较推荐的版本1.0版 较纯净 文档管理 ShowDoc ShowDoc就是一个非常适合IT团队的在线文档分享工具,它可以加快团队之间沟通的效率。...没有在线调试接口的功能 官网:https://www.showdoc.cc/help?...github.com/star7th/showdoc Git代码管理 Gitea Vue.js UI组件库 iView 即时通讯框架 t-io:百万级即时通讯框架 iNotify.js:JavaScript 实现的浏览器系统通知

    57310

    「优质题解」台球碰撞

    这道题的地址,想尝试的小伙伴可以来试哦: https://www.dotcpp.com/oj/problem1075.html 思路: 这个问题涉及到球在二维平面内的受边界限制的斜向运动,在写程序之前有几个问题要考虑...:   a.我们最终所求的是球心坐标,而球与球桌碰撞时实际上是球的边界与球桌边界发生碰撞,并不是球心发生的碰撞,因此在研究这个问题时为了简化模型,可以将球转化为球心质点,并建立新的坐标系来研究球心的运动...我们以原坐标系的点(R,R)作为新坐标系的原点(0,0)建立新坐标系,这样新坐标系中球心运动范围的长l和宽w都会相对于原先的L,W分别减小2R,如图所示:   b.现在我们在二维平面内的新坐标系下研究球心质点的运动...由于题目给出的角度a是任意的,球可能是向任意方向运动的,因此这里我们利用三角函数将球的运动分解为水平方向和竖直方向,可以看出在整个运动过程中球在水平和竖直方向上的运动速率(这里不指带有方向的速度,速度的方向可能在在碰撞后掉头...而数轴上质点的移动范围只有10,我们注意到如果质点发生10x2=20的位移,那么质点将会回到初始位置,因此在某个方向上边界范围的两倍实际上是一个运动周期,发生 24 的位移也就是发生 4 的位移。

    76740

    优质代码的十条建议

    优质代码的十条建议 1.- DRY: Don’t repeat yourself. DRY 是一个最简单的法则,也是最容易被理解的。...它意 味着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并且改变现有的地方的代码让他们以一些 合适的参数调用这个新的方法。....- 良好的命名规范 使用不错的统一的命名规范可以让你的程序变得更容易阅读和维护,当一个类,一个函数,一个变量的名字达到了那种可以“望文生义”的境界话,我们就可以少一些文档,少一些沟通。....- 创建大量的单元测试 单元测试是最接近BUG的地方,也是修改BUG成本最低的地方,同样也是决定整个软件质量好坏的成败的地方。....- 经常重构你的代码 软件开发是一种持续的发现的过程,从而让你的代码可以跟上最新的实际需求的变化。所以,我们要经常重构自己的代码来跟上这样的变化。

    49510

    如何找到优质房源?

    为了帮助用户根据评分找到优质房源,现在领导要你找出分数(满分10分)在0-5分,5-7分,7-9分,9分及以上分别有多少。...根据分数所在的区间进行分组,以下是一个简单的示意图 image.png 这里会有两个常见的误区: 1)分组就想到用group by,但是在这里是不行的。...因为平时使用groupby分组的字段是我们直接用的字段,而这里的分数并不是我们最终分组的区间字段0-5、5-7这样。...如果直接用分组(group by),就会把相同的分数分为一组,与我们要求的分数段是不相符的。 2)看到条件就想到用where,但是在这里是多条件的情况。...涉及到“多条件判断”的问题,要想到《猴子从零学会SQL》里讲过的条件判断语句case when,完整的用法如下: image.png 翻译过来就是 当字段1 >值1,取新值1 ;当字段1 <值1,取新值

    82500

    垃圾代码和优质代码的区别?

    几个业务场景中的重构示例 请求顺序依赖 在这种场景中,首先还是业务的复杂度决定了代码的复杂度。...首先我们来看一个在前端和node都有可能出现的一个简单的例子: 我们有 A, B, C, D 四个请求获取数据的函数(函数自己实现), C 依赖 B 的结果,D 依赖 ABC 的结果,最终输出 D 的结果...折磨人的 if else 可能存在下面一些问题 过多的嵌套 逻辑处理冗余 没有做好防御编程(错误处理 直接来一个代码例子,这是一个获取背景颜色的方法,但是随着业务的不断变化,背景颜色的来源越来越多,在一些业务人员的处理下可能是这样的...建立明白代码虽然是给计算机运行的,但最终还是人看的。不仅仅是没有 bug 就行了,这样的心智模型。 建立业务与代码质量同等重要的思考模型。避免因为时间导致的不得不这么写的代码。...(写代码的时候,不仅仅正向,反向的判断也需要思考) 合理的拆分成独立的函数。明确输入输出,错误处理等在函数内部的处理。

    50510

    不可错过的优质深度学习课程

    我研究了 Class Central 的开源项目,从中整理出一份深度学习课程清单:其中 27 个在线课程(其中 12 个是完全免费的),课程的内容涵盖深度学习的基础到当今最前沿的研究。 ?...在该课程中,你将从第一步——如何构建一个适合深度学习的在线 GPU 服务器,一直到构建高技术、高度实用的计算机视觉模型,自然语言处理和推荐系统。本课程免费。 精选评论(匿名):“本课程十分棒。...我一次次惊喜的发现,他不仅在课堂上讲解过去一年内问世的成果,甚至一周内的新内容…而且你能使用现实中的数据通过参加 Kaggle 比赛练习。...该课程不同于以往在线课程的形式,但其组织者(包括深度学习领域的杰出人物 Bengio 和 LeCun等)和课程讲师使这个系列成为深度学习的优质课程。该课程免费。 ?...与 Siraj Raval 一起,Udacity 提供了对这领域的系统介绍。通过每周视频,独家项目,以及专家的反馈和审查,使你掌握这个改变未来的技术的基础知识。

    1K100

    如何写出优质干净的代码

    编写干净的代码并不是一件容易的事情,这需要尝试不同的技巧和实践。 作为一名开发者,编写一手干净的代码很重要. 先列举出编写干净代码的一些好处,再提出6个技巧用于编写干净代码,供开发者进行参考学习。...写干净代码的好处 先来了解编写干净代码的一些好处。其中一个主要好处是,干净的代码可以减少花在阅读上的时间和理解代码的时间。凌乱的代码会减慢任何开发人员的速度,使开发者的工作变得更加困难。...另一方面,干净的代码通常就没有这个问题。假设前面的例子是相反的情况,以前的代码是干净和优雅的,那么理解它需要多长时间?...的确,编写和保持干净的代码并不意味着应该忽略任何改进它的机会,我认为应该始终对目前的做法保持可改进的态度,并努力寻找改进的机会。...这个技巧是关于变量、函数和方法的有意义的名称。“有意义的”是什么意思?有意义的名字是描述性足够多的名字,而不仅仅是编写者自己才能够理解的变量、函数或方法。

    76020

    「优质题解」排队买票

    N = K 考虑当 N = K 时的特殊情况,即有 2N 个小孩,其中N个小孩带的钱为1元,另外N个小孩带的钱为2元。...N > K 当 N > K 时,无法直接用卡特兰数求解,这时我们可以换一种思维:无法直接求出合法的排队方式数,那就先求出非法的排队方式数,再用总的排队方式数减去,即得合法的排队方式数: 总的排队方式数:...(M 的全排列)种排队方式。 非法的排队方式数: 我们考虑一下非法的排队方式有什么特征: (1) 前 2P 个小孩组成一个合法的排队,且持有 1 元的小孩和持有 2 元的小孩数量相等,皆为 P。...),使得前 2Q 个小孩构成一非法排队(换言之,如果对于任意的正整数 Q,总有:前 2Q 个小孩构成的队列是合法的,那么这个队列本身也是合法的。)...公式为: 合法的排队方式数: 合法的排队方法数就等于总的方法数减去非法的方法数: 代码实现:

    63210

    写出优质Java代码的4个技巧

    如果对所有代码进行了同样的优化,那么最终结果就是浪费了90%的优化,因为优化过以后的代码运行得频率并不多。因为没有目标而做的优化所耗费的时间,都是在浪费时间。...需要注意的是,在现有瓶颈中花费的时间百分比很可能会增加,因为剩下的瓶颈是暂时不变的,而且随着目标瓶颈的消除,整个执行时间应该会减少。...2、由于是基本数据类型,因此不能调用状态代码上的方法 在第一种情况下只是简单的创建了一个特定的常量来表示特殊的整数值,但并没有对方法或变量进行限制,因此使用的值可能会超出定义的范围。...响应代码,但是由于服务器端也没有限制客户端必须提供有效的整数。...虽然我们必须做的改变的数量是相等的,但变化的性质却是完全不同的。

    54110

    如何挑选优质光模块?

    俗话说得好“一分钱一分货”,要想物有所值,货比三家绝对是优质买家的必经之路!对于光模块的采买如何发挥火眼睛睛的实力?今天就让我们来道一道这里面的精髓!...在长期高温工作下,不断地损耗光器件的寿命,所以拆装的光器件,虽然价格具有非常大的优势,但是在使用中存在着很大的通信隐患,导致信号传输中断,极大的浪费了通信系统的后期维护成本和时间。...PCB的制作从激光成像,高精度的阻抗测试,易天光通信的PCB合作伙伴都沉淀了15~20年的经验,这些细节为产品在应用环境中遮风挡雨。...精密的电路设计,合理的电阻/电容布局才能提升产品性能(有图有真相)。 金手指作为信号的传递使者,由众多金黄色的导电触片组成,易天光通信的金手指镀金要求:0.38um 硬金,具有高强度的抗插拔耐性。...俗话说得好,金碑银碑不如客户的口碑,客户说好才是真的好。易天光通信的客户通过高强度的插拔测试,证明我司光模块的插拔次数能控制在10000次左右,保障产品更持久的使用。

    79140

    最新的10个优质Python开源项目

    来源:Python程序员 ID:pythonbuluo 在过去的一个月中,我们对近250个Python开源项目进行了排名,选出了前十。 我们比较了在此期间有新的发布或是重大发布的项目。...第3名 Som-tsp: 使用自组织地图技术解决旅行中的销售员所遇到的问题 [Github上点赞数:432个] ?...第5名 Icecream(冰淇淋):甜甜的,奶油般柔滑的打印调试 [Github上点赞数:530个] ?...第8名 Unimatrix: 可以模拟电影《黑客帝国》中终端显示的Python脚本。默认使用半角片假名的Unicode字符,但可以使用自定义的字符集 [Github上点赞数:558个] ?...如果你喜欢这种方式,请按照您的编程技巧阅读我们网站上的每日最佳文章。

    71380

    解锁设计优质API的五种秘籍

    目前,几乎所有的软件需求都需要通过API来提供相应的解决方案,其中包括:支付类API、通信类API、以及传输类API等数千种。那么我们该如何设计并构建出一个优质的API呢?...下面,我们将和您深入讨论设计优质API所应当注意的五个方面: 缩短宝贵的时间 将您的文档置于网站的主页 在API中保证抽象的一致性 设计面向未来的API 妥善管理好潜在的变更 1.缩短宝贵的时间...一个优质的API应当能够缩短开发人员的宝贵时间(TtV)。...2.将您的文档视为网站的主页 由于在您的首页上就能获取API的相关文档,因此开发人员可以将其加入浏览器的书签、或放置到显著的位置。...希望上述五种实践“秘籍”,能够帮助您构建属于自己的优质API,并能给开发者带来不俗的体验。

    67810

    6个编写优质干净代码的技巧

    编写干净的代码并不是一件容易的事情,这需要尝试不同的技巧和实践。问题是,在这个问题上有太多的实践和技巧,因此开发人员很难进行选择,所以要把这个问题简化一下。...其中一个主要好处是,干净的代码可以减少花在阅读上的时间和理解代码的时间。凌乱的代码会减慢任何开发人员的速度,使开发者的工作变得更加困难。...的确,编写和保持干净的代码并不意味着应该忽略任何改进它的机会,我认为应该始终对目前的做法保持可改进的态度,并努力寻找改进的机会。...这个技巧是关于变量、函数和方法的有意义的名称。“有意义的”是什么意思?有意义的名字是描述性足够多的名字,而不仅仅是编写者自己才能够理解的变量、函数或方法。...关于编写干净代码的一些想法 今天讨论的这六种做法,可能不是影响最大的,也可能不是最重要的,但这些是经验丰富的开发人员最常提到的,这也就是我选择它们的原因。

    726100
    领券