C#程序员面试(一)答案

程序|程序员

前提:状态栏面板sbpFilePath已经设定为自绘样式.当有如下代码段1被执行一次以后:

代码段1:
private void treeviewArchives_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if (e.Node.Text!= "" )
{
try
{this.richtexebox.LoadFile(Application.StartupPath+e.Node.Text);
statusMessages=e.Node.Text;
sbpFilePath.Text=statusMessages;//statusMessages表示字符串
}
catch
{MessageBox.Show("加载文件出错,无法显示!");
}
}
}

代码段2:
private void statusBar1_DrawItem(object sender, System.Windows.Forms.StatusBarDrawItemEventArgs sbdevent)
{// 绘制面板区域
sbdevent.Graphics.FillRectangle(Brushes.Green, sbdevent.Bounds);
//绘制面板上的文本
sbdevent.Graphics.DrawString(statusMessages,sbdevent.Font,Brushes.White,sbdevent.Bounds);
sbdevent.Graphics.Dispose();
}

考试题:

1、代码段2会不会被执行?
答案:会。

2、代码段2如果不会被执行,为什么?该如何修改?
答案:过。继续下一问题。

3、代码段2如果会得到执行,会不会被重复执行(即连续执行两次或更多次)?
答案:会。

4、代码段2如果被重复执行,该如何修改使之只运行一次就足够?
答案:代码段1可以修改为:
private void treeviewArchives_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if (e.Node.Text!= "" )
{
try
{
this.richtexebox.LoadFile(Application.StartupPath+e.Node.Text);
statusMessages=e.Node.Text;
//将以下这一句注释掉,同时加上强制绘制的方法
//sbpFilePath.Text=statusMessages;//statusMessages表示字符串
statusBar1.Invalidate();
}
catch
{ MessageBox.Show("加载文件出错,无法显示!");
}
}
}

5、代码段2中 sbdevent.Graphics.Dispose();//这个语句是否可有可无,为什么?
答案:为尽可能释放资源,只要编译与运行过程中不出错,应当加上。
(如现场有争议,留下名单,让他回去测试,第二天带测试报告再来)

6、假设运行以下语句
{sbpFilePath.Text=statusMessages;sbpFilePath.Text=statusMessages;}
问题同上述1-3项,请再次回答。
答案:如果不修改代码段1,此语句段在第一次运行
sbpFilePath.Text=statusMessages;
时,代码段2就被运行两次,此后,只要给sbpFilePath.Text的值不变,
即statusMessages的值不变,则代码段2不会继续运行。
即:
{sbpFilePath.Text=statusMessages;sbpFilePath.Text=statusMessages;}
等效于
sbpFilePath.Text=statusMessages;

7、您认为代码段1或者代码段2有没有错误?(如果您认为回答对了上面的问题,此问题可不必做答)
答案:语法没有错,但可以修改代码,减少重绘,节省资源。

8、有人认为C#开发出来的程序太慢,你怎么看待这个问题?你在编码过程中优先考虑以人为本、用户为上的思想吗?
请简述。
答案:一部分是实情,另外一部分在于很多人完全依赖自动垃圾回收,而没有考虑弱引用、Dispose()、Close()、
GC、等等,甚至有很多人忌讳try-catch-finally,导致夸大问题,C#开发的实质问题在于目前的跨平台方面。
公司研发部认为:如果JAVA开发人员认为C#开发出来的程序太慢,肯定不是一个合格的JAVA程序员,他写的代码肯定
性能低,耗费资源。如果经2次提醒后,他还坚持此观点,肯定是一个浮躁的人,忌用。
招聘过程中注意:不要试图引导应聘者比较语言的差异,不得发表带偏见性的语言观点,注意应聘者的情绪。

9、普遍认为以下几本书都是经典,如果你看过,请从里面挑任意一本书,指出该书中5处以上严重影响程序速度的代码段
或错误代码。(希望通过此题强调我公司的原则:程序员水平如何,是看他写的代码以及代码性能,不是看他学了多少,
也不看他的工龄)
答案:
资料上没有提供。

我信守承诺,暂时没有在其它网站公布更多题目。
而且绝对没有公布除此文以外的任何技术问题与答案。
一旦第3轮招聘结果公布,我将第一时间全部传到网上,
大家留意。

很多人都可以指教我,我会很珍惜有人指教的机会......

时间: 2024-09-21 21:40:26

C#程序员面试(一)答案的相关文章

php程序员面试分享

面试总结 今天去了北京著名IT公司进行PHP程序员的面试.这是人生第一次么,怎么不紧张?我是不是有病.不是,这叫自信呵. 首先是做一些笔试题. 1.mysql数据库索引使用的数据结构?这样做的好处是? 可以参考这篇博文:http://blog.csdn.net/ant_ren/article/details/2932068 2.有两个字符串a和b,判断b字符串是否出现在a中.不考虑大小写.. 我的答案是:使用stripos()这个函数来解决的. if(stripos($a,$b)>-1) ech

《Java程序员面试秘笈》—— 面试题11 使用jar命令

面试题11 使用jar命令 Java程序员面试秘笈 请使用jar命令,将test文件夹压缩成.jar文件,并简述其压缩包的结构. 考点:对于Java程序员来说,更多情况下是使用的集成Java开发工具,例如JBuilder.Eclipse等,而对于最基本的Java编译和常见的命令行工具往往都不熟悉.这个面试题主要考察求职者对于Java命令行基本工具的使用,从而了解求职者对Java编程的熟悉程度. 出现频率: [面试题解析]熟练的Java开发者应该掌握常用的Java命令行工具.求职者应该熟练掌握ja

《C和C++程序员面试秘笈》——1.8 C++与C有什么不同

1.8 C++与C有什么不同 C和C++程序员面试秘笈 考点: C和C++的联系与区别 出现频率: [答案] C是一个结构化语言,它的重点在于算法和数据结构.对语言本身而言,C是C++的子集.C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理,得到输出.对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现过程控制. 因此,C与C++的最大区别在于,它们用于解决问题的思想方法不一样. C实现了C++中过程化控制及其他相

《Java程序员面试秘笈》—— 面试题12 如何执行mian()方法

面试题12 如何执行mian()方法 Java程序员面试秘笈 利用Java SDK中哪一条命令能够执行test的main()方法? (a)java test (b)javac test (c)java test.java (d)java test.class (e)java test.main 考点:考察求职者对java命令的熟悉程度. 出现频率: [面试题解析]求职者容易出现的错误是选择了(d).实际上,java命令后面只需要class文件的名称就可以,不用加入.class全名.如果使用jav

《C和C++程序员面试秘笈》——1.2 看代码写输出—C++域操作符

1.2 看代码写输出-C++域操作符 C和C++程序员面试秘笈考点: C++域操作符的使用 出现频率: 请指出下面这个程序在C和C++中的输出分别是什么. #include <stdio.h> int value = 0; void printvalue() { printf("value = %d\n", value); }; int main() { int value = 0; value = 1; printf("value = %d\n", v

《Java程序员面试秘笈》—— 面试题10 类继承的建模表示方法

面试题10 类继承的建模表示方法 Java程序员面试秘笈根据图1.4的UML表示,选择一个正确的描述. (a)Box类是MyBox类的子类. (b)Box类是MyBox类的父类. (c)Box类和MyBox类是聚合关系. (d)Box类和MyBox类是一对多关系. 考点:该面试题貌似简单,在实际的面试中回答正确的却并不是很多,其实只是考察求职者对类的继承的建模表示方法的掌握程度. 出现频率: [面试题解析]Java中有两种机制来保证根据现有的类来构造新的类,那就是继承和聚合.例如,有一个盒子的类

《C和C++程序员面试秘笈》——1.1 看代码写输出—一般赋值语句

1.1 看代码写输出-一般赋值语句 C和C++程序员面试秘笈考点: 一般赋值语句的概念和方法 出现频率: #include <stdio.h> int main(void) { int x = 3, y, z; x *= (y = z = 4); printf("x = %d\n", x); z = 2; x = (y = z); printf("x = %d\n", x); x = (y == z); printf("x = %d\n&quo

《C和C++程序员面试秘笈》——1.6 看代码写结果—有符号变量与无符号变量的值的转换

1.6 看代码写结果-有符号变量与无符号变量的值的转换 C和C++程序员面试秘笈考点: 有符号变量与无符号变量的区别和联系 出现频率: #include <stdio.h> char getChar(int x, int y) { char c; unsigned int a = x; (a + y > 10)? (c = 1): (c = 2); return c; } int main(void) { char c1 = getChar(7, 4); char c2 = getCha

《C和C++程序员面试秘笈》——1.10 标准头文件的结构

1.10 标准头文件的结构 C和C++程序员面试秘笈为什么标准头文件都有类似以下的结构? 考点: 标准头文件中一些通用结构的理解 出现频率: #ifndef __INCvxWorksh #define __INCvxWorksh #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif #endif /* __INCvxWorksh */``` [解析] 显而易见,代码第1.2.10行的作用是防