程序员笔试面试题

更新时间:2024-05-09 00:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

[计算机] 笔试面试题整理 面试

本帖最后由 locust_j 于 2009-8-5 13:45 编辑 推荐~ 附件名称:笔试面试题整理.txt 附件大小:14KB 附件备注:

附件内容已贴出

现在的公司招聘,都要笔试面试.如果你不是那种编程功底非常深厚的人,又不好好准备一番,在笔试面试中往往会处于被动局面.虽然有些笔试题是故意为难我们,有点钻牛角尖.但是很多笔试题面试题确实能够很好地看出我们的基础.

在这里,我就略去那些钻牛角尖的题.从csdn论坛我近半年的收集中选出10道有代表性的题目,难度基本上是逐渐加大.对数组,指针,数据结构,算法,字符串,文件操作等问题都有覆盖.主要以c语言的实现为主,也有c++的题.大家可以先做做这10道题,测试一下自己的水平.

1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n)[10]; struct MyStruct {

char dda; double dda1; int type ; };

MyStruct k;

printf(\2. (1)

char a[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}} }; for(int i=0;i<12;i++) printf(\

在空格处填上合适的语句,顺序打印出a中的数字 (2)

char **p, a[16][8];

问:p=a是否会导致程序在以后出现问题?为什么? 3.用递归方式,非递归方式写函数将一个字符串反转. 函数原型如下:char *reverse(char *str);

4.strcpy函数和memcpy函数有什么区别?它们各自使用时应该注意什么问题? 5.写一个函数将一个链表逆序.

一个单链表,不知道长度,写一个函数快速找到中间节点的位置.

写一个函数找出一个单向链表的倒数第n个节点的指针.(把能想到的最好算法写出). 6.用递归算法判断数组a[N]是否为一个递增数组。 7.

有一个文件(名为a.txt)如下,每行有4项,第一项是他们的名次,写一个c程序,将五个人的名字打印出来.并按名次排序后将5行数据仍然保存到a.txt中.使文件按名次排列每行.

2,07010188,0711,李镇豪, 1,07010154,0421,陈亦良, 3,07010194,0312,凌瑞松, 4,07010209,0351,罗安祥, 5,07010237,0961,黄世传,

8.写一个函数,判断一个unsigned char 字符有几位是1.

写一个函数判断计算机的字节存储顺序是升序(little-endian)还是降序(big-endian). 9.微软的笔试题.

Implement a string class in C++ with basic functionality like comparison, concatenation, input and output. Please also provide some test cases and using scenarios (sample code of using this class). Please do not use MFC, STL and other libraries in your implementation.

10.有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个数不同,写一个搜索算法找出相同的那个数的值.(注意空间效率时间效率尽可能要低).

这十道题还是能够看出自己的水平如何的.如果你能不假思索地做出这10道题,估计去国外大公司是没有问题了,呵呵.

答案我在整理中,以后陆续发布................. 下面有些题也不错,可以参考.

1.下面的代码输出是什么,为什么? void foo(void) {

unsigned int a = 6; int b = -20;

(a+b>6)?puts(\为打印函数 } 输出 >6.

就是考察隐式转换.int型变量转化成unsigned int, b成了正数. 2. b)运行下面的函数会有什么结果?为什么? void foo(void) {

char string[10],str1[10]; int i;

for(i=0;i<10;i++) {

str1 = 'a'; }

strcpy(string, str1); printf(\ }

首先搞清strcpy函数的实现方法,

char * strcpy(char * strDest,const char * strSrc)

{

if ((strDest == NULL) || (strSrc == NULL)) throw \ char * strDestCopy = strDest;

while ((*strDest++ = *strSrc++) != '\\0'); return strDestCopy; }

由于str1末尾没有'\\0’结束标志,所以strcpy不知道拷贝到何时结束.

printf函数,对于输出char* 类型,顺序打印字符串中的字符直到遇到空字符('\0')或已打印了由精度指定的字符数为止. 下面是微软的两道笔试题....

3. Implement a string class in C++ with basic functionality like comparison, concatenation, input and output. Please also provide some test cases and using scenarios (sample code of using this class).

Please do not use MFC, STL and other libraries in your implementation. 我的实现方案如下,这道题真地对c++的主要特性都进行了较好地考察. String.h:

#ifndef STRING_H #define STRING_H #include using namespace std; class String{ public: String();

String(int n,char c); String(const char* source); String(const String& s);

//String& operator=(char* s);

String& operator=(const String& s); ~String();

char& operator[](int i){return a;}

const char& operator[](int i) const {return a;}//对常量的索引. String& operator+=(const String& s); int length();

friend istream& operator>>(istream& is, String& s);//搞清为什么将>>设置为友元函数的原因.

//friend bool operator< (const String& left,const String& right);

friend bool operator> (const String& left, const String& right);//下面三个运算符都没必要设成友元函数,这里是为了简单.

friend bool operator== (const String& left, const String& right); friend bool operator!= (const String& left, const String& right); private: char* a; int size;

}; #endif

String.cpp:

#include \#include #include String::String(){

a = new char[1]; a[0] = '\\0'; size = 0; }

String::String(int n,char c){ a = new char[n + 1]; memset(a,c,n); a[n] = '\\0'; size = n; }

String::String(const char* source){ if(source == NULL){ a = new char[1]; a[0] = '\\0'; size = 0; } else

{ size = strlen(source); a = new char[size + 1]; strcpy(a,source); } }

String::String(const String& s){

size = strlen(s.a);//可以访问私有变量. a = new char[size + 1]; //if(a == NULL) strcpy(a,s.a); }

String& String::operator=(const String& s){ if(this == &s) return *this; else {

delete[] a;

size = strlen(s.a); a = new char[size + 1]; strcpy(a,s.a); return *this; } }

String::~String(){ delete[] a;// }

String& String::operator+=(const String& s){ int j = strlen(a);

int size = j + strlen(s.a);

char* tmp = new char[size+1]; strcpy(tmp,a); strcpy(tmp+j,s.a); delete[] a; a = tmp; return *this; }

int String::length(){ return strlen(a); }

main.cpp:

#include #include %using namespace std;

bool operator==(const String& left, const String& right) {

int a = strcmp(left.a,right.a); if(a == 0) return true; else

return false; }

bool operator!=(const String& left, const String& right) {

return !(left == right); }

ostream& operator<<(ostream& os,String& s){ int length = s.length(); for(int i = 0;i < length;i++)

//os << s.a;这么不行,私有变量. os << s; return os;

}

String operator+(const String& a,const String& b){ String temp; temp = a; temp += b; return temp; }

bool operator<(const String& left,const String& right){

int j = 0;

while((left[j] != '\\0') && (right[j] != '\\0')){ if(left[j] < right[j]) return true; else {

if(left[j] == right[j]){ j++;

continue; } else

return false; } }

if((left[j] == '\\0') && (right[j] != '\\0')) return true; else

return false; }

bool operator>(const String& left, const String& right) { int a = strcmp(left.a,right.a); if(a > 0) return true; else

return false; }

istream& operator>>(istream& is, String& s){ delete[] s.a;

s.a = new char[20]; int m = 20; char c; int i = 0;

while (is.get(c) && isspace(c));

if (is) { do {s.a = c; i++;

/*if(i >= 20){

cout << \ exit(-1); }*/

if(i == m - 1 ){ s.a = '\\0';

char* b = new char[m]; strcpy(b,s.a);

m = m * 2; s.a = new char[m]; strcpy(s.a,b); delete[] b; } }

while (is.get(c) && !isspace(c)); //如果读到空白,将其放回. if (is)

is.unget(); }

s.size = i; s.a = '\\0'; return is; }

int main(){

String a = \ String b = \

//String c(6,b);这么写不对. String c(6,'l'); String d;

String e = a;//abcd String f;

cin >> f;//需要输入... String g;

g = a + b;//abcdwww if(a < b)

cout << \ else

cout << \ if(e == a)

cout << \

else

cout << \

b += a;

cout << a << endl; cout << b << endl; cout << c << endl; cout << d << endl; cout << e << endl; cout << f << endl; cout << g << endl; cout << g[0] << endl; return 0; }

4. Implement a single-direction linked list sorting algorithm. Please first define the data structure of linked list and then implement the sorting algorithm.

5.编写一个函数,返回两个字符串的最大公串!例如,“adbccadebbca”和“edabccadece”,返回“ccade”

联想笔试题

1.设计函数 int atoi(char *s)。 int atoi(const char *nptr); 函数说明

atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再 遇到非数字或字符串结束时('\\0')才结束转换,并将结果返回。 返回值 返回转换后的整型数。 #include #include

int myAtoi(const char* s){ int result = 0; int flag = 1; int i = 0;

while(isspace(s)) i++;

if(s == '-'){ flag = -1; i++; }

if(s == '+')

i++;

while(s != '\\0'){

if((s > '9') || (s < '0')) break; int j = s - '0';

result = 10 * result + j; i++; }

result = result * flag; return result; }

int main(){

char* a = \ -1234def\ char* b = \ int i = myAtoi(a); int j = myAtoi(b); printf(\ printf(\ return 0; }

2.int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 输出是多少? 3.解释局部变量、全局变量和静态变量的含义。 4.解释堆和栈的区别。

5.论述含参数的宏与函数的优缺点。 普天C++笔试题

1.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 2.写一个函数,将其中的\\t都转换成4个空格。

3.Windows程序的入口是哪里?写出Windows消息机制的流程。 4.如何定义和实现一个类的成员函数为回调函数?

5.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。 6.C++里面如何声明const void f(void)函数为C程序中的库函数? 7.下列哪两个是等同的 int b;

A const int* a = &b; B const* int a = &b;

C const int* const a = &b; D int const* const a = &b;

8.内联函数在编译时是否做参数类型检查? void g(base & b){

b.play; }

void main(){ son s; g(s); return; }

华为笔试题

1.请你分别画出OSI的七层网络结构图和TCP/IP的五层结构图。 2.请你详细地解释一下IP协议的定义,在哪个层上面?主要有什么作用?TCP与UDP呢?

3.请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的? 4.请问C++的类和C里面的struct有什么区别? 5.请讲一讲析构函数和虚函数的用法和作用。

6.全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?

7.8086是多少位的系统?在数据总线上是怎么实现的? Sony笔试题

1.完成下列程序 * *.*. *..*..*.. *...*...*...*...

*....*....*....*....*....

*.....*.....*.....*.....*.....*.....

*......*......*......*......*......*......*......

*.......*.......*.......*.......*.......*.......*.......*....... #include #define N 8 int main() { int i; int j; int k;

--------------------------------------------------------- | | | | | |

--------------------------------------------------------- return 0; }

2.完成程序,实现对数组的降序排序 #include void sort( );

int main() {

int array[]={45,56,76,234,1,34,23,2,3}; //数字任//意给出 sort( ); return 0; }

void sort( ) {

____________________________________ | | | |

|-----------------------------------------------------| }

3.费波那其数列,1,1,2,3,5??编写程序求第十项。可以用递归,也可以用其他方法,但要说明你选择的理由。 #include int Pheponatch(int); int main() {

printf(\ return 0; }

int Pheponatch(int N) {

-------------------------------- | | | |

-------------------------------- }

4.下列程序运行时会崩溃,请找出错误并改正,并且说明原因。 #include #include typedef struct{ TNode* left; TNode* right; int value; } TNode;

TNode* root=NULL; void append(int N); int main() {

append(63); append(45); append(32);

append(77); append(96); append(21);

append(17); // Again, 数字任意给出 }

void append(int N) {

TNode* NewNode=(TNode *)malloc(sizeof(TNode)); NewNode->value=N;

if(root==NULL) {

root=NewNode; return; } else {

TNode* temp; temp=root;

while((N>=temp.value && temp.left!=NULL) || (N

while(N>=temp.value && temp.left!=NULL) temp=temp.left;

while(N

if(N>=temp.value) temp.left=NewNode; else

temp.right=NewNode; return; } }

MSRA Interview Written Exam(December 2003,Time:2.5 Hours)

1写出下列算法的时间复杂度。 (1)冒泡排序; (2)选择排序; (3)插入排序; (4)快速排序; (5)堆排序; (6)归并排序;

2写出下列程序在X86上的运行结果。 struct mybitfields {

unsigned short a : 4; unsigned short b : 5; unsigned short c : 7; }test

void main(void) { int i; test.a=2; test.b=3; test.c=0;

i=*((short *)&test); printf(\ }

3写出下列程序的运行结果。 unsigned int i=3; cout<

4写出下列程序所有可能的运行结果。 int a; int b; int c; void F1() {

b=a*2; a=b; }

void F2() {

c=a+1; a=c; }

main() { a=5;

//Start F1,F2 in parallel F1(); F2();

printf(\ }

5考察了一个CharPrev()函数的作用。 6对 16 Bits colors的处理,要求:

(1)Byte转换为RGB时,保留高5、6bits; (2)RGB转换为Byte时,第2、3位置零。

7一个链表的操作,注意代码的健壮和安全性。要求: (1)增加一个元素; (2)获得头元素;

(3)弹出头元素(获得值并删除)。

8一个给定的数值由左边开始升位到右边第N位,如 0010<<1 == 0100 或者

0001 0011<<4 == 0011 0000

请用C或者C++或者其他X86上能运行的程序实现。 附加题(只有在完成以上题目后,才获准回答)

In C++, what does \ 1。在C++中有没有纯虚构造函数?

2。在c++的一个类中声明一个static成员变量有没有用? 3。在C++的一个类中声明一个静态成员函数有没有用? 4。如何实现一个非阻塞的socket?

5。setsockopt, ioctl都可以对socket的属性进行设置,他们有什么不同? 6。解释一下进程和线程的区别?

7。解释一下多播(组播)和广播的含义? 8。多播采用的协议是什么?

9。在c++中纯虚析构函数的作用是什么?请举例说明。

10。编程,请实现一个c语言中类似atoi的函数功能(输入可能包含非数字和空格)

转载请注明出自应届生求职招聘论坛 http://bbs.yingjiesheng.com/,本贴地址:http://bbs.yingjiesheng.com/thread-3031-1-1.html

五、DSP、嵌入式、软件等

1、请用方框图描述一个你熟悉的实用数字信号处理系统,并做简要的分析;如果没有,也可以自己设计一个简单的数字信号处理系统,并描述其功能及用途。(仕兰微面试题目) 2、数字滤波器的分类和结构特点。(仕兰微面试题目) 3、IIR,FIR滤波器的异同。(新太硬件面题)

4、拉氏变换与Z变换公式等类似东西,随便翻翻书把如.h(n)=-a*h(n-1) b*δ(n) a.求h(n)的z变换;b.问该系统是否为稳定系统;c.写出FIR数字滤波器的差分方程;(未知) 5、DSP和通用处理器在结构上有什么不同,请简要画出你熟悉的一种DSP结构图。(信威dsp软件面试题)

6、说说定点DSP和浮点DSP的定义(或者说出他们的区别)(信威dsp软件面试题) 7、说说你对循环寻址和位反序寻址的理解.(信威dsp软件面试题)

8、请写出【-8,7】的二进制补码,和二进制偏置码。用Q15表示出0.5和-0.5.(信威dsp软件面试题)

9、DSP的结构(哈佛结构);(未知)

10、嵌入式处理器类型(如ARM),操作系统种类(Vxworks,ucos,winCE,linux),操作系统方面偏CS方向了,在CS篇里面讲了;(未知)

11、有一个LDO芯片将用于对手机供电,需要你对他进行评估,你将如何设计你的测试项目?

12、某程序在一个嵌入式系统(200M CPU,50M SDRAM)中已经最优化了,换到零一个

系统(300M CPU,50M SDRAM)中是否还需要优化? (Intel) 13、请简要描述HUFFMAN编码的基本原理及其基本的实现方法。(仕兰微面试题目) 14、说出OSI七层网络协议中的四层(任意四层)。(仕兰微面试题目) 15、A) (仕兰微面试题目) #i nclude

void testf(int*p) {

*p =1; }

main() {

int *n,m[2]; n=m; m[0]=1; m[1]=8; testf(n);

printf(\ alue is %d \ }

------------------------------ B)

#i nclude

void testf(int**p) {

*p =1; }

main()

{int *n,m[2]; n=m; m[0]=1; m[1]=8; testf(&n);

printf(Data v alue is %d\ }

下面的结果是程序A还是程序B的? Data v alue is 8

那么另一段程序的结果是什么? 16、那种排序方法最快? (华为面试题) 17、写出两个排序算法,问哪个好?(威盛) 18、编一个简单的求n!的程序 。(Infineon笔试试题) 19、用一种编程语言写n!的算法。(威盛VIA 2003.11.06 上海笔试试题) 20、用C语言写一个递归算法求N!;(华为面试题) 21、给一个C的函数,关于字符串和数组,找出错误;(华为面试题) 22、防火墙是怎么实现的? (华为面试题) 23、你对哪方面编程熟悉?(华为面试题)

24、冒泡排序的原理。(新太硬件面题) 25、操作系统的功能。(新太硬件面题) 26、学过的计算机语言及开发的系统。(新太硬件面题)

27、一个农夫发现围成正方形的围栏比长方形的节省4个木桩但是面积一样.羊的数目和正 方形围栏的桩子的个数一样但是小于36,问有多少羊?(威盛) 28、C语言实现统计某个cell在某.v文件调用的次数(这个题目真bt) (威盛VIA2003.11.06 上海笔试试题)

29、用C语言写一段控制手机中马达振子的驱动程序。(威胜) 30、用perl或TCL/Tk实现一段字符串识别和比较的程序。(未知) 31、给出一个堆栈的结构,求中断后显示结果,主要是考堆栈压入返回地址存放在低端地 址还是高端。(未知)

32、一些DOS命令,如显示文件,拷贝,删除。(未知) 33、设计一个类,使得该类任何形式的派生类无论怎么定义和实现,都无法产生任何对象 实例。(IBM)

34、What is pre-emption? (Intel)

35、What is the state of a process if a resource is not available? (Intel) 36、三个 float a,b,c;问值(a b) c==(b a) c, (a b) c==(a c) b。(Intel) 37、把一个链表反向填空。 (lucent)

38、x^4 a*x^3 x^2 c*x d 最少需要做几次乘法? (Dephi)

____________________________________________________________ 六、主观题

1、你认为你从事研发工作有哪些特点?(仕兰微面试题目) 2、说出你的最大弱点及改进方法。(威盛VIA 2003.11.06 上海笔试试题) 3、说出你的理想。说出你想达到的目标。 题目是英文出的,要用英文回答。(威盛VIA 2003.11.06 上海笔试试题)

4、我们将研发人员分为若干研究方向,对协议和算法理解(主要应用在网络通信、图象语音压缩方面)、电子系统方案的研究、用MCU、DSP编程实现电路功能、用ASIC设计技术 设计电路(包括MCU、DSP本身)、电路功能模块设计(包括模拟电路和数字电路)、集成 电路后端设计(主要是指综合及自动布局布线技术)、集成电路设计与工艺接口的研究. 你希望从事哪方面的研究?(可以选择多个方向。另外,已经从事过相关研发的人员可以详细描述你的研发经历)。(仕兰微面试题目)

5、请谈谈对一个系统设计的总体思路。针对这个思路,你觉得应该具备哪些方面的知识?(仕兰微面试题目)

6、设想你将设计完成一个电子电路方案。请简述用EDA软件(如PROTEL)进行设计(包括 原理图和PCB图)到调试出样机的整个过程。在各环节应注意哪些问题?电源的稳定,电 容的选取,以及布局的大小。(汉王笔试) 七、共同的注意点

1.一般情况下,面试官主要根据你的简历提问,所以一定要对自己负责,把简历上的东西搞明白;

2.个别招聘针对性特别强,就招目前他们确的方向的人,这种情况下,就要投其所好,尽量介绍其所关心的东西。

3.其实技术面试并不难,但是由于很多东西都忘掉了,才觉得有些难。所以最好在面试前把该看的书看看。

4.虽然说技术面试是实力的较量与体现,但是不可否认,由于不用面试官/公司所专领域及爱

好不同,也有面试也有很大的偶然性,需要冷静对待。不能因为被拒,就否认自己或责骂公司。

5.面试时要take it easy,对越是自己钟情的公司越要这样。

转载请注明出自应届生求职招聘论坛 http://bbs.yingjiesheng.com/,本贴地址:http://bbs.yingjiesheng.com/thread-15051-1-1.html

本文来源:https://www.bwwdw.com/article/etbg.html

Top