【.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,同时在线

 

  

  

 

简述一个软件工程的主要步骤,并指出每个步骤的明确目标及实施办法。最后分析哪些是关键步骤。

 

项目立项

 

需求调研

 

确认需求文档

 

确认技术选型

 

搭建技术架构

 

搭建框架代码

 

拆分业务和任务模块

 

并行开发

 

系统连调测试

 

系统上线

 

运维升级

 

  


综合 

你认为在团队开发中,你能发挥自己的能力吗?为什么?当个人意见与主管出现矛盾时,你用什么方法解决?

 

 

可以

对自己负责的模块能按时保质保量完成,开发工作不延期

自己的任务完成了,还可以了解处理其他模块的任务

做到有责任心,说到做到

 

当意见不一致的时候,我会和主管分析两个不同意见的利弊得失

如果按照他的想法实现会有什么问题,导致什么后果;如果按照我的想法实现会有什么问题和结果

如果在我表明自己的见解的时候,主管还是觉得不可行的话,我回按照主管的想法去实现

 

  

  

 

posted @ 2022-02-24 11:04  0539  阅读(142)  评论(0编辑  收藏  举报