- 博客(154)
- 资源 (3)
- 收藏
- 关注
原创 Netty学习一
Netty是一个基于Java的异步事件驱动的网络应用程序框架,它用于快速开发高性能、可扩展的网络服务器和客户端应用程序。Netty的设计目标是提供简单、高效的API,并且具备良好的性能、可靠性和可扩展性。Netty的主要特点包括:异步和事件驱动:Netty使用基于事件触发的异步编程模型,通过回调机制处理网络事件,提供高度并发和可伸缩性。高性能:Netty采用了零拷贝技术和基于事件驱动的非阻塞IO模型,能够处理大量并发连接,并提供较低的延迟和高吞吐量。
2023-08-10 14:20:03 386
原创 简单的RabbitMQ集成Springboot实现订单异步发送功能示例以及RabbitMQ的相关问题
【代码】简单的RabbitMQ集成Springboot实现订单异步发送功能示例。
2023-06-02 14:21:15 1586 1
原创 基于Redis实现的两种分布式锁实现方式
4.使用分布式锁:使用Redisson的RLock对象来实现分布式锁的获取和释放。例如在需要加锁的方法中,可以使用RLock.tryLock()方法来获取锁,并使用RLock.unlock()方法来释放锁。其中,关键的是使用Redisson的RLock对象来实现锁的获取和释放,而RLock对象可以通过RedissonClient创建。3.定义分布式锁接口:定义一个接口,并在接口上使用@FeignClient注解,指定调用的服务名和上下文路径,该接口的方法用于获取和释放分布式锁。
2023-05-31 15:23:01 1533
原创 记一次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 1573
原创 oracle快速备份表
生产上线如何快速备份表:create table user_info as from select * from user_info;
2022-03-25 08:38:35 822
原创 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 206
原创 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
原创 ConcurrentHashMap并发容器(java 8)
一、ConcurrentHashMap1、ConcurrentHashMap和HashMap一样都是一个哈希表,但是使用了完全不同的所策略;2、ConcurrentHashMap可以提供很好的并发性和可伸缩性。3、ConcurrentHashMap使用了一个更加细化的锁机制,为分离锁(锁分段技术),这个机制允许更深层次的共享。对于JDK1.7版本的实现, ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的Hashtable,它们有自己的
2021-09-16 17:22:50 239
原创 本地线程之ThreadLocal
ThreadLocal允许将每个线程与持有数值的对象关联起来。 ThreadLocal提供了get和set访问器,为每个使用它的线程维护一份单独的拷贝,所以get总是返回当前执行线程通过set设置的最新的值。使用ThreadLocal 变量来实现线程隔离。 ThreadLocal持有事务的上下文,当框架代码需要获得当前正在运行的哪个事务时,只需要从ThreadLocal中get事务的上下文即可,避免了多线程竞争导致的锁等消耗。//将数据库链接的key放到ThreadLocal本地线程中,那么每个线
2021-09-10 10:04:26 224
原创 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 187
原创 BIO、NIO、AIO、多路复用 IO 的区别
一、BIO同步阻塞同步阻塞式IO,服务器实现模式为一个连接一个线程;即客户端有连接请求时服务器端就需要启动一个线程进行处理;如果这个链接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。步骤:用户发出请求,一直等待数据是否准备好,没有准备好的话就一直等待;数据最备好以后,返回给用户(这种情况下用户和内核空间都会阻塞)用户再去请求下一个请求二、NIO同步非阻塞同步非阻塞式IO,服务器实现模式为一个请求一个线程;即客户端发送的链接请求都会注册到选择器上,选择器轮询到连接有
2021-08-12 10:26:05 400
原创 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 371
原创 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 748
原创 记一次多并发导致数据重复的问题
一、问题在多并发条件下导致初始化数据重复。二、开发环境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 2258
原创 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 678
原创 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 385
原创 java.util.concurrent并发包之Semaphore
一、Semaphore类Semaphore是一个线程同步辅助类;可以维护当前访问自身线程的线程个数,比提供线程同步机制;Semaphore可以控制同时访问资源的线程数;Semaphore是一个计数器的信号量;Semaphore常用于限制可以访问某些资源的线程数量;二、Semaphore类的使用初始化;增加;减少;ExecutorService executorService = Executors.newCachedThreadPool();//初始化信号量,只允许3个线程同事访问
2021-03-04 13:33:19 328 2
原创 java.util.concurrent并发包之CyclicBarrier
一、CyclicBarrier类CyclicBarrier类可以实现一组线程相互等待,当所有的线程达到某个屏障点以后再做后续的操作;CyclicBarrier类是可重复的栅栏;二、CyclicBarrier类和CountDownLatch类的区别CyclicBarrier强调的是N个线程相互等待,只要一个线程的任务没有完成,所有的线程均在等待状态;CountDownLatch类则是一个线程等待多个线程完成某件事情;CyclicBarrier类则是多个线程相互等待,大家都完成以后再继续后面的事情;
2021-02-23 09:22:25 259 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
原创 java.util.concurrent并发包之CountDownLatch
一、CountDownLatch类CountDownLatch可以使一个线程在等待另外一个线程完成工作以后再继续执行;使用倒计时计数器实现;当每个线程成完成任务以后,计数器就会减一;当计数器数值为0 的时候,表示当前线程已经完成任务,然后恢复至CountDownLatch上的等待线程来继续完成任务;二、CountDownLatch的典型使用场景1、启动一个服务时,主线程需要等待多个组件加载完毕以后再继续执行;2、实现多个线程开始执行任务的最大并行性;注意是并行;三、CountDownLatc
2021-02-22 10:17:24 213 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 194 1
原创 H5跳转小程序填坑笔记
一、H5跳转小程序必须满足的几个条件1、开发使用者必须是已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序。2、开发使用者必须是已认证的非个人主体的小程序,使用小程序云开发的静态网站托管绑定的域名下的网页,可以使用此标签跳转任意合法合规的小程序。3、必须部署到正式服务器。4、必须是在已认证的服务号中做JS接口安全域名验证。注意:1、2两个条件必须满足其中一个;3、4两个条件必须满足,否则标签中的按钮不会显示(微信文档不讲武德,写的不清楚,稍微不注意就会掉坑)
2021-02-05 10:49:57 1613 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 226
原创 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 129
原创 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 1157
原创 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 1129
原创 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 257
原创 Spring AOP动态代理
Spring AOP中使用了两种动态代理:一种是JDK的动态代理:JDK的动态代理必须指定接口,这些接口都是已经被代理对象实现了的;一种CGLIB的动态代理:CGLIB代理则不需要指定接口。这里我主要用测试代码来重点解释JDK的动态代理。其jdk代理的核心其实就是实现InvocationHandler接口,然后通过Proxy.newProxyInstance(ClassLoader loa...
2019-07-17 13:29:38 192
原创 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 443
原创 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 933
原创 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 4359 4
原创 Windows服务器下在后台运行jar包
新建一个bat文件,输入:@echo offstart javaw -jar xxx.jarexit执行这个批处理程序就可以在后台运行jar包了
2018-11-15 09:42:45 5736 1
原创 小程序开发天坑之-navigator 中无法跳转
在微信小程序开发中,遇到navigator中URL无法跳转的问题:我的代码:<navigator class='content' hover-class="none" url="#"><navigator >这种时候点击没有反应,有两种情况:1.一般这种情况是路径没有配置对,并且控制台会报错。然而后台没有报错。那么就是下面的情况2.你配置的路径是tabbar里...
2018-10-24 14:29:57 5448
原创 Springboot学习路径之启动过程
前言Springbooot是Spring推出的微服务框架,也是最近几年比较火的微服务框架之一,Springboot最大的特点就是没有配置文件,基本都是全部自动配置完成,只需要开发者掌握Spring中各种注解和基础的web环境配置即可。从整体的结构来看,Springboot大部分都是Spring框架背后的一些概念和实践方式,只不过是在某些特定的场景做了固话和升华,让我们能更高效的做开发。一、Sp...
2018-10-09 16:10:04 1034
原创 vueJS环境搭建基本步骤
最近项目的需求,需要重新学习vueJS,在此记录vueJS环境搭建配置过程。一、首先要明确vueJS是基于nodeJS中的npm来做配置所以,首先得配置nodeJS,相关的配置直接去nodejs官网下载需要的安装包即可。环境检测如图:这里有一个小技巧:如果在cmd中直接使用npm来安装的一些工具的话会比较慢,所以我们使用淘宝的npm镜像:输入npm install -g cnpm –re...
2018-09-26 10:44:03 750
原创 简单记一笔:如何用jquery 获取多个input的值?
闲言少叙,上代码:<html> <body> <input type="number" name="num" value="1"/> <input type="number" name="num" value="2" />
2018-08-06 11:21:31 19237
原创 springboot web 项目中页面无法回显上传的图片的问题
具体问题描述: 在图片上传以后再页面回显上传的图片,浏览器报错,如下:Not allowed to load local resource:files:///D:/image/XXX.png原因:因为浏览器会保护,不允许家在本地,自己弄一个虚拟路径即可.解决办法:注意:因为我是springboot web项目,所以这的方法适用于springboot web项目的。...
2018-08-01 15:35:50 2038
原创 关于Java中保留小数位的几种汇总
Java中的保留小数位的几种方法:1. 使用java.math.BigDecimalBigDecimal 计算和保留小数位是在Java最常用的,也是在财务或者是数据分析中比较重要的方法,要是计算不准确,会少很多钱的哦! 具体的方法有:BigDecimal.setScale(int newScale, int roundingMode);//设置格式化小数位//在这个方法中int...
2018-07-26 10:16:39 8088
原创 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 248
2019年最新国家统计局省市县区数据(编码+名称)
2020-10-27
linux命令大全
2015-04-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人