程序员面试宝典
2009-12-10 09:351. 简述 private、 protected、 public、 internal 修饰符的访问权限。
答 . private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
2 .列举 页面之间传递值的几种方式。
答. 1.使用QueryString, 如....?id=1; response. Redirect()....2.使用Session变量3.使用Server.Transfer3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。
答:public class MainClass{public static void Main(){Console.WriteLine(Foo(30));}public static int Foo(int i){if (i <= 0)return 0;else if(i > 0 && i <= 2)return 1;else return Foo(i -1) + Foo(i - 2);}}4.C#中的委托是什么?事件是不是一种委托?答:委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的引用。
是,是一种特殊的委托5.override与重载的区别答:override 与重载的区别。
重载是方法的名称相同。
参数或参数类型不同,进行多次重载以适应不同的需要Override 是进行基类中函数的重写。
为了适应需要。
6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?答:this.Server.Transfer7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?答:foreach (System.Windows.Forms.Control control in this.Controls){if (control is System.Windows.Forms.TextBox){System.Windows.Forms.TextBox tb =(System.Windows.Forms.TextBox)control ;tb.Text = String.Empty ;}}8.请编程实现一个冒泡排序算法?答:int [] array = new int;int temp = 0 ;for (int i = 0 ; i < array.Length - 1 ; i++){for (int j = i + 1 ; j < array.Length ; j++){if (array[j] < array[i]){temp = array[i] ;array[i] = array[j] ;array[j] = temp ;}}}9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?答:不是。
可以用任意类型。
10.求以下表达式的值,写出您想到的一种或几种实现方法:1-2+3-4+……+m答:int Num = this.TextBox1.Text.ToString() ;int Sum = 0 ;for (int i = 0 ; i < Num + 1 ; i++){if((i%2) == 1){Sum += i ;}else{Sum = Sum - I ;}}System.Console.WriteLine(Sum.ToString());System.Console.ReadLine() ;11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?答:一般为3层数据访问层,业务层,表示层。
数据访问层对数据库进行增删查改。
业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
表示层为了与用户交互例如用户添加表单。
优点:分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点:增加成本。
12.在下面的例子里using System;class A{public A(){PrintFields();}public virtual void PrintFields(){}}class B:A{int x=1;int y;public B(){y=-1;}public override void PrintFields(){Console.WriteLine("x={0},y={1}",x,y);}当使用new B()创建B的实例时,产生什么输出?答:X=1,Y=0;x= 1 y = -113.什么叫应用程序域?答:应用程序域可以理解为一种轻量级进程。
起到安全的作用。
占用资源小。
14.CTS、CLS、CLR分别作何解释?答:CTS:通用语言系统。
CLS:通用语言规范。
CLR:公共语言运行库。
15.什么是装箱和拆箱?答:从值类型接口转换到引用类型装箱。
从引用类型转换到值类型拆箱。
16.什么是受管制的代码?答:unsafe:非托管代码。
不经过CLR运行。
17.什么是强类型系统?答:RTTI:类型识别系统。
中读写数据库需要用到那些类?他们的作用?答:DataSet:数据存储器。
DataCommand:执行语句命令。
DataAdapter:数据的集合,用语填充。
的身份验证方式有哪些?分别是什么原理?答:10。
Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥)20.什么是Code-Behind技术?答:代码后植。
21.在.net中,配件的意思是?答:程序集。
(中间语言,源数据,资源,装配清单)22.常用的调用WebService的方法有哪些?答:1.使用WSDL.exe命令行工具。
2.使用中的Add Web Reference菜单选项 Remoting 的工作原理是什么?答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
24.在C#中,string str = null 与string str = “” 请尽量使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。
25.请详述在dotnet中类(class)与结构(struct)的异同?答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:namespace test{public delegate void OnDBOperate();public class UserControlBase :erControl{public event OnDBOperate OnNew;privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e){if(e.Button.Equals(BtnNew)){//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}}}答:if( OnNew != null )OnNew( this, e );27.分析以下代码,完成填空string strTmp = "abcdefg某某某";int i=System.Text.Encoding.Default.GetBytes(strTmp).Length;int j= strTmp.Length;以上代码执行完后,i= j=答:i=13,j=1028.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i){lock(this){if (i>10){i--;test(i);}}}答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。
但如果把int换做一个object,那么死锁会发生)30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。
而Remoting可以利用TCP/IP,二进制传送提高效率。
31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid 相似)。
根据您的知识,请简要谈一下您的思路答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。
32.给定以下XML文件,完成算法流程图。
<FileSystem>< DriverC ><Dir DirName=”MSDOS622”><File FileName =” ” ></File></Dir><File FileName =”MSDOS.SYS” ></File><File FileName =” IO.SYS” ></File></DriverC></FileSystem>请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。
答:void FindFile( Directory d ){FileOrFolders = d.GetFileOrFolders();foreach( FileOrFolder fof in FileOrFolders ){if( fof is File )You Found a file;else if ( fof is Directory )FindFile( fof );}}33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
程序员面试宝典:应聘不同级别职位的技巧
Word文档仅供参考
Word文档仅供参考程序员面试宝典:应聘不同级别职位的技巧
应聘初级职位,会针对你的编程能力和以往的项目经验进行重点的考查。
假如面试官针对你做的某个项目反复提咨询,那么你就需要注意了,要么面试官在那个方面特别精通,要么算是以后的职位需要用到这方面的技术。
我们应该抱着一种诚恳的态度来回答,对熟悉的技术点能够详细阐述,关于别熟悉的部分能够诚实地告诉面试官,千万别要疑惑装知道。
只是,我们接受能够引导与面试官的谈话,把他尽量引导到我们所擅长的领域。
应聘中级职位,别但会考查代码编写,而且会对软件架构或相关行业知识方面进行考查。
代码编写方面,要紧以考查某种编程技巧来推断你对代码的驾驭能力。
比如某国际知名软件公司经常会让面试者编写malloc或atoi函数。
越是简单的函数越能考验应聘者的编码能力。
你别但要实现功能,而且还要对可能浮现的错误编写防备性代码,这些经验都需要在实际编程过程中积存。
应聘高级职位,应聘者确信对技术或某个行业有相当程度的了解,这时要紧是看你与职位的契合程度、企业文化的配比性(即将人力资源及成本配比作为服务体系的重要组成部分,将公司企业文化中核心理念及价值观作为客户服务的重要媒介)及整体感受。
应聘治理职位的话,考查的更多是治理技巧、沟通技巧和性格因素。
架构师普通会考查行业背景与软件架构方面的知识,比如UML或建模工具的使用等;技术专家的职位则会针对相关技术进行深度考查,而可不能再考查普通性的编码能力。
Android程序员面试笔试宝典
读书笔记
很多内容都是点到为止。 蜻蜓点水、拼凑嫌疑,21年了居然还有这种书籍[尴尬]推荐阅读各类技术的官方文档。
目录分析
1.1活动 1.2服务
1.3广播接收器 1.4内容提供者
1.1.1生命周期 1.1.2启动模式 1.1.3碎片 1.1.4常见面试笔试真题
1.2.1 Android线程 1.2.2生命周期 1.2.3服务类型 1.2.4 Handler机制 1.2.5常见面试笔试真题
1
13.1单例模式
2
13.2工厂模式
3
13.3适配器模 式
4
13.4观察者模 式
5
13.5常见面试 笔试真题
精彩摘录
这是《Android程序员面试笔试宝典》的读书笔记模板,可以替换为自己的精彩内容摘录。
作者介绍
这是《Android程序员面试笔试宝典》的读书笔记模板,暂无该书作者的介绍。
谢谢观看
12.6.1 finally块中的代码什么时候被执行? 12.6.2异常处理的原理是什么? 12.6.3运行时异常和普通异常有什么区别? 12.6.4异常处理的新特性 12.6.5常见面试笔试真题
12.7.1 Java Collections框架是什么? 12.7.2 ArrayList、Vector和LinkedList的区别是什么? 12.7.3 Map 12.7.4 Set
3.2自定义 ViewGroup
3.1自定义View
3.3常见面试笔试 真题
3.1.1 onMeasure() 3.1.2 onDraw()
4.2属性动画
4.1 View动画
4.3常见面试笔试 真题
4.1.1透明度动画(AlphaAnimation) 4.1.2缩放动画(ScaleAnimation) 4.1.3平移动画(TranslateAnimation) 4.1.4旋转动画(RotateAnimation) 4.1.5 AnimationSet
JAVA程序员面试宝典
JAVA程序员面试宝典1. 面向对象的特征有哪些方面1.1 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
抽象包括两个方面: 一是过程抽象; 二是数据抽象。
1.2 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
1.3 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
1.4 多态性:多态性是指允许不同类的对象对同一消息作出响应。
多态性包括参数化多态性和包含多态性。
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
2、String是最基本的数据类型吗?基本数据类型包括byte、int、char、long、float、double、boolean和short。
ng.String类是final类型的,因此不可以继承这个类、不能修改这个类。
为了提高效率节省空间,我们应该用StringBuffer类3. int 和Integer 有什么区别Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。
int是java的原始数据类型,I nteger是java为int提供的封装类。
Java为每个原始类型提供了封装类。
原始类型封装类boolean -- Boolean char--Character byte--Byte short--Short int--Integer l ong--Long float--Float double--Double引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
程序员面试宝典
程序员面试宝典程序员面试是程序员求职过程中至关重要的一环,通过面试,公司能够对候选人的能力和适应性进行评估。
在准备面试过程中,掌握一些面试宝典是非常重要的。
本文将介绍一些程序员面试的常见问题以及如何准备回答这些问题。
一、自我介绍面试的第一个问题通常是要求候选人进行自我介绍。
自我介绍时需要简明扼要地介绍个人基本信息、教育背景及工作经验等。
同时,在自我介绍中要突出自己在编程方面的技能和经验,以及特别取得的成就。
二、技术问题1. 数据结构和算法面试官通常会问一些关于数据结构和算法的问题,以评估候选人的编码能力和解决问题的能力。
候选人应该对常见的数据结构和算法有深入的了解,并能够灵活运用于实际问题的解决中。
2. 编程语言面试官可能会针对候选人熟悉的编程语言进行提问,包括语法、特性和常见的开发环境等。
候选人需要对所熟悉的编程语言有透彻的了解,能够清晰地解释语言的特性和用法。
3. 操作系统和网络考察候选人对操作系统和网络的了解程度,候选人需要熟悉操作系统的原理和常见的网络协议,例如TCP/IP、HTTP等。
此外,候选人还应该了解进程管理、线程和并发等概念。
三、项目经验面试官经常会问候选人关于项目经验的问题,包括具体的项目内容、角色和贡献等。
候选人需要准备好自己在项目中承担的职责和解决的问题,并且能够清晰地表达出来。
四、非技术问题除了技术问题,面试官还会问一些与个人能力和性格相关的非技术问题,以了解候选人的综合素质。
例如,面试官可能会问候选人如何处理团队冲突、如何解决问题等。
在准备回答这些问题时,候选人应该提前思考并准备好相关的例子和解决方案。
五、实战演练为了更好地评估候选人的实际操作能力,面试官可能会要求候选人进行一些编程任务的实战演练。
这样可以直观地了解候选人在解决实际问题时的能力和效率。
在实战演练过程中,候选人需要注意代码的规范性和可读性。
六、结尾面试的最后一般会有时间给候选人提问,候选人可以对公司的工作环境、团队氛围、学习发展等方面进行询问。
java程序员面试宝典
1、面向对象的特征有哪些?封装:封装就是隐藏对象的数据和实现细节。
把数据和相关的操作有机的结合在一起,形成一个类。
这样能够避免用户对数据的直接操作。
继承:继承就是当前类可以派生成一个新类。
新类叫做子类,当前类叫做父类或者基类。
子类可以继承父类所有的非私有的属性和方法。
同时,子类还可以重写父类的方法。
继承能够增强代码的重用性,同时能实现多态调用。
多态:允许不同的类对统一消息做出响应。
方法的重写。
抽象:抽象就是忽略与目标主题无关的部分,将共有的部分抽象成一个类。
抽象分为数据抽象和过程抽象。
2、String是基本类型么?Java中,数据的基本类型有:byte,char,short,int,long,double,float,Boolean 占用内存小的类型可以直接转化成占用内存大的类型;占用内存大的类型转化成占用内存小的类型需要强转;Boolean不参基本类型之间的转换。
String和数组都是应用数据类型。
3、int和Integer的区别?Int是基本数据类型,Integer是封装了对int类型的一些基本操作的包装类。
包装类实现了一些基本数据类型无法完成的功能。
比如说讲字符串转化成int类型。
Integer缺省值是null,int的缺省值是0;4、String和StringBuffer的区别?String和StringBuffer都可以存储和操作字符串。
但是String里面存储的字符串是不可变的,StringBuffer是可变的。
当String类型的连接字符串的时候,它是重新开辟了一块空间,只是将原来的只复制到这块新的空间中。
而StringBuffer不一样,当它的空间不够时,它会成倍的增长空间,这点有点像Vector,不需要舍弃当前空间另外开辟空间。
所以在对字符串进行连接操作时,StringBuffer的效率要高的多。
StringBuilder线程不安全5、运行时异常和一般异常的异同?运行时异常的都是继承字RuntimeException ,不需要手动的抛出护着捕捉。
程序员面试宝典2
▪ 这几乎是最简单的正则表达式了,它可以精确匹 配这样的字符串:由两个字符组成,前一个字符 是h,后一个是i。通常,处理正则表达式的工具会 提供一个忽略大小写的选项,如果选中了这个选
项,它可以匹配hi,HI,Hi,hI这四种情况中的任意
一种。
▪ 理解这个表达式的关键是理解2[0-4]\d|25[05]|[01]?\d\d?,这里我就不细说了,你自己应 该能分析得出来它的意义。
反义
▪ 有时需要查找不属于某个 能简单定义的字符类的字 符。比如想查找除了数字 以外,其它任意字符都行 的情况,这时需要用到反 义:
▪ 例子:\S+匹配不包含空 白符的字符串。
▪ \(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8}这 个表达式匹配3位区号的电话号码,其中区 号可以用小括号括起来,也可以不用,区号
与本地号间可以用连字号或空格间隔,也可
以没有间隔。你可以试试用分枝条件把这个 表达式扩展成也支持4位区号的。
▪ \d{5}-\d{4}|\d{5}这个表达式用于匹配美 国的邮政编码。美国邮编的规则是5位数字, 或者用连字号间隔的9位数字。之所以要给 出这个例子是因为它能说明一个问题:使
▪ 下面来看看更多的例子:
▪ \ba\w*\b匹配以字母a开头的单词——先是某个 单词开始处(\b),然后是字母a,然后是任意数量 的字母或数字(\w*),最后是单词结束处(\b)。
▪ 好吧,现在我们说说正则表达式里的单词是什么 意思吧:就是不少于一个的连续的\w。不错,这 与学习英文时要背的成千上万个同名的东西的确 关系不大 :)
▪ (\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。 要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配 1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英 文句号(这个整体也就是这个分组)重复3次,最后再加 上一个一到三位的数字(\d{1,3})。
程序员面试宝典
3.淡看智力测试 之所以要强调这一点 ,是和市面上过度强调外企智力测试有关。实 际上笔者参加过的微软等外企笔试,智力测试只占很小的比例,约 3%~
14
第 3 章 3 种考试
5%左右。而华为、神州数码等国内 IT 企业基本上没有智力测试,完全是 技术考试。所以奉劝大家不要把精力都投在所谓的外企智力测试上面, 还是应该以准备技术方面的笔试为主。
建议准备一个日程本 ,记录每一次宣讲会、笔试和面试的时间, 这 样一旦公司打电话来预约面试,可以马上查找日程本上的空闲时间 ,不 至于发生时间上的冲突。每投一份简历,记录下公司的职位和要求 ,如 果一段时间以后(1 个月或更长)有面试机会,可以翻出来看看,有所准 备。根 据不同的公司 ,准备不同的简历, 千万不要一概而论,不同的公 司 care(在意)的东西不一样。每参加完一次笔试或面试,把题目回忆 一下,核对一下答案 ,不会做的题目更要好好弄懂 。同学们之间信息共 享,总有人有你没有的信息。如果投了很多份简历,一点儿回音都没有, 你得好好看看简历是否有问题,增加一些吸引 HR 眼球的东西。
(续表)
笔 试 内 容 C++,Linux,UNIX C++,网络 C++或 Java Java,数据库 C++ C++ C++或 Java 或 C# C++,数据结构,智力测试 C++或 Java,数据结构,数据库(SQL) C++ C++,设计模式 C++,C#,智力测验
根据上表,对各大 IT 公司的笔试题目和所考的内容,我们可以窥见 一斑,并得出以下几个结论。
1.语言的偏向性
程序员面试笔试宝典.doc
程序员面试笔试宝典程序员面试笔试宝典篇11.extern的作用自己理解:应该需要区分extern在C语言中和C++语言中的作用,C语言中extern声明的函数和变量可以被该文件外部模块引用,C++语言中除了该作用还可以声明extern C 声明一段代码编译连接的方法为C语言的方法。
参考:其实extern的百度词条解释的很清楚,具体的也是跟我上面自己理解差别不是很大。
(a) extern是C/C++语言中声明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量在本模块或其他模块中使用(通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。
)(b) 被extern C 修饰的变量和函数是按照C语言的方式编译和链接的。
(C语言不支持函数重载,所以函数的C++和C的编译方式不同,这一句的作用就是实现C++和C及其他语言混合编程)2.strstr()函数的作用strstr()函数的原型一般为extern char * strstr(const char *src , const char *dest) ,其作用就是寻找目标字符串在源字符串中第一次出现的位置。
3.windows线程优先级问题( 进程和线程的区别和联系)我觉得这个概念可能面试、笔试的时候不是很适合,毕竟平台相关,大多数公司可能更多的倾向于linux开发,这个问题更换为进程和线程的区别更好,这个是笔试,面试常见的知识考查。
(a) 通常一个进程可以包含若干个线程,它们可以利用进程所拥有的资源。
进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
线程自己基本不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),线程可与同属于一个进程的其他线程共享进程所拥有的全部资源。
线程和进程区别归纳:地址空间和其他资源:进程间互相独立,同一个进程的各线程共享。
程序员人事面试100题
程序员人事面试100题1.问题:请简单介绍一下你自己。
答案:我是[姓名],毕业于[学校名]的[专业名]。
我擅长[技术领域],有[具体年数]年的开发经验。
我对编程充满热情,喜欢挑战自己,不断学习新技术。
2.问题:你的职业规划是什么?答案:我希望在接下来的几年里,能够深入[技术领域],成为该领域的专家。
同时,我也希望能够带领团队完成更多有挑战性的项目。
技术能力3.问题:你最擅长的编程语言是什么?为什么?答案:我最擅长的是Python,因为它的语法简洁易懂,适合快速开发,而且有丰富的库支持。
4.问题:你如何解决遇到的技术难题?答案:当我遇到技术难题时,我会首先尝试自己解决,比如查阅文档、上网搜索等。
如果自己解决不了,我会向同事或社区求助。
团队协作与沟通能力5.问题:你如何与团队成员合作?答案:我认为团队合作非常重要。
我会积极参与团队讨论,分享我的想法,同时也尊重他人的意见。
在合作过程中,我会尽量保持沟通顺畅,及时解决问题。
6.问题:你如何处理与团队成员的冲突?答案:当与团队成员发生冲突时,我会保持冷静,听取对方的观点。
如果是我的问题,我会承认并改正;如果是对方的问题,我会尝试以理服人。
如果双方无法达成一致,我会寻求上级或第三方的帮助。
问题解决与创新能力7.问题:你最近解决的一个技术问题是什么?答案:最近我解决了一个关于数据库性能的问题。
通过优化查询语句和索引,我成功提高了查询速度,减少了系统响应时间。
8.问题:你如何提高自己的创新能力?答案:我认为创新源于不断学习和实践。
我会关注新技术和新趋势,尝试将它们应用到实际工作中。
同时,我也会参加一些技术交流和分享活动,与同行交流思想,激发创新灵感。
9.问题:你如何进行自我提升?答案:我每年都会制定一个学习计划,列出需要掌握的新技术和知识领域。
通过参加在线课程、阅读技术书籍、观看教程视频等方式,不断提升自己的技能水平。
10.问题:你如何平衡工作与生活?答案:为了保持工作与生活的平衡,我会合理安排工作时间,避免加班。
程序员面试宝典
程序员面试宝典指针基本问题:面试例题1:指针和引用的区别?答案:(1)非空区别。
在任何情况下都不能使用指向空值的引用。
一个应用必须总是指向某些对象。
因此如果你使用一个变量并让他指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你库赋空值给该变量。
相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。
不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针要高。
(2)合法性区别。
在使用引用之前不需要测试它的合法性。
相反,指针则应该总是呗测试,防止共为空。
(3)可修改区别。
指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。
但是引用则总是指向在初始化时被指定的对象。
以后不能改变。
但是指定的对象其内容可以改变。
(4)应用区别。
总的来说,在以下情况下你应该使用指针:一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。
如果总是指向一个对象并且一旦指向一个对象后就不会改变指针,那么你应该使用引用。
面试例题2:Please check out which of the following statements are wrong?(看下面的程序哪里有错?)#includeusing namespace std;int main(){int iv; //1int iv2=1024; //2int iv3=999; //3int &reiv; //4int &reiv2=iv; //5int &reiv3=iv; //6int *pi; //7*pi=5 //8pi=&iv3; //9const double di; //10const double maxWage=10.0;//11const double minWage=0.5;const double *pc=&maxWage;//12cout<<pi;return 0;}答案:1正确,很正常的声明了一个变量。
