自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

captian_900331的博客

像牛一样的耕耘,但是不能像牛一样的活着!

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

原创 Netty学习一

Netty是一个基于Java的异步事件驱动的网络应用程序框架,它用于快速开发高性能、可扩展的网络服务器和客户端应用程序。Netty的设计目标是提供简单、高效的API,并且具备良好的性能、可靠性和可扩展性。Netty的主要特点包括:异步和事件驱动:Netty使用基于事件触发的异步编程模型,通过回调机制处理网络事件,提供高度并发和可伸缩性。高性能:Netty采用了零拷贝技术和基于事件驱动的非阻塞IO模型,能够处理大量并发连接,并提供较低的延迟和高吞吐量。

2023-08-10 14:20:03 347

原创 简单的RabbitMQ集成Springboot实现订单异步发送功能示例以及RabbitMQ的相关问题

【代码】简单的RabbitMQ集成Springboot实现订单异步发送功能示例。

2023-06-02 14:21:15 1348 1

原创 基于Redis实现的两种分布式锁实现方式

4.使用分布式锁:使用Redisson的RLock对象来实现分布式锁的获取和释放。例如在需要加锁的方法中,可以使用RLock.tryLock()方法来获取锁,并使用RLock.unlock()方法来释放锁。其中,关键的是使用Redisson的RLock对象来实现锁的获取和释放,而RLock对象可以通过RedissonClient创建。3.定义分布式锁接口:定义一个接口,并在接口上使用@FeignClient注解,指定调用的服务名和上下文路径,该接口的方法用于获取和释放分布式锁。

2023-05-31 15:23:01 1444

转载 oracle删除重复数据保留第一条记录

oracle

2022-07-25 16:46:14 620

原创 记一次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 1534

原创 oracle快速备份表

生产上线如何快速备份表:create table user_info as from select * from user_info;

2022-03-25 08:38:35 775

原创 Java中5种List的去重方

01、使用两个for循环实现List去重(有序)/**使用两个for循环实现List去重(有序) * * @param list * */ public static List removeDuplicationBy2For(List<Integer> list) { for (int i=0;i<list.size();i++) { for (int j=i+1;j<list.size();j++)

2022-03-07 13:46:30 172

原创 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 373

原创 ConcurrentHashMap并发容器(java 8)

一、ConcurrentHashMap1、ConcurrentHashMap和HashMap一样都是一个哈希表,但是使用了完全不同的所策略;​2、ConcurrentHashMap可以提供很好的并发性和可伸缩性。​3、ConcurrentHashMap使用了一个更加细化的锁机制,为分离锁(锁分段技术),这个机制允许更深层次的共享。对于JDK1.7版本的实现, ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的Hashtable,它们有自己的

2021-09-16 17:22:50 218

原创 本地线程之ThreadLocal

ThreadLocal允许将每个线程与持有数值的对象关联起来。​ ThreadLocal提供了get和set访问器,为每个使用它的线程维护一份单独的拷贝,所以get总是返回当前执行线程通过set设置的最新的值。使用ThreadLocal 变量来实现线程隔离。​ ThreadLocal持有事务的上下文,当框架代码需要获得当前正在运行的哪个事务时,只需要从ThreadLocal中get事务的上下文即可,避免了多线程竞争导致的锁等消耗。//将数据库链接的key放到ThreadLocal本地线程中,那么每个线

2021-09-10 10:04:26 182

原创 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 150

原创 BIO、NIO、AIO、多路复用 IO 的区别

一、BIO同步阻塞同步阻塞式IO,服务器实现模式为一个连接一个线程;即客户端有连接请求时服务器端就需要启动一个线程进行处理;如果这个链接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。步骤:用户发出请求,一直等待数据是否准备好,没有准备好的话就一直等待;数据最备好以后,返回给用户(这种情况下用户和内核空间都会阻塞)用户再去请求下一个请求二、NIO同步非阻塞同步非阻塞式IO,服务器实现模式为一个请求一个线程;即客户端发送的链接请求都会注册到选择器上,选择器轮询到连接有

2021-08-12 10:26:05 341

原创 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 341

原创 Zookeeper watcher事件机制源码剖析

一、zk的watcher机制的过程:1、客户端注册watcher2、服务端注册watcher3、服务端触发watcher事件3、客户端回调watcher二、客户端注册watcher有三种方式,可以调用getData,exists、getChildred实现 public Logger logger = LoggerFactory.getLogger(WatcherDemo.class); //zookeeper连接地址 private static String ZOOKEEP

2021-06-29 16:43:20 690

原创 记一次多并发导致数据重复的问题

一、问题在多并发条件下导致初始化数据重复。二、开发环境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 1999

原创 Mysql和oracle数据库的执行计划的区别

一、SQL执行计划execution plan数据库sql执行的具体的步骤;比如是通过时索引还是全表查询;连接查询的实现方式和连接顺序等;二、mySql的执行计划EXPLAIN SELECT t.id,t.user_name,t.phoneFROM table_name t其中explain支出select,update,delete,insert,replace的语句;查询缓存查看是否存在对应的缓存数据,如有则直接返回(一般有的可能性极小,因此一般建议关闭查询缓存)。交给解析器

2021-03-10 13:40:40 582

原创 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 300

原创 java.util.concurrent并发包之Semaphore

一、Semaphore类Semaphore是一个线程同步辅助类;可以维护当前访问自身线程的线程个数,比提供线程同步机制;Semaphore可以控制同时访问资源的线程数;Semaphore是一个计数器的信号量;Semaphore常用于限制可以访问某些资源的线程数量;二、Semaphore类的使用初始化;增加;减少;ExecutorService executorService = Executors.newCachedThreadPool();//初始化信号量,只允许3个线程同事访问

2021-03-04 13:33:19 242 2

原创 java.util.concurrent并发包之CyclicBarrier

一、CyclicBarrier类CyclicBarrier类可以实现一组线程相互等待,当所有的线程达到某个屏障点以后再做后续的操作;CyclicBarrier类是可重复的栅栏;二、CyclicBarrier类和CountDownLatch类的区别CyclicBarrier强调的是N个线程相互等待,只要一个线程的任务没有完成,所有的线程均在等待状态;CountDownLatch类则是一个线程等待多个线程完成某件事情;CyclicBarrier类则是多个线程相互等待,大家都完成以后再继续后面的事情;

2021-02-23 09:22:25 203 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 137

原创 java.util.concurrent并发包之CountDownLatch

一、CountDownLatch类CountDownLatch可以使一个线程在等待另外一个线程完成工作以后再继续执行;使用倒计时计数器实现;当每个线程成完成任务以后,计数器就会减一;当计数器数值为0 的时候,表示当前线程已经完成任务,然后恢复至CountDownLatch上的等待线程来继续完成任务;二、CountDownLatch的典型使用场景1、启动一个服务时,主线程需要等待多个组件加载完毕以后再继续执行;2、实现多个线程开始执行任务的最大并行性;注意是并行;三、CountDownLatc

2021-02-22 10:17:24 178 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 170 1

原创 H5跳转小程序填坑笔记

一、H5跳转小程序必须满足的几个条件1、开发使用者必须是已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序。2、开发使用者必须是已认证的非个人主体的小程序,使用小程序云开发的静态网站托管绑定的域名下的网页,可以使用此标签跳转任意合法合规的小程序。3、必须部署到正式服务器。4、必须是在已认证的服务号中做JS接口安全域名验证。注意:1、2两个条件必须满足其中一个;3、4两个条件必须满足,否则标签中的按钮不会显示(微信文档不讲武德,写的不清楚,稍微不注意就会掉坑)

2021-02-05 10:49:57 1504 2

原创 记一次Java多版本配置的坑

一般如果安装一切正常的话应该会出现相应的版本信息,不过有时候会出现不正常的情况。原因是你之前安装的java比你安装的jdk的版本低,就会出现这样的情况:Registry key 'Software/JavaSoft/Java Runtime Environment/CurrentVersion'has value '1.8', but '1.7' is required.Error: could not find java.dllError: could not find Java 2 Runtim

2020-10-21 13:05:40 200

原创 Windows和Linux中查某个端口占用

windows一、cmd进入运行窗口,用指令netstat -aon|findstr 端口号二、如图根据查到的pid找到运行的进程:tasklist|findstr “10924”三、资源管理其中将这个进程干掉即可。Linux一、输入netstat -tunpl |grep 端口号二、如图根据查到的pid找到这个运行的进程:ps -ef | grep PID(这个指令可以和top结合直接查出运行的应用程序的进程)三、kill -9 PID 即可...

2020-10-15 09:10:04 118

原创 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 1108

原创 Nginx部署多个spring-boot项目以及HTTPS证书

一般在模块项目中,每个模块几乎是独立的,这样也就有多个spring-boot项目,端口不一样,但是对外的端口我们只能是80端口,这种情况下我们就要使用nginx来做反向代理,来部署多个spring-boot项目。下面是nginx.conf中的基本的配置:server { listen 80; server_name 127.0.0.1; access_lo...

2020-04-09 11:37:20 1059

原创 JS验证身份证号码

/** * 验证身份证号码 */ isIdCardNo: function(num){ var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); var error; var varArray = new Array(); var intVal...

2019-12-11 09:41:33 183

原创 Spring AOP动态代理

Spring AOP中使用了两种动态代理:一种是JDK的动态代理:JDK的动态代理必须指定接口,这些接口都是已经被代理对象实现了的;一种CGLIB的动态代理:CGLIB代理则不需要指定接口。这里我主要用测试代码来重点解释JDK的动态代理。其jdk代理的核心其实就是实现InvocationHandler接口,然后通过Proxy.newProxyInstance(ClassLoader loa...

2019-07-17 13:29:38 156

原创 ora-01652无法通过128(在escalade表空间中)扩展temp段

问题:在oracle中报错ora-01652无法通过128(在escalade表空间中)扩展temp段解决办法:一、查看所有临时表的使用情况:select * from (Select a.tablespace_name, to_char(a.bytes / 1024 / 1024, '99,999.999') total_bytes, ...

2019-05-27 15:56:30 380

原创 Orcale创建索引语法

oracle中有5种索引方式:唯一索引,组合索引,方向索引,位图索引和基于函数的索引,这里主要就是最常用的几种创建索引的语法总结一下:一、创建索引的标准语法create index 索引名 on 表名(id) tablespace 表空间名删除索引drop index id_sid_kidfor eg:create index id_sid_kid on crm.crm_stock...

2019-05-27 15:27:28 877

原创 Linux下启动和停止springboot工程的脚本

在springboot项目启动有三种方式:1、运行主方法程序2、使用命令mvn spring-boot:run 在命令行运行3、使用 mvn packpage打包位jar文件以后,使用java -jar yourapp.jar命令行运行一般我们在开发的时候经常使用的是前面两种运行方式,在部署实施的时候使用的第三种方式,下面我们就重点说明下载linux环境中运行和停止springboot项目...

2019-02-15 16:01:11 4305 4

原创 Windows服务器下在后台运行jar包

新建一个bat文件,输入:@echo offstart javaw -jar xxx.jarexit执行这个批处理程序就可以在后台运行jar包了

2018-11-15 09:42:45 5707 1

原创 小程序开发天坑之-navigator 中无法跳转

在微信小程序开发中,遇到navigator中URL无法跳转的问题:我的代码:&lt;navigator class='content' hover-class="none" url="#"&gt;&lt;navigator &gt;这种时候点击没有反应,有两种情况:1.一般这种情况是路径没有配置对,并且控制台会报错。然而后台没有报错。那么就是下面的情况2.你配置的路径是tabbar里...

2018-10-24 14:29:57 5370

原创 Springboot学习路径之启动过程

前言Springbooot是Spring推出的微服务框架,也是最近几年比较火的微服务框架之一,Springboot最大的特点就是没有配置文件,基本都是全部自动配置完成,只需要开发者掌握Spring中各种注解和基础的web环境配置即可。从整体的结构来看,Springboot大部分都是Spring框架背后的一些概念和实践方式,只不过是在某些特定的场景做了固话和升华,让我们能更高效的做开发。一、Sp...

2018-10-09 16:10:04 1005

原创 vueJS环境搭建基本步骤

最近项目的需求,需要重新学习vueJS,在此记录vueJS环境搭建配置过程。一、首先要明确vueJS是基于nodeJS中的npm来做配置所以,首先得配置nodeJS,相关的配置直接去nodejs官网下载需要的安装包即可。环境检测如图:这里有一个小技巧:如果在cmd中直接使用npm来安装的一些工具的话会比较慢,所以我们使用淘宝的npm镜像:输入npm install -g cnpm –re...

2018-09-26 10:44:03 707

原创 简单记一笔:如何用jquery 获取多个input的值?

闲言少叙,上代码:&lt;html&gt; &lt;body&gt; &lt;input type="number" name="num" value="1"/&gt; &lt;input type="number" name="num" value="2" /&gt;

2018-08-06 11:21:31 19083

原创 springboot web 项目中页面无法回显上传的图片的问题

具体问题描述: 在图片上传以后再页面回显上传的图片,浏览器报错,如下:Not allowed to load local resource:files:///D:/image/XXX.png原因:因为浏览器会保护,不允许家在本地,自己弄一个虚拟路径即可.解决办法:注意:因为我是springboot web项目,所以这的方法适用于springboot web项目的。...

2018-08-01 15:35:50 1947

原创 关于Java中保留小数位的几种汇总

Java中的保留小数位的几种方法:1. 使用java.math.BigDecimalBigDecimal 计算和保留小数位是在Java最常用的,也是在财务或者是数据分析中比较重要的方法,要是计算不准确,会少很多钱的哦! 具体的方法有:BigDecimal.setScale(int newScale, int roundingMode);//设置格式化小数位//在这个方法中int...

2018-07-26 10:16:39 7965

原创 js计算时间差汇总

var startTime = "2017-04-04";var calculationTime = function(startTime) { var s1 = new Date(startTime.replace(/-/g, "/")), s2 = new Date(), runTime = parseInt((s2.getTime() - s1.getTime())...

2018-07-23 14:44:37 231

2019年最新国家统计局省市县区数据(编码+名称)

2019年最新国家统计局省市县区数据(编码+名称): 31|上海市|3101|市辖区|310107|普陀区|310107015|长寿路街道 31|上海市|3101|市辖区|310107|普陀区|310107017|石泉路街道 31|上海市|3101|市辖区|310107|普陀区|310107102|长征镇 31|上海市|3101|市辖区|310107|普陀区|310107103|桃浦镇 31|上海市|3101|市辖区|310107|普陀区|310107016|甘泉路街道

2020-10-27

linux命令大全

功能说明: 转换配置文件。 语 法: reconfig [Xconfig] XF86Config 补充说明: reconfig 指令能将 XFree86 3.1 及以前的版本的配 置文件,转成新的格式。现今的配置文件 XF86Config,存放在 /etc 或/etc/X11 目录下,它的格式包含了更多的信息,因此在 转换之后,您还须自行编辑设置文件,输入不足的部分。 startx(start X Window) 功能说明: 启动 X Window。 语 法: startx [程序][--服务器设置] 补充说明:startx 为启动 X Window 的 script 文件, 实际上启动 X Window 的程序为 xinit。 参 数: [程序] 此处所指定的[程序]为 X Window 所要 执行程序的配置文件。 [--服务器设置] startx 预设会去读 取.xerverrc 中的配置,决定启动 X Window 的方式。

2015-04-28

jQuery+AJAX+JSON

jQuery+AJAX+JSON新手总结,希望能帮到大家

2014-12-21

空空如也

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

TA关注的人

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