最近在找工作,到处跑,做了很多笔试,这里总结这些天常考的题,一是记录心得,二是分享知识--Rome was not built in a day
1 char *const p; char const *p; const char *p; 这三者有什么区别?
char *const p: 指针常量,指向一块区域,这块区域可读可写,但是指针的值初始后就不能改,类似于一般常量。 char const *p; const char *p表示同一个意思: 常量指针,指向一块区域,这块区域不可写,只能读。
2 Static全局变量与普通的全局变量有什么区别?Static局部变量与普通的局部变量有什么区别?Static函数与普通的函数有什么区别?
在模块内,一个被声明为静态的全局变量可以被模块内所有函数访问,但不能被模块外其它函数访问,它是一个本地的全局变量。在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用,也就是说,这个函数被限制在声明它的模块的本地范围内使用。
3 请描述堆和栈的区别
栈区(stack)由编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈。 堆区(heap)一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式类似于链表
4 列出你所知道的嵌入式操作系统
一般个人的话一般是嵌入式Linux,uclinux,ucos-ii 这些都可以,而且可以接触到源码,这个是很好的。除此之外还有微软的wince,开发工具多,开发周期短,但是看不到源码。还有就是VxWorks ,这个是嵌入式最强的可想而知一般在大企业,军工上才会用。
5 你所知道的排序算法
排序算法稳定性的简单形式化定义为:如果Ai = Aj,排序前Ai在Aj之前,排序后Ai还在Aj之前,则称这种排序算法是稳定的,通俗地讲就是保证排序前后两个相等的数的相对顺序不变。
冒泡排序,时间复杂度o(n^2),稳定;
选择排序,时间复杂度o(n^2),不稳定;
插入排序,时间复杂度o(n^2),稳定;
希尔排序,时间复杂度不定,不稳定;
堆排序,时间复杂度o(nlogn),不稳定;
快速排序,时间复杂度o(nlogn),不稳定;
归并排序,时间复杂度o(nlogn),稳定;
基数排序,时间复杂度o(n^2),稳定