<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[You are what you output]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/erazy0</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; erazy0]]></copyright><item><title><![CDATA[一个全是 32 位整数的大数组，除了其中一个数字出现 2 次外，其余数字都出现 3 次。如何找出那个只出现两次的数字？]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/6443715</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/6443715</guid><author>erazy0</author><pubDate>Sun, 28 Jul 2019 13:23:49 +0800</pubDate><description><![CDATA[#include &lt;stdio.h&gt; int a[] = {433,657,9876,42,9876,657,42,433,433,657,42}; int find_twice(int a[], int length) { int ones = 0; // ones记录了出现1次和3次的位 int twos = 0; // twos记录了出现2次和3次的位 int not_three...]]></description><category></category></item><item><title><![CDATA[程序减肥，strip，eu-strip 及其符号表]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090355</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090355</guid><author>erazy0</author><pubDate>Fri, 28 Aug 2015 23:32:36 +0800</pubDate><description><![CDATA[我们公司产品里面的可执行程序和动态共享库（DSO）里面的符号表都被移除了，所以每次遇到core dump的时候，都需要将符号表导入到/usr/lib/debug目录下。一直没弄明白为啥是这个目录，能不能是其他目录，今天没啥事儿，研究了下这个主题。
 我们要给我们生成的可执行文件和DSO瘦身，因为这样可以节省更多的磁盘空间，所以我们移除了debug信息，移除了符号表信息，同时我们...]]></description><category></category></item><item><title><![CDATA[Linux系统网络服务器模型]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090353</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090353</guid><author>erazy0</author><pubDate>Tue, 06 Nov 2012 11:46:43 +0800</pubDate><description><![CDATA[Linux系统网络服务器模型主要有两种：并发服务器和循环服务器。所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求；循环服务器是指服务器在同一时刻指可以响应一个客户端的请求。而且对于TCP和UDP套接字，这两种服务器的实现方式也有不同的特点。1、TCP循环服务器：首先TCP服务器接受一个客户端的连接请求，处理连接请求，在完成这个客户端的所有请求后断开连接，然后再接受下一个客...]]></description><category></category></item><item><title><![CDATA[漫谈linux文件IO]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090354</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090354</guid><author>erazy0</author><pubDate>Fri, 28 Sep 2012 10:59:09 +0800</pubDate><description><![CDATA[在Linux 开发中，有几个关系到性能的东西，技术人员非常关注：进程，CPU，MEM，网络IO，磁盘IO。本篇文件打算详细全面，深入浅出。剖析文件IO的细节。从多个角度探索如何提高IO性能。本文尽量用通俗易懂的视角去阐述。不copy内核代码。

 阐述之前，要先有个大视角，让我们站在万米高空，鸟瞰我们的文件IO，它们设计是分层的，分层有2个好处，一是架构清晰，二是解...]]></description><category></category></item><item><title><![CDATA[一个均匀绑定 cpu 的 shell]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090347</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090347</guid><author>erazy0</author><pubDate>Fri, 28 Sep 2012 10:55:50 +0800</pubDate><description><![CDATA[有时候，由于架构设计或其他业务本身特点原因，导致有些应用是由cpu很不均衡；处理集中在一个cpu是上；白白浪费其他CPU在睡觉。一个简单办法就是绑定到多个CPU；绑定CPU是一个不错技巧，但是不是杀手锏，一般能提高10%性能；更好地办法是优化架构，对于网络处理性程序，绑定网卡中断更犀利。这里分享一个小小的shell，绑定制定程序均匀负载到各个CPU上。#!/bin/shpids=`/...]]></description><category></category></item><item><title><![CDATA[daemon 进程为什么要fork两次]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090346</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090346</guid><author>erazy0</author><pubDate>Fri, 28 Sep 2012 10:53:14 +0800</pubDate><description><![CDATA[daemon进程是后台守护进程，有时候也叫精灵进程(agent).linux 下server都是daemon进程。相信大部分开发人员都知道如何去写一个daemon进程。但是另一方面，大部分人不知道为什么要这么做，不少人是从某个地方copy一个函数，拿来主义。但是具体为什么这么实现，却不是很透彻。 见过一些面试官或被面试人。很多人解释daemon进程存在的理由是因为僵死进程。或者...]]></description><category></category></item><item><title><![CDATA[函数可重入性及编写规范]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090344</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090344</guid><author>erazy0</author><pubDate>Tue, 11 Sep 2012 23:48:10 +0800</pubDate><description><![CDATA[一、可重入函数1）什么是可重入性？可重入（reentrant）函数可以由多于一个任务并发使用，而不必担心数据错误。相反， 不可重入（non-reentrant）函数不能由超过一个任务所共享，除非能确保函数的互斥（或者使用信号量，或者在代码的关键部分禁用中断）。可重入函数可以在任意时刻被中断，稍后再继续运行，不会丢失数据。可重入函数要么使用本地变量，要么在使用全局变量时保护自己的数据。...]]></description><category></category></item><item><title><![CDATA[gfp_mask含义]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/7922400</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/7922400</guid><author>erazy0</author><pubDate>Wed, 29 Aug 2012 23:53:11 +0800</pubDate><description><![CDATA[gfp_mask标志在alloc_page，kmalloc函数中都有用到。该标志可以分为三类：行为修饰符，区修饰符，类型修饰符。

       行为修饰符表示内核应当如何分配所需的内存，在某些特定的情况下，只能使用某些特定的方法分配内存，例如，中断处理程序就要求内核在分配内存时不能睡眠（因为中断处理程序不能被重新调度）。常用标志值有__GPF_WAIT(分配器可以睡眠)，__GFP_IO(分]]></description><category></category></item><item><title><![CDATA[楼层扔鸡蛋问题]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/7211544</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/7211544</guid><author>erazy0</author><pubDate>Thu, 19 Jan 2012 22:45:37 +0800</pubDate><description><![CDATA[有限层数和蛋数，求即使最坏情况下需要的最少判断次数

两个软硬程度一样但未知的鸡蛋，它们有可能都在一楼就摔碎，也可能从一百层楼摔下来没事。有座100层的建筑，要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。（参见两个鸡蛋--一道Google面试题）
这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第一个鸡蛋第一次从第i层扔下]]></description><category></category></item><item><title><![CDATA[动态链接库之延迟绑定探究]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090341</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090341</guid><author>erazy0</author><pubDate>Wed, 11 Jan 2012 15:33:44 +0800</pubDate><description><![CDATA[动态链接库的优点比较明显，主要集中在节省内存，简化对程序的管理等，对此感兴趣的看官可以去阅读经典的教材 Linker and Loader，国内也有一本经典的教材，俞甲子 石凡 潘爱民编著的程序员的自我修养，讲的也非常好。  延迟绑定PLT，我迷惑过很久，终于让我遇到一篇写的非常棒的博文，这就是 Position Indepentent code in share lib...]]></description><category></category></item><item><title><![CDATA[LINUX内核经典面试题]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090342</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090342</guid><author>erazy0</author><pubDate>Mon, 14 Nov 2011 10:13:32 +0800</pubDate><description><![CDATA[1) Linux中主要有哪几种内核锁？2) Linux中的用户模式和内核模式是什么含意？3) 怎样申请大块内核内存？4) 用户进程间通信主要哪几种方式？5) 通过伙伴系统申请内核内存的函数有哪些？6) 通过slab分配器申请内核内存的函数有？7) Linux的内核空间和用户空间是如何划分的（以32位系统为例）？8) vmalloc()申请的内存有什么特点？9) 用户程序使用mallo...]]></description><category></category></item><item><title><![CDATA[Linux系统优化]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090340</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090340</guid><author>erazy0</author><pubDate>Sun, 23 Oct 2011 22:51:02 +0800</pubDate><description><![CDATA[主要讲解了优化那些方面，具体的还要自己参透最近很多朋友在群里问谁会系统优化这个问题，这个问题博大精:要熟悉系统环境，软件，及网络协议等。我做运维不久我就依照我的写出优化的经验分享给大家把。可能说的很差劲当然是娱乐就行了。对于系统优化系统是为了提高系统的性能吧，我感觉一个系统做的工作越少并且做到极致，这样对于就能提升性能了。那么你就要考虑你这台服务器是来做什么的是WEB，数据库，缓存，...]]></description><category></category></item><item><title><![CDATA[加速Linux程序编译]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090343</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090343</guid><author>erazy0</author><pubDate>Thu, 04 Aug 2011 21:23:04 +0800</pubDate><description><![CDATA[项目越来越大，每次需要重新编译整个项目都是一件很浪费时间的事情。Research了一下，找到以下可以帮助提高速度的方法，总结一下。
　　tmpfs
　　有人说在Windows下用了RAMDisk把一个项目编译时间从4.5小时减少到了5分钟，也许这个数字是有点夸张了，不过粗想想，把文件放到内存上做编译应该是比在磁盘上快多了吧，尤其如果编译器需要生成很多临时文件的话。
　　这个做法...]]></description><category></category></item><item><title><![CDATA[linux系统性能调优第一步——性能分析(vmstat)]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090339</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090339</guid><author>erazy0</author><pubDate>Thu, 04 Aug 2011 21:20:42 +0800</pubDate><description><![CDATA[性能调优的第一步是性能分析，下面从性能分析着手进行一些介绍，尤其对linux性能分析工具vmstat的用法和实践进行详细介绍。——————————————————————————————————————————1.性能分析的目的1）找出系统性能瓶颈（包括硬件瓶颈和软件瓶颈）；2）提供性能优化的方案（升级硬件？改进系统系统结构？）；3）达到合理的硬件和软件配置；4）使系统资源使用达到最...]]></description><category></category></item><item><title><![CDATA[（4）并发服务器设计原理及多进程服务器]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/103090337</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/103090337</guid><author>erazy0</author><pubDate>Fri, 22 Jul 2011 22:59:08 +0800</pubDate><description><![CDATA[（4）并发服务器设计原理及多进程服务器

注：所以文章红色字体代表需要特别注意和有问题还未解决的地方，蓝色字体表示需要注意的地方

1. 本文所介绍的程序平台
开发板：arm9-mini2440
虚拟机为：Red Hat Enterprise Linux 5
开发板上系统内核版本：linux-2.6.32.2

2.服务器分类

（1）按连接...]]></description><category></category></item><item><title><![CDATA[C/C++位域(Bit-fields)]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/6579340</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/6579340</guid><author>erazy0</author><pubDate>Fri, 01 Jul 2011 13:50:00 +0800</pubDate><description><![CDATA[前言很早想说说这个问题了，经常也会有很多公司拿位域出来考人，呵呵要真的想弄清楚还要一点点的分析。这里先看看网宿的一道笔试题目：//假设硬件平台是intel x86(little endian)  typedef unsigned int uint32_t; void inet_ntoa(uint32_t in)  {      char b[18];      ]]></description><category></category></item><item><title><![CDATA[linux下fork的运行机制详细解析]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/6457219</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/6457219</guid><author>erazy0</author><pubDate>Tue, 31 May 2011 16:04:00 +0800</pubDate><description><![CDATA[<br /><br />要求如下：<br />已知从这个程序执行到这个程序的所有进程结束这个时间段内，没有其它新进程执行。<br />      1、请说出执行这个程序后，将一共运行几个进程。<br />      2、如果其中一个进程的输出结果是“pid1:1001, pid2:1002”，写出其他进程的输出结果（不考虑进程执行顺序）。<br />      明显这道题的目的是考察linux下fork的执行机制。下面我们通过分析这个题目，谈谈linux下fork的运行机制。 <br />预备知识<br /]]></description><category></category></item><item><title><![CDATA[精简LINUX内核配置及快速编译的方法收集]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/6456469</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/6456469</guid><author>erazy0</author><pubDate>Tue, 31 May 2011 12:05:00 +0800</pubDate><description><![CDATA[<br />如果经常编译新内核（不管是什么目的），或者需要修改内核的某些代码做测试，虽然make会选择的编译有必要重新编译的部分，但是如果修改了某个核心的头文件。可能需要重新编译很多内容，所以把不需要使用的模块不编译是能节省不少时间的。<br />编译内核大部分时间都在编译模块上，比如我的机器:<br />find /lib/modules/2.6.37-rc5+/ -name “*.ko”|wc -l<br />2374<br />我的目标就是删除这些不用的模块， 不是显示的删除不用的模块，而是提取出需要]]></description><category></category></item><item><title><![CDATA[【linux内核装载elf过程简介】]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/6446753</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/6446753</guid><author>erazy0</author><pubDate>Thu, 26 May 2011 10:20:00 +0800</pubDate><description><![CDATA[<br />    首先再用户层面，bash进程会调用fork函数创建一个新的进程，然后新的进程调用execve系统调用执行指定的elf文件，原先bash进程继续返回等待刚才启动的新进程结束。然后等待用户输入命令。<br />    int execve(const char *filename,char *const argv[],char *const envp[]);<br />    分别是被执行的程序文件名，执行参数和环境变量。<br />    glibc对execve进行了包装，提供了exec]]></description><category></category></item><item><title><![CDATA[一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字]]></title><link>https://blog.youkuaiyun.com/erazy0/article/details/6443069</link><guid>https://blog.youkuaiyun.com/erazy0/article/details/6443069</guid><author>erazy0</author><pubDate>Tue, 24 May 2011 17:56:00 +0800</pubDate><description><![CDATA[<br />题目：一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n) ，空间复杂度是O(1) 。<br />分析：这是一道很新颖的关于位运算的面试题。<br />首先我们考虑这个问题的一个简单版本：一个数组里除了一个数字之外，其他的数字都出现了两次。请写程序找出这个只出现一次的数字。<br />这个题目的突破口在哪里？题目为什么要强调有一个数字出现一次，其他的出现两次？我们想到了异或运算的性质：任何一个数字异或它自己都等于0 。也就是说，如果]]></description><category></category></item></channel></rss>