首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一些值得思考的问题

Posted on 2008-09-04 16:53  停留的风  阅读(299)  评论(0编辑  收藏  举报

<1>goto语句是否应该丢掉

      优点:goto语句的存在的确是因为其无可比拟的灵活性,而且她同时也具有无可比拟的效率,虽然有方法可以避免她的出现,但是在许多情况下,其他的方法都无疑的增加甚至是极大的增加了系统的开销,最方便的是直接从多层嵌套中跳出来
      缺点:破坏程序的结构,进而失去可读性,维护起来相当困难。 

      经典的结论:
      1.任何规则都不能脱离前提条件    
      2.永远不要做规则的奴隶     
      3.创新必须打破规则   
      4.高手可以化腐朽为神奇     
      5.不建议初学者使用 

<2>多重继承,搞好了是混血儿,搞不好是杂种

      被丢掉的主要原因 C++不回避问题,它只是把问题留给使用者,从而给大家更多的自由,像ada,pascal这类定义严格语言,从语法上回避了问题,但并不是真正解决了问题.做很多事时就是束手束脚(当然,习惯了就好了)。多重继承本身并不复杂,对象布局也不混乱,语言中都有明确的定义,真正复杂的是使用了运行时多态(virtual)的多重继承(因为语言对于多态的实现没有明确的定义),关键是二义性的问题,在多继承自第三方提供的类时因为不了解其内部实现,所以可能由于二义性而产生未知的问题。

      多重继承可以由接口替代吗?多重继承和接口是两回事.接口完全可以用多重继承代替,但多重继承没有办法简单的用接口代替. 
      1:当我们声明一个只有纯虚函数的类时,就可以用它代替接口。任何类要实现一个接口,只要从它继承就可以了。任何用到该接口的地方,都可以用它的子类。  
      2:多重继承时,子类可以充分利用多个父类的功能,不但是方法,还有数据。当我们定义了一个类使用后,又从该类虚拟派生了几个子类,每个子类都在原基础上改写了一些行为或加了一些新的特性,最后我
们发现,我们要把这些子类的特性全部集中在一起的时候,用多重继承会很好的解决,用组合的方法很难实现  。
      3:接口基本是像外界提供的,不然就不叫接口了,任何放置了接口的类,要想实例化,就必须实现该接口,也就是每放置一个接口就必须写完这些接口的代码,无法重用以前的代码(接口在定义时是没有实现
代码的),达不到重用的目的。而多重继承就可以充分重用以前的代码,只要写少量的协调代码就可以。

      个人建议:还是注重模块化比较重要,尽管多重继承可以解决一些问题,但是这些问题我们可以通过继承类和接口,或者其它的办法实现,这样可能代码量比较大。在开发过程,并非最省代码的方法就是好方法,继承固然能够给我们的编程带来方便,但是一定要注意度,合理的应用的这些方法会使我们的编程更叫高效、快捷,但是如果不合理将会给系统带来很大的隐患。

<3>什么是强类型,什么是弱类型?哪种更好些?为什么?
      弱类型语言允许将一块内存看做多种类型。比如直接将整型变量与字符变量相加。C and C++ 是静态语言,也是弱类型语言;Perl and PHP 是动态语言,但也是弱类型语言。
      强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作。Java、C# 和 Python 等都是强类型语言。
      使用哪种语言还是要按需而定。编写简单小应用,使用弱类型语言可节省很多代码量,有更高的开发效率。而对于构建大型项目,使用强类型语言可能会比使用弱类型更加规范可靠。

<4>EXE和DLL有什么区别?
       EXE是可以单独运行的程序,DLL是不能单独运行,一般是由EXE程序来调用DLL的函数
       DLL一般是封装了一些共享的例程和资源,它通常是一个可以被其它应用程序调用的程序模块。一般扩展名为dll。它与EXE有些类似,但动态链接库不能被直接执行,只能被其它EXE或者动态链接库调用。在.NET中,可以通过创建类库的方式创建动态链接库。

<5>什么是GAC? 
       关于GAC本身,上面redcaff_l所引述的一段话正是MSDN中对GAC的定义。GAC全称是Global   Assembly   Cache,他的作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms 等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:\WINDOWS\Microsoft.NET\Framework \v1.0.3705下面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。

 <6>PID是什么?在做系统的故障排除时如何使用它?
       PID = Process Identifier, 是一个全局唯一的用来标识进程的整数。在多任务系统中,可用来诊断系统中发生错误的进程。

 <7>单个TCP/IP端口上能够侦听多少个进程?

       一个进程启动一个TCP/IP端口去抓取到进来的包,如果有另外一个进程想利用这个端口将提示“端口已经被占用”。