一次值得的.net高级面试经历及.net高级面试题分享

一次值得的.net高级面试经历及.net高级面试题分享

34322发表于2015-08-07

最近去了成都的一家公司面试,职位是高级.net开发,虽然最后在待遇上没有达成协议,但是也是一次不错的面试经历,因为面试官比较认真,一直在聊技术方面的问题,也很细,这也上我知道的自己目前所欠缺的一些东西,现在分享出来。


由于这一两年的时间,业余时间都在忙于自己的两个seo相关的管理系统(蓝狐seo管理系统和蓝狐seo关键词按天计费系统),以至于都没有时间研究技术了,所以这次的面试技术时有些问题答的不太理想,甚至有的都没回答上来。


最开始这家公司先给我发了封邮件,里面有两道编程题,要求先把这两道题做完了把源码发过去,他们根据情况来决定是否进行下一步面试。题目是这样的:


一. 设计程序输出销售及收费清单

一个电商平台对在其平台之上销售的除了书籍、食品以及药物以外的商品收取10%的费用。而对于进口的商品则额外收取5%的附加费用。对于平台抽取的费用计算时,舍入的规则是:对于n%抽取率,价格为p的商品,np/100的值就近舍入到0.05(如:7.125 -> 7.15,6.66 -> 6.70)。

卖家卖出一些商品后,可以要求平台提供一个清单,列出其卖出的所有商品名称,价格(包括平台抽取费用),以及平台抽取的总费用和商品总价。

写一个程序可以根据下面的输入值,输出下面的预期的正确的清单。

要求:

1. 使用面向对象的设计思想进行设计。

2. 请分析猜测未来可能的变化点,考虑程序的扩展性。
(考察重点是面向对象的设计能力)

输入:

Input 1:

1 book at 12.49

1 music CD at 14.99

1 chocolate bar at0.85

Input 2:

1 imported box ofchocolates at 10.00

1 imported bottleof perfume at 47.50

Input 3:

1 imported bottleof perfume at 27.99

1 bottle of perfumeat 18.99

1 packet ofheadache pills at 9.75

1 box of importedchocolates at 11.25

输出:

Outpu1:

1 book: 12.49

1 music CD: 16.49

1 chocolate bar:0.85

Sales Fee: 1.50

Total: 29.83

Output 2:

1 imported box ofchocolates: 10.50

1 imported bottleof perfume: 54.65

Sales Fee: 7.65

Total: 65.15

Output 3:

1 imported bottleof perfume: 32.19

1 bottle ofperfume: 20.89

1 packet ofheadache pills: 9.75

1 box of importedchocolates: 11.85

Sales Fee: 6.70

Total: 74.68

参考答案: 一道经典面向对象(OOA&OOD)的.NET高级面试题及参考答案

二. 设计程序生成货架位

在仓库中为了方便的管理每个货架,我们会为每个货架命名一个编号,这个编号由字母数字和分隔符(除数字和字母的其它字符,例如:- * | # 等)组成,现在需要设计一个程序输入起始值和结束值按照一定规则生成一组货架编号,且一次最多只能生成5000个。

例如:

1、起始值:A-10    结束值:D-15 输出的结果如下:

A-10,A-11,A-12,A-13,A-14,A-15,
B-10,B-11,B-12,B-13,B-14,B-15,
C-10,C-11,C-12,C-13,C-14,C-15,
D-10,D-11,D-12,D-13,D-14,D-15

2、起始值:A-10A*E    结束值:B-15B*G  输出的结果如下:

A-10A*E,A-10A*F,A-10A*G,A-10B*E,A-10B*F,A-10B*G,A-11A*E,A-11A*F,A-11A*G,A-11B*E,A-11B*F,A-11B*G,A-12A*E,A-12A*F,A-12A*G,A-12B*E,A-12B*F,A-12B*G,A-13A*E,A-13A*F,A-13A*G,A-13B*E,A-13B*F,A-13B*G,A-14A*E,A-14A*F,A-14A*G,A-14B*E,A-14B*F,A-14B*G,A-15A*E,A-15A*F,A-15A*G,A-15B*E,A-15B*F,A-15B*G,B-10A*E,B-10A*F,B-10A*G,B-10B*E,B-10B*F,B-10B*G,B-11A*E,B-11A*F,B-11A*G,B-11B*E,B-11B*F,B-11B*G,B-12A*E,B-12A*F,B-12A*G,B-12B*E,B-12B*F,B-12B*G,B-13A*E,B-13A*F,B-13A*G,B-13B*E,B-13B*F,B-13B*G,B-14A*E,B-14A*F,B-14A*G,B-14B*E,B-14B*F,B-14B*G,B-15A*E,B-15A*F,B-15A*G,B-15B*E,B-15B*F,B-15B*G

3、起始值:A10  结束值:B15  输出的结果如下:

A10,A11,A12,A13,A14,A15,B10,B11,B12,B13,B14,B15


输入错误示例:

起始值

结束值

错误原因

A10

B203

起始值和结束值长度不一样

A-10

B*20

第二个字符分隔符不一样

D-10

B-20

起始值字母D大于结束值字母B

B-30

D-10

起始值中数字30 大于结束值中数字10

A-5

D-C

起始值第三个字符是数字,而结束值第三个字符是字母

A-0001

E-1100

生成了5500个,超过一次最大5000个的限制

参考答案:一道生成货架编号的算法题及参考答案

===========================================

这两道题其实也是挺有意思的,第一道是考面向对象程序设计的能力,要实现功能不难,要写出能够易扩展、能够很容易应对将来的需求变化就要看程序员的功底了,第二道就是算法题而已。这两道题大家先试着自己做一做,我会把我做的答案在以后的文章中公布出来。你们也可以把你们答案发给我,我们共同探讨、研究一下,看有没有更好的解决方案。


我还是花一近两天时间把这两道题做好,一半多的时间都花在了第二道题上面,这道题看起来简单,如果没有很好的思路,就会卡在那里,我估计还是平时算法题做少了。


我做完题之后,在周六的时候就把我的源码发到他们邮箱了。因为我对自己做源码还是挺有信心的,以为第一天(周一)就能接到电话面试,没想到第三天下午才接到通知。


在看到他们公司地址给我的一感觉像一个小区的名字,到了才知道果然是一个小区。打电话他们hr给我开门,当进门的时候大家都有齐刷刷的眼睛看我,也没怎么注意其它人,最让我感到意外是他们居然还在客厅养了一条狗,真是像家一样的温馨呀。可能他们都比较喜欢狗吧,虽然那条狗给头上带上罩子,应该咬不了人,在他们hr的掩护下我还有那么一点点担心。我觉得办公环境是小区其实也没什么,后来他们告诉他们挺享受这样的上班环境的。我当初的第一家公司也是在一个小区里面,中午有一个阿姨来给我们做饭,我当时为了省钱连晚上也在公司吃中午剩下的。在小区办工和中午有阿姨来做饭一点和我第一家公司都是挺像。


在提交代码到接到面试的这段时间,我都没有怎么想我做过的这两道题了,以至于到他们公司面试官现场了出了几个变化需求,叫我写出我之前的类图和针对这些需求要怎么改动原来的设计。我当时想不起来我当时的程序有哪些类了,我就说,我想看我发给你们的代码,现场改这样直观一些。面试官听到我这样说就非常吃惊,说:“你自己写的代码都不清楚吗?“。我说这个代码是在几天前做的,忘的差不多了,我要看着我的代码来改。面试官听了我的这话,就更吃惊了,最后说:“你这还是我遇到到的第一个自己写的代码不知道的,那好你就现场重新设计一下”。说完就把笔和本给了我,我说我做这个题也花了一天左右,先是没有按面向对象来的,只是实现了功能,然后一步一步的重构达到现在的效果,要花比较多的时间。我知道当时他有那种这次面试完全进行不下去的想法,我也想这次面试可能就到此结束吧, 有点尴尬,呵呵。


可能我是对当场写代码比较排斥,也可能心理素质太差,太紧张。我最后给他说我写不出来。此时我想他一定认为题不是我自己做的,才写不出来吧。我想接下来是出于对我的尊重吧,他没有中断面试(这也是我佩服面试官的地方--人不能一棍子打死,不有偏见的区别对待别人,做到对对每一个人都尊重,这很难得),然后开始问我的.net相关的技术问题,在聊的时候通过我的回答,他也逐渐地认可了我的能力,我也慢慢地把心情放松下来,心想就把这次当成一次普通的技术交流吧,当问到mvc的对Controller进行依赖注入时,我也把我之前第一道题我的设计想起来,顺便也把刚开始的让双方都不愉快的第一个问题回答了。在接下来的时间,我们主要聊了一些ef、mvc、反射、以及httpHandler与HttpModule的问题。大部分我还是正确的回答出来了,有些时一时想不起来,有些确实还没有来得及仔细研究,下面我把这次面试我能够想起来的所问的问题列出来,我怕过几天又忘记了^_^,也希望与那些想进步或者想要准备去下家面试的同学们共勉,是要好好复习一下了。


小编蓝狐