delphi 面试题


一、  Delphi基础

1、Delphi 内置类型 string 和 WideString 的区别。

答:
      string 即 UnicodeString,8 位(ANSI )字符
      WideString 类型是动态分配的、由 16 位 Unicode 字符所构成的字符串

2、简要描述Delphi代码单元中,以下关键字的作用。

答:   
   interface:接口声明部分,接口部分声明常量、类型、变量、过程和函数。
   implementation:定义接口的实现或者类过程和函数的实现部分,实现部分定义接口部分声明的过程和函数。
   initialization:定义单元初始化部分,初始化部分所包含的命令,将在程序启动时按它们出现的顺序开始执行。
   finalization  :定义单元结束化部分,结束化部分所包含的命令,将在主程序结束时被执行。使用结束化部分来释放在初始化部分分配的资源

3、将一周七天声明成枚举类型。

答:
     type dayofweek = (sun,mon,tues,wens,thurs,fri,sat);

4、现有Integer 变量 A、B,在不声明其它变量的情况下,将它们的值交换。
   如,A := 1; B := 2; 交换之后 A = 2; B = 1。

答:
    1)利用加法 
    var a, b : integer;
    begin
        a = a + b;
        b = a - b;
        a = a - b;
    end;

    2)利用异或
    var a, b : integer;
    begin
        a = a ^ b;
        b = b ^ a;
        a = a ^ b;
    end;
    
5、现有以下类:

type
  TBase = class
    function GetValue: Integer; virtual;
  end;
  TChild1 = class(TBase)
    function GetValue: Integer; override;
  end;
  TChild2 = class(TBase)
    function GetValue: Integer; override;
  end;
function TBase.GetValue: Integer;
begin
  Result := 1;
end;
function TChild2.GetValue: Integer;
begin
  Result := 2;
  Result := inherited GetValue;
end;
function TChild1.GetValue: Integer;
begin
  Result := inherited GetValue;
  Result := 3;
end;
用以下方法创建对象o1, o2: TBase:
  o1 := TChild1.Create;
  o2 := TChild2.Create;
那么调用以下方法的返回值是
  o1.GetValue返回:3
  o2.GetValue返回:1
(使用的是delphi 动态绑定机制)

6、如何模块内部获得自身路径?
  Exe程序:
  DLL程序:

答:
    exe:
      application.Exename
      ExpandFileName
    Dll:
1)方法一:
Function GetDllPath(sDllName:string):string;
var
  ModuleFileName:array[0..255] of char; 
begin
  //{取得dll的实际位置}
  GetModuleFileName(GetModuleHandle(sDllName), @ModuleFileName[0], SizeOf(ModuleFileName));
  Result := ModuleFileName;
end;
2)方法二:
Function GetDllPath:string;
var
  ModuleName:string;
begin
  SetLength(ModuleName, 255);
    //取得Dll自身路径
   GetModuleFileName(HInstance, PChar(ModuleName), Length(ModuleName));
   Result := PChar(ModuleName);
end;
7、描述一下TEidt和TListView的类派生顺序,并说明它们的来源区别。

答:

8、用pascal 写一个双向链表。

答:
    用record作为节点类型
    type
       Node = record
        Data : string;
        Pre   : ^Node;
        Next : ^Node;
       end;
      
       TDoubleLinkList = class
        public
            procedure Create;
            procedure Destroy;
            {...Other Operation}
        protected
        {  to do }
        private
        { to do}
        end;

9、设计模式中的单件模式,在Delphi中可以用什么方式创建。

答:
  可以有两种方法:
  1)可以在类中用声明一个自身类型的全局对象用于存储单件对象的引用,构造函数create通过检查全局变量的引用来避免创建多余对象。
  2)可以用delphi自身的对象构造机制(参考TObject)实现,即覆盖TObject的NewInstance,FreeInstance,和实现RefCount

10、Delphi快捷键

答:
  快速搜索添加控件:ctrl + alt + p
  打开工程属性对话框: ctrl+shift+f11
  切换编辑中的代码窗体:f12
  删除一行代码:ctrl + y

二、  Win32基础

1、写出Delphi声明Win32类型的库及其对应的Win32 Dll库(至少3个)。

答:
    windows - kernel32.dll
   graphics - gdi32.dll
   winsock - wsock.dll
2、如何在Delphi中完成多线程的内存保护。
答:  
  (不理解)

三、  数据库

1、现有MS SQL Server 数据库 UserLibs 列举出所有用户表及其字段。
答:
   use UserLibs
   select a . name as tbname , b . [name] as colname
    from sysobjects a
    left join syscolumns b
       on a . id = b . id
    where (1 = 1)
    and a . type in( N'U')

2、现有数据库A,数据库B和A相对应,在数据A中表增加时,或字段增加时,将结构同步到数据库B中,该过程不能损害数据。(上机题)

答:
    (不理解)

--------------------------------------

有几题还不会,待有时间研究研究。 

转载于:https://my.oschina.net/suda/blog/137914

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值