CC++程序员应聘常见面试题1
C/C++程序员应聘常见面试题
作者:宋宝华发布时间:2006-2-2013:43:21|【字体:大中小】
1.引言
本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试
题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写
一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正
写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10
分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什
么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。
分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题
的深入剖析则可进一步增强自身的内功。
2.找错题
试题1:voidtest1()
{
charstring[10];
char*str1="0123456789";
strcpy(string,str1);
}
试题2:voidtest2()
{
charstring[10],str1[10];
inti;
for(i=0;i<10;i++)
{
str1[i]='a';
}
strcpy(string,str1);
}
试题3:
voidtest3(char*str1)
{
charstring[10];
if(strlen(str1)<=10)
{
strcpy(string,str1);
}
}
解答:
试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只
有10个字节的空间,strcpy会导致数组越界;
对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者
指出strcpy(string,str1)调用使得从str1内存起复制到string内存起所复制的字节数
具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分;
对试题3,if(strlen(str1)<=10)应改为if(strlen(str1)<10),因为strlen的
结果未统计’\0’所占用的1个字节。剖析:
考查对基本功的掌握:
(1)字符串以’\0’结尾;
(2)对数组越界把握的敏感度;
(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面
给出几个不同得分的答案:
2分voidstrcpy(char*strDest,char*strSrc)
{
while((*strDest++=*strSrc++)!=‘\0’);
}
4分voidstrcpy(char*strDest,constchar*strSrc)
//将源字符串加const,表明其为输入参数,加2分
{
while((*strDest++=*strSrc++)!=‘\0’);
}
7分voidstrcpy(char*strDest,constchar*strSrc)
{
//对源地址和目的地址加非0断言,加3分
assert((strDest!=NULL)&&(strSrc!=NULL));
while((*strDest++=*strSrc++)!=‘\0’);
}10分//为了实现链式操作,将目的地址返回,加3分!
char*strcpy(char*strDest,constchar*strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char*address=strDest;
while((*strDest++=*strSrc++)!=‘\0’);
returnaddress;
}
从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄
机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!
(4)对strlen的掌握,它没有包括字符串末尾的'\0'。
读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完
美的版本为:intstrlen(constchar*str)//输入参数const
{
assert(strt!=NULL);//断言字符串地址非0
intlen;
while((*str++)!='\0')
{
len++;
}
returnlen;
}
试题4:
voidGetMemory(char*p)
{p=(char*)malloc(100);
}
voidTest(void)
{
char*str=NULL;
GetMemory(str);
strcpy(str,"helloworld");
printf(str);
}
试题5:char*GetMemory(void)
{
charp[]="helloworld";
returnp;
}
voidTest(void)
{
char*str=NULL;
str=GetMemory();
printf(str);
}
试题6:voidGetMemory(char**p,intnum)
{
*p=(char*)malloc(num);
}
voidTest(void)
{
char*str=NULL;
GetMemory(&str,100);
strcpy(str,"hello");
printf(str);
}
试题7:
voidTest(void)
{
char*str=(char*)malloc(100);
strcpy(str,"hello");
free(str);
...//省略的其它语句
}
解答:
试题4传入中GetMemory(char*p)函数的形参为字符串指针,在函数内部修改形参
并不能真正的改变传入形参的值,执行完
char*str=NULL;
GetMemory(str);
后的str仍然为NULL;
试题5中charp[]="helloworld";
returnp;
的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程
序员常犯的错误,其根源在于不理解变量的生存期。
试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指
针,但是在GetMemory中执行申请内存及赋值语句*p=(char*)malloc(num);
后未判断内存是否申请成功,应加上:if(*p==NULL)
{
...//进行申请内存失败处理
}
试题7存在与试题6同样的问题,在执行
char*str=(char*)malloc(100);
后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能
变成一个“野”指针,应加上:
str=NULL;
试题6的Test函数中也未对malloc的内存进行释放。
剖析:试题4~7考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的
回答其中50~60的错误。但是要完全解答正确,却也绝非易事。
对内存操作的考查主要集中在:
(1)指针的理解;
(2)变量的生存期及作用范围;
(3)良好的动态内存申请和释放习惯。
再看看下面的一段程序有什么错误:swap(int*p1,int*p2)
{
int*p;
*p=*p1;
*p1=*p2;
*p2=*p;
}
在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在
VC++中DEBUG运行时提示错误“AccessViolation”。该程序应该改为:swap(int*p1,int*p2)
{
intp;
p=*p1;
*p1=*p2;
*p2=p;
}3.内功题
试题1:分别给出BOOL,int,float,指针变量与“零值”比较的if语句(假设
变量名为var)
解答:
BOOL型变量:if(!var)
int型变量:if(var==0)
float型变量:
constfloatEPSINON=0.00001;
if((x>=-EPSINON)&&(x<=EPSINON)
指针变量:if(var==NULL)
剖析:
考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int
型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序
都能正确运行,但是未能清晰地表达程序的意思。
一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),
表明其为“逻辑”判断;如果用if判断一个数值型变量(short、int、long等),应该用
if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),
这是一种很好的编程习惯。
最常见的50个CC面试题
最常见的50个CC面试题
C/C++经典面试题
面试题1:变量的声明和定义有什么区别
为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入e某tern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分
说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。
面试题2:写出bool、int、float、指针变量与“零值”比较的if语句
bool型数据:
if(flag){A;}ele{B;}
}
注意:应特别注意在int、指针型变量和“零值”比较的时候,放在左边,这样当把“==”误写成“=”时,编译器可以报错,否则这种逻辑错误不容易发现,并且可能导致很严重的后果。
面试题3:izeof和trlen的区别
izeof和trlen有以下区别:
izeof是一个操作符,trlen是库函数。 izeoftrlen只能以结尾为‘\0‘的字符串作参数。izeof的结果。而trlen函数必须在运行时才能计算出来。并且izeof
计算的是数据类型占内存的大小,而trlen计算的是字符串实际的长度。数组做izeof的参数不退化,传递给trlen就退化为指针了。
注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。最容易混淆为函数的操作符就是izeof。
面试题4:C语言的关键字tatic和C++的关键字tatic有什么区别
在C中tatic用来修饰局部静态变量和外部静态变量、函数。而C++中除了上述功能外,还用来定义类的成员变量和函数。即静态成员和静态成员函数。
注意:编程时tatic的记忆性,和全局性的特点可以让在不同时期调用的函数进行通信,传递信息,而C++的静态成员则可以在多个对象实例间进行通信,传递信息。
CC程序员面试背诵题目
CC程序员面试背诵题目
1.面向对象的程序设计思想是什么?
答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。
2.什么是类?
答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。
3.对象都具有的二方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。
静态特征是指能描述对象的一些属性;动态特征是指对象表现出来的行为;
4.在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?
答:1这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大提高了效率。2隐藏了代码;
5.在类的内部定义成员函数的函数体,这种函数会具备那种属性?答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。
6.成员函数通过什么来区分不同对象的成员数据?为什么它能够区分?答:通过thi指针来区分的,因为它指向的是对象的首地址。
7.C++编译器自动为类产生的四个缺省函数是什么?
答:默认构造函数,拷贝构造函数,析构函数,赋值函数。 8.拷贝构造函数在哪几种情况下会被调用?
答:1.当类的一个对象去初始化该类的另一个对象时;
2.如果函数的形参是类的对象,调用函数进行形参和实参结合时;3.如果函数的返回值是类对象,函数调用完成返回时。
9.构造函数与普通函数相比在形式上有什么不同?(构造函数的作用,它的声明形式来分析)答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。
10.什么时候必须重写拷贝构造函数?
答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。
11.构造函数的调用顺序是什么?答:1.先调用基类构造函数
2.按声明顺序初始化数据成员
3.最后调用自己的构造函数。
程序员面试常见问题及应对技巧
程序员⾯试常见问题及应对技巧
请你⾃我介绍⼀下你⾃⼰?
回答提⽰:⼀般⼈回答这个问题过于平常,只说姓名、年龄、爱好、⼯作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否
胜任⼯作,包括:最强的技能、最深⼊研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习⽆
关,也可以和学习有关,但要突出积极的个性和做事的能⼒,说得合情合理企业才会相信。企业很重视⼀个⼈的礼貌,求职者要尊重考官,
在回答每个问题之后都说⼀句“谢谢”,企业喜欢有礼貌的求职者。
2、你觉得你个性上最⼤的优点是什么?
回答提⽰:沉着冷静、条理清楚、⽴场坚定、顽强向上、乐于助⼈和关⼼他⼈、适应能⼒和幽默感、乐观和友爱。我在北⼤青鸟经过⼀到两
年的培训及项⽬实战,加上实习⼯作,使我适合这份⼯作。
3、说说你最⼤的缺点?
回答提⽰:这个问题企业问的概率很⼤,通常不希望听到直接回答的缺点是什么等,如果求职者说⾃⼰⼩⼼眼、爱忌妒⼈、⾮常懒、脾⽓
⼤、⼯作效率低,企业肯定不会录⽤你。绝对不要⾃作聪明地回答“我最⼤的缺点是过于追求完美”,有的⼈以为这样回答会显得⾃⼰⽐较出
⾊,但事实上,他已经岌岌可危了。企业喜欢求职者从⾃⼰的优点说起,中间加⼀些⼩缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。
4、你对加班的看法?
回答提⽰:实际上好多公司问这个问题,并不证明⼀定要加班,只是想测试你是否愿意为公司奉献。
回答样本:如果是⼯作需要我会义不容辞加班,我现在单⾝,没有任何家庭负担,可以全⾝⼼的投⼊⼯作。但同时,我也会提⾼⼯作效率,减少不必要的加班。
5、你对薪资的要求?
回答提⽰:如果你对薪酬的要求太低,那显然贬低⾃⼰的能⼒;如果你对薪酬的要求太⾼,那⼜会显得你分量过重,公司受⽤不起。⼀些雇
主通常都事先对求聘的职位定下开⽀预算,因⽽他们第⼀次提出的价钱往往是他们所能给予的最⾼价钱,他们问你只不过想证实⼀下这笔钱
是否⾜以引起你对该⼯作的兴趣。
操作系统常见面试题及答案
操作系统常见面试题及答案 1. 什么是进程(Process)和线程(Thread)?有何区别?
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行
资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,
它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在
运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其
他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中
的多个线程之间可以并发执行。
进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存
储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。
2. Windows下的内存是如何管理的?
Windows提供了3种方法来进行内存管理:虚拟内存,最适合用来管理大型对象或者
结构数组;内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机
上运行多个进程之间共享数据;内存堆栈,最适合用来管理大量的小对象。
Window操纵内存可以分两个层面:物理内存和虚拟内存。
其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G地
址空间,而内存分配是通过堆进行的,对于每个进程都有自己的默认堆,当一个堆创建后,
就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内存,系统消耗很小),当在
堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是
可扩充的,则扩充堆大小)为这个空闲块所包含的所有内存页提交物理对象(物理内存上或
硬盘上的交换文件上)。这时可以就访问这部分地址了。提交时,系统将对所有进程的内存
统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾
出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),
15个Python面试问题(附答案)
15个Python⾯试问题(附答案)
问题1
到底什么是Python?你可以在回答中与其他技术进⾏对⽐(也⿎励这样做)。
答案下⾯是⼀些关键点:
Python是⼀种解释型语⾔。这就是说,与C语⾔和C的衍⽣语⾔不同,Python代码在运⾏之前不需要编译。其他解释型语⾔还包括
PHP和Ruby。
Python是动态类型语⾔,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。
Python⾮常适合⾯向对象的编程(OOP),因为它⽀持通过组合(composition)与继承(inheritance)的⽅式定义类(class)。
Python中没有访问说明符(access specifier,类似C++中的public和private),这么设计的依据是“⼤家都是成年⼈了”。
在Python语⾔中,函数是第⼀类对象(first-class objects)。这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函
数作为输⼊。类(class)也是第⼀类对象。
Python代码编写快,但是运⾏速度⽐编译语⾔通常要慢。好在Python允许加⼊基于C语⾔编写的扩展,因此我们能够优化代码,消除
瓶颈,这点通常是可以实现的。numpy就是⼀个很好地例⼦,它的运⾏速度真的⾮常快,因为很多算术运算其实并不是通过Python实现的。
Python⽤途⾮常⼴泛——⽹络应⽤,⾃动化,科学建模,⼤数据应⽤,等等。它也常被⽤作“胶⽔语⾔”,帮助其他语⾔和组件改善运⾏状况。
Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,⽽不⽤处理底层的细节。
为什么提这个问题:
如果你应聘的是⼀个Python开发岗位,你就应该知道这是门什么样的语⾔,以及它为什么这么酷。以及它哪⾥不好。
问题2
补充缺失的代码
def print_directory_contents(sPath):
15道ts面试题
15道ts⾯试题
转载:
1、什么是TypeScript?
TypeScript是JavaScript的加强版,它给JavaScript添加了可选的静态类型和基于类的⾯向对象编程,它拓展了JavaScript的语法。
⽽且TypeScript不存在跟浏览器不兼容的问题,因为在编译时,它产⽣的都是JavaScript代码。
2、TypeScript 和 JavaScript 的区别是什么?
Typescript 是 JavaScript 的超集,可以被编译成 JavaScript 代码。 ⽤ JavaScript 编写的合法代码,在 TypeScript 中依然有效。Typescript
是纯⾯向对象的编程语⾔,包含类和接⼝的概念。 程序员可以⽤它来编写⾯向对象的服务端或客户端程序,并将它们编译成 JavaScript 代
码。
TypeScript和 JavaScript的关系
TypeScript 引⼊了很多⾯向对象程序设计的特征,包括:
interfaces 接⼝
classes 类
enumerated types 枚举类型
generics 泛型
modules 模块
主要不同点如下:
TS 是⼀种⾯向对象编程语⾔,⽽ JS 是⼀种脚本语⾔(尽管 JS 是基于对象的)。
TS ⽀持可选参数, JS 则不⽀持该特性。
TS ⽀持静态类型,JS 不⽀持。
TS ⽀持接⼝,JS 不⽀持接⼝。
3为什么要⽤ TypeScript ?
TS 在开发时就能给出编译错误, ⽽ JS 错误则需要在运⾏时才能暴露。
作为强类型语⾔,你可以明确知道数据的类型。代码可读性极强,⼏乎每个⼈都能理解。
TS ⾮常流⾏,被很多业界⼤佬使⽤。像 Asana、Circle CI 和 Slack 这些公司都在⽤ TS。
4、TypeScript 和 JavaScript 哪个更好?
由于 TS 的先天优势,TS 越来越受欢迎。但是TS 最终不可能取代 JS,因为 JS 是 TS 的核⼼。
精心整理110道Python面试题(附答案)
精⼼整理110道Python⾯试题(附答案)
整理了⼀些Python⾯试题和⾯试简历,如果需要,可以参考学习
扫描下⽅公众号回复:⾯试,即可获取⾯试题答案
程序员资源社区
具体⾯试题如下:
1、⼀⾏代码实现1--100之和
2、如何在⼀个函数内部修改全局变量
3、列出5个python标准库
4、字典如何删除键和合并两个字典
5、谈下python的GIL
6、python实现列表去重的⽅法
7、fun(*args,**kwargs)中的*args,**kwargs什么意思?8、python2和python3的range(100)的
区别8、python2和python3的range(100)的区别
9、⼀句话解释什么样的语⾔能够⽤装饰器?
10、python内建数据类型有哪些
11、简述⾯向对象中__new__和__init__区别
12、简述with⽅法打开处理⽂件帮我我们做了什么?
13、列表[1,2,3,4,5],请使⽤map()函数输出[1,4,9,16,25],并使⽤列表推导式提取出⼤于10的数,
最终输出[16,25]14、python中⽣成随机整数、随机⼩数、0--1之间⼩数⽅法
15、避免转义给字符串加哪个字母表⽰原始字符串?
16、
是不确定的17、python中断⾔⽅法举例
18、数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复⾏,
请写sql语句19、10个Linux常⽤命令
20、python2和python3区别?列举5个
21、列出python中可变数据类型和不可变数据类型,并简述原理
22、s = 'ajldjlajfdljfddd',去重并从⼩到⼤排序输出'adfjl'
23、⽤lambda函数实现两个数相乘24、字典根据键从⼩到⼤排序
25、利⽤collections库的Counter⽅法统计字符串每个单词出现的次
数'kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h'26、字符串a = 'not 404 found 张三 99 深圳',每个词中间是空格,⽤正则过滤掉英⽂和数字,
常见的Java上机面试题
常见的Java上机⾯试题
上机⾯试题常见的Java笔试主要考查⾯试者的主要的考试形式分为笔试和上机编程考试两部分。在程序
员⾯试中,基础是否牢固;上机考试主要考查⾯试者的实际开发能⼒和技术技巧。编写全部代码并调试使⽤⼀种编程⼯具,上机编程考试,要求⾯试者能够根据题⽬的要求,运⾏。这主要是考查⾯试者代码书写
和编程的熟练程度。值得注意的是,这类⾯试题要求能够命令提⽰符,⽽不DOS正确运⾏,往往要求⾯试者使⽤⽐较原始的JDK编译⽅式也就是使⽤希望能本章将经常出现的上机编程题进⾏分类,JBuilder等快
速开发环境。是提供Eclipse或者够给读者带来帮助和启⽰。)基础编程试题(117.1 Java 在上机编程
类的⾯试题中,⼤部分涉及基础编程,例如算法、语法、常⽤的类等知识点。怎样截取字符串⾯试题1
考题题⼲但输出为按字节截取的字符串。编写⼀个截取字符串的函数,输⼊为⼀个字符串和字节数,,应
该汉DEF,输⼊我ABC我是要保证汉字不被截半个,如ABC
,应该截为我? 。我ABC+汉的半个?屃输出我,⽽不是试题分析在这⾥需要考虑汉字和英⽂字符的占⽤字
本⾯试题容易产⽣困惑的是中⽂字符和英⽂字符,节数问题,中⽂字符占两个字节,英⽂字符占⼀个字节,理解了这个,就很容易完成本题了。参考答案具体代码实现如下:1.package core_java;import2. java.util.Scanner;
public 3.class InterceptionStr {
static String ss;
4.
//要进⾏截取操作的字符串
5.static int n;
//截取的字符串的字节数
6.public static void main(String[] args) {
7. System.out.println(请输⼊字符串:);
Scanner scStr = 8.new Scanner(System.in);
//从键盘获取字符串
9. ss = scStr.next(); //
50个C语言C++常见面试题及答案
C/C++经典面试题
面试题1:变量的声明和定义有什么区别
为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,
但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分
定义。
说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,
如外部变量。
面试题2:写出bool 、int、 float、指针变量与“零值”比较的if语句 bool型数据:
if( flag )
{
A;
}
else
{ B;
} int型数据:
if( 0 != flag )
{
A;
}
else
{ B; }
指针型数:
if( NULL == flag )
{
A;
}
else
{ B;
}
float型数据:
if ( ( flag >= NORM ) && ( flag <= NORM ) )
{ A;
2
}
注意:应特别注意在int、指针型变量和“零值”比较的时候,把“零值”放在左边,这样当把“==”
误写成“=”时,编译器可以报错,否则这种逻辑错误不容易发现,并且可能导致很严重的后果。
面试题3:sizeof和strlen的区别
sizeof和strlen有以下区别:
sizeof是一个操作符,strlen是库函数。
sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0‘的字符串作参数。
编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof
计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。
数组做sizeof的参数不退化,传递给strlen就退化为指针了。
注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定
要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。最容易混淆为函数的操作符就
PythonJava程序员面试必备常用问题解析与答案
PythonJava程序员⾯试必备常⽤问题解析与答案
转⾃AI算法联盟,理解python技术问题,以及⼀些常见的java⾯试中经常遇到的问题,这些⾯试问题分为四类:
是什么(what)
如何做(how)
说区别/谈优势(difference)
实践操作(practice)1. 什么是Python?
Python是⼀种编程语⾔,它有对象、模块、线程、异常处理和⾃动内存管理。可以加⼊与其他语⾔的对⽐。下⾯是回答这⼀问题的⼏个关键点:a. Python是⼀种解释型语⾔,python代码在运⾏之前不需要编译。
b. Python是动态类型语⾔,在声明变量时,不需要说明变量的类型。
c. Python适合⾯向对象的编程,因为它⽀持通过组合与继承的⽅式定义类。
d. 在Python语⾔中,函数是第⼀类对象。
e. Python代码编写快,但是运⾏速度⽐编译语⾔通常要慢。
f. Python⽤途⼴泛,常被⽤作“胶⽔语⾔”,可帮助其他语⾔和组件改善运⾏状况。
g. 使⽤Python,程序员可以专注于算法和数据结构的设计,⽽不⽤处理底层的细节。
2. 什么是Python⾃省?
python⾃省是python具有的⼀种能⼒,使程序员⾯向对象的语⾔所写的程序在运⾏时,能够获得对象的类python型。Python是⼀种解释型语⾔。为程序员提供了极⼤的灵活性和控制⼒。3. 什么是PEP 8?
PEP8是⼀种编程规范,内容是⼀些关于如何让你的程序更具可读性的建议。
4. 什么是pickling和unpickling?
Pickle模块读⼊任何Python对象,将它们转换成字符串,然后使⽤dump函数将其转储到⼀个⽂件中——这个过程叫做pickling。反之从存储的字符串⽂件中提取原始Python对象的过程,叫做unpickling。5. 什么是Python装饰器?
Python装饰器是Python中的特有变动,可以使修改函数变得更容易。
6. 什么是Python的命名空间?
