- 博客(29)
- 收藏
- 关注
原创 Jenkins配置QQ邮箱邮件发送
在这个界面可以生成授权码以及查看配置发送邮件的方法。首先需要开通qq邮箱发送服务。进入系统管理-->系统配置。找到发送邮件的扩展服务。配置结束后进行保存测试。
2023-04-14 02:41:26
293
原创 DelegatingFilterProxy注入servletContext容器
DelegatingFilterProxy注入servletContext容器
2022-11-01 19:25:52
290
原创 JUC-线程池
一、为什么使用自定义线程池?首先,在实际生产中肯定是要使用线程池的,而且要自定义线程池,为什么呢?这点参考阿里巴巴开发手册二、ThreadPoolExecutor七大参数我们先来看一下ThreadPoolExecutor的七大参数int corePoolSize:核心线程数大小int maximumPoolSize:最大线程数long keepAliveTime:空闲线程存活时间TimeUnit unit:keepAliveTime的单位BlockingQueu..
2022-05-13 02:17:58
288
原创 synchronized和Lock有什么区别?用新的lock有什么好处?
1.原始构成 synchronized是关键字属于JVM层面 monitiorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同步代码块或方法中才能调wait/notify等方法) monitorexit Lock是具体类(java.util.concurrent.locks.Lock)是api层面的锁2.使用方法 synchronized不需要用户去手动释放所,当synchronized代码执行.
2022-05-12 20:57:49
153
原创 JUC-CyclicBarrier的使用
CyclicBarrier说白了就是如果等待线程数达到指定的数量后才执行指定的程序。代码:public class CyclicBarrierDemo { public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> { System.out.println("********召唤神龙");
2022-05-12 16:05:22
883
原创 JUC-CountDownLatch的使用
话不多说上代码:public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(6); for (int i = 1; i <= 6; i++) { new Thread(()->{
2022-05-12 15:42:31
169
原创 java当中的各种锁(公平锁、非公平锁、可重入锁、自旋锁、读写锁)
一、公平锁和非公平锁公平锁:就是很公平,在并发情况下,每个线程在获取锁时会查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照FIFO的规则从队列中取到自己。(按先后顺序执行)非公平锁:非公平锁比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采取类似公平锁那种方式。例如:new ReentrantLock();默认是非公平锁,如果在参数列表加入true则为公平锁,加入false则为非公平锁。特点:非公平锁执行效率快,吞吐
2022-05-12 14:19:45
1883
原创 ArrayList线程不安全问题解决
我们直接上代码来演示线程不安全问题: public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i < 30; i++) { new Thread(()->{ list.add(UUID.randomUUID().toString().s
2022-05-12 00:08:56
204
原创 seata踩坑记录
1.myabtis中的xml文件中名不要加飘号``否则会报Caused by: io.seata.common.exception.ShouldNeverHappenException: Could not found any index in the table: `wms_ware_sku`如:2.properties配置文件中组名要与file.conf中一致否则会报i.s.c.r.netty.NettyClientChannelManager : no available se
2022-05-08 15:03:11
513
1
原创 SpringBoot中事务@Transational的一个坑
如果一个方法调用了同一个类中的其他方法那么其他方法在@Transational注解中的propagation属性中无论设置什么样的值都不会生效代码举例: @Transactional(propagation = Propagation.REQUIRED) public String a(){ b(); c(); return "aaa"; } @Transactional(propagation = Propagati
2022-05-08 00:56:15
502
原创 volatile指令禁止指令重排和可见性
我们在加了volatile指令修饰后,在汇编代码当中被volatile修饰的变量在被赋值之后会多了一个“lock addl $0x0,(%esp)”操作,这个操作相当于一个内存屏障(指令重排序时不能把后面的指令重排序到内存屏障之前的位置),这里就保证了禁止指令重排。“lock addl $0x0,(%esp)”操作的含义是将ESP寄存器的值加0,那么有什么意义呢?这里我们就要说一下lock操作了,如果对一个变量执行lock操作,那将会清空工作内存中此变量的值,在执行引擎使...
2022-05-08 00:35:59
573
原创 volatile不保证原子性
这里我们先来分析一段代码:class MyData{ volatile int number = 0; //请注意,此时number前面时加了volatile关键字修饰的,volatile不保证原子性 public void addPlusPlus(){ number ++; } }public class VolatileDemo { public static void main(String[] args)
2022-05-05 12:07:14
184
原创 CAS底层原理
我们以这段代码为例进行讲解:class MyData{ AtomicInteger atomicInteger = new AtomicInteger(); public void addMyAtomic(){ atomicInteger.getAndIncrement(); }}public class VolatileDemo { public static void main(String[] args) { My
2022-05-05 12:06:56
285
原创 volatile保证可见性
首先,每个线程都有自己的工作内存(每个线程私有),而执行任务时,要先从主内存(公共)读取要操作的变量,拷贝到自己的工作内存当中,然后对变量进行操作,操作完成后要将变量重新写入主内存当中。我们可以看到每个线程操作变量的执行流程大概是上图所示的样子那么我们来进行代码实践:class MyData{ int number = 0; public void addT060(){ this.number = 60; }}/** * 1.验证v
2022-05-04 17:05:55
243
原创 购物车实现过程
购物车:1.购物车跟用户的关系?a)一个用户必须对应一个购物车【一个用户不管买多少商品,都会存在属于自己的购物车中。】b)单点登录一定在购物车之前。2.跟购物车有关的操作有哪些?a)添加购物车。i.用户未登录状态.1. 添加到什么地方?未登录将数据保存到什么地方?......
2022-05-04 14:50:58
735
原创 Elasticsearch 和 solr 的区别
背景:它们都是基于Liceme搜索服务器基础之上开发,一款优秀的,高性能的企业级搜索服务器【是因为他们都是基于分词技术构建的倒排索引的方式进行查询】开发语言:Java语言诞生时间Solr:2004年诞生Es:2010年诞生Es更新【功能更强大】区别:1.当时是建立索引的时候,solr会产生io阻塞,而es不会,es查询行呢个要高于solr。2.在不断动态添加数据的时候,solr的检索效率会变得地下,而es则没有什么变化。3.Solr利用zookeeper进行分布式管理
2022-05-04 14:34:42
1058
原创 Redis在项目中的使用场景
数据类型 使用场景 String 比如说,我想知道什么时候封锁一个IP地址,Incrby命令 Hash 存储用户信息 List 实现最新消息的排行,还可以利用List的pyush命令,将任务存在list集合中,同时使用另一个命令,将任务从集合中取出[pop] Redis-list数据类型来模拟消息队列。【电商中的秒杀就可以采用这种方式来完成一个秒杀活动】 Set 特殊之处:可以自动排重。比如说微博中将每个人的好友存在集合(
2022-05-04 11:11:46
533
原创 MySQL什么时候创建索引?
索引:MySQL官方对索引的定义为:索引(index)是帮助MySQL高校获取数据的数据结构优势:1.类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本2.通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗劣势:1.虽然索引大大提高了查询速度,同时回降低更新表的速度,如对表进行INSERT、UPDATE、和DELETE。都会因为更新表时,MySQL不仅要保存数据,还要保存以下索引文件每次添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。2
2022-05-04 10:50:41
1137
原创 git分支相关命令
创建分支git branch <分支名>git branch -v 查看分支切换分支git checkout <分支名>一步完成:git checkout -b <分支名>(创建并切换分支)合并分支先切换到主干分支 git checkout mastergit merge <分支名>删除分支先切换到主干 git checkout mastergit branch -D <分支名>...
2022-05-04 01:53:32
109
原创 Mybatis中当实体类中的属性名和表中的字段名不一样,怎么办?
解决方法:1.写sql语句时起别名2.在Myatis的全局配置文件中开启驼峰命名规则<!-- 开启自动驼峰命名规则(camel case)映射 --><setting name="mapUnderscoreToCamelCase" value="true"/>如果使用的是springboot则可以在配置文件中添加以下配置:mybatis-plus.configuration.map-underscore-to-camel-case=true3.在Mapp
2022-05-04 01:37:47
228
原创 数据库事务并发问题
1.并发问题假设现在又两个事务:Transation01和Transaction02并发执行。1)脏读①Transation01将某条记录的age值从20修改为30.②Transation02读取了Transation01更新后的值:30③Transation01回滚,age值恢复到了20.④Transation02读取到的30就是一个无效的值。2)不可重复读①Transation01读取到了age为20.②Transation02将age值修改为30.③Transa
2022-05-04 01:07:58
210
原创 Spring支持的常用数据库传播属性
事务的传播行为:一个方法运行在一个开启了事务的方法中,当前方法时使用原来的事务还是开启一个新的事务。传播属性 描述 REQUIRED 如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行。 REQUIRES_NEW 当前的方法必须启动新事物,并在它自己的事务内运行,如果有事务正在运行,应该将它挂起。 SUPPORTS 如果有事务在运行,当前的方法就在这个事务内运行,否则它可以不运行在事务中。 NOT_SUPPORTED
2022-05-04 00:40:23
853
原创 Spring Bean的作用域之间有什么区别?
类别 说明 singleton 在SpringIOC容器中仅存在一个Bean实例,Bean以单例的方式存在 prototype 每次调用getBean()时都会返回一个新的实例 request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplication环境(web环境) session 同一个HTTPSession共享一个Bean,不同的HTTP Sess...
2022-05-04 00:10:24
480
原创 走台阶问题
问题:每次上台阶走一步或两步,问有多少种走法?解决思路(一):如果有一层台阶则有一种走法,有两层台阶有两种走法,而三层台阶依赖前面的走法,即:代码实现(方法一 递归):@Testpublic void test(){ System.out.println(f(4));}public int f(int n){ if (n<1){ throw new IllegalArgumentException(n + "不能小于1"); .
2022-05-03 23:43:11
360
原创 Redis的数据类型
键(key)常用命令:keys * 查看当前库所有key(匹配:keys *1)exists key 判断某个key是否存在type key 查看你的key是什么类型del key 删除指定的key数据unlink key 根据value选择非阻塞删除:仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。expire key 10 10秒钟:为给定的key设置过期时间ttl key查看还有多少秒过期,-1表示用不过期,-2表示已过期select 命
2022-01-02 13:57:58
77
原创 spring循环依赖问题
spring循环依赖问题: 创建对象a前先将beanName放至singletonsCurrentlyInCreation,再进行对象创建之后放入三级缓存(singletonFactories)中进行记录,再去解决属性赋值中的依赖问题,在后置处理器AutowiredAnnotationBeanPostProcessor中进行依赖注入,在此会调用getBean()方法获取对象b创造对象与对象a相同,创建对象前也会将对象b的beanName放至singletonsCurrentlyInCrea.
2021-11-20 01:07:43
493
原创 css常用样式
颜色: color: red;边框: border: 1px red solid;宽度: width: 300px;高度: height: 300px;背景颜色: background-color: yellow;字体大小: font-size: 50px;设置居中: margin-left: auto; margin-right: auto;文本居中: text-align: center;/**/超链接去下划线: text-decoration: none;设置边...
2021-04-25 21:17:51
47
原创 JavaScript造对象的两种方式
对象的定义:一、Obejct方式定义对象var 变量名=new Object(); //对象实例(空对象)变量名.属性名=值; //定义一个属性变量名.函数名=function(){}//定义一个函数值对象的访问:变量名.属性/函数名();alert(obj.age);二、大括号形式的自定义对象对象的定义: var 变量名={ //空对象 属性名:值, //定义一个属性 属性名:值,...
2021-04-25 01:26:27
75
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人