Unix/Linux系统编程 K.C·王,这本书怎么样?

1.进程和线程的差别。

线程是指进程内的一个执行单元,也是进程内的可调度实体.
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

6.C/C++编译器中虚表是如何完成的?

7.谈谈COM的线程模型。然后讨论进程内/外组件的差别。

8.谈谈IA32下的分页机制

小页(4K)两级分页模式,大页(4M)一级

9.给两个变量,如何找出一个带环单链表中是什么地方出现环的?

一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方 ??

10.在IA32中一共有多少种办法从用户态跳到内核态?

11.如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?

用内存映射或全局原子(互斥变量)、查找窗口句柄..
FindWindow,互斥,写标志到文件或注册表,共享内存。. 

12.如何截取键盘的响应,让所有的‘a’变成‘b’?

13.Apartment在COM中有什么用?为什么要引入?

14.存储过程是什么?有什么用?有什么优点?

存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程用于实现频繁使用的查询、业务规则、被其他过程使用的公共例行程序

存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快

15.Template有什么特点?什么时候用?



今天群硕笔试,考了好多内容,其中Java占很大部分!

本试卷中最有难度的编程题:给定一个数组,这个数组中既有正数又有负数,找出这个数组中的子数组,此子数组的和最大!

thinking:检测电冰箱(我用软件工程的思想随便写写)

的最大区别。 和ADO 的区别?答案:实际上除了“能够让应用程序处理存储于DBMS 中的数据“这一基本相似点外,两者没有太多共同之处。但是ADO 使用OLE DB 接口并基于微软的COM 技术,而 接口并且基于微软的.NET 体系架构。众所周知.NET 体系不同于COM 体系, 和ADO是两种数据访问方式。,看起来好像这些概念都广泛被PHP开发人员所了解。这就说明了PHP实际上到底是多专业。

  对于非常小的项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。当你不断地摸索之后,你会发现笔者提到的某些问题的解决方案。所以,当解决方案已知之后,为什么不能修正他呢?另外为什么这些修补不在手册中提到呢?

  一个开源的语言十分流行是一件好事。但不幸得是,它不是一个伟大的语言。笔者希望所有的问题能有一天得到解决(也许在PHP6?),然后我们就将拥有一个开源语言,他既开源,又好用。

三、编程题:30分 共1题 注意:要求提供完整代码,如果可以编译运行酌情加分。

1. 两个已排序的整型数组,求交集,最快算法 输入:两个已排序的整型数组(int a[m], b[n]) 输出:两个数组的交集

四、设计题:35分 共1题 注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。1. 考虑一个字符串替换的过程,在一个文本文件中含有一些文本内容和一些需要替换的变量,变量的格式为“$Var$”,原来的“$”使用“$$”进行转义,原来的“$$”表示为“$$$”。我们将含有变量的文件称为模板(文件名为t),文本文件的平均长度为100K。另外,还有一系列的变量文件,里面为变量名和变量值的对应关系(文件名为1.v

百度11月4日网上笔试题及答案(仅供参考)1用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。2 函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。3 英文拼写纠错:在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包含了正确英文单词的词典,请你设计一个拼写纠错的程序。(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度;(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。4 寻找热门查询:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录,这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个
。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。(1)请描述你解决这个问题的思路;(2)请给出主要的处理流程,算法,以及算法的复杂度。5 要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。1
字典以字母键树组织,在用户输入同时匹配
(2)流程:
沿字典树向下一层,a)若可以顺利下行,则继续至结束,给出结果;b)若该处不能匹配,纠错处理,给出拼写建议,继续至a);算法:
1.在字典中查找单词
字典采用27叉树组织,每个节点对应一个字母,查找就是一个字母一个字母匹配.算法时间就是单词的长度k.
2.纠错算法
情况:当输入的最后一个字母不能匹配时就提示出错,简化出错处理,动态提示可能 处理方法:
(a)当前字母前缺少了一个字母:搜索树上两层到当前的匹配作为建议;
(b)当前字母拼写错误:当前字母的键盘相邻作为提示;(只是简单的描述,可以有更多的)根据分析字典特征和用户单词已输入部分选择(a),(b)处理复杂性分析:影响算法的效率主要是字典的实现与纠错处理
(a)字典的实现已有成熟的算法,改进不大,也不会成为瓶颈;(b)纠错策略要简单有效 ,如前述情况,是线性复杂度;(3)改进策略选择最是重要,可以采用统计学习的方法改进。//
(1)思路:用哈希做(2)首先逐次读入查询串,算哈希值,保存在内存数组中,同时统计频度(注意值与日志项对应关系)
选出前十的频度,取出对应的日志串,简单不过了。哈希的设计是关键。 //
(1)思路:先将集合按照大小排列后,优先考虑小的集合是否与大的集合有交集。有就合并,如果小集合与所有其他集合都没有交集,则独立。独立的集合在下一轮的比较中不用考虑。这样就可以尽量减少字符串的比较次数。当所有集合都独立的时候,
就终止。(2)处理流程:1.将集合按照大小排序,组成集合合并待处理列表2.选择最小的集合,找出与之有交集的集合,
如果有,合并之;如果无,则与其它集合是独立集合,从待处理列表 中删除。3.重复直到待处理列表为空算法:1。将集合按照大小从小到大排序,组成待处理的集合列表。2。取出待处理集合列表中最小的集合,对于集合的每个元素,依次在其他集合中搜索
是否有此元素存在:1>若存在,则将此小集合与大集合合并,并根据大小插入对应的位置 。转3
2>若不存在,则在该集合中取下一个元素。如果无下一个元素,即所有元素都不存在于其他集合。则表明此集合独立,从待处理集合列表中删除。并加入结果集合列表。转3。
3。如果待处理集合列表不为空,转2。如果待处理集合列表为空,成功退出,则结果集合列表就是最终的输出。算法复杂度分析:假设集合的个数为n,最大的集合元素为m
排序的时间复杂度可以达到
n*log(n)
然后对于元素在其他集合中查找,最坏情况下为(n-1)
*m
查找一个集合是否与其他集合有交集的最坏情况是
m*m*(n-1)
合并的时间复杂度不会超过查找集合有交集的最坏情况。
所以最终最坏时间复杂度为O(m*m*n*n)
需要说明的是:此算法的平均时间复杂度会很低,因为无论是查找还是合并,都是处
于最坏情况的概率很小,而且排序后优先用最小集合作为判断是否独立的对象,优先与最大的集合进行比较,这些都最大的回避了最坏情况。(3)可能的改进:
首先可以实现将每个集合里面的字符串按照字典序进行排列,这样就可以将查找以及合并的效率增高。另外,可能采取恰当的数据结构也可以将查找以及合并等操作的效率得到提高

写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:int find_orderk(const int * narry, const int n, const int k)
要求算法复杂度不能是O(n^2)

2可以先用快速排序进行排序,其中用另外一个进行地址查找 代码如下,在VC++6.0运行通过。

1 用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。

这个很简单,非常好理解。 但是,如果把类ClxBase析构函数前的virtual去掉,那输出结果就是下面的样子了:

也就是说,类ClxDerived的析构函数根本没有被调用!一般情况下类的析构函数里面都是释放内存资源,而析构函数不被调用的话就会造成内存泄漏。我想所有的C++程序员都知道这样的危险性。当然,如果在析构函数中做了其他工作的话,那你的所有努力也都是白费力气。所以,文章开头的那个问题的答案就是--这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。


}

2、   Linux系统的特征包括:多用户、多任务、多平台、可编程SHELL、提供源代码、仿真终端、支持多种文件系统及强大的网络功能等。

Linux可支持六个多用户同时从相同或者不同的终端(终端号:tty1tty6)上用同一个应用程序的副本进行工作。在控制台,切换终端的命令是:Alt+F1F6;在仿真终端窗口是:Shift+Alt+F1F6

4、   Linux可同时执行多个程序,程序之间互不妨碍。且Linux系统将没有用到的剩余物理内存全部用来做硬盘的调整缓存。

6、   系统安装程序所建议的挂载目录的作用如下:

根目录,唯一必须挂载的目录。(在绝大多数情况下,有2G的容量应该是够用了。当然,很多东西都是多多益善的。)

交换分区(可能不是必须的,不过通常建议挂载)。一般容量只要大于物理内存就可以了,如果超过了物理内存两倍的容量,那绝对是一种浪费。

通常所有创建的文件,都保存在这里。(安装时最好给它分配一个分区。)

做服务器方面的应用可以考虑给它分配一个较大的分区。

如果硬盘不支持LBA模式,最好挂载它。如果挂载硬盘的第一个分区,应该比较稳妥。一般来说,挂载的分区只要100M大小就足够了。

8、   Ubuntu发作oo-boon-too的音(源于非洲祖鲁人和科萨人的语言),中文发音大约为“乌班图”。

path/file,键入c,再按一次tab键,系统将自动补全该命令余下的部分。如果不只一个c命令可以按多次tab键直到列出符合条件的选项为止。

10、Linux命令语法结构说明如下。以中文为例:“我们郑重地推荐您Ubuntu/Linux!”,翻译成Linux命令应该是这个样子的:“推荐 郑重的 Ubuntu/Linux”。(按照传统,“-”后跟简写为单个字母的参数,“--”后跟完成单词的参数。不过也有例外。)

Linux命令的执行者只有一个,所以主语一概省略。

Linux命令中,这一部分是必须的。这一部分也是不同命令之前最根本的区别方式,所以它通常作为命令名,写在最前面。比如,键入date命令,可以查看当前的时间日期。

Linux命令可以使用参数来精细调节程序的行为。为了与命令的操作对象相区别,参数通常要加“-”或者“--”符号。原则上,在命令名之后,参数的位置可以随意,但是为了养成一个良好的习惯,建议在命令名后直接跟参数。

这两个部分都是宾主,它们是命令的操作对象。

大部分的命令只有一个操作对象,也有一些命令是双宾语结构的,具有一个直接宾语和一个间接宾语。比如拷贝这个命令cpcopy)。

Linux命令中同样使用空格作分隔符。

汉语是象形文字,没有分隔符。但是所有拼音文字中都有分隔符,来分隔单词。(命令的不同部分使用空格分,连续的空格视为一个空格)

11、进程为运行中的程序,是程序在内存中的镜像。

12、路径分为绝对路径和相对路径。对路径的起始点为根目录“/”,例如“/usr/local/bin”就是绝对路径,它指向系统中一个绝对的位置,不受其它因素影响。相对路径的起始点为当前目录,如果现在位于“/usr”目录,那么相对路径“/local/bin”所指示的位置为“/usr/local/bin”。也就是说相对路径所指示的位置,除了相对路径本身,还受到当前位置的影响。例如Linux系统中常见的目录“/bin”、“/usr/bin”、“/usr/local/bin”,如果只是一个相对路径“bin”,那么它指示的位置可能是上面三个目录中的任意一个,也可能是其它目录。

13、在相对路径中“.”表示当前目录,“..”表示当前目录的上一级目录。

14、路径的相关命令:

显示当前目录中的文件列表。

进入“/etc”目录,这里使用的是绝对路径。

进入“/etc”目录的子目录“init.d”,这里使用的是相对路径

/etc”目录上一级目录为“/”,它的子目录“home”为“/home

回到上一次的目录,刚才在“/etc”目录跳转到“home”目录,所以这次是回到“/etc”目录

~”代表当前用户的“$HOME”目录,也就是“/home/{用户名}”目录

在任何时候都可以使用“ls”命令来了解当前目录下都有哪些文件。

15、远程路径的表示方法为“协议://用户名:密码@位置/路径:端口”。

16、Linux中没有注册表这个概念,理论上讲,只要拷贝所有相关文件,并运行它的主程序就可以了。通常一个软件分别拷贝到同级目录下的binetclibshare等文件夹。

可执行文件,程序的可执行文件通常在这个目录下。

配置文件,大部分系统程序的配置文件保存于/etc目录,便于集中个性。

库文件,集中在一起,方便共享给不同程序。

程序运行所需要的其他资源。

17、 Linux下没有类似注册表的系统,系统和软件都可以通过纯文本的配置文件进行配置。

18、Linux下,名称中第一个字符为“.”的文件或者文件夹,系统默认情况下将它们隐藏起来。

19、Linux系统主要根据文件头信息来判断文件类型,扩展名并非决定因素。

20、文件格式从左到右依次为:权限、文件数、归属用户、归属群组、文件大小、创建日期和文件名称。

21、权限一共有10个位置,可以分为4组。比如:“d rwx r-x r-x”。第一组只有一个字符:“d 文件夹”、“- 普通文件”、“l 链接”、“b 块设备文件”、“c 字符设备文件”。剩下的三组分别为归属的用户、归属群组、其它用户或群组对于该文件的权限,“r 可读”、“w 可写”、“x 可执行”。它们的顺序不能颠倒,某一位置为空(-),则表示不具有相应的权限。

22、chmod命令更改文件的权限,chown更改文件的归属。

23、默念情况下,命令提示符末位为“$”,表示以普通用户的身份执行命令。

24、使用suswitch user)这个命令可以切换其它用户,命令提示符末位为“#”,表示以root用户的身份执行命令。

25、使用man或者info来阅读Linux命令的在线文件。格式为:“man xxx”。

26、使用命令wget可以下载网络资源。

27、使用Ctrl+c可以强制中止运行的程序。

向前移动一个字符Forward

向后移动到一个字符Backward

下翻,后一条命令Next

删除光标后的一个单词Delete

删除光标至行末的部分Kill

删除光标前的一个单词Word

粘贴(最后删除的对象)

连续使用Ctrl+r可以查找下一个

30、使用“?”代表任意单个字符,使用“*”代表随意几个任意字符。

31、在命令的末尾加上一个“&”符号,表示背景任务。

32、使用“;”将多个命令连续起来,则表示任务按顺序执行。

33、使用“&&”将多个命令连接起来,则表示只有前面的命令执行成功,后面的命令才能得以执行。

34、使用“`<命令>`”,如果一个命令中包含“``”(Esc键下方的按键)括起来的子命令,那么子命令将被优先执行,执行结果被代入上一级命令继续执行。

36、使用bg将挂起的任务背景运行。

37、使用fg将背景任务调到前台执行。

38、使用jobs命令可以查看所有背景任务。

39、>”重定向符号,它的作用是将命令的输出重定向到一个文件中。

40、>>”作用与“>”基本相同,不同点在于,“>>”以追加的方式,将命令的输出写入文件的末尾。

41、<”是从文件到命令的重定向,将文件的内容作为命令的输入。

42、|”为管道符号,它的作用是将前一个命令的输出,作为下一个命令的输入。

44、在添加$PATH变量参数时,以“:”分隔。

}

这么好的问题,怎么没什么人来回答呢。我自己先抛个砖,有好的回答后,我还会持续更新此答案。

研究期货市场时,有时我需要知道某个合约自上市以来每天的平均价格,我把当前研究的所有价格数据放到everythinginone.txt中,具体格式实例如下:

这样,比如我想得到ISF2010合约的平均价格数据,可以用这个命令:

得到的avg文件大概长这样:

然后,可以在上述命令的尾巴上加点东西,把图形画出来:


这样的命令并不很长,但确实是实践中所用,避免了写很多用完就扔的小程序。

}

我要回帖

更多关于 C语言编程软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信