JDK

Java基础系列——String的方法(21)

冷暖自知 提交于 2020-12-16 03:25:08
Stirng类的方法有很多,本片博客描述的就是所有的方法,包括一些新的方法(主要是JDK1.8之后新出的方法)。 charAt( int index ) charAt方法描述: Returns the char value at the specified index.返回指定位置的字符 那么也就是说,在方法中传入一个参数,返回一个具体的位置。具体代码如下: public class TestString5 { public static void main(String[] args) { String s = "http://oschina.net/lujiapeng" ; char c = s.charAt( 3 ) ; System.out.println( c ); // p c = s.charAt( 9 ) ; System.out.println( c ); // c c = s.charAt( 100 ) ; System.out.println( c ); // StringIndexOutOfBoundsException: String index out of range: 100 } } 那么在这里清楚的看到,当传入一个3的时候,会返回一个字符p,如果传入一个9的话,会返回一个字符c,如果传入100的话,会抛出一个异常

Dubbo系列<10>-Dubbo SPI

馋奶兔 提交于 2020-12-15 09:46:37
前面咱们已经了解了JDK SPI的原理、实现、优缺点。 Dubbo在JDK SPI基础之上做了一些优化。 大部分的思想都是和 SPI 是一样,只是下面两个地方有差异。 1. 需要在 resource 目录下配置 META-INF/dubbo 或者META-NF/dubbo/internal 或者 META-INF/services,并基于 SPI 接口去创建一个文件 2. 文件名称和接口名称保持一致,文件内容和 SPI 有差异,内容是 KEY 对应 Value 基于上面所说咱们自己来实现一个MyProtocol 第一步自定义一个类Protocl,并且实现com.alibaba.dubbo.rpc.Protocol。 package com.tian.dubbo.protocol; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.rpc.Exporter; import com.alibaba.dubbo.rpc.Invoker; import com.alibaba.dubbo.rpc.Protocol; import com.alibaba.dubbo.rpc.RpcException; /** * 自定义协议 * (这里只是做一个演示,所以只是把端口调整了) * @Author tianweichang

SpringMVC_类型转换器

半腔热情 提交于 2020-12-15 08:28:06
一:系统提供的类型转换器 从前端页面提交的表单数据,提交到Controller中,Controller会根据我们在方法中定义的参数的类型来将数据类型自动转换 1:编写表单数据 <% @ page contentType = " text/html;charset=UTF-8 " language = " java " %> < html > < head > < title > Title </ title > </ head > < body > < form action ="/submit.do" method ="post" > 用户名: < input type ="text" name ="username" >< br > 年龄: < input type ="text" name ="age" >< br > < input type ="submit" value ="提交" > </ form > </ body > </ html > 2:Controller // Controller中的方法会自动将age转为int类型 // 该转换是通过SpringMvc的默认类型转换器来实现的,但有些类型是无法通过该转换器进行转换的,例如日期类型 @Controller public class newController{ @RequestMapping( "

深入理解java虚拟机阅读笔记

老子叫甜甜 提交于 2020-12-15 07:48:54
              深入理解 java 虚拟机阅读笔记 Jdk= java 语言 +jvm+api Java 技术体系分为 4 个平台: java card,me,se,me Java 虚拟机在 java 程序执行过程把 jvm 的内存划分位若干不同数据区域。 这些区域有各自的用途,以及创建和销毁时间 。有些区域 随虚拟机的进程的启动而存在 , 有些区域依赖用户线程的启动和结束而建立和销毁 。 由所有线程共享的数据区 --- 方法区、堆 线程隔离的数据区 --- 虚拟机栈、本地方法栈、程序计数器 程序计数器 较小的内存 :当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等都需要依赖选取下一条指令。 Java 虚拟机的多线程 :通过线程轮流切换并分配处理器执行时间的方式来实现。任一时刻,一个处理器(对于多核处理器是一个内核)只会执行一条线程中的指令 。 线程切换后为了恢复正确的执行位置,每条线程都需要一个独立的程序计数器。各个线程之间的计数器互不影响,独立存储,是线程私有的内存。 若正在执行 native 方法,则程序计数器为空 ,这个区域也是唯一一个没有规定 OOM 的区域。 虚拟机栈 :线程私有, 生命周期和线程一样 。 每个方法被执行的时候同时创建一个 栈帧 :用来存储 局部变量表 、 操作栈、动态链接、方法出口 等。 方法从调用到完成

linux下 tar解压 gz解压 bz2等各种解压文件使用方法

冷暖自知 提交于 2020-12-15 04:23:36
大致总结了一下linux下各种格式的压缩包的压缩、解压方法。但是部分方法我没有用到,也就不全,希望大家帮我补充,我将随时修改完善,谢谢!      .tar   解包:tar xvf FileName.tar   打包:tar cvf FileName.tar DirName   (注:tar是打包,不是压缩!)   ———————————————   .gz   解压 1:gunzip FileName.gz   解压2:gzip -d FileName.gz   压缩:gzip FileName   .tar.gz 和 .tgz   解压:tar zxvf FileName.tar.gz   压缩:tar zcvf FileName.tar.gz DirName   ———————————————   .bz2   解压1:bzip2 -d FileName.bz2   解压2:bunzip2 FileName.bz2   压缩: bzip2 -z FileName   .tar.bz2   解压:tar jxvf FileName.tar.bz2 或tar --bzip xvf FileName.tar.bz2   压缩:tar jcvf FileName.tar.bz2 DirName    ———————————————   .bz   解压1:bzip2 -d

20165324 Java实验一

こ雲淡風輕ζ 提交于 2020-12-15 03:21:15
20165324 实验一 一、实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 实验序号:1 实验名称:Java开发环境的熟悉 实验内容与步骤 Java开发环境的熟悉-1 1.建立“自己学号exp1”的目录 2.在“自己学号exp1”目录下建立src,bin等目录 3.javac、java的执行在“自己学号exp1”目录 4.提交Linux或Window或macOS中命令行下运行Java的全屏截图,运行结果包含自己学号等证明自己身份的信息 5.代码提交码云 Java开发环境的熟悉-2 要求:提交Linux或Windows或masOS环境中IDEA中调试设置条件断点的全屏截图,截图打上自己学号的水印。 IDEA调试小结 在IDEA中运行Debug,进行单步调试。 鼠标单击设置断点,断点分为:行断点、方法断点、条件断点、临时断点。 F7:step;F8:next;F9:调至下一断点。 关于条件断点的调试如图: Java开发环境的熟悉-3 学生学号:20165324,抽到的题目是:“实现求两个数的最大公约数和最小公倍数的功能,数从命令行输入,并进行测试(正常情况、异常情况、边界情况)”,提交自己联系项目的码云链接和运行结果的截图。 码云代码链接 正常情况

「Flink」使用Java lambda表达式实现Flink WordCount

戏子无情 提交于 2020-12-15 02:53:12
本篇我们将使用Java语言来实现Flink的单词统计。 代码开发 环境准备 导入Flink 1.9 pom依赖 < dependencies > < dependency > < groupId > org.apache.flink </ groupId > < artifactId > flink-java </ artifactId > < version > 1.9.0 </ version > </ dependency > < dependency > < groupId > org.apache.flink </ groupId > < artifactId > flink-streaming-java_2.11 </ artifactId > < version > 1.9.0 </ version > </ dependency > < dependency > < groupId > org.apache.commons </ groupId > < artifactId > commons-lang3 </ artifactId > < version > 3.7 </ version > </ dependency > </ dependencies > 构建Flink流处理环境 StreamExecutionEnvironment env =

Tomcat SessionID生成导致启动缓慢

拥有回忆 提交于 2020-12-15 01:40:09
最近项目上线部署的时候,发现一个问题。Tomcat在启动过程中耗费了很长的时间。查看日志,发现耗时最长的地方是: INFO [localhoststartStop1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [1,293,533] milliseconds. 在网上查找资料后确定,该问题是由于tomcat的session id的生成主要通过java.security.SecureRandom生成随机数来实现,随机数算法使用的是”SHA1PRNG”。在sun/oracle的jdk里,这个算法的提供者在底层依赖到操作系统提供的随机数据,在linux上,与之相关的是/dev/random和/dev/urandom。有关它俩的描述如下: /dev/random 在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性 密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到收集到了足够的环境噪声为止。 /dev/urandom dev/random的一个副本是

还有40天,Java 11就要横空出世了。

风流意气都作罢 提交于 2020-12-15 00:36:51
↑ 点击上方 “Java架构师历程” 关注我们 作者:mush 来源: http://mushiming.top/mushblog/archives/834 Java 10已经发布将近5个月了,现在已经是时候谈论Java 11. Oracle 向更快的发布周期迈进 意味着更多的功能正在以前所未有的速度发展。 还有40天的时间才会发布Java 11,我们还可以了解是否应该升级到Java 9,10,或者我们是否应该等待Java 11。 让我们来看看。 Java 11即将推出的功能有哪些,它们与Java 9和10的不同之处是什么? Java 11的发布日期定于2018年9月,并且该存储库目前已开放以进行错误修复,以及更多JDK增强建议的提议将添加到即将发布的版本中。虽然该列表不是最终的,但已经有4个提案计划用于下一个版本: 1. Lambda参数的本地变量语法 在声明隐式类型lambda表达式的形式参数时,此JEP将允许使用var。这里的目标是将局部变量声明的语法与隐式类型的lambda表达式中的形式参数声明的语法对齐。这样,而不是写这个: (x,y) - > x.process(y) 我们可以写: (var x,var y) - > x.process(y) 这扩展了Java 10 Local Variable Type Inference,它引入了一种新的语法

带你读懂《Java并发编程》:第3章 助于线程安全的三剑客:final&valitale&线程封闭

依然范特西╮ 提交于 2020-12-14 22:23:25
点击上方 蓝字 关注我们 我们简要的 回顾前文: 《第1章 多线程安全性与风险》 介绍了并发编程, 在维护难度、性能以及活跃性三个方面,所带来的风险与优势 ; 《第2章 影响线程安全性的原子性和加锁机制》 介绍了并发编程核心概念 -- 线程安全性, 介绍了用同步的手段 ,来避免多个线程在同一时刻访问相同的数据 ; 今天分享的是《Java并发编程实战》第3章 -- “对象的共享”: 介绍用安全共享和发布对象的手段,来让多个线程能够安全的同事访问同一数据 。 开始前,我们先回顾下几个重要的基础知识: 缓存一致性 和 Java内存模型 。 现实计算机系统是存在缓存一致性问题的,见下图: 现实因素: 由于计算机存储设备与处理器的运算速度有个数量级的差距( 即便存储设备使用SSD,还是比处理器慢几个数量级 ),所以计算机系统不得不增加一层读写速度尽可能接近处理器速度的高速缓存Cache来作为内存和处理器之间的缓冲。 缓存一致性(Cache Coherence) :基于高速缓存的存储交互解决了处理器和内存的速度矛盾,但是引入了缓存一致性( 在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一个主内存(Main Memory),当多个处理器的运算任务都涉及同一块主内存区域时,将可能导致各自的缓存数据不一致 )。 Java内存模型(Java Memory Model,JMM)