<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jarvan_Song的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Jarvan_Song</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jarvan_Song]]></copyright><item><title><![CDATA[和 Thrift 的一场美丽邂逅]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/116996299</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/116996299</guid><author>Jarvan_Song</author><pubDate>Tue, 18 May 2021 17:13:34 +0800</pubDate><description><![CDATA[和 Thrift 的一场美丽邂逅

一. 与 Thrift 的初识

也许大多数人接触 Thrift 是从序列化开始的。每次搜索 “java序列化” + “方式”、“对比” 或 “性能” 等关键字时，搜索引擎总是会返回一大堆有关各种序列化方式的使用方法或者性能对比的结果给你，而其中必定少不了 Thrift，并且其性能还不错嘞，至少比那战斗力只有1的渣渣 java 原生序列化要强很多（好吧原谅我的小情绪……）。

然而，我最初接触 Thrift 却是从公司的一个项目开始。

也就在去年的这个时候，我所在事业.]]></description><category></category></item><item><title><![CDATA[springMvc笔记-Filter]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/116595322</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/116595322</guid><author>Jarvan_Song</author><pubDate>Mon, 10 May 2021 15:55:30 +0800</pubDate><description><![CDATA[本笔记基于springBoot 2.3.3版本

一般我们平常如果要使用Filter，会用到如下代码。


@Configuration
@ConditionalOnClass(CoreFilter.class)
public class CoreFilterAutoConfiguration {

    @Bean
    public FilterRegistrationBean coreFilterAutoConfig() {
        FilterRegistrationBean bean ]]></description><category></category></item><item><title><![CDATA[springMvc 笔记]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/116498522</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/116498522</guid><author>Jarvan_Song</author><pubDate>Fri, 07 May 2021 19:41:24 +0800</pubDate><description><![CDATA[本笔记基于springBoot 2.3.3版本

基本知识

到目前为止Servlet规范已经发展到Servlet3.0/4.0阶段，在Servlet 3.0阶段 允许开发人员采用注解的方式来配置 Servlet、Filter、Listener。这个是springboot集成springmvc的一个重要基础。

servlet规范(实际我们工程中引入的是javax.servlet-api:3.0.1 这个jar包，后面我们会用jar包来称呼比较好理解) ，我们知道servlet jar包里的Servlet接]]></description><category></category></item><item><title><![CDATA[二叉排序/搜索树]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/111053282</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/111053282</guid><author>Jarvan_Song</author><pubDate>Fri, 11 Dec 2020 21:01:19 +0800</pubDate><description><![CDATA[public class BSTree&lt;T extends Comparable&lt;T&gt;&gt; {
    private Node&lt;T&gt; root;
    private AtomicInteger size = new AtomicInteger(0);

    public boolean insert(T data){
        return insert(root, data);
    }

    public boolean insert(Node&.]]></description><category></category></item><item><title><![CDATA[java代码实现红黑树源码]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/110244505</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/110244505</guid><author>Jarvan_Song</author><pubDate>Fri, 27 Nov 2020 19:43:46 +0800</pubDate><description><![CDATA[package com.kun.kunspringbootweb.foo.tree;
 
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
 
 
/**
 * 红黑树-Java实现例子
 */
public class MyRBTree&lt;T extends Comparable&lt;T&gt;, D&gt; {
 
    private RBN...]]></description><category></category></item><item><title><![CDATA[linux常用命令]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/109248156</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/109248156</guid><author>Jarvan_Song</author><pubDate>Fri, 23 Oct 2020 19:10:45 +0800</pubDate><description><![CDATA[vim 全局替换


:%s/7001/7003/g

杀死同名的所有进程


ps -ef|grep redis-server|awk '{print $2}'|xargs kill -9

删除除某个文件外的所有文件


ls | grep -v "redis.conf" | xargs rm -rf

查看CPU物理个数


grep 'physical id' /proc/cpuinfo | sort -u



查看每个物理CPU的核数


grep 'core id' /proc/cpuinfo]]></description><category></category></item><item><title><![CDATA[jdk1.8 hashMap 分析]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/107712834</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/107712834</guid><author>Jarvan_Song</author><pubDate>Fri, 31 Jul 2020 16:17:53 +0800</pubDate><description><![CDATA[1. hash函数


 static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h &gt;&gt;&gt; 16);
    }

重新hash，利用高16位和低16位进行异或运算来重新的到hash值，这样就能把高16位的信息也融入到hash里面来，更加均匀分布

2. put方法


final V putVal(int hash, K .]]></description><category></category></item><item><title><![CDATA[设计模式-单例模式]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/105361589</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/105361589</guid><author>Jarvan_Song</author><pubDate>Tue, 07 Apr 2020 12:13:25 +0800</pubDate><description><![CDATA[设计模式之单例模式：


package util.design.danli;


public class Main {

    private static class S1{
        private static S1 s1 = new S1();
        private S1(){}
        public static S1 getMain(){
        ...]]></description><category></category></item><item><title><![CDATA[外部类如何调用内部类private]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/105361270</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/105361270</guid><author>Jarvan_Song</author><pubDate>Tue, 07 Apr 2020 12:06:14 +0800</pubDate><description><![CDATA[我们以单例静态内部类模式来看：代码如下


	public class S4{
        private S4(){}
        private static class S5{
            private static S4 s4 = new S4();
        }
        publish static S4 getS4(){
            re...]]></description><category></category></item><item><title><![CDATA[排序/查找算法]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/103241423</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/103241423</guid><author>Jarvan_Song</author><pubDate>Mon, 25 Nov 2019 16:58:30 +0800</pubDate><description><![CDATA[public static void maopaoSort(int[] arry){
        for(int i=arry.length-1;i&gt;0;i--){
            boolean flag = false;
            for(int j=0;j&lt;i;j++){
                if(arry[j] &gt; arry...]]></description><category></category></item><item><title><![CDATA[unicode 概述]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/93506643</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/93506643</guid><author>Jarvan_Song</author><pubDate>Mon, 24 Jun 2019 18:11:30 +0800</pubDate><description><![CDATA[用一张图来表示：


]]></description><category></category></item><item><title><![CDATA[js 实现图片预览]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/80186815</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/80186815</guid><author>Jarvan_Song</author><pubDate>Thu, 03 May 2018 21:27:17 +0800</pubDate><description><![CDATA[前端代码：&amp;lt;img id=&quot;preview&quot; width=&quot;200px&quot;&amp;gt;&amp;lt;/img&amp;gt;
&amp;lt;input id=&quot;myload&quot; type=&quot;file&quot; class=&quot;file&quot; name=&quot;pic&quot; onchange=&quot;imgPreview(this)&quot;/&amp;gt;js：&amp;lt;scrip]]></description><category></category></item><item><title><![CDATA[video.js 操作HTML5 video标签]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/80186632</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/80186632</guid><author>Jarvan_Song</author><pubDate>Thu, 03 May 2018 21:12:57 +0800</pubDate><description><![CDATA[var player = videojs(&quot;player&quot;);
var currentTime = player.currentTime();
player.src(src);
player.load(src);
player.ready(function () {
    player.currentTime(currentTime);
    player.playbackRate($scop...]]></description><category></category></item><item><title><![CDATA[Extjs 动态的给iframe的src属性赋值]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/79390163</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/79390163</guid><author>Jarvan_Song</author><pubDate>Tue, 27 Feb 2018 16:35:56 +0800</pubDate><description><![CDATA[1：获取变量var auditsource = Ext.getCmp('source').getValue();2：构造htmlhtml = '&amp;lt;iframe id= &quot;iframe&quot; style=&quot;overflow:auto;width:100%; height:100%;&quot;'+ 'src=takeupdateAll?auditsource=' + auditsource + '  fra...]]></description><category></category></item><item><title><![CDATA[如何实现多次读取request里面的参数值]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/79310941</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/79310941</guid><author>Jarvan_Song</author><pubDate>Sun, 11 Feb 2018 15:22:42 +0800</pubDate><description><![CDATA[首先需要明确如下几个概念：1：web开发的时候，过滤器属于java原生组件，而拦截器属于spring框架的组件，从它们的参数就可以看出来，过滤器参数为ServletRequest, 而拦截器为HttpServeletRequest，因为spring本来就是web开发针对的就是http协议，而java则是针对所有网络通信不单单是http协议。2：需要了解一下ServletRequest  HttpS...]]></description><category></category></item><item><title><![CDATA[正向代理  反向代理]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/79096699</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/79096699</guid><author>Jarvan_Song</author><pubDate>Thu, 18 Jan 2018 15:22:09 +0800</pubDate><description><![CDATA[如下图所示：代理1代表客户去请求访问服务器，代理2代表服务器来接收客户请求访问。整个流程是从左到右，代理1在客户的下游，所以称之为正向代理，代理2分发请求给各个真实服务器，处于真实服务器上游，所以称之为反向代理。（开个玩笑） 没必要纠结这个名次，就像spring的依赖注入和控制反转一样 ，理解含义就好。]]></description><category></category></item><item><title><![CDATA[CyclicBarrier(int parties, Runnable barrierAction) 详解]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/71159431</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/71159431</guid><author>Jarvan_Song</author><pubDate>Thu, 04 May 2017 11:21:59 +0800</pubDate><description><![CDATA[CyclicBarrier(int parties, Runnable barrierAction) 详解]]></description><category></category></item><item><title><![CDATA[JAVA 空间分配担保]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/70196587</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/70196587</guid><author>Jarvan_Song</author><pubDate>Sun, 16 Apr 2017 17:29:54 +0800</pubDate><description><![CDATA[JAVA 空间分配担保]]></description><category></category></item><item><title><![CDATA[使用FileVisitor遍历文件和目录]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/70160460</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/70160460</guid><author>Jarvan_Song</author><pubDate>Thu, 13 Apr 2017 18:19:45 +0800</pubDate><description><![CDATA[使用FileVisitor遍历文件和目录]]></description><category></category></item><item><title><![CDATA[Java 7多种异常捕获]]></title><link>https://blog.youkuaiyun.com/Jarvan_Song/article/details/70143572</link><guid>https://blog.youkuaiyun.com/Jarvan_Song/article/details/70143572</guid><author>Jarvan_Song</author><pubDate>Wed, 12 Apr 2017 16:04:17 +0800</pubDate><description><![CDATA[Java 7多种异常捕获]]></description><category></category></item></channel></rss>