一、 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中,该过程不能损害数据。(上机题)
答:
(不理解)