自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

那些年的代码

梅花香自古寒来

  • 博客(45)
  • 资源 (3)
  • 收藏
  • 关注

原创 ABA问题

CAS算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化。比如说一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出A,并且two进行了一些操作变成了B,然后two又将V位置的数据变成A,这时候线程one进行CAS操作发现内存中仍然是A,然后one操作成功。尽管线程one的CAS操作成功,但是不代表这个过程就是没有问题的...

2020-01-19 10:47:28 365

原创 FIFO、LRU、LFU的含义和原理

FIFO:First In First Out,先进先出LRU:Least Recently Used,最近最少使用LFU:Least Frequently Used,最不经常使用以上三者都是缓存过期策略。原理和实现:一、FIFO按照“先进先出(FirstIn,FirstOut)”的原理淘汰数据,正好符合队列的特性,数据结构上使用队列Queue来实现。如下图:1....

2020-01-16 16:57:09 463

原创 java 实现websocket的两种方式实例详解

目录一、介绍 二、方式一:tomcat 三、方法二:spring整合一、介绍1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket2.tomcat的方式需要tomcat 7.x,JEE7的支持。3.spring与websocket整合需要spring 4.x,并且使用了socketjs,对不支持websocket的浏览器可以...

2020-01-16 16:26:48 1207

原创 先进先出缓存算法(FIFO)--java实现

题目操作系统中的虚拟内存管理系统可采用先进先出算法的方式缓存。当请求的内存页不在缓存中。且缓存已满时,应从缓存中删除保存时间最长的页面,从而为请求页面腾出空间,如果缓存未满,可直接将请求页面添加到缓存中,给定的页面最多只应在缓存中出现一次。构造FIFO类的构造方法为countCacheMiss。该方法输入包括一个整数max_cache_size,和一个页面请求数组page_requ...

2020-01-16 14:12:51 638

原创 java构造简易的FIFO缓冲淘汰方法

在java中,通常可以使用HashMap作为cache来加速程序的运行。一般地,若对一个方法的结果进行缓冲,仅需要将方法的参数列表作为key,方法的返回结果作为value即可。但若程序对该方法访问过于频繁,大量的缓冲信息占用大量内存,严重的情况下会导致内存不足而异常退出。如果可以在HashMap达到一定大小后,自动删除最早放入HashMap那部分数据,就可以达到缓冲大小的控制。然而,HashM...

2020-01-16 11:00:15 239

原创 Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary up

Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.2787723636027878371.8082/work/Tomcat/localhost/taslyb2bbms] is not valid"...

2020-01-15 15:47:36 469

原创 nested exception is java.io.IOException: The temporary upload location

有一次请求post接口时报Org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException:The temporary upload location [/tmp/tomcat.27852...

2020-01-15 15:45:12 2459

原创 springboot临时文件存储目录配置

场景:上传文件功能报错,然后排查日志。报错日志:The temporary upload location [/tmp/tomcat.7957874575370093230.8088/work/Tomcat/localhost/ROOT] is not valid原因:在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会在操作系统的/t...

2020-01-15 15:43:28 4142

原创 SpringBoot上传文件报错,临时路径不存在

异常信息报错日志: The temporary upload location [/tmp/tomcat.7957874575370093230.8088/work/Tomcat/localhost/ROOT] is not valid 异常原因在linux系统中,springboot应用服务再启动(java -jar命令启动服务)的时候,会在操...

2020-01-15 14:29:50 1708

原创 SpringBoot: 浅谈文件上传和访问的坑 (MultiPartFile)

本次的项目环境为 SpringBoot 2.0.4, JDK8.0. 服务器环境为CentOS7.0, Nginx的忘了版本.前言SpringBoot使用MultiPartFile接收来自表单的file文件,然后进行服务器的上传是一个项目最基本的需求,我以前的项目都是基于SpringMVC框架搭建的,所以在使用SpringBoot的时候进行MultiPartFile上传遇到了坑,...

2020-01-15 14:29:20 2212 1

原创 Java中的CAS实现原理

一、什么是CAS? 在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新,则写入将失败。 操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应(...

2020-01-14 10:57:15 173

原创 java并发-原子性

原子性就是指该操作是不可再分的。java.util.concurrent.atomic中有一组使用无锁算法实现的原子操作类。AtomicInteger、AtomicBoolean、AtomicLong 外还有AtomicReference 。它们分别封装了对整数、整数数组、长整型、长整型数组和普通对象的多线程安全操作。这些都是居于CAS算法实现的。CAS即:Compare and Sw...

2020-01-10 18:38:00 88

原创 用ATOMICSTAMPEDREFERENCE解决ABA问题

在运用CAS做Lock-Free操作中有一个经典的ABA问题:线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不同了,尽管CAS成功,但可能存在潜藏的问题,例如下面的例子:现有一个用单向链表实现的堆栈,栈顶为A,这时线程T1已经知道A.next为B,...

2020-01-10 18:01:41 111

原创 for(;;)和while(true)的区别

总结 for(;;) 比 while(true) 好为啥:如下(底层完全不同)“死循环”有两种写法:for(;;)和while(true),两者有啥区别,为啥源码中多数是for( ; ; )这种形式的, 编译前 编译后 while (1); mov eax,1 test eax,eax ...

2020-01-10 17:37:41 137

原创 CountDownLatch的理解和使用

在笔者想要了解Thrift时候,找到一个博主写的系统间通信技术的架构设计,在了解和学习的过程中遇到很多小问题和基础知识,自己还是不够清楚,就查询和总结下。因为笔者也都是从网上找的一些资料,好的资料笔者都是自己收敲一遍,这样觉得能够加深下印象,引发更多的思考,毕竟很多时候笔者感觉自己都是七秒的记忆。在第一篇文章中遇到了一个CountDownLatch同步计数器,当计数器数值减为0时,所...

2020-01-10 16:14:25 123

原创 countDownLatch

1.背景:countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。 存在于java.util.cucurrent包下。2.概念countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。 是通过一个计数器来实现的,计数器的初始值是线...

2020-01-10 15:31:21 76

原创 websocket @ServerEndpoint(value = "/websocket/{ip}")详解

WebSocket是JavaEE7新支持的:Javax.websocket.server包含注解,类,接口用于创建和配置服务端点Javax.websocket包则包含服务端点和客户断电公用的注解,类,接口,异常创建一个编程式的端点,需要继承Endpoint类,重写它的方法。创建一个注解式的端点,将自己的写的类以及类中的一些方法用前面提到的包中的注解装...

2020-01-10 10:16:47 3842 1

转载 Java原子性操作之——Atomic包的原理分析

Atomic: Atomic包是java.util.concurrent下的另一个专门为线程安全设计的java的包,包含多个原子性操作的类。基本特性就是在多线程情况下,当多个线程想要同时操作这些类的某些实例方法时,具有排他性,也就是当某个线程在执行某个方法时,不会被其他线程打断,其他线程会在外部等待,一直等到该方法执行完毕,才由JVM从等待队列中选择另一个线程进入,这只是一种逻辑上的理...

2020-01-09 18:58:08 157

原创 CAS原理

1、什么是CAS?CAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。2、CAS算法理解对CAS的理解,CAS是一种无锁算法,CAS...

2020-01-09 18:25:39 90

原创 java线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束!!!

今天同事突然提出问题说用哪个线程池好,newFixedThreadPool和newCacheThreadPool里选择,说固定大小线程池keepAliveTime=0,线程空闲会立马回收线程从而节约资源,然后另外一个同事说,0是代表永远不回收,我记忆里也是记得0是永久存活,因为网上很多博客啊,资料啊都是说的0表示线程永久存活在空闲的时候。前面那位同事也是从字面上认为的,没有经过验证,觉得-1才是永...

2020-01-09 15:53:19 794

原创 ThreadPoolExecutor 线程池Demo

package threadPoolExecutor;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;//自定义线程池public class ThreadPoolEx...

2020-01-09 15:14:42 219

原创 websocket @ServerEndpoint注解说明

首先我们查看一下ServerEndpoint类源码:@Retention(value = RetentionPolicy.RUNTIME)@Target(value = {ElementType.TYPE})public @interface ServerEndpoint { public String value(); public String[] subpro...

2020-01-09 10:17:43 4673

原创 Java实现文件写入——IO流(输入输出流详解)

输入输出的重要性:输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据。流是一组有序的数据序列,根据操作的类型,分为输入流和输出流。程序从输入流读取数据,向输出流写入数据。Java是面向对象的程序语言,每一个数据流都是一个对象,它们提供了各种支持“读入”与“写入”操作的流类。Java的输入输出功能来自java.io 包中的InputStream...

2020-01-08 17:35:36 529

原创 Java输入输出流(一)#

Android 是基于 Java 语言编写的,在安卓程序的很多时候会用到有关 I/O 操作,要在 Adroid 中使用 I/O 操作就必须学会 Java 的 I/O 操作。首先要知道的是,Java 中输入和输出的概念都是对于程序来说的。就是 外部往程序输入,程序向外部输出。外部往程序输入,则程序必须去 读 取外部,程序向外部输出,则程序必须去 写 给外部。在外部和程序之间,Java 分别通过 ...

2020-01-08 17:30:33 191

原创 HttpRequest获得服务端和客户端的详细信息

request.setCharacterEncoding("utf-8");//设置request编码方式request.getLocalAddr();//获取本地IP,即服务器IPrequest.getLocalName();//获取本地名称,即服务器名称request.getLocalPort();//获取本地端口号,即Tomcat端口号request.getLocale();//用户...

2020-01-07 17:56:01 904

原创 java8中的stream().filter()的使用和Optional()

https://www.cnblogs.com/yimiyan/p/5992440.htmlOptional:https://www.cnblogs.com/zhangboyu/p/7580262.html@RequestHeader的使用//@RequestHeader:获取浏览器头信息:限制请求头中必须有User-Agent//User-Agent:封装了浏览器的信息/...

2020-01-07 17:09:25 1533

原创 java8 stream filter 简单使用

如下代码: public static void main(String[] args) { // 存储0-9的列表 List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(i);...

2020-01-07 17:06:58 343

原创 java GZIP压缩与解压缩

1.GZIP压缩 public static byte[] compress(String str, String encoding) { if (str == null || str.length() == 0) { return null; } ByteArrayOutputStream out = new...

2020-01-07 11:57:16 2634

原创 Java实现Base64加解密的方式

Java实现Base64加解密的方式主要有以下四种(推荐度由低到高):1:JDK中的sun.misc套件2:第三方扩展包 bouncy castle3:第三方扩展包 commons codec4:JDK8及更高版本中的 java.util.Base64JDK中的sun.misc套件使用较为麻烦,首次使用找不到包,需要对Eclipse做相关配置相关问题的参考链接:解决Eclipse中无...

2020-01-07 11:15:49 400

原创 Java 8跳过本次循环,继续执行以及跳出循环,终止循环的代码实例

在Java8之前,最开始使用for i 循环,很老旧,后来有了高级的for each 循环,然后这个跳出本次循环和跳出所有的for循环,都简单,稍微没见过的就是跳出多层for循环。然后就是Java8出的foreach循环,这个循环里面,break和continue都不管用啦。需要使用return,这个只能跳过本次循环,还是会继续执行for循环的,那么怎么跳出这个Java8的foreach循环呢...

2020-01-07 11:02:04 2025

原创 什么是GZIP,开启GZIP有什么好处

GZIP是网站压缩加速的一种技术,对于开启后可以加快我们网站的打开速度,原理是经过服务器压缩,客户端浏览器快速解压的原理,可以大大减少了网站的流量。1.什么是GZIP答:GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压...

2020-01-06 17:13:51 2351

原创 小巧实用的 HTTP 代理抓包工具:mitmproxy

常见的http代理有:Fiddler、Charles以及下来要介绍的Mitmproxy,几款抓包软件本人都使用过,可以说是各有各的特点。Mitmproxy小巧强大,最吸引我的是它支持加入Python脚本,方便开发人员直接处理监听到的数据。Explicit HTTP安装这步比较简单,直接pip install mitmproxy,或者自行下载安装包。更多更详细的安装说明可以查看这...

2020-01-06 11:25:24 347

原创 react-native init的时候出现问题:npm WARN React-native@0.35.0 requires a peer of react@~15.3.1 but none was

react-native init的时候出现问题:报错信息npm WARN React-native@0.35.0 requires a peer of react@~15.3.1 but none was installed.解决方案:方法一:npm install -save react@~15.3.1方法二:在package.json中可以添加依赖"dependenc...

2020-01-06 11:13:43 673

原创 MyBatis的Mapper文件的foreach标签详解

MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据。如:使用foreach来拼接in子语句。在学习MyBatis Mapper文件的foreach标签时我们先看看DTD是如何定义的?DTD代码如下: 1 2 3 4 5 6 7 8 9...

2020-01-05 11:09:46 1978

原创 jquery利用attr、prop方法获取、设置input的checked属性

在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr,需要的朋友可以参考下。1、prop方法获取、设置checked属性<input type="checkbox" name="checkboxMain" οnclick="CheckAll(this);" />function CheckAll(obj) { //获取checked属性...

2020-01-05 11:08:47 580

原创 StringRedisTemplate的使用(巨详细)

StringRedisTemplate的使用 redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTe...

2020-01-05 11:08:09 859 2

原创 Redis Scan的使用方式以及Spring redis的坑

SpringRedisTemplate针对这个Scan进行了封装,示例使用(针对最新库spring-data-redis-1.8.1.RELEASE):Set<Object> execute = redisTemplate.execute(new RedisCallback<Set<Object>>() { @Override public S...

2020-01-05 10:33:08 232

原创 Spring 注解配置——@Autowired

@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。通过 @Autowired的使用来消除 set ,get方法。在使用@Autowired之前,我们对一个bean配置起属性时,是这用用的<property name="属性名" value=" 属性值"/> 通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 ...

2020-01-05 10:24:49 129

原创 Java中的long类型和Long类型比较大小

Java中我们经常要做一些判断,而对于判断的话,用的最多的便是“>”、“==”、“<”的比较,这里我们进行一个Long类型数据和long类型数据的比较大小的讲解。Java中Long和long的区别Java的数据类型分为两种:1、基本类型:byte(8),short(16),int(32),long(64),float(32),double(64),char(16),boolea...

2020-01-04 09:14:28 1017

原创 java 操作Redis Set 命令 实例(Jedis)

package com.jjf.redis;import org.junit.Assert;import org.junit.Test;import redis.clients.jedis.Jedis;import redis.clients.jedis.Pipeline;import redis.clients.jedis.ScanResult;import java.uti...

2020-01-04 09:11:02 741

Java异常面试题.pdf

Java异常面试题

2021-04-07

设计模式面试题.pdf

设计模式面试题

2021-04-07

BIO,NIO,AIO,Netty面试题.pdf

BIO,NIO,AIO,Netty面试题

2021-04-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除