JDK

StackOverflow热帖:Java整数相加溢出怎么办?

回眸只為那壹抹淺笑 提交于 2020-11-17 03:52:42
作者 | Aaron_涛 来源 | blog.csdn.net/qq_33330687/article/details/81626157 # 问题 在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如果溢出就返回Integer.MAX_VALUE # 解决方案 JDK8已经帮我们实现了Math下,不得不说这个方法是在StackOverflow找到了的,确实比国内一些论坛好多了~ 加法 public static int addExact(int x, int y) { int r = x + y; // HD 2-12 Overflow iff both arguments have the opposite sign of the result if (((x ^ r) & (y ^ r)) < 0) { throw new ArithmeticException("integer overflow"); } return r; } 减法 public static int subtractExact(int x, int y) { int r = x - y; // HD 2-12 Overflow iff the arguments have different signs and // the sign of the result is different

线程池ForkJoinPool简介

好久不见. 提交于 2020-11-17 03:41:44
ForkJoinPool 线程池最大的特点就是分叉(fork)合并(join),将一个大任务拆分成多个小任务,并行执行,再结合工作窃取模式( worksteal )提高整体的执行效率,充分利用CPU资源。 一. 应用场景 ForkJoinPool 使用分治算法,用相对少的线程处理大量的任务,将一个大任务一拆为二,以此类推,每个子任务再拆分一半,直到达到最细颗粒度为止,即设置的阈值停止拆分,然后从最底层的任务开始计算,往上一层一层合并结果,简单的流程如下图: 从图中可以看出ForkJoinPool要先执行完子任务才能执行上一层任务,所以ForkJoinPool适合在有限的线程数下完成有父子关系的任务场景,比如:快速排序,二分查找,矩阵乘法,线性时间选择等场景,以及数组和集合的运算。 下面是个简单的代码示例计算从1到1亿之间所有数字之和: package com.javakk; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveTask; import java.util.stream.LongStream; /** * ForkJoinPool求和 * @author 老K */ public class ForkJoinPoolTest { private static

Linux 下 yum 安装jdk

不打扰是莪最后的温柔 提交于 2020-11-17 02:56:19
Linux 下 yum 安装jdk 1.1 查看可安装的jdk版本 yum -y list java* 1.2 安装 jdk yum install -y java-1.8.0-openjdk-devel.x86_64 1.3 检查 [root@VM-0-7-centos apache-tomcat-7.0.106]# java -version openjdk version "1.8.0_272" OpenJDK Runtime Environment (build 1.8.0_272-b10) OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode) 1.4 查看jdk目录 /usr/lib/jvm [root@VM-0-7-centos apache-tomcat-7.0.106]# cd /usr/lib/jvm [root@VM-0-7-centos jvm]# ll total 4 drwxr-xr-x 3 root root 4096 Nov 16 21:57 java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64 lrwxrwxrwx 1 root root 21 Nov 16 21:57 jre -> /etc/alternatives/jre lrwxrwxrwx 1

Java 程序员必须掌握的 5 个注解!

你说的曾经没有我的故事 提交于 2020-11-16 08:28:15
来源:codeceo www.codeceo.com/5-annotations-every-java-developer-should-know.html 划重点 自 JDK5 推出以来,注解已成为Java生态系统不可缺少的一部分。虽然开发者为Java框架(例如Spring的@Autowired)开发了无数的自定义注解,但编译器认可的一些注解非常重要。 在本文中,我们将看到5个Java编译器支持的注解,并了解其期望用途。顺便,我们将探索其创建背后的基本原理,围绕其用途的一些特质,以及正确应用的一些例子。虽然其中有些注解比其他注解更为常见,但非初学Java开发人员都应该消化了解每个注解。 @Override @FunctionalInterface @SuppressWarnings @SafeVarargs @Deprecated 首先,我们将深入研究Java中最常用的注解之一:@Override。 @Override 覆盖方法的实现或为抽象方法提供实现的能力是任何面向对象(OO)语言的核心。由于Java是OO语言,具有许多常见的面向对象的抽象机制,所以在非终极超类定义的非最终方法或接口中的任何方法(接口方法不能是最终的)都可以被子类覆盖。点击 这里 阅读 Java 10 新特性实战教程。 虽然开始时覆盖方法看起来很简单,但是如果执行不正确,则可能会引入许多微小的bug。例如

从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

故事扮演 提交于 2020-11-16 06:12:31
一、前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。 Jenkins是一个广泛用于持续构建的可视化Web工具,持续构建就是将项目自动化编译、打包、部署。通过规范化来完成,简单,繁琐,浪费时间的重复工作。 Jenkins名言: 构建伟大,无所不能! Jenkins用户手册传送门: https://jenkins.io/zh/doc/ 二、发布流程 工作详细流程: 三、环境准备 服务器角色 IP地址 主机名 运行服务 系统版本 Jenkins/Docker 192.168.115.21 jenkins 安装Docker、Tomcat运行Jenkins、Git客户端、JDK、Maven CentOS 7.4 Git/Registry 192.168.115.22 git 安装Docker、Git服务、Registry私有仓库容器 CentOS 7.4 Docker 192.168.115.23 docker 安装Docker、拉取Tomcat镜像运行Java项目 CentOS 7.4 本文有点长,理论较少、属于实践型的,请大概看一下文章的整体,准备用三台虚拟机来跟着一起实践,否则可能会坚持不下去哦,就算坚持看完了也收获不大,主要在于实践。 四

Jenkins+Docker+Git+Registry

╄→гoц情女王★ 提交于 2020-11-16 05:00:51
从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布 笔者: @拿着保温瓶的年轻人 目录: 一、前言 二、发布流程 三、环境准备 四、部署思路梳理 五、三台机器上操作 六、Git机器上操作 七、Docker机器上操作 八、Jenkins机器上操作 九、上传JAVA项目代码到Git仓库 十、Jenkins发布测试 十一、后面再废话两句 正文: 一、前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。 Jenkins是一个广泛用于持续构建的可视化Web工具,持续构建就是将项目自动化编译、打包、部署。通过规范化来完成,简单,繁琐,浪费时间的重复工作。 Jenkins名言: 构建伟大,无所不能! Jenkins用户手册传送门: https://jenkins.io/zh/doc/ 二、发布流程 工作详细流程: 三、环境准备 服务器角色 IP地址 主机名 运行服务 系统版本 Jenkins/Docker 192.168.115.21 jenkins 安装Docker、Tomcat运行Jenkins、Git客户端、JDK、Maven CentOS 7.4 Git/Registry 192.168.115.22 git

Java 干货之深入理解String

安稳与你 提交于 2020-11-16 04:58:17
可以证明,字符串操作是计算机程序设计中最常见的行为,尤其是在Java大展拳脚的Web系统中更是如此。 ---《Thinking in Java》 提到Java中的String,总是有说不完的知识点,它对于刚接触Java的人来说,有太多太多的值得研究的东西了,可是为什么Java中的String这么独特呢?今天我们来一探究竟。 基本数据类型 众所周知Java有八大基本数据类型,那么基本数据类型与对象有什么异同呢? 基本数据类型不是对象 基本数据类型能直接存储变量对应的值在堆栈中,存取更加高效 使用方便,不用new创建,每次表示都不用新建一个对象 字面量与赋值 什么叫字面值呢?考虑下面代码: int a=3; double d=3.32; long l=102322332245L; 其中,3、3.32、102322332245L便叫做字面值。3默认是int类型,3.32默认是double类型,102322332245默认也是int类型,所以必须加一个L来将它修改为long类型,否则编译器就会报错,字面量可以直接在计算机中表示。 基本数据类型便可以直接通过字面值进行赋值 String与基本数据类型 话说了这么多,这和String有什么关系呢?正如本文最开始所说,因为Java需要常常与字符串打交道,因此Java的设计者想要将String类型在 使用上 和 性能上 尽量像基本数据类型一样。

Java学习日记基础(五)——类、对象之this、静态变量(类变量)、静态方法(类方法)、四大特征

别来无恙 提交于 2020-11-16 02:45:35
this 赵本山问奥尼尔:“我的爸爸的爸爸是谁?” 奥尼尔:“不知道” 赵本山:“你傻啊,是我爷爷” 奥尼尔回去问科比:“我的爸爸的爸爸是谁?” 科比:“不知道” 奥尼尔:”你傻啊,是赵本山的爷爷“ 就像这个笑话一样,不同的人,用this时,指向的对象也是变的。 普通方法中,this总是指向调用该方法的对象 //this在成员方法中的用处 //this就是指代当前对象,是一个隐式参数 public class thissss { public static void main(String []args) { Student s1 = new Student(); s1.name = "小白"; s1.age = 17; s1.study(); System.out.println(s1.name); Student s2 = new Student(); s2.name = "小徐"; s2.age = 18; s2.study(); } } class Student { int age; String name; public void study() //在创建成员方法(函数)的时候会自动传一个this参数,指向该对象的地址,但是是隐藏的 { this.name = "小黑"; //s1.name = "小黑"; //这条语句是错误的,因为对象要在类创建完成之后才有 /

【JAVA各版本特性】JAVA 1.0

荒凉一梦 提交于 2020-11-16 00:22:56
make JDK Version 1.0 1996-01-23 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,性能比较差,运行速度慢。 JDK Version 1.1 1997-02-19 JDBC(Java DataBase Connectivity); 支持内部类; RMI(Remote Method Invocation) ; 反射; Java Bean; JDK Version 1.2 1998-12-08 Playground(操场) 集合框架; JIT(Just In Time)编译器; 对打包的Java文件进行数字签名; JFC(Java Foundation Classes), 包括Swing 1.0, 拖放和Java2D类库; Java插件; JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型; Applet中添加声音支持. JDK Version 1.3 2000-05-08 Kestrel(红隼) Java Sound API; jar文件索引; 对Java的各个方面都做了大量优化和增强; JDK Version 1.4 2002-02-13 Merlin(隼) XML处理; Java打印服务; Logging API; Java Web Start; JDBC 3.0 API; 断言;

为什么java内部类访问局部变量必须声明为final?

好久不见. 提交于 2020-11-15 19:16:36
https://blog.csdn.net/z55887/article/details/49229491 先抛出让我疑惑了很久的一个问题 编程时,在线程中使用局部变量时候经常编译器会提示:局部变量必须声明为final package test; public class ThreadTest { public void function(String a) { new Thread(){ @Override public void run() { System.out.println(a); } }.start(); } public static void main(String[] args) { new ThreadTest().function("a"); } } 上图中由于方法function中的形参a没有声明为final,编译抛出异常:Cannot refer to the non-final local variable a defined in an enclosing scope 这个问题我特意问过老师,也百度过,都没有给出满意的解答。今天看安卓视频无意发现了答案,真是意外之喜啊! 其实原因就是一个规则:java内部类访问局部变量时局部变量必须声明为final。 那为什么要这样呢?还有线程为什么和内部类一样?接下来我们慢慢揭秘。 public class Out