自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 online learning,batch learning&批量梯度下降,随机梯度下降

以上几个概念之前没有完全其含义及区别,在本文浅析一下:一、online learning vs batch learningonline learning强调的是学习是实时的,流式的,每次训练不用使用全部样本,每来一个样本就更新一次模型。online learning其实细分又可以分为batch模式和delta模式。batch模式的时效性比delta模式要低一些。分析一下bat

2016-04-06 20:50:36 10449

原创 L0,L1,L2正则化浅析

在机器学习的概念中,我们经常听到L0,L1,L2正则化,本文对这几种正则化做简单总结。1、概念L0正则化的值是模型参数中非零参数的个数。L1正则化表示各个参数绝对值之和。L2正则化标识各个参数的平方的和的开方值。2、先讨论几个问题:1)实现参数的稀疏有什么好处吗?一个好处是可以简化模型,避免过拟合。因为一个模型中真正重要的参数可以并不多,如果考虑所有的参

2016-02-23 17:01:18 40487 8

原创 极大似然估计,最大后验概率估计(MAP),贝叶斯估计

三种参数估计方法都和贝叶斯公式有关,因此首先从分析贝叶斯公式入手:贝叶斯公式可以表达为: posterior:通过样本X得到参数的概率likehood:通过参数得到样本X的概率prior:参数的先验概率,一般是根据人的先验知识来得出的。比如人们倾向于认为抛硬币实验会符合先验分布:beta分布。,其中,比如当选取的时候,代表人们认为抛硬币得到正反面的概率都是0

2016-02-23 14:20:46 41411 2

转载 C++中获得数组的大小—CountOf实现

在C++中怎样获得数组的大小? 版权:the1(博客名) (博客地址)http://blogs.msdn.com/b/the1/翻译:magictong(童磊) 2011年4月原文地址:http://blogs.msdn.com/b/the1/archive/2004/05/07/128242.aspx          P.S. 之前在一篇文章(http://blog.c

2013-12-27 18:05:02 5712 1

转载 boost::nocopyable学习

boost::noncopyable比较简单, 主要用于单例的情况.通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.有noncopyable类, 只要让单例类直接继承noncopyable. class noncopyable的基本思想是把构造函数和析构函数设置p

2013-12-27 17:40:06 4886

转载 浅谈过载保护

转自腾讯大讲堂 http://djt.qq.com/article-156-1.html雪球:对于时延敏感的服务,当外部请求超过系统处理能力,如果系统没有做相应保护,可能导致历史累计的超时请求达到一定规模,像雪球一样形成恶性循环。由于系统处理的每个请求都因为超时而无效,系统对外呈现的服务能力为0,且这种情况下不能自动恢复。作者bison,腾讯后台开发技术总监

2012-05-09 12:50:45 2358

原创 select,poll,epoll实现分析—结合内核源代码

select,poll,epoll都是IO多路复用的机制。所谓I/O多路复用机制,就是说通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据

2012-05-06 20:31:53 11238 4

转载 后缀树【Suffix Tree】

在pongba的讨论组上看到一道Amazon的面试题:找出给定字符串里的最长回文。例子:输入XMADAMYX。则输出MADAM。这道题的流行解法是用后缀树(Suffix Tree)。这坨数据结构最酷的地方是用它能高效解决一大票复杂的字符串编程问题:在文本T里查询T是否包含子串P(复杂度同流行的KMP相当)。文本T里找出最长重复子串。比如abcdabcefda里abc同da都重复出现,而最长

2011-12-10 18:14:37 2445

转载 epoll精髓

在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __

2011-12-09 00:56:46 1908

转载 linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)

linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR) linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,(默认的)2,SCHED_FIFO实时调度策略,先到先服务3,SCHED_RR实时调度策略,时间片轮转 linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,2,SCHED_FIFO实

2011-10-25 09:09:05 2514

转载 在Linux中设置线程的优先级

如何在Linux中设置线程的优先级我们使用int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);来创建线程,但是如何设置线程的优先级呢?在讨论这个问题的时候,我们先要确定当前线程使用的调度策略,posix提供了int

2011-10-25 08:42:53 15010

转载 linux进程调度浅析

操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点

2011-09-11 16:26:20 2512 1

原创 2011九月找工作经历

当时很懊恼导师没让自己去百度实习,现在看来,这也许是对我利好的选择。当时去百度实习的两个同学,都可能要回来了,实习时间太短,无法让百度给确定offer,这边的招聘又如火如荼的进行,如果是我,也没这份耐心。传说中百度实习生留下的概率是80%,看来实际并没有这么高。一直以为华为是

2011-09-10 09:21:05 3519 13

原创 分层遍历二叉树,每层输出为一行

如果只是分层遍历二叉树并打印出所有元素,那么使用队列来实现BFS是最好的选择。但是这里要求,每层元素打印为一行,所以我们必须知道每层元素的开始和结束是什么,这种情况下,使用数组或者vector容器是更好的选择,使用两个变量来标识每一层的开始和结束,控制每一层元素的访问。代码如

2011-08-16 09:29:32 7190

原创 编程之美-重建二叉树扩展问题1 2

编程之美3.9:重建二叉树扩展问题1:如果前序和中序遍历的字母有重复的,那么怎么构造所有可能的解呢?扩展问题2:如何判断给定的前序遍历和中序遍历的结果是合理的?思路:问题1:搜索所有可能的情况,并调用扩展问题2的解决方案,判断此情况是否合理(剪枝操作),如

2011-08-15 14:43:25 5078

原创 链表经典问题汇总

收集了一下链表常见的面试为题:1、如何判断一个单链表有环2、如何判断一个环的入口点在哪里3、如何知道环的长度4、如何知道两个单链表(无环)是否相交5、如果两个单链表(无环)相交,如何知道它们相交的第一个节点是什么6、如何知道两个单链

2011-08-09 20:45:05 13985 4

转载 递归和迭代的选择

---------------------------------------------------------------------------作者:拒绝潜水的鱼出处:http://slave2.cnblogs.com/归与迭代都是基于控制结构:迭代用重复结构,而

2011-08-02 17:05:39 3223 1

转载 递归算法的时间复杂度分析

在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法:    (1)代入法(Substitution Method)

2011-07-28 21:57:24 2574

原创 内核中断,异常,抢占总结篇

一、基本概念中断分为同步中断和异步中断。同步中断CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Int

2011-07-15 21:13:12 9090 3

转载 Linux内核抢占实现机制分析

Linux内核抢占实现机制分析【摘要】本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性。然后分析了禁止内核抢占的情况和内核抢占的时机,最后介绍了实现抢占内核所做的改动以及何时需要重新调度。

2011-07-15 11:16:17 1863

原创 在用户空间发生中断时,上下文切换的过程

所谓上下文切换,实质就是寄存器堆的切换过程。这其中一部分需要硬件来切换,一部分需要软件来处理。当在用户空间发生中断时,首先由 x86 CPU 从硬件角度进行处理,然后才是 linux 内核的处理。当中断处理完毕,返回到用户空间时,最后的步骤也是交给 CPU 硬件来处理的。1、

2011-07-15 10:45:06 4361

转载 Futex同步机制

引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢?1. 什么是FutexFutex 是Fast U

2011-07-14 19:12:41 1430

转载 POSIX NTPL 线程库简介

在Linux操作系统中,本地POSIX线程库(NPTL)是一种软件特性,它可让Linux的内核,高效地运行那些使用POSIX风格的线程所编写的程序。测试中,NPTL在一个IA-32处理器上,成功地同时跑了10万个线程,启动这些线程只用了不到2秒。比较起来,在不支持NPTL的内核上

2011-07-14 18:38:33 8690

转载 锁无关的(Lock-Free)数据结构(二)

锁无关的数据结构与Hazard指针操纵有限的资源 By Andrei Alexandrescu and Maged Michael刘未鹏(pp_liu@msn.com) 译 Andrei Alexandrescu是华盛顿大学计算机科学系的在读研究生,也是《Modern C++ D

2011-07-14 08:57:41 1970

转载 锁无关的(Lock-Free)数据结构(一)

锁无关的(Lock-Free)数据结构在避免死锁的同时确保线程继续在Generic沉默了一期之后(研究生的学业总是使人不得不投入百分之百的精力),这一期文章的可写内容突然多得令人似乎有点无所适从.例如,其中之一就是关于构造函数的讨论,特别是转发构造函数(forwarding co

2011-07-14 08:55:42 2800

原创 linux内核原子操作的实现

所谓原子操作,就是“不可中断的一个或一系列操作”。硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是“原子操作”,因为中断只发生在指令边缘。在多处理器结构中(Symmetric Multi-Processor)就不同了,由于系统

2011-07-12 12:53:33 19583

原创 深入理解linux内核自旋锁

自旋锁是一个互斥设备,它只有两个值:“锁定”和“解锁”。它通常实现为某个整数值中的某个位。希望获得某个特定锁得代码测试相关的位。如果锁可用,则“锁定”被设置,而代码继续进入临界区;相反,如果锁被其他人获得,则代码进入忙循环(而不是休眠,这也是自旋锁和一般锁的区别)并重复检查这个锁

2011-07-09 10:45:58 10987 8

原创 软中断小结

内核处理的任务中有的不是那么紧迫的,在必要的时间可以把它们延迟一段时间,这就是软中断形成的背景。这对于哪些期望它们的中断能在几毫秒内得到处理的“急迫”应用来说是非常重要的。由此,硬中断负责处理紧急的任务,软中断负责处理不是那么紧迫的任务。Linux 2.6内核提供了两种非紧迫、可中断函数:所谓的延迟函数(包括软中断和tasklets)和通过工作队列来执行的函数。软中断和tasklet有密切的关系,

2011-06-29 21:07:00 1110

原创 gcc编译过程+Makefile反思

看了一段时间的《程序员自我修养》了,也算对程序的编译,链接,装载的原理有了初步的了解。十分惭愧的是,今天想自己写一个简单的Makefile,竟然很模糊,无法十分自如的写出(平时都用一个已经写好的样板改),这里做一个反思。 假设有a.c文件,要把它编译成可执行文件a。 编译+汇编: 试了一下,以下三种写法都行:gcc -c a.c -o a.ogcc -c -o a.o

2011-06-05 17:24:00 1764 1

转载 Linux系统内核定时器机制详解

<br />Linux内核2.4版中去掉了老版本内核中的静态定时器机制,而只留下动态定时器。相应地在timer_bh()函数中也不再通过run_old_timers()函数来运行老式的静态定时器。动态定时器与静态定时器这二个概念是相对于Linux内核定时器机制的可扩展功能而言的,动态定时器是指内核的定时器队列是可以动态变化的,然而就定时器本身而言,二者并无本质的区别。考虑到静态定时器机制的能力有限,因此Linux内核2.4版中完全去掉了以前的静态定时器机制。<br />  7.6.1 Linux内核对定时器

2011-05-31 21:31:00 898

原创 Fedora14中文输入法安装

<br />1、安装<br />yum -y install scim<br />yum -y install scim-pinyin<br />yum -y install scim-python //安装巨蟒拼音<br />ok~安装成功<br /> <br />2、热键设置<br />依次进入System->Preference->Input Method,在Enable Input Method Feature前打钩,然后在下面的Input Method框中选中Use SCIM,点击

2011-05-31 11:12:00 3662

原创 《程序员的自我修养》笔记--静态链接

在通过编译和汇编后,就生成了目标文件,链接就是把这些目标文件加工后合并成一个输出文件的过程。链接过程可以分为两步:第一步 空间与地址分配。扫描所有的输入目标文件,获得它们每个各个段的长度、属性和位置,并且将输入目标文件中的符号表中所有的符号定义和符号引用收集起来,统一放到一个全局符号表。这一步中,链接器将能够获得所有输入目标文件的段长度,并且将它们合并(相同的段互相合并,如.text和.text段合并、.data段和.data段合并),计算出输出文件中各个段合并后的长度和位置,并建立映射关系。通过这一步,输

2011-05-25 20:44:00 1416 1

转载 内核头文件传奇

<br />在 Linux 2.2/2.4 的纯真年代,内核头文件一直保持着 Unix 世界的"KISS"传统,只需将内核源码树中的头文件直接复制到 /usr/include 中即可使用,一切都是那么 *** and Stupid ...<br /><br />但是随着 2.6系列内核的发布,事情开始变得混乱和复杂起来。首先是内核开发者宣布强烈反对直接使用"未净化"的"原始"内核头文件,他们建议使用发行版提供的" 经过净化的"内核头文件。于是各种发行版开始"八仙过海,各显神通",由于"净化"方法各不相同,结

2011-05-13 10:04:00 748

转载 互斥同步-临界区,互斥量,信号量,事件的区别

四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已

2011-05-12 21:10:00 1843 2

原创 2011百度实习生面试题-二叉树“弓”字形遍历

题目描述:对二叉树进行“弓”字形遍历,即第一层从左往右遍历,第二层从右往左遍历,第三层从左往右遍历.....思路:传统的广度优先遍历,只需一个栈即可,但只能实现每层从左往右遍历。这里可以设两个栈,分别存放相邻两层的节点,先将某层节点存入一个栈,对这个栈的每个节点进行访问和出栈操作

2011-05-12 14:50:00 2541 2

原创 2011.5.7百度实习生笔试

<br />题目描述:有一个任务处理器,需要定时处理N个任务(N<1000)。任务处理器每次只能处理一个任务。任务之间有依赖关系,比如A任务依赖B任务,则B任务需在A任务之前执行,但是没有循环依赖关系。请设计这个任务处理器,能够输出所有任务的执行顺序。<br /> <br />很久没看图论的部分了,当时想用树的结构来存储这些任务,用树的节点间祖先和子孙的关系来表示任务间的关系。想了很久,在具体的实现上都没思路。树来实现实现这种复杂的关系还是很困难,应该用有向图。确切地说这是有向无环图的一个应用,是拓扑排序问

2011-05-08 18:05:00 1543

原创 《程序员的自我修养》笔记--可执行文件的装载

程序执行时所需要的指令和数据必须都在内存中才能正常运行,最简单的办法就是将程序运行时所需要的指令和数据全部都装入内存,这样程序就能顺利执行,这就是最简单的静态装入的方法。但是程序所需要的内存数量可能大于物理内存,静态装入就不太现实。后来研究发现,程序运行时具有局部性原理,所以我们可以将程序最常用的部分驻留在内存中,而将一些不太常用的数据存放在磁盘上,这就是动态装载的原理。覆盖装入和页映射是两种典型的动态装入方法。覆盖装入就是如果两个模块不会同时运行,则可以使这两个模块共用一块内存,需要哪个模块的时候就装入。

2011-05-06 15:21:00 2074

原创 《程序员的自我修养》笔记--目标文件详解

从源程序到目标文件的生成过程最简单的编译命令是gcc helloworld.c,它包含了以下几个步骤:预处理、编译、汇编、链接,下面分别简介。预处理:处理#define宏定义、#if #ifdef等条件编译指令、#include预编译指令,删除注释,添加行号和文件名标识,保留所有的#pargma编译器指令,经过预编译后的文件为.i文件。预编译命令为:gcc -E hello.c -o hello.i或者cpp hello.c > hello.i编译:把预处理完得文件进行一系列的词法分析、语法分析、语意分析及

2011-05-06 12:42:00 2506

原创 面试中几个基本的重要问题总结

1、堆和栈的区别,堆和栈的最大限制    堆主要用来分配动态内存,操作系统提供了malloc等内存分配机制来供程序员进行堆内存的分配,同时,堆内存的释放需要程序员来进行。malloc分配的是虚拟地址空间,和用到的实实在在的物理内存是两码事,只有真正往空间里写东西了,os内核会触发缺页异常,然后才真正得到物理内存。32位Linux系统总共有4G内存空间,Linux把最高的1G(0xCFFFFFFF-0xFFFFFFFF)作为内核空间,把低地址的3G(0x00000000-0xBFFFFFFF)作为用户空间。m

2011-05-04 11:35:00 3020

转载 Bloom Filter概念和原理

转自http://blog.csdn.net/jiaomeng/archive/2007/01/27/1495500.aspxBloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些"零错误"的应用场合。而在能容忍低错误率的应用场合下,

2011-05-01 22:42:00 912

空空如也

空空如也

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

TA关注的人

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