<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[daemon329的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/daemon329</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; daemon329]]></copyright><item><title><![CDATA[HashedWheelTimer源码浅析]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/115608706</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/115608706</guid><author>daemon329</author><pubDate>Sun, 11 Apr 2021 22:41:38 +0800</pubDate><description><![CDATA[HashedWheelTimer由HashedWheelBucket数组组成，通过newTimeout方法提交任务并启动Worker工作线程，工作线程会不断将新的Timeout加到HashedWheelBucket中，并执行HashedWheelBucket中的Timeout。
1.Timeout
通过Timeout可以获取关联的Timer和TimerTask。
public interface Timeout {
    Timer timer();
    TimerTask task();
    b]]></description><category></category></item><item><title><![CDATA[Timer源码浅析]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/115560973</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/115560973</guid><author>daemon329</author><pubDate>Fri, 09 Apr 2021 22:34:04 +0800</pubDate><description><![CDATA[java.util.Timer主要使用了Timer和TimerTask两个类。Timer内部有TimerThread和TaskQueue两个内部类，在创建Timer对象的时候会启动TimerThread线程，不断地从TaskQueue任务队列中取出头任务并执行，而Timer的各种schedule方法负责把TimerTask加入到队列中，使用了生产者消费者模型。
1.TimerTask
public abstract class TimerTask implements Runnable {
	final O]]></description><category></category></item><item><title><![CDATA[Dubbo SPI机制ExtensionLoader浅析]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/115423038</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/115423038</guid><author>daemon329</author><pubDate>Sat, 03 Apr 2021 23:51:32 +0800</pubDate><description><![CDATA[1.getExtensionLoader
返回SPI接口对应的ExtensionLoader
// 根据类型查找对应的扩展加载器，如果没有，则创建一个并且加入EXTENSION_LOADERS
public static &lt;T&gt; ExtensionLoader&lt;T&gt; getExtensionLoader(Class&lt;T&gt; type) {
    if (type == null) {
        throw new IllegalArgumentException("]]></description><category></category></item><item><title><![CDATA[JDK SPI机制ServiceLoader源码浅析]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/115417985</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/115417985</guid><author>daemon329</author><pubDate>Sat, 03 Apr 2021 16:57:46 +0800</pubDate><description><![CDATA[1.load
返回创建的ServiceLoader对象
清理providers
lookupIterator指向创建的LazyIterator对象
public static &lt;S&gt; ServiceLoader&lt;S&gt; load(Class&lt;S&gt; service) {
    // 获取当前线程的上下文类加载器
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    return Se]]></description><category></category></item><item><title><![CDATA[拉勾课程git地址记录]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/113786499</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/113786499</guid><author>daemon329</author><pubDate>Wed, 10 Feb 2021 22:20:42 +0800</pubDate><description><![CDATA[1.300分钟搞懂 Spring Cloud
https://github.com/yinjihuan/lagou-spring-cloud


]]></description><category></category></item><item><title><![CDATA[Nginx的负载均衡策略]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/108926539</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/108926539</guid><author>daemon329</author><pubDate>Mon, 05 Oct 2020 10:54:51 +0800</pubDate><description><![CDATA[1.轮询（默认）
将请求按顺序轮流发送到相应的服务器
http {
	upstream cluster {
		server 192.168.56.1:8080;
		server 192.168.56.2:8080;
		server 192.168.56.3:8080;
	}
	server {
		listen 80;
		location / {
			proxy_pass http://cluster;
		}
	}
}

2.最少连接数
将请求发送到当前连接数最少的服务器。
http {
	up]]></description><category></category></item><item><title><![CDATA[SpringAOP的三种方式]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/108260418</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/108260418</guid><author>daemon329</author><pubDate>Thu, 27 Aug 2020 14:53:21 +0800</pubDate><description><![CDATA[1.作用对象
public class Person {
    private Integer id;
    private String name;
	// getter setter省略
    public void findPerson() {
        Person person = new Person(1, "JDK");
        System.out.println("findperson 被执行");
    }
}

&lt;bean id="person" class]]></description><category></category></item><item><title><![CDATA[SSM配置文件]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/108020567</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/108020567</guid><author>daemon329</author><pubDate>Sun, 16 Aug 2020 09:41:54 +0800</pubDate><description><![CDATA[1.applicationContext.xml
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schem]]></description><category></category></item><item><title><![CDATA[npm安装笔记]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/108007260</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/108007260</guid><author>daemon329</author><pubDate>Fri, 14 Aug 2020 16:20:40 +0800</pubDate><description><![CDATA[参考：https://www.cnblogs.com/goldlong/p/8027997.html
查看node版本： node -v
查看npm版本： npm -v
在nodejs文件夹下建立如下红框内两个目录。

然后运行如下2条命令：
npm config set prefix “D:\Program Files\nodejs\node_global”
npm config set cache “D:\Program Files\nodejs\node_cache”
查看目录：npm list -g]]></description><category></category></item><item><title><![CDATA[linux   JDK安装]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107857535</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107857535</guid><author>daemon329</author><pubDate>Fri, 07 Aug 2020 10:52:00 +0800</pubDate><description><![CDATA[狂神说JDK、TOMCAT、DOCKER安装

]]></description><category></category></item><item><title><![CDATA[zookeeper基本概念及3.6.0新特性]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107533063</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107533063</guid><author>daemon329</author><pubDate>Thu, 23 Jul 2020 12:01:42 +0800</pubDate><description><![CDATA[1.数据模型
层次命名空间，像一个分布式文件系统，由节点组成形成一个树结构。每个节点是一个ZNode，可以有数据也可以有孩子节点。每个节点有一个ACL限制谁可以做什么。
2.节点类型
节点类型主要有持久节点、临时节点、持久序列节点和临时序列节点四种。
getEphemerals()可以显示一个会话的所有临时节点。
container node和TTL node是3.6.0新增的，容器节点当最后一个孩子被删除后，他就会在不久后被服务器删除。TTL节点如果在TTL时间内没有被修改并且没有孩子节点，也会在不久后被]]></description><category></category></item><item><title><![CDATA[zookeeper3.6.1客户端指令]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107426853</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107426853</guid><author>daemon329</author><pubDate>Sat, 18 Jul 2020 12:28:51 +0800</pubDate><description><![CDATA[1.客户端连接
zkCli.sh
zkCli.sh -server host:port

2.显示帮助信息
help

3.显示节点信息 -s状态  -w监听器 -R递归
ls [-s] [-w] [-R] path

4.创建节点  -s加序列号 -e临时节点
create [-s] [-e] path [data]

5.获取节点值  -s状态 -w监听器
get [-s] [-w] path

6.设置节点值  -s状态
set [-s] [-v version] path data

7.删除节点
]]></description><category></category></item><item><title><![CDATA[递归算法的分析方法]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107297210</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107297210</guid><author>daemon329</author><pubDate>Sun, 12 Jul 2020 11:47:28 +0800</pubDate><description><![CDATA[1.迭代法
由T(n)出发，根据问题缩小规模，找出大问题与小问题的关系时，展开计算。
2.公式法
当递归函数的时间执行函数满足：
T(n) = a * T(n/b) + f(n)

递归部分的时间复杂度为nlogban^{logb^a}nlogba
如果nlogba&gt;f(n)n^{logb^a}&gt;f(n)nlogba&gt;f(n)时间复杂度最终为O(nlogba)O(n^{logb^a})O(nlogba)
如果nlogba&lt;f(n)n^{logb^a}&lt;f(n)nlogba&lt]]></description><category></category></item><item><title><![CDATA[常用的排序算法]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107236603</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107236603</guid><author>daemon329</author><pubDate>Thu, 09 Jul 2020 20:20:00 +0800</pubDate><description><![CDATA[1.冒泡排序
从第一个数开始，每一个和右边相邻的比较，如果比右边的大，和右边的交换，最终结果是最大的“冒泡”到最右边。右边渐渐有序，向左延伸。
public static void sort(int[] nums) {
	boolean hasChange = true;
	for (int i=0; i&lt;nums.length-1 &amp;&amp; hasChange; i++) {
		hasChange = false;
		for (int j=0; j&lt;nums.length-1-]]></description><category></category></item><item><title><![CDATA[Java中的常用数据结构（未完待续...）]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107214104</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107214104</guid><author>daemon329</author><pubDate>Wed, 08 Jul 2020 20:25:43 +0800</pubDate><description><![CDATA[1.Java中常用的数据结构
ArrayList、LinkedList、HashMap、HashSet、TreeMap、ConcurrentHashMap

2.Collection、List、Iterable、Iterator
public interface Iterable&lt;T&gt; {
	Iterator&lt;T&gt; iterator();
}

public interface Iterator&lt;E&gt; {
	boolean hasNext();
	E next();
}
]]></description><category></category></item><item><title><![CDATA[树的遍历]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107166156</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107166156</guid><author>daemon329</author><pubDate>Mon, 06 Jul 2020 19:37:17 +0800</pubDate><description><![CDATA[1.先序中序和后序遍历的递归写法
public void preorder(ListNode root) {
	if (root == null) {
		return;
	}
	System.out.println(root.val);
	preorder(root.left);
	preorder(root.right);
}

public void inorder(ListNode root) {
	if (root == null) {
		return;
	}
	inorder(root.lef]]></description><category></category></item><item><title><![CDATA[长度为k的链表翻转]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107165957</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107165957</guid><author>daemon329</author><pubDate>Mon, 06 Jul 2020 19:31:40 +0800</pubDate><description><![CDATA[//长度为k的链表翻转
public static ListNode reverse(ListNode head, int k) {
	ListNode curr = head;
	ListNode prev = null;
	ListNode next = null; 

	while (curr!=null &amp;&amp; k-- &gt; 0) {
		next = curr.next;
		curr.next = prev;
		prev = curr;
		curr = next;
	}
	]]></description><category></category></item><item><title><![CDATA[javaweb笔记]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107144099</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107144099</guid><author>daemon329</author><pubDate>Sun, 05 Jul 2020 20:11:18 +0800</pubDate><description><![CDATA[1.pom依赖
&lt;dependency&gt;
 	&lt;groupId&gt;javax.servlet&lt;/groupId&gt;
	&lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt;
	&lt;version&gt;4.0.1&lt;/version&gt;
&lt;/dependency&gt;

2.web.xml格式
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-ap]]></description><category></category></item><item><title><![CDATA[前端知识点]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/107014129</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/107014129</guid><author>daemon329</author><pubDate>Mon, 29 Jun 2020 09:54:18 +0800</pubDate><description><![CDATA[1.onload和ready
ready是在DOM文档树加载完之后执行，onload还要等所有文件加载完，所以ready比onload先执行。
window.onload = function() {
    alert("onload");
}

$(document).ready(function() {
    alert("ready");
})

2.esri
esri.symbol.PictureMarkerSymbol: Marker symbols are used to draw poin]]></description><category></category></item><item><title><![CDATA[计算机组成原理（1）计算机系统概论]]></title><link>https://blog.youkuaiyun.com/daemon329/article/details/106976233</link><guid>https://blog.youkuaiyun.com/daemon329/article/details/106976233</guid><author>daemon329</author><pubDate>Fri, 26 Jun 2020 23:09:43 +0800</pubDate><description><![CDATA[1.计算机的软硬件
计算机系统由硬件和软件两大部分组成。硬件指计算机的实体部分，如主机、外部设备等。软件指人们编写的具有某种功能的程序，包括系统软件和应用软件。
2.计算机的层次结构

3.冯·诺伊曼计算机的特点：

计算机由运算器、存储器、控制器、输入设备和输出设备五大部分组成
指令和数据以同等地位存放于存储器内，并可按地址寻访
指令和数据均用二进制表示
指令由操作码和地址码组成，操作码用来表示操作的性质，地址码用来表示操作数在存储器中的位置
指令在存储器内按顺序存放。
机器以运算器为中心，输入输出设备与]]></description><category></category></item></channel></rss>