Author: David

05高19班九周年聚会回忆录

春风疑不到天涯,二月山城未见花。这个,,其实山城还是有些梅花。 大年初四,一群05高19班的童鞋以及童鞋家属们风风火火的热闹了一把,探讨了诸如“雅玉十号”等历史性问题。 整个聚会历时1,2,3,4,,,好多个小时。具体就如下图所示啦,没有来的,接女朋友接男朋友迟到的,中途神秘消失一圈又回来的,以及早退的(本大秘书长第二天要送大学姐回娘家,错过了最后一个活动不算),个人看一哈错过了哪些,记账到下盘儿的十周年。错过一项罚一(到时候再说)。 回忆录就要有一个回忆的样子,其实整个过程是这样的: 寒假某日,收到班长短信。 老板:“对啦,就是我啦!” 说九周年了,让组织一下聚会,顺便为十周年准备准备。 我想行啊,说来也有好久没见他们了,说干就干,讨论了一下时间、地点等问题,就开始宣传通知。 一路耍到KTV的时候,数了一哈,手头还剩下几十张大家交妮毛主席,想着啷个才能花出去。这里有大猫儿这个金牌vip,也花不了多少钱。 大猫儿:“嘿嘿,大家好,对了对了,这个说的就是我了。” 老赖:“大猫儿上次穿起制服就来了,牛逼得很” 搭了一句话,又忙着低头思考他的长城去了,后天得给大红包,先补充补充弹药! 有了!不是正好带了相机迈,把照片洗出来给每个人都快递一份儿,再整个相册,要是还剩得有,再用他们自己的照片弄一个喀嚓鱼创意杯,肯定就差不多了。 “达尔,把你的地址写一哈,隔天儿我照片洗出来了给你快递过来” “不干,你龟儿要给我邮递耗儿药” “爬,耗儿药闹得住你不嘛,快点儿” “Okay,,,Okay,,。咦?!老子的剪刀手涅?啷个照脱了” “遭耗儿啃老!” “。。。” “好,让我过去找陶小叉” 才几年不见,肥了岂止一圈儿两圈儿,当初的校草现在简直不堪入目,/乐一个, /乐一个。 “你在说老子迈,还不是一样帅,懂不懂欣赏。” “爬!” “过来我跟你说,刚才我去重百看辣妹儿,越来越多老,还没看安逸斗喊我回来,不是说今天儿女生也要来迈?” “勒里,须须来得最早,你看别个都生了娃儿了,身材还楞个好,而且皮肤比生之前还要好了样。” 周小熊:“豆是豆是,我都发现了,我算了一哈,勒是生娃儿的时候体会激素达到了一种平衡,导致了吧啦吧啦吧啦…&%&……%@!(#@!*&x!$,,” “算个牙刷儿算,豆你算得出来,我们不是有医生迈,喊医生来分析一哈嘛” 韩镇长:“不要看我,旁边的申大医生” 张飞:“来,把我跟申大医生放一起” 雅玉十号:“咦?现在进入合照阶段了哇,不是说先介绍个人的迈?” “勒张照片我实在不晓得啷个裁剪啊,就当张飞也一起show过了,先把你的整上来嘛” “销魂一点儿的” “Okay” “这张可以嘛?” “不错不错,只是有点不过瘾儿,还有没得?” “肯定有撒,勒里,还有一张” 猪源:“也,聂不住,你勒两张有点儿张狂哟,小眼镜儿,看勒里,看勒里” 咔嚓咔嚓。。。 肚皮:“哈哈哈,猪源你龟儿个面瘫,好鸡公傻,胡ka,我也,老子来得最早,还没有漏过脸,来一张特写。” “好,马上,我找一哈,都有” 猪源:“莫要慌,莫要慌,不跟他龟儿单独照,我要跟我儿子合影一张!” 肚皮:“滚,是跟你爸爸合影” “。。。他两个妮辈分,我是从高中到现在都还没搞清楚” 达尔:“扯不撑,扯不撑!不管勒些,猪源后天结婚,听他的,让他们两父子合影。哎呀,干脆我也来插一脚” 猪源:“对头,来,达尔,我们一个扯他龟儿一只猪耳朵!” 王大血:“你们不要只晓得照男妮嘛,你看别个爱里芬好孤单” 爱丽芬:“爬嘛你,你才孤单,来忧郁一个撒,王大血” 王大血:“好歹是从小遭勒到大的,每天必遭一勒,忧郁豆忧郁” 罗大肛:“也,表演有点儿到位哟大血管!我也来抖一个撒。” 张飞:“万般带不走,只有喝杯酒!来来来,下面进入合照环节,乾杯!” 肚皮:“你龟儿慌啷个嘛,还有家属没有出镜撒,黑,黑” 达尔:“对头对头,先来照一哈我们家婷婷儿” “婷婷儿,看勒里” 不理,继续吃,继续吃,,,,,, […]

SHELL 脚本从文件中按行读取数据

今天遇到一个问题: 需要给Shell脚本传递参数,一般来说,我们采用 $ ./test.sh para1 para2 para3 para4 这种方式,然后在shell中使用$1, $2, $3, $4 即可获取传入的参数。 但由于这次需要传递的参数实在太多,大约100K个(通过文件给出,每行即为一个参数),所以得变通一下。Google以后,发现通过awk命令可以实现,具体如下: [shell] #! /bin/bash for x in ` awk ‘{print $0}’ number_sub.txt ` { echo $x } [/shell] 接下来就可以做想做的工作了,解决。

Linux系统启动过程

面试的时候被问到Linux启动过程,没有答得很好。回来收集了一些资料,发现有一篇博客写得不错,不过是英文的。特翻译过来供广大小伙伴们参考:) 原文: http://www.thegeekstuff.com/2011/02/linux-boot-process/ ———————————————————- 我是背景 ——————————————————– 通常,我们按下开机键,几秒钟后,我们就能看到Linux的登录界面。 但是你有没有想过,在屏幕的背后,这一切是怎么发生的呢? 下面会为大家分六个阶段简述一下一个典型的Linux操作系统的启动过程。 1. BIOS BIOS,即 Basic Input/Output System BIOS,基本输入输出系统。 对系统做完整性检查,即计算机硬件能否满足运行的基本条件。如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止,比如内存卡没有插好。 查找,加载以及执行引导装载程序。 它会在软盘、光盘或者硬盘驱动器等上查找引导装载程序。你也可以在BIOS启动过程中按F12或者F2(一般来说是这两个键)来改变这个顺序。比如重装系统的时候,你在BIOS阶段按F12,然后选择从U盘启动。 一旦引导装载程序被找到并且加载到了内存中,BIOS就将计算机的控制权交给它了。 简单来说,BIOS阶段就是加载并执行MBR 2. MBR MBR,即Master Boot Record. MBR, 主引导记录。 位于启动盘的第一扇区,一般为 /dev/hda或者/dev/sda MBR 共有512位,由三个部分组成,1)第1-446位,主引导加载程序信息 2)接下来64位存放分区表 3)最后两位用来存储MBR有效标记 它包含了GRUB的信息(或者在一些老系统上的LILO信息) 简单来说,MBR阶段就是加载并执行GRUB 3. GRUB GRUB,即Grand Unified Bootloader,启动管理器。 如果你在操作系统分区中装了好几个内核,通过GRUB,你就可以选择启动哪一个。 GRUB会展示一个初始化的界面,等待你的选择,如果过了等待时间,它就会加载在grub配置文件中指定的默认内核镜像。 GRUB能够识别文件系统(在老Linux系统上的LILO并不能识别文件系统)。 Grub 配置文件在 /boot/grub/grub.conf (/etc/grub.conf 只是一个链接)。下面是一个CentOS中的grub.conf文件信息 #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-194.el5PAE) root […]

C++面试题集合

只熟悉C,对C++不甚了解啊,但是面试又基本只有C++和Java的。于是乎,整理一下自己遇到的C++面试/笔试题吧 ———————————————–我是背景——————————————————————— 题目一:一个C++空类建立以后,会产生哪些成员函数? 分析:当时我就只想到了构造和析构函数啊。答案是6个。 [cpp] class Empty { public: Empty(); // 缺省构造函数 Empty( const Empty&); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty&); // 赋值运算符 Empty* operator&(); // 取址运算符 const Empty* operator&() const; // 取址运算符 const }; [/cpp] 但并不一定是6个,如果编译器发现我们只是申明了Empty,并没有发现创建Empty的实例,那么编译器是什么函数都不会生成的。 所有这些只有当被需要才会产生。比如, Empty e; 编译器就会根据上面的实例,给类Empty生成构造函数和析构函数。 当使用 Empty  e2(e); 编译器就会生成类Empty的拷贝构造函数。 Empty   e3; e3 = e; 编译器生成赋值运算符函数 Empty    &ee = e; […]

编程之美3.3 计算字符串的相似度 (编辑距离)

Part 1: 题目描述 许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelling”变为“traveling”); 比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g”的方式来达到目的。上面的两种方案,都仅需要一 次 。把这个操作所需要的次数定义为两个字符串的距离,而相似度等于“距离+1”的倒数。也就是说,“abcdefg”和“abcdef”的距离为1,相似度 为1/2=0.5。 给定任意两个字符串,你是否能写出一个算法来计算它们的相似度呢? Part 2:分析 书中给出的解法是通过递归来做的。其实有更快更简便的方法——动态规划。 此题其实就是算法中的求“最短编辑距离”。 编辑距离定义:计算两个字符串的距离,完全相同的字符串距离为0,可以通过修改一个字符、增加一个字符或删除一个字符三种方式来使两个字符串相同,但这些方式会使得距离加1。 假设现在有两个字符串A和B A:David B:Taisy 用二维数组d[i][j]表示A中取前i个字符到B中取前j个字符的最短编辑距离。比如d[2][1]就代表从”Da”到”T”的最短编辑距离。这里为2(即把D换成T,去掉A 或者去掉D,把a换成T)。 首先我们作出初始化d[0][j] = j(字符串A子串长度为0,字符串B子串有多少个字符,就作多少次增加操作;于是同理,作删除操作,可得d[i][0] = i) 其中d[i][j]只有3个来源: 1). 来自d[i – i][j – 1],即 “A的前i-1个字符组成的子串” 到 “B的前j-1个字符组成的子串” 的编辑距离,此时如果A[i] = B[j],则最短编辑距离不变,否则最短编辑距离加1(即把A[i]变为B[j] ),所以d[i][j] = d[i – 1][j – 1] + (A[i] == B[j] ?  0 : 1) […]

C语言新手入门——从下载IDE开始

最近,高三的弟弟马上要去大学了。于是乎,打算教一教他C语言。 让我们从下载IDE( Integrated Develop Environment,即集成开发环境)开始。 Step Zero:买书 首先你需要的是一本完美的书,能够随时在你身边指引你的书。 《C程序设计语言》——if not you, then who? 本书原著即为C语言的设计者之一Dennis M.Ritchie和著名计算机科学家Brian W.Kernighan合著的一本介绍C语言的权威经典著作。我想,没有人比他更了解自己的设计。 摒弃你们的“谭浩强”吧~不是说谭先生不好,只是还不够。 Step One:下载最smart的IDE——CodeBlocks 1. 下载 地址:http://www.codeblocks.org/downloads/26 win7系统,选择这个版本就好了codeblocks-12.11mingw-setup.exe,可以从两个站点下载,一般是从这里Sourceforge这里下,如图 点击连接以后,会跳到Sourceforge网站,等几秒钟就开始自动下载。 2. 安装 点击Next,如上图。 点击I Agree, 如上图。 这一步是装运行所必须的各种软件,不用修改,默认点击Next就行。如上图。 这一步是选择安装路径,可以点击“Browse”然后在弹出的地方选择,或者直接在“Destination Folder”下面的输入框里填写。不建议安装在C盘,工具软件安装在其他盘比较好。比如我就是安装在E盘的Tools文件夹下。然后点击Install进行安装即可。如上图。 如果安装途中出现以下错误,请以管理员身份重新执行安装步骤。即右键“codeblocks-12.11mingw-setup.exe”安装文件,然后选择以管理员身份运行。 安装完成后,会问你是否现在运行Codeblocks,如下图。 可爱的Codeblocks就出来啦!!!! 3. 编写第一个程序之前的小配置 初次启动CodeBlocks的时候,会让你选择是否所有的 C和C++文件都以CodeBlocks打开,如图红色方框所示。点击它,然后点击OK。 现在我们需要新建一个项目,如下图所示。点击界面中间的”Create a new project” 在弹出的窗口里选择“Console application“,即控制台程序,如下图所示。 点击go,跳到下一个页面。选择使用的语言,这里选C。如下图所示。 点击Next以后进入下一个页面。 在”Project title“,即项目名称这里填写项目的名称,这里我们用填入”Test“举例。填好以后,下面的Project fileName以及Resulting fileName会自动帮你填好。 然后就是选择你代码所在的目录,即”Folder to create […]

POJ 2453 解题报告

题目意思:给定正整数x,求出在二进制表示中与他有相同个数的‘1’,且比他大的最小的数。 可以把此题当成求二进制中1的个数来做。而该算法在我的其他帖子(点击这里)中已经有详细说明。 代码: [cpp] #include <iostream> using namespace std; int Count (int); int main() { int x, num; while(cin >> x) { if(!x) break; num = Count(x); while(x++) if(Count(x) == num) { cout << x << endl; break; } } return 0; } int Count(int x) { x = (x & 0x55555555) + ((x >> […]