腾讯、百度、阿里、微软面试题精选(不断更新)
1、for(i=0;i<10;++i,sum+=i); 循环结束时 i 和sum的值分别是多少?
分析:循环结束时 i=10应该没有问题,sum计算的位置不是很常见,每次sum+=i 时,i 的值都是先自加1,即 i(从0到9),计算sum时是从1加到10,结果55;
如果是:for(i=0;i<10;++i) sum+=i; 循环结束时 i 和sum的值分别是多少?
这次 i 依然是10,但是sum就是0到9的加和,结果45。
2、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。
#define Max(a,b) ((a-b)&(0x80))? b:a
#define Max(a,b) ((a-b)&(1<<31))? b:a 两种写法是等价的。
注意:#define Max(a,b) (a/b)?a:b 这个答案是不全面的,只适用于正整数。
3、不使用额外空间,将 A,B两链表的元素交叉归并。
代码使用了递归的方式实现合并两个链表:
1 #include <iostream> 2 using namespace std; 3 4 typedef struct node 5 { 6 int val; 7 struct node *next; 8 }node; 9 10 node* createList(int n) 11 { 12 node *head; 13 node *pHead;//永远指向最新的节点 14 node *pNext;//指向新添加的节点 15 for(int i=0;i<n;i++) 16 { 17 if(i==0) 18 { 19 head=new node; 20 cout<<"请输入第1个元素(头结点)的值:"; 21 cin>>head->val; 22 head->next=NULL; 23 pHead=head; 24 } 25 else 26 { 27 pNext=new node; 28 cout<<"请输入第"<<i+1<<"个元素的值:"; 29 cin>>pNext->val; 30 pNext->next=NULL; 31 pHead->next=pNext; 32 pHead=pNext; 33 } 34 } 35 return head; 36 } 37 38 void mergeTwoList(node *headA,node *headB)//headA的长度大于等于headB的 39 { 40 if(headA==NULL||headB==NULL) 41 { 42 return; 43 } 44 mergeTwoList(headA->next,headB->next);//递归实现 45 headB->next=headA->next; 46 headA->next=headB; 47 } 48 49 int main() 50 { 51 node *headA; 52 node *headB; 53 node *newList; 54 cout<<"新建链表A:\n"; 55 headA=createList(5); 56 cout<<"新建链表B:\n"; 57 headB=createList(3); 58 newList=headA; 59 mergeTwoList(headA,headB); 60 cout<<"合并后的新链表:"<<endl; 61 while(newList!=NULL) 62 { 63 cout<<newList->val<<" "; 64 newList=newList->next; 65 } 66 return 0; 67 }
4、*p=NULL *p=new char[100] sizeof(p)各为多少?(一般都指的32位计算机)只要是指针变量都是4字节的,也就是计算机寻址空间是0到(2^32-1),即32位。
5、C语言中的内存泄漏:
动态内存的意思是程序运行时在堆上申请的内存。
而静态内存是程序编译时,在静态存储区申请的内存。
动态内存泄露指的是程序运行时,使用的new malloc realloc等函数没有与之匹配的delete free等函数。
造成程序不断的同操作系统申请内存,而又不还给操作系统,申请的多了,操作系统本身也就没内存可用了。
而应用程序,一旦退出,那么操作系统是会自动回收该应用程序所在进程的全部资源的,所以,泄露的内存也就会被操作系统全部回收。
应用程序的内存分为四块:堆区,栈区,全局数据区,代码区 其中堆区需要程序员自己管理,我们申请的动态变量就存放在堆区,用完后需要程序员自己手动释放。若申请了一块动态内存,未释放,却丢失了指向性,这就叫内存泄露,会导致程序的可用内存减少,严重的话会拖垮操作系统。
6、
32位机上根据下面的代码,问哪些说法是正确的?()signed char a = 0xe0;unsigned int b = a;unsigned char c = a;A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D.上面都不对
有符号数和无符号数之间的转换:c
首先,a=1110 0000,首位是1,signed是有符号数,所以是负的;unsigned int 是4个字节的,无符号数,把a转换成b时,负数前面补1,正数补0,所以b的16进制表示0xffffffe0;
c是无符号数,单字节的,c=0xe0,是正数。
转一篇很好的博客,看了就懂了:
#include <stdio.h>int main(int argc, char *argv[]){ unsigned char a = -1;char b = a; printf("%d %d",a,b); return 0;}
//结果:255 -1
#include <stdio.h>int main(int argc, char *argv[]){ unsigned short a = -1;short b = a; printf("%d %d",a,b); return 0;}//结果:65535 -1
这是两段很简单的代码,我就以第二段代码为例。
在计算机中,负数是以补码来存储的。 转载请注明出处http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
C语言中常量整数 -1的补码表示为0xFFFFFFFF。截取后面16位FFFF赋值给 变量a(unsigned short)。此时 a = 0xFFFF(a没有符号位,0xFFFF转换为十进制为65535)。
a又将0xFFFF,直接赋值给short b。 此时 b = 0xFFFF(但是要注意,b是有符号的,0xFFFF转换为十进制为-1)。
执行printf("%d %d",a,b);的时候,要将 a和b的值先转换为int型:(这里是重点!!!)
a没有符号所以转为int型为0x0000FFFF,
b有符号转换为int型为0xFFFFFFFF。
十进制输出值 65535 -1. 转载请注明出处http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
#include <stdio.h>int main(int argc, char *argv[]){ unsigned int a = -1;int b = a; printf("%d %d",a,b); return 0;}//结果 -1 -1
转载请注明出处http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
a在内存中值为0xFFFFFFFF,b的值为0xFFFFFFFF,都已经32位,
a转换为int型的时候就是0xFFFFFFFF,所以输出-1.
其实,记住两点就行了
1.unsigned 类型转换为 signed类型的时候是直接复制到低位,高位为0.如果signed类型位数不够,只直接装载unsigned低位。
2.signed类型转换为unsigned类型的时候,也是将补码直接复制到低位,高位为符号位。如果unsigned位数不够,只直接装载signed低位。
7、
1 下面哪些选项能编译通过? 2 int i; 3 char a[10]; 4 string f(); 5 string g(string &str); 6 7 A. if(!!i){f();} 8 B. g(f()); 9 C. a=a+1; 10 D. g("abc");
解析:c、c++会给未初始化的变量随机赋值,所以A是可以的;B是错误的,因为一个函数的返回值是一个临时变量,g函数参数是一个引用变量,应该传入一个定义好的变量作为参数,例如 string a="abc";g(a);所以D也是错误的,如果是g(string str)函数,B、D都是对的。C是错的,因为a是指向数组a[10]的首地址的指针,是个常量,不能赋值的,就像5=5+1是不可能的。但是 char *p; p=a;p++;这就可以了,因为p是变量了。
8、
问下面的数据都存放在哪些存储区?int main() {char *p = "hello,world";return 0; }A. 堆和静态数据区 B. 栈和静态数据区 C. 栈和常量区 D. 栈和堆
解析:根据C语言中的特性和定义p是一个局部变量,而C语言中局部变量存在于栈中,"hello wrold"是一个字符串常量,因此存储于程序的只读存储区中,p在这里其实只是指向了"hello wrold"在只读存储区中的地址而已。
12、问题:在一个二维数组中,每行的元素从左到右是递增的,每列元素从上到下是递增的。写一个函数,查找一给定的元素是否在此数组中
输入:一个二维数组,和一个待查找的数
输出:待查找的数在数组中输出“YES",否则输出”NO"
原始思路:最简单思路就是暴力搜索,遍历一遍数组中的元素时间复杂度为O(n2)。但是这样就没有用问题的已知条件(从左到右、从上到下递增),因此不是个好的解法
改进1:从第一行开始找,找到待查元素大的,如果还没找到,接着从第二行开始找,直到找到或到最后一个元素为止(如图),但是如果带查找的元素在最后,还得遍历到最后,时间复杂度还是O(n2)
改进2:上来在随机在里面挑一个,如果正好逮住,那就结束了;如果比待查找的元素大,那么他的左边和上边;否则在右边和下边。如下图。这样下来可以减少一部分元素的比较。在寻找1时,会话费反而很多时间,并不是个好的解决办法。
改进3:看两个比较关键的两个点——左下角和右上角。以右上角为例(如下图)。如果右上角元素等于带查找元素,那就返回真;如果右上角元素大于待查找元素,那就删除右上角元素所在列;否则删除其所在行。依次进行下去。
举例说明:
参考代码一:
#include <stdio.h>int find_value(int a[][4], int value, int x, int y)//(x,y)表示右上角坐标 {if ((x >= 0) && (y < 4)){if (a[x][y] == value)return 1;else if (a[x][y] > value)return find_value(a, value, x-1, y);elsereturn find_value(a, value, x, y+1);}return 0; }int main() {int a[4][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};int val;printf("Enter your number:");scanf("%d", &val);if(find_value(a, val, 3, 0))printf("Yes, find it\n");elseprintf("No, not find it\n");return 0; }
转载于:https://www.cnblogs.com/nannanITeye/archive/2013/04/07/3005999.html
腾讯、百度、阿里、微软面试题精选(不断更新)相关推荐
- 腾讯百度阿里,三巨头谁最开放?
A-A+ 罗超 2013-08-14 06:4240投稿腾讯百度阿里巴巴头条 大约一周前,微信第一自媒体联盟WeMedia的微信群爆发了一次激烈的讨论,主题是关于中国互联网巨头的开放.有人说腾讯最开放 ...
- android插件化资源冲突,2021年阿里Android面试题精选,威力加强版
写在前面 1月初失业,找了近2个多月的工作了,还没找到心仪的工作,感觉心好慌,不知道该怎么办了?找不到工作的时候压力很大,有人说自信会很受打击,还有人说会很绝望,是人生的低谷--尽管很多时候我们自己知 ...
- 腾讯百度一次面试题和经历
小谈一下腾讯面试的感受. 尽管已经想好去百度了,但早先内推到了腾讯,还是如期参加了腾讯的笔试,接着是好几次面试,到后来的HR面,再最后就是拒腾讯了. 腾讯给人的感觉是相当注重应届学生的课堂成绩,从几个 ...
- 腾讯百度阿里变身天使投资背后:PE估值偏低
专家表示,中国互联网用户不再关注功能诉求而是社区诉求,社区化是发展终极目标 本报记者 夏芳 进入2011年,互联网行业中多了一道风景,那就是行业巨头开始做天使投资人. 虽然中国概念股在美遭遇集体&qu ...
- 2021年阿里Android面试题精选,极其重要
面试题目 1.一个创业公司 (发现问下来几乎全是java基础知识,几乎没有android知识) 先是笔试: 生产者消费者模型用线程方式实现.按元素大小拼接两个链表 同步和异步的区别 阻塞和非阻塞的区别 ...
- Top 10国际大厂人工智能岗位经典面试题精选
Top 10国际大厂人工智能岗位经典面试题精选 https://www.toutiao.com/a6635196559355019780/ 2018-12-15 20:31:25 AI专业应届毕业生年 ...
- 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析
最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面拿 ...
- 百度 阿里 华为 腾讯 谷歌面试笔试题及解析
8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面拿出来两个球: ii.如果取出的是两 ...
- 【转】2014百度 阿里 华为 腾讯 谷歌面试笔试题及解析
原文: http://www.cnblogs.com/JuneWang/p/3773880.html 已知memcpy的函数为: void* memcpy(void *dest , const voi ...
最新文章
- 无网络服务器(linux ubuntu),pip安装python科学计算所有需要包(packages)
- 穿越时空,跟我一起探索云栖数字谷(2021云栖大会免费送票)
- 【Linux】一步一步学Linux——logout命令(209)
- 计算机体系结构知识笔记
- 不好意思,你这个加分理由不行……
- 工厂和反射的使用方法
- html超浪漫的3D动态相册表白网站制作 html程序员专属情人节表白网站
- Python简单实现微博自动点赞
- java 虚拟打印机_在java里调用SmartPrinter虚拟打印机的问题
- 公众号排名优化技巧分享
- ipad上编程方法,服务器安装vscode
- 基于工业智能网关的PLC远程控制解决方案
- Excel无法vlookup事件
- 数字化医院中智慧医疗的具体应用
- 攻防世界_江苏工匠杯_MISC_看雪看雪看雪
- 人生是一场盛大的修行
- 花生壳PHTunnel嵌入Openwrt实例
- [标准库]STM32F103R8T6 串口的收发
- 产品经理必懂的技术知识
- 罗技无法使用计算机上的配置文件,如何解决Logitech键盘多媒体键无法使用的问题?...
热门文章
- JZOJ 5939. 【NOIP2018模拟10.30】阻击计划
- JZOJ 5710. 【北大夏令营2018模拟5.13】Mex
- JZOJ 5395. 【NOIP2017提高A组模拟10.6】Count
- python金字塔图绘制_如何用R或Python绘制3d(4变量)三元(金字塔)图?
- 2009年EI(美国工程索引)收录的中国期刊
- 系统重装后 Endnote 不能和Word联用的解决方法
- python模块编程教程_python进阶教程之模块(module)介绍
- 无障碍开发(八)之盲人如何使用互联网的8个误区
- django邮箱验证模块
- ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程