<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Devil_B的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Devil_B</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Devil_B]]></copyright><item><title><![CDATA[Relief特征提取算法实战]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118890269</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118890269</guid><author>Devil_B</author><pubDate>Mon, 19 Jul 2021 10:45:52 +0800</pubDate><description><![CDATA[简介及其演变
Relief算法最早由Kira提出，最初局限于两类数据的分类问题。Relief算法是一种特征权重算法(Feature weighting algorithms)，根据各个特征和类别的相关性赋予特征不同的权重，权重小于某个阈值的特征将被移除。Relief算法中特征和类别的相关性是基于特征对近距离样本的区分能力。算法从训练集D中随机选择一个样本R，然后从和R同类的样本中寻找最近邻样本H，称为Near Hit，从和R不同类的样本中寻找最近邻样本M，称为NearMiss，然后根据以下规则更新每个特征的]]></description><category></category></item><item><title><![CDATA[MySQL性能优化总结（更新）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118883672</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118883672</guid><author>Devil_B</author><pubDate>Sun, 18 Jul 2021 21:52:49 +0800</pubDate><description><![CDATA[MySQL性能优化总结（更新）常规优化长连接导致的OOM问题尽量不要使用查询缓存事务启动方式控制刷脏页速度否则会变慢如何正确的删除表避免使用orderBy语句避免使用函数计算就用不上索引redolog与binlog双1操作索引优化锁：
常规优化
长连接导致的OOM问题

定期断开长连接。使用一段时间，或者程序里面判断执行过一个占用内存的大查询后，断开连接，之后要查询再重连。
如果你用的是 MySQL 5.7 或更新版本，可以在每次执行一个比较大的操作后，通过执行 mysql_reset_connection]]></description><category></category></item><item><title><![CDATA[MySQL主备同步与主从同步]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118881943</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118881943</guid><author>Devil_B</author><pubDate>Sun, 18 Jul 2021 20:40:04 +0800</pubDate><description><![CDATA[MySQL主备同步与主从同步主备同步binlog三种格式对比循环复制问题主备延迟问题并行复制能力及其演变MySQL 5.5 版本的并行复制策略MySQL 5.6 版本的并行复制策略（用的不多）MariDB并行复制策略MySQL 5.7 的并行复制策略MySQL 5.7.22 的并行复制策略一主多从读写分离
主备同步
MySQL通过binlog实现主备同步，其中实现的主要原理是binlog。在主备同步中从库B会设置为readonly。在状态 1 中，客户端的读写都直接访问节点 A，而节点 B 是 A 的备库，]]></description><category></category></item><item><title><![CDATA[redolog与binlog笔记]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118694653</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118694653</guid><author>Devil_B</author><pubDate>Tue, 13 Jul 2021 14:24:55 +0800</pubDate><description><![CDATA[redo log与binlog笔记从极客时间丁奇老师的课程中总结一条语句的简易更新流程redo log介绍binlog（归档）介绍redolog与binlog区别详细更新流程之两阶段提交为什么需要两阶段提交（反正法）？redo log的写入机制binlog写入机制MySQL双1操作组提交提升写入效率常见问题怎样让数据库恢复到半个月内任意一秒的状态（binlog归档）？redo log 和 binlog 是怎么关联起来的正常运行中的实例，数据写入后的最终落盘，是从 redo log 更新过来的还是从 buff]]></description><category></category></item><item><title><![CDATA[(六）并发工具类 CompletableFuture（异步编程）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118540240</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118540240</guid><author>Devil_B</author><pubDate>Wed, 07 Jul 2021 10:38:43 +0800</pubDate><description><![CDATA[CompletableFuture（异步编程）CompletableFuture异步化CompletionStage 接口串行关系AND 聚合关系OR 汇聚关系异常处理案例CompletableFuture优势
CompletableFuture
异步化
异步化是并行方案得以实施的基础，更深入地讲其实就是：利用多线程优化性能这个核心方案得以实施的基础。例如：将两个串行的操作，交给新创建的子线程去执行，主线程无需等待这两个任务执行完毕，这就是所谓的异步化操作
Java 在 1.8 版本提供了 Completa]]></description><category></category></item><item><title><![CDATA[(五)并发工具类FutureTask]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118539695</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118539695</guid><author>Devil_B</author><pubDate>Wed, 07 Jul 2021 09:48:50 +0800</pubDate><description><![CDATA[FutureTask多线程返回实现FutureTaskFutureTask 实现案例
FutureTask
多线程利用excute方法虽然可以提交任务，但是却没有办法获取任务的执行结果（execute() 方法没有返回值）。Java 通过 ThreadPoolExecutor 提供的 3 个 submit() 方法和 1 个 FutureTask 工具类来支持获得任务执行结果的需求。
// 提交Runnable任务
Future&lt;?&gt; submit(Runnable task);
// 提交Ca]]></description><category></category></item><item><title><![CDATA[线程池之提交优先级与执行优先级]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118464174</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118464174</guid><author>Devil_B</author><pubDate>Sun, 04 Jul 2021 17:14:55 +0800</pubDate><description><![CDATA[问题发现
在使用newfixedThreadPool时设置核心线程10，最大线程20，采用arrayBlockingQueue10。
在for循环里打印i,以及线程id，发现线程的顺序是先打印1到10，然后打印21到30。也就是说后提交的数据中间输出。
提交优先级
提交优先级：就是先交付核心线程、等待队列、非核心线程。

代码如下：
public void execute(Runnable command) {
    if (command == null)
        throw new NullP]]></description><category></category></item><item><title><![CDATA[（四）并发工具类ReadWriteLock（读写锁）与StampedLock（读写锁优化）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118463695</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118463695</guid><author>Devil_B</author><pubDate>Sun, 04 Jul 2021 16:47:46 +0800</pubDate><description><![CDATA[ReadWriteLock（读写锁）与StampedLock（读写锁优化）ReadWriteLock读写锁降级StampedLock乐观读
ReadWriteLock
针对读多写少这种并发场景，Java SDK 并发包提供了读写锁——ReadWriteLock，其目的在于分场景优化性能，提升易用性。
读写锁都遵守以下三条基本原则：

允许多个线程同时读共享变量；
只允许一个线程写共享变量；
如果一个写线程正在执行写操作，此时禁止读线程读共享变量。

读写锁类似于 ReentrantLock，也支持公平模式和]]></description><category></category></item><item><title><![CDATA[（三）并发工具类Semaphore(真正的限流器)]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118462150</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118462150</guid><author>Devil_B</author><pubDate>Sun, 04 Jul 2021 16:20:58 +0800</pubDate><description><![CDATA[Semaphore(限流）概述信号量模型使用方法
概述
CountDownLatch（门闩）与CyclicBarrier（栅栏）看似需要等待线程数达到相同的数量才能继续执行，但它们并不能作为限流器使用，例如实现一个车辆限流，小于10辆直接通行，大于10辆则等待。CountDownLatch（门闩）与CyclicBarrier（栅栏）在小10辆时也无法通行，因此不适合作为限流器使用。Semaphore信号量主要用于两个目的，一个是用于多个共享资源的互斥使用，另一个用于并发线程数的控制。
信号量模型
信号量模型]]></description><category></category></item><item><title><![CDATA[（二）并发工具类CountDownLatch（门闩）与CyclicBarrier（栅栏）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118440033</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118440033</guid><author>Devil_B</author><pubDate>Sat, 03 Jul 2021 15:00:32 +0800</pubDate><description><![CDATA[CountDownLatch（门闩）和CyclicBarrier（栅栏）CountDownLatch 实现线程等待CyclicBarrier 实现线程同步
CountDownLatch 实现线程等待
如何实现主线程需要等待子线程运行完毕才能运行，Java 并发包里已经提供了实现类似功能的工具类：CountDownLatch？
定义：让一些线程阻塞直到另一些线程完成一些列操作之后才被唤醒。即使门闩的意思，给定一个数，当这个数被减到0时才能开始运行另一个线程。
主要有两个方法一个是await方法等待，一个是co]]></description><category></category></item><item><title><![CDATA[(一)并发工具类Lock与Condition]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118439714</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118439714</guid><author>Devil_B</author><pubDate>Sat, 03 Jul 2021 14:43:21 +0800</pubDate><description><![CDATA[Lock（互斥）与Condition（管程）概述可重入公平锁生产者消费者
概述
并发编程领域，有两大核心问题：一个是互斥，即同一时刻只允许一个线程访问共享资源；另一个是同步，即线程之间如何通信、协作。这两大问题，管程都是能够解决的。Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程，其中 Lock 用于解决互斥问题，Condition 用于解决同步问题。
为什么不用synchronized?
因为synchronized无法破坏死锁中的请求与保持条件， synchronize]]></description><category></category></item><item><title><![CDATA[（二）SpringBoot启动流程（概括）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118336597</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118336597</guid><author>Devil_B</author><pubDate>Tue, 29 Jun 2021 15:39:05 +0800</pubDate><description><![CDATA[SpringBoot启动流程（概括）
Spring boot是Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程。
特性
1.自动配置：针对很多Spring应用程序和常见的应用功能，Spring boot能自动提供相关配置；：
2.起步依赖：告诉Spring boot需要什么功能,它就能引入需要的依赖库；
3.Actuator:让你能够深入运行中的Spring Boot应用程序，一探Spring boot程序的内部信息；
4.命令行界面:这是Spring Boot的可选特性，]]></description><category></category></item><item><title><![CDATA[（一）Spring启动过程（概括）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118336358</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118336358</guid><author>Devil_B</author><pubDate>Tue, 29 Jun 2021 15:33:23 +0800</pubDate><description><![CDATA[Spring启动过程
Spring在BeanFactory基础上提供了一些列具体容器的实现，其中AnnotationConfigApplicationContext是一个用来管理注解bean的容器，从AnnotationConfigApplicationContext的实现结构图中可以看出：

AnnotationConfigApplicationContext继承GenericApplicationContext这个通用应用上下文，GenericApplicationContext内部定义了一个Defau]]></description><category></category></item><item><title><![CDATA[八 消息队列及Rabbitmq]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118273593</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118273593</guid><author>Devil_B</author><pubDate>Sun, 27 Jun 2021 15:37:54 +0800</pubDate><description><![CDATA[八 消息队列及Rabbitmq消息队列基础八 Rabbitmq实现
消息队列基础
消息队列应用场景：解耦（耦合性高容错性低）、异步、削峰（秒杀项目将请求缓存起来）
消息队列选型：

消息队列缺点系统可用性降低（一旦MQ宕机）；系统复杂性高（如下所示）；一致性问题
如何保证高可用？（以Rabbitmq为例）
普通集群：
1.在多台机器上分别启动RabbitMQ实例。
2.多个实例之间可以相互通信。
3.创建的Queue只会放在一个RabbitMQ上，其他实例都同步元数据。
4.消费的时候，如果连接的没有Que]]></description><category></category></item><item><title><![CDATA[七 Freemarker（项目实现）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118272967</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118272967</guid><author>Devil_B</author><pubDate>Sun, 27 Jun 2021 13:25:29 +0800</pubDate><description><![CDATA[七 Freemarker（项目实现思路）
初始用
背景:目前的文章详情页是一 个普通html, 详情数据是需要经过请求发送到后端才能获得数据，静态化就是每个文章的页面都是独立的一个htm页面，不需要经过后端请求就能直接独立打开供用户浏览。而媒体类网站、或者电商商品页通常会进行页面静态化。
页面静态化的优点:
●更容易做SEO (被百度和某些其他搜索引擎收录)
●加速用户访问,先展示主体部分,也就是文章的详情，然后其他数据异步加载
●不经过url请求的同时也降低请求数据库的压力
常见的模板引擎: JSP, F]]></description><category></category></item><item><title><![CDATA[十 ElasticSearch（分布式搜索引擎）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118272789</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118272789</guid><author>Devil_B</author><pubDate>Sun, 27 Jun 2021 13:19:42 +0800</pubDate><description><![CDATA[ElasticSearch（分布式搜索引擎，记录自己项目中的使用）
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单，它不仅包括了全文搜索功能，还可以进行以下工作:

分布式实时文件存储，并将每一个字段都编入索引，使其可以被搜索。
实时分析的分布式搜索引擎。
可以扩展到上百台服务器，处理PB级别的结构化或非结构化数据。

核心概念(对比数据库)

E]]></description><category></category></item><item><title><![CDATA[利用浏览器存储介质减少数据库压力(Redis)]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118254858</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118254858</guid><author>Devil_B</author><pubDate>Sat, 26 Jun 2021 21:35:15 +0800</pubDate><description><![CDATA[利用浏览器存储介质减少数据库压力(Redis)
背景：用户的基本信息几乎在每个页面都会查询，对与GetUserInfo这个接口来说压力就比较大（即使没有使用数据库的情况下
解决措施：用户的基本信息并会频繁的操作，通过浏览器特性，可以存储在浏览器sessionStorage（前端），避免用户频繁刷新，造成的压力。
浏览器存储介质其实本质上也可以称之为缓存，比如cookie, 就是早期我们使用最多的，目前用户的id以及token也是保存在cookie理的。通过保存数据后，那么可以获得并且和后端服务器交互。
co]]></description><category></category></item><item><title><![CDATA[九 springcloud微服务]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118254745</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118254745</guid><author>Devil_B</author><pubDate>Sat, 26 Jun 2021 21:28:19 +0800</pubDate><description><![CDATA[springcloud微服务springcloud微服务EurekaRibbonFeginHystrixZuulConfigBusStreamSleuth
springcloud微服务
什么是微服务？
简单来说，微服务就是把几个类似相似的功能放在一起， 对外提供接口调用,不论是前端调用,还是后端别的系统调用，只要他能尽到自己的职责，为他们提供服务,那么这就是微服务。服务之间彼此可以通过http调用，或者RestTemplate调用。
为什么使用微服务？
传统的单体架构虽然开发简单,部署简单(甚至不需要运维)]]></description><category></category></item><item><title><![CDATA[IDEA 报错Error creating bean with name ‘elasticsearchClient‘,]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/118254595</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/118254595</guid><author>Devil_B</author><pubDate>Sat, 26 Jun 2021 21:17:10 +0800</pubDate><description><![CDATA[IDEA 报错Error creating bean with name ‘elasticsearchClient’,
问题描述：
由于IDEA需要elasticsearch的版本为6.8.7，于是就安装了6.8.7版本的elasticsearch，结果报错(可以先查看自己安装的版本是否与IDEA中一致)。


解决方案：
在你使用到elasticsearch的微服务的启动类中进行system.setProperty配置：
@SpringBootApplication
@MapperScan(basePac]]></description><category></category></item><item><title><![CDATA[垃圾回收器GC（更新）]]></title><link>https://blog.youkuaiyun.com/Devil_B/article/details/115282758</link><guid>https://blog.youkuaiyun.com/Devil_B/article/details/115282758</guid><author>Devil_B</author><pubDate>Sun, 28 Mar 2021 16:40:37 +0800</pubDate><description><![CDATA[年轻代、老年代、永久代
堆内存划分为三个区域年轻代、老年代、永久代。新生代 ( Young ) 又被划分为三个区域：Eden、From Survivor、To Survivor。 (to区永远是空的那一个)



垃圾回收机制（就是清理堆）
在java中，程序员是不需要显示的去释放一个对象的内存的，而是由虚拟机自行执行。在JVM中，有一个垃圾回收线程，它是低优先级的，在正常情况下是不会执行的，只有在虚拟机空闲或者当前堆内存不足时，才会触发执行，扫面那些没 有被任何引用的对象，并将它们添加到要回收的集合中，进]]></description><category></category></item></channel></rss>