<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[windroid.xyz]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/windroid</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; windroid]]></copyright><item><title><![CDATA[nodejs之支持async func的并行forEach]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/105942653</link><guid>https://blog.youkuaiyun.com/windroid/article/details/105942653</guid><author>windroid</author><pubDate>Wed, 06 May 2020 01:49:32 +0800</pubDate><description><![CDATA[1.支持async func
为避免callback hell，通常会将异步函数以promise进行包装，而原生的forEach不支持async func，这里给出一个支持async func的forEach实现（非原创）：
//async/await
const CustomForeach = async (arr, callback) =&gt; {
	return new Promise(a...]]></description><category></category></item><item><title><![CDATA[参数估计]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/81068174</link><guid>https://blog.youkuaiyun.com/windroid/article/details/81068174</guid><author>windroid</author><pubDate>Mon, 16 Jul 2018 17:04:33 +0800</pubDate><description><![CDATA[参数估计是什么？ 
现在有一些样本x，假设他们服从某种分布（例如高斯分布），但是我们并不知道该分布的参数，我们通过这些样本估计出未知的参数，这就是参数估计。

有什么前提？ 
样本是独立同分布的，且训练样本足够充分。 
如果样本不是同一个分布，那么我们的假设（他们服从某种分布）就是错误的。 
如果训练样本过少，估计出来的参数就会有偏差。

最大似然估计 
反过来考虑，假设存在某个数据流满足高斯分布...]]></description><category></category></item><item><title><![CDATA[k-means算法cpp实现]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/80445299</link><guid>https://blog.youkuaiyun.com/windroid/article/details/80445299</guid><author>windroid</author><pubDate>Thu, 24 May 2018 23:05:03 +0800</pubDate><description><![CDATA[k-means过程：


从数据集中随机选取k个点作为初始center
迭代（直到一定次数或迭代前后无变化）： 
计算每个向量最近的center，将其归为该类
计算每一类向量的质心，作为新的center


在此使用欧氏距离

测试数据集（68040*32）：CorelFeatures-mld/ColorHistogram.asc

#include &amp;lt;iostream&amp;gt;
#inclu...]]></description><category></category></item><item><title><![CDATA[PCA算法cpp实现]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/80445212</link><guid>https://blog.youkuaiyun.com/windroid/article/details/80445212</guid><author>windroid</author><pubDate>Thu, 24 May 2018 22:57:29 +0800</pubDate><description><![CDATA[PCA过程：


零均值化
求协方差
求特征值及特征向量
按特征值大小排序特征向量
取前k行组成变换矩阵
使用变换矩阵即可进行降维或还原


测试数据集（68040*32）：CorelFeatures-mld/ColorHistogram.asc

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;math.h&amp;gt;
#include &amp;lt;string.h&amp;gt;...]]></description><category></category></item><item><title><![CDATA[LZW编码解码cpp实现]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/80419192</link><guid>https://blog.youkuaiyun.com/windroid/article/details/80419192</guid><author>windroid</author><pubDate>Wed, 23 May 2018 14:12:01 +0800</pubDate><description><![CDATA[算法过程：


  
  1：将词典初始化为包含所有可能的单字符，当前前缀P初始化为空。
  2：当前字符 C=字符流中的下一个字符。
  3：判断 P+C 是否在词典中 
  (1) 如果“是”，则用C扩展P，即让P=P+C，返回步骤2 
  (2) 如果“否”，则: 
         输出与当前前缀P相对应的码字W； 
         将P＋C添加到词典中； 
         令P=C，...]]></description><category></category></item><item><title><![CDATA[pintos (6) --运算符优先级]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78816076</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78816076</guid><author>windroid</author><pubDate>Fri, 15 Dec 2017 19:20:15 +0800</pubDate><description><![CDATA[一个定点小数除法如下：#define FD_DIV(X, Y) (((fp_t)X)<<FD_SHIFT_AMOUNT/(Y))然而这是错的……错在哪里呢…左移 << 的优先级低于除法 / … 
所以会先计算FD_SHIFT_AMOUNT/(Y)#define FD_DIV(X, Y) ((((fp_t)X)<<FD_SHIFT_AMOUNT)/(Y))
加上括号就好了…对括号哲学的理解还是不够]]></description><category></category></item><item><title><![CDATA[pintos (5) --Advanced Scheduler]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78816055</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78816055</guid><author>windroid</author><pubDate>Fri, 15 Dec 2017 19:15:33 +0800</pubDate><description><![CDATA[多级反馈队列调度器（multilevel feedback queue scheduler）在多级反馈队列调度器中，线程的优先级是通过下面的公式动态计算的：priority = PRI_MAX - (recent_cpu/4) - (nice * 2)
recent_cpu = (2*load_avg)/(2*load_avg + 1)*recent_cpu + nice
load_avg= (59]]></description><category></category></item><item><title><![CDATA[pintos (4) --Mesa vs. Hoare style]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78815980</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78815980</guid><author>windroid</author><pubDate>Fri, 15 Dec 2017 19:02:26 +0800</pubDate><description><![CDATA[在阅读pintos/src/threads/synch.c的时候，发现了一个令人疑惑的地方：/* Down or "P" operation on a semaphore. Waits for SEMA's value
to become positive and then atomically decrements it.
This function may sleep, so it must n]]></description><category></category></item><item><title><![CDATA[pintos (3) --Priority Inversion]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78815953</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78815953</guid><author>windroid</author><pubDate>Fri, 15 Dec 2017 18:55:57 +0800</pubDate><description><![CDATA[解决lock上优先级反转的问题
优先级反转的问题使用优先级捐赠来解决，当当前线程想要获得低优先级线程拥有的锁时，将低优先级线程的优先级设为当前线程的优先级，当低优先级线程释放锁的时候恢复其原始优先级。
整个过程分两个部分：捐赠和恢复。
其中的问题有：链式捐赠，多重捐赠，捐赠对信号量的影响。
优先级捐赠分两步：
如果要获取的锁已被获取，且拥有者的优先级低于当前线程，则设置其优先级为当前线程优先级。此时]]></description><category></category></item><item><title><![CDATA[pintos (2) --Priority Scheduling]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78815878</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78815878</guid><author>windroid</author><pubDate>Fri, 15 Dec 2017 18:44:47 +0800</pubDate><description><![CDATA[为Pintos建立优先级调度机制，并确保任何时刻CPU上运行的都是最高优先级线程。
为确保最高优先级的线程运行，需要重新计算调度的时刻有：创建新线程，设置线程优先级。故将ready_list改为有序队列，优先级较高在前，同时在thread_yield()时，如果下个线程的优先级小于当前线程，则不进行调度。
信号量和条件变量的优先级，均可通过保证waiters list 按优先级排列实现唤醒优先级最高]]></description><category></category></item><item><title><![CDATA[pintos (0) --前言]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78815798</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78815798</guid><author>windroid</author><pubDate>Fri, 15 Dec 2017 18:28:35 +0800</pubDate><description><![CDATA[要完成pintos不仅需要理解操作系统理论，同时也需要：
一个好的IDE，良好的阅读代码环境是极其重要的，不论vim+ctags也好，Emacs,Sublime,Atom,Eclipse等也罢，进入函数内部阅读其内容的功能是必要的
仔细阅读帮助文档，仔细阅读每个代码文件：从LOADER开始，到init，再到usercode，了解从系统启动开始的每一步都做了什么；有哪些系统支持的数据结构和算法
C的基]]></description><category></category></item><item><title><![CDATA[pintos (1) -- Alarm Clock]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78815680</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78815680</guid><author>windroid</author><pubDate>Fri, 15 Dec 2017 18:10:23 +0800</pubDate><description><![CDATA[实现非阻塞的timer_sleep()函数。线程调用timer_sleep()后主动block，并设置blockticks，每次时钟中断blockticks减1，待其减为0时unblockstruct thread 添加属性：long long blockticks;    /* Ticks to be block.*/同时在init_thread()中对其进行初始化：t->blockticks =]]></description><category></category></item><item><title><![CDATA[使用select进行 阻塞式/低CPU消耗 延时]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78418731</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78418731</guid><author>windroid</author><pubDate>Wed, 01 Nov 2017 21:11:00 +0800</pubDate><description><![CDATA[select函数本是被用作检测系统文件描述符的状态int threadDelay(const int sec, const int usec){
    timeval tv;
    tv.tv_sec = sec;
    tv.tv_usec = usec;
    if (0 != select(0, NULL, NULL, NULL, &tv)){
        return -1;]]></description><category></category></item><item><title><![CDATA[QT emit connect 无效的一种错误]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/78412784</link><guid>https://blog.youkuaiyun.com/windroid/article/details/78412784</guid><author>windroid</author><pubDate>Wed, 01 Nov 2017 12:37:53 +0800</pubDate><description><![CDATA[connect方法的一般形式为：
  connect(*sender,  SIGNAL(signal()),  *receiver,  SLOT(method()));
需要注意的是sender是实例化的一个对象，connect绑定的是该对象的signal()信号，如果存在同类型的其他实例化对象，他们的signal()信号是没有被绑定的例如存在sender0, sender1 
仅调用  
conn]]></description><category></category></item><item><title><![CDATA[Container With Most Water]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/73698409</link><guid>https://blog.youkuaiyun.com/windroid/article/details/73698409</guid><author>windroid</author><pubDate>Sun, 25 Jun 2017 00:48:27 +0800</pubDate><description><![CDATA[一个非负整数数组a1, a2, …, an 分别代表一系列点 (i, ai)，分别过这些点作x轴的垂线，任选两条线与x轴组成一个容器，求容器最大能盛下多少水。要求复杂度O( n ) 
注：容器不能倾斜；保证n>=2最容易想到的就是类似冒泡扫一遍过去，复杂度O( n^2 )，TLE题解很容易理解的O( n )方法：双指针（Two Pointers）设选择的两个点为(i, a[i])(j, a[j])，]]></description><category></category></item><item><title><![CDATA[Median of Two Sorted Arrays]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/73478413</link><guid>https://blog.youkuaiyun.com/windroid/article/details/73478413</guid><author>windroid</author><pubDate>Tue, 20 Jun 2017 00:06:52 +0800</pubDate><description><![CDATA[现给两个已排序的数组nums1和nums2，长度分别为m和n
  
  求两个数组合并后的中位数，要求复杂度为O( log( m+n ) )例1：
nums1 = [1, 3] 
nums2 = [2]The median is 2.0
例2：
 nums1 = [1, 2]
 nums2 = [3, 4] The median is (2 + 3)/2 = 2.5虽然二分的复杂度是O( log(n]]></description><category></category></item><item><title><![CDATA[async whilst使用注意]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/51925661</link><guid>https://blog.youkuaiyun.com/windroid/article/details/51925661</guid><author>windroid</author><pubDate>Sat, 16 Jul 2016 18:19:13 +0800</pubDate><description><![CDATA[var async = require('async');
var count = 0;
var list = [{name:'Jack',age:20},{name:'Lucy',age:18}];
async.whilst(
    function(){
        console.log(count);
        return count < list.length;
    },]]></description><category></category></item><item><title><![CDATA[JS HTML转义码解码]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/51923871</link><guid>https://blog.youkuaiyun.com/windroid/article/details/51923871</guid><author>windroid</author><pubDate>Sat, 16 Jul 2016 12:52:16 +0800</pubDate><description><![CDATA[背景： 
JQ的html()函数得到网页的html源码，而有时得到的文本中的中文会以HTML转义码的形式出现：如“转发”被编码成了“& #x8F6C;& #x53D1;”。（这里&和#之间加了空格，否则会直接显示为中文）
而使用text()函数又会丢失网页的元素信息，所以想原生的保留网页信息只能进行手工解码。
原理： 
这种编码方式使用的编码为unicode，在&#和;之间的十六进制数即为该字符的u]]></description><category></category></item><item><title><![CDATA[Session是什么]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/51225941</link><guid>https://blog.youkuaiyun.com/windroid/article/details/51225941</guid><author>windroid</author><pubDate>Sat, 23 Apr 2016 13:37:08 +0800</pubDate><description><![CDATA[我们首先了解以下前提知识：http是一种无状态性的协议。我们无法仅从http层了解到某个请求是源自于哪一个用户。
结合到实例里：    假如我们在浏览器里登录一个系统，点击登录，网站友好的提示：登陆成功。
    那么我们进行下一个操作，比如，点击打开个人中心，服务器懵了，究竟应该打开谁的个人中心呢？
    刚才我们确实登录了系统，可是这次我们是发送了另外一个http请求，仅从http层，服务器无]]></description><category></category></item><item><title><![CDATA[ThinkPHP里的MVC]]></title><link>https://blog.youkuaiyun.com/windroid/article/details/51225382</link><guid>https://blog.youkuaiyun.com/windroid/article/details/51225382</guid><author>windroid</author><pubDate>Sat, 23 Apr 2016 11:21:56 +0800</pubDate><description><![CDATA[ThinkPHP里的MVC
M：Model  
model对应所有的数据操作，相当于将数据库相关进行了一次封装，每个model就是数据库里的一个表。 
 而且有两种操作模型的方式：M() 方法：直接得到数据库里的表，没有高级功能，只能手动进行CURD
D() 方法：实例化model对象，不仅可以进行CURD的原子操作，还可以使用ThinkPHP提供的高级方法（自动验证、自动完成等）。D() 方法实例]]></description><category></category></item></channel></rss>