您的位置:首页 > 理论基础

由几道面试题谈到的计算机技术闲话

2009-07-02 19:06 190 查看
[转]

下面是我们今天在网上闲聊的一些 由几道面试题谈到的计算机技术闲话,文中的名字不是真名,请勿对号入座。

zp. 2009-07-02 12:11:51

1、 RadioButton 如何构成一组的形式?

2、 为使界面布局可以随窗体大小调整而调整,控件如何定位?

3、 窗体间传值有哪几种方式?

4、 窗体的Load事件与Page的Load事件有什么区别?

5、 请简单写一个使用进程条的例子,要求:在耗时大的处理中使用进度条,注意界面的刷新.

zp. 2009-07-02 12:12:01

看看我出的winform试题,咋样,呵呵

zp. 2009-07-02 12:37:56

看看还有什么建议没,再帮出几道?呵呵

dash 2009-07-02 13:03:38

给一个Doc格式的吧

dash 2009-07-02 13:04:31

有点难啊,如果不上机,我考不及格

M. 2009-07-02 13:04:47



dash 2009-07-02 13:05:49

所以我觉得重要的是方法 ,用怎么样的方法去解决问题 。比如第一题,我找找控件的属性,就OK了。

M. 2009-07-02 13:08:59

是不是老掉线

dash 2009-07-02 13:09:12

没有啊

M. 2009-07-02 13:10:00

我这老掉,慢死了

dash 2009-07-02 13:10:19

把无线网禁用

M. 2009-07-02 13:10:43

已经禁用了

zp. 2009-07-02 13:29:25

大师有什么建议这样的题,出两道,呵呵

dash 2009-07-02 13:34:35

别人考我的:怎么把数据库的字段名附加在不同的 WinForm控件上面?比如Lable,CheckBox.这样做有啥好处?

dash 2009-07-02 13:35:35

怎么取得窗体上面的所有TextBox控件的ID?这些TextBox控件可能在不同的容器控件里面。

zp. 2009-07-02 13:37:21



zp. 2009-07-02 13:37:24

有点难啊,如果不上机,我考不及格

dash 2009-07-02 13:38:55

第一道题,不用上机,写在控件的tag属性就OK,第2道题,就是遍历控件而已,不超过 10行代码,完全可以手写。

dash 2009-07-02 13:48:37

List<string> IDList=new List<string>();

void FindMyCtr(Control ctr)

{

if(ctr.HasControls())

{

foreach(Control ctr1 in ctr.Controls)

FindMyCtr(ctr1);

}

else

{

if (ctr is TextBox)

IDList.Add(ctr.Name);

}

}

zp. 2009-07-02 13:49:40

呵呵,我觉得你的题比我的难的多

dash 2009-07-02 14:03:48

不难,很基础啊,没有讲具体控件的应用呢

dash 2009-07-02 14:05:09

你要是出一道怎么设置 控件的背景属性,我手写还真不会。

dash 2009-07-02 14:05:48

我的题目主要考的是方法 ,解决问题的方法和思路

zp. 2009-07-02 14:06:44

好,我把题都加上,都发给杜胜

dash 2009-07-02 14:19:33

List<string> IDList=new List<string>();

void FindMyCtr(ControlCollection ctrs)

{

foreach(Control ctr in ctrs)

{

if (ctr is TextBox)

IDList.Add(ctr.Name);

if(ctr.HasControls())

FindMyCtr(ctr.Controls);

}

}

void Form1_Load()

{

FindMyCtr(this.Controls);

}

dash 2009-07-02 14:19:54

刚才手写的,正确答案是这个

zp. 2009-07-02 14:26:09

哈,你还自己验证了一下?

dash 2009-07-02 14:28:07

没有验证,记得以前写过 类似的,From 不是Control,所以有点特殊 ,所以只能传Form.Controls,不能直接传 this

dash 2009-07-02 14:30:03

下次我要是考人,让他上机写JS代码,会写JS,基本上也会写C#了 。有IDE大家都懒了,不想去思考

zp. 2009-07-02 14:30:52



zp. 2009-07-02 14:31:07

你别考我,考我该交白卷了。。。。

drj. 2009-07-02 14:31:58

我就会history.go(-1)

drj. 2009-07-02 14:32:07



zp. 2009-07-02 14:32:35

那就挺牛B的了,我就会alert("Hello World!");

M. 2009-07-02 14:32:55

你们都挺牛逼的

M. 2009-07-02 14:33:03

我都不会

zp. 2009-07-02 14:33:31

不过说实话,让我手动自己写form表单,我还真就不会写,呵呵

dash 2009-07-02 14:35:35

其实,明白Form的工作原来就行了,考试没有必要考具体控件的使用 。具体控件学学,最多1天就会了。

M. 2009-07-02 14:36:12

考zp.那个dx

M. 2009-07-02 14:36:21

1天可会不了

dash 2009-07-02 14:36:23

也许你靠我具体某一个控件怎么样,我就挂了呢,但你能够说我不会做WinForm程序?

dash 2009-07-02 14:36:54

考基本的,呵呵,其它慢慢学

zp. 2009-07-02 14:37:12

说一千到一万,说白了就一句话

zp. 2009-07-02 14:37:17

别看广告,看聊效

dash 2009-07-02 14:37:59

考大家一个问题,单击一个按钮,最先执行那个事件?

dash 2009-07-02 14:38:24

考大家一个问题,单击一个按钮,最先执行那个事件?

drj. 2009-07-02 14:38:33

pageload吧

drj. 2009-07-02 14:38:42

web的

dash 2009-07-02 14:38:49

WinForm 的

M. 2009-07-02 14:39:02

太高深了

M. 2009-07-02 14:39:03

哈哈

drj. 2009-07-02 14:39:06



zp. 2009-07-02 14:39:27

这题太难

zp. 2009-07-02 14:39:50

protected override void WndProc(ref System.Windows.Forms.Message e)

zp. 2009-07-02 14:39:53

这个?

dash 2009-07-02 14:40:18

WndProc ,强悍

dash 2009-07-02 14:41:35

WebForm 的按钮会首先执行服务器端的Page_Load 事件,但是 WinFrom 却不会先执行Form_Load 事件

dash 2009-07-02 14:42:23

这是WebForm和WinForm的重大区别

zp. 2009-07-02 14:42:24

Form_Load 只会执行一次

M. 2009-07-02 14:42:44

但是 WinFrom 却不会先执行Form_Load 事件

是根本就不会执行Form_Load 事件

zp. 2009-07-02 14:42:47

4、 窗体的Load事件与Page(Web)的Load事件有什么区别?

zp. 2009-07-02 14:42:56

我就想问这个,呵呵

dash 2009-07-02 14:43:18

呵呵,这个题目很有深度啊

zhouyanlong(周燕龙) 2009-07-02 14:44:01

大师詊细讲讲

zp. 2009-07-02 14:44:13

深度倒不知道,不过根据我们的经验,这块一般新人容易搞错,呵呵

dash 2009-07-02 14:46:13

Web是基于HTTP协议的,HTTP协议是无状态的,所以每次请求在服务器端都会先创建一个Web窗体,加载Web窗体,也就是执行Page_Load事件,然后再执行服务器按钮事件。

WinForm却完全不同,它的窗体控件是有状态的,其生命周期从窗体控件初始化到最后销毁。所以,WinForm窗体只需要加载一次 Load事件。

zp. 2009-07-02 14:46:54

。。。这就是深度。。。。

zp. 2009-07-02 14:47:02

我只知道表象,呵呵

drj. 2009-07-02 14:47:06



dash 2009-07-02 14:47:28

而WinForm控件的事件,内部是基于Windows消息机制

drj. 2009-07-02 14:47:29

让大师出几道有深度的题吧

dash 2009-07-02 14:48:03

Windows消息机制是基于消息队列,这跟委托不同。

dash 2009-07-02 14:49:04

zp.再出一道题:按钮事件是靠委托实现的吗?

zp. 2009-07-02 14:50:37

是吧

dash 2009-07-02 14:51:03

委托的内部机制是函数指针,这跟windows消息不是一回事。

zp. 2009-07-02 14:55:23

哦!

dash 2009-07-02 14:56:55

[STAThread]

static void Main(string [] args)

{

}



static void Main(string [] args)

{

}

有啥不同?下面的方式用在那种程序中?

zp. 2009-07-02 14:58:05

[STAThread]这块不同

dash 2009-07-02 14:59:48

哈哈,这不是考视力啊

zp. 2009-07-02 14:59:50

不知道干什么用的,好像就是单线程

zp. 2009-07-02 15:00:08

有这个声明就是单线程的应用程序吧

dash 2009-07-02 15:00:38

那为啥在WindForm里面都这样写呢?

dash 2009-07-02 15:01:14

而在控制台程序里面往往不比加这个特性?

zp. 2009-07-02 15:01:38

。。。。深度。。。。

zp. 2009-07-02 15:01:44

大师讲讲吧

dash 2009-07-02 15:03:03

[STAThread] 是为程序里面可能调用COM组件而使用的,比如如果我们的程序调用了IEBrowser控件,没有写这个特性,程序一运行就会报错。

dash 2009-07-02 15:04:37

COM 线程模型可设置为单线程单元或多线程单元,一般来说,很多支持COM开发的语言开发的COM组件都只支持单线程单元,C++程序必须特殊处理才可以让COM组件支持多线程单元。

dash 2009-07-02 15:06:18

使用 [STAThread] 特性,就可以保证程序在使用COM组件的时候,使用单线程单元,也就是COM组件与WinForm主程序使用同一个线程,从而避免COM调用出现问题。

zp. 2009-07-02 15:07:43

这跟打开几个form程序有关吗?

dash 2009-07-02 15:09:21

无关

dash 2009-07-02 15:09:34

线程在进程里面

zp. 2009-07-02 15:10:11

那一个程序使用多个IEBrowser控件可以吗?

dash 2009-07-02 15:11:13

可以啊

dash 2009-07-02 15:11:36

每一个 IEBrowser 都是一个实例对象

dash 2009-07-02 15:11:54

线程跟对象的数量没有必然关系

zp. 2009-07-02 15:12:24

那就是说在线程中不能访问IEBrowser控件了

dash 2009-07-02 15:12:52

你可以认为线程就是进程内部的资源,它代表CPU时间片和内存地址。

dash 2009-07-02 15:13:08

可以,但要特殊处理。

dash 2009-07-02 15:13:39

要“封送消息”给IEBrowser

zp. 2009-07-02 15:13:53

Control.CheckForIllegalCrossThreadCalls = false;

zp. 2009-07-02 15:13:55

这个?

zp. 2009-07-02 15:14:15

我看你的注释是解决线程中访问控件的问题

dash 2009-07-02 15:15:40

这个不是我写的啊

dash 2009-07-02 15:15:53

还是抄你们的

zp. 2009-07-02 15:16:03



dash 2009-07-02 15:18:24

在来一道前沿的题:双核和多核处理器对编程语言与编程方式有啥影响?微软为啥要推出F#?

M. 2009-07-02 15:19:36

为了挣钱

dash 2009-07-02 15:20:06

哈哈,商业社会任何事情都是为了挣钱,这个没错。

zp. 2009-07-02 15:20:20

微软要推出F#,是为了双核和多核处理器对编程语言与编程方式的影响

zp. 2009-07-02 15:20:22

哈哈

dash 2009-07-02 15:20:48

哈哈,有道理。

dash 2009-07-02 15:22:28

双核和多核处理器的推出使真正的多线程运用成为了可能,现在的多线程都是假的,没有从实质上提高程序的计算效率。

zp. 2009-07-02 15:23:21

那双核与多核与真的双CPU与多CPU有什么区别呢?

dash 2009-07-02 15:23:25

在单核处理器上运行的多线程程序,都是假的多线程,因为它们必须等待,排队

dash 2009-07-02 15:25:16

双核指的是在一块CPU芯片里面集成2个计算核心

dash 2009-07-02 15:26:03

从成本上来说,这样做比使用2个CPU更合算。

dash 2009-07-02 15:26:45

但是公用一套高速缓存,效率有所影响

zp. 2009-07-02 15:26:48

那他们就真的可以完全相同吗?(除了物理结构上)

zp. 2009-07-02 15:27:31

呵呵,看来两个人和有两颗心的一个人还是有很大不同的,哈哈

dash 2009-07-02 15:27:43

那当然

dash 2009-07-02 15:28:30

硬件问题不说了,回归正题,对编程语言和编程方式有啥影响?

zp. 2009-07-02 15:30:26

就是大量使用线程?

dash 2009-07-02 15:30:56

可是,现在我们也大量使用线程啊?

zp. 2009-07-02 15:31:44

那就再大量一点吗?呵呵

dash 2009-07-02 15:34:16

一个线程使用一个CPU时间片,但一个线程还不是一个最基本的编程单元,对多核的利用效率不高。

dash 2009-07-02 15:34:53

如果不同的函数同时在不同的CPU上执行,这样效率是不是更高点?

dash 2009-07-02 15:36:43

现在的编程语言,必须依靠程序主动申请线程,才可以开启多线程。

dash 2009-07-02 15:39:06

而如果有另外一种编程语言,天然的,可以将自己的计算单元同时放到不同的CPU核心上面去,实现“并行计算”,那么这种语言开发的程序就具有相当的优势。

dash 2009-07-02 15:41:50

答案就是--“函数式语言”!

zp. 2009-07-02 15:45:34

WCF?

dash 2009-07-02 15:46:43

现在的计算机都是基于“冯-诺依曼”计算机体系结构,采用线性计算方式,而多核的推出,可能推动计算及朝“并行计算”体系迁移。

dash 2009-07-02 15:47:34

微软对此非常有远见,所以在两年前就推出了F#,函数式语言。

dash 2009-07-02 15:48:06

我们现在的.NET,是微软10年推出的战略。

zp. 2009-07-02 15:49:11

F#是一种什么样的语言呢?语法是什么样的?

dash 2009-07-02 15:49:51

呵呵,我还没有怎么研究过,大家还是百度一下。

dash 2009-07-02 15:50:32

不过js可以写出很好的函数式风格的代码。

zp. 2009-07-02 15:51:01

大家换语言吧,都换那样可以适应多核的语言吧

dash 2009-07-02 15:54:59

等我们都配了多核CPU再说吧,呵呵

zp. 2009-07-02 15:55:36

现在配的机器基本都是双核的了,现在想找单核的新的都找不到了,找到的全是二手的

dash 2009-07-02 15:56:08

另外现在的操作系统对多核的支持还不是很好,我们真正用上多核开发语言,为时尚早。

zp. 2009-07-02 15:57:57

可是硬件已经普及了,软件也应该不远了吧

dash 2009-07-02 16:08:57

是啊,一般都是软件落后于硬件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: