
Java
一个好人-leo
腾云驾雾靠大数
展开
-
ThreadPoolExecutor-线程池的理解
1.再说线程池之前先了解下线程、用户级线程、内核级线程概念线程可以通过继承Thread,实现Runnable接口以及实现Callable接口来创建线程,它是比进程更小执行单位。 线程的生命周期和状态 用户级线程: 用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/核心态切换,...原创 2019-11-18 10:25:46 · 392 阅读 · 0 评论 -
ThreadLocal理解
1.ThreadLocal的类层级结构2.ThreadLocal作用ThreadLocal修饰的变量:使得每个线程都拥有该变量的本地副本。(你有你的,我有我的,你修改你的并不会影响我的变量的值)3.ThreadLocal使用场景适用于高并发场景下,各个线程通过不同变量值完成操作的场景。4.源码解析set(T value) get() remove()...原创 2019-11-12 18:09:35 · 322 阅读 · 0 评论 -
volatile关键字理解
1.JMM层面 每个线程从主内存中读取数据,读入自己的本地工作内存进行相应的修改,每个线程的本地工作内存相互独立的。因此这就可能造成一个线程读取内存的数据进行的相应的修改,但是没有及时的写入内存,造成其他线程读取到过时的数据,因此有数据不一致性问题。为了解决这个问题,我们可以使用volatile来定义该变量。2.特性可见性:一个线程修改了全局变量的值以后,其他线程也可见。实现机制是通...原创 2019-11-11 10:53:36 · 280 阅读 · 0 评论 -
Java关键字-synchronized理解
1.作用及版本多线程环境下用来控制资源同步访问的,同步控制的代码块是原子操作。 JDK1.6以前的synchronized是一把重量级锁,监视器锁(monitor),当一个线程获取到锁之后,其他线程想要获取锁就必须等待,也就是其他线程是阻塞状态(Blocked)。当前线程获取到锁执行完之后释放锁,这时阻塞队列里面的线程会去竞争锁,竞争到锁的线程又继续执行。由于这个时候发生了线程切换,因此...原创 2019-11-08 17:28:07 · 214 阅读 · 0 评论 -
JDK1.8-ArrayList-add/get/remove 源码流程解析
1.add(E e)2.get(int index)3.remove(Object o)4.安全性:ArrayList由于没有加同步和任何的锁机制,因此不是线程安全的。可能出现数组越界或者脏读等问题。想要线程安全可以使用Vector。5. remove(Object o)和remove(int index)区别:remove(Object o)返回true/fals...原创 2019-11-07 15:55:18 · 285 阅读 · 0 评论 -
JDK1.8-HashMap get/remove 操作流程解析
1. get(Object key)注意:如果Node数组不空的话,它每次都会去取数组第一个元素,看该元素的key以及key生成的hashCode值是否和传过去的Object key以及key生成的hash值是否分别对应相等,如果是的话,直接返回Node数组第一个元素,返回其value值。否则根据上图往下走。2.remove(Object key)...原创 2019-11-04 22:13:02 · 375 阅读 · 0 评论 -
JDK1.8-HashMap-Put操作源码流程解析
1.Put 操作流程图2.当put操作发生hash冲突的时候,会用拉链法解决冲突。但是如果在同一内存地址冲突的数据超过8个时,并且这个时候Node数组的容量大于等于64,那么这个时候再在该位置添加元素会把单链表变成双向链表最后再转换成红黑树来进行存储数据。采用红黑树存储数据目的是在该冲突的地址查询数据的时候能够更快,提高查询效率。存储结构转换图:3.红黑树为了保证其特定,在插入元...原创 2019-11-03 21:51:37 · 810 阅读 · 0 评论 -
JDK1.8-ReentrantLock.lockInterruptibly流程分析
1.ReentrantLock.lockInterruptibly流程图2. 注意该方法说明ReentrantLock是可中断锁,被中断后可以调用某个线程的是否中断方法(t1.isInterrupted)来确认该线程是否被中断。3.线程被中断后会报InterruptedException,我们可以捕获该异常,之后再做相应的业务逻辑处理。...原创 2019-10-22 15:50:07 · 237 阅读 · 0 评论 -
JDK1.8-ReentrantLock解锁过程
ReentrantLock解锁流程图实例代码package com.sap.leo.test;import com.sun.xml.internal.bind.v2.model.annotation.RuntimeAnnotationReader;import jdk.nashorn.internal.ir.Block;import java.util.concurrent....原创 2019-10-22 09:27:20 · 527 阅读 · 0 评论 -
JDK1.8-ReenrantLock 加锁过程
ReenrantLock 加锁过程流程图以及AQS队列入队情况2.公平锁与非公平锁区别非公平锁: 当锁释放的时候,获取锁的线程会和队列中第一个线程竞争锁资源,但是已经在队列中的线程还是按照先进先出的顺序去获取锁。 公平锁: 当锁释放的时候,队列中第一个线程会去获取锁资源。3.队列中元素如何出队?当t1释放资源,t2如果获取到锁,那么会把t2之前结点的指针都断开,让GC回收该结点...原创 2019-10-21 16:37:44 · 709 阅读 · 0 评论 -
Java-伪代码实现一把锁
1.多线程情况下自己手动模拟实现一把锁(伪代码)Version1.0:自旋 volatile int status = 0; //是否有线程获取到锁,0表示没有//主业务流程public static void testSync(){ thread.lock(); //当前线程尝试获取锁 ... //获取到锁之后处理业务逻辑 thread.unlock(); //...原创 2019-10-17 15:12:10 · 597 阅读 · 0 评论 -
防止XSS Attack攻击的解决方案
需求:1.防止用户RequestBody里面数据包含XSS Attack代码2.防止用户RequestURL地址中包含XSS Attack代码解决方案及思路:1.写个拦截器拦截用户请求,之后正则表达式去过滤RequestBody和RequestURL部分包含恶意攻击的代码。2.具体代码如下/** * Project Name: * File Name:Securi...原创 2019-03-21 17:35:00 · 2463 阅读 · 0 评论 -
Java_多线程模拟死锁过程
1.需求:通过Java程序来模拟死锁过程,之后通过Jconsole和Jstack分析死锁原因新起两个线程,互相拿着一个零界资源不放,并且又在请求一个新的资源,DeadLock1拿着obj1,想要obj2,DeadLock1拿着obj2,想要obj1,进而造成死锁。2.程序代碼/** * Project Name:JVM * File Name:JconsoleTest.jav...原创 2019-04-06 12:16:02 · 453 阅读 · 0 评论 -
使用Apache POI解析excel
1.使用Apache POI解析excel,包括.xls和.xlsxApache POI 针对Workbook有两种不同实现方式,分别是HSSFWorkbook(解析.xls文件)和XSSFWorkbook(解析.xlsx文件)2.Maven依赖:<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->...原创 2019-04-02 12:30:18 · 1172 阅读 · 0 评论 -
创建Excel,解析Excel,处理CSV Injection
1.使用Apache POI创建和解析ExcelMaven依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <groupId>org.apache.poi</groupId> <artifactId>po...原创 2019-04-02 17:08:30 · 961 阅读 · 0 评论 -
Java-正则表达式:匹配特定字符开头,数字结尾的任一字符串
1.需求:通过正则表达式去匹配特定字符开头,数字结尾的字符串我这里去匹配字符"+,-,@,="开头,数字结尾的字符串2.代码public class Test_Leo{ public static void main(String[] args) { String data = "=calc|A!Z 666"; Pattern pa...原创 2019-04-03 17:16:49 · 49457 阅读 · 1 评论 -
生成Excel,处理CSV Injection
1.问题原因:我们在界面填写好数据之后并生成excel,如果数据中是以"=+-@"开头,那么在我们Excel里面显示的时候会出现CSV Injection问题。2.如何解决:2.1解决思路:首先生成Excel的workbook,之后再遍历这个workbook,如果遇到以这些特殊字符开头的数据,那么把这些数据拿到之后,在其前面加一个TAB键。3.核心代码:import org.apa...原创 2019-05-07 15:40:35 · 1984 阅读 · 1 评论 -
SimpleDateFormat 全局变量在多线程环境中会出现线程安全问题
1.代码片段/** * Project Name:JVM * File Name:TestLeo.java * Description: TODO * Copyright: Copyright (c) 2017 * Company:SAP * * @author SAP * @date May 17, 2019 11:28:44 AM * @version *...原创 2019-05-20 17:56:01 · 900 阅读 · 0 评论 -
类锁、对象锁、多个线程一个锁、多个线程多个锁理解
原文参考:https://blog.youkuaiyun.com/qiushisoftware/article/details/79103702转载 2019-06-13 16:39:25 · 332 阅读 · 0 评论 -
重写equals为何要重写hashCode方法
参考:https://blog.youkuaiyun.com/We_chuan/article/details/96426273转载 2019-07-30 15:22:10 · 137 阅读 · 0 评论 -
通过反射获取Entity的数据
应用场景:有些时候SQL比较难拼接(比如说:不确定通过哪个字段获取数据),这个时候我们可以利用java反射来获取数据1.Entity 实体类:@Entity@Table(name = EntitlementDbConstants.CUSTOMER_MASTER_DATA_VIEW)public abstract class CustomerMasterDataView{ p...原创 2019-09-02 13:41:40 · 1578 阅读 · 0 评论 -
创建Entity,由于级联关系导致显示的时候会有n层嵌套问题
1.问题现象CustomerAttribute和CustomerAttributeText表,是1对N的关系,在保存CustomerAttribute的时候,把保存的结果返回给前台,会出现n层嵌套的问题。2.原因:级联导致3.解决方案:返回的数据不要直接返回CustomerAttribute,用dto去接,这样就没有级联n层问题...原创 2019-09-03 10:40:41 · 247 阅读 · 0 评论 -
java后台访问url 解析json格式数据
1、直接上代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection转载 2016-11-03 10:14:42 · 1014 阅读 · 0 评论 -
对集合里面Dto进行排序
对集合里面的Dto进行排序原文转载自:https://blog.youkuaiyun.com/xiaofei__/article/details/53138681转载 2019-01-03 16:01:54 · 1071 阅读 · 0 评论 -
mockito when void throw exception
1、执行一个void的方法进行mock并抛异常:doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);eg: doNothing().when(validateSaveOrUpdate).validatePartiallyUpdate(anyObject()); verify(validateSa...原创 2018-03-15 15:55:05 · 4203 阅读 · 0 评论 -
理解@Autowired,@Service,@Resource注解
1、参考文章: http://www.cnblogs.com/szlbm/p/5512931.html这篇文章讲的比较通俗易懂。转载 2017-02-23 10:55:06 · 411 阅读 · 0 评论 -
java 传参数时 类型后跟 3个点 "..." 的意义
1、直接看代码就知道什么含义了!public class StringDemo{ public static void main(String[] args){ testPoints("I love my job.");//一个参数传入 testPoints("you","and","me");//3个String参数传入 testP转载 2017-02-17 10:58:42 · 3673 阅读 · 0 评论 -
maven项目转换成web项目
1、原文引自: http://blog.youkuaiyun.com/hongchangfirst/article/details/7896283创建Web工程,使用eclipse ee创建maven web工程 1.右键项目,选择Project Facets,点击Convert to faceted from 2.更改Dynamic Web Module的Version为2.5.转载 2016-12-20 16:16:39 · 277 阅读 · 0 评论 -
关于JComboBox触发事件总是执行两次的问题
1、今天用到JcomBox,在JComboBox的监听事件时总是执行两次。代码如下:comboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { com转载 2016-11-02 10:34:42 · 3809 阅读 · 1 评论 -
exe4j制作exe文件
1、Eclipse导出Runnable jar file.选好程序的入口类2、exe4j中进行设置3、测试结果原创 2016-11-07 14:49:20 · 369 阅读 · 0 评论 -
构造函数返回值的理解
1、比如理解该代码:String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");1)实际就是两部分组成:String str = new String(request.getParameter("username").getBytes("iso-8859-原创 2016-09-21 16:54:00 · 473 阅读 · 0 评论 -
MyEclipse6.5.0安装Maven插件
1.首先需要删除myeclipse集成的maven4myeclipse(以本人myeclipse安装目录为例%ME_HOME% = D:\MyEclipse6.5): 1) 退出myeclipse程序,进入%ME_HOME%\myeclipse\eclipse\features, 删除com.genuitec.myeclipse.maven_6.5.0.zmyeclip转载 2016-09-09 15:27:51 · 1441 阅读 · 0 评论 -
Storm UI界面上出现的Spout Failed 问题解决方案!!!
这个问题比较麻烦!定位了很久(至少花了我10天左右的时间)才解决此问题!出现此问题的原因是:spout在默认超时时间(30s)内发射出去的Tuple没有被bolt处理就会出现spout failed。尝试解决问题的过程:1、调整bolt的worker、executor、task数目,希望能够解决问题。结果失败!2、调整修改默认超时时间(topology.me原创 2016-08-03 17:11:31 · 3996 阅读 · 0 评论 -
Java 读取system.properties文件
1、java读取system.properties文件,需要注意的是:读取配置文件的java代码最好应该和配置文件在同一个文件夹下面!2、测试读取配置文件代码package some.company.com;import java.io.IOException;import java.io.InputStream;import java.util.Propert原创 2016-08-03 17:14:16 · 1700 阅读 · 0 评论 -
Controller->Service->Repository
1.controller 层接受用户的HTTP请求2.Service 层由Controller层调用而来的,具体是处理业务逻辑3.Repository层也是DAO层,Service层调用Repository层的CRUD操作。4.代码示例:1)Controller层:@RestControllerpublic class TransactionDataCont原创 2017-06-18 18:31:42 · 1373 阅读 · 0 评论 -
把一个对象的字段和值进行格式化输出(多层嵌套)
原文参考 用到ToStringBuilder.reflectionToString方法1.数据格式[{ "action": "updateByUniqueId", "entitlements": [ { "guid": "c9d3175e8bff4abeaad2fcf066533159", "entitlementType": "test_y转载 2017-08-23 15:41:06 · 724 阅读 · 0 评论 -
JPA双向映射取值问题解决办法
1.JPA双向映射取值问题解决办法1)两个class entity:InboundNodeEntity 和InboundNodeDetailEntity 省略get ,set方法,并且这里的常量是定义在接口中的@Entity@Table(name=InboundNodeDbConstants.INBOUND_NODE_TABLE_NAME)public class InboundNodeEnti原创 2017-07-04 10:32:07 · 655 阅读 · 0 评论 -
Spring 注解@Transaction
@Transaction注解转载 2018-02-07 10:18:23 · 438 阅读 · 0 评论 -
JPQL语句查询出来的数据如何直接用DTO去接
1.JPQL语句这样写的:@Repositorypublic interface IEntitlementRelevantEntitlementViewRepository extends JpaRepository{ /** * * Title: findRelevantEntitlementViewByEntlGuid Descrip原创 2018-01-11 17:55:11 · 1107 阅读 · 0 评论 -
POSTMAN POST方式传入纯数组
主要关注其传入的参数格式: @PostMapping(value = "", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) @ApiOperation(value = "", notes = "", response = EntitlementRepositoryEditableColumnsDto.class) publ原创 2017-11-24 10:07:53 · 28004 阅读 · 3 评论