《嵌入式c面试试题收集》由会员分享,可在线阅读,更多相关《嵌入式c面试试题收集(79页珍藏版)》请在金锄头文库上搜索。
1、C+中的堆与栈整理者:陆晓明1 基本概念 也不知道是什么原因,很多人总是把堆和栈混合一起,在写程序时,总是经常脱口而出地说 堆栈。网上的一些资料说堆栈的叫法是有历史原因的,至于具体是什么历史原因,这不是本 文所要讨论的问题。堆:在数据结构中,堆是一种满足“堆性质” (至于什么是堆性质可以查阅任何一本数据结 构的书)的数据结构。然而,通常我们所指的堆都是指二叉堆,即一种使用数组来模拟完全 二叉树的结构。当然,也存在其它形式的堆,包括斐波拉契堆、二项堆、杨氏表等,想获得 有关这些特殊堆的性质可以查阅算法导论。然而,在编译器中,堆是一个存储区,通常用于 动态分配存储空间,一般堆具有不连续性(在下文中
2、将讲到堆的不连续性) 。栈:在数据结构中,栈是一种按照数据项先进后出的顺序排列的数据结构,我们只能在栈顶 来对栈中的数据项进行操作。然而在编译器中,栈通常是用来为函数中的临时变量分配存储 空间,通常栈空间的分配具有连续性。2 相关知识 通常一个由 C+编译的程序占用的内存分为以下五个部分(这些知识对理解下文至关重要, 这些是对一个基本的 C+程序的存储方式的认识):1)栈区(stack)是由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结 构中的栈。 2)堆区(heap)一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收(如果回收的不 及时有可能会造
3、成内存泄露) 。堆空间的分配方式类似于数据结构中的链表。 3)全局区(静态区) (static)全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初 始化的全局变量和未初始化的静态变量在相邻的另一块区域。在程序结束后由系统释放。4)文字常量区用于存放常量数据,程序结束后由系统释放。5)程序代码区存放函数体的二进制代码。3 堆和栈的区别 在 IT 面试中,通常有人会问哪个变量是堆变量,哪个变量又是栈变量,操作系统中的栈是 向上(从低地址向高地址的方向)申请空间还是向下申请空间等等问题。我想只要掌握了堆 和栈的区别,以及它们的工作原理,这些问题都会迎刃而解。本节将分以下
4、几个方面来讲述 它们之间的差别。3.1 存储对象的不同 这个问题其实在第 2 节已经初步提到,在本小节中再次详细说明一下,因为这对下文的理解 至关重要。3.1.1 堆区的存储对象 主要存储动态申请的空间。在 C+中,存储“new 出来”的对象,如下程序段int *a;a = new int;*a = 1;那么,变量 a 存储的值为 1,1 的存储地址在堆区,即指针 a 所指向的那个对象的存储地址 是在堆区,但是要注意的是指针 a 本身所存储的区域是在栈区(嘿嘿,晕乎了把,可以看以 下例子) 。Exp01:#include int main ()int *a;a = new int;*a = 1
5、;cout int main ()int *a,*b,*c;a = new int;b = new int;c = new int;cout int main ()/a,b,c 均为临时变量,即为栈变量,由系统自动分配空间int a;int b;int c;cout int p(int a, int b, int *h)int c,d;a = 1;cout int p() return 0; int q() return 0; int o() return 0; void f()void g()void h()int main ()p();q();o();f();g();h();cout q,
6、还有 clock 的 delay,写出决 定最大时钟的因素,同时给出表达式。 (威盛 VIA 2003.11.06 上海笔试试题) 18、说说静态、动态时序模拟的优缺点。 (威盛 VIA 2003.11.06 上海笔试试题) 19、一个四级的 Mux,其中第二级信号为关键信号 如何改善 timing。 (威盛 VIA2003.11.06 上海笔试试题) 20、给出一个门级的图,又给了各个门的传输延时,问关键路径是什么,还问给出输入,使 得输出依赖于关键路径。 (未知) 21、逻辑方面数字电路的卡诺图化简,时序(同步异步差异) ,触发器有几种(区别,优点) , 全加器等等。 (未知) 22、卡诺
7、图写出逻辑表达使。 (威盛 VIA 2003.11.06 上海笔试试题) 23、化简 F(A,B,C,D)= m(1,3,4,5,10,11,12,13,14,15)的和。 (威盛) 24、please show the CMOS inverter schmatic,layout and its cross sectionwith P-well process.Plot its transfer curve (Vout-Vin) And also explain the operation region of PMOS and NMOS for each segment of the tran
8、sfer curve? (威盛笔试题 circuit design-beijing-03.11.09) 25、To design a CMOS invertor with balance rise and fall time,please define the ration of channel width of PMOS and NMOS and explain? 26、为什么一个标准的倒相器中 P 管的宽长比要比 N 管的宽长比大?(仕兰微电子) 27、用 mos 管搭出一个二输入与非门。 (扬智电子笔试) 28、please draw the transistor level schem
9、atic of a cmos 2 input AND gate and explain which input has faster response for output rising edge.(less delay time)。 (威盛笔试题 circuit design-beijing-03.11.09) 29、画出 NOT,NAND,NOR 的符号,真值表,还有 transistor level 的电路。 (Infineon 笔试)30、画出 CMOS 的图,画出 tow-to-one mux gate。 (威盛 VIA 2003.11.06 上海笔试试题) 31、用一个二选一 mu
10、x 和一个 inv 实现异或。 (飞利浦大唐笔试) 32、画出 Y=A*B+C 的 cmos 电路图。 (科广试题) 33、用逻辑们和 cmos 电路实现 ab+cd。 (飞利浦大唐笔试) 34、画出 CMOS 电路的晶体管级电路图,实现 Y=A*B+C(D+E)。 (仕兰微电子) 35、利用 4 选 1 实现 F(x,y,z)=xz+yz 。 (未知) 36、给一个表达式 f=xxxx+xxxx+xxxxx+xxxx 用最少数量的与非门实现(实际上就是化简) 。37、给出一个简单的由多个 NOT,NAND,NOR 组成的原理图,根据输入波形画出各点波形。 (Infineon 笔试) 38、为
11、了实现逻辑(A XOR B)OR (C AND D) ,请选用以下逻辑中的一种,并说明为什么? 1)INV 2)AND 3)OR 4)NAND 5)NOR 6)XOR 答案:NAND(未知) 39、用与非门等设计全加法器。 (华为) 40、给出两个门电路让你分析异同。 (华为) 41、用简单电路实现,当 A 为输入时,输出 B 波形为(仕兰微电子) 42、A,B,C,D,E 进行投票,多数服从少数,输出是 F(也就是如果 A,B,C,D,E 中 1 的个数比0 多,那么 F 输出为 1,否则 F 为 0) ,用与非门实现,输入数目没有限制。 (未知) 43、用波形表示 D 触发器的功能。 (扬
12、智电子笔试) 44、用传输门和倒向器搭一个边沿触发器。 (扬智电子笔试) 45、用逻辑们画出 D 触发器。 (威盛 VIA 2003.11.06 上海笔试试题) 46、画出 DFF 的结构图,用 verilog 实现之。 (威盛) 47、画出一种 CMOS 的 D 锁存器的电路图和版图。 (未知) 48、D 触发器和 D 锁存器的区别。 (新太硬件面试) 49、简述 latch 和 filp-flop 的异同。 (未知) 50、LATCH 和 DFF 的概念和区别。 (未知) 51、latch 与 register 的区别,为什么现在多用 register.行为级描述中 latch 如何产生的
13、。 (南山之桥) 52、用 D 触发器做个二分颦的电路.又问什么是状态图。 (华为) 53、请画出用 D 触发器实现 2 倍分频的逻辑电路?(汉王笔试) 54、怎样用 D 触发器、与或非门组成二分频电路?(东信笔试) 55、How many flip-flop circuits are needed to divide by 16? (Intel) 16 分频? 56、用 filp-flop 和 logic-gate 设计一个 1 位加法器,输入 carryin 和 current-stage, 输出 carryout 和 next-stage. (未知) 57、用 D 触发器做个 4 进制的
14、计数。 (华为) 58、实现 N 位 Johnson Counter,N=5。 (南山之桥) 59、用你熟悉的设计方式设计一个可预置初值的 7 进制循环计数器,15 进制的呢?(仕兰 微电子) 60、数字电路设计当然必问 Verilog/VHDL,如设计计数器。 (未知) 61、BLOCKING NONBLOCKING 赋值的区别。 (南山之桥) 62、写异步 D 触发器的 verilog module。 (扬智电子笔试)module dff8(clk , reset, d, q); input clk; input reset; input 7:0 d; output 7:0 q; reg
15、7:0 q; always (posedge clk or posedge reset) if(reset) q ,=,=1.0E-8) sum+=term ;i+;term=term*x/i ;return sum ;void main() double s;s=Exp(1.0)+Exp(2.0);cout.precision(8);cout10 的数进位和把余数重新赋值给这一位 */for(i=0;i 0)I = 50;printf(“%dn“,I); (1)else if(pid = 0)printf(“%dn“,I); (2) 请问该程序用的是进程方式还是线程方式,并说明进程与线程的区
16、别:请问该程序输出什么结果? 无参考答案 L 四、constant pointer points for Stringpointer points for constant string 五、下面等价的是:A int i=0if(i)printf(“hello,world“);B int i=1;int j=2;if(i=1 | j=2)printf(“hello,world“);C Boolean b1=true;Boolean b2=true;if(b1=b2)printf(“hello,world“);D int i=1;int j=2;if(i=1 六、排序二叉树插入一个节点或双向链表的实现 四六为 IBM 面试题。 七、指针+的含义和用法 八、stack 和 heap 的分配,rtos 的特点、同步的方式 九、怎样避免内存泄漏的问题 十、编程实现十进制数转化为十六进制输出,不准用任何已经定义的库函数,比方说