<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[我的代码路程]]></title><description><![CDATA[一路向北]]></description><link>https://blog.youkuaiyun.com/FateRuler</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; FateRuler]]></copyright><item><title><![CDATA[前缀树结构和Java代码实现]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88915200</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88915200</guid><author>FateRuler</author><pubDate>Sat, 30 Mar 2019 17:00:42 +0800</pubDate><description><![CDATA[以前在项目中使用过前缀对敏感词进行过滤，现在就详细说一下他的结构和如何实现吧。
结构的3个基本性质：
1. 根节点不包含字符，除根节点外每一个节点都只包含一个字符。
2. 从根节点到某一节点，路径上经过的字符连接起来，为该节点对应的字符串。
3. 每个节点的所有子节点包含的字符都不相同。
前缀的好处：
前缀树可以最大限度地减少无谓的字符串比较，查询效率非常高。
前缀树的核心思想是利用空间换时间，利...]]></description><category></category></item><item><title><![CDATA[快速排序的核心思想和Java实现]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88915066</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88915066</guid><author>FateRuler</author><pubDate>Sat, 30 Mar 2019 16:54:08 +0800</pubDate><description><![CDATA[算法步骤
1、从数列中挑出一个元素，称为 “基准”（pivot）;
2、重新排序数列，所有元素比基准值小的摆放在基准前面，所有元素比基准值大的摆在基准的后面（相同的数可以到任一边）。在这个分区退出之后，该基准就处于数列的中间位置。这个称为分区（partition）操作；
3、递归地（recursive）把小于基准值元素的子数列和大于基准值元素的子数列排序；
在每次的迭代（iteration）中，它...]]></description><category></category></item><item><title><![CDATA[什么是缓存穿透，如何解决]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88914594</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88914594</guid><author>FateRuler</author><pubDate>Sat, 30 Mar 2019 16:30:01 +0800</pubDate><description><![CDATA[场景：
对于系统A，假设一秒 5000 个请求，结果其中 4000 个请求是黑客发出的恶意攻击。
黑客发出的那 4000 个攻击，缓存中查不到，每次你去数据库里查，也查不到。
举个例子
数据库 id 是从 1 开始的，结果黑客发过来的请求 id 全部都是负数。这样的话，缓存中不会有，请求每次都会直接越过缓存，直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。
大概就是这个样子：

...]]></description><category></category></item><item><title><![CDATA[红黑树的结构和优势]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88914477</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88914477</guid><author>FateRuler</author><pubDate>Sat, 30 Mar 2019 16:24:49 +0800</pubDate><description><![CDATA[首先看一下红黑树的结构：

红黑树的结构特点：
（1）每个节点或者是黑色，或者是红色。
（2）根节点是黑色。
（3）每个叶子节点（NIL）是黑色。 [注意：这里叶子节点，是指为空(NIL或NULL)的叶子节点！]
（4）如果一个节点是红色的，则它的子节点必须是黑色的。
（5）从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
为什么要要用红黑树？
1、首先红黑树是不符合AVL树的平衡条...]]></description><category></category></item><item><title><![CDATA["==",equals  和 hashCode有什么区别？]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88852964</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88852964</guid><author>FateRuler</author><pubDate>Wed, 27 Mar 2019 19:15:06 +0800</pubDate><description><![CDATA["=="用来比较两个变量是否相等。
如果比较的是两个基础类型变量，则比较的是两个变量的值是否相等；
如果比较的是两个是两个对象，则比较的是两个对象的地址是否相同；
equals是Object类的方法。
在没有重写equals方法的情况下，equals与"=="的效果一样
可以重写equals方法，使得比较的是两个对象的内容是否相同。比如典型的String类就重写了equals方法，如果使用equa...]]></description><category></category></item><item><title><![CDATA[大根堆和小根堆]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88852926</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88852926</guid><author>FateRuler</author><pubDate>Wed, 27 Mar 2019 19:13:17 +0800</pubDate><description><![CDATA[大根堆和小根堆在排序和选择第K大的数中经常有用到。

在Java中是可以直接实现这两个中结构的，使用的优先队列
public class TIMU1 {

    //小根堆
    public PriorityQueue&lt;Integer&gt; minHead = new PriorityQueue&lt;&gt;(new Comparator&lt;Integer&gt;() {
  ...]]></description><category></category></item><item><title><![CDATA[IO的模型]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88852861</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88852861</guid><author>FateRuler</author><pubDate>Wed, 27 Mar 2019 19:10:12 +0800</pubDate><description><![CDATA[1、阻塞IO模型
最基础的IO模型，在读写数据过程中会发生阻塞现象。
在等待IO完成的过程中，用户线程会处于阻塞状态，让出CPU使用权。
IO完成以后，用户线程解除阻塞。
2、非阻塞IO模型
用户线程发起一个read操作，不需要等待，而是马上得到了一个结果，如果结果是error时，它就知道数据还没准备好，于是再次发送read操作。
在读写数据过程中不会发生阻塞现象。
在等待IO完成的过程中，用户线...]]></description><category></category></item><item><title><![CDATA[如何使用UDP建立可靠连接]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88243614</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88243614</guid><author>FateRuler</author><pubDate>Wed, 06 Mar 2019 17:06:33 +0800</pubDate><description><![CDATA[1、将数据包进行编号，按包的顺序接收并存储
2、接收端收到数据包后，发送确认信息给发送端，发送端接收确认数据以后，再继续发送下一个包，如果接收到的数据编号不是期望的编号，则要求发送端重新发送

...]]></description><category></category></item><item><title><![CDATA[TCP是如何确保可靠传输的]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88243572</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88243572</guid><author>FateRuler</author><pubDate>Wed, 06 Mar 2019 17:05:56 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[Cookie和Session有什么区别？（重要）]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88243527</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88243527</guid><author>FateRuler</author><pubDate>Wed, 06 Mar 2019 17:05:19 +0800</pubDate><description><![CDATA[cookie是由Web服务器保存在用户浏览器上的小文件，包含有关用户的信息。
session是用来在客户端与服务器端之间保持状态的解决方案和存储结构
1、cookie数据存放在客户的浏览器上，session数据放在服务器上。
2、cookie不是很安全，别人可以分析存放在本地的cookie并进行cookie欺骗，考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当...]]></description><category></category></item><item><title><![CDATA[HTTP中的get和post的区别]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/88243438</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/88243438</guid><author>FateRuler</author><pubDate>Wed, 06 Mar 2019 17:04:23 +0800</pubDate><description><![CDATA[（1）&amp;nbsp;&amp;nbsp;&amp;nbsp; get重点是从服务器上获取资源，post重点是向服务器发送数据
（2）&amp;nbsp;&amp;nbsp;&amp;nbsp; get传输数据是通过URL请求，以field（字段）= value的形式，置于URL后，并用“？”连接，多少请求数据间用“&amp;amp;”连接，这个过程用户是可见的。Post传输数据通过HTTP的post机制，将字段与对应值封存在请求实体中发送给服务器...]]></description><category></category></item><item><title><![CDATA[Spring中bean的设计模式和线程安全]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/86700269</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/86700269</guid><author>FateRuler</author><pubDate>Wed, 30 Jan 2019 10:59:22 +0800</pubDate><description><![CDATA[Bean的模式(设计模式)
Spring中Bean的模式有两种，默认的是单例模式，另一种是原型模式。
单例模式的Bean，如何解决线程安全问题？
出现线程安全问题的情况： 当Bean对象对应的类存在可变的成员变量并且其中存在改变这个变量的线程时，多线程操作该Bean对象时会出现线程安全。
解决方案： Spring使用ThreadLocal解决单例模式Bean的线程安全问题。ThreadLocal采...]]></description><category></category></item><item><title><![CDATA[Spring中bean的作用域]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/86700250</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/86700250</guid><author>FateRuler</author><pubDate>Wed, 30 Jan 2019 10:57:33 +0800</pubDate><description><![CDATA[Bean的作用域

singleton：单例模式，Spring IoC容器中只会存在一个共享的Bean实例，无论有多少个Bean引用它，始终指向同一对象。
prototype：原型模式，每次通过Spring容器获取prototype定义的bean时，容器都将创建一个新的Bean实例，每个Bean实例都有自己的属性和状态。
request：在一次Http请求中，容器会返回该Bean的同一实例。而对不...]]></description><category></category></item><item><title><![CDATA[Spring中bean的生命周期]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/86700216</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/86700216</guid><author>FateRuler</author><pubDate>Wed, 30 Jan 2019 10:55:42 +0800</pubDate><description><![CDATA[Bean的生命周期

Spring对Bean进行实例化
Spring设置Bean相关的属性中，即依赖注入
容器通过Aware接口把容器信息注入Bean
BeanPostProcessor(前置和后置处理)。进行进一步的构造，会在InitialzationBean前后执行对应方法，当前正在初始化的bean对象会被传递进来，我们就可以对这个bean作任何处理
InitializingBean (初始化...]]></description><category></category></item><item><title><![CDATA[消息队列中推和拉模式]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/85764080</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/85764080</guid><author>FateRuler</author><pubDate>Fri, 04 Jan 2019 15:16:20 +0800</pubDate><description><![CDATA[消息队列比较核心的应用场合有三个：解耦、异步和削峰
在消息队列中一种常用的消息推送类型是推拉模式
下面是推拉模式的对比：

具体的比较
1.Push模式

推模式是服务器端根据用户需要，由目的、按时将用户感兴趣的信息主动发送到用户的客户端
Push模式的主要优点是

（1）对用户要求低，方便用户获取需要的信息
（2）及时性好，服务器端即使地向客户端推送更行的动态信息


Push模式的缺点

不能...]]></description><category></category></item><item><title><![CDATA[排序算法的比较]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/85339070</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/85339070</guid><author>FateRuler</author><pubDate>Sat, 29 Dec 2018 15:07:00 +0800</pubDate><description><![CDATA[这里是我在网上找到两个截图(侵删)



]]></description><category></category></item><item><title><![CDATA[字节跳动2018年校招后端方向]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/85318679</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/85318679</guid><author>FateRuler</author><pubDate>Fri, 28 Dec 2018 10:57:19 +0800</pubDate><description><![CDATA[第四题
这是我认为比较满意的修改了
    private static int BinarySearchMax(int[] arr, int target){
        int left = 0;
        int right = arr.length - 1;  //第一处修改
        int index = -1;

        while(right &amp;gt;= l...]]></description><category></category></item><item><title><![CDATA[MySQL的内连接、左连接与右连接]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/84870050</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/84870050</guid><author>FateRuler</author><pubDate>Fri, 07 Dec 2018 10:13:53 +0800</pubDate><description><![CDATA[MySQL经常需要分解数据，存储在多个表中，这样可以更加方便的管理和获得更大的可伸缩性。
所以在查询数据的时候，可能需要在多个表中进行查询，俗称连接查询。
常用的连接查询有内连接，左连接和右连接
1.内连接
语句类似于：select * from a_table a  inner join    b_table b  on a.a_id = b.b_id;
解释：返回两个表的交集部分。

2.左连...]]></description><category></category></item><item><title><![CDATA[数字在排序数组中出现的次数]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/84860640</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/84860640</guid><author>FateRuler</author><pubDate>Thu, 06 Dec 2018 16:41:30 +0800</pubDate><description><![CDATA[剑指offer中的题目

题目描述
统计一个数字在排序数组中出现的次数。

看到有序数组，可能很多人都直接想到了要使用二分查找的方法，实际上确实是使用二分查找，但是需要稍微的修改一下，中间索引对应的元素等于目标元素的情况。(这里将二分数组中间索引对应的元素值，简称为中间值)
一般二分法，如果中间值大于目标值，则目标值在数组的右半部分；如果中间值小于目标值，则目标值在数组的左半部分；如果中间值等于目...]]></description><category></category></item><item><title><![CDATA[排序算法在数组题目中的应用]]></title><link>https://blog.youkuaiyun.com/FateRuler/article/details/84860180</link><guid>https://blog.youkuaiyun.com/FateRuler/article/details/84860180</guid><author>FateRuler</author><pubDate>Thu, 06 Dec 2018 16:31:04 +0800</pubDate><description><![CDATA[在做题目中可能会发现一些类型的题目具有一定的解题倾向性。在数组题目中，跟数组中大小顺序有关，往往可以使用排序算法，并在排序的过程中，做相应的处理。这种思路在二叉树题目尤其突出，二叉树的题目很多情况下都是需要遍历二叉树。根据题目还需要选择相应的排序算法或者二叉树遍历类型。
在剑指offer中有一道关于数组中逆序对的题目，这道题就很好的体现了排序算法在数组中的应用。

题目描述
在数组中的两个数字，如...]]></description><category></category></item></channel></rss>