<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Move_now的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Move_now</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Move_now]]></copyright><item><title><![CDATA[这是一个简单的秋招总结（BAT、M、快手）]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/82784231</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/82784231</guid><author>Move_now</author><pubDate>Thu, 20 Sep 2018 11:33:45 +0800</pubDate><description><![CDATA[实习经历
继三月份找实习，腾讯和百度之间，最后去了百度大搜。
实习期间，个人感觉百度的工程师文化的确很浓厚，百度无论是工作环境还是文化氛围都比较适合工程师的成长，平时大家都以同学互称，百度大学确实名不虚传，也称得上互联网的黄埔军校。
六月份开始实习，不得不吐槽回龙观的地铁，太挤了！！！去的时候又是北京高温期，走到地铁站都已经汗流浃背了。第一天到了工位，只是一个实习生坐的小桌子，看着导师的大工位，符...]]></description><category></category></item><item><title><![CDATA[流式计算-low watermark机制]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/80794405</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/80794405</guid><author>Move_now</author><pubDate>Sun, 24 Jun 2018 20:54:27 +0800</pubDate><description><![CDATA[前言

最近在学习流式计算相关的知识，在阅读了MillWheel论文以及DStream相关实现后，在这里对low watermark机制做一个总结与介绍。



Window

实时数据流是永不停歇的，我们无法获取所有的数据并产出一个最终的结果。很多情况下我们更关心的是最近的状态，而不是从实时数据流启动至今的统计数据。因此需要将数据流切分为一个个片段，这些片段形象的称为Window。总而言之，Wi...]]></description><category></category></item><item><title><![CDATA[大三总结+感想]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/80389444</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/80389444</guid><author>Move_now</author><pubDate>Mon, 21 May 2018 10:58:32 +0800</pubDate><description><![CDATA[0x00

最近这两个月事情还是挺多的，毕竟这学期比较短，大四一整年也没有课。都有段时间没怎么更新博客了，主要是实习之前需要了解的东西涉及到流式计算那些，还要重新学起，看文档和论文，自己都还不是很理解，不太适合写出来。

0x01

因为也快离开学校了，最近思考整理了一下，想给出一些自己的建议供初学者参考。

首先就是以前从没有接触过计算机的同学，可能会被五花八门的方向所吸引，就率先给自己贴了一些...]]></description><category></category></item><item><title><![CDATA[2018年春招总结(暑假实习生C++岗)]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/79678552</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/79678552</guid><author>Move_now</author><pubDate>Sat, 24 Mar 2018 15:43:46 +0800</pubDate><description><![CDATA[


前言
春招进行时
春招的时间
招聘信息来源
投递简历的时机
简历的准备
面试的技巧
心态


如何准备
复习的时间
复习的内容


自己的面经
深信服
深信服一面
深信服二面
深信服终面
总结


CVTE
CVTE现场一面
CVTE现场二面
CVTE现场终面
总结


百度
百度一面
百度二面
百度终面
总结


腾讯
腾讯简历评估面
腾讯小组leader面
腾讯部门主管面
腾讯HR面
总...]]></description><category></category></item><item><title><![CDATA[cscope解决找不到该文件问题(File ../xxx/yyy.c不存在)]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78989480</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78989480</guid><author>Move_now</author><pubDate>Sat, 06 Jan 2018 16:04:15 +0800</pubDate><description><![CDATA[出错情况:

之前一直在使用cscope来阅读源码,期间碰到过找到了函数/变量定义,却跳转不过去的情况,提示”File ../xxxx/yyyy.c”不存在之类的错误。



解决方法:

出现该问题的原因是当我们使用cscope -Rbq生成cscope.out文件时,使用的是相对路径。解决的思路也很简单,生成时使用绝对路径即可。cscope官方提供了一个解决方案:使用cscope.files文]]></description><category></category></item><item><title><![CDATA[SMP、NUMA、MPP模型介绍]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78973865</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78973865</guid><author>Move_now</author><pubDate>Thu, 04 Jan 2018 18:06:58 +0800</pubDate><description><![CDATA[转载出处:https://www.cnblogs.com/yubo/archive/2010/04/23/1718810.html

从系统架构来看，目前的商用服务器大体可以分为三类，即对称多处理器结构 (SMP ： Symmetric Multi-Processor) ，非一致存储访问结构 (NUMA ： Non-Uniform Memory Access) ，以及海量并行处理结构 (MPP]]></description><category></category></item><item><title><![CDATA[linux memalign、valloc函数]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78949296</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78949296</guid><author>Move_now</author><pubDate>Tue, 02 Jan 2018 10:12:14 +0800</pubDate><description><![CDATA[转载出处：http://blog.youkuaiyun.com/shisiye15/article/details/7827716
在GNU系统中，malloc或realloc返回的内存块地址都是8的倍数（如果是64位系统，则为16的倍数）。如果你需要更大的粒度，请使用memalign或valloc。这些函数在头文件“stdlib.h”中声明。

    在GNU库中，可以使用函数free释放memal]]></description><category></category></item><item><title><![CDATA[历史上线程的3种实现模型]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78615668</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78615668</guid><author>Move_now</author><pubDate>Thu, 23 Nov 2017 15:55:11 +0800</pubDate><description><![CDATA[原文链接

一.概述                                                   

这里以Linux为例。Linux历史上，最开始使用的线程是LinuxThreads，但LinuxThreads有些方面受限于内核的特性，从而违背了SUSV3
 Pthreads标准。即它要根据内核的特性来实现线程，有些地方没有遵循统一的标准。后来IBM开发了NGP]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(十五).事件模块小结(从解析配置到事件的处理)]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78516924</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78516924</guid><author>Move_now</author><pubDate>Mon, 13 Nov 2017 09:10:23 +0800</pubDate><description><![CDATA[前言
配置项结构体的创建及赋值
初始化工作
处理事件
小结
前言本小节主要是整理一下前几节分析的nginx的核心模块的ngx_events_module以及事件模块,关于事件模块什么时候初始化以及事件的处理等,因此不会涉及到太多具体的代码,主要是把握事件模块的整体。配置项结构体的创建及赋值在使用一个模块的功能之前,我们需要先根据配置文件来定制该模块的功能,对于事件模块来说,有选取哪种事件模型,以及单]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(十四).惊群问题的解决]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78509211</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78509211</guid><author>Move_now</author><pubDate>Sat, 11 Nov 2017 22:31:41 +0800</pubDate><description><![CDATA[前言
accept导致的惊群问题
epoll导致的惊群问题
多个进程共用一个epfd
多个进程有自己的epfd
小结前言本小节将看到nginx中解决惊群现象的方法。所谓惊群现象,简单的来说就是当多个进程或线程在同时阻塞等待同一个事件时,如果该事件发生,会唤醒在等待的所有的进程/线程,但最终只可能有一个进程/线程对该事件进行处理,其他进程/线程会在失败后重新休眠,唤醒多个进程/线程这种不必要的行为会造]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(十三).新建连接并处理就绪事件]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78494676</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78494676</guid><author>Move_now</author><pubDate>Thu, 09 Nov 2017 22:12:01 +0800</pubDate><description><![CDATA[前言
如何建立新连接
建立新连接的回调函数
处理事件
小结前言本小节主要讨论事件模块中如何接受新连接,其中涉及到了惊群以及负载均衡的处理。如何建立新连接之前在分析ngx_event_process_init函数时,将所有空闲连接形成链表之后,它会遍历所有监听端口并将其读事件的回调函数设置为ngx_event_accept接着会把监听连接的读事件添加到ngx_epoll_module模块中。当执行ng]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(十二).定时器及超时事件的管理]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78480061</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78480061</guid><author>Move_now</author><pubDate>Wed, 08 Nov 2017 16:15:25 +0800</pubDate><description><![CDATA[前言
时间缓存
缓存时间的精度
定时器的实现
小结前言本小节将分析nginx定时器以及时间管理部分的知识,当事件超时时,会触发nginx中的超时机制进行处理。nginx的定时器的底层实现是使用的红黑树,这里就不去讲解红黑树了,网上有很多资料。时间缓存nginx为了性能方面的考虑,并不是每次需要获取时间时都调用gettimeofday函数,而是将时间缓存下来存在全局变量中(core/ngx_times]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(十一).ngx_epoll_module模块(上)]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78473047</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78473047</guid><author>Move_now</author><pubDate>Tue, 07 Nov 2017 21:55:57 +0800</pubDate><description><![CDATA[前言
模块的通用接口
感兴趣的配置项
存储配置项的结构体
事件模块的通用接口
小结
前言事件模块中有封装了多种I/O多路复用机制的模块,这里只分析epoll对应的ngx_epoll_module模块,如果你对其他的感兴趣,可以参照本小节分析的源码及步骤,因为其他驱动模块的实现与ngx_epoll_module都是大同小异的。 
首先我们还是从通用接口ngx_module_t下手。模块的通用接口ngx]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(十).ngx_event_core_module模块]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78462223</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78462223</guid><author>Move_now</author><pubDate>Mon, 06 Nov 2017 21:31:45 +0800</pubDate><description><![CDATA[前言
所有模块的通用接口ngx_module_t
感兴趣的配置项ngx_event_core_commands
存储配置项的结构体ngx_event_conf_t
事件模块的通用性接口ngx_event_module_t
小结前言本小节将进入到ngx_event_core_module模块,它是所有事件模块中排第一位的模块,因为要负责创建连接池,还要选择I/O多路复用机制等工作。接下来我们就来看看它]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(九).事件及连接的定义、连接池]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78454183</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78454183</guid><author>Move_now</author><pubDate>Mon, 06 Nov 2017 08:52:47 +0800</pubDate><description><![CDATA[前言
事件的定义
连接的定义
关于连接池
小结前言本小节将分析事件模块中事件的定义以及连接池等相关定义,方便我们后面对事件模块中的模块进行分析。事件的定义每个事件由ngx_event_s表示:struct ngx_event_s {
    /* 跟事件相关的对象。通常指向ngx_connection_t连接
     * 当开启了文件异步I/O之后,它可能会指向ngx_event_aio_t结构体]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(八).ngx_events_module模块]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78446517</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78446517</guid><author>Move_now</author><pubDate>Sat, 04 Nov 2017 22:01:25 +0800</pubDate><description><![CDATA[前言在上一小节中我们对模块的整体有了一定的把握,本小节将进入到事件模块的分析中,了解nginx是如何收集、管理、分发事件的。nginx将网络事件以及定时事件集成到一起进行管理,由于各平台的I/O多路复用机制不同,但是nginx支持多个操作系统,因此在事件模块中也实现了多种针对不同平台下封装I/O多路复用机制的模块。由于我所用的环境主要关注的是linux,因此后面主要分析ngx_epoll_modul]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(七).nginx的模块化设计]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78439984</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78439984</guid><author>Move_now</author><pubDate>Fri, 03 Nov 2017 21:43:53 +0800</pubDate><description><![CDATA[前言

高度模块化是nginx的一个特点,在正式进入到具体的模块之前,有必要从整体把握各模块之间联系与nginx对模块的控制。在前面的分析中其实已经使用了模块中提供的方法,比如worker进程的工作循环中调用的ngx_process_events_and_timers()函数,用于处理事件。



模块之间的联系

官方提供了5个类型的模块:核心模块、配置模块、事件模块、http模块、mail模块]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(六).内存池]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78429971</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78429971</guid><author>Move_now</author><pubDate>Thu, 02 Nov 2017 22:05:21 +0800</pubDate><description><![CDATA[前言本小节中,我们将看到内存池的实现。由于nginx是由c语言实现,并没有垃圾回收机制,比较容易导致memory leak,因此nginx实现了自己的内存池,将内存的管理和释放交给内存池,而需要申请内存的地方直接使用内存池来申请内存即可,每个连接/请求都会新建一个内存池。既然释放内存是由内存池来释放,那么何时释放也是一个问题,nginx中的做法是在内存池销毁的时候也将内存释放了,这样可行是因为ngi]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(五).worker进程的工作循环]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78418910</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78418910</guid><author>Move_now</author><pubDate>Wed, 01 Nov 2017 21:27:43 +0800</pubDate><description><![CDATA[前言在上一小节中,我们看到了nginx是如何使用master进程创建子进程,以及存储子进程的状态,也知道了进程间通信采用的是socketpair机制。接下来我们将重点分析ngx_spawn_process调用的proc函数,即worker进程的工作循环。ngx_worker_process_cycleproc是一个函数指针,worker进程对应的是ngx_worker_process_cycle函数]]></description><category></category></item><item><title><![CDATA[nginx源码阅读(四).创建子进程(worker和cache)]]></title><link>https://blog.youkuaiyun.com/Move_now/article/details/78407182</link><guid>https://blog.youkuaiyun.com/Move_now/article/details/78407182</guid><author>Move_now</author><pubDate>Tue, 31 Oct 2017 19:50:31 +0800</pubDate><description><![CDATA[前言

在上一小节中,我们主要分析了master进程的工作循环。本小结中,我们将看到nginx是如何创建worker进程的。在上一小节中分析master进程的工作循环时,调用了ngx_start_worker_processes函数,但是其内部调用的创建子进程的代码在ngx_spawn_process中。



ngx_spawn_process

创建进程自然想到的就是调用fork函数。ngx_]]></description><category></category></item></channel></rss>