CSDN社区分享面试经历活动作品13——ASP.NET面试经历分享(最终版)

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN/article/details/7301995 200X年12月23日的一次面试经历(共六轮),至此9-X周年之际,和各位朋友分享,希望对各位朋友有用,有些自己的答案贴出来也仅仅是抛砖引玉,希望各位朋友不吝赐教,说句老实话,面试的时候时间很紧,很难考虑最优算法。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN/article/details/7301995
200X年12月23日的一次面试经历(共六轮),至此9-X周年之际,和各位朋友分享,希望对各位朋友有用, 有些自己的答案贴出来也仅仅是抛砖引玉,希望各位朋友不吝赐教,说句老实话,面试的时候时间很紧,很难考虑最优算法

起因是朋友推荐我去W公司应聘Senior SDE这个职位,应该算是内部推荐了,下面是招聘要求

Title: Senior SDE (高级软件开发工程师)
1. 本科学历,计算机相关专业
2. 英语CET4,能熟练阅读英文文档
3. 工作经验4年以上
4. 优秀的逻辑分析能力,良好的沟通能力
5. 丰富的ASP.NET 、C#、 SQL Server的经验
6. 有丰富的项目开发、测试经验
7. 独立带领小组完成项目的能力

应该还算吻合,自己很久没有被面试了,也想去找找面试的感觉,而且对方也是个大公司,也比较期待。

下了地铁,由于地方不熟,打车又打不上,居然晚了了15分钟才找到公司(后来发现是通知我面试的MM没说清楚,但自己没有问清楚是最不应该的),先去找WC解决一下,然后准备面试。

进门和前台MM说明了一下迟到的理由,带我到会议室,给了一套笔试题目,一共七道,没有说明多久需要做完

第一轮笔试

算法题:可以使用c,c#和java

1. 已知m和n是已经排序好的数组,从小到大,现在要合并这两个数组内的数到一个数组,仍然要求是从小到大排序

2. 使用递归求n的阶乘

3. 有1,2,2,3,4,5六个数,要求输出他们组合的全排列,4不能在第三位,5和3不能相邻

4. 请解释HTTP,Cookie和Session

5. 请解释视图,存储过程,左连接

6. 请简单描述三层架构

7. 写一段HTML页面完成注册功能

看了题目,没有给答题纸,只能在背面写了,

先从第四题开始写起,写HTTP协议的时候心里有点嘀咕,他不会等会真问我HTTP协议的细节吧。Cookie和Session先讲了最重要的,都是Web应用程序中保存特定用户信息的。Cookie信息存放在客户端(大小限制4K,只能存放string类型,不安全,但可以考虑使用加密和验证),Session信息在服务器端(安全性好,占服务器资源,除InProc方式存放的对象需要可序列化),然后简单说明临时Cookie和永久Cookie,Session的三种存放方式(InProc、StateServer、SQLServer)

第五题,分别说明视图和存储过程的概念/优点/可能使用它们的主要场景

第六题,简单地描述三层架构,从代码重用/团队协作/系统维护/测试等上面说了下,网上相信能找到很多更好的答案。

第七题,写标记的时候尽量按照xhtml的规范来写,表单的提交,简单的样式和javascript验证的代码

这时有人进来,我赶紧又要了一张纸(后面的算法题肯定需要),这4个题目的答案大概写了A4纸的1面。

回过来写了算法中最简单的第二题:


public static int Func(int n)
{
    if (n < 0)
    {
        throw new ArgumentException("不能小于0");        
    }

    if (n == 0 || n == 1)
    {
        return 1;
    }

    return n * Func(n - 1);
}

看了一下第一题和第三题,还是感觉第一题更简单,尽量考虑了算法的复杂度,但这个不是本人的强项,不过常识是算法题只应该用一个循环,当时大致写的代码如下:


public static int[] Func(int[] SLm, int[] SLn)
{
    if (SLm == null || SLn == null)
    {
        throw new ArgumentException("传入数组不能为空");
    }

    int[] result = new int[SLm.Length + SLn.Length];
    int mIndex = 0;
    int nIndex = 0;
    for (int index = 0; index < result.Length; index++)
    {
        if (mIndex >= SLm.Length && nIndex >= SLn.Length)
        {
            break;
        }

        if (mIndex >= SLm.Length)
        {
            result[index] = SLn[nIndex++];
            continue;
        }

        if (nIndex >= SLn.Length)
        {
            result[index] = SLm[mIndex++];
            continue;
        }

        if (SLm[mIndex] < SLn[nIndex])
        {
            result[index] = SLm[mIndex++];
        }
        else if (SLm[mIndex] > SLn[nIndex])
        {
            result[index] = SLn[nIndex++];
        }
        else
        {
            result[index] = SLm[mIndex++];
            nIndex++;
        }
    }
    return result;
}

写第三题到一半的时候MM过来问了一下是否做完,估计自己应该能写出来,就说还要一回就好。现在已经忘记当初具体怎么写的了,不过肯定是完成了功能,还记得当时判断5和3不能相邻时用的技巧是:相邻的两个数字之和不能等于8。下面这个版本是根据http: // blog.csdn.net/qianling3439/archive/2008/08/07/2781041.aspx 修改的C#版本:

public static void Main() 
{
    char[] number = new char[] { '1', '2', '2', '3', '4', '5' };  
    Func(number, 0, number.Length - 1);  
    Console.WriteLine(list.Count);  

    foreach (String s in list) 
    {  
        Console.Write(s + " ");  
    }  
}  

public static List<string> list = new List<string>();
public static void Func(char[] n, int beg, int end)
{  
    if (beg == end) 
    {
        string result = new string(n);
        if (result[2] == '4')  
            return;
        if (result.Contains("35") || result.Contains("53"))  
            return;
        list.Add(result); 
        return;  
    }  
    for (int i = beg; i <= end; i++) 
    {  
        Swap(n, beg, i);  
        Func(n, beg + 1, end);  
        Swap(n, beg, i);  
    }  
}  

public static void Swap(char[] n, int a, int b)
{  
    char temp = n[a];  
    n[a] = n[b];  
    n[b] = temp;  
} 

第二轮面试

答完题目之后,一个年轻人(25岁左右)给我面试,根据我的经验估计对方应该是项目小组中的技术骨干

1. ASP.NET页面生命周期
这个问题我本身比较熟悉,出门前还看过 :)。
说了几个自己认为比较重要的PreInit、LoadViewState、 LoadPostData、Load、RaisePostDataChangedEvent(所有实现了IPostBackDataHandler接口的控件)、RaisePostBackEvent(实现 IPostBackEventHandler 接口的控件,如 Button, LinkButton等)、PreRender、SaveViewState。当然包括每个事件主要做什么,尤其是LoadViewState和SaveViewState是实现ASP.NET了保持状态的假象。
(相信这个问题回答的超出对方想象)

2. 母版页的作用
这个问题比较简单,简单介绍并提及自己不喜欢用母版页,用javascript找控件比较麻烦,对方颇有同感。

3. 简单查询,考勤表id(PK int) name(varchar) time(datetime),求迟到次数最多的员工的最后一次迟到时间
答案就不贴了

4. 经典的第M条到第N条记录
先问了一下要SQL Server 2000还是SQL Server 2005的版本,对方马上笑了,说还是SQL Server 2000的吧,给了一个top的版本
(我的blog上写过类似的东东http://blog.csdn.net/amandag/archive/2008/07/14/2646472.aspx)

5. 算法:最长升序降序序列,7 5 6 8 10 7 9 3 8 7 4 1 8 9 4,则最长的升序序列为5, 6, 8, 10,最长的降序序列为8,7,4,1
个人的答案是用了一个循环,这里就不贴了。
顺便提一句,手写算法题的时候,对方会一直盯着看,压力比平时写程序大很多

6. 无限级分类数据库设计及节点查找
最近写了一篇类似的blog,当时的思想也差不多是这样
http://blog.csdn.net/amandag/archive/2009/12/16/5021126.aspx

7. 二叉树查找
个人感觉由于前面的问题回答的还不错,后面的这两个问题对方也只是要求我说了一下思想,并未写具体的代码

第三轮面试
面试官是一个年约28~29的女孩,问了一些关于我做的项目的问题,个人感觉她的技术不如前面一个面试官,而且表达思路也不是很清楚,略聊了一会对方告诉我下面会有项目经理面试。

第四轮面试
面试官应该是个技术性的PM,问了一下网站架构的问题,和其聊了一会数据处理中需要考虑的问题(并发、索引、安全、分布式、缓存、海量数据)。

做技术的还是比较坦诚,他认可我的技术水平(这点让我颇为开心),并建议我应聘PM的岗位(其实对方招聘的时候只有SDE、Senior SDE这两个岗位),此时我也意识到如果仅仅应聘Senior SDE看来并不匹配。

第五轮面试
面试官应该是个部门经理,很能聊,主要谈了两个问题
1. 如何控制项目管理中的风险(主要提到了项目进度的控制和客户的交流)
2. 如何打造一个高效的开发团队、如何评估你的团队开发人员
针对我的回答又问了些相关问题,说句老实话,对方显然很有经验,这轮不知深浅。

这轮结束后对方说公司的副总大概18:30左右会过来,问我是否介意等,我当然不介意。

第六轮面试
对方显然更有经验,感觉不到对方在问问题,基本就是在聊天,他的回答经常是笑着说"我了解了"或者"我明白了",我也只能见招拆招了,最后对方问了一下薪资的问题,我努力踢过去一个皮球,被对方轻易地踢了回来,只好先翻底牌了。

今天的面试总计用了大约6个小时。

结语

很多朋友很关心最终面试是否成功,要让大家失望了,最终我没有去这家公司,如果去了,怕也未必会发这个帖子。

没有去的原因有些不便说,可以提及的说一下。

面试结束后对方并没有给我回音,由于我有W公司另一个人事的MSN,所以托其问一下,对方给了回应,和我预期的情况差不多,薪资没谈拢(和我预期的有不少差距),我考虑再三(上班的车程大约要1个半小时,而我现在只需要40分钟),最终还是放弃了。

另:我咨询了一个朋友(Z公司的副总),讲述了一下我面试的经过,问下有何问题,朋友给我的解释也可能是为了安慰我,内容大致如下:
1. 对方本来没有打算招PM,但显然 Senior SDE和我并不匹配,所以我这个属于隐形招聘需求,对方最需要的并不是PM。
2. W公司现在招人是为了有可能接上政府的单子,项目还没接上,这个PM对W公司并不着急。

欢迎各位朋友对上述问题不吝指教!所有分数将给提出有价值的答案或者建议的朋友,谢谢!


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
6月前
|
设计模式 算法 NoSQL
冲刺金九银十!GitHub 中文社区高热度的 Java 面试题被我整理好了!
面对已经过去的金三银四很多小伙伴都受到了很大的挫折! 最近收到一个小伙伴金三银四在阿里的面试流程完全被吊打,和我一起看看阿里都问了什么吧! 小编在这里也简单的看了一下牛客网阿里招聘的一些评价,难度指数普遍在四星以上!!!! 太难了! 因此收到了一个面试失败的粉丝回复,面试失败了 前几天小编整理了一些热度高的面试题现在分享给大家! 转发+关注后私信(学习)免费获取! GitHub最热Java面试总结 这份总结涵盖技术点有:Java基础,JVM,多线程高并发,redis,微服务,分布式,算法,操作系统,spring全家桶,MySQL,设计模式,计算机网络,Li
冲刺金九银十!GitHub 中文社区高热度的 Java 面试题被我整理好了!
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
63 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
99 5
|
9月前
|
设计模式 算法 NoSQL
冲刺金九银十!GitHub中文社区秋招趋势最热的面试题被我整理好了
面对已经过去的金三银四很多小伙伴都受到了很大的挫折! 最近收到一个小伙伴金三银四在阿里的面试流程完全被吊打,和我一起看看阿里都问了什么吧!
|
消息中间件 Dubbo NoSQL
经历72分钟的第一轮面试!让我们看看问的啥
经历72分钟的第一轮面试!让我们看看问的啥
|
存储 JSON 缓存
.NET高级工程师面试经历
.NET高级工程师面试经历
149 0
|
缓存 前端开发 JavaScript
蚂蚁、字节、滴滴面试经历总结(都已过)
在文章里我不仅会列出面试题,还会给到一些答题建议,个人能力有限,也不能保证我回答都正确,如果有错误,希望能纠正我。
243 0
蚂蚁、字节、滴滴面试经历总结(都已过)
|
前端开发 IDE Java
蚂蚁、字节、滴滴面试经历总结
vim 被誉为『编辑器之神』,与之同时代的 emacs 被誉为『神之编辑器』。可以看得出 vim 在编辑器的地位是很高的,得益于 vim 的指法,敲起代码来如行云流水。特别膜拜创始人创始出这么方便的敲代码的指法,这篇文章就是来带你入坑 vim 指法操作。
83 0
|
消息中间件 NoSQL 网络协议
字节跳动三面Java经历,砍下年薪50W的Offer,面试真题整理分享
应广大读者要求,今天开更一些大厂的面经和相关的面试干货,下面这份**最新字节跳动春招面经+笔记**带给大家。
119 0
字节跳动三面Java经历,砍下年薪50W的Offer,面试真题整理分享
|
前端开发 JavaScript 索引
vue社区之---前端面试(前端中的那些方法)
vue社区之---前端面试(前端中的那些方法)
161 0