<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[WeiJiFeng_的博客]]></title><description><![CDATA[记录渣渣技术的泪水]]></description><link>https://blog.youkuaiyun.com/WeiJiFeng_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; WeiJiFeng_]]></copyright><item><title><![CDATA[GO docker化编译平台现象不一致问题]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/127550545</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/127550545</guid><author>WeiJiFeng_</author><pubDate>Thu, 27 Oct 2022 13:30:18 +0800</pubDate><description><![CDATA[go编译在动态链接上，不同平台执行结果不一致现象]]></description><category></category></item><item><title><![CDATA[docker安装zookeeper和kafka]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/108810545</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/108810545</guid><author>WeiJiFeng_</author><pubDate>Sat, 26 Sep 2020 17:45:30 +0800</pubDate><description><![CDATA[docker search zookeeper
docker search kafka
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka

zookeeper启动命令
docker run -d -p 2181:2181 --name zookeeper wurstmeister/zookeeper:latest

启动后可以通过docker logs kafka命令查看启动的状态
kafka启动命令
link模式连zooke]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap1.8源码和同步机制]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/108731364</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/108731364</guid><author>WeiJiFeng_</author><pubDate>Tue, 22 Sep 2020 14:37:15 +0800</pubDate><description><![CDATA[1. ConcurrentHashMap几个重要概念
2. ConcurrentHashMap的get操作详解
3. ConcurrentHashMap的插入操作详解
4. ConcurrentHashMap的链表转红黑树
5. ConcurrentHashMap的扩容操作详解
6. ConcurrentHashMap的同步机制详解
首先谈默认参数：

MAXIMUM_CAPACITY = 1 &lt;&lt; 30   最大元素容量
DEFAULT_CAPACITY = 16            默认初]]></description><category></category></item><item><title><![CDATA[SpringBoot 2.x 整合redis]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/101223851</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/101223851</guid><author>WeiJiFeng_</author><pubDate>Mon, 23 Sep 2019 20:47:52 +0800</pubDate><description><![CDATA[Spring boot 2.x 默认整合redis客户端为lettuce。Lettuce 和 Jedis 的都是连接Redis Server的客户端程序。Jedis在实现上是直连redis server，多线程环境下非线程安全，除非使用连接池，为每个Jedis实例增加物理连接。Lettuce基于Netty的连接实例（StatefulRedisConnection），可以在多个线程间并发访问，且线程...]]></description><category></category></item><item><title><![CDATA[Maven安装与命令详细介绍]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/101109333</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/101109333</guid><author>WeiJiFeng_</author><pubDate>Sat, 21 Sep 2019 16:39:32 +0800</pubDate><description><![CDATA[目录
　　1 .安装Maven
　　2 .命令集合
　　3 .参数集合
1，安装Maven
官网下载对应的安装包：https://maven.apache.org/download.cgi

windows安装：

1，解压安装包
2，添加环境变量
3，验证安装是否成功
4，修改maven setting.xml

 liunx安装：

1.解压
tar -zxvf  xxx.tar.gz

2，...]]></description><category></category></item><item><title><![CDATA[FastJson的使用——复杂的JSON获取指定的key-value，JSON与list，object的互转]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/84106935</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/84106935</guid><author>WeiJiFeng_</author><pubDate>Thu, 15 Nov 2018 17:26:55 +0800</pubDate><description><![CDATA[对象转

]]></description><category></category></item><item><title><![CDATA[Java堆——Tlab分析，介绍]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/82054277</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/82054277</guid><author>WeiJiFeng_</author><pubDate>Sat, 25 Aug 2018 19:03:43 +0800</pubDate><description><![CDATA[首先谈java对象的创建

我们在语言层面上，创建一个对象仅仅是一个new关键字可以解决的。

但是在JVM层面上是怎么创建一个对象的呢？？

当 jvm 遇到 new 指令 
1，检查指令的参数能否在常量池中定位到一个类的符号引用。并检查这个符号引用所代表的类是否已经被加载，解析，初始化过。 
2，没有，就进行相应的类加载。 
3，类加载完成后就知道对象所需内存大小，为对象进行内存空间分配，在将...]]></description><category></category></item><item><title><![CDATA[通过Condition实现wait与指定线程notify]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81709849</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81709849</guid><author>WeiJiFeng_</author><pubDate>Wed, 15 Aug 2018 19:41:32 +0800</pubDate><description><![CDATA[　　Object 的 wait / notify / notifyAll 几个方法可以实现对线程的挂起和唤醒。ReentrantLock 也可以，不过要借助我们的 Condition 条件监视器，而且 Object 唤醒部分县城是随机唤醒，Condition 使得线程唤醒是可控的，可以指定唤醒部分线程。 
首先我们用 ReentrantLock 和 Condition 实现 Object 中对应的...]]></description><category></category></item><item><title><![CDATA[通过demo对比了解Volatile的实现]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81703608</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81703608</guid><author>WeiJiFeng_</author><pubDate>Wed, 15 Aug 2018 14:32:28 +0800</pubDate><description><![CDATA[ 
Volatile的定义

　　volatile可以保证线程可见性且提供了一定的有序性，但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。

　　上面的定义有两层含义： 
        　　1，保证共享变量的可见性，但无法保证原子性 
        　　2，防止指令重排

Volatile的可见性

　　一个变量如果用volatile修饰了，则Java可以确保所有线...]]></description><category></category></item><item><title><![CDATA[调用wait，notify，sleep方法对锁资源的处理]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81672880</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81672880</guid><author>WeiJiFeng_</author><pubDate>Tue, 14 Aug 2018 19:22:43 +0800</pubDate><description><![CDATA[　　我们知道wait和sleep方法可以将一个线程阻塞的目的。wait是将线程从Running变为waiting，直到被notify或者notifyAll，才会将线程从waiting状态变成Runnable状态。sleep是在一段时间内将线程从Running变为waiting，时间过去之后，线程进入Runnable状态。 
　　 
　在状态转换的时候，锁资源发生什么变化呢？

首先我们用一个dem...]]></description><category></category></item><item><title><![CDATA[ReentrantReadWriteLock源码分析，java8]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81666444</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81666444</guid><author>WeiJiFeng_</author><pubDate>Tue, 14 Aug 2018 14:54:28 +0800</pubDate><description><![CDATA[一，关系简介

二， 实现

　　2.1 Sync的成员变量 
　　2.2 构造器 
　　2.3 lock() 
　　2.4 ReadLock.lock()流程图

关系简介



　　在这个关系很乱的UML图中，我们可以发现ReentrantReadWriteLock实现了ReadWriteLock接口，内部类有Sync(锁的实现)，NonfairSync，FairSync公平锁与非公平锁，Wr...]]></description><category></category></item><item><title><![CDATA[创建一个自己的数据库连接池]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81570413</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81570413</guid><author>WeiJiFeng_</author><pubDate>Fri, 10 Aug 2018 21:44:35 +0800</pubDate><description><![CDATA[ 思路

１，我的思想是，用一个链表对JDBC连接线程进行保存。这个链表中保存在执行的连接，当一个连接调用close方法的时候，也就证明此连接线程的生命正在走向终结，就将这个连接通过反射代理回收。在添加新的连接线程。 
2，我们往线程池中获取连接的时候，getConnection就OK了。

话不多说，直接上代码，对于反射和代理有过了解的，一看代码就明白，写的一个很简陋的连接池。 
 配置信息

...]]></description><category></category></item><item><title><![CDATA[聚簇索引和非聚簇索引的区别]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81541444</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81541444</guid><author>WeiJiFeng_</author><pubDate>Thu, 09 Aug 2018 17:50:29 +0800</pubDate><description><![CDATA[引言

　　聚簇索引并不是一种索引类型，只是一种存储方式。当表有了聚簇索引的时候，表的数据行都存放在索引树的叶子页中。无法把数据行放到两个不同的地方，所以一张表只允许有一个聚簇索引。 
　　索引使得大多数时候我们避免全表扫描，使数据的性能有一定的提高。而聚簇索引的影响力也是很大的。我们熟悉的Myisam和innodb两大引擎，innodb的默认数据结构是聚簇索引，而Myisam是非聚簇索引。 
　...]]></description><category></category></item><item><title><![CDATA[解读可重入锁——ReentrantLock&AQS，java8]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81390935</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81390935</guid><author>WeiJiFeng_</author><pubDate>Fri, 03 Aug 2018 21:31:07 +0800</pubDate><description><![CDATA[
  1 ， ReentrantLock简介


　　首先我们可以查看ReentrantLock类，实现了Lock接口，其内部类都直接或者间接的继承了AQS类，则AQS肯定与ReentrantLock关系密切 


我们来个demo，让大家更直接的了解重入锁： 



  2， 构造器


MyReentrantLock是为了写自己理解的注释，改了一下类名

    /**
     * Reen...]]></description><category></category></item><item><title><![CDATA[java十六进制转为byte类型]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81189831</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81189831</guid><author>WeiJiFeng_</author><pubDate>Tue, 24 Jul 2018 18:17:47 +0800</pubDate><description><![CDATA[借用Integer类型转换

byte c = Integer.valueOf(&quot;ca&quot;,16).byteValue();
byte c = (byte) Integer.parseInt(&quot;ca&quot;, 16);


直接强转



byte b = (byte)0xca;]]></description><category></category></item><item><title><![CDATA[配置SpringMVC拦截器实现用户权限认证]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81032888</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81032888</guid><author>WeiJiFeng_</author><pubDate>Fri, 13 Jul 2018 15:53:24 +0800</pubDate><description><![CDATA[实现HandleInterceptor接口



public class AuthorizedInterceptor  implements HandlerInterceptor {

    /** 定义不需要拦截的请求 */
    private static final String[] IGNORE_URI = {&amp;quot;/login&amp;quot;,&amp;quot;index.html&amp;quot;};

     /** 
 ...]]></description><category></category></item><item><title><![CDATA[SpringMVC拦截器介绍]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81032091</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81032091</guid><author>WeiJiFeng_</author><pubDate>Fri, 13 Jul 2018 15:46:12 +0800</pubDate><description><![CDATA[前言

拦截器是SpringMVC非常重要的一个功能]]></description><category></category></item><item><title><![CDATA[Web项目中使用log4j，指定日志输出文件]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81014266</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/81014266</guid><author>WeiJiFeng_</author><pubDate>Thu, 12 Jul 2018 19:34:58 +0800</pubDate><description><![CDATA[　　使用log4j在web项目中，需要打印日志到文件中。使用相对路径，默认的是相对于tomcat的bin目录下。顿时觉得很坑。寻找解决到相对于项目之下，踩了很多坑。最后决定自己实现配置加载处理，就不会出现什么问题。

　　使用servlet加载log4j配置，log4j只在项目启动加载一次，所以给servlet加load-on-startup为1就行

我的log4j配置文件

log4j.roo...]]></description><category></category></item><item><title><![CDATA[Single Thread Execution 模式]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/80617964</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/80617964</guid><author>WeiJiFeng_</author><pubDate>Fri, 08 Jun 2018 09:00:29 +0800</pubDate><description><![CDATA[
  概念


Single Thread Execution 模式：就是在多线程执行时，对于共享资源的操作，当一个线程获取到共享资源的锁，并且没有释放锁的时候。其他线程无法使用共享资源。

如果违背了这些原则，则会陷入死锁： 
 - 具有多个锁参与其中 
 - 线程锁定一个锁没解除就去获得其他锁 
 - 线程获取这些锁的顺序不同

但是只要打破其中一个就会避免死锁


  共享资源Gate类

...]]></description><category></category></item><item><title><![CDATA[Redis实现——链表]]></title><link>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/80617881</link><guid>https://blog.youkuaiyun.com/WeiJiFeng_/article/details/80617881</guid><author>WeiJiFeng_</author><pubDate>Fri, 08 Jun 2018 08:51:19 +0800</pubDate><description><![CDATA[
  前言


链表在Redis中的应用十分广泛，list底层实现采用的就是链表。还有发布与订阅，监视器等底层也是用到了链表。


  实现


Redis的链表是一种双端链表，在adlist.c和adlist.h实现 
链表节点



typedef struct listNode {

    // 前置节点
    struct listNode *prev;

    // 后置节点
  ...]]></description><category></category></item></channel></rss>