您的位置:首页 > 其它

推荐:一道让我惦记了一年的机试题

2008-01-13 20:00 246 查看
一年前俺想跳槽,面试了几个公司,其中一个公司的技术总监面试之后给了一道上机题让回家做(还给俺说这题去网上也找不到),并在晚上12点之前发给他。当时俺没做,今天闲来无事想起这道题就做做看,仔细想想,这道题看似简单,还是挺有内涵的,至少在我经历的面试里边是让我看重的一个。闲说少说,题目如下:
总体需求:

在某系统中,有一个模块,功能需求是:从数据源中读取一组数据,用户可以根据模版选择不同的展示界面.

程序设计人员将这个模块为两部来做.

1.先从数据库中读取一组数据,转换成XML数据,做为数据源提供给展示层.

2.以XML做为数据源,提供至少两种展现界面,并且用户可以从提供的多种界面中选择一个.

A:列表展现

姓名

出生日期

性别

学历

李世民

1950年1月1日



研究生

秦始皇

1960年1月1日



专科

孔明

1970年1月1日



博士

小白

1990年1月1日



初中

慈禧

1940年1月1日



本科

B摘要展现形式

李世民 男1950年1月1日

职业皇帝,名声不错。做的最悔的事是兄弟相残,所以天天做恶梦。但也做了不少好事。开创贞观之治。是唐代最盛之时期。

秦始皇 男 1960年1月1日

职业皇帝。原名赢政。统一六国成为他最大功绩。是中国历史上第一皇帝,称始皇帝。

…………………….

C 标签形式展现形式

秦始皇

小白

性别:男 生日:1960年1月1日

学历:专科

简介:职业皇帝。原名赢政。统一六国成为他最大功绩。是中国历史上第一皇帝,称始皇帝

(模版要使用单独的模版文件,后期需要添加模版文件,以添加展现的形式。)

进度:

1.取得数据并转换成XML数据的工作,已经完成(见data.xml).

2.为xml数据源开发两个展示的界面.(一.列表形式的展现形式,二提供摘要形式的展现形式.)

题目:

1.用文字描述可以实现的方案,描述时需要涉及期关键的技术点。(至少提供2种解决方案,每个方案5分)共10分.

(注:如果15分钟之内不能提供解决方案。可以寻求提示,我们会给你三种设计方案。但此步骤无分)

2.可以根据其中的一个方案,进行详细设计.(共40分)

流程图(15分)

方法(函数)规划(25分)

方法1.中文名称

输入参数

输出参数

功能描述

方法2.中文名称

输入参数

输出参数

功能描述

方法3.中文名称

输入参数

输出参数

功能描述

.............

展示的实现思路:

从需求中的三种展现形式中,选择其中两种,描述技术实现思路,应用到的技术。

(注:这部分可以不做,但记0分)

3.根据设计开发程序.(50分)

只写出一个模版得10分

写出模版转换的关键代码得10分。

第二个写出了“列表模版”或“摘要展现形式”得20分,

第二个写出了“标签展现”得20

三个全写出得30分。

我用两种方法实现了:

方法1.利用Repeater控件动态加载显示模板文件

Repeater1.ItemTemplate = Page.LoadTemplate(path + "/ItemTemplate.ascx");

这个方法最省事,不用写什么转换方法,加载模板文件就成了。不过俺感觉很不爽的地方是:

Repeater1.HeaderTemplate = Page.LoadTemplate(path + "/HeaderTemplate.ascx");

Repeater1.ItemTemplate = Page.LoadTemplate(path + "/ItemTemplate.ascx");

Repeater1.FooterTemplate = Page.LoadTemplate(path + "/FooterTemplate.ascx");

俺本来想定义一个模板文件把HeaderTemplate 、ItemTemplate、FooterTemplate都包含进去,Repeater只加载 这个文件就可以了,由Repeater自己去分析哪个是HeaderTemplate还是ItemTemplate,可是俺折腾了半天没找到办法,只好用上边的代码凑合了,哪位兄弟有好的办法别忘了给俺指点一下。其实这个地方还可以还个方式实现,就是载模板文件中定义Repeater及它的样式,这样就避免了上边的不爽,我另一个实现方式里边是用的这个思路。

方法2:

根据不同的显示样式建立其模板控件,这些模板控件按照设定的标准编写,并继承自一个转换类,该类负责分析转换模板中的标识符;最后由PlaceHolder加载模板控件,这个办法写的代码多点,不过适用范围广,不限于记录列表的显示,像dnn那样,按照标准编写页面的显示样式文件,可以很容易的实现换肤等,也可以实现类似咱们博客园的风格模板。这个地方也可以不用ascx,编写html模板文件也可以,然后对html文件中的元素进行分析替换,以说本质上是一样的。

主要代码(conver.cs转换部分):

public partial class convert : System.Web.UI.UserControl

{

{

{

{

{

{

{

{

{

nodeItem.RemoveChild(nodeItem.FirstChild); //不再需要记录模板,把记录模板节点去掉

}

//把xmldocList.InnerXml中的标记子符去掉,作为html代码赋给页面

list.InnerHtml = System.Text.RegularExpressions.Regex.Replace(xmldocList.InnerXml, "<repeat>|</repeat>|<template>|</template>","");

}

}
当时不明白那个技术总监出题的意图,现在明白了,他其实想考察俺有没有把页面表现和业务逻辑分层以及代码复用的意识。

这里是我的答案,载ie7下测试试过,在firefox下测试时发现不支持window.onload方法,算了,不管了

代码 :/Files/mapk/my2008.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: