我经过专业评估,在这里'我需要学习的东西

已加入
2016年7月9日
留言内容
2
编程经验
10+
主要部分
我接受了在线C#,MVC和Web API编程工作的面试,他们对我的测试项目给予了很好的评价,但我仍然得分不高,无法击败竞争对手。我希望您能帮助我找到这些问题的解决方案,尽管我非常确定我确实知道如何解决这些问题,但面试官非常挑剔,并且有成千上万的申请人担任该职位,所以他们希望针对大型企业量身定制解决方案应用程序。我更喜欢不依赖外部工具的解决方案,因为该测试的目的在于证明我的软件工程和编码技能。这是他们不喜欢我的评论的地方:

  • 无异常处理
我之所以没有添加它,仅仅是因为我已经筋疲力尽了,而且我不认为此类项目会需要它。我很确定他们想要的东西比简单的尝试/捕获还要先进。

  • 模块化
我已根据其用途将应用程序分为多个单独的类。尽管设计模式的使用及其实现受到评论家的好评,但我仍然缺乏"modularity"。将类划分为单独的项目,同时降低类之间的依赖关系和耦合是否足够?

  • 需要更多代码注释
当然,我知道该怎么做,但是希望您能给我一些注释MVC / Web API项目的标准。

  • 内联Javascript
我正在考虑将Javascript代码放入MVC视图中的单独的.js文件中。您能给我一个干净,看起来更专业的解决方案吗?

  • 需要更多分层
我真的不知道该怎么解决!请在下面查看我对整个应用程序的描述。

  • 单元测试范围不足
我正在收集一些用于数据库,MVC控制器,MVC视图和Web API的基本单元测试。如果您要在此处添加任何内容,请不要犹豫。

  • 用户密码未加密
我这样做是因为他们只是给了我一个创建数据库的脚本,并且密码未加密。我真的不知道是否应该使用加密的密码创建自己的表,然后创建导入脚本,如果您在我的位置,该怎么办?

  • 编码技巧可能会更好
我进行了面对面的采访,要求我用一些简单的MVC控制器和视图扩展该项目。不幸的是,过去三个月来我一直只从事PHP方面的工作,因此我不得不用一本书来记住最基本的任务。我认为我可以通过慢慢学习PRO ASP .NET MVC 5书并手动应用所有内容来轻松解决此问题。
该测试项目用于一个简单的CRUD应用程序,该应用程序将任务分配给用户。该工作由Web API服务完成,并且使用随附的MVC应用程序将用户连接到Web API服务。我已经为存储库创建了接口,并实现了使用NoSql数据库的接口。我有3个月的时间学习并再次申请同一职位。
主要部分结束
常问问题:
1-为什么您接受如此苛刻的低薪要求?
我生活在一个我真正喜欢的贫穷国家,我永远也不会离开。我可以很容易地在这里赚到高薪,但是这份工作给我的收入是我在家里工作所得的三倍!
2-为什么要继续申请这个职位?
仅仅是因为我发现他们的评估非常专业。第一次申请具有类似要求的C ++职位时,实现所需的功能时遇到了很多麻烦,因为我不是C ++专业人士,因此我没有足够的时间来编写除基础知识之外的任何东西。他们对我的评估很糟糕,但是它向我揭示了我的编程风格所缺少的许多东西,甚至可以将其应用于我的C#代码(我非常喜欢用它进行编码)。第二次,我获得了16分以上的好评(包括他们在第一次面试中抱怨的所有观点),我去了最后一次面试,效果很好。不幸的是,我没有得到足够高的分数来获得这份工作。但是,这段旅程教会了我很多关于我作为程序员所缺少的东西的知识,并且由于增加的代码可扩展性和灵活性,它甚至使我当前的客户更加满意。
3-您的编程背景是什么?
我在使用多种编程语言(Java,C ++,C#,PHP,Basic等)进行编程方面拥有14年的经验,可以开发多种类型的应用程序(ERP,实用软件,教学软件,硬件驱动程序,统计应用程序,机器人应用程序,等等...)。不幸的是,我主要是自学成才,所以我主要专注于编码的功能部分,而与程序的结构,灵活性,可扩展性或代码的可读性无关。但是自从我第一次访问该公司以来,我已经解决了许多此类问题。
4-公司的名字是什么?
对不起,我不能告诉你。如果知道的话,请不要在此处提及,因为这可能会影响我在不久的将来获得工作的机会。
5-为什么您不轻松地工作而不是浪费时间?
实际上,我确实有工作!我正在为多个在线客户端工作,主要用于基于C#的客户端应用程序和基于PHP的服务器应用程序。有两个因素促使我继续学习并再次申请这些工作:找到我所缺少的并解决它,以及我目前的客户有点"dirty"而且我更喜欢与专业人员合作。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
在不了解更多有关项目需求和实施的情况下,确实无法提供您所需要的某些信息,老实说,我一次只需要一小部分就不会涉及这么多的细节。我将提供一些常规信息。

无异常处理:您应该在整个应用程序中提供适当的异常处理,即在适当的地方提供但不要过度使用它,但是您还应该有一个全局异常处理程序,这样即使您没有想到的异常也将得到处理。某种程度上来说。究竟如何实现全局异常处理程序,取决于您要定位的MVC版本。

模块化:在我从办公室提出的MVC项目中,我们的解决方案包含大量项目。我们有以下项目:EF模型,存储库和工作单元,服务类,Web服务(在我们的情况下主要是WCF,但我们将来会使用Web API),DTO,网站。我们还使用IoC容器和工具在实体DTO之间以及DTO与视图模型之间进行映射。

需要更多代码注释:编写良好的代码就其所做的工作而言几乎应该是自记录的。虽然有时您可能需要长LINQ查询之类的注释。注释至关重要的地方是解释为什么代码正在执行其操作。我读了很多次,别人甚至我本人都写过,很清楚代码在做什么,但是我并不清楚为什么需要这样做或者为什么要以这种方式实现。这样的注释永远不会太多,因为在编写代码时看似显而易见的东西通常对其他人甚至不久之后都不是那么明显。

内联Javascript:我们具有一个或多个用于通用功能的JS文件,但是特定于视图的所有内容都在该视图中。我们倾向于将局部视图专用于该视图的脚本,并通过主视图中的一个部分加载该局部视图。这适用于全部和部分视图,例如我们可能有一个Index视图和一个IndexScript局部视图,以及一个_Edit局部视图和_EditScript局部视图。

需要更多分层:我认为这与我提供的模块化信息密切相关。

用户密码未加密:如果说的是数据库中的用户记录,那么您可能应该考虑对密码进行哈希处理。默认情况下,ASP.NET Identity会执行此操作。如果您不熟悉此过程,则当用户注册并提供密码时,该密码将被散列,并将结果存储在数据库中。通常,您将生成一个随机盐并将其存储起来,这样多个用户使用相同的密码仍会生成不同的哈希值。盐可以单独存储,也可以与哈希密码连接。当用户登录并提供密码时,首先使用用户名从数据库中获取相应的哈希密码和盐。然后使用salt来哈希用于登录的密码,并将结果与​​数据库中的密码进行比较。如果它们匹配,则对用户进行身份验证。该系统的优势在于无法从数据库中存储的哈希值确定原始密码。
 
最佳 底部