<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Ghost_B2的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Ghost_B2</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Ghost_B2]]></copyright><item><title><![CDATA[Spring事务机制(二)]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/107774639</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/107774639</guid><author>Ghost_B2</author><pubDate>Wed, 05 Aug 2020 22:55:40 +0800</pubDate><description><![CDATA[Spring事务机制
1.事务抽象




2.事务传播
PROPAGATION_REQUIRED
默认事务传播机制，若当前存在事务，则加入该事务，若不存在事务，则新建一个事务。
PAOPAGATION_REQUIRE_NEW
不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务。

事务的隔离性，两个事务互不干涉。不是同一个事务了。
若当前没有事务，则新建一个事务。若当前存在事务，则新建一个事务，新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交。
class C]]></description><category></category></item><item><title><![CDATA[CORS解决跨域问题详解]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/107766846</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/107766846</guid><author>Ghost_B2</author><pubDate>Tue, 04 Aug 2020 10:01:26 +0800</pubDate><description><![CDATA[引入问题
一.为什么会出现跨域问题？
不同源(ip地址、协议、端口都相同才是同源)，只要IP地址或者协议或者端口只要有一项不同，都会出现跨域问题。
二.出现的场景
1.前端后分离，前端代码和后端代码部署在不同的服务器中。
2.第三方合作方通过前端调用api接口。
三.使用CORS会出现那些的问题？
1.CORS导致sessionId不一致问题。
2.非简单请求会发送两次请求(预请求和真实请求)。导致在预请求是不会携带请求参数。
3.与拦截器冲突导致CORS失效并报出异常问题。

 if (CorsUtils]]></description><category></category></item><item><title><![CDATA[mysql事务(一)]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/107675873</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/107675873</guid><author>Ghost_B2</author><pubDate>Wed, 29 Jul 2020 22:31:00 +0800</pubDate><description><![CDATA[微服务中的事务问题

单服务中解决数据的一致性问题：
使用事务就ok了。
事务的原则
事务是什么？

事务的四大原则：
原子性：
要么都完成，要么都不完成。
一致性：
状态是一致的，结果是完整的。
隔离性：
在不同的事务，在操作同样的数据，在A没有commit的时候，别人是看不到的。
持久性：
当进行commit的时候，在进行提交都数据库中。
使用mysql操作事务
场景：
转账场景
代码：
SELECT * FROM t_user

##开启事务
START TRANSACTION;

update t_]]></description><category></category></item><item><title><![CDATA[Mybatis缓存解析]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/107646625</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/107646625</guid><author>Ghost_B2</author><pubDate>Wed, 29 Jul 2020 21:28:25 +0800</pubDate><description><![CDATA[什么是查询缓存
mybatis 提供查询缓存，用于减轻数据压力，提高数据库性能。
mybatis 提供一级缓存，和二级缓存。
一级缓存：
一级缓存就是sqlSession级别缓存。在操作数据库时需要构造sqlsession对象，在对象中有一个数据结构(hashmap)用于存储缓存数据，不同的sqlsession之间的缓存数据区域（hashmap）是相互不影响的。
二级缓存：
二级缓存是mapper级别的缓存，多个sqlsession去操作同一个mapper的sql语句，多个sqlsession去操作数据库得]]></description><category></category></item><item><title><![CDATA[Netty(二)客户端与服务端通信]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/107030567</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/107030567</guid><author>Ghost_B2</author><pubDate>Wed, 01 Jul 2020 22:30:35 +0800</pubDate><description><![CDATA[客户端与服务端通信
简单示例代码：基于netty 4
服务端代码：
MyServer：
package secondexample;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.cha]]></description><category></category></item><item><title><![CDATA[Idea实操SVN分支切换及代码合并至主干(其他分支)]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/106781223</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/106781223</guid><author>Ghost_B2</author><pubDate>Tue, 16 Jun 2020 10:01:54 +0800</pubDate><description><![CDATA[SVN分支切换
步骤1：切换到svn 代码更新设置

步骤二：选择需要切换到那个分支

步骤三：
点击ok进行切换，不报错的话就切换成功。。
SVN代码合并
步骤一：
在分支项目中切换到主干项目代码。
步骤二：
打开 version control 面板

步骤三：
选择合并的过来的，提交代码版本。



...]]></description><category></category></item><item><title><![CDATA[idea导入项目,Lombok插件安装了，但是无get set方法]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/106781134</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/106781134</guid><author>Ghost_B2</author><pubDate>Tue, 16 Jun 2020 09:48:09 +0800</pubDate><description><![CDATA[排查步骤：
1.保证安装了Lombok插件
2.保证导入了Lombok jar包
3.是否勾选了配置项


]]></description><category></category></item><item><title><![CDATA[实战应用：队列+多线程通信+监听]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/104389565</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/104389565</guid><author>Ghost_B2</author><pubDate>Wed, 19 Feb 2020 11:20:11 +0800</pubDate><description><![CDATA[场景：
每1个台设备每次上传文件，只能单个文件上传，假如A设备有10个文件，B设备有10个文件。我要让AB两个设备10文件同时上传，比如A设备正在上传文件1号其他9个文件进入队列等待，B设备也是正在上传文件1号其他9个文件进入队列等待。AB设备共用同一个队列（先进先出队列）只有等A设备第一个文件上传成功了，才能继续上传A的。B也是这样的。
demo：
public static Concurren...]]></description><category></category></item><item><title><![CDATA[Sql注入]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/104353150</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/104353150</guid><author>Ghost_B2</author><pubDate>Mon, 17 Feb 2020 09:54:13 +0800</pubDate><description><![CDATA[Mybatis
在mybatis中使用 #{} 和 ${} 来进行参数值替换，使用 #{} 语法时，MyBatis 会自动生成 PreparedStatement ，使用参数绑定 ( ?) 的方式来设置值，上述两个例子等价的 JDBC 查询代码如下：
 String sql = "SELECT * FROM users WHERE id = ?";
PreparedStatement ps = c...]]></description><category></category></item><item><title><![CDATA[java中队列---Queue]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/104181678</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/104181678</guid><author>Ghost_B2</author><pubDate>Thu, 06 Feb 2020 12:39:52 +0800</pubDate><description><![CDATA[Queue-API

ConcurrentLinkedQueue非阻塞队列-先进先出
示例代码：
package com.study.juc.queue;

import java.util.concurrent.ConcurrentLinkedQueue;

// 优势：无锁。
// 注意：批量操作不提供原子保证  addAll, removeAll, retainAll, containsAl...]]></description><category></category></item><item><title><![CDATA[LinkeList底层实现原理及源码]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/104147715</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/104147715</guid><author>Ghost_B2</author><pubDate>Mon, 03 Feb 2020 16:16:14 +0800</pubDate><description><![CDATA[LinkeList原理
LinkedList 和 ArrayList 一样，都实现了 List 接口，但其内部的数据结构有本质的不同。LinkedList 是基于链表实现的（通过名字也能区分开来），所以它的插入和删除操作比 ArrayList 更加高效。但也是由于其为基于链表的，所以随机访问的效率要比 ArrayList 差。
1.ArrayList在实现添加、插入底层都要进行扩容及位置偏移问题。...]]></description><category></category></item><item><title><![CDATA[ArrayList 底层实现原理及Vector]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/104138907</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/104138907</guid><author>Ghost_B2</author><pubDate>Sun, 02 Feb 2020 15:04:13 +0800</pubDate><description><![CDATA[ArrayList 底层实现核心点
1.集合底层使用数组实现的
2.为什么集合能存放无限大小？####数组扩容技术实现的
Arrays.copyOf：
实现数组的复制，返回复制后的数组。参数是被复制的数组和复制的长度。
返回一个新的数组，将原来数组长度2，扩容长度为10的一个新的数组，原来的数据不变。
代码示例实现：
package com.mmall.demo2.demotest;

impor...]]></description><category></category></item><item><title><![CDATA[RabbitMq基础（二）]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/103883455</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/103883455</guid><author>Ghost_B2</author><pubDate>Wed, 08 Jan 2020 00:00:06 +0800</pubDate><description><![CDATA[一、几种队列类型
1.简单队列
2.work模式
3.work模式(能者多劳)
4.订阅模式
5.路由模式
6.通配符模式
二、基础队列
## 2.1简单队列

## 2.2work模式

## 2.3work模式(能者多劳)

三、高级队列
## 3.1订阅模式

## 3.2路由模式

## 3.3通配符模式

四、消息确认模式
## 4.1自动签收

## 4.2手动签收


...]]></description><category></category></item><item><title><![CDATA[RabbitMq基础知识（一）]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/103883520</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/103883520</guid><author>Ghost_B2</author><pubDate>Tue, 07 Jan 2020 23:45:18 +0800</pubDate><description><![CDATA[一、为什么要使用mq
可以实现同步，比如：商品的同步，商品在数据库中发生了改变，要同步到前端和solr或者ES中。通过mq可以实现一对多的关系进行同步。


二、几种mq的对比

三、RabbitMq简介
RabbitMq是通过Erlang语言开发的，这语言就初衷理念就是实现高并发的。

RabbitMq稳定性是比较高的。
什么是AMQP？

四、RabbitMq管理平台界面讲解


## 4.2...]]></description><category></category></item><item><title><![CDATA[SSM实现普通的图片上传]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/103878411</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/103878411</guid><author>Ghost_B2</author><pubDate>Tue, 07 Jan 2020 17:28:42 +0800</pubDate><description><![CDATA[利用 Spring MVC 实现文件上传功能，离不开对 MultipartResolver 的设置。MultipartResolver 这个类，你可以 将其视为 Spring MVC 实现文件上传功能时的工具类，这个类也只会在文件上传中发挥作用。在配置了具体实现类之后，Spring MVC 中的 DispatcherServlet 在处理请求时会调用 MultipartResolver 中的方法判...]]></description><category></category></item><item><title><![CDATA[反射之制作工具类（bean2map）]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/103134185</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/103134185</guid><author>Ghost_B2</author><pubDate>Fri, 27 Dec 2019 16:41:25 +0800</pubDate><description><![CDATA[bean.getClass()
        **Class&lt;?&gt; clazz = bean.getClass();**
	getClass()是Object类中的一个方法，就是用来获取类本身的（获得类本身之后就可以使用newInstance()方法进行实例）。

getDeclaredFields
解析：getDeclaredFields()：获得某个类的所有声明的字段，即包括pu...]]></description><category></category></item><item><title><![CDATA[WebRTC网络协议分析]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/103440429</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/103440429</guid><author>Ghost_B2</author><pubDate>Sat, 07 Dec 2019 22:55:10 +0800</pubDate><description><![CDATA[webRTC网络协议分析
常用工具
Linux服务端用tcpdump
其他端WireShark
tcpdump
tcpdump -i eth0 src port 80 -xx	-Xs	0	-w	test.cap
-i:指定网卡 eth0就是网卡的名称
src：指明包的来源
port：指明端口号
-xx：指抓到的包以10进制显示
-X：指以ASCII码显示
-s 0：指明抓整个包
-w：写到文件中 ...]]></description><category></category></item><item><title><![CDATA[node.js 创建https服务]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/103226475</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/103226475</guid><author>Ghost_B2</author><pubDate>Thu, 05 Dec 2019 21:59:11 +0800</pubDate><description><![CDATA[什么是https？
通俗的来讲之前我们使用的http可以说是明文,对http加密之后就是https了（https=http+http+TLS/SSL）
创建一个简单的https服务器
var https = require('https');
var fs =require('fs');//读取证书 fs 用于读取证书
var options={
	key:fs.readFileSync('文件路...]]></description><category></category></item><item><title><![CDATA[Node.js 创建（最简单的http服务）]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/103226089</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/103226089</guid><author>Ghost_B2</author><pubDate>Thu, 05 Dec 2019 21:58:48 +0800</pubDate><description><![CDATA[如果我们使用 PHP 来编写后端的代码时，需要 Apache 或者 Nginx 的 HTTP 服务器，并配上 mod_php5 模块和 php-cgi。
从这个角度看，整个"接收 HTTP 请求并提供 Web 页面"的需求就不需要 PHP 来处理。
不过对 Node.js 来说，概念完全不一样了。使用 Node.js 时，我们不仅仅 在实现一个应用，同时还实现了整个 HTTP 服务器。事实上，我们...]]></description><category></category></item><item><title><![CDATA[构建第三方开放平台接口]]></title><link>https://blog.youkuaiyun.com/Ghost_B2/article/details/103359091</link><guid>https://blog.youkuaiyun.com/Ghost_B2/article/details/103359091</guid><author>Ghost_B2</author><pubDate>Mon, 02 Dec 2019 23:14:27 +0800</pubDate><description><![CDATA[appid机制
	只有appid和密钥验证通过了才能调用接口，并不是谁都能来调用我们的接口的，有点类似系统中的登录，需要使用的接口的用户需要在后台开通appid，提供给用户相关的密钥，在调用接口中需要提供appid和密钥，服务器端会进行相关的验证

签名机制
防止参数篡改
限流机制
防止流量攻击导致服务器或者数据库宕机
黑白名单机制
数据加密机制
使用https协议，在http和tcp之间添加一层...]]></description><category></category></item></channel></rss>