JavaSE
文章平均质量分 66
JavaSE 相关
椰汁菠萝
在循环中进步
展开
-
Java根据日期获取季度-简单实现
【代码】Java根据日期获取季度-简单实现。原创 2023-08-28 17:46:27 · 1136 阅读 · 0 评论 -
Java wait() notify() join()用法讲解
这里能调用成功,因为当前执行线程,拿到了LOCK_A的锁;这里代码会一直等待下去,可以设置时间,等待指定时间后会自动唤醒;也可以使用notify()方法;唤醒后,也会立即进入下一次wait(),直到线程运行结束或者等待时间到期;可以看到虽然调用线程持有锁对象,但和调用wait的对象不一致,仍然会报错。时,只要线程没有执行完毕就会一直处于等待状态;时间结束或者线程结束,方法才能结束;时,只要线程还在运行,就会进入。原创 2023-08-07 17:36:21 · 240 阅读 · 0 评论 -
Java Unsafe简单说明使用
Unsafe获取 Unsafe unsafe = Unsafe.getUnsafe();由于Unsafe为调用敏感,所以可能需要自行import,import sun.misc.Unsafe;使用compareAndSwapIntpublic final native boolean compareAndSwapInt(Object object, long offset, int expect, int update);该方法为native方法,CAS核心代码,比较并交换,该方法主要逻原创 2022-04-12 18:03:36 · 1085 阅读 · 0 评论 -
什么是自旋锁?自旋的好处和后果是什么呢?
什么是自旋“自旋”可以理解为“自我旋转”,这里的“旋转”指“循环”,比如 while 循环或者 for 循环。“自旋”就是自己在这里不停地循环,直到目标达成。而不像普通的锁那样,如果获取不到锁就进入阻塞自旋和非自旋的获取锁的流程自旋锁,它并不会放弃 CPU 时间片,而是通过自旋等待锁的释放,也就是说,它会不停地再次地尝试获取锁,如果失败就再次尝试,直到成功为止非自旋锁,非自旋锁和自旋锁是完全不一样的,如果它发现此时获取不到锁,它就把自己的线程切换状态,让线程休眠,然后 CPU 就可以在转载 2022-04-11 17:19:10 · 755 阅读 · 0 评论 -
Java多线程:线程状态
新建状态(New):新创建了一个线程对象。 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。 阻塞情况分为三种: (1)转载 2022-04-11 16:44:20 · 130 阅读 · 0 评论 -
Java注解
定义Annontation (注解) 是Java5 开始引入的新特性,可以看作是一种特殊的注释,主要用于修饰类、方法或者变量。通过@interface关键字定义注解,并配合@Target、@Retention等必要的元注解,对注解进行描述;注解本质是一个继承了Annotation 的特殊接口:@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)public @interface Override {}//等同于publi原创 2022-03-31 15:33:26 · 542 阅读 · 0 评论 -
Java线程池实现原理及其在业务中的实践
随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述了线程池概念和用途,接着结合线程池的源码,帮助大家领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(Thread P.转载 2022-02-11 18:54:19 · 426 阅读 · 1 评论 -
Java 8 Optional 类--避免null判断
Java Optional使用讲解原创 2022-01-14 14:48:25 · 511 阅读 · 0 评论 -
Java中求集合交集、并集、差集
前言无论使用哪种方法都要重写equals方法,如果使用Set集合,还需要重写hashCode方法;public class User{ private Integer id; private String name; @Override public boolean equals(Object obj) { if(obj == null) { return false; } if(!(obj instanceof User)) { return false;原创 2021-04-21 20:04:34 · 5261 阅读 · 0 评论 -
Double转String
起因最近遇到从Excel读取电话信息时,取出的数据是Double类型,需要转为字符串保存,问题来了,Double的toString方法返回的是科学计数法格式的字符串,如何取到原始串呢?方法一: DecimalFormatDouble d = 111111111111111d;DecimalFormat df = new DecimalFormat("#");System.out.println(df.format(d));缺点:只能转换整数,如果Double值是小数,不能根据小数位的变化而变化原创 2021-03-10 17:28:00 · 14926 阅读 · 0 评论 -
从数据库url获取数据库名host及port
不多说直接上代码public static void getHostFrom(String url) { Pattern p = Pattern.compile("jdbc:(?<db>\\w+):.*((//)|@)(?<host>.+):(?<port>\\d+).*"); Matcher m = p.matcher(url); if(m.find()) { System.out.println(m.group("db")); System.原创 2020-07-07 16:18:45 · 5434 阅读 · 9 评论 -
Java String.ReplaceAll捕获组用法(正则表达式捕获组及命名捕获组)
一、基础说明public String replaceAll(String regex, String replacement) 使用replacement替换字符串中和regex匹配的所有子串,regex为正则表达式源码 /** * @since 1.4 * @spec JSR-51 */ public String replaceAll(String regex, String replacement) { return Pattern.compile原创 2020-06-29 16:20:38 · 6897 阅读 · 2 评论 -
java关于 equals 和 hashCode
这几天在尝试手撸一个类似Lombok的注解式代码生成工具,用过Lombok的小伙伴知道,Lombok可以通过注解自动帮我们生产equals()和hashCode()方法,因此我也想实现这个功能,但是随着工作的深入,我发现其实自己对于equals()和hashCode()的理解,也处在一个很低级的阶段。因此痛定思痛,进行了一番深入学习,才敢来写这篇博客。1、equals在Java中含义首先要解释清楚这个,equals方法在Java中代表逻辑上的相等,什么叫逻辑上的相等?这个就涉及到Java本身转载 2020-06-22 15:03:34 · 255 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volati转载 2020-06-09 15:21:04 · 134 阅读 · 0 评论 -
访问者模式一篇就够了
访问者模式介绍最复杂的设计模式,并且使用频率不高,《设计模式》的作者评价为:大多情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。访问者模式是一种将数据操作和数据结构分离的设计模式。(觉得太抽象,可以看下面的例子)。访问者模式的使用场景对象结构比较稳定,但经常需要在此对象结构上定义新的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要...转载 2019-11-18 15:00:09 · 413 阅读 · 0 评论 -
Java中public,private,protect,default区别
同一个类 同一个包 不同包的子类 不同包的非子类 Private √ Default √ √ ...原创 2019-11-01 17:41:59 · 609 阅读 · 0 评论 -
RedisTemplate集合使用说明-opsForList(二)
1、leftPush(K key, V value) 在变量左边添加元素值。 Java代码 redisTemplate.opsForList().leftPush("list","a"); redisTemplate.opsForList().leftPush("list","b"); redisTemplate.opsForList().leftPus...转载 2019-01-10 14:24:10 · 120840 阅读 · 6 评论 -
RedisTemplate map集合使用说明-opsForHash(三)
1、put(H key, HK hashKey, HV value) 新增hashMap值。 Java代码 redisTemplate.opsForHash().put("hashValue","map1","map1-1"); redisTemplate.opsForHash().put("hashValue","map2","map2-2");转载 2019-01-10 14:29:30 · 119587 阅读 · 2 评论 -
RedisTemplate set集合使用说明-opsForSet(四)
1、add(K key, V... values) 向变量中批量添加值。 Java代码 redisTemplate.opsForSet().add("setValue","A","B","C","B","D","E","F"); 2、members(K key) 获取变量中的值。 Jav转载 2019-01-10 14:34:14 · 73344 阅读 · 1 评论 -
Java日志体系(logback)
logback1.1 简介师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版;在现如今的项目中,logback的出现次数越来越多,是目前主流首选的日志记录工具。1.2 logback结构logback分成三个模块:logback-core,logback- classic,logback-access。...原创 2019-01-10 21:10:15 · 224 阅读 · 0 评论 -
Java解决CSRF问题
CSRF是什么?CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。CSRF可以做什么?你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚...转载 2019-01-17 15:02:00 · 2508 阅读 · 0 评论 -
SpringBoot过滤XSS脚本攻击
前排提示源码在最后XSS攻击是什么XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。简而言之,就是作恶用户通过表单提交一些前端代码,如果不做处理的话,这些前端代码...原创 2019-01-18 14:17:53 · 7218 阅读 · 6 评论 -
Java中反射getDeclaredMethods和getMethods区别
1.getMethods是获取类中所有公共方法,包括继承自父类的2.getDeclaredMethods是获取类中自己声明的方法,即自己声明的任何权限的方法,包括私有方法getDeclaredFields、getFields同理,所有Declared都是这个意思获取到一个类的实体后,你可以获取到该类中所有的方法,甚至父类中所有方法(包括私有)getClass().getSuperC...原创 2019-05-08 19:26:32 · 4182 阅读 · 0 评论 -
RedisTemplate使用说明-opsForValue(一)
1、set(K key, V value) 新增一个字符串类型的值,key是键,value是值。 Java代码 redisTemplate.opsForValue().set("stringValue","bbb"); 2、get(Object key) 获取key键对应的值。 Java代码 String stringVa...转载 2019-01-10 14:20:03 · 30025 阅读 · 2 评论 -
Spring整合Shiro做权限控制模块详细案例分析
1.引入Shiro的Maven依赖[html] view plaincopy dependency> groupId>org.apache.shirogroupId> artifactId>shiro-coreartifactId> version>1.2.1转载 2016-01-12 16:48:00 · 2294 阅读 · 0 评论 -
常用加密算法的Java实现(一)
常用加密算法的Java实现(一)——单向加密算法MD5和SHA1、Java的安全体系架构1.1 Java的安全体系架构介绍Java中为安全框架提供类和接口。JDK 安全 API 是 Java 编程语言的核心 API,位于 java.security包(及其子包),以及sun.securityAPI包(及其子包)中。设计用于转载 2015-11-17 16:01:00 · 876 阅读 · 0 评论 -
java的System.getProperty()方法可以获取的值
java.versionJava 运行时环境版本java.vendorJava 运行时环境供应商java.vendor.urlJava 供应商的 URLjava.homeJava 安装目录java.vm.specification.vers转载 2015-10-12 17:21:22 · 478 阅读 · 0 评论 -
memcached简介及java使用方法
一、 概念Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。二、 适用场合1. 分布式应用。由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统。2. 数据库前段缓存。数据库常常是网站系统的瓶颈。数据库的大并发量访问,常常造成网站内存溢出。当然转载 2015-10-12 17:17:50 · 370 阅读 · 0 评论 -
Unsupported major.minor version 51.0解决办法
最近新安装使用了jdk7,编译了一些类替换到原来正常运行的项目中,替换之后发生了Unsupported major.minor version 51.0错误。经过网上搜索发现了问题产生的原因:用jdk7编译的class文件放到基于jdk6运行在tomcat之中,就会报这个错。解决起来也很方便:打开exclipse中项目上的属性—java compiler–选择一个合适的版本后重新编译即可。转载 2015-06-15 14:28:37 · 505 阅读 · 0 评论 -
request中url
1、request.getRequestURL()返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数。2、request.getRequestURI()得到的是request URL的部分值,并且web容器没有decode过的3、request.getContextPath() 返回 the context of the原创 2015-05-21 11:05:11 · 1124 阅读 · 0 评论 -
页面超链接下载
代码段:fileName = filePath.substring(filePath.lastIndexOf("/")+1);f=new File(localPath+"/"+fileName);in = new FileInputStream(f);fileByte = new byte[in.available()];in.read(fileByte);原创 2015-05-21 10:59:57 · 19988 阅读 · 0 评论 -
代码规范工具-Checkstyle使用手册
前段时间中心需要对外包的项目进行代码质量管理,所以在此对前段时间的工作做下总结。 现在很多开源工具都可以对代码进行规范审核,比较流行的有以下几款,大致给个简单介绍。 PMD:是一款采用BSD协议发布的Java程序代码检查工具,可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。 FindBugs:是一个静态分析工转载 2016-04-19 11:13:57 · 713 阅读 · 0 评论 -
关于已知两点经纬度求球面最短距离的公式推导
已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下:可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下。首先画个图(图1),要不然空间想象能力差的话容易犯糊涂。首先对图1做个大致的说明,红色的半圆表示赤道,蓝色的圆弧表示本初子午线(也就是经度为0的子午线)。球最上方是北极点,点A和点B分别为要计算的两个点,坐标分别为A(jA,wA)和B(jB,wB)。转载 2017-08-07 15:01:16 · 1231 阅读 · 1 评论 -
serialVersionUID作用
serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastEx转载 2017-04-26 16:13:04 · 330 阅读 · 0 评论 -
JVM Server与Client运行模式
JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升.原因是:当虚拟机运行在-client模式的时候,使用的是一个代号为C1的轻量级编译器, 而-server模式启动的虚拟机采用相对重量级,代号为C2的编译器. C2比C1编译器编译的相对彻底,,服务起来之后,性能更高.Java -versio转载 2017-05-08 15:06:07 · 353 阅读 · 0 评论 -
Java中值比较
最近发现一个问题,以前都没有注意到,特此记下备忘Java 对于值不在-128-127的包装类,不能用“==”进行比较,必须用equal方法例1: Integer a=127,b=127; a==b?true:false; //true a=128;b=128; a==b?true:false; //false a=125;b=125; a==原创 2017-04-12 14:32:08 · 1276 阅读 · 0 评论 -
Java 8 有用的新特性
1. 什么是λ表达式 λ表达式本质上是一个匿名方法。让我们来看下面这个例子: public int add(int x, int y) { return x + y; }转成λ表达式后是这个样子: (int x, int y) -> x + y;参数类型也可以省略,Java编译器会根据上下文推断出来: (x, y转载 2017-03-03 18:23:12 · 250 阅读 · 0 评论 -
c3p0参数解释
#最常用配置#initialPoolSize:连接池初始化时创建的连接数,default : 3,取值应在minPoolSize与maxPoolSize之间c3p0.initialPoolSize=10#minPoolSize:连接池保持的最小连接数,default : 3c3p0.minPoolSize=10#maxPoolSize:连转载 2016-10-17 17:33:11 · 377 阅读 · 0 评论 -
浅析Java中CountDownLatch用法
/**CountDownLatch类是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞程序继续执行CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束。下面以一个模拟运动员比赛的例子加以说明。*/转载 2016-10-14 14:03:04 · 268 阅读 · 0 评论 -
按位运算符& | ~ ^ >> <<
大多数语言都提供了按位运算符,按位运算符在c,c++等语言中运用广泛,而在JS,AS等脚本语言中则没有太多的应用例子,有时候,适当的使用按位运算符会取得很好的效果。下面根据自己的认知简单的谈一下js中的位操作使用(同样适用于其他语言),如果有错误,欢迎指正(本文中所有示例,都位一字节8位,具体位数因所使用的编程语言不同,而不同,java int型为4字节32位,位数不同会导致不同的计算结果请注原创 2016-08-15 12:43:59 · 4292 阅读 · 1 评论