
面试经典
AllenAmanda
每天进步一点点
展开
-
回忆青牛的笔试题
【zz】1 第一个 void main() { int a[5] = {1,2,3,4,5}; int *ptr = (int *)(&a + 1); int *ptr2 = a+1; printf("%d,%d,%d/n", *(a+1), *(ptr-1), *(ptr2-1)); } 输出为2,5,1 问题:中间那个5是怎么来的?int a[5] = {1,2,3,4,5}; 此语句会让系统在栈内存中分转载 2010-06-29 22:25:00 · 1401 阅读 · 0 评论 -
有10亿个浮点数,从中找出1万个最大的数。
<br />1、给一个基于最小二叉堆的方案: <br /><br /> 第一阶段,向最小二叉堆中插入前一万个浮点数; <br /><br /> 第二阶段,从第一万零一个浮点数开始,将之与最小二叉堆顶部的最小值比较。如果小于这个最小值,把最小值弹出并将新值插入到二叉堆中。重复此过程直到遍历完成。<br /> <br /> <br />2、可以用分段的方法,在数据结构版看mathe给的(可能题目不太一样),大致是这样的: <br /> <br /> 开一个100万的数组, <br /> 1,读入100万的数据原创 2010-10-16 00:02:00 · 1288 阅读 · 0 评论 -
【转】#define 和内联函数
技术 2009-10-18 14:35:54 阅读101 评论0 字号:大中小 订阅内联函数的功能和预处理宏的功能相似。宏在C中是经常用的,为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数 所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需原创 2010-10-16 08:41:00 · 1026 阅读 · 0 评论 -
哪些设计模式最值得学习
<br />最近又在首页看到几篇设计模式相关的学习随笔。回想起来,这几年在园子里发布的有关设计模式的随笔都有一个共同的特点。那就是Factory和Singleton居多,如果是系列的,也往往是从这两个模式开始的。由于能够坚持把《设计模式》中所有模式都写完的非常少,所以基本上也很少见到有关其它模式的随笔。<br /> <br />这种情况也很好理解,因为《设计模式》这本书就是按照这个顺序来的。最先讲述的就是Abstract Factory模式,于是它排第一也无可厚非;排第二的Builder基本不太容易见到;第转载 2010-10-16 09:01:00 · 802 阅读 · 0 评论 -
设计模式之AbstractFactory模式
<br />设计模式的目的就是尽量减少“变化”对程序的影响,尤其是对客户程序的影响。AbstractFactory模式作为创建型模式的一种,解决的就是“new”在变化中可能引起的问题。<br /><br />先来看看new有何种不好,举个创建汽车的车门的例子:<br />很自然的一种想法是:Door *door = new Door();<br />但是如果遇到创建老爷车的车门,创建现代车的车门,这段代码就无所适从了。<br /><br />OO为我们提供了哪些精华的思想?“封装”,是的,将车门的创建封装起原创 2010-10-16 09:07:00 · 642 阅读 · 0 评论 -
TS101的嵌入式实时操作系统设计,嵌入式实时操作系统,中断处理,内存覆盖,TS101处理器
基于TS101的嵌入式实时操作系统设计,嵌入式实时操作系统,中断处理,内存覆盖,TS101处理器2007-05-31 10:46:10 来源: 作者: 【大 中 小】 浏览:296次 评论:0条 0 引言 随着半导体制造工艺的发展和计算机体系结构的改进,DSP处理芯片的处理能力越来越强大,控制的外围设备越来越多,软件算法也越来越复杂。对于DSP系统的软件开发,不仅要面对复杂的软件算法,同时还要把大部分精力放在各种外围设备和相关的硬件控制上,整个过程复杂而艰辛。因此,为这一类系统开发小巧精原创 2010-10-19 23:23:00 · 1054 阅读 · 0 评论 -
4.5覆盖与交换技术
覆盖技术覆盖技术是指一个程序的若干程序段,或几个程序的某些部分共享某一个存储空间。下面举一个例子说明覆盖技术的特点,参见图4-19。图假设作业1的程序正文由A、B、C、D、E、F等6个程序段组。它们之间的调用关系台图4-19(a)所示。其中,程序段A只调用程序段B和C,程序B只调用程序段F,而程序段C只调用D和E。即B不会调用C,C也不会调用B。因此,程序段B和程序段C就无需同时在内存中。可按图4-19(b)分配程序段的调入。可见虽然该程序正文段所需要的内存空间是:A(20K)+转载 2010-10-20 00:08:00 · 4614 阅读 · 0 评论 -
关于malloc(0)的问题
<br />ANSI C的,如果认为malloc(0)是语法错误的话,下面我写的就不用看了。<br />下面进入正题,关于malloc(0)这个问题,我在网上看到有个面试题好像就是问这个的,原题好像是:<br />char *ptr; <br />if ((ptr = (char *)malloc(0)) == NULL) <br />puts("Got a null pointer"); <br />else <br />puts("Got a valid pointer"); <br />该代码的输出是原创 2010-10-18 23:00:00 · 1535 阅读 · 1 评论 -
(转)fork()函数详解
<br />fock 的意思是复制进程, 就是把当前的程序再加载一次, 不同之处在,加载后,所有的状态和当前进程是一样的(包括变量)。 fock 不象线程需提供一个函数做为入口, fock后,新进程的入口就在 fock的下一条语句。一个现存进程调用f o r k函数是U N I X内核创建一个新进程的唯一方法(这并不适用于前节提及的交换进程、i n i t进程和页精灵进程。这些进程是由内核作为自举过程的一部分以特殊方式创建的)。<br /><br /><br />----------------------原创 2010-10-19 08:37:00 · 1068 阅读 · 0 评论 -
FORK()函数的理解
<br /> 对于刚刚接触Unix/Linux操作系统,在Linux下编写多进程的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。<br /> 首先我们来看下fork函数的原型:<br /> #i nclude <sys/types.h><br /> #i nclude <unistd.h><br /> pid_t fork(void);<br /> 返回值:<br /> 负数:如果出错,则fork()返回-1,此时没有创建新的进程。最初的进程仍然运行。<br /> 零:在子进程转载 2010-10-24 10:20:00 · 880 阅读 · 0 评论 -
socket函数、connect函数、
<br />2006-07-19 11:261、socket函数:为了执行网络输入输出,一个进程必须做的第一件事就是调用socket函数获得一个文件描述符。----------------------------------------------------------------- #include <sys/socket.h> int socket(int family,int type,int protocol); 返回:非负描述字---成功 -1---失败转载 2010-10-24 11:03:00 · 4294 阅读 · 0 评论 -
百度面试
<br />1/main函数可以包含在头文件中么<br />2/WINDOWS消息响应机制<br />3、快排,归并,动态规划<br />4、fork()函数<br />5、贪吃蛇设计<br />6、c语言可以实现多态么,为什么<br />7、c++特性<br />8、容器原理<br />9、源文件编译链接过程<br />10、stl模板<br />11、设计模式<br />12、进程通信<br />13、滑动窗口<br />14、搜索技术,网页爬行。原创 2010-10-25 21:57:00 · 871 阅读 · 0 评论 -
C++编译和链接 收藏
<br /><br />1、 编译器和链接器<br />C++调用gcc编译命令进行编译(不同编译器有所不同),调用link命令进行链接。例如:<br /> gcc 1.cpp -o 1.o<br /> gcc 2.cpp -o 2.o<br /> gcc 3.cpp -o 3.o<br />生成三个文件1.o,2.o以及3.o。然后调用link命令:<br /> link 1.o 2.o 3.o -o App.exe<转载 2010-10-26 11:03:00 · 980 阅读 · 0 评论 -
判断单链表环的问题
<br />判断单链表环的问题<br />算法杂类 2010-01-20 17:15:42 阅读48 评论0 字号:大中小 订阅<br />有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。<br />问题:<br />1、如何判断一个链表是不是这类链表?<br />2、如果链表为存在环,如果找到环的入口点?<br />解答:<br />一、判断链表是否存在环,办法为:<br />设置两个指针(fast, slow),初始值都指向头,slow每转载 2010-10-27 17:29:00 · 572 阅读 · 0 评论 -
链接器算法
去原文 什么是链接器?链接器的工作是把一个或多个目标模块(典型地,就是OBJ文件)组合成一个可执行文件(也就是EXE或DLL)。什么是目标模块呢?目标模块是由一个程序产生的,这个程序把人类可读的文本转换成CPU可以理解的机器代码和数据。对于C++来说,C++编译器读取C++源文件。对于汇编语言来说,汇编程序(例如MASM)读取汇编语言(ASM)文件,这种文件包含与CPU使用的代码和数据等价的指令。目标模块中的主要部分是机器代码和数据。组成代码和数据的原始的字节被存储在连续的块中,这种块叫做节(section原创 2010-10-26 10:52:00 · 885 阅读 · 0 评论 -
C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
<br /><br /><br /> <br /><br /> 今天开始这个系列之前,心里有些恐慌,毕竟园子里的高手关于设计模式的经典文章很多很多,特别是大侠李会军、吕震宇 老师的文章更是堪称经典。他们的文笔如行云流水,例子活泼生动,讲解深入浅出。好在他们都是用C#描述,也没有提供必要的源码下载,所以我这里用C++实现。首先我想声明的是我的文笔绝对不如他们的好,例子也没有他们的形象,不过我打算把C++的代码实现和类图提供给大家,就算作为一种补充吧。<br /><br /> 开始设计模原创 2010-10-16 09:11:00 · 772 阅读 · 1 评论 -
面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)
<br />工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友,<br />一看马上就知道是什么回事了。<br />简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返的类都有一个共同的你类和共同的方法,<br />但每个方法执行的任务不同,而且根据不同的数据进行了优化。<br />简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。<br /><原创 2010-10-16 08:56:00 · 878 阅读 · 0 评论 -
怎样 对40亿个8位正整数进行排序
<br />这里可以借鉴快速排序的思想,将整个数据量进行分解,取8位正整数的中间值128,凡是大于这个数的值都放入文件b,小于128的都放入文件a。然后再按照这种方法一直分解直到任意一边的数量小于1千万为止,然后使用快速排序对这1千万进行排序,最后将结果存入文件中,然后便不再对该数据集进行处理。由于内存牵涉到运算的效率和性能,所以,每分解一次,都要将分解的结果放入文件中。最后就是对这些所有的文件中的结果进行合并,这里可以考虑用一个链表存放所有文件结果集的次序(也是所有排序结果的次原创 2010-10-15 23:57:00 · 2214 阅读 · 1 评论 -
程序人生--一个程序员对学弟学妹建议(转)
作者用心良苦,请大家认真看看吧!再说下自己的想法! 我始终认为,对一个初学者来说,IT界的技术风潮是不可追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息转载 2010-05-21 18:04:00 · 612 阅读 · 0 评论 -
面试常见问题
1、 “请做一下自我介绍。”2、 “谈谈你做过的项目情况。” 3、 “你对加班的看法。”4、 “你对工资的要求是多少?你是否接受××元的工资?”5、 “你的优点和缺点是什么?”6、 “谈谈你对公司的了解”7、 “你的朋友对你是如何评价的?”8、 “你为什么选择我们公司?”9、 “你如何评价过转载 2010-05-25 12:34:00 · 381 阅读 · 0 评论 -
what will be the output of the following c code?
<br />#include "stdio.h"<br />main()<br />{<br /> int b=3;<br /> int arr[={6,7,8,9,10};<br /> int *ptr = arr;<br /> *(ptr++)+=123;<br /> printf("%d,%d/n",*ptr,*(++ptr));<br />}<br /> <br />解析:c中printf计算参数是从右至左压栈。<br /> *ptr = arr ====》 ptr 指向6;原创 2010-06-11 22:47:00 · 1591 阅读 · 0 评论 -
积累笔试面试题:
1:某带头结点的单链表的头指针为head,则判定该链表为非空的条件是? a head!=null b head->next!=null a 是不带头节点的单链表为空的判定条件,head为第一个节点,要是他的内容为NULL,则整个链表都没有内容。 b 带头节点的单链表为空的判定条件,带头节点的单链表的头节点head总是不空的,但是他的里面不存储具 体的内容。他的下一个节点 才是存储内容的开始,若没有下一个节点,则表示该链表没有存储内容。2:设某种二叉树有如下特原创 2010-09-25 15:23:00 · 726 阅读 · 0 评论 -
百度面试
<br /> 1.广度优先遍历、深度优先遍历。递归、非递归<br /> 2.1k内存、1Mhz的处理器(每秒改变10^6次状态),求:能够在这台计算机上运行且确定性中止的所有程序中,最长运行时间<br /> 3.找出下列代码中存在的安全隐患<br /> struct complex_t<br /> {<br /> int real;<br />原创 2010-10-07 20:50:00 · 639 阅读 · 0 评论 -
编译执行语言和解释执行语言
高级语言里一个程序的编译和执行大概是 下面的情况: 编译器将高级语言从源代码翻译成与之等价的目标程序(就相当于从中文翻译成中文),而后就隐退了。在随后的某个时刻,用户启动目标程序由操作系统执行。实现高级语言的另外一种方式为解释: 与编译不同的是,解释器在目标程序(其实根本就没有目标程序,只是与编译来对比)执行期间,解释器一直随之运行。这种执行过程完全由解释器控制的。从效果上看,解释器实现了一台“虚拟计算机”,其“机器语言”就是高级语言,解释器一次读入一条或多条语句,按照其自身规定的方式去执行相应的操作。一般原创 2010-10-08 10:42:00 · 5187 阅读 · 1 评论 -
百度用户体验部笔试题
<br />第一部分:答一题,多答不限<br />1.方差分析的统计原理和运用条件<br />2.什么是社会网络研究?它的主要观点是什么?有哪些应用?<br />3.市场调研过程分为几个阶段?各个阶段的核心任务和目标是什么?<br />第二部分:三题必须都答<br />1.用户体验研究领域有哪些专家?用一句话描述他们的主要观点?<br />2.用户体验研究和产品运营之间的关系<br />3.交互设计是什么?一个好的交互设计具备哪些特征?举例说明。<br />第三部分:答两题,多答不限<br />1.简述用户原创 2010-10-07 20:51:00 · 2347 阅读 · 0 评论 -
类的封装、继承和多态
类是对对象的一个抽象,同时类也为对象进行了封装。所谓封装是说类的设计者只是为使用者提供类 对象可以访问的部分,而对于类中其他隐藏起来的成员变量 方法,用户不能访问。 实现方式:A:在类的定义中设置对对象中成员变量和方法进行访问的权限; B:提供一个统一的供其他类引用的方法; C:其它对象不能直接修改文本对象所拥有的属性和方法。2。访问权限: A:private的成员变量和方法只能被这个类原创 2010-10-13 01:04:00 · 656 阅读 · 0 评论 -
C++面试汇总
<br />C++面试汇总 ①链表反转<br />单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。<br />最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:struct linka { int data; linka* next; }; void reverse(linka*&原创 2010-10-11 00:29:00 · 892 阅读 · 0 评论 -
构造函数与析构函数(读书笔记)
<br />构造函数与析构函数(读书笔记)<br />一. 构造函数:<br />1.基本概念:<br />(1) 类的数据成员是不能在声明类时初始化的,如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化,反之,如果数据成员是私有的,或者类中有private或protected的成员,就不能用这种方法初始化。<br />(2) 作用:处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。<br />(3) 构原创 2010-10-13 00:58:00 · 678 阅读 · 0 评论 -
指针与引用的区别与联系
<br />1. 概述:<br />从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。<br />而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。<br />在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的:<br />指针传递参数本质上是值原创 2010-10-13 00:34:00 · 528 阅读 · 0 评论 -
多态和虚函数详解(读书笔记)
一.多态性的概念:1.多态:在面向对象方法中一般是这样表述多态性的: 向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。也可以说,多态性是“一个接口,多种方法”。2.从系统实现的角度看,多态性分为两类: 静态多态性和动态多态性。以前学过的函数重载和运算符重载实现的多态性属于静态多态性,动态多态性是通过虚函数(virtual function)实现的。3.静态多态性是指:在程序编译时系统就能决定调用的是哪个函数,因此静态多态性又称编译时的多态性。动态多态性是在程序运原创 2010-10-13 00:55:00 · 626 阅读 · 0 评论 -
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件原创 2010-10-13 22:36:00 · 607 阅读 · 0 评论 -
用 C 语言实现程序的多态性
<br /> <br /> 王 广, 硕士研究生, 中国科学技术大学中国科学技术大学,硕士研究生;现于 IBM CDL ECM IM eForms TEAM 从事自动化测试相关工作。<br /> <br />简介: 使用面向对象的语言可以实现多态,并且在很大程度上降低了代码的复杂性。对于面向过程的 C 语言同样可以实现多态,本文将着重介绍 C 语言是如何实现多态的。<br /> 标记本文!<br /> <br /><br /> <br />前言:关于多态,关于 C<br />多态 (polymorphism转载 2010-10-28 11:43:00 · 602 阅读 · 0 评论