自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(184)
  • 资源 (4)
  • 收藏
  • 关注

原创 LinkedHashMap实现LRU

比如我们定义一个LRULinkedHashMap类,继承LinkedHashMap,重写removeEldestEntry方法,记得把accessOrder设置为true。就会自动删除最老的数据,比如当缓存容量达到一定值之后,需要把最不经常使用的缓存删掉或者保存到磁盘中。为true,取出操作,就会影响节点在head和tail组成的链表中的位置,即访问次数越多,数据越活跃。在遍历的时候,是乱序的,即不是按照添加的顺序遍历。表示最早添加进Map中的元素,也就是最老的数据,方法,一个空实现的方法,该方法在。

2024-11-16 18:50:44 456

原创 HashMap源码分析下

如果这个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。

2024-11-16 17:49:09 809

原创 HashMap源码分析上-红黑树

红黑树是一种自平衡二叉查找树(不是平衡二叉树,只不过红黑树近似于平衡的状态),它相对于二叉查找树性能会更加高效(查找、删除、添加等操作需要O(log n),其中n为树中元素的个数),但实现较为复杂(需要保持自身的平衡)。每个节点要么是红色,要么是黑色根节点是黑色如果一个节点是红色,那么它的两个孩子都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)从根到叶节点或空子节点的每条路径,必须包含相同的黑色节点......

2024-11-16 17:47:18 874

原创 Kotlin协程suspend的理解

作为开发者,您可以把挂起函数看作是普通函数,只不过它可能会在某些时刻挂起和恢复而已。协程的挂起就是退出方法,等到一定条件到来会重新执行这个方法,因为对方有这个协程的引用,当然可以调用你的方法了。,也可以返回String,返回值就是协程的返回值,所以返回值的类型无法确定。因为内部没有使用挂起函数,内部的逻辑就和普通方法一样,就是多一个参数和一个返回结果。方法就是在执行这个挂起方法(此时已经被转换成java的普通方法了)。修饰的方法中如果使用了挂起函数,并且挂起函数可以返回。的值就会加1,等下次恢复的时候,

2024-11-02 18:52:30 498

原创 Kotlin协程-async分析

本章讲解协程中asyncawait的原理。前提条件是知道父子协程是如何关联的,可以看这篇协程之间父子关系1-Job如何关联的了解。这里简单讲一下原理:使用await方法,这是一个挂载方法,协程执行到这里就会挂载(就是退出invokeSuspend方法),什么时候才能继续执行呢?使用await方法的协程会在这个协程的state链表中添加一个节点,当这个协程完成时,就会执行这个节点的invoke方法,就会唤醒之前挂载在这里的协程,顺便也把结果带回来了。在之前先看如下例子:你猜最后parentJob。

2024-11-01 20:15:32 1252

原创 Kotlin协程分析之CoroutineScheduler-WorkQueue队列

这就是非公平时,有的任务可以插队,先运行,这里的插队不是真的进入数组中插队,是找了一个队长看着它,下次运行时队长直接让它插队,队长就是lastScheduledTask。先从队列中偷任务,当然从consumerIndex开始找,队列里找不到,就看看队长lastScheduledTask那里有没有,如果有,还要看看是不是刚刚放进去的,如果是刚刚放进去的,就不会偷这个任务了。WorkQueue没有自动扩容的逻辑,满了是无法添加的,可以添加CPU型任务,也可以添加IO型任务。线程使用存储任务的容器。

2024-11-01 10:16:10 387

原创 Kotlin协程-调度器

协程的启动都是在当前线程即main线程中,经过挂载函数delay后,重新调度,是另外的线程了。从上面输出的结果可以看出来,协程从挂载点恢复执行后,调度器可能会从新调度到其他线程中执行。从这个名字IO就知道,执行的任务应该是IO型任务,IO型的调度器的特点就是线程数量多,协程将在当前线程一直运行,不会被调度到其他线程中执行,除非经过挂载点,会被重新调度。只是定义了线程池的核心线程,最大线程的数量,定义线程的名字,继承自。Android中使用的,作为调度器,这一点和。启动协程后,会执行到。

2024-10-31 22:49:57 938

原创 Kotlin协程分析之CoroutineScheduler

看这篇文章,可以跳着看,遇到哪个方法不懂就跳到哪个方法去看,上下对照着理解。

2024-10-31 22:44:07 607

原创 协程之间父子关系2-.Job取消过程

接着上一章kotlin协程之间父子关系1-Job如何关联的,继续讲解协程的取消过程,顺便提到了异常对协程的影响。协程本来就很复杂,它的状态有多,一定要对照本章中的调试图片仔细观察。

2024-10-31 16:39:08 334

原创 协程之间父子关系1-Job如何关联的

协程会挂起在这里,等待coroutine3结束,但是我们delay了一个超长的时间,coroutine3是一直delay下去了,执行不完。类型参数,我们说的协成是我们自己写大代码块,其实这坨代码块还要经过层层修饰封装,这才有了协程的切换线程,协程的管理等业务。然后执行到协程3,协程3主动关联它的父Job,这时父job,即协程1,关联协程3时,发现自己的state是。节点代表的是它的子协程,当然可以有其他的节点,比如协程要结束的时候会添加。当父协程取消的时候可以通知到它的子协程,看看是怎么关联进去的。

2024-10-31 09:32:46 872

原创 国内下载android源码

安装git和curlsudo apt-get install git-core curl建立AOSP目录mkdir ~/AOSPcd ~/AOSPAOSP随便你命名,就是一个目录,存放我们clone下来的源码配置 Gitgit config --global user.name Your Namegit config --global user.email you@example.com下载并配置repoRepo 是我们建立在 Git 之上的工具。 Repo 帮助我们管理许多 Gi

2021-07-18 00:02:23 1932

原创 KMP算法

朴素字符串比较朴素字符串比较就是主串T与匹配串P一个一个字符进行比较,假设主串有m个字符,匹配串有n个字符,那么就要比较(m-n+1)n个(m>n)public static int simple(String t, String p) { if (t == null || p == null) { return -1; } if (t.length() < p.length()) { return -1; } cha

2021-06-20 13:59:23 295

原创 Arouter讲解4_Core

ARouter讲解1-InterceptorProcessorARouter讲解2-AutowiredProcessorARouter讲解3_RouteProcessorArouter讲解4_Core复习经过前面的文章,我们知道注解处理后重新生成的文件,我们再来复习下被Route注解的会生成类似下面这样的类如果是IProvider类型的,会生成类似下面的类如果是 IInterceptor 类型的,会生成类似下面的类,其实 IInterceptor 也是 IPro..

2021-05-14 00:02:41 507 2

原创 ARouter讲解3_RouteProcessor

ARouter讲解1-InterceptorProcessorARouter讲解2-AutowiredProcessorARouter讲解3_RouteProcessorRoute@Target({ElementType.TYPE})@Retention(RetentionPolicy.CLASS)public @interface Route { String path(); String group() default ""; String name..

2021-05-12 23:59:36 461

原创 ARouter讲解2-AutowiredProcessor

ARouter讲解1-InterceptorProcessorARouter讲解2-AutowiredProcessorAutowired@Target({ElementType.FIELD})@Retention(RetentionPolicy.CLASS)public @interface Autowired { // Mark param's name or service name. String name() default ""; // If r..

2021-05-11 23:11:22 582

原创 ARouter讲解1-InterceptorProcessor

概述这是讲解Arouter的一篇文章,从源码级别带你分析,看这篇文章前,你需要知道一点 AbstractProcessor处理注解的技巧。InterceptorProcessor 注解@Target({ElementType.TYPE})@Retention(RetentionPolicy.CLASS)public @interface Interceptor { /** * 权重值,值越小权重越大 */ int priority(); /**

2021-05-11 00:38:58 388 3

原创 Deep Learing之Jaccard系数

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

2021-03-06 12:58:33 934

原创 复数基本概念

复数域z=x+iy或者z=x+yi,i2=−1z=x+iy或者z=x+yi,i^2=-1z=x+iy或者z=x+yi,i2=−1实数x与y分别称为复数z的实部和虚部,记作x=Rez,y=Imzx=Re z,y=Im zx=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

2021-02-23 11:11:22 4190

原创 python打包exe

pyinstaller安装 pyinstallerpython -m pip install pyinstaller安装后,把Scripts所在路径添加到PATH中。pyinstaller -F main.py去除控制台加-wpyinstaller -F -w main.py加入应用图标-ipyinstaller -F -w -i .\resource\app.ico main.py执行上面的命令后会生成一个spec文件# -*- mode: python ; coding:

2021-02-09 09:50:15 236 1

原创 Linux0.11内核源码分析1-main函数运行之前的准备

主题列表: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-themestheme: juejinhighlight:在阅读该文.

2020-12-25 11:23:12 1369

原创 为什么调用fork后需要调用wait

主题列表: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-themestheme: juejinhighlight:就拿lin.

2020-12-23 13:18:39 646 1

原创 理解fork子进程为什么返回0

从linux0.11源码分析fork函数的作用fork函数最早出现在main.c的main方法中void main(void) { ... sched_init(); ... if (!fork()) { init(); // 在新建的子进程(任务1)中执行。 } ...}头文件在unistd.h里面,int fork(void);fork函数的实现其实是一个宏定义#define _syscall0(type,name) \type name(void)

2020-12-22 21:38:16 3114 3

原创 Android Activity Launch Mode

1. standardstandard是默认的启动模式,即如果不指定launchMode属性,则自动就会使用这种启动模式。这种启动模式表示每次启动该Activity时系统都会为创建一个新的实例,并且总会把它放入到当前的任务当中。声明成这种启动模式的Activity可以被实例化多次,一个任务当中也可以包含多个这种Activity的实例。假如现在的任务栈是 A -> B -> CC启动C后,就是 A -> B -> C -> C下面是打开一个页面的ActivityRunn

2020-08-06 13:54:53 274

原创 Confetti效果实现

随机初始化x的坐标,y的坐标是在屏幕的上方初始化,随机初始化宽度随机初始化倾斜长度 function confettiParticle(color) { this.x = Math.random() * W; this.y = Math.random() * H - H; this.r = RandomFromTo(20, 40); this.color = color; this.tilt = Math.floor(.

2020-07-29 20:58:44 1536

原创 地球绕太阳运行模拟

质量为m的地球的动能质量为m的相对太阳的引力势能设太阳的质量为M,其无穷远处的势能为零点,当质量为m的物体从无穷远处移动到太阳r处时,引力做功从无穷远处来到r处,引力势能变化所以r处的引力势能为我们此时知道了地球的引力势能与动能,使用拉格朗日函数找到r的关系解出来就是找到θ的关系因为θ与L没有关系,所以偏导数就是0计算r的加速度距离的二阶导数就是加速度 function calculateDistanceAcceleration(state) { ` .

2020-07-14 18:37:14 1765 2

原创 帧率FPS控制

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>帧率控制</title> <style type="text/css"> body, html { width: 100%; height: 100%; } </sty.

2020-07-13 20:35:29 798

原创 霍纳法则(Horner Rule)--计算多项式的值

假设有n+1个实数a0,a1,…,an,和x的序列,要对多项式**Pn(x)= anxn +an-1xn-1+…+a1x+a0**求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,时间复杂度O(nk)。有没有更高效的算法呢?答案是肯定的。通过如下变换我们可以得到一种快得多的算法,即Pn(x)= anxn +an-1xn-1+…+a1x+a0=((…(((anx +an-1)x+an-2)x+ an-3)…)x+a1)x+a0这种求值的方法我们称为霍纳法则比如Pn(x)

2020-07-09 20:28:22 3252

原创 拉格朗日(Lagrange)插值算法

多项式除法假定平面上有**A(1,-1) ,B(2,9),C(3,25)求出最低次多项式f(x)经过这些点,前面我们讲过牛顿插值,现在我们不用这个方法。想要经过这些点,那么当满足某些条件时,我们假设有三个函数f1(x) , f2(x), f3(x)**满足以下关系已知有给定的k + 1个取值点:(x0,y0), … ,(xk,yk)假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为练习:参考:https://zh.wikiped

2020-07-09 17:29:27 2840

原创 用多个点来近似求导,并给出精度

一阶导数二阶导数三阶导数高阶导数参考:http://ocw.snu.ac.kr/sites/default/files/NOTE/Lecture%2008_0.pdf

2020-07-09 15:17:59 2532

原创 牛顿插值算法

###差商定义称 **f [ x0 , xk ] = ( f ( xk ) - f ( x0 ) ) / ( xk - x0 )为函数f(x)关于点x0,xk**的一阶差商(或者均差)######0阶差商f[x0] = f(x0)f[x1] = f(x1)…f[xk] = f(xk)######二阶差商f [x0 , x1 , x2] = ( f [ x1 , x2 ] - f [ x0 , x1 ] ) / (x2 - x0)######K阶差商f [x0 , x1 , …, x

2020-07-09 09:08:43 751

原创 过点找曲线方程----牛顿插值多项式

问题给定平面上X坐标互不相等的四个点A(1,1) 、B(3,3)、C(4,1)、D(5,5),如何找到一个三次函数通过这四个点?###利用行列式求解令 f(x) = ax3 + bx2 + cx + d可以将四个点带入得到方程组计算行列式最后得出方程 f(x) = x3 -9x2 + 24x -15###牛顿插值法求解牛顿插值原理因为过4个点,可以找到一条3阶方程设方程为P(x) = a0 + a1(x-x1) + a2(x - x1)(x - x2) + a3(x - x1)

2020-07-09 09:08:08 1774

原创 Metaball变形球效果实现

效果图一 .求出圆的外公切线两个圆心之间的距离,也就是两点之间的距离const distanceBetweenCenter = Math.sqrt(Math.pow(c1.cx - c2.cx, 2) + Math.pow(c1.cy - c2.cy, 2));计算直线C1C2与水平线的角度const angleBetweenCenters = Math.atan2(c2.cy - c1.cy, c2.cx - c1.cx);角P2C1C2可以根据公式求出const spread = Ma

2020-07-03 15:19:03 1003

原创 用高数研究小阻尼弹簧情形

在同济版高数1中323页有个这样的例题,为了方便,这里只研究小阻尼情况设弹簧的弹性系数为C, 根据牛顿第二定律,用微方表示就是移项后得到我们设,为什么是2n,k平方,后面解微分方程就有用了最后我们就等得到这样的微分方程剩下的就是解微分方程了,2n是常数,k是常数,这样就是常系数齐次线性微分方程我们只研究小阻尼情况,所以n<k,所以微分方程的根就是一对共轭复数根,看到了吗,为了容易解出方程,设k平方这样微分方程的通解就是我们知道了通解,但是不知道特解,假设t=0时,x.

2020-05-26 12:07:01 781

原创 js 切割三角形

前面我说过怎么切割圆形三角形的切割就是每一条边(注意是线段)与另一个线段的交点的问题我们把三角形的每一条边看成一个向量,切割的线段也是一个向量,这样就是两个向量求交点问题现有向量AB 与向量CD 相交于P点设A(x1,y1) , B(x2, y2),C(x3,y3) , D(x4, y4) ,P(x,y)因为向量CP // 向量DP ,向量AP // 向量BP向量CP =...

2020-05-07 18:48:45 424

原创 js切割圆形

这种类型就是线段与圆的交点问题设线段就是P1P2就是我们的线段,P1(x1,y1) , P2(x2,y2)交点是P(x,y)那么向量 OP = 向量O P1 + u(P1P2),u是一个系数则x = x1+u(x2−x1)y = y1+u(y2−y1)由于P也在圆上,所以(x−x3)2+(y−y3)2=r2带入方程,求解Au2+Bu+C=0A = (x2−x1)2+(y...

2020-05-07 18:02:56 720

原创 js内公切线切点的计算

之前讨论过外公切线切点的计算很类似,主要就是计算∠P1C1C2 的角度△P1C1O与△P3C2O是相似三角形令 圆心之间的距离 d = C1C2这样可以求出C1O的距离C1O = d r1/(r1+r2 )那么∠P1C1O = arccos(r1/C1O) = arccos((r1+r2 )/d)let canvas = document.getElementById("ta...

2020-04-20 10:13:39 479

原创 js外公切线切点的计算

令P1P3 与C1C2 的交点是E点P1C1 / P3C2 = C1E / C2E = C1E / (C1E - C1C2)令 圆心之间的距离 d = C1C2∴ ∠P1C1E = arccos((P1C1 - P3C2) / C1C2 ) = arccos( (r1 -r2 ) / d)计算 C2C1 与水平线夹角,然后加上∠P1C1E就是P1的角度let canvas = ...

2020-04-20 09:49:12 979 1

原创 js过圆外一点的直线与圆相切的切点坐标计算

由圆外一点P1(x1,y1)向圆(x - a)2 + (y - b)2 = R2作切线,切线与圆相切的切点是P0(x0,y0)先求直线P0P1直线方程因为P0P1⊥OP0向量OP0 = (x0 - a,y0 - b )向量P0P1 = (x1 - x0, y1 - y0)所以 向量P0P1 点乘 向量OP0 = 0所以 (x0 - a)* (x1 - x0) + (y0 - b)(...

2020-04-19 19:49:13 8258

原创 Spans

前言基于Android API 23文档和源码。 SpannableStringBuilder void setSpan (Object what, int start, int end, int flags)函数意义: 给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,可以设置多个(比如同时加上下划线和删除线等),Falg

2016-01-13 16:40:18 1890

原创 Java IO系列6 字节流之PipedInputStream与PipedOutputStream

用于不同线程之间的通信,如果我们在一个线程中同时使用会发生什么呢?PipedInputStream inputStream = new PipedInputStream(); //默认1024字节的缓冲区 //第一种连接方式 //PipedOutputStream outputStream = new PipedOutputStream(inputStream);

2015-12-27 13:42:59 753

PanoramaGL_0.2-beta.jar

PanoramaGL_0.2-beta.jar

2014-08-27

循环显示图片的ViewPage

可以在ViewPage里左右循环查看图片,自定义的标签可以控制显示哪个Viewpage里的数据!

2014-08-26

ListView与CheckBox

在ListView中实现全选与反选,模仿删除短信时的界面功能,读取SIM卡联系人

2014-08-06

深入JAVA虚拟机第二版

深入JAVA虚拟机第二版 (美)Bill Venners著 曹晓刚 蒋倩译

2014-03-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除