<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[stormkai的专栏]]></title><description><![CDATA[努力是唯一能让自己站住脚跟的依靠]]></description><link>https://blog.youkuaiyun.com/stormkai</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; stormkai]]></copyright><item><title><![CDATA[vue集成百度地图vue-baidu-map]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/138198771</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/138198771</guid><author>stormkai</author><pubDate>Thu, 25 Apr 2024 20:43:12 +0800</pubDate><description><![CDATA[vue安装vue-baidu-map]]></description><category></category></item><item><title><![CDATA[JDK8对List对象根据属性排序]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135942009</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135942009</guid><author>stormkai</author><pubDate>Tue, 30 Jan 2024 21:59:26 +0800</pubDate><description><![CDATA[JDK8对List对象根据属性排序。排序字段为空时候报空指针异常，处理方式：1.Comparator.nullsLast：排序字段为null的排在后面 2.Comparator.nullsFirst：排序字段为null的排在前面。Stream流的方式students.stream().map(student -> {
            if("".equals(student.getName())){
                student.setName(null);
           ]]></description><category></category></item><item><title><![CDATA[Java线程中join()方法]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135940349</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135940349</guid><author>stormkai</author><pubDate>Tue, 30 Jan 2024 20:00:45 +0800</pubDate><description><![CDATA[join() 等待线程运行结束
t.join()阻塞调用此方法的线程,，直到线程t执行完成后，此线程再继续执行。]]></description><category></category></item><item><title><![CDATA[使用POI生成word文档的table表格]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135829900</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135829900</guid><author>stormkai</author><pubDate>Wed, 24 Jan 2024 19:55:12 +0800</pubDate><description><![CDATA[poi生成word文档的table表格，2种方式：1.生成一行一列的table，然后添加合并等操作；2.生成固定行列的table。table表格列合并：row4.getCell(0).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); row4.getCell(1).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);分页的两种方式：document.creat]]></description><category></category></item><item><title><![CDATA[spire.doc合并word文档]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135829327</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135829327</guid><author>stormkai</author><pubDate>Wed, 24 Jan 2024 19:12:56 +0800</pubDate><description><![CDATA[spire.doc合并word文档
Document document = new Document(file1);
//将文档file2内容完全插入到文档file1
document.insertTextFromFile(file2, FileFormat.Docx_2013);
document.insertTextFromFile(file3, FileFormat.Docx_2013);
document.saveToFile(mergeFilePath, FileFormat.Docx_2013)]]></description><category></category></item><item><title><![CDATA[git本地创建分支并推送到远程关联起来]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135419904</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135419904</guid><author>stormkai</author><pubDate>Fri, 05 Jan 2024 23:46:14 +0800</pubDate><description><![CDATA[如：基于本地dev分支创建test分支，并把test分支推送到远程，然后将本地test分支和远程test分支关联起来。git本地基于当前分支创建个新的分支，然后推送到远程，并把本地新创建的分支和远程分支关联。]]></description><category></category></item><item><title><![CDATA[ES集群分片数据的高可用]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135419412</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135419412</guid><author>stormkai</author><pubDate>Fri, 05 Jan 2024 23:27:28 +0800</pubDate><description><![CDATA[集群中的索引主分片和副分片在不同的计算机上，如果某个主分片所在的节点宕机，则原有的某个副分片会提成为主分片继续对外进行服务，如果宕机的节点恢复了服务并加入集群中，该节点主分片会降为副分片，缺少的数据会从别的节点上提升为主分片的分片进行补充。请求地址：http://localhost:9202/shopping/_search。请求地址：http://localhost:9201/shopping/_doc/1。分片1：香蕉（id=2），苹果（id=3），桔子（id=4）分片2：甜瓜（id=1）]]></description><category></category></item><item><title><![CDATA[ElasticSearch集群（Windows）]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135397871</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135397871</guid><author>stormkai</author><pubDate>Thu, 04 Jan 2024 23:23:06 +0800</pubDate><description><![CDATA[把elasticsearch文件夹改名为node-9201，删除data文件夹，清空log日志，拷贝成三份，分别叫node-9201，node-9202，node-9203。请求地址：http://localhost:9201/product。请求地址：http://localhost:9203/product。status字段表示当前集群在总体上是否工作正常。请求方式：PUT请求。]]></description><category></category></item><item><title><![CDATA[git在本地创建dev分支并和远程的dev分支关联起来]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135375736</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135375736</guid><author>stormkai</author><pubDate>Thu, 04 Jan 2024 00:16:59 +0800</pubDate><description><![CDATA[git在本地创建dev分支并和远程的dev分支关联起来。1.git命令：git checkout -b dev origin/dev;2.使用idea工具。查看本地分支和远程分支的关系git branch -vv; git branch -vv -a]]></description><category></category></item><item><title><![CDATA[Oracle修改用户密码]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135374786</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135374786</guid><author>stormkai</author><pubDate>Wed, 03 Jan 2024 23:01:58 +0800</pubDate><description><![CDATA[Oracle用户修改密码：alter user 用户 identified by 密码；Oracle两种常见的锁定状态：LOCKED（TIMED）是密码错误次数超过了系统设置的允许最大次数被锁；EXPIRED & LOCKED 账号过期被锁。改为不要求密码限制输错次数：alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;密码改成永不过期：alter profile default limit password_life_time unlim]]></description><category></category></item><item><title><![CDATA[ElasticSearch数据同步]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135374276</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135374276</guid><author>stormkai</author><pubDate>Wed, 03 Jan 2024 22:19:02 +0800</pubDate><description><![CDATA[ElasticSearch中酒店数据来自于mysql数据库，因此MySQL数据发生改变时，ElasticSearch也必须跟着改变，这个就是ElasticSearch和MySQL之间的**数据同步**
增量的有三种方式：同步调用，异步通知，监听binlog]]></description><category></category></item><item><title><![CDATA[Redis持久化]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135331784</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135331784</guid><author>stormkai</author><pubDate>Tue, 02 Jan 2024 11:45:00 +0800</pubDate><description><![CDATA[Redis持久化RDB、AOF。RDB全称Redis Database Backup file（Redis数据备份文件），也被叫做，简单来说就是把内存中的所有数据都记录到磁盘中。当Redis故障重启后，此磁盘读取快照文件，恢复数据。AOF全称为Append Only File（追加文件），Redis处理的每一个写命令都会记录在AOF文件，可以看做是命令日志文件]]></description><category></category></item><item><title><![CDATA[Redis双写一致性]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135331662</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135331662</guid><author>stormkai</author><pubDate>Tue, 02 Jan 2024 10:45:00 +0800</pubDate><description><![CDATA[Redis数据双写一致性：当修改数据库中数据也要同时更新缓存的数据，缓存和数据库的数据要保持一致。延迟双删（有脏数据风险）：先删缓存，再修改数据库，延时再删缓存（删除可能是脏数据的缓存）。延迟时间不可控。异步通知（数据最终一致性）：基于MQ；基于canal；分布式锁（数据强一致性，性能低）：使用读多写少的情况，强一致，性能低]]></description><category></category></item><item><title><![CDATA[Redis数据淘汰策略]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135331605</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135331605</guid><author>stormkai</author><pubDate>Tue, 02 Jan 2024 09:45:00 +0800</pubDate><description><![CDATA[Redis数据淘汰策略：当Redis的内存不够用时，此时向Redis添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉，这种数据删除操作被称之为内存的淘汰策略。LRU：最近最少使用；LFU：最少频率使用。8种淘汰策略：noeviction（默认）不淘汰任何key，当内存满时不允许写入新数据，会直接报错；volatile-ttl对设置了ttl的key，比较key的剩余ttl值，越小越优先淘汰；allkeys-random对全体key，随机进行淘汰；volatile-random对设置了ttl]]></description><category></category></item><item><title><![CDATA[Redis缓存穿透，缓存击穿，缓存雪崩]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135331429</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135331429</guid><author>stormkai</author><pubDate>Tue, 02 Jan 2024 09:00:00 +0800</pubDate><description><![CDATA[Redis缓存穿透，缓存击穿，缓存雪崩。缓存穿透：查询一个不存在的数据，mysql查询不到也不会写入缓存，导致每次请求都查数据库。解决方案：1.缓存空数据；2.使用布隆过滤器。缓存击穿：某个key设置了过期时间，过期时候有大量并发请求过来，这些并发请求瞬间把mysql压垮。解决方案：1.互斥锁；2.逻辑过期.缓存雪崩：同一时间大量的缓存key同时过期或者Redis服务宕机，导致大量的请求到达mysql，给mysql带来巨大压力。解决方案：1.redis集群提高服务可用性；2.多级缓存；3.降级限流；4.给k]]></description><category></category></item><item><title><![CDATA[Redis数据删除策略（惰性删除+定期删除）]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/135331543</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/135331543</guid><author>stormkai</author><pubDate>Tue, 02 Jan 2024 02:46:13 +0800</pubDate><description><![CDATA[Redis数据删除策略：惰性删除+定期删除。惰性删除：设置key过期时间后，不管它，需要用该key时，再检查是否过期，过期就删掉，没过期返回。对CPU友好，对内存不友好。定期删除：每隔一堆时间，对一些key（随机）进行检查，删除里面过期的key。两种模式：SLOW模式和FAST模式。SLOW模式：定时任务，执行频率默认10hz，每次不超过25ms。在redis.conf中修改。FAST模式：执行频率不固定，两次间隔不低于2ms，每次耗时不超过1ms。优点：可以限制操作的执行时长和频率来减少对cpu的影响缺点]]></description><category></category></item><item><title><![CDATA[策略设计模式]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/134771409</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/134771409</guid><author>stormkai</author><pubDate>Sun, 03 Dec 2023 22:26:54 +0800</pubDate><description><![CDATA[策略（Strategy）模式：该模式定义了一系列算法，并将每个算法封装起来，使它们可以相互替换，且算法的变化不会影响使用算法的客户。**策略模式属于对象行为模式，它通过对算法进行封装，把使用算法的责任和算法实现分割开来，并委派给不同的对象把这些算法进行管理。**
主要角色：
1）抽象策略（Strategy）类：定义了一个公共接口，各种不同的算法以不同的方式实现这个接口，环境角色使用这个接口调用不同的算法，一般使用接口或者抽象类来实现。
2）具体策略（Concrete Strategy）类：实现了抽象策略定义]]></description><category></category></item><item><title><![CDATA[centos rpm方式安装jenkins]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/133324175</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/133324175</guid><author>stormkai</author><pubDate>Wed, 27 Sep 2023 21:24:35 +0800</pubDate><description><![CDATA[rpm方式按照jenkins
yum方式按照jenkins]]></description><category></category></item><item><title><![CDATA[Redis之zset类型]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/133362597</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/133362597</guid><author>stormkai</author><pubDate>Wed, 27 Sep 2023 20:17:28 +0800</pubDate><description><![CDATA[Redis之zset类型：
添加元素：ZADD key score member [score member ...]
按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素：ZRANGE key start stop [WITHSCORES]
获取元素的分数：ZSCORE key member
删除元素：ZREM key member [member ...]
获取指定分数范围的元素：ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset ]]></description><category></category></item><item><title><![CDATA[Redis之set类型]]></title><link>https://blog.youkuaiyun.com/stormkai/article/details/133279911</link><guid>https://blog.youkuaiyun.com/stormkai/article/details/133279911</guid><author>stormkai</author><pubDate>Mon, 25 Sep 2023 21:27:29 +0800</pubDate><description><![CDATA[Redis之set类型：
添加元素：SADD key member [member ...]
删除元素：SREM key member [member ...]
获取集合中的所有元素：SMEMBERS key
判断元素是否在集合中：SISMEMBER key member
获取集合中的元素个数：SCARD key
从集合中随机弹出一个元素，元素不删除：SRANDMEMBER key [数字]
从集合中随机弹出一个元素，出一个删一个：SPOP key
将元素从一个集合转移到另外一个集合：SMOVE ...]]></description><category></category></item></channel></rss>