【.NET笔试题】Varian瓦里安医疗软件开发人员招聘笔试试题
1,已知dicom文件包含病人姓名,ID,性别,生日,检查设备等信息,请用你所熟悉的任意一种程序语言,编写一个完整的过程,完成从一个给定路径(如“D:\My Document\”,里面都是dicom文件)中,析取文件名,病人姓名,ID,性别,生日,检查设备,编写程序时,请在必要的地方加以注释。
//C# public static List<object> ReadAllFileInfo() { var result = new List<object>(); var dir=new DirectoryInfo("D:\My Document\"); var dirs=dir.GetDirectiories(dir); for(int i = 0; i < dirs.Length; i++) { var item = dirs[i]; var fileName = item.Name;//文件名 var content = File.ReadAllText(item.FullName); var contentList = content.Split(',') var name = contentList[0];//病人姓名 var id = contentList[1];//ID var gender = contentList[2];//性别 var birthday = contentList[3];//生日 var device = contentList[4];//检查设备 //todo... result.Add(new object(){ fileName, name, id, gender, birthday, device, }; } return result; }
2,根据下面产品API信息(见附件),设计一个程序页面通过调用API实现对后台资源的定制化显示
<!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js"></script> <script> $(document).ready(function(){ $.get("http://www.example.com/Citrix/Store/resources/v2?group=core&group=sub",function(data,status){ if(status == 200) { //解析xml var xmlDoc = $.parseXML( data ), var $xml = $( xmlDoc ), var id= $xml.find('id'); var title = $xml.find( "title" ); var link = $xml.find('link); var summary = $xml.find('summary'); //渲染dom元素 var html="<p>" + id + "</p><p>" + title + "</p>"; $('.divMain').html(html); }else if(status == 400) { alert('Bad/Missing security token (see CitrixAuth Authentication Scheme document [3] )'); }else if(status == 401) { alert('No resource available for the specified {id} parameter (the resource may not exist or access to it may not be authorized for the requesting user).'); } }); }); </script> </head> <body> <div id='divMain'> </div> </body> </html>
数据库设计
下面的表有问题吗?如果有,如何改进?
城市* 街道* 邮政编码
佛山 金鱼街 528000
佛山 大福路 528000
佛山 季华路 528000
广州 北京路 510000
广州 三元里 510000
广州 中山路 510000
… … …
*城市和街道联合做主键
有问题 首选主键需要是当前表的ID,或者关联表的外键 需要将城市单独出来一张表 City 字段包括 ID、Name 例如 1 佛山 2 广州 街道单独一张表 Streat 字段包括 ID、Name、CityID(外键关联City)、PostID(外键关联邮编) 邮编表 Post 字段包括 ID、Code 查询语句如下 select City.Name,Streat.Name,Post.Code from Streat left join City on City.ID = Streat.CityID left join Post on Post.ID = Streat.PostID
2、假设有以下的两个表:
Cus_A
ID* Name Address
… … …
Cus_B
ID* Name Address
… … …
*主键
表Cus_A和表Cus_B的结构完全相同,表Cus_A和表Cus_B中既存在ID相同的记录,也存在ID不同的记录。现要求将ID只存在于表Cus_A中而不存在于表Cus_B中的记录全部插入到Cus_B表中,并用表Cus_A中的记录更新表Cus_B中相同的ID的记录,请写出完成这一功能的存储过程。
--使用游标循环,存储过程如下 declare @ID int, @Name nvarchar(50), @Address nvarchar(250) declare myCurssor cursor for (select * from Cus_A where id not in (select ID from Cus_B)) open myCurssor; fetch next from myCurssor into @ID, @Name, @Address; while(@@fetch_status=0) begin insert into Cus_B(ID,Name,Address) values(@ID, @Name, @Address) end close myCurssor deallocate myCurssor go --批量更新B表数据 update Cus_B set Name=(select Name from Cus_A where Cus_A.ID=Cus_B.ID), Address=(select Address from Cus_A where Cus_A.ID=Cus_B.ID) --表结构一样,可以直接用select into语法 insert into Cus_B(ID,Name,Address) select ID,Name,Address from Cus_A where ID not in (select ID from Cus_B);
3、某公司正在开发一个档案管理系统,要求在关系数据库中实现和Windows文件系统完全一致的树状文件目录。为了实现这一目录结构,至少需求哪些表?请详细描述这些表的用途和结构(如有必要,可用图表进行描述)。最后,请用伪编码(或自然语言)描述按树状结构遍历所有档案的算法。
主要的表如下 目录表 Directory 字段 ID、Name、Path、ParentID 档案表 Document 字段 ID、Name、DirectoryID(外键目录表ID) //C# 主要使用树状节点的递归算法处理 private List<Directory> List = new List<Directory>(); public void GetDirectoryList(int id) { var sql = "select * from Directory left join Document on DirectoryID.ID = Directory.ID"; if(id > 0) { sql += "where Directory.ParentID=" + id; } var query = context.Databse.SqlQuery(sql); if(query.Count == 0) { break; } foreach(var item in query.ToList()) { List.Add(new Directory() { ID=item.ID, Name=item.Name, }); } }
试题四:系统设计
简述“单点登录”的原理,并设计一个单点登录的方案。
单点登录,通过给授权服务器验证请求token,将token和本地的cookie关联,从而记录登录状态,授权服务器拿到token之后进行有效期的校验,确定是否可以正常登录授权。 方案有腾讯开放平台接口提供的OAuth2.0 如果需要自己设计,可以设计一个token颁发接口、token认证接口 业务接口每次调用之前需要先验证token是否存在,不存在需要拿用户名和密码去token颁发接口获取token 如果存在,需要去接口校验token是否失效,有效的token才能正常登录 还可以通过登录方式不同,可以使不同设备颁发不同token,同时在线
简述一个软件工程的主要步骤,并指出每个步骤的明确目标及实施办法。最后分析哪些是关键步骤。
项目立项 需求调研 确认需求文档 确认技术选型 搭建技术架构 搭建框架代码 拆分业务和任务模块 并行开发 系统连调测试 系统上线 运维升级
综合
你认为在团队开发中,你能发挥自己的能力吗?为什么?当个人意见与主管出现矛盾时,你用什么方法解决?
可以 对自己负责的模块能按时保质保量完成,开发工作不延期 自己的任务完成了,还可以了解处理其他模块的任务 做到有责任心,说到做到 当意见不一致的时候,我会和主管分析两个不同意见的利弊得失 如果按照他的想法实现会有什么问题,导致什么后果;如果按照我的想法实现会有什么问题和结果 如果在我表明自己的见解的时候,主管还是觉得不可行的话,我回按照主管的想法去实现