java
长方体混凝土移动大师
牛一样的码农
展开
-
记一次no space left on device排查过程
某次部应用的时候发现“no space left on device”(磁盘空间不足)的问题,想来没有放多少东西,怎么就磁盘空间不足呢?首先使用df -h查看磁盘使用情况在使用df -i 查看inode使用情况发现:overlay 69G 69G 20K 100% /data/docker/overlay2/ca97a71198fcd04aadb5e45c22c6dda79de5793639818a17fcadf5db7a4d0d6a/mergedd原创 2022-04-07 13:41:53 · 1572 阅读 · 0 评论 -
intellj IDEA spring-boot打jar包 找不带第三方jar包
在pom文件中加入打包时候包含第三方包:<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeS原创 2022-01-26 13:18:16 · 442 阅读 · 0 评论 -
ConcurrentHashMap并发容器(java 8)
一、ConcurrentHashMap1、ConcurrentHashMap和HashMap一样都是一个哈希表,但是使用了完全不同的所策略;2、ConcurrentHashMap可以提供很好的并发性和可伸缩性。3、ConcurrentHashMap使用了一个更加细化的锁机制,为分离锁(锁分段技术),这个机制允许更深层次的共享。对于JDK1.7版本的实现, ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的Hashtable,它们有自己的原创 2021-09-16 17:22:50 · 237 阅读 · 0 评论 -
本地线程之ThreadLocal
ThreadLocal允许将每个线程与持有数值的对象关联起来。 ThreadLocal提供了get和set访问器,为每个使用它的线程维护一份单独的拷贝,所以get总是返回当前执行线程通过set设置的最新的值。使用ThreadLocal 变量来实现线程隔离。 ThreadLocal持有事务的上下文,当框架代码需要获得当前正在运行的哪个事务时,只需要从ThreadLocal中get事务的上下文即可,避免了多线程竞争导致的锁等消耗。//将数据库链接的key放到ThreadLocal本地线程中,那么每个线原创 2021-09-10 10:04:26 · 221 阅读 · 0 评论 -
Java类加载器
一、Java的类加载器 1、引导类加载器BootstrapClassLoader 引导类加载器负责加载系统类,主要是jar文件的rt.jar中进行加载;它是虚拟整体中的一部分,而且是由C语言实现的;引导类加载器没有对应的ClassLoader对象,就会返回null,例如:String.class.getClassLoader();//直接返回null 2、扩展类加载器ExtClassLoader 扩展类加载器主要用于加载jre/lib/ext目录加载标椎的扩展。可以将jar文件放在该目录原创 2021-09-07 09:02:37 · 186 阅读 · 0 评论 -
BIO、NIO、AIO、多路复用 IO 的区别
一、BIO同步阻塞同步阻塞式IO,服务器实现模式为一个连接一个线程;即客户端有连接请求时服务器端就需要启动一个线程进行处理;如果这个链接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。步骤:用户发出请求,一直等待数据是否准备好,没有准备好的话就一直等待;数据最备好以后,返回给用户(这种情况下用户和内核空间都会阻塞)用户再去请求下一个请求二、NIO同步非阻塞同步非阻塞式IO,服务器实现模式为一个请求一个线程;即客户端发送的链接请求都会注册到选择器上,选择器轮询到连接有原创 2021-08-12 10:26:05 · 397 阅读 · 0 评论 -
redis源码之NIO多路复用
一、Linux中的EPOLL模型 首先redis底层使用的是epoll来调用Linux模型来实现NIO多路复用,来实现高并发的过程; 其中epoll是Linux内核为处理大批量文件描述而做了改进的poll,是Linux下多路复用IO接口的增强版,显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率; epoll无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了,这也是redis,zookeeper,Netty的中NIO高效使用主要原创 2021-07-23 14:54:08 · 368 阅读 · 0 评论 -
记一次多并发导致数据重复的问题
一、问题在多并发条件下导致初始化数据重复。二、开发环境java8+SpringBoot2.0X+redis+oracle三、排查思路1、首先既然数据重复,那么是不是在insert into的时候出现了问题,那么用merge into不就行了吗?具体如下:MERGE INTO table_name aUSING (SELECT 1 FROM dual)ON (a.filed_name1='#{filed_name1}' and a.filed_name2='#{filed_name2}' .原创 2021-05-31 13:59:21 · 2245 阅读 · 0 评论 -
java.util.concurrent.locks之ReentrantLock
一、ReentrantLock概述ReentrantLock是API层面的互斥锁(lock()/unlock()方法配合try/finally配合使用);ReentrantLock高级功能:等待可中断、可实现公平锁,以及锁可以绑定多个条件;ReentrantLock的实现依赖于Java同步器框架AbstractQueuedSynchronizer(简称之为AQS),其中AQS使用一个整型的volatile变量(命名为state)来维护同步状态,马上我们会看到,这个volatile变量是Reentran原创 2021-03-09 14:00:31 · 378 阅读 · 0 评论 -
java.util.concurrent并发包之Semaphore
一、Semaphore类Semaphore是一个线程同步辅助类;可以维护当前访问自身线程的线程个数,比提供线程同步机制;Semaphore可以控制同时访问资源的线程数;Semaphore是一个计数器的信号量;Semaphore常用于限制可以访问某些资源的线程数量;二、Semaphore类的使用初始化;增加;减少;ExecutorService executorService = Executors.newCachedThreadPool();//初始化信号量,只允许3个线程同事访问原创 2021-03-04 13:33:19 · 324 阅读 · 2 评论 -
java.util.concurrent并发包之CyclicBarrier
一、CyclicBarrier类CyclicBarrier类可以实现一组线程相互等待,当所有的线程达到某个屏障点以后再做后续的操作;CyclicBarrier类是可重复的栅栏;二、CyclicBarrier类和CountDownLatch类的区别CyclicBarrier强调的是N个线程相互等待,只要一个线程的任务没有完成,所有的线程均在等待状态;CountDownLatch类则是一个线程等待多个线程完成某件事情;CyclicBarrier类则是多个线程相互等待,大家都完成以后再继续后面的事情;原创 2021-02-23 09:22:25 · 257 阅读 · 1 评论 -
批量删除redis中的keys
一、通用方法./redis-cli -h 127.0.0.1 -p 6379 keys "*plan*" | xargs ./redis-cli -h 127.0.0.1 -p 6379但是这样方法会出错,而且不好排查二、LUA脚本实现vim delete.lualocal key=KEYS[1]local list=redis.call("keys", key);for i,v in ipairs(list) do redis.call("del", v);end./re原创 2021-02-22 14:59:49 · 181 阅读 · 0 评论 -
java.util.concurrent并发包之CountDownLatch
一、CountDownLatch类CountDownLatch可以使一个线程在等待另外一个线程完成工作以后再继续执行;使用倒计时计数器实现;当每个线程成完成任务以后,计数器就会减一;当计数器数值为0 的时候,表示当前线程已经完成任务,然后恢复至CountDownLatch上的等待线程来继续完成任务;二、CountDownLatch的典型使用场景1、启动一个服务时,主线程需要等待多个组件加载完毕以后再继续执行;2、实现多个线程开始执行任务的最大并行性;注意是并行;三、CountDownLatc原创 2021-02-22 10:17:24 · 209 阅读 · 1 评论 -
java.util.concurrent并发包之Condition
一、Condition接口Condition可以通俗的立即为条件队列;当一个线程在调用await方法以后,直到线程等待的某个条件为真的时候,待会被唤醒;这种线程为简单的等待/通知模式;Condition必须和Lock配合使用,因为共享状态变量的访问发生在多线程环境下;final Lock lock = new ReentrantLock();final Condition ThreeConditon = lock.newCondition();final Condition SixCondit原创 2021-02-18 13:18:56 · 193 阅读 · 1 评论 -
CentOS8部署rabbitMQ以及在项目中的配置
一、部署rabbitMQ1、添加EPEL源dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm2、安装 Erlangdnf -y install wgetwget https://github.com/rabbitmq/erlang-rpm/releases/downl...原创 2020-04-27 10:15:21 · 1155 阅读 · 0 评论 -
玩转gitHub之上传代码
gitHub代码上传指令:git一般分:git add . ->将修改添加至本地缓存git commit -m 'msg' ->将本地缓存保存到本地仓库中git push ->将本地仓库推送至服务器git pull ->将服务器的代码更新到本地仓库中原创 2017-05-04 09:25:05 · 344 阅读 · 0 评论 -
设计模式六大原则(5):迪米特法原则
承接上文,我们继续讲道设计模式六大原则之心法----迪米特法原则。什么是迪米特法原则?定义:一个对象应该对其他对象保持最少的了解。心法要诀:即一个类应该尽量不要知道其他类太多的东西,不要和陌生的类有太多接触。核心要诀:低耦合,高内聚。那么迪米特法原则应用场景和招式是?问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案:尽量降低类与类之间的耦合原创 2017-02-13 13:40:01 · 897 阅读 · 0 评论 -
设计模式六大原则(6):开闭原则
洋洋洒洒数千言,至于就是最后的绝招了,也是最后一招心法了,其实这招心法就是前面几招心法的汇总,就像降龙十八掌最后三掌一样,蓄力而发。什么是开闭原则?定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。通俗的讲:就是说,我们在软件开发完成后,整个系统对修改关闭,对扩展开放。but现在我做的工作全部是对系统修改开发,对扩展也是开放,整个系统的代码容量非常大,很是苦恼。那么有什么解决方案呢原创 2017-02-13 14:02:15 · 325 阅读 · 0 评论 -
java io之FileDescriptor
今天小伙突然我FileDescriptor这个类有什么用?然后我就一脸懵逼的回答,我翻认识这个单词:“文件描述!”,这个类在Java中怎么用还真是不知道,于是我就开始看源码,百度,决定把它记录一下!首先什么是FileDescriptor?文件描述符。用来表示开放文件、开放套接字等。当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不原创 2017-03-02 15:07:18 · 672 阅读 · 0 评论 -
ThreadPoolExecutor线程池的创建和参数详解
(文章部分内容转载自:http://blog.csdn.net/zhouhl_cn/article/details/7392607,向大神致敬!)最近在做后再后台管理系统发送邮件的优化的时候需要用到线程池的实现ThreadPoolExecutor,来发送邮件,这也是JDK1.5以来,Java引入了强大的concurrent包,它给我们带来了极大的方便,但同时,对于该线程池不恰当的设置也可能使其效率原创 2017-03-13 09:58:21 · 903 阅读 · 2 评论 -
玩转gitHub之本地代码上传
gitHub,最好的大代码搬用工之一,至少我是这么认为的,今天就来记录下第一次使用gitHub之本地代码上传。首先是在github官网https://github.com去注册,得有你自己的账号密码,然后就是在gitHub创建你要传的代码仓库然后就是在你的账号中配置ssh key这点很重要,需要在你安装完gitHub的时候,在git bash中完成相关的额指令的操作:cd ~cd .ssh原创 2017-04-28 11:47:13 · 464 阅读 · 0 评论 -
设计模式六大原则(4):接口隔离原则
承接上文,我们继续设计模式六大原则的心法要诀四:接口隔离原则。什么是接口隔离原则?其要诀是啥?定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。要诀:接口最小化原则,强调的是一个接口拥有的行为应该尽可能的小。那么具体的场景和招式呢?问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需原创 2017-02-09 16:24:16 · 446 阅读 · 0 评论 -
设计模式六大原则(3):依赖倒置原则
前两回说到设计模式六大模式的两大心法,那么几天我们在看看这个第三大心法:依赖导致原则。什么是依赖倒置原则?定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。心法要诀:这个原则描述的是一个现实当中的事实,即实现都是易变的,而只有抽象是稳定的,所以当依赖于抽象时,实现的变化并不会影响客户端的调用。心法适用的场景以及招式:问题由来:类A直接依赖类B,假如要原创 2017-02-08 15:57:53 · 301 阅读 · 0 评论 -
设计模式六大原则(2):里氏替换原则
承接上文,今天说道设计模式六大原则中的里氏替换原则,相信有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。那这个里氏替换原则究竟在我们的程序中是怎样的一种存在呢?且看下文。里氏替换原则是个啥?定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以原创 2017-02-07 15:02:23 · 327 阅读 · 0 评论 -
设计模式六大原则(1):单一职责原则
从这篇博客开始,我将慢慢开垦Java中所涉及到的设计模式,闲言少叙,开干!首先我们为什么要学习和掌握设计模式呢?作为一个程序开发人员和维护人员,阅读优质的代码就像在呼吸新鲜的空气一样舒适,但是现实的环境确实重度的雾霾污染,导致很难弄清楚一个简单的文件导出功能为什么在一个木块中出现那么多次,而且换大量的时间的做对比后发现,他们的功能几乎是一样的,除了取数位置和烈数变化不一致以外。而且由于系统当初设计原创 2017-02-06 15:47:55 · 355 阅读 · 0 评论 -
JDK7与JDK8中HashMap的比较
在开始比较之前,还是老办法,我们队HashMap基本的知识做一个简单梳理和总结,然后在这个基础之上,对JDK8中HashMap的实现进行比较就比较的容易一了: 1、HashMap是非线程安全的; 2、HashMap的get()方法来获取获取map中的对象,当get(key)为空的时,map返回的object为null;put()方法将对应的对象放入的HashMap的桶子中;也是Has原创 2017-01-17 16:13:18 · 913 阅读 · 0 评论 -
BigDecimal类的加减乘除
在实际的开发中,再涉及数量以及钱的问题的时候,我们都会遇到小数点精度精度的问题,在上一篇的文章中简单的介绍了BigDecimal的小数点精度的问题,这篇文章中就BigDecimal类的加减乘除进行总结。方法:public BigDecimal(double val);//将double表示形式转换为BigDecimalpublic BigDecimal(int val);//将int表示形式转换原创 2017-01-10 15:24:20 · 988 阅读 · 0 评论 -
Java中JVM内存管理之标记/清除算法
在之前的一片文章中,介绍了Java中JVM内存管理的基本的原理和概念,这次就单独的算法和实现原理做一下简单的总结和归纳,同时也向各位大神学习,get新姿势。(参考文章来源:左潇龙的《JVM内存管理–GC算法精解(五分钟让你彻底明白标记/清除算法)》一文,原文链接:http://www.importnew.com/22996.html)这里我们主要解决的是理解标记/清除算法,那么我们首先得知道标记/转载 2017-01-13 15:07:51 · 1014 阅读 · 0 评论 -
格式化单位 kb/Mb/Gb/Tb
package com.demo.test;import java.math.BigDecimal;/** * Title: 格式化单位 kb/M/G/Tb * Description: TestDemo * @date:2016年11月25日 上午10:45:34 */public class TestFromtSize { /** * MethodsTitle: 格式原创 2016-11-28 09:22:21 · 916 阅读 · 0 评论 -
关于maven下载jar包失败的问题的总结和解决
问题描述: 在项目在SVN下载完成,maven在环境中部署完成后,导入项目到MyEclipse中出错,然而所有的jar包都下载失败。 问题分析: 重新检查了所有的部署环境和本地的仓库路径,确认都是正确的,束手无策之下百度到关于maven的问题解决和描述的精辟的总结: 在使用Maven私服Sonatype Nexus的时候,经常会出现依赖包找不到的问题.此时通过浏览器去原创 2016-03-15 16:46:27 · 61604 阅读 · 8 评论 -
Android开发中缓存Clean的工具类
在app应用开发中,我们经常性的遇到关于缓存的问题,那么我们可以在某些特定的操作多过程中,对缓存进行清理,这样就不会导致因为缓存二导致的问题。那么问题来了,在app中的缓存方式有几种?这些缓存的文件目录是什么路径?用什么方法删除?那么我们就在这些问题的指引下完成这个工具类。1、Android缓存分为:页面缓存和数据缓存。 (参考来源:http://www.rm5u.com/android/a转载 2016-12-07 13:39:39 · 748 阅读 · 0 评论 -
Java中容器基础知识小结
(全文转载至:http://blog.csdn.net/zhengqiqiqinqin/article/details/8434132#comments;作者:zhengqiqiqinqin)1.Collection List Set Map 区别记忆 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一转载 2017-04-24 10:38:30 · 309 阅读 · 0 评论 -
玩转gitHub之更新代码
$ cd ./你本地的代码路径下$ git remote add update_stream https://github.com/caption/boothBluePinter .git$ git remote -v$ git fetch update_st原创 2017-05-06 18:09:47 · 2761 阅读 · 0 评论 -
Spring AOP动态代理
Spring AOP中使用了两种动态代理:一种是JDK的动态代理:JDK的动态代理必须指定接口,这些接口都是已经被代理对象实现了的;一种CGLIB的动态代理:CGLIB代理则不需要指定接口。这里我主要用测试代码来重点解释JDK的动态代理。其jdk代理的核心其实就是实现InvocationHandler接口,然后通过Proxy.newProxyInstance(ClassLoader loa...原创 2019-07-17 13:29:38 · 192 阅读 · 0 评论 -
Windows服务器下在后台运行jar包
新建一个bat文件,输入:@echo offstart javaw -jar xxx.jarexit执行这个批处理程序就可以在后台运行jar包了原创 2018-11-15 09:42:45 · 5736 阅读 · 1 评论 -
springboot web 项目中页面无法回显上传的图片的问题
具体问题描述: 在图片上传以后再页面回显上传的图片,浏览器报错,如下:Not allowed to load local resource:files:///D:/image/XXX.png原因:因为浏览器会保护,不允许家在本地,自己弄一个虚拟路径即可.解决办法:注意:因为我是springboot web项目,所以这的方法适用于springboot web项目的。...原创 2018-08-01 15:35:50 · 2025 阅读 · 0 评论 -
关于Java中保留小数位的几种汇总
Java中的保留小数位的几种方法:1. 使用java.math.BigDecimalBigDecimal 计算和保留小数位是在Java最常用的,也是在财务或者是数据分析中比较重要的方法,要是计算不准确,会少很多钱的哦! 具体的方法有:BigDecimal.setScale(int newScale, int roundingMode);//设置格式化小数位//在这个方法中int...原创 2018-07-26 10:16:39 · 8083 阅读 · 0 评论 -
git提交代码问题解决
问题: ! [rejected] master -&gt; master (non-fast-forward)error: failed to push some refs to 'https://github.com/NULLcaption/xppfile.git'hint: Updates were rejected because the tip of your c...原创 2018-07-18 13:03:37 · 440 阅读 · 0 评论 -
SpringBoot工程下在外置的 tomcat 上传大文件 内存溢出问题解决
找到 tomcat 下 的bin 文件夹下的 :catalina.bat(window环境)catalina.sh(Linux环境下)加入set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx800M XX:MaxPermSize=128M 注意 Java8 的环境下是不需要设置X:MaxPermSize=128M...原创 2018-07-18 11:49:55 · 2385 阅读 · 0 评论 -
阿里云Windows服务器部署SpringBoot项目
一、购买阿里云Windows服务器; 二、部署环境: 1、tomacat部署 2、mysql部署 3、Java环境部署确认以上环境部署好完成以后在做一下操作,这点很重要四、打包springboot项目为war包,上传至部署好的tomcat目录下的webapps下。 五、启动tomcat 六、尝试访问。 注意:war打包和jar打包略有不同。...原创 2018-07-17 15:20:48 · 2057 阅读 · 0 评论