我总结了写出高质量代码的12条建议

前言

工作这么多年,见过许许多多的代码,有的写的好,有的写的很糟糕。好的代码不外乎要做到你的代码可阅读、可维护、可扩展。说难不难,说简单也不简单,那么本文我将总结工作这么多年该如何写出整洁代码的一些实践。

欢迎关注个人公众号【JAVA旭阳】交流学习

1.使用清晰且有意义的命名

干净代码最重要的原则之一是使用清晰且有意义的命名。这使其他开发人员可以轻松理解您的代码在做什么,并减少出现错误的可能性。例如,不使用名为“d”的变量来表示距离,而是使用名为“distance”的变量。

// Bad
int d = getDistance();

// Good
int distance = getDistance();

2.使用合适的数据类型或者数据结构

干净代码的另一个重要原则是使用适当的数据类型, 这可确保您的代码能够正常工作并减少出现错误的可能性。例如,不使用字符串来表示年龄,而是使用整数。

// Bad
String age = "25";

// Good
int age = 25;

3.保持方法简短且重点突出

干净的代码还与保持方法简短和重点突出有关,一个方法应该只做一件事并且应该易于理解,这使得测试和维护代码变得更加容易。例如,与其将处理订单的所有代码放在一个方法中,不如将其分解为更小的方法来进行验证、计算和保存。

// Bad
public void processOrder(Order order) {
    // lots of code
    }

    // Good
    public void processOrder(Order order) {
        validateOrder(order);
        calculateTotal(order);
        saveOrder(order);
    }

4.撰写清晰且有意义的注释

干净代码的另一个重要原则是编写清晰且有意义的注释。注释应该解释这段代码做的事情的原因,而不是它是如何做的。这使其他开发人员更容易理解您的代码。

// Bad, 只说明是递增
// increments count 
count++;

// Good,说明业务需要每次加1
// Increment the count by 1
count++;

5.使用空格和缩进提高可读性

干净的代码还意味着使其易于阅读,使用空格和缩进来提高代码的可读性。这使其他开发人员更容易理解您的代码在做什么。

// Bad
if(a==b){c=d;}

// Good
if (a == b) {
    c = d;
}

6.以正确的方式使用异常处理

干净的代码要求 以正确的方式处理异常。您应该只捕获您可以处理的异常,并以特定的方式处理它们,避免包罗万象的异常处理程序。

// Bad
try {
    // some code
} catch (Exception e) {
    // handle exception
}

// Good
try {
    // some code
} catch (IllegalArgumentException e) {
    // handle specific exception
} catch (Exception e) {
    // handle general exception
}

7.使用封装来隐藏实现细节

封装是一种有助于隐藏类的实现细节并使其更加灵活和可扩展的技术。通过使用封装,您可以更改类的实现而不影响其余代码。

// Bad
public class BankAccount {
    public double balance;
    // other methods
}

// Good
public class BankAccount {
    private double balance;
    // other methods
}

8.使用继承和多态来编写可重用的代码

继承和多态性是面向对象编程的强大功能,可让您编写可重用的代码。通过使用继承,您可以创建一个包含公共代码的基类,然后创建继承该代码的子类。通过使用多态性,您可以编写以通用方式处理不同类对象的代码。

// Bad
public class Square {
    // code specific to squares
}

public class Circle {
    // code specific to circles
}

// Good
public class Shape {
    // common code for all shapes
}

public class Square extends Shape {
    // code specific to squares
}

public class Circle extends Shape {
    // code specific to circles
}

9.使用设计模式解决常见问题

通过使用设计模式,您可以编写易于理解、维护和扩展的代码。例如,策略模式是一种设计模式,可让您编写灵活且易于扩展的代码。

// Bad
public class OrderProcessor {
    public void processOrder(Order order) {
        // lots of code
    }
}

// Good
public class OrderProcessor {
    public void processOrder(Order order) {
        OrderStrategy strategy = new OrderStrategy(order);
        strategy.process();
    }
}

10.使用单元测试确保代码按预期工作

干净的代码也与测试有关。通过编写单元测试,您可以确保您的代码按预期工作并且易于维护。单元测试是测试单个代码单元的自动化测试。

public class BankAccountTest {
    @Test
    public void testDeposit() {
        BankAccount account = new BankAccount();
        account.deposit(100);
        assertEquals(100, account.getBalance());
    }
}

11.使用代码审查来提高代码质量

干净的代码也与协作有关。通过使用代码审查、结对编程和指导,您可以提高代码质量并使其更易于理解和维护。

12.使用工具来提高代码质量

开发工具安装 checkstyle 这样的代码格式化工具来检查代码,同样,sonarQube 也可以帮助检查代码中的问题。

总结

总而言之,代码不是写给自己看的,而是写给别人看的。你得想办法让你的代码能让别人容易看的懂、容易维护、能够很好的扩展,那么你才是一个合格的程序员,本文介绍了一些最佳实践和示例,希望对你有帮助。

欢迎关注个人公众号【JAVA旭阳】交流学习

本文来自博客园,作者:JAVA旭阳,转载请注明原文链接:http://www.cnblogs.com/alvinscript/p/17066696.html

本文转载于网络 如有侵权请联系删除

相关文章

  • 手动实现一个简易版 Tomcat

    Tomcat简介Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat5支持最新的Servlet2.4和JSP2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。 手动实现项目结构如下图所示接下来我们就开始一步步实现,有servlet开发经验的对于Request和Response一定不陌生,所以就先实现自己的Request和Response。首先实现Response如下所示。 接着来实现自己的Reponse,如下图所示。 有了自己的请求信息和响应信息,那接下来就要写servlet了。通常写自己的Servlet的时候要继承一个Servlet的父类HttpServlet,所以首先要写一个Servlet的父类,代码如下。  那么接下来就要写自己业务相关的Servle

  • 如何使用RemotePotato0从普通用户提升至域管理员

    关于RemotePotato0RemotePotato0是一款功能强大的Windows提权工具,本质上来说RemotePotato0是一个漏洞利用工具,可以帮助广大研究人员在Windows系统上,从一个普通用户提权至域管理员权限。RemotePotato0可以利用DCOM激活服务,并触发针对当前登录到目标计算机的任何用户的NTLM身份验证。与此同时,该工具还需要在相同设备上已经有特权用户登录了(比如说,域管理员用户)。一旦触发NTLMtype1,RemotePotato0将设置一个跨协议中继服务器,该服务器将负责接收特权type1消息,并通过解包RPC协议和HTTP打包身份验证,然后将其中继到第三个资源。在接收端,你可以设置另一个中继节点(如ntlmrelayx)或直接中继到特权资源。除此之外,RemotePotato0还允许抓取和窃取登录到目标设备上的每个用户的NTLMv2哈希。源码获取广大研究人员可以使用下列命令将该项目源码克隆至本地:gitclonehttps://github.com/antonioCoco/RemotePotato0.git复制使用场景攻击设备(10.0.0.

  • 心跳在分布式系统中多重要?谈一谈 DataNode 如何向 NameNode 发送心跳的

    一、分布式系统中的心跳技术心跳是分布式技术中常用的技术手段。心跳,顾名思义,就是以固定的频率向其他节点汇报当前节点状态的方式。收到心跳,一般可以认为发送心跳的这个节点在当前的网络拓扑中是良好的。当然,心跳汇报时,一般也会携带一些附加的状态、元数据信息、当前节点的信息,以便其他节点管理。心跳有两种方式:单向的heartbeat;交互的ping-pong;第一种方式下,target进程需要定时给detector发送消息,告知自己的存活性。而detector无需给target回复任何消息,只是每隔一段时间去检测target进程有没有汇报。第二种方式更为常见,比如我们的redis就是采用这种方式:detector->target:Areyouok? target->detector:Yeah,prettygood. 复制Detector发起检测,如果target连续N次不回复消息,那么detector就认为其处于non-active状态。那么常用的心跳检测机制有哪些:(1)传统的周期检测心跳机制其检测方法很粗暴:设定一个超时时间T,只要在T之内没有收到对方的心跳包便可认为对方宕机,

  • 读者问:学完SSM,该学什么呢?

    这是三歪的第390篇原创文章在之前,我写过一篇《如何入门Java的文章》,无论是看公众号还是各大的博客的同学大多数都是比较认可我所讲的路线的。那篇文章讲述了从零入门Java的路线是怎么走的,应该学习什么技术栈,什么知识点,学习的时候可能要注意些什么。那边文章的末尾是到SSM/SpringBoot就结束了,我也认为对Java后端入门大概得了解到的知识。我的读者们也长大了,最近不少的同学在群里边问:学完SSM/SpringBoot了,该下来该学什么技术。于是,我知道我该来讲讲我的看法了。每个人的学习路线都不一样,如果是你,你会给出什么样的建议呢?不妨在评论区下留言。路线学完SpringBoot/SSM了,那我就默认这些同学都对Java后端其实有一定的了解了。假设你还没做过一个项目,那这时候你应该去做一个项目来巩固一下自己所学到的知识,最好自己从零开始做一个自己喜欢的东西(可以是博客、可以是爬虫、可以是...)可能这时候的你可能觉得自己还有一堆不懂的技术,还不足以支撑去从零写一个项目。“我还不会Linux,我知道现在的项目都部署在Linux上,但我还不会。”“我的项目里希望有注册登录的功能,

  • Kubernetes 零宕机滚动更新

    以下文章来源于k8s技术圈,作者阳明软件世界的发展比以往任何时候都快,为了保持竞争力需要尽快推出新的软件版本,而又不影响在线的用户。许多企业已将工作负载迁移到了Kubernetes集群,Kubernetes集群本身就考虑到了一些生产环境的实践,但是要让Kubernetes实现真正的零停机不中断或丢失请求,我们还需要做一些额外的操作才行。 滚动更新默认情况下,Kubernetes的Deployment是具有滚动更新的策略来进行Pod更新的,该策略可以在任何时间点更新应用的时候保证某些实例依然可以正常运行来防止应用down掉,当新部署的Pod启动并可以处理流量之后,才会去杀掉旧的Pod。在使用过程中我们还可以指定Kubernetes在更新期间如何处理多个副本的切换方式,比如我们有一个3副本的应用,在更新的过程中是否应该立即创建这3个新的Pod并等待他们全部启动,或者杀掉一个之外的所有旧的Pod,或者还是要一个一个的Pod进行替换?下面示例是使用默认的滚动更新升级策略的一个Deployment定义,在更新过程中最多可以有一个超过副本数的容器(maxSurge),并且在更新过程中没有不可用的容

  • Kafka,ZK集群开发或部署环境搭建及实验

    本文属于原创,转载注明出处,欢迎关注微信小程序小白AI博客微信公众号小白AI或者网站https://xiaobaiai.net或者我的CSDNhttp://blog.csdn.net/freeape1前言Kafka其他特点这里就不罗嗦了,本篇主要是集群开发环境的搭建。具体Kafka相关介绍内容和周边分析可以见另一篇文章《Kafka及周边深度了解》。Kafka是依赖Zookeeper的,单机单服务也需要。ApackeKafka维护团队开始讨论去除Zookeeper了(2019年11月6日),目前,Kafka使用ZooKeeper来存储分区和代理的元数据,并选择一个Broker作为Kafka控制器,而希望通过删除对ZooKeeper的依赖,将使Kafka能够以一种更具伸缩性和健壮性的方式管理元数据,实现对更多分区的支持,它还将简化Kafka的部署和配置。但是目前我们还是需要Zookeeper。Zookeeper是由Java编写的,所以需要先安装JDK。本篇文章主要实现以下内容:单机单KafkaBroker和单Zookeeper(默认安装好后启动ZK和Kafka就是了)单机KafkaBrok

  • 小公司作死四法

    小公司需要的是适合自己现阶段发展所需的管理模式,而不是千篇一律照搬大企业的管理模式。小公司虽小,但是“麻雀虽小,五脏俱全”,各种组织架构全有。而且,小公司很容易就犯大企业病,这是一个非常普遍的现象! 1/不赚钱的员工太多公司经营的最核心目的就是为了获取利益,保障公司的正常经营和长远发展;如果一个公司始终是亏损,或者不赚钱,那就与公司成立的初衷偏离了。公司员工分成两大类:赚钱的员工和不赚钱的员工。赚钱的员工主要是指我们的营销人员和研发人员,他们属于具体职能部门,为公司创造直接的效益(尤其是营销人员)。不赚钱的员工主要是指我们的平台人员,包括行政、人事、财务、后勤等,他们为“前线士兵”保驾护航,提供后勤保障支持,他们属于成本开支的部分。每个公司都需要有这两种类型的员工,但是这两种类型的员工必须保持在一个比较合理的比例水平上。尤其是:公司必须保证赚钱的员工比例高于不赚钱的员工,否则公司就是亏损的,就是不赚钱的!我们的很多公司往往在不经意间,就发现自己公司里面,不赚钱的员工越来越多,而赚钱的员工比例越来越低,直至某天发现公司经营入不敷出了!而且,在那种时候,我们的公司老总还会发现两个奇怪的现象

  • 去哪儿网前后端分离实践(含 Node.js 应用实践)

    人只要不失去方向,就不会失去自己。作者|兴百放 编辑|覃云本文是对去哪儿网前端业务方向负责人兴百放在GMTC大会上的演讲整理。前后端分离方案去哪儿网主要有三种前后端的分离方案。第一种是项目分离,承载页面分离。他的特点是简单,快速,前端只关注浏览器方面,除浏览器端之外都是后端负责。当然缺点是沟通成本高,前期,前端需要使用ng或者代理工具调试,后期,还要把页面给到后端,并且新建一个对应的路由。这样来来回回,调试非常的复杂,一旦前后端同学涉及到跨部门,跨楼层合作,这些成本又会相应的增加。第二种方式还是项目分离,只是后端的页面,放到了前端项目里,后端只需要配置路由,最终上线时,由发布系统负责把前端中的页面,自动同步到后端相应的目录中。其中相应的目录需要前后端提前约定,不然后端在渲染页面的时候,就会找不到相应的文件。相比第一种方案,稍微有点进步。沟通成本会有一定的降低。不过如果需要在页面里做一些业务逻辑处理,还需要前端同学掌握和学习velocity语法,对于新同学而言看似掌握的了一门新语法,但实际操作起来并非想象中的流畅。另外考虑使用ReactSSR做页面同构直出,这个方案还有一定的难度。第三种

  • Nexus私服搭建使用及发布jar包到私服上供团队其他成员使用

    1.下载maven解压到指定目录,并配置环境变量M2_HOME为maven解压目录2.path中增加%M2_HOME%\bin,并确认mvn-v正确3.下载nexus http://www.sonatype.org/nexus/archived/ 解压到指定目录4.根据部署系统,执行D:\soft\nexus-2.12.0-01-bundle\nexus-2.12.0-01\bin\jsw\windows-x86-64\console-nexus.bat 【我用的是win764位】5.确认http://localhost:8081/nexus/能正常访问6.用admin/admin123登录(为了安全,请及时修改密码)7.打开 repositories并选中central下configuration选项卡,设置DownloadRemoteIndexes为true并保存8.选中 central并右键,点击repairindex(过段时间在browseindex中查看)9.根据需要就可以选中3rdparty下的artifactupload上传私有的jar包了,完毕可以看到对应的artifa

  • Spring MVC绑定 List 对象参数 原

        最近做的一个小小的项目碰上了如何用post传递一整个list的问题,在解决这个问题的同时,也顺带升级一下Spring的版本,并精简一下代码,不过对新的用法没有时间去做太多的探索。    最近也在看SpringBoot,但是部分配置还没来理解,暂时还没办法用到工程里面来。不多说,一点一点挤牙膏吧。项目已放到Github:https://github.com/gaussic/SpringDemo-List转载请注明出处:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 。一、开发环境IntelliJIDEA2016.1.2JDK1.8.0_92Tomcat8.0.35Maven3.0.5Spring4.2.6.RELEASEHibernate5.1.0.FinalSpringDataJPA1.10.1.RELEASE二、配置项目具体的创建步骤不多说了。贴出pom.xml:<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/

  • 要你命三千:老代码中的那些坑 define STRHASSBUSTR(str,subStr) ...

    最近在给以前的老项目维护,说起来工作很简单,一个字:改Bug。这看起来平淡无常的工作,实际上凶险无比,藏坑无数。时至今日,感觉整个人都得到了升华。在睡觉前抽空写篇博客,和各位分享一下踩坑经历,一起品味其中的种种酸苦辣(没甜)。为保证个码隐私,文中代码均为化名,还望谅解。如有雷同,纯属巧合(可以通过gitblame查看是谁写的)。第一回:变量命名没点数,有时写着还手误如果要折磨一个强迫症,最好的方法就是用各种恶心的变量名恶心死他。什么?你说首字母要大写?@property(nonatomic,assign)PERSONTYPEpersonType; 什么?你说单词里面要小写?typedefenumtagPersonType { person_type=1, group_type, }PERSONTYPE; 什么?你说要用英文单词命名?(void)uploadSeccess:(MessageEntity*)message; 什么?你说类前面要加前缀避免冲突?@interfacePMWLogger:NSObject ... @interfacePMTool:NSObject ... @int

  • ☞2018政府数据要开放?先看看现在长啥样【真相】

    被堵成狗的种子君在国庆回来上班第一天就听说,发改委表示2018年将建成政府数据统一开放门户。听到这个消息,种子君不禁心中窃喜,脑补如下画面: 政府数据公开--拿到各省交通数据--提前预测各地交通流量--规划行驶路线--一路畅通,告别拥堵。 靠数据吃饭的种子君决定马上去扒一扒目前各省政府数据公开程度如何。需要说明的是,本次排查只针对各省级行政区,不包括国家及各省统计局信息。 经排查,种子君在中国大陆的各个省级行政区政府官网上扑街25次,只找到了北京、上海、山东、浙江、江西、湖南六个政府数据开放平台。看完六家风格各异的政府数据资源网站,种子君隐约感觉到数据开放之路上充满艰难险阻。 北京:数据不够,地址来凑 北京市政务数据资源网为独立网站,数据资源类型多样,涵盖旅游、交通、餐饮、医疗、娱乐、消费、生活安全等多个方面。 但当种子君满怀期待进入各个子类时,发现可利用的数据少之又少,琳琅满目的超市地址、客运站地址等各类地址信息和简单的交通线路介绍伤透了我的心。不提供进一步信息不说,数据上传时间也多为2012年至2014年,其中文字类文件占多数。 上海:连公厕都有应用 上海市政府数据服务网是独立于上

  • 中美互联网内容产业发展与版权制度演变

    腾讯主要创始人 陈一丹     技术发展不断改变人们的消费结构。互联网的迅猛发展,也改变了人们对内容的消费模式和习惯,使得数字内容产业迅猛发展起来。在中国,2016年,包括文学、音乐、视频、广告、游戏、直播等在内的数字内容产业市场规模为3820亿元。随着用户付费意愿的增强和付费习惯的养成,中国数字内容产业未来还将有巨大的增长潜力和发展空间。在美国,2016年,包括电子出版、数字音乐、视频点播、视频游戏、在线广告等在内的数字内容产业市场规模则高达2200亿美元。   如今,内容产业主要呈现出以下三大发展趋势。  1.内容生产模式发生重大转移   互联网商业和数字内容产业二十多年的发展给内容产业带来的最直观的影响是,内容生产模式的重大转移。这体现在两个方面。 一是内容协同生产和UGC内容生产。网络、终端设备的发展和普及极大增进了个人参与内容生产的能力,互联网赋能于个人的作用和价值在数字内容的生产上体现得淋漓尽致。如前所述,互联网的发展经历了从中心到去中心、从集中化到分散化、从单向度到多向度的一个过程,在这个过程中,广大网民参与内容生产、分享的能力和程度不断加深,从最初的BBS到后来的博客、

  • 腾讯云腾讯问卷产品功能

    腾讯问卷提供一站式问卷调查功能和服务,部分功能正在开发中,即将上线。 功能模块 功能 功能描述 用户登录 登录系统 用户可用手机号验证后自动创建腾讯问卷账户;也可以直接用QQ、微信、企业微信、腾讯云账号登录系统,支持退出登录,其中企业微信登录需要所在企业先添加问卷应用。 用户信息管理 个人主页信息支持管理和修改个人基本信息,包括设置个人简介、手机、QQ、微信、腾讯云绑定。 消息查看支持查看消息,包括系统消息、协作消息、权限消息;支持设置消息全部已读。 问卷创建 文本编辑问卷可以将编辑好的问卷文本按照系统格式快速导入,也可以在文本编辑模式下可视化快速编辑问卷内容。 选择问卷模板提供按场景、行业分类的专业标准化研究模板,可以直接使用模板快速创建问卷。 创建空白问卷从一份空白问卷开始创建,根据需要自主编辑创建。 通过Excel导入可以将Excel数据按照系统格式快速导入,系统将自动生成相应问卷 问卷编辑 问卷标题及引导语问卷标题和引导文字可以加粗,支持插入超链接。 题型编辑提供单选题、下拉题、多选题、单行文本题、多行文本题、量表题、矩阵单选题、矩阵多选题、矩阵量

  • Git 简易手册

    这里就不介绍git了,表一看到命令行就怕怕,常用的命令也就这些,基本满足99%以上的项目需求,非常实用。 常用git命令 gitclone[] 从远程库clone代码到本地,directory用于指定一个新目录名 gitstatus 检查本地状态,可以查看当前所在分支、新增或被修改的文件 gitcheckout 还原某文件所作的修改,也可以"gitcheckout."还原所有修改 gitadd 添加文件到缓存,并追踪新的文件。也可以"gitadd."添加所有文件到缓存 gitcommit-m"commitmessage" 提交代码到本地代码库,非常推荐做完一个小功能就commit一次,多次commit替代一次大commit,也便于后续代码合并和review。 gitpush 同步本地库代码到远程库。(后面会专门提代码合并) gitbranch 列出可用分支,gitbranch-a列出本地和远程库所有分支 gitcheckout 切换分支 gitlog[-] 查看本地commit记录,number可用限制log显示条数 gitdiff[] 比较当前文件和暂存区文件差异 gitpull

  • 这是个神奇的博客

    考试链接: https://exam.nowcoder.com/cts/17088280/summary?id=9AFF58709BAD4FF7

  • 洛谷 UVA11021 Tribles

    UVA11021Tribles 题意翻译 题目大意 一开始有kk种生物,这种生物只能活1天,死的时候有p_ipi​的概率产生ii只这种生物(也只能活一天),询问m天内所有生物都死的概率(包括m天前死亡的情况) 输入格式 第一行输入一个整数TT,表示数据总数 每一组先输入三个整数n(1<=n<=1000),k(0<=k<=1000),m(0<=m<=1000)n(1<=n<=1000),k(0<=k<=1000),m(0<=m<=1000) 然后输入n个整数,分别为p_0p0​到p_{n-1}pn−1​ 输出格式 对于每一组数据,先输出"Case#x:"再输出答案,精度要求在1e-6以内 感谢@xMinh提供翻译 题目描述 PDF 输入格式 输出格式 输入输出样例 输入#1复制 4 311 0.33 0.34 0.33 312 0.33 0.34 0.33 312 0.5 0.0 0.5 422 0.5 0.0 0.0 0.5复制 输出#1复制 Case#1:0.3300000 Case#2

  • github网站进入

    修改host文件 #update:20220222 #GithubHosts #domain:github.com 140.82.113.4github.com 140.82.114.9nodeload.github.com 140.82.112.5api.github.com 140.82.112.10codeload.github.com 185.199.108.133raw.github.com 185.199.108.153training.github.com 185.199.108.153assets-cdn.github.com 185.199.108.153documentcloud.github.com 140.82.114.17help.github.com #domain:githubstatus.com 185.199.108.153githubstatus.com #domain:fastly.net 199.232.69.194github.global.ssl.fastly.net #domain:githubusercontent.com 185

  • 队列和优先队列

    C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。1.back()返回一个引用,指向最后一个元素2.empty()如果队列空则返回真3.front()返回第一个元素4.pop()删除第一个元素5.push()在末尾加入一个元素6.size()返回队列中元素的个数 #include<iostream> #include<cstdio> #include<cstring> #include<stack> #include<queue> #include<algorithm> constintmaxn=1007; constintINF=0x3f3f3f3f; usingnamespacestd; intmain() { queue<int>Q; Q.push(1); Q.push(5); printf("%d\n",Q.front()); return0; }复制 C++PriorityQueues(优先队列)C++优先队列类似队列,但是在这个数据结构中的元素按照一定的断言排

  • [经典算法]基数排序

    概述:基数排序是一种高效的线性排序算法。其方法是将数据按位分开,并从数据的最低有效位到最高有效位进行比较,依次排序,从而得到有序数据集合。例子:用基数排序对十进制数据{15,12,49,16,36,40}进行排序。在对个位数排序之后=>{40,12,15,16,36,49};在对十位数排序之后=>{12,15,16,36,40,49};有一点非常重要,在对每一位数值进行排序时其排序过程必须是稳定的。 程序代码:#include<gtest/gtest.h> #include<algorithm> usingnamespacestd; voidRxSort(int*data,intsize,intp,intk) { int*counts=newint[k]; int*sorted=newint[size]; for(intn=0;n<p;n++) { memset(counts,0,sizeof(int)*k); intqval=(int)pow((double)k,(double)n); //计数排序 for(inti=0;i&

  • 定时任务与分布式调度

    一、定时任务 1、cron表达式 语法:秒分时日月周年(年Spring不支持) http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html 特殊字符: ​ ,:枚举; ​ (cron="7,9,23****?"):任意时刻的7,9,23秒启动这个任务; ​ -:范围: ​ (cron="7-20****?"):任意时刻的7-20秒之间,每秒启动一次 ​ *:任意; ​ 指定位置的任意时刻都可以 ​ /:步长; ​ (cron="7/5****?"):第7秒启动,每5秒一次; ​ (cron="*/5****?"):任意秒启动,每5秒一次; ​ ?:(出现在日和周几的位置):为了防止日和周冲突,在周和日上如果要写通配符使 用? ​ (cron="***1*?"):每月的1号,启动这个任务; ​ L:(出现在日和周的位置)”,last:最后一个 ​ (cron="***?*3L"):每月的最后一个周二 ​ W: ​ WorkDay:工作日 ​

相关推荐

推荐阅读