next

Java 代码性能优化,35个细节,让你提升java代码的运行效率

会有一股神秘感。 提交于 2020-08-14 00:37:01
代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。 代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。 代码优化的目标是 减小代码的体积 提高代码运行的效率 代码优化细节 1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。 此举能够使性能平均提高50% 。 2、尽量重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替

Subscription auto-renewal service rules | 自动订阅服务协议

时光总嘲笑我的痴心妄想 提交于 2020-08-13 21:07:13
Subscription auto-renewal service rules The Rules for Automatic Renewal of Subscription Service (hereinafter referred to as "the Rules") are deemed to be an annex to the Subscription Service Agreement and in the event of a conflict between the Rules and the Subscription Service Agreement, the Rules shall prevail. If you need to use the Application to subscribe to the auto-renewal service, you need to agree to this rule. You understand and agree that. 1. Subscription auto-renewal service (hereinafter referred to as "Subscription") means that, under the premise that you have opened a

Codeforces #662 (Div. 2) A. Rainbow Dash, Fluttershy and Chess Coloring(思维水题)

元气小坏坏 提交于 2020-08-13 20:56:23
A. Rainbow Dash, Fluttershy and Chess Coloring(思维水题) 原题链接: https://codeforces.com/contest/1393/problem/A time limit per test:1 second memory limit per test:256 megabytes input:standard input output:standard output One evening Rainbow Dash and Fluttershy have come up with a game. Since the ponies are friends, they have decided not to compete in the game but to pursue a common goal. The game starts on a square flat grid, which initially has the outline borders built up. Rainbow Dash and Fluttershy have flat square blocks with size 1 × 1 1×1 1 × 1 , Rainbow Dash has an infinite amount of light

116填充每个节点的下一个右侧节点指针

家住魔仙堡 提交于 2020-08-13 19:22:52
class Node: def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None): self.val = val self.left = left self.right = right self.next = next class Solution: # 递归的方法 def connect(self, root: 'Node') -> 'Node': # 当根节点为空的时候直接返回 if not root:return # 存在左儿子,将左儿子的next指向右儿子 if root.left: root.left.next = root.right # 注意这里,如果root.next存在,表示root同城右边还有节点 # 就需要将root的右儿子指向root右边节点的左儿子 if root.next: root.right.next = root.next.left # 注意这里一定要先递归左子树 self.connect(root.left) self.connect(root.right) return root # 迭代的方法 # 过程跟递归很类似。 def connect(self, root: 'Node') -> 'Node': #

AtomicInteger源码解析-Java8

烈酒焚心 提交于 2020-08-13 18:58:16
前言   最近在看JDK源码,发现好多地方都用到了AtomicInteger原子类,所以打算将AtmoicInteger的源码过一遍。   本文将分为两部分,一部分是简单介绍AtmoicInteger的用法,第二部分是AtomicInteger的源码,我在源码中做了比较详细的注释。 简单使用AtomicInteger   下面介绍AtomicInteger的一部分API的使用示例,未列出的api可以在后面的源码中看到用法 package cn.ganlixin; import org.junit.Test; import java.util.concurrent.atomic.AtomicInteger; /** * 描述: * 测试使用AtomicInteger * * @author ganlixin * @create 2020-06-11 */ public class TestAtomicInteger { @Test public void test() { AtomicInteger atomicInteger = new AtomicInteger(); // AtomicInteger ai = new AtomicInteger(10); 赋初始值为10 System.out.println(atomicInteger.get()); // 0 // 修改值

01-初识sketch-sketch优势

冷暖自知 提交于 2020-08-13 18:18:29
个人公众账号: IT入门 一.Sketch简介 Sketch 是一款适用于所有设计师的矢量绘图应用。矢量绘图也是目前进行网页,图标以及界面设计的最好方式。但除了矢量编辑的功能之外,我们同样添加了一些基本的位图工具,比如模糊和色彩校正。我们尽力让 Sketch容易理解并上手简单,有经验的设计师花上几个小时便能将自己的设计技巧在Sketch中自如运用。对于绝大多数的数字产品设计,Sketch 都能替代Adobe Photoshop,Illustrator 和 Fireworks。 --摘自《sketch用户手册》 (1)Sketch是什么? Sketch是一款轻量、高效的矢量设计工具,它在矢量编辑基础上,提供了基本的位图样式支持(例如模糊和颜色调节),支持矩形工具、文字工具、布尔运算等功能。你可以把它看做是简化版的Photoshop,矢量版的Axure rp。但需要注意的是,Sketch不是一款位图编辑器。这就是说,你如果想做的是照片修正、画笔绘图,这款软件就不合适。 Part 1 Sketch的八大优势 1. 小清新颜值高 简洁高效 – 抗干扰 界面简洁美好,功能清晰。无悬浮面板,选择一个对象/图层(objects)就会展示对应检查器(inspectors),不会有PS中处理大文件时各种开关窗口情况。 ▲ 软件截图(全屏):左侧栏为图层区;右侧栏为检查器区 2. 使用畅快易上手 2

使用Java带你打造一款简单的英语学习系统

三世轮回 提交于 2020-08-13 17:54:04
【一、项目背景】 随着移动互联网的发展,英语学习系统能结构化的组织海量资料。针对用户个性需求,有的放矢地呈现给用户,从而为英语学习者提供便利,提升他们的学习效率。 【二、项目目标】 1. 实现美观的界面,添加需要的组件。 2. 能够基本实现改变字体,颜色,背景,页面切换功能。 3. java读取txt文件,简化代码。 【三、项目实施】 使用eclipse软件开发,先上效果图,如下图所示。可以看到在界面上有可以改变字体、颜色、设置选项的菜单栏,页面切换的功能。 接下来,小编带大家进行具体的实现,具体的实现步骤如下。 【四、实现步骤】 一、首先实现窗体界面 具体的代码实现过程如下: public static void main(String[] args){ // TODO Auto-generated method stub EnglishSystem es =new EnglishSystem(); es.setTitle("英语学习系统"); es.setSize(750, 600); es.setVisible(true); es.setResizable(false); es.setLocationRelativeTo(null); } 使用new关键字创建EnglishSystem类; setTitle表示设置界面的标题; setSize(宽,高)表示窗体大小;

图解JavaScript生成器和迭代器

心已入冬 提交于 2020-08-13 17:46:12
<br />ES6引入了一个很酷的东西,叫做 生成器(generator)函数 。每当我问人们有关生成器函数的问题时,得到的回复基本上都是:“我曾看到过一次,没搞明白,然后就再也没有看到过”,“哦,天哪,我读过很多有关生成器函数的博客文章,但依然还没有搞明白”,“我是搞明白了,但是为什么有人会用它啊?”,🤔也许那只是我一直在与自己进行的对话,因为那是我很长一段时间以来习惯的思考方式!但是生成器函数是真的很酷。<br /> <br />那么,什么是 生成器函数 呢?下面,我们先来看一个常规的老式函数。👵🏼<br /> <br />是的,这绝对没什么特别的!它只是一个普通函数,会输出一个值4次。下面我们来调用这个函数!<br /> <br /> <br /> <br />“但是,为什么你要浪费我5秒钟的时间让我看看这个没劲的普通函数呢?”,这是一个很好的问题。普通函数遵循一种称为 运行至完成 的模型:当我们调用一个函数时,它将一直运行,直到完成为止(好吧,除非某处出错了)。我们不能随意在中间的某个位置 暂停 一个函数。<br /> <br />现在最酷的部分来了:生成器函数不遵循 运行到完成 模型! 🤯这是否意味着我们可以在执行某个生成器函数时随机将其暂停呢?嗯,差不多吧!下面我们看看什么是生成器函数,以及如何使用它们。<br /> <br />我们通过在关键字 function

IDEA中创建maven web项目的详细部署

天大地大妈咪最大 提交于 2020-08-13 17:20:46
步骤一:首先先创建一个project,上次我说过了创建一个project就是一个工作空间,在这里就是创建一个maven的工作空间 步骤二:你要选择maven然后按照下面图片 的指示操作就可以了---》最后点击 next按钮 步骤三:如图: 步骤四:这里如何设置自己的maven的本地仓库的位置,是通过修改settings.xml中的文件的位置放置问题,还有你要加上阿里巴巴的仓库,这样你的下载速度就会加快,如果你不采用阿里巴巴的仓库,你要下载你需要的jar包的话,你就要通过FQ去下载,你的速度就会变慢,是某些包!!!! : 步骤五:你自己选择你自己的本地仓库的位置,至于如何设置本地仓库的位置,我在上一篇博客中有写到:你可以参考一下:http://www.cnblogs.com/1314wamm/p/7476199.html 步骤七:点击next 步骤八: 点击那个倒立的三角形,然后点击Edit Configurations; 步骤八: 步骤九:配置tocat服务器 步骤十:哎,发现,我怎么就只有一个选项呀, artifact这个选项怎么没有呢?不要着急,只要你不是下载的社区版本的IDEA就行了,你要查看你是不是下载的免费版的IDEA,如果是免费版的那就是阉割过的,有些查看时没有的,想要查看你的是那个版本的你可以点击上面一栏的help---->about就可以看到相应的版本了

JS数组转链表以及互转;两两交换链表中的节点;翻转链表

感情迁移 提交于 2020-08-13 16:11:06
数组转单链表 //单链表对象 class SingleLink { constructor(val,next){ this.val = val; this.next = next; return this; } toArray() { var array = [this.val]; let next = this.next; //将后面节点加入数组 while(next!=null){ array.push(next.val); next = next.next; } return array; } toString(){ var str = (arguments && arguments[0]) || ""; str += "{ val: "+(this.val==null?"null":this.val)+", next: "; var tail = " }"; tail += (arguments && arguments[1]) || ""; if(this.next==null){ str += " null"; str += tail; return str; }else{ //递归打印所有next return this.next.toString(str,tail); } } } //数组转换为单链表 var toSingleLink = function