答:我们公司的ASP.NET 笔试题,你觉得难度如何

闲来无事,逛逛园子,发现有个面试题,觉得有意思。已自己的理解答来看看,不足之处,请多指教。

原文地址:http://www.cnblogs.com/leotsai/p/aspnet-tests-for-juniors.html

第1:请定义一个接口IQuestion,有【标题】和【问题种类】两个属性,其中【问题种类】是只读的枚举类型QuestionType,另外还有一个方法获取该问题的答案(无参,返回字符串)。

    public enum QuestionType
    {
        Text = 0,
        MultipleChoice = 1
    }
    interface IQuestion
    {
        string Title { get; set; }
        QuestionType QuestionType { get; }
        string GetAnswer();
    }

第2:请定义一个抽象类QuestionBase,实现第一题中的IQuestion接口,其中【问题种类】属性不在该抽象类中实现,而留在该抽象类的子类中实现;获取答案的方法有默认实现,返回字符串“默认答案”。

    public abstract class QuestionBase : IQuestion
    {
        public string Title { get; set; }
        public abstract QuestionType QuestionType { get; }
        public virtual string GetAnswer()
        {
            return "默认答案";
        }
    }

第3:请定义一个TextQuestion类,继承自第2题中的QuestionBase;获取答案的方法返回字符串”文本答案”。再定义一个MultipleChoiceQuestion类,继承自第2题中的QuestionBase;获取答案的方法返回字符串”单选答案”。

public class TextQuestion : QuestionBase
    {
        public override QuestionType QuestionType
        {
            get { return QuestionType.Text; }
        }
        public override string GetAnswer()
        {
            return "文本答案";
        }
    }

    public class MultipleChoiceQuestion : QuestionBase
    {
        public override QuestionType QuestionType
        {
            get { return QuestionType.MultipleChoice; }
        }
        public override string GetAnswer()
        {
            return "单选答案";
        }
    }

第4:假设有实体类Product定义如下:

  public class Product
  {
      public string Name { get; set; }
      public string IsDeleted { get; set; }
  }

现在有一个方法从IQueryable<Product>中获取没有删除的Product列表,该方法实现如下:

  public List<Product> GetActiveProducts(IQueryable<Product> query)
  {
      return query.WhereNotDeleted().ToList();
  }

请完成扩展方法:WhereNotDeleted

static class ProductExtend
    {
        public static IQueryable<Product> WhereNotDeleted(this IQueryable<Product> product)
        {
            if (product == null || product.Count() < 1) { return null; }
            else { return product.Where(p => p.IsDeleted == "1"); }
        }
    }

第5:假设数据库中有User和Income两张表如下,请仔细分析下方的示例数据,然后写出SQL得到右方的查询结果。

分析图片结果,可知,是User,Incom的联合查询,并根据月份合并了Amount的数据而得。

select name,[year],[month],sum([amount]) as income from [user]
left join [income] on [user].id=[income].userid
group by name,[year],[month] order by name

第6题:根据第5题的数据结构,有如下两个实体类和查询结果类的定义:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Income
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public decimal Amount { get; set; }
    public int Year { get; set; }
    public int Month { get; set; }
}

public class UserIncomeDto
{
    public string Name { get; set; }
    public int Year { get; set; }
    public int Month { get; set; }
    public decimal Income { get; set; }
}

现有一个方法用LINQ的方式得到第5题的查询结果,该方法定义如下:

public List<UserIncomeDto> GetUserIncomeDtos(IQueryable<User> users, IQueryable<Income> incomes)
{
     throw new NotImplementedException();
}

请完成该方法的实现。

public List<UserIncomeDto> GetUserIncomeDtos(IQueryable<User> users, IQueryable<Income> incomes)
        {
            //linq 实现
            var data = from o in
                           (
                       from p in users
                       join q in incomes
                       on p.Id equals q.UserId
                       select new { Name = p.Name, Year = q.Year, Month = q.Month, Income = q.Amount }
                                  )
                       group o by new { o.Name, o.Month, o.Year } into groupdata
                       select new UserIncomeDto
                       {
                           Name = groupdata.Key.Name,
                           Year = groupdata.Key.Year,
                           Month = groupdata.Key.Month,
                           Income = groupdata.Sum(p => p.Income)
                       };
            //泛型实现
            var datal = users.GroupJoin(incomes, p => p.Id, q => q.UserId, (p, q) => new UserIncomeDto
            {
                Name = p.Name,
                Year = q.Sum(o => o.Year),
                Month = q.Sum(o => o.Month),
                Income = q.Sum(o => o.Amount),
            });

            return data.ToList<UserIncomeDto>();
        }

第7:在ASP.NET MVC应用程序中,假设有如下HTML表单:

<form action="/admin/mobile/user/login">
     <input type="text" placeholder="username"/>
    <input type="password" placeholder="password"/>
     <input type="submit" value="login"/>
</form>

该表单同步提交的时候,如何修改以上HTML和路由配置以使该请求进入下方的action中:

public class UserController : Controller
{
    [HttpPost]
    public ActionResult Login(string username, string password)
    {
        throw new NotImplementedException();
    }
}

我所能想到的就是在html的form表单添加属性:method="post"

    <form action="/user/Login" method="post">
    <input type="text" placeholder="username" name="username" />
    <input type="password" placeholder="password" name="password" />
    <input type="submit" value="login" />
    </form>

第8题:请看如下代码:

public class Product
{
    public string Name { get; set; }
    public string Description { get; set; }

    public void Validate1()
    {
        if (string.IsNullOrEmpty(this.Name))
        {
            throw new Exception("please enter a name for the product");
        }
        if (string.IsNullOrEmpty(this.Description))
        {
            throw new Exception("product description is required");
        }
    }

    public void Validate2()
    {
        this.Require(x => x.Name, "please enter a name for the product");
        this.Require(x => x.Description, "product description is required");
    }
}

请完成Validate2方法中Require方法的定义和实现,从而使得Validate2与Validate1方法实现同样的效果。

public void Require(Expression<Func<Product, string>> query, string msg)
        {
            Func<Product, string> func = query.Compile();
            if (string.IsNullOrEmpty(func(this)))
            {
                throw new Exception(msg);
            }
        }

评价:这几个题目,咋一看感觉不难,仔细一作觉得不简单,平心而论,考的很实用,偏重于C#基础的应用。就当学习巩固知识了,好久没写,有些语法感觉手生,但是思路还在,随便写写, 不足之处请多指教。

时间: 2024-10-26 02:20:27

答:我们公司的ASP.NET 笔试题,你觉得难度如何的相关文章

关于完整解答Leo C.W博客中名为“我们公司的ASP.NET 笔试题,你觉得难度如何”的所有题目

关于完整解答Leo C.W博客中名为“我们公司的ASP.NET 笔试题,你觉得难度如何”的所有题目,请大家鉴定,不足之处,敬请指教! 第1到3题解答如下: public enum QuestionType { Text = 0, MultipleChoice = 1 } public interface IQuestion { string Title { get; set; } QuestionType Category { get; } } public abstract class Que

远光软件ASP.NET笔试题小汇总

ASP.NET笔试题是ASP.NET程序员面试必须经历的,一般会叫你填两个表 1个是你的详细信息表 1个是面试题答卷 两个都要注意反正面是否都有内容不要遗漏,如果考你机试一般也有两种,就是程序连接数据库或一些基本的算法(二分查找,递归等),公司一般都是测试你的基本功是否扎实,如果你基本功好就游刃有余不必紧张! 那么下面就是一些ASP.NET笔试题,希望对你的面试准备有帮助. 1.new有几种用法 第一种:new Class(); 第二种:覆盖方法 public new XXXX(){} 第三种:

我设计的ASP.NET笔试题,你会多少呢

本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态?如何实现? 第4题:什么是泛型约束? 第5题:Func<T>和Action<T>这2个类有何区别? 第6题:假设有实体类Product,下有bool IsDeleted属性,请用代码写出IQueryable<Product>的扩展方法WhereDeleted,从而过滤得到已

asp.net笔试题

1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内部和继承类中可以访问. public : 公共成员,完全公开,没有访问限制. internal: 在同一命名空间内可以访问. 2 .列举ASP.NET 页面之间传递值的几种方式. 答. 1.使用QueryString, 如....?id=1; response. Redirect()...

C++腾讯笔试题

#include <iostream> using namespace std; //产生任意范围的随机数. int Grial(int i,int j ) { int x = 0; while (!(x>=i && x<j)) { x = rand() % j; } return x; } int main() { cout << Grial(4, 100) << endl; return 0; } #include <iostrea

某公司笔试题解读(一)

上午刚参加完一公司的笔试,整个笔试给我的感受是,比较基础也很全面.但自己就是有好多不确定,好多需要时间思考,总之就是基础需要补回来.下面我就总结一下这次的笔试,举一反三地把相关知识点也梳理下. 一.最让我抓狂的SQL题 这种SQL题我以前做过好多次了,工作两年多用得少,SQL也写得不多,运用SQL的思维能力都下降了.题目大概是“有一张销售营业额表(t_sales),表结构如下: CREATE TABLE t_sales( t_person VARCHAR(20), #销售人员 t_item VA

ASP.NET的一套笔试题

1.    自定义控件如何做?答:自定义控件,跟HtmlControl或WebControl相似,编译后可以添加引用到工具栏里面,直接用鼠标拖动使用.2.界面的布局?答:表格,div3.程序的执行过程答:先被编译成中间语言,再翻译平台专用语言4.如何理解三层架构?答:MVC将程序功能分成三部分考虑:视图(VIEW,即可见的用户界面部分).模型(Model,程序的数据模型和业务逻辑部分),控制器(Controller,根据用户输入通知模型和视图进行相应更改).5.验证控件有哪些?具体用法?a)  

java各公司笔试题集1

IBM笔试题 注:IBM笔试题一小时之内完成,题目全部用英文描述,这里用中文表述 一.名词解释 1.Eclipse 2.J2EE 3.EJB 4.Ajax 5.Web service 二.找出以下代码问题 public class test{ public void print(String str){ char[] s=str: } } public class a{ public static void main(String [] args){ puts() } } 三.写出以下输出 pu

某支付公司笔试题二

题目:用java编写一段程序采用选择排序法对数组array = {25,15,42,16,12,36}进行由小到大排序. 1.选择排序法 该排序法的思想是每次从当前元素开始往后查找最小元素,将最小与当前元素进行位置互换.选择排序和冒泡排序相比优势在于交换次数减少. // 时间复杂度n(n-1)/2,即O(n^2) public static void selectSort(int[] array){ int k,tmp,len; len=array.length; for(int i=0;i<l