G
gdli
Unregistered / Unconfirmed
GUEST, unregistred user!
两个月前,开始招聘Delphi程序员,招聘前随手写了几道题,用来笔试。 到现在还没有招到人,很无奈,标准甚至降到只要能做第1、3、5题就录用的水平。结果竟然没有人能够将这3题都答对。很多人连string和WideString的区别都不知道。 近几年,Delphi的从业环境逐年下降,在网路上看到无数人在唱衰歌、转语言。想来原因有: 1、行业开发方向往网络、嵌入式、分布式发展;而Delphi被大家当成做数据库开发的工具(甚至之前宝兰都这么宣传)。 2、用Delphi的公司大都是做MIS的中小公司,产品附加值差,一味压低产品门槛和开发人员素质。 3、开发人员大多只会拖拖控件,碰到点小问题就到处找控件,看看大富翁、CSDN Delphi的问题,一个个白痴得不行。 4、关于Delphi的教材也是全篇一律的数据库开发,不亦乐乎地玩弄些数据读写的小技巧。 我想说的开发人员的问题。过来面试的人,从77年到88年的都有,年龄跨度上较有代表意义。多数人的简历上都写着精通这个、熟悉那个,却只能做上3、4题,还未能全对,有写上名字交来白卷的,更有2个80年前后的应聘人,看了会题目后直接走了。我觉得题目还是比较容易的,而是很多人的开发能力差,从来没有想过理解开发环境、操作系统提供的能力,提高算法设计能力。因此,给人的印象用Delphi的都是些水平低下的人,公司没法提高开发质量、产品质量,也就无法开出有竞争力的薪资,最后是整个Delphi生态链的质量下降。 说这些话,一来期望得到些共鸣;二是希望借此招聘,我对英才网上泛滥的简历几近绝望了。 我姓李,联系方式是:jzs_li@163.com,北京金钻石科技发展有限公司。在盒子中得到下面这么一个回应,原始观点就不修改了,我将回复补充上来,重新阐述一下我的意思:to 楼主 我这人也不会对人进行人身攻击,反而我是鄙视那些对人身进行攻击的人.只是我不希望对那些新手进行歧视.因为我们这里的每个高手都是从新手走过来的. 我也是delphi 的深爱着.说说发自内心的感想固然是好.我只是看到你的第三点,也许就像20楼说的.激动了点. 但是我再次声明,我绝不会对人身进行攻击的.to no74 呵呵,我的第三点是写的有点让人受不了了,我表达得不好。我其实想说的意思是delphi论坛或delphi版的很多问题,其实自己去看看自带的帮助就可以了,举例来说(大家都说数据库,我也用数据库做列子),用ADO,那么Delphi自带帮助,用MS SQL SERVER,那么看看自带的联机帮助;一看就明白了,而且全面、透彻;而不是在坛子问问某某属性有没有、某某SQL怎么写什么;这种做法终究害了delphi的圈子里的人。 可以去看看C、C++里的帖子,从话题的层面而言,他们做得比我们好。 笔试题目如下:Delphi工程师笔试题北京金钻石科技发展有限公司答题人:_______________一、 Delphi基础1、Delphi 内置类型 string 和 WideString 的区别。2、简要描述Delphi代码单元中,以下关键字的作用。 interface: implementation: initialization: finalization:3、将一周七天声明成枚举类型。4、现有Integer 变量 A、B,在不声明其它变量的情况下,将它们的值交换。 如,A := 1;
B := 2;
交换之后 A = 2;
B = 1。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返回: o2.GetValue返回:6、如何模块内部获得自身路径? Exe程序: DLL程序:7、描述一下TEidt和TListView的类派生顺序,并说明它们的来源区别。8、用pascal 写一个双向链表。9、设计模式中的单件模式,在Delphi中可以用什么方式创建。10、Delphi快捷键 快速搜索添加控件: 打开工程属性对话框: 切换编辑中的代码窗体: 删除一行代码:二、 Win32基础1、写出Delphi声明Win32类型的库及其对应的Win32 Dll库(至少3个)。2、如何在Delphi中完成多线程的内存保护。三、 数据库1、现有MS SQL Server 数据库 UserLibs 列举出所有用户表及其字段。2、现有数据库A,数据库B和A相对应,在数据A中表增加时,或字段增加时,将结构同步到数据库B中,该过程不能损害数据。(上机题)(应heheheheh 第二次补充三.2题的说明) 题目意思是 数据库A 同步结构到 数据库B 增加表 --在B中--> 增加相同的表 任意现有 表中增加字--在B中--> 相同的表中增加相同的字段(相同类型、默认值等) 段 两个库中数据是独立的,只是同步结构,就是说在A库中增加了表,或增加了字段,都要同步到B库中。
B := 2;
交换之后 A = 2;
B = 1。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返回: o2.GetValue返回:6、如何模块内部获得自身路径? Exe程序: DLL程序:7、描述一下TEidt和TListView的类派生顺序,并说明它们的来源区别。8、用pascal 写一个双向链表。9、设计模式中的单件模式,在Delphi中可以用什么方式创建。10、Delphi快捷键 快速搜索添加控件: 打开工程属性对话框: 切换编辑中的代码窗体: 删除一行代码:二、 Win32基础1、写出Delphi声明Win32类型的库及其对应的Win32 Dll库(至少3个)。2、如何在Delphi中完成多线程的内存保护。三、 数据库1、现有MS SQL Server 数据库 UserLibs 列举出所有用户表及其字段。2、现有数据库A,数据库B和A相对应,在数据A中表增加时,或字段增加时,将结构同步到数据库B中,该过程不能损害数据。(上机题)(应heheheheh 第二次补充三.2题的说明) 题目意思是 数据库A 同步结构到 数据库B 增加表 --在B中--> 增加相同的表 任意现有 表中增加字--在B中--> 相同的表中增加相同的字段(相同类型、默认值等) 段 两个库中数据是独立的,只是同步结构,就是说在A库中增加了表,或增加了字段,都要同步到B库中。