<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[L25000的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/L25000</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; L25000]]></copyright><item><title><![CDATA[LinkedHashMap实现LRU]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143821353</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143821353</guid><author>L25000</author><pubDate>Sat, 16 Nov 2024 18:50:44 +0800</pubDate><description><![CDATA[比如我们定义一个LRULinkedHashMap类，继承LinkedHashMap，重写removeEldestEntry方法，记得把accessOrder设置为true。就会自动删除最老的数据，比如当缓存容量达到一定值之后，需要把最不经常使用的缓存删掉或者保存到磁盘中。为true，取出操作，就会影响节点在head和tail组成的链表中的位置，即访问次数越多，数据越活跃。在遍历的时候，是乱序的，即不是按照添加的顺序遍历。表示最早添加进Map中的元素，也就是最老的数据，方法，一个空实现的方法，该方法在。]]></description><category></category></item><item><title><![CDATA[HashMap源码分析下]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143820614</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143820614</guid><author>L25000</author><pubDate>Sat, 16 Nov 2024 17:49:09 +0800</pubDate><description><![CDATA[如果这个cap刚好是2的幂次方呢，即4,8,16,32,64等这样的，这样的数已经满足条件了，再减去1，把数变成3,7,31,63。，即hash值的第5为是1，这样在扩容到32后，取索引得出来的结果就和16的不一样了，索引位置比oldCap大了一个oldCap值；,求余数，n是一个2的幂次方数，减去1，即后面全是1，前面全是0，与上这个hash，只能保证经过运算，结果都会在。，即hash值的第5为是0，这样在扩容到32后，取索引得出来的结果还是和16的一样；cap=1，2的0次方就等于1，返回的是就是4。]]></description><category></category></item><item><title><![CDATA[HashMap源码分析上-红黑树]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143820445</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143820445</guid><author>L25000</author><pubDate>Sat, 16 Nov 2024 17:47:18 +0800</pubDate><description><![CDATA[红黑树是一种自平衡二叉查找树（不是平衡二叉树，只不过红黑树近似于平衡的状态）,它相对于二叉查找树性能会更加高效(查找、删除、添加等操作需要O(log n),其中n为树中元素的个数),但实现较为复杂(需要保持自身的平衡)。每个节点要么是红色，要么是黑色根节点是黑色如果一个节点是红色，那么它的两个孩子都是黑色（从每个叶子到根的所有路径上不能有两个连续的红色节点）从根到叶节点或空子节点的每条路径，必须包含相同的黑色节点......]]></description><category></category></item><item><title><![CDATA[Kotlin协程suspend的理解]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143454700</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143454700</guid><author>L25000</author><pubDate>Sat, 02 Nov 2024 18:52:30 +0800</pubDate><description><![CDATA[作为开发者，您可以把挂起函数看作是普通函数，只不过它可能会在某些时刻挂起和恢复而已。协程的挂起就是退出方法，等到一定条件到来会重新执行这个方法，因为对方有这个协程的引用，当然可以调用你的方法了。，也可以返回String，返回值就是协程的返回值，所以返回值的类型无法确定。因为内部没有使用挂起函数，内部的逻辑就和普通方法一样，就是多一个参数和一个返回结果。方法就是在执行这个挂起方法（此时已经被转换成java的普通方法了）。修饰的方法中如果使用了挂起函数，并且挂起函数可以返回。的值就会加1，等下次恢复的时候，]]></description><category></category></item><item><title><![CDATA[Kotlin协程-async分析]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143439935</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143439935</guid><author>L25000</author><pubDate>Fri, 01 Nov 2024 20:15:32 +0800</pubDate><description><![CDATA[本章讲解协程中asyncawait的原理。前提条件是知道父子协程是如何关联的，可以看这篇协程之间父子关系1-Job如何关联的了解。这里简单讲一下原理：使用await方法，这是一个挂载方法，协程执行到这里就会挂载（就是退出invokeSuspend方法），什么时候才能继续执行呢？使用await方法的协程会在这个协程的state链表中添加一个节点，当这个协程完成时，就会执行这个节点的invoke方法，就会唤醒之前挂载在这里的协程，顺便也把结果带回来了。在之前先看如下例子：你猜最后parentJob。]]></description><category></category></item><item><title><![CDATA[Kotlin协程分析之CoroutineScheduler-WorkQueue队列]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143424884</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143424884</guid><author>L25000</author><pubDate>Fri, 01 Nov 2024 10:16:10 +0800</pubDate><description><![CDATA[这就是非公平时，有的任务可以插队，先运行，这里的插队不是真的进入数组中插队，是找了一个队长看着它，下次运行时队长直接让它插队，队长就是lastScheduledTask。先从队列中偷任务，当然从consumerIndex开始找，队列里找不到，就看看队长lastScheduledTask那里有没有，如果有，还要看看是不是刚刚放进去的，如果是刚刚放进去的，就不会偷这个任务了。WorkQueue没有自动扩容的逻辑，满了是无法添加的，可以添加CPU型任务，也可以添加IO型任务。线程使用存储任务的容器。]]></description><category></category></item><item><title><![CDATA[Kotlin协程-调度器]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143419486</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143419486</guid><author>L25000</author><pubDate>Thu, 31 Oct 2024 22:49:57 +0800</pubDate><description><![CDATA[协程的启动都是在当前线程即main线程中，经过挂载函数delay后，重新调度，是另外的线程了。从上面输出的结果可以看出来，协程从挂载点恢复执行后，调度器可能会从新调度到其他线程中执行。从这个名字IO就知道，执行的任务应该是IO型任务，IO型的调度器的特点就是线程数量多，协程将在当前线程一直运行，不会被调度到其他线程中执行，除非经过挂载点，会被重新调度。只是定义了线程池的核心线程，最大线程的数量，定义线程的名字，继承自。Android中使用的，作为调度器，这一点和。启动协程后，会执行到。]]></description><category></category></item><item><title><![CDATA[Kotlin协程分析之CoroutineScheduler]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143419334</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143419334</guid><author>L25000</author><pubDate>Thu, 31 Oct 2024 22:44:07 +0800</pubDate><description><![CDATA[看这篇文章，可以跳着看，遇到哪个方法不懂就跳到哪个方法去看，上下对照着理解。]]></description><category></category></item><item><title><![CDATA[协程之间父子关系2-.Job取消过程]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143405461</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143405461</guid><author>L25000</author><pubDate>Thu, 31 Oct 2024 16:39:08 +0800</pubDate><description><![CDATA[接着上一章kotlin协程之间父子关系1-Job如何关联的，继续讲解协程的取消过程，顺便提到了异常对协程的影响。协程本来就很复杂，它的状态有多，一定要对照本章中的调试图片仔细观察。]]></description><category></category></item><item><title><![CDATA[协程之间父子关系1-Job如何关联的]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/143381194</link><guid>https://blog.youkuaiyun.com/L25000/article/details/143381194</guid><author>L25000</author><pubDate>Thu, 31 Oct 2024 09:32:46 +0800</pubDate><description><![CDATA[协程会挂起在这里，等待coroutine3结束，但是我们delay了一个超长的时间，coroutine3是一直delay下去了，执行不完。类型参数，我们说的协成是我们自己写大代码块，其实这坨代码块还要经过层层修饰封装，这才有了协程的切换线程，协程的管理等业务。然后执行到协程3，协程3主动关联它的父Job，这时父job，即协程1，关联协程3时，发现自己的state是。节点代表的是它的子协程，当然可以有其他的节点，比如协程要结束的时候会添加。当父协程取消的时候可以通知到它的子协程，看看是怎么关联进去的。]]></description><category></category></item><item><title><![CDATA[国内下载android源码]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/118864791</link><guid>https://blog.youkuaiyun.com/L25000/article/details/118864791</guid><author>L25000</author><pubDate>Sun, 18 Jul 2021 00:02:23 +0800</pubDate><description><![CDATA[安装git和curl
sudo apt-get install git-core curl

建立AOSP目录
mkdir ~/AOSP
cd ~/AOSP

AOSP随便你命名，就是一个目录，存放我们clone下来的源码
配置 Git
git config --global user.name Your Name
git config --global user.email you@example.com

下载并配置repo
Repo 是我们建立在 Git 之上的工具。 Repo 帮助我们管理许多 Gi]]></description><category></category></item><item><title><![CDATA[KMP算法]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/118069185</link><guid>https://blog.youkuaiyun.com/L25000/article/details/118069185</guid><author>L25000</author><pubDate>Sun, 20 Jun 2021 13:59:23 +0800</pubDate><description><![CDATA[朴素字符串比较
朴素字符串比较就是主串T与匹配串P一个一个字符进行比较，假设主串有m个字符，匹配串有n个字符，那么就要比较（m-n+1）n个（m&gt;n）

public static int simple(String t, String p) {
    if (t == null || p == null) {
        return -1;
    }
    if (t.length() &lt; p.length()) {
        return -1;
    }
    cha]]></description><category></category></item><item><title><![CDATA[Arouter讲解4_Core]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/116772023</link><guid>https://blog.youkuaiyun.com/L25000/article/details/116772023</guid><author>L25000</author><pubDate>Fri, 14 May 2021 00:02:41 +0800</pubDate><description><![CDATA[ARouter讲解1-InterceptorProcessor


ARouter讲解2-AutowiredProcessor


ARouter讲解3_RouteProcessor


Arouter讲解4_Core


复习
经过前面的文章，我们知道注解处理后重新生成的文件，我们再来复习下

被Route注解的会生成类似下面这样的类


如果是IProvider类型的，会生成类似下面的类


如果是 IInterceptor 类型的，会生成类似下面的类，其实 IInterceptor 也是 IPro..]]></description><category></category></item><item><title><![CDATA[ARouter讲解3_RouteProcessor]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/116724732</link><guid>https://blog.youkuaiyun.com/L25000/article/details/116724732</guid><author>L25000</author><pubDate>Wed, 12 May 2021 23:59:36 +0800</pubDate><description><![CDATA[ARouter讲解1-InterceptorProcessor


ARouter讲解2-AutowiredProcessor


ARouter讲解3_RouteProcessor


Route
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface Route {

    String path();
    String group() default "";
    String name..]]></description><category></category></item><item><title><![CDATA[ARouter讲解2-AutowiredProcessor]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/116674806</link><guid>https://blog.youkuaiyun.com/L25000/article/details/116674806</guid><author>L25000</author><pubDate>Tue, 11 May 2021 23:11:22 +0800</pubDate><description><![CDATA[ARouter讲解1-InterceptorProcessor


ARouter讲解2-AutowiredProcessor


Autowired
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.CLASS)
public @interface Autowired {

    // Mark param's name or service name.
    String name() default "";

    // If r..]]></description><category></category></item><item><title><![CDATA[ARouter讲解1-InterceptorProcessor]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/116617867</link><guid>https://blog.youkuaiyun.com/L25000/article/details/116617867</guid><author>L25000</author><pubDate>Tue, 11 May 2021 00:38:58 +0800</pubDate><description><![CDATA[概述
这是讲解Arouter的一篇文章，从源码级别带你分析，看这篇文章前，你需要知道一点 AbstractProcessor处理注解的技巧。
InterceptorProcessor 注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface Interceptor {
    /**
     * 权重值，值越小权重越大
     */
    int priority();

    /**
   ]]></description><category></category></item><item><title><![CDATA[Deep Learing之Jaccard系数]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/114437124</link><guid>https://blog.youkuaiyun.com/L25000/article/details/114437124</guid><author>L25000</author><pubDate>Sat, 06 Mar 2021 12:58:33 +0800</pubDate><description><![CDATA[Jaccard系数
Jaccard系数值越大，样本相似度越高。
J(A,B)=∣A⋂B∣∣A∣+∣B∣−∣A⋂B∣
J(A,B)= \frac{|A\bigcap B|}{|A| +|B| - | A \bigcap B| }
J(A,B)=∣A∣+∣B∣−∣A⋂B∣∣A⋂B∣​

Jaccard 距离
与Jaccard 系数相关的指标叫做Jaccard 距离，用于描述集合之间的不相似度。Jaccard 距离越大，样本相似度越低。
dj(A,B)=1−∣A⋂B∣∣A∣+∣B∣−∣A⋂B∣
d_{j}(A,B]]></description><category></category></item><item><title><![CDATA[复数基本概念]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/113977615</link><guid>https://blog.youkuaiyun.com/L25000/article/details/113977615</guid><author>L25000</author><pubDate>Tue, 23 Feb 2021 11:11:22 +0800</pubDate><description><![CDATA[复数域
z=x+iy或者z=x+yi,i2=−1
z=x+iy或者z=x+yi,i^2=-1
z=x+iy或者z=x+yi,i2=−1
实数x与y分别称为复数z的实部和虚部，记作
x=Rez,y=Imz
x=Re z,y=Im z
x=Rez,y=Imz
虚部为零的复数就可以看作实数，虚部不为零的复数称为虚数
x+iy和x−iy称为互为共轭复数
x+iy和x-iy称为互为共轭复数
x+iy和x−iy称为互为共轭复数
复数运算
z1±z2=(x1±x2)+i(y1±y2)z1z2=(x1+iy1)(x2+iy]]></description><category></category></item><item><title><![CDATA[python打包exe]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/113766503</link><guid>https://blog.youkuaiyun.com/L25000/article/details/113766503</guid><author>L25000</author><pubDate>Tue, 09 Feb 2021 09:50:15 +0800</pubDate><description><![CDATA[pyinstaller
安装 pyinstaller
python -m pip install pyinstaller

安装后，把Scripts所在路径添加到PATH中。
pyinstaller -F main.py

去除控制台加-w
pyinstaller -F -w main.py

加入应用图标-i
pyinstaller -F -w -i .\resource\app.ico  main.py

执行上面的命令后会生成一个spec文件
# -*- mode: python ; coding: ]]></description><category></category></item><item><title><![CDATA[Linux0.11内核源码分析1-main函数运行之前的准备]]></title><link>https://blog.youkuaiyun.com/L25000/article/details/111667052</link><guid>https://blog.youkuaiyun.com/L25000/article/details/111667052</guid><author>L25000</author><pubDate>Fri, 25 Dec 2020 11:23:12 +0800</pubDate><description><![CDATA[主题列表：juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, greenwillow, v-green, vue-pro, healer-readable, mk-cute, jzman, geek-black
贡献主题：https://github.com/xitu/juejin-markdown-themes
theme: juejin
highlight:
在阅读该文.]]></description><category></category></item></channel></rss>