- 博客(37)
- 资源 (9)
- 收藏
- 关注
原创 caffe中如何实现rnn的结构
rnn结构的特点是,上一次的forward的输出会作为这次forward的输入,这种反馈结构在目前的layer设计要体现,同时rnn也存在很多变种,内部结构多种多样,比如GRU LSTM如何在保证反馈结构的同时,容许更加容易的实现内部结构?caffe中使用net去代替了layer,因为net内部又能用layer表述更加细致的结构变化,在net层面上实现反馈的输入即可,因此源码设计上,Recurre...
2018-02-25 14:14:00
2481
原创 传递指针和指针的引用的差别
传递的指针是值的传递,传递后会在被调函数的栈中占用一定的空间,这个空间存放的是被指向区域的地址,因此也只能改这部分的取值,原来的指针的指向地址是改变不了的。传递指针的引用,相当于传了指针的指针,但是我们任然按照指针来用,引用不在栈中占据空间,指针的引用意味这我们能改变指针的指向,这个改动会传递到调用函数中。
2016-06-14 11:35:54
529
1
原创 面向对象与面向过程
写c++的,脑海中总是会浮现一个问题,面向对象与看相过程的差别是什么?为什么要发展出面向对象的机制?众所周知,c是面向过程的,所有的逻辑被分解为一个个模块,模块之间通过一定的流程进行拼接。其实在面向对象的的时候,程序也是这么运行的,我们的设计,也会将功能分解为小的模块,然后集成。在分与合的方法上,我们是没有变化的。其实,面向对象是一种高层次的抽象,这种抽象是人的大脑天生具有的功
2015-10-10 19:26:11
546
原创 k merge算法
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Heap { vector data_;public:
2015-09-20 19:57:35
810
原创 core问题总结
1 pc指针指向的事下一个将要执行的指令地址2 test指令用来判定寄存器是否为0,常用来对返回结果进行判定。3 栈帧是通过链表的形式组织在一起的,ebp寄存器类似于链表的next指针,也就是ebp -> frame 0 -> frame1 -> frame2 这样的方式。每一个framex(x>0)的顶部就是当前这个帧的ebp。参考http://blog.youkuaiyun.com/xu
2015-09-08 18:31:52
922
原创 查找字符串中的最长回文问题评述
class Solution {public: string longestPalindrome(string s) { string post; post.resize(s.size()*2+2); post[0] = '&'; for (int i = 0;i<s.size();i++){ post[2*i + 1] = s[i];
2015-08-28 17:35:10
812
原创 libcoubase源码解析
libcouchbase是couchbase的客户端库,有很多的语言版本,现在看的是c语言2.0.6版本。libcouchbase支持时间循环使用libevent或者libev,并且在默认情况下,优先选择libevent,如果不存在libevent,再使用libev,这样的逻辑选择在函数栈#0 create_v1 (io=0x7fffffffd5d8, options=0x7ffff
2015-08-19 19:15:08
971
原创 stl源码学习
template参数推导,智能推到参数的类型,不能推导返回值。原生指针也是一种迭代器,支持* ,->,++等操作stl中的sort方式,只对能够randomaccess的迭代子。对于list slist这样的迭代子的排序方法,是单独提供的。对于list,简单的想法就是通过不断merge操作,实现排序,保证效率,则每次merger的list大小尽量相等。所以伪代码: sort()
2015-08-02 18:09:08
606
原创 nginx设计解读--模块化设计及程序初始化
struct ngx_cycle_s { void ****conf_ctx; ngx_pool_t *pool; ngx_log_t *log; ngx_log_t new_log; ngx_uint_t
2015-07-27 11:53:20
544
原创 nginx 1.6.2源码分析2 499问题之upstream
upstream作为handler中一位,有重要的作用,和filter等不同的地方是,它不自己产生内容,处于处理链的上游,特殊之处也在于,他需要暂时保留一些数据,等数据回来的时候进行回复?这具体是怎么操作的?1 upstream是如何接收请求的,接收请求的时候必然要创建一个数据结构出来,存一下啦#0 ngx_http_upstream_init_request (r=r@entry=0x
2015-07-15 22:25:18
770
原创 mutex与spinlock
在写多线程的过程中,难免会遇到锁,一般使用的是mutex或者rwlock。调试的过程中也发现,使用mutex的情况下,spinlock在perf会占有一定的比例。那么1 mutex会在多大程度上影响程序的系能,什么情况下是值得使用的?2 rwlock和mutex在实现上有什么不同?3 spinlock和mutex有什么关系?4 如何看待流行的非锁程序?性能会有提升吗?从
2015-07-14 10:04:37
1074
原创 nginx 1.6.2源码分析1 499问题
网上的解释:http://www.lc365.net/blog/b/23997/首先尝试从代码上解释问题:首先要找到打印499日志的地方,看调用的逻辑log时的栈#0 ngx_http_log_request_time (r=0x15590f0, buf=0x15d8b63 "", op=0x15d40e0) at src/http/modules/ngx_http_lo
2015-07-07 15:12:07
1108
原创 asio的异步多线程实现
使用asio的过程中,一个神奇的地方就是io_service能够多线程调用。和之前的muduo库中,oneloop onethread的思想下不太相同。现在的服务器中,io一般只需要一个线程通通搞定,但是计算却需要很多线程保证并发度。所以学习了下asio中如何多个线程,一个loop。其实思想上来说,就是task queue + 多线程,task queue需要不断地加入task和给出task,这就
2015-07-02 14:10:05
5518
原创 c++类内存机制探寻
class的成员变量分为static 和nonstatic两类class的成员方法分为static nonstatic 和virtual三类。class实例化的过程中,实际上实例化的是类的nonstatic成员变量,这也决定了类的内存消耗。继承分为单继承 多继承和虚拟继承。对子类的实例化,会先对父类进行实例化,子类是如何引用父类的,是用指针还是直接包含类的实现,因为每一个子类的父类
2015-06-28 12:52:08
684
原创 构架设计原则之一 排除人为控制
构架设计原则之一就是要将人控的因素的因素尽量排除。c++中为什么设计智能指针,因为释放内存这样一个操作对人相比于机器来说,更容易出错,所以需要智能指针尽量消除人手动释放内存的操作。在我们的库设计中,我们要尽量避免用户因为“打开方式”不对,导致错误。因为库的原则是,黑盒原则,用户在不了解库内部实现的情况下也能够实现自己的功能。如果因为”打开方式“导致用户得不到预想的结果,我们就应该考虑为用户
2015-06-18 16:27:44
489
原创 GPL许可证 开源精神
一个软件拥有GPL许可证,则说明,作为软件的使用者,你可以:1 看到源码。商业软件看不到源码。2 copy软件及源码给其他人。商业软件不予许软件使用者传播。3 对源码进行修改,产生新的软件。商业软件不予许你在它头上乱搞。就像深度系统是xp的盗版一样但是相应的义务:你的软件依赖了GPL许可证,你应该变成GPL的,要不然就不要依赖。
2015-06-11 16:19:41
1334
原创 gdb的使用技巧
watch能够检测具体的变量如何变化,但是如果变量所在的block切换之后,watch的对象就会消失,因此检测“绝对地址”上的值p &loop->anfdmax$1 = (int *) 0x2aaaabf280e8watch *(int *) 0x2aaaabf280e8这样就能检测loop->anfdmax的变化
2015-06-04 20:20:29
454
原创 软件设计之自顶向下
软件设计中,首先要避免的是逻辑依赖循环。在软件逻辑设计中,一般希望设计的软件是金字塔形状的,底层的类是不会依赖上层类的,或者说底层类看不到上层类的存在。就像通讯协议中的分层结构一样,每一层级,对应一个类,则下面的类收到上层类的支配和管理。这样的逻辑依赖就是明确和清晰的,并且在必要的时候,可以对一个层次上的类实现进行修改,在不改变接口的情况下。
2015-06-03 15:19:56
1217
原创 protobuf
protobuf纪要1 proto文件生成是靠protoc这个程序进行的,这个程序会调用libprotoc.so产生具体的文件。如果想更改产生的文件的内容,则应该更改proto库中的compile中的cpp文件,安装替换libprotoc.so2 proto中的message类型数据,都是指针引用
2015-05-29 14:58:03
418
原创 内存碎片问题
最近遇到内存碎片的问题,查了一些资料,目前来看最好的内存分配的算法还是jemalloc或者tcmalloc,两者在测试效率的时候不分伯仲,但是不知道在碎片率上有没有差别。目前看过的动态管理内存的算法:1 libc库中使用的pkmalloc2 jemalloc,据说firefox使用了jemalloc后内存碎片变小了,对valgrid进行了支持3 tcmalloc,这个支持了goog
2015-05-29 00:37:25
604
原创 x86 体系结构
x86的汇编NasmMove a b 将b寄存器的值拷贝到a寄存器 80386有16个寄存器1 通用寄存器2 段寄存器3 状态和质指令寄存器 在任何时候cpu能够访问6个段段寄存器分别是CS DS ESFS GS SS CS code segment 代码段,当发生call指令时就自动进行转换 SS stack segment堆栈段,能
2015-05-29 00:36:29
7418
原创 android adb server连接不上的问题
C:\Users\qxz\android-sdks\platform-tools>adb devicesadb server is out of date. killing...ADB server didn't ACK* failed to start daemon *error: unknown host serviceC:\Users\qxz\android-sdk
2015-05-28 23:47:42
712
原创 如何将递归函数转化为非递归函数
地市其实递归函数的特点,是自己调用自己,其实就是代码逻辑复用。函数常常作为代码逻辑复用的最小单位,但是实际上循环也是一种逻辑复用的方式。那函数和循环有什么差别呢?函数是相对封闭的,局部变量是不能相关访问的,函数能够有参数传递。局部变量不能访问,但是循环中也可以构造局部变量,唯一不同的地方就是参数传递,因此如果将递归转成非递归,需要将传递的参数先保存下来,再在下一次的循环中使用。比如可以使用队列
2015-04-16 11:57:29
1043
原创 如何解决core的问题
解决的core,实际是早到导致core原因,一般要考虑1 core现场是哪个数据出了问题,因为一般程序的错误会在编译的时候就发现了,core的时候往往都是数据有异常2 复现的条件是什么 复现的条件是导致core的充分条件,但是不一定是必要条件,我们的最终目标是找到充分必要条件,同时在充分必要条件和core的结果之间找到因果关系。找到了充分条件,再在其中找到必要条件即可,找到充分
2015-04-16 11:44:31
2211
原创 stl中的list
list在stl中是环状双向链表 end指向的恰好就是list的entry但是end本身不挂数据如果用end当一般迭代子用会导致内存被越界改写析构的时候就会出现问题在栈帧中,list保存的格式就是两指针,第一个指针是next 下一个指针是pre,其他部分分配是挂载数据的
2015-04-16 11:42:50
436
原创 x86 一致 代码
道生一 一生二 二生四 四生万物任何事物的发展都是有起源,如果你了解了起源,就明白了事情发展的边界。编程也是一样,有时我们会被上层软件设计者展现出来的各种特性所迷惑,我们有时不明白这样设计的理由,有时想当然的使用这些到特定情况下才能使用的设计。了解事物的本质,是一个理想主义者。了解事物的用途,是一个实用主义者。两者本无可厚非,但是本质和用途也不是割裂的,往往是有着密切的联系。
2015-03-31 09:33:30
608
原创 一个展开的boost unordermap内存结构
{ (boost::unordered::detail::table(boost::unordered::detail::map( std::allocator(std::pair(std::basic_string(char, std::char_traits(char), std::allocator(char) ) const, int) ), std::basi
2015-03-23 11:29:19
987
原创 读书笔记
sleep不适合用在生产环境中,对于要延长一定时间的操作可以使用timer的回掉实现,这样当前线程就不用阻塞,可以处理其他事情。不用使用递归的锁,慎用读写锁
2015-02-02 11:38:14
443
转载 man的使用参数
http://linux-wiki.cn/wiki/Man#cite_note-0man提供了-f参数,用于查找同名的手册,如:$ man -f timetime (7) - overview of time and timerstime (1) - run programs and summarize system resour
2015-02-02 11:35:47
1162
原创 bt使用
搭建bt的服务分为三步:1 搭建server: ./bittorrent-tracker.py --port 6969 --dfile dstate2 制作种子 ./maketorrent-console.py makei18n.sh http://xxx.xxx.xxx.xxx:6969/announce3 第一次下载 ./bittorrent-console.
2015-01-24 17:10:07
7371
原创 类的继承之痛
通过类的继承,构建了一个树形的逻辑依赖结构,也就是子类的功能是依赖父类的。但是随着时间的推移,我们发现,我们需要对父类进行改造,父类本身也会发生变化,原来的 class father逻辑上变成了class father和class father1,往往因为过渡时期或者历史原因,father和father1必须同时存在,我们发现,为了使用father1,我们得重新编写他的子类,尽管这两个父类的子类逻
2015-01-22 10:31:07
510
the nature of statistical learning theory.pdf.zip
2018-10-25
Linux内核源代码情景分析.pdf
2013-09-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人