<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[nbaDWde的博客]]></title><description><![CDATA[爱琢磨琢磨小算法]]></description><link>https://blog.youkuaiyun.com/nbaDWde</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nbaDWde]]></copyright><item><title><![CDATA[Linux线程(一)创建与退出]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/82985982</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/82985982</guid><author>nbaDWde</author><pubDate>Tue, 09 Oct 2018 17:48:04 +0800</pubDate><description><![CDATA[多线程目的是在单进程环境下执行多个任务。一个进程中的所有线程都可以访问该进程的组成部件，如文件描述符和内存。

单个资源在多个用户间共享，就必须处理一致性问题。

同一进程中的多条线程将共享该进程中的全部系统资源，如虚拟地址空间，文件描述符和信号处理等等。

但同一进程中的多个线程有各自的调用栈（call stack），自己的寄存器环境（register context），自己的线程本地存储（th...]]></description><category></category></item><item><title><![CDATA[Linux中环境变量存放文件]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/80893399</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/80893399</guid><author>nbaDWde</author><pubDate>Tue, 03 Jul 2018 09:16:07 +0800</pubDate><description><![CDATA[Linux中环境变量包括系统级和用户级，系统级的环境变量是每个登录到系统的用户都要读取的系统变量，而用户级的环境变量则是该用户使用系统时加载的环境变量。所以管理环境变量的文件也分为系统级和用户级的，下面贴一个网上找到的讲的比较明白的文件介绍（略作修改）[1]：1.系统级：（1）/etc/profile：该文件是用户登录时，操作系统定制用户环境时使用的第一个文件，应用于登录到系统的每一个用户。该文件...]]></description><category></category></item><item><title><![CDATA[C/C++ I/O详解]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/80841674</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/80841674</guid><author>nbaDWde</author><pubDate>Thu, 28 Jun 2018 14:04:03 +0800</pubDate><description><![CDATA[一、C语言I/OC语言的I/O相关函数都是封装在头文件&amp;lt;stdio.h&amp;gt;中，该头文件中定义了一些变量、宏以及各种函数来执行输入输出。具体有关C标准库&amp;lt;stdio.h&amp;gt;参见：http://www.runoob.com/cprogramming/c-standard-library-stdio-h.html注意：C语言把所有的设备都当做文件（设备只是一种特殊的文件），所以所有设...]]></description><category></category></item><item><title><![CDATA[python之GIL与多线程]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/80713819</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/80713819</guid><author>nbaDWde</author><pubDate>Sat, 16 Jun 2018 16:59:11 +0800</pubDate><description><![CDATA[1、问题的思考——python程序能通过多线程利用CPU的多核吗？先看一段程序下面这段 python 代码，CPU 占用率是多少？# 请勿在工作中模仿，危险:)
def dead_loop():
    while True:
        pass

dead_loop()答案是什么呢，占用 100％ CPU？那是单核！还得是没有超线程的古董 CPU。在我的双核 CPU 上，这个死循环只会吃掉...]]></description><category></category></item><item><title><![CDATA[C语言中的restrict限定符]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/80703781</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/80703781</guid><author>nbaDWde</author><pubDate>Fri, 15 Jun 2018 12:42:38 +0800</pubDate><description><![CDATA[今天在写opencl的kernel端代码时用到了restrict关键字，做个记录。restrict限定符的作用C语言中的一种类型限定符，用于告诉编译器，对象已经被指针所引用，不能通过除去该指针以外的所有其他直接或间接的方式修改该对象的内容restrict限定符的用法restrict关键字允许编译器优化某部分代码以更好地支持计算。它只能用于指针，表明该指针是访问该对象唯一且初始的方式。要弄明白为什么...]]></description><category></category></item><item><title><![CDATA[vim之实现函数/变量跳转功能]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/80677376</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/80677376</guid><author>nbaDWde</author><pubDate>Wed, 13 Jun 2018 12:23:28 +0800</pubDate><description><![CDATA[使用vim的时候， 会发现函数跳转的功能没有，怎么办？vim提供了强有力的函数跳转的插件功能！首先要安装ctags， 在ubuntu下直接输入sudo apt-get install exuberant-ctags接着，在源文件目录树（这里是在/home/ballack/test/目录下）执行如下命令：ctags -R .即可在/home/ballack/test目录下生成一个tags文件， 这个...]]></description><category></category></item><item><title><![CDATA[C++模板元编程]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/80674069</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/80674069</guid><author>nbaDWde</author><pubDate>Wed, 13 Jun 2018 09:42:22 +0800</pubDate><description><![CDATA[        所谓的元编程就是编写直接生成或操纵程序的程序，C++模板为C++语言提供了元编程的能力。模板使 C++ 编程变得异常灵活，能实现很多高级动态语言才有的特性（语法上可能比较丑陋，一些历史原因见下文）。普通用户对 C++ 模板的使用可能不是很频繁，大致限于泛型编程，但一些系统级的代码，尤其是对通用性、性能要求极高的基础库（如 STL、Boost）几乎不可避免的都大量地使用 C++ 模板...]]></description><category></category></item><item><title><![CDATA[Github有两种上传方式的对比——SSH/https]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/80360836</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/80360836</guid><author>nbaDWde</author><pubDate>Fri, 18 May 2018 10:34:21 +0800</pubDate><description><![CDATA[1、两种方式的对比Github有两种上传代码的方式httpsSSH大家也可以看一下这两种方式的URL是不同的。SSH方式（git@github.com:xxx/test.git）https方式 (https://github.com/xxx/test.git)https方式提交代码的几种方式：首先使用git clone后面跟https方式 把仓库克隆下来，然后提交代码(clone后面只能跟http...]]></description><category></category></item><item><title><![CDATA[python字符串]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/80335375</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/80335375</guid><author>nbaDWde</author><pubDate>Wed, 16 May 2018 12:53:00 +0800</pubDate><description><![CDATA[1、字符串编码字符串也是一种数据类型，但是，字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字，如果要处理文本，就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特（bit）作为一个字节（byte），所以，一个字节能表示的最大的整数就是255（二进制11111111=十进制255），如果要表示更大的整数，就必须用更多的字节。比如两个字节可以表示的最大整数是65535，4个字节...]]></description><category></category></item><item><title><![CDATA[C语言变长数组]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79722403</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79722403</guid><author>nbaDWde</author><pubDate>Wed, 28 Mar 2018 09:23:12 +0800</pubDate><description><![CDATA[【前言】    C语言中是不能定义变长数组的（当然，有一些特殊方法可以解决，这里先不提），代码中若遇到类似这样的结构：char data[0]，这种用法在linux内核代码中有很多，这是为了让数组长度可变的，根据需要进行分配，方便操作，节省内存空间。        【data[0]结构】    例如：struct buffer
{
    int data_len;   //长度
    char...]]></description><category></category></item><item><title><![CDATA[Objective-C属性property详解]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79552312</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79552312</guid><author>nbaDWde</author><pubDate>Wed, 14 Mar 2018 11:33:28 +0800</pubDate><description><![CDATA[1、简介： property是Objective-C的关键词，与@synthesize配对使用，用来让编译好器自动生成与数据成员同名的方法声明。@synthesize则是用来生成对应声明方法的实现。1.1 property的语法格式：@property （参数1，参数2）类型名字；这里的参数，主要有以下三种：setter/getter方法(assign/retain/copy)读写属性(readw...]]></description><category></category></item><item><title><![CDATA[IO模型及select、poll、epoll和kqueue的区别]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79298919</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79298919</guid><author>nbaDWde</author><pubDate>Fri, 09 Feb 2018 15:28:43 +0800</pubDate><description><![CDATA[（一）首先，介绍几种常见的I/O模型及其区别，如下：blocking I/Ononblocking I/OI/O multiplexing (select and poll)signal driven I/O (SIGIO)asynchronous I/O (the POSIX aio_functions)—————异步IO模型最大的特点是 完成后发回通知。阻塞与否，取决于实现IO交换的方式。  ...]]></description><category></category></item><item><title><![CDATA[如何利用android studio在手机上安装apk包]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79226754</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79226754</guid><author>nbaDWde</author><pubDate>Thu, 01 Feb 2018 12:55:41 +0800</pubDate><description><![CDATA[将手机连接到电脑上后,在android studio下面的run面板上依次执行如下命令:
1. $ adb push 电脑上apk包的绝对路径 /data/local/tmp/
// 复制apk到/data/local/tmp目录下.
2. $ adb shell pm install -r "/data/local/tmp/apk包名"
// 执行pm install  安装apk
3]]></description><category></category></item><item><title><![CDATA[STL之vector容器元素删除]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79202246</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79202246</guid><author>nbaDWde</author><pubDate>Tue, 30 Jan 2018 10:06:23 +0800</pubDate><description><![CDATA[删除vector容器的对象元素有三种方法：pop_back，erase，remove算法。
向量容器的成员函数pop_back()可以删除最后一个元素；
函数erase()可以删除由一个iterator指出的元素，也可以删除一个指定范围内的元素；
通用算法remove()也可以用来删除vector容器的元素，不同的是remove一般情况下不会改变容器的大小，而pop_back()和erase]]></description><category></category></item><item><title><![CDATA[TCP协议的RST包]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79128199</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79128199</guid><author>nbaDWde</author><pubDate>Mon, 22 Jan 2018 14:22:35 +0800</pubDate><description><![CDATA[前言：TCP中有几个比较重要的标志位， SYN ACK FIN RST PSH URG。
比如：
 (B) --> [SYN] -->(A) 

(B)<--
[SYN/ACK] A) 

(B)-->
 [ACK] --> (A) 

以上是三次握手建立连接的过程。以上字段的具体含义：


SYN: 表示建立连接

FIN: 表示关闭连接

ACK: 表示响应]]></description><category></category></item><item><title><![CDATA[TCP连接的终止]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79097710</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79097710</guid><author>nbaDWde</author><pubDate>Thu, 18 Jan 2018 17:03:45 +0800</pubDate><description><![CDATA[前言：前面讲到过TCP连接的建立，这里继续记录TCP连接的终止过程。
1、TCP连接的终止过程


如上图是TCP连接的终止过程。下面来深入了解TCP连接的释放：
由于TCP是连接是全双工的，所以每个方向上都必须进行单独关闭，这原则是当一方完成数据发送任务后就能发送一个FIN来终止这个方向的连接（收到一个FIN只意味着这一个方向上没有数据流动）。另一方收到一个FIN后仍能发送数据。首先进]]></description><category></category></item><item><title><![CDATA[4、丑数 II]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79093171</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79093171</guid><author>nbaDWde</author><pubDate>Thu, 18 Jan 2018 10:54:46 +0800</pubDate><description><![CDATA[问题描述：设计一个算法，找出只含素因子2，3，5 的第 n 小的数。符合条件的数如：1, 2, 3, 4, 5, 6, 8, 9, 10, 12...样例如果n = 9， 返回 10这一题思路很具有技巧性。其实说白了就是一个多链表Merge Sort的变形，看如下过程：Ugly Number:       1,         2,          3,           4,        ]]></description><category></category></item><item><title><![CDATA[TCP连接的建立]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79075558</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79075558</guid><author>nbaDWde</author><pubDate>Tue, 16 Jan 2018 15:37:18 +0800</pubDate><description><![CDATA[前言：TCP的问题已然困惑我很久了，一直是一知半解，靠记忆来记住TCP连接的过程，不能根本上理解，漏洞百出，最近抽时间把TCP经典书籍——《 TCP-IP详解》阅读了一下。废话不多说，这篇博客的目的是希望能帮助刚入门的老铁们以及和我一样一直只是知道大概的老铁们~
1、TCP连接的建立过程
先来放两张大家都熟悉的图：




上图和下图对应着看。上图是TCP连接建立的宏观过程：
1)]]></description><category></category></item><item><title><![CDATA[3、统计数字]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79073688</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79073688</guid><author>nbaDWde</author><pubDate>Tue, 16 Jan 2018 13:24:56 +0800</pubDate><description><![CDATA[问题描述：

计算数字k在0到n中的出现的次数，k可能是0~9的一个值

样例

例如n=12，k=1，在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]，我们发现1出现了5次 (1, 10, 11, 12)

显然用暴力搜索能可以解决的，一个数字一个数字地确定，这样时间复杂度就会很高了。
《编程之美》中给我们提供了一种思路：假设有一个5位数]]></description><category></category></item><item><title><![CDATA[2、尾部的零]]></title><link>https://blog.youkuaiyun.com/nbaDWde/article/details/79056889</link><guid>https://blog.youkuaiyun.com/nbaDWde/article/details/79056889</guid><author>nbaDWde</author><pubDate>Sun, 14 Jan 2018 15:30:38 +0800</pubDate><description><![CDATA[问题描述：

设计一个算法，计算出n阶乘中尾部零的个数

样例

11! = 39916800，因此应该返回 2.

这个问题相信很多老铁都已经遇到过了，很经典的一个题目，还是那句老话，重要的是考虑的过程，是如何想到以5的个数来统计0的个数呢？又是如何想到除以25、除以125... ...的呢？这些事重点。
首先n!中，哪些数字相乘可能会出现0呢，最简单的也是最根本的2*5(即使]]></description><category></category></item></channel></rss>