javase
文章平均质量分 54
jamesge2010
这个作者很懒,什么都没留下…
展开
-
JVM面试宝典
原创 2024-09-11 15:12:18 · 111 阅读 · 0 评论 -
CompletableFuture使用详解
简单的任务,用Future获取结果还好,但我们并行提交的多个异步任务,往往并不是独立的,很多时候业务逻辑处理存在串行[依赖]、并行、聚合的关系。如果要我们手动用 Future 实现,是非常麻烦的。CompletableFuture是Future接口的扩展和增强。CompletableFuture实现了Future接口,并在此基础上进行了丰富地扩展,完美地弥补了Future上述的种种问题。更为重要的是,CompletableFuture实现了对任务的编排能力。原创 2024-07-29 03:08:30 · 902 阅读 · 0 评论 -
Java内存溢出问题排查分析
模拟的内存溢出针对性很强,并且我们抓取dump文件也很及时,所以在分析的时候很简单。注意:主动获取dump文件必须是一出现内存异常就获取dump文件,这样获取的文件信息才比较准确。这里可以看到完整的堆栈信息,里面可以发现我们增加模拟溢出代码的那个Java文件,并且爆发内存溢出的代码行也可以对上,至此溢出分析结束。打开下载好的mat软件,通过file-open打开抓取到的dump文件(hprof文件)顾名思义,当内存溢出发生后,通过指令的方式手机当前应用程序下的内存使用情况。转载 2023-03-24 23:56:59 · 750 阅读 · 0 评论 -
IO多路复用三种机制
IO多路复用三种机制原创 2023-03-22 22:29:40 · 48 阅读 · 0 评论 -
如何查询java环境运行参数
原创 2022-06-12 02:13:17 · 315 阅读 · 0 评论 -
队列的四组api
原创 2022-02-14 02:04:12 · 145 阅读 · 0 评论 -
Java Pattern类的用法详解(正则表达式)
正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。因此,典型的调用顺序是 Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches();在仅使用一次正则表达式时,可..转载 2022-02-04 02:48:42 · 19559 阅读 · 2 评论 -
如何使用jstack分析线程状态
背景记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源。top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使用率排序1、上图中可以看出pid为23344的java进程占用了较多的cpu资源;2、通过top转载 2022-01-14 00:45:02 · 2504 阅读 · 0 评论 -
最近学习了限流与RateLimiter
前言分布式环境下应对高并发保证服务稳定几招,按照个人理解,优先级从高到低分别为缓存、限流、降级、熔断,每招都有它的作用,本文重点就讲讲限流这部分。坦白讲,其实上面的说法也不准确,因为服务降级、熔断本身也是限流的一种,因为它们本质上也是阻断了流量进来,但是本文希望大家可以把限流当做一个单纯的名词来理解,看一下对请求做流控的几种算法及具体实现方式。为什么要限流其实很好理解的一个问题,为什么要限流,自然就流量过大了呗,一个对外服务有很多场景都会流量增大:业务用户量不断攀升 各种促销 .转载 2021-06-11 23:50:56 · 730 阅读 · 0 评论 -
快速排序2
import java.util.Random;public class MySort { public static void main(String[] args) { int[] intArray = new int[10]; for(int i=0; i<intArray.length; i++) { int random = (int) (new Random(System.currentTimeMillis()).next.原创 2021-03-08 23:05:57 · 76 阅读 · 0 评论 -
reflect的使用方法
private static <T> void encrytDESField(T t, Stirng lastKeyId, Sting lastKey, PropertyDescripter p) throws IllegalAccessException, InvocationTargetException, CryptException { // 判断该字段是否需要加密...原创 2020-04-26 23:33:30 · 981 阅读 · 0 评论 -
CountDownLatch使用方法
public static <T> List<T> decrptNew(List<T> list) throws CryptException { try { List<T> decrptList = new ArrayList(list.size()); int m = list.size() / 100...原创 2020-04-22 23:33:16 · 449 阅读 · 1 评论 -
ThreadLocal 那点事儿
ThreadLocal,直译为“线程本地”或“本地线程”,如果你真的这么认为,那就错了!其实,它就是一个容器,用于存放线程的局部变量,我认为应该叫做 ThreadLocalVariable(线程局部变量)才对,真不理解为什么当初 Sun 公司的工程师这样命名。早在 JDK 1.2 的时代,java.lang.ThreadLocal 就诞生了,它是为了解决多线程并发问题而设计的,只不过设计得有些...转载 2018-09-20 23:18:34 · 131 阅读 · 0 评论 -
SimpleDateFormat非线程安全测试
package gulixueyuan_jdk18;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.concurrent.Ca...原创 2018-04-15 00:37:08 · 179 阅读 · 0 评论 -
java快速排序
package javaTest201711;public class QuickSort { int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17, 18, 23, 34, 15, 35, 25, 53, 51 }; public static void m...原创 2018-03-20 00:04:11 · 159 阅读 · 0 评论 -
JDK1.8 十大新特性详解
本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API“Java is still not dead—and people are starting to figure that out.”本教程将用带注释的简单代码来描述新特...转载 2018-03-11 20:58:52 · 235 阅读 · 0 评论 -
Spring 自定义注解,配置简单日志注解
java在jdk1.5中引入了注解,spring框架也正好把java注解发挥得淋漓尽致。下面会讲解Spring中自定义注解的简单流程,其中会涉及到spring框架中的AOP(面向切面编程)相关概念。不清楚java注解的,可以先了解java自定义注解:Java自定义注解一、创建自定义注解requestUrl 为我们自定义的一个参数package com.sam.annotation;import...转载 2018-03-10 23:27:54 · 204 阅读 · 0 评论 -
Java自定义注解
Java在1.5开始引入了注解,目前流行的框架都在用注解,可想而知注解的强大之处。以下通过自定义注解来深入了解java注解。一、创建自定义注解package com.sam.annotation;import java.lang.annotation.*;/** * @author sam * @since 2017/7/13 */@Target({ElementType.METHO...转载 2018-03-10 23:15:08 · 113 阅读 · 0 评论 -
将字符串按照utf-8或gb2312编码写入文件,10个字节一行,当字符超过10个字节则放到下一行。
public static void main(String[] args) {try {File in = new File("d:/FileTest.txt");File out = new File("d:/FileTest2.txt");FileReader fr = new FileReader(in);FileWriter fw = new FileWriter原创 2016-04-28 15:50:12 · 1121 阅读 · 0 评论 -
InvocationHandler中invoke()方法的调用问题
Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的。 首先,invoke方法的完整形式如下: Java代码 public Object invoke(Object proxy, Method met转载 2016-05-10 18:03:56 · 923 阅读 · 0 评论 -
java泛型(转自百度百科)
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发转载 2016-05-03 15:17:54 · 418 阅读 · 0 评论 -
java与(&,&&)和或(|,||)的区别
1.与(&,&&)和或(|,||)的区别 1.1使用与操作的时候,要求前后几个表达式的内容都是true,最终结果才是true,如果有一个是false,则最终结果就是false; 1.2使用或操作的时候,要求前后几个表达式只要有一个true,则最终结果就是true,如果全都是false,则最终结果才是false; 2.与(&)和短路与(&&)的区别以及或(|)和短路或(||)的区转载 2016-05-31 15:42:46 · 1755 阅读 · 0 评论 -
java反射详解
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。下面开始正文。【案例1】通过一个对象获得完整的包名和类名123456789101112131415package Reflect;转载 2016-05-09 15:52:57 · 255 阅读 · 0 评论 -
Java中Runnable和Thread的区别
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。下转载 2016-10-24 17:11:45 · 200 阅读 · 0 评论 -
生产者/消费者问题的多种Java实现方式
实质上,很多后台服务程序并发控制的基本原理都可以归纳为生产者/消费者模式,而这是恰恰是在本科操作系统课堂上老师反复讲解,而我们却视而不见不以为然的。在博文《一种面向作业流(工作流)的轻量级可复用的异步流水开发框架的设计与实现》中将介绍一种生产者/消费者模式的具体应用。转载 2016-10-24 17:33:14 · 203 阅读 · 0 评论 -
ExecutorService中submit和execute的区别
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。 一、创建任务 任务就是一个实现了Runnable接口的类。创建的时候实run方法即可转载 2016-12-16 17:28:30 · 360 阅读 · 0 评论 -
乐观锁与悲观锁
Web应用往往面临多用户环境,这种情况下的并发写入控制, 几乎成为每个开发人员都必须掌握的一项技能。在并发环境下,有可能会出现脏读(Dirty Read)、不可重复读(Unrepeatable Read)、 幻读(Phantom Read)、更新丢失(Lost update)等情况。具体的表现可以自行搜索。为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念。 这转载 2016-12-29 15:26:32 · 418 阅读 · 0 评论 -
PreparedStatement和Statement的区别
1>PreparedStatement用于处理动态SQL语句,在执行前会有一个预编译过程,这个过程是有时间开销的,虽然相对数据库的操作,该时间开销可以忽略不计,但是PreparedStatement的预编译结果会被缓存,下次执行相同的预编译语句时,就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行,所以,对于批量处理可以大大提高效率。2>Statement每次都会执行SQL语句转载 2017-03-02 11:25:50 · 275 阅读 · 0 评论 -
简单的socket编程
不说废话,直接上代码:TalkServer.javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Soc原创 2017-03-02 15:12:43 · 207 阅读 · 0 评论 -
使用爬虫技术抓取文件或页面中的email并存入数据库
import java.io.BufferedReader;import java.io.FileReader;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.sql.Connection;import java.sql.DriverManage原创 2017-03-03 16:02:18 · 1221 阅读 · 0 评论 -
使用httpClient保存网页至本地
package com.gewb;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import org.apache.commons.httpclient.HttpClient;import or原创 2017-03-03 16:09:09 · 1806 阅读 · 0 评论 -
正则表达式全部符号解释
字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的转载 2016-06-27 18:16:48 · 273 阅读 · 0 评论 -
java动态代理(JDK和cglib)
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为转载 2016-05-10 15:54:31 · 230 阅读 · 0 评论