Delphi笔试汇总

Delphi基础

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

参考:

【Ansistring】为Delphi的缺省字符串类型,是单字节字符串;

如:str1:string;  //编译器认为str1的类型是Ansistring类型

【wideString】由wideChar字符组成,功能类似于AnsiString,是双字节字符串;

另:

AnsiChar:标准的1字节ANSI字符;

WideChar:2字节的Unicode字符;

Char:等同于AnsiChar;


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

interface:

//Interface标识了单元中的接口部分, 单元的基本结构为:
//Unit...Interface...implementation...end.
//函数, 过程等的声明必须写在Interface关键字后.
//如果在Interface后引用对象, 则对象是没有实例的, 使用时必须被实例化.
Interface
 uses frmAbout;
var
 FAbout: TFormAbout;
begin
 FAbout := TFormAbout.Create(Self);
 FAbout.Show;
end;

//一个完整的单元必须拥有Interface部分.

//Interface也可以用作接口的声明.
type
 IMalloc = interface(IInterface)
 ['{00000002-0000-0000-C000-000000000046}']
  function Alloc(Size: Integer): Pointer; stdcall;
  function Realloc(P: Pointer; Size: Integer): Pointer; stdcall;
  procedure Free(P: Pointer); stdcall;
  function GetSize(P: Pointer): Integer; stdcall;
  function DidAlloc(P: Pointer): Integer; stdcall;
  procedure HeapMinimize; stdcall;
 end;

implementation:

//Implementation标识了单元中的实现部分, 单元的基本结构为:
//Unit...Interface...implementation...end.
//函数体, 过程体等必须写在implementation关键字后.
//如果在implementation后引用对象, 则对象是非公开的, 仅能供单元自身使用.
implementation
  uses frmAbout;
begin
  FormAbout.Show;
end;

//一个完整的单元必须拥有implementation部分.

initialization:

//initialization关键字标识了单元被载入时所要调用的方法, 
//通常是初始化一些不能自动初始化的对象, 也可以不用.
//initialization最常用的情况是对OLE对象做初始化.
initialization
  ActiveX.OleInitialize(nil);
finalization
  ActiveX.OleUninitialize;

finalization:

//finalization关键字标识了单元被释放时所要调用的方法, 
//通常是释放掉单元中不能自动释放的对象, 也可以不用.
//finalization最常用的情况是对OLE对象做反初始化.
initialization
  ActiveX.OleInitialize(nil);
finalization
  ActiveX.OleUninitialize;

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

参考:

type
    WeekDay = (MOD, TUE, WED, THU, FRI, SAT, SUN);

4. 现有Integer 变量 A、B,在不声明其它变量的情况下,将它们的值交换。

如,A := 1; B := 2; 交换之后 A = 2; B = 1。

A := POWER(A,B);

B := POWER(A,B);

A := POWER(B,A);

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


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

DLL程序:GetModuleFileName


7. 描述一下TEidt和TListView的类派生顺序,并说明它们的来源区别。

TObject-TPersistent-TComponent-TControl-TWinControl-TCustomEdit-TEdit

TObject-TPersistent-TComponent-TControl-TWinControl-TCustomListControl-TCustomMultiSelectListControl-TCustomListView-TListView

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

type
  PMyRec = ^MyRec;
  MyRec = record
    Name: string[8];
    Age : Word;
    Prev,Next: PMyRec; {上一个与下一个的结构指针}
  end;

var
  CurrentNode: PMyRec;

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

静态类

10. Delphi快捷键
快速搜索添加控件:
打开工程属性对话框:
切换编辑中的代码窗体:
删除一行代码:
11. rtl70.bpl是什么?有什么用?
12. delphi的Package相对dll有什么优点?
13. 以下的记录(结构)变量在内存占多少字节?
   type
     a = packed record
      v1: Byte;
      v2: Word;
      v3: string[16];
      v4: Double;
      v5: string;
      v6: TForm;
     end;
14. 以下的写法是否正确?
   type
     a = object
       v1: Integer;
     end;
     b = object(a)
       v2: Integer;
     end;
15. 有一个文件有多行,每行的内容都是“姓名,手机号,固定电话”,现在要将这个文件内容按手机号排序,请写出编程思路。
16. 写出你常用的DELPHI第三方控件(包)名及其功能。
17. 写出Win95,Win98,Win2000,WinXP的操作系统版本号及初始的IE版本号。
18. 如果一个元件希望放到IDE的元件面板上,它必须从________类派生,
如果一个元件能作为其它元件的容器,它必须从_____________类派生,
如果一个元件在运行时可见,它必须从___________________类派生
(A)TGraphicControl (B)TWinControl (C)TComponent (D)TPersistent (E)TControl
19. 写出TEdit、TLabel、TTimer的主要继承路径.
20. 1) 为防止界面窗体“僵死”,可调用如下代码, 解释为什么?
A、Application.DoEvent
B、Application.DoEvents
C、Application.Idle
D、Application.ProcessMessages
21. 有如下类定义,请问类THouse的InstanceSize是_______
TPoint = packed record
X: Longint;
Y: Longint;
end;
THouse = class
private
FOwner: string;
FPosition: TPoint;
FBounds: array[0..2] of Integer;
FLessees: TStrings;
public
procedure Paint;
property Owner: string read FOwner;
end;
A、24 B、28 C、32 D、40
22. 常用的控件ListBox、ComboBox等都有BeginUpdate和 EndUpdate方法,请问他们的主要作用是什么?
23. 解释Delphi中“事件”的实现原理,如果你要为控件扩展一个自定义事件,你该怎么做?
24. 为什么在TList中Add操作要比Insert操作快?
25. 某次调试中发现某树形控件响应很迟缓,经调试发现是如下语句,TreeView.Items.Clear执行缓慢,请分析可能的原因是什么?
26. 给定一个文本文件(英文文章),统计其中各单词的频次。
27. 请口述数据库架构模式和delphi程序设计模式.
28. 请口述ERP的中心思想和管理模式.
29. 编程查找指定目录下所有EXE文件,并将其全路径存入Result.txt中,要求用递归。
30. 采用SOCKET(可用SOCKET   API或delphi   Socket控件)实现点对点传输大文件,要求不能掉包.
31. 用程序创建ACCESS数据库a.mdb,并创建表tb,对该表记录实现查询、添加、修改、删除。要求在程序中用SQL语句来实现。
32. 采用多线程技术统计出当前计算机上的文件总数。要求用Visio或Word画出程序流程图。
33. 将若干个DML(SELECE、UPDATE、INSERT、DELETE)作为一个整体看,要么全部生效,要么全部不生效。从一个连接开始,就开始了一个事务,直到遇到COMMIT或ROLLBACK语句,才标志一个事务的结束和一个新事务的开始。
评:
此题目主要考核答题者对事务管理的认识。事务管理对数据库应用程序而言是非常重要的,事务是实现并发控制,保证数据完整性和可恢复性的原子单位。对那些不 可分割的数据操作序列应组织成事务提交,这样才能使执行效果与应用设计一致,并避免多用户对同一数据集操作的冲突。该题基本回答出了事务的概念,说明答题 者编程时会考虑数据操作的完整性和并发性。
34. DLL调用:先用DECLARE声明某个动态链接库(DLL)中的函数,然后像普通函数那样使用。具体得实际操作。
35. 在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好,为什么?
各有好处,要根据需要而言。
存储过程
优点:相对而言,由于其在服务器端执行,只返回结果集,网络流量较低,速度会快一点,而且,更好的做到了界面与业务逻辑(存储过程)的分离,由于C/S模式在维护升级方面的特点,如果后期业务逻辑发生变化,只需要修改存储过程就可以了(前提是原存储过程接口定义的好),而不需要升级所有客户端。
缺点:在一些跨DBMS的系统中,需要将存储过程迁移到另外的DBMS(如从SQL   Server转到Sybase),这是需要一定的工作量的。而如果采用内嵌SQL,一般情况下是使用标准SQL,对许多流行的DBMS都是通用的(如果不使用该DBMS特有的系统函数的话),就不存在这个问题。
内嵌SQL
优点:编写容易,控制灵活。
缺点:上面存储过程中有描述。
36. 用数组实现栈,并且当栈空间满时,栈空间增加一倍。
37. 输入年月曰格式yyyymmdd,判断是否是周末。
38. 遍历一棵树,不能用递归
39. 读取一个XML文档,将其中的字段输入到数据库中
40. 编写一个程序读取计算机上的SQL Server数据内容
41. 编写一个程序,向指定号码的手机发送一条短信
42. 编写一个程序,读取指定文件夹内的所有文件
43. 编写一个程序,为本机获取一个二级域名
44. 编写一个程序,这个程序能够判断一个可执行文件是用什么语言编写的
45. 编写一个服务器,这个服务器能让互联网上的用户访问到,并且能够显示一个网页
46. 编写一个能够同时在windows和Linux下运行的记事本程序
47. 编写一个能够在局域网内相互发送文件的程序
48. 编写一个程序,输入生曰后输出从生曰到现在已经过了几天
49. 编写一个程序,该程序的窗体没有边框,但是可以通过按下键盘的方向键来移动
50. 用Delphi实现Java中的EJB操作
51. 编程一个过程,这个过程可以将任意的程序发送快捷方式到任意位置
52. 制作一个软件,它可以访问,添加,修改或删除Paradox数据内的数据,但是这个软件不允许写任何的代码 
53. 编写一个程序,这个程序能够启动记事本,并且等待它运行结束
54. 编写一个16进制数转为10进制数的函数,但是只允许写一行代码
55. 请罗列VCL类库中以TObject为根的对象系统(能够只类主干)
56. 请罗列VCL数据库方面的中心类
57. Delphi中override和overload的作用离别是什么?
58. Delphi中RTTI是什么?有什么作用?
59. 请您写出Object Pascal所支持的数据类型;b.请您写出Shl、Shr、Xor、Not 的数学表示法
60. 请您写出VCL结构层次(以TObject开始,最少五层)
61. 写出Delphi声明Win32类型的库及其对应的Win32 Dll库(至少3个)。
62. 如何在Delphi中完成多线程的内存保护。
63. 解释一下Windows的消息机制和经典Windows应用程序的运作流程
64. 在SQL中左连接时什么?它能告终的数据收获集的个性是什么?
65. 请问在Oracle和Mssql中如何只取select语句收获凑近的前100条?
Oracle:select top 100 * from tablename
Mssql:select * from tablename where rownum < 101


66. 现有数据库A,数据库B和A相对应,在数据A中表增加时,或字段增加时,将结构同步到数据库B中,该过程不能损害数据。
67. 写SQL语句
如果有一个部门人员表BaseInfo,字段为ID,PID,Name(姓名),PID表示上下级关系:
(1)分组查询:统计每个PID的记录数 ID 记录数
(2)请做一个查询,得到以下结果(按姓名排序)
ID 姓名 下属姓名
(3)在TSQL中使用事务需要用那些SQL关键字?


68. 用户开发程序时需要经常在窗体和编辑器窗口之间来回切换,可使用快捷键()
69. 某函数如下:
Function   check(n,k:Integer):Integer;
Var   m:Integer;
Begin
Repeat
m:=n   mod   10;
n:=n   div   10;
K:=k-1
Until   k=0;
Check:=m
End;
若调用语句y:=check(3725,3),运行后y值为:()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值