Java编程语言
谁喝了我的菊花茶
IT民工、搬砖的、老实的80后
展开
-
30分钟学会如何使用Shiro
转自:http://www.cnblogs.com/learnhow/p/5694876.html本篇内容大多总结自张开涛的《跟我学Shiro》原文地址:http://jinnianshilongnian.iteye.com/blog/2018936我并没有全部看完,只是选择了一部分对我来说急需在项目中使用的知识加以学习。并且对于大多数第一次接触Shiro的同学来说,掌握这些也应该足够了。...转载 2019-06-06 15:43:36 · 136 阅读 · 0 评论 -
JAVA获取两个List的交集、差集以及并集
获取firstArrayList和secondArrayList的交集(两个集合相同的部分)、差集(两个集合不同的部分)以及并集(两个集合全并后的数据(不包含重复数据))。测试代码如下:import java.util.Set;import java.util.List;import java.util.HashSet;import java.util.TreeSet;import ...转载 2019-03-11 22:07:07 · 15488 阅读 · 1 评论 -
Java位运算
1. ^(亦或运算):针对二进制,相同的位为0,不同的为1public static void main(String[] args) { System.out.println("2^3运算的结果是 :"+(2^3)); //打印的结果是: 2^3运算的结果是 :1}2的二进制表示形式是:00103的二进制表示形式是:00112^3就为0001,结果就是1...原创 2019-03-11 01:43:13 · 101 阅读 · 0 评论 -
计算机原码、反码和补码
原码是什么?原码就是早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码举例说明: int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得: 00000000 00000000 00000000 00000011 int类型的...转载 2019-03-07 23:58:42 · 239 阅读 · 0 评论 -
Java 并发工具箱之concurrent包
概述java.util.concurrent 包是专为 Java并发编程而设计的包。包下的所有类可以分为如下几大类:locks部分:显式锁(互斥锁和速写锁)相关;atomic部分:原子变量类相关,是构建非阻塞算法的基础;executor部分:线程池相关;collections部分:并发容器相关;tools部分:同步工具相关,如信号量、闭锁、栅栏等功能;类图结构:脑图地址: h...转载 2018-12-29 09:41:16 · 116 阅读 · 0 评论 -
springmvc线程安全问题
对于使用过SpringMVC和Struts2的人来说,大家都知道SpringMVC是基于方法的拦截,而Struts2是基于类的拦截。struct2为每一个请求都实例化一个action所以不存在线程安全问题,springmvc默认单例请求使用一个Controller,假如这个Controller中定义了静态变量,就会被多个线程共享。所以springmvc的controller不要定义静态变量。如果要...转载 2018-12-28 22:36:16 · 324 阅读 · 0 评论 -
Java并发编程系列之Exchanger的使用
我们在看香港的警匪片的时候,经常会有这种画面,毒贩和贩毒的人,会先约定某个地点,然后进行一手交钱一手交白粉的勾当,其实这种场景使用jdk1.5并发包中的Exchanger类也可以实现,下面我们就用一个简单的示例,来模拟下这种场景,示例代码如下:public class ExchangeDemo { public static void main(String[] args) { ...转载 2018-12-20 22:46:01 · 175 阅读 · 1 评论 -
Java并发编程系列之CountDownLatch的使用
说到定时器,我们就会想到java中的Timer。在jdk1.5中,也提供了一个类似定时器功能的类CountDownLatch,只不过两者有些区别,CountDownLatch类同一时刻只能由一个线程去操作也就是说,在多线程并发下,同时只能由其中的一个线程去操作这个计时器。CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下...转载 2018-12-20 22:20:34 · 146 阅读 · 0 评论 -
Java并发编程系列之CyclicBarrier的使用
在日常活动中,经常会遇到这样一种场景:我们会约定在某个地点集合,等所有的组员都集合后,然后我们才开始活动,等活动结束后,所有的组员再一次集合,报道后再各自回家。在我们的程序中,也会经常遇到这种场景,需要所有的子线程都结束之后,再汇聚所有的结果,然后根据结果在决定下一步的操作,这个时候,我们就需要使用CyclicBarrier,进行线程的同步。下面先看一个简单的示例,代码如下:public cl...转载 2018-12-20 22:04:05 · 159 阅读 · 0 评论 -
Java并发编程系列之Condition的使用
Condition是做什么用的了?Condition是用来实现线程间通信的,说到这,可能很多人都想到了wait和notify以及notifyAll,没错,Condition的功能和他们类似,只是功能更强而已,下面我们就来学习一下线程间通过Condition来实现通信。Condition也是jdk1.5并发包下的一个接口,原型如下:public interface Condition {...转载 2018-12-20 22:01:03 · 226 阅读 · 0 评论 -
Java并发编程系列之Semaphore信号量的使用
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,它负责协调各个线程,以保证它们能够正确、合理的使用公共资源。一个计数信号量,从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire(),然后再获取该许可。每个release()添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore只对可用...转载 2018-12-20 22:00:14 · 96 阅读 · 0 评论 -
Java中callback回调机制解析
我们首先来看下面一段代码,这段代码是我们使用Jedis封装服务的一个实现:@Servicepublic class JedisSpringDemo { @Resource(name = "shardedJedisPool") private ShardedJedisPool shardedJedisPool; public String set(String...转载 2018-12-20 18:54:15 · 657 阅读 · 0 评论 -
Java并发编程系列之Lock的使用
Jdk1.5中,在java.util.concurrent.locks包下,有一组实现线程同步的接口和类,说到线程的同步,很多立马就会想到synchronized关键字,这是java内置的关键字,用来处理线程同步的,但这个关键字有很多的缺陷,使用起来也不是很方便和直观,所以就出现了Lock,下面,我们就来对比着讲解Lock。synchronized关键字:该关键字在使用的过程中会有如下几个...转载 2018-12-20 18:27:49 · 100 阅读 · 0 评论 -
java并发编程系列之ReadWriteLock读写锁的使用
我们来讲解一下ReadWriteLock锁的使用,顾明思义,读写锁在读的时候,上读锁,在写的时候,上写锁,这样就很巧妙的解决synchronized的一个性能问题:读与读之间互斥。ReadWriteLock也是一个接口,原型如下:public interface ReadWriteLock { Lock readLock(); Lock writeLock();}该接口...转载 2018-12-20 18:20:48 · 91 阅读 · 1 评论 -
分布式锁的几种实现方式
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致...转载 2018-12-18 23:25:12 · 108 阅读 · 0 评论 -
依赖、聚合、组合
依赖:形参够成依赖;聚合:成员变量形成聚合;组合:局部变量形成组合;原创 2019-03-10 10:21:24 · 228 阅读 · 0 评论 -
spring data jpa、 hibernate、 jpa 三者之间的关系
JPA规范与ORM框架之间的关系是怎样的呢?JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现,JBoss应用服务器底层就以Hibernate作为JPA的实现。既然JPA作为一种规范——也就说JPA规范中提供的只是一些接口,显然接口不能直接拿来使用。虽然应用程序可以面向接...转载 2019-06-03 15:01:00 · 110 阅读 · 0 评论 -
Java关于Try、Catch、Finally异常的传递
addSuppressed()方法开发人员对异常处理的try-catch-finally语句块都比较熟悉。如果在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中的语句也会执行。但是finally语句块在执行的过程中,也可能会抛出异常。如果finally语句块也抛出了异常,那么这个异常会往上传递,而之前try语句块中的那个异常就丢失了。如例:packag...转载 2019-03-11 23:47:18 · 659 阅读 · 0 评论 -
五种常用排序算法
五种常用排序算法public class Sort { public static void main(String[] args) { int[] nums = {45,32,67,12,90,54,21,103,47,27,96};// bubbleSort(nums);// selectSort(nums);// ...原创 2019-03-12 18:22:54 · 166 阅读 · 0 评论 -
Java字符串常见面试题6道
这篇来看看关于Java String类的5道面试题,这五道题,我自己在面试过程中亲身经历过几道题目,学完了这篇,我才焕然大悟,才知道为什么是这个答案,本篇就带你了解这些题的答案为什么是这样。1.判定定义为String类型的st1和st2是否相等,为什么package string;public class Demo2_String { public static void m...原创 2019-03-12 22:17:06 · 1401 阅读 · 0 评论 -
30分钟了解Springboot整合Shiro
转自:https://www.cnblogs.com/learnhow/p/9747134.html前言:06年7月的某日,不才创作了一篇题为《30分钟学会如何使用Shiro》的文章。不在意之间居然斩获了22万的阅读量,许多人因此加了我的联系方式咨询源码工程,只可惜当时并没有专门保留。2年后的今天在机缘巧合之下,我又重拾此话题。希望能带给小伙伴们在Springboot下如何使用Shiro,当然...转载 2019-06-06 15:47:15 · 105 阅读 · 0 评论 -
Future和FutureTask区别
上次介绍了Callable实现多线程的方法。现在介绍和Callable搭配的类。上一篇只是简单的用Callable做了一个demo。一、Future1.关于callable和runable的区别(上次已经介绍) Callable可以在任务结束的时候提供一个返回值Future对象,Runnable无法提供这个功能 Callable的call方法分可以抛出异常,而Runnabl...转载 2019-06-03 10:21:55 · 100 阅读 · 0 评论 -
Java类引用对象的get,set方法正确写法
publicDategetCreateDate(){returncreateDate==null?null:(Date)createDate.clone();}publicvoidsetCreateDate(DatecreateDate){this.createDate=createDate==null?null:(Date)...原创 2019-05-20 16:45:39 · 557 阅读 · 0 评论 -
Java内部类java提高篇(八)----详解内部类
转自:https://www.cnblogs.com/chenssy/p/3388487.html可以将一个类的定义放在另一个类的定义内部,这就是内部类。 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二)。第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类。...转载 2019-05-19 15:21:33 · 88 阅读 · 0 评论 -
Spring注解@Resource和@Autowired区别对比
转自:https://www.cnblogs.com/think-in-java/p/5474740.html@Resource和@Autowired都是做bean的注入时使用,@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但Spring支持该注解的注入。1、共同点两者都可以写在字段和setter方法上。如果写在字段上...转载 2019-05-17 09:53:15 · 77 阅读 · 0 评论 -
Java中的元注解和常用注解
Java内置注解:@Deprecated 意思是这个方法或类不再建议使用,可标注在构造方法、变量、局部变量、方法、参数、类型、包上; @Override 意思是重写父类的方法,标注在方法上; @SuppressWarnings 意思是抑制编译器产生警告信息,可标注在类、字段、方法、参数、构造方法,以及局部变量上 抑制单类型的警告:@SuppressWarnings("unchecked"...原创 2019-05-16 11:16:27 · 287 阅读 · 0 评论 -
相同Bean分别被Spring MVC子容器与Spring父容器初始化,导致@Value注入失败
转自:https://my.oschina.net/xianggao/blog/522267#OSC_h1_4#1 问题描述# 在车保养项目开发过程中,技术架构:Spring MVC +MyBatis;Service层接口中属性,如果使用注解@Value注入,不能够拿到Properties文件中拿到对应的key值;但在Spring配置文件applicationContext-xxx.xml...转载 2019-05-07 10:56:04 · 237 阅读 · 0 评论 -
hibernate缓存机制详细分析
转自:https://www.cnblogs.com/xiaoluo501395377/p/3377604.html在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题。随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存有更深的...转载 2019-05-06 14:40:52 · 103 阅读 · 0 评论 -
如何正确地写出单例模式
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。懒汉式,线程不安全当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。 ...原创 2019-04-02 00:00:59 · 76 阅读 · 0 评论 -
Java锁
synchronized 内置锁:互斥锁;JVM管理锁的生命周期;非公平锁;块结构加锁;ReentrantLock 重入锁:互斥锁;可中断锁获取操作;可设置为公平锁、非公平锁;非块结构的加锁;更加灵活;ReentrantReadWriteLock 读写锁:允许多个读线程并发地访问被保护的对象,能提高程序的可伸缩性。...原创 2019-03-26 08:57:22 · 76 阅读 · 0 评论 -
ArrayList和HashMap存储及扩容机制
ArrayList的底层是一个动态数组,ArrayList首先会对传进来的初始化参数initalCapacity进行判断:如果参数等于0,则将数组初始化为一个空数组;如果不等于0,将数组初始化为一个容量为参数值的数组。如果未传参数,则初始化为一个容量为默认值10的长度的数组。当数组的大小大于初始容量的时候(比如初始为10,当添加第11个元素的时候),就会进行扩容,新的容量为旧的容量...原创 2019-03-19 23:35:20 · 1618 阅读 · 0 评论 -
CAS和ABA问题的处理
compareAndSet这个方法主要调用unsafe.compareAndSwapInt这个方法,这个方法有四个参数,其中:第一个参数为需要改变的对象,第二个为偏移量(即之前求出来的valueOffset的值),第三个参数为expect(期待的值),第四个为update(更新后的值)。整个方法的作用即为若调用该方法时,value(当前值)与expect这个值相等,那么则将va...原创 2019-03-18 12:02:26 · 152 阅读 · 0 评论 -
Java中的wait/notify/notifyAll
wait、notify、notifyAll都是java.lang.Object类中的方法:public final native void wait() throws InterruptedException;public final native void wait(long millis, int nanos) throws InterruptedException;public f...原创 2019-03-14 12:14:28 · 139 阅读 · 0 评论 -
Spring动态代理
JDK动态代理和CGLIB字节码生成的区别?(1)JDK动态代理只能对实现了接口的类生成代理,而不能针对具体的类;(2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法因为是继承,所以该类或方法最好不要声明成final;在Spring中:1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP;2.如果目标没有实现接口则默认使用CGLIBB实现...原创 2019-03-13 09:53:49 · 76 阅读 · 0 评论 -
返射基本原理
反射的基本原理是根据字节码重新生成一个新的对象。原创 2019-03-13 07:51:04 · 118 阅读 · 0 评论 -
虚拟机会发生内存异常的各个区域汇总
会抛出OutOfMemoryError异常的区域:程序计数器、虚拟机栈、本地方法栈、Heap、方法区(运行时常量池)、直接内存;会抛出StackOverflowError异常的区域:虚拟机栈、本地方法栈;...原创 2019-03-13 07:50:03 · 177 阅读 · 0 评论 -
Java中字符编码问题和中文占几个字节的问题(ASCII Unicode UTF-8 )
转自:https://blog.csdn.net/qq_29232943/article/details/62235608ASCII码在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256...转载 2019-06-11 11:57:35 · 795 阅读 · 0 评论