.Net面试题一

1、进程和线程的区别是什么?

  答:https://www.cnblogs.com/renzhuang/articles/6733461.html
2、请列举ASP.Net页面之间传递值的几种方式?列出3种

  答:https://www.cnblogs.com/jhuang-com/p/5961513.html
3、请解释ASP.Net MVC开发框架,并说明使用MVC有哪些好处?

  答:总的来说MVC设计模式可以方便开发人员分工协作,提高开发效率,增强程序的可维护性和拓展性而且还利用Controller将Model与View分离,降低它们之间的耦合度。

  更快的服务器端处理和客户端呈现:MVC只简单地处理“模板”,而无需构建复杂的控件树,因此,无论是在服务器处理的时间,和客户端的呈现速度都会有所提高;MVC优点:1.大型开发的时候容易维护,扩展性很好。2.能够对HTML有完全的控制权限,对于前端来说很友好。3.能够进行单元测试,保证功能的实现。缺点:1.没有那么多的现成控件使用,开发效率相对较低(特别是对于菜鸟来说)2.对于大型数据的处理比较难,还是因为没有现成girdview控件。这个控件虽然生成的html结构异常复杂,但是对于处理大量而且复杂的数据来说是很不错的。不过一般网站是很少有这种大量且复杂的数据,很多菜鸟都是用这个大炮来打蚊子,浪费且低效率。对于网站开发来说这个控件应该不推荐使用。

  简单地讲:C# 是语言, asp.net, asp.net mvc,winform,wpf,wcf 都是框架

  既然是框架,则都提供了一些框框(规范,标准,接口)等

  开发时按这些框框走,就实现了我们想要的结果

  但是不同的框架提供的框框是不一样的,

  是圆的框我们就得把自己削成圆的往里套,

  是方的框我们就得把自己吃成胖子往里套,

  当然,不管是圆框还是方框,都能达到目的

  winform 走的是 win32 gdi 的路子,wpf走的是Directx 的路子,

  但他们都能实现桌面程序的界面效果

  asp.net 走的是页面周期,服务端控件Render成HTMl的路子,

  asp.net mvc 走的是路由到不同的View的路子,但是他们都能实现Web 站点的功能

4、请写出一条sql语句,去除表A中的第31到40条记录(SQLSERVER以自增长ID为逐渐,注意:ID可能不是连续的)

  select * from (select ROW_NUMBER() OVER(ORDER BY ID) as rowid from A)T where T.rowid>30 and rowid<=40 

  select top 10 * from A where ID not in(select top 30 ID from Aorder by ID) order by ID

  select top 40 * from A  except select top 30 * from A

  except 返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值)。

  intersect 返回 两个结果集的交集(即两个查询都返回的所有非重复值)。

5、SQL行变列和列转行

  答:在做数据统计的时候,行转列,列转行是经常碰到的问题。case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强

  行专列测试数据

CREATE  TABLE [StudentScores]
(
   [UserName]         NVARCHAR(20),        --学生姓名
   [Subject]          NVARCHAR(30),        --科目
   [Score]            FLOAT,               --成绩
)

INSERT INTO [StudentScores] SELECT '张三', '语文', 80
INSERT INTO [StudentScores] SELECT '张三', '数学', 90
INSERT INTO [StudentScores] SELECT '张三', '英语', 70
INSERT INTO [StudentScores] SELECT '张三', '生物', 85
INSERT INTO [StudentScores] SELECT '李四', '语文', 80
INSERT INTO [StudentScores] SELECT '李四', '数学', 92
INSERT INTO [StudentScores] SELECT '李四', '英语', 76
INSERT INTO [StudentScores] SELECT '李四', '生物', 88
INSERT INTO [StudentScores] SELECT '码农', '语文', 60
INSERT INTO [StudentScores] SELECT '码农', '数学', 82
INSERT INTO [StudentScores] SELECT '码农', '英语', 96
INSERT INTO [StudentScores] SELECT '码农', '生物', 78

行专列

select * from [StudentScores] /*数据源*/
AS P
pivot 
(
    sum(Score/*行转列后 列的值*/) FOR 
    p.Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/)
) AS T

效果

 列转行测试数据

CREATE TABLE ProgrectDetail
(
    ProgrectName         NVARCHAR(20), --工程名称
    OverseaSupply        INT,          --海外供应商供给数量
    NativeSupply         INT,          --国内供应商供给数量
    SouthSupply          INT,          --南方供应商供给数量
    NorthSupply          INT           --北方供应商供给数量
)

INSERT INTO ProgrectDetail
SELECT 'A', 100, 200, 50, 50
UNION ALL
SELECT 'B', 200, 300, 150, 150
UNION ALL
SELECT 'C', 159, 400, 20, 320
UNION ALL

列转行

select P.ProgrectName,P.Supplier,P.SupplyNum
from 
(
    select ProgrectName, OverseaSupply, NativeSupply,
           SouthSupply, NorthSupply
     from ProgrectDetail
)T
unpivot
(
    SupplyNum FOR Supplier IN
    (OverseaSupply, NativeSupply, SouthSupply, NorthSupply )
) P

行专列case语句实现

select * from [StudentScores]
-- 使用case when (SQL2000以上)
select [UserName],
max(case 课程 when '语文' then 分数 else 0 end)语文,
max(case 课程 when '数学' then 分数 else 0 end)数学,
max(case 课程 when '英语' then 分数 else 0 end)英语,
max(case 课程 when '生物' then 分数 else 0 end)生物
from [StudentScores]
group by [UserName]

效果

6、1、1、2、3、5、8、13、21、34,求第30位数是多少,用递归算法实现。

  答:斐波纳契数列(Fibonacci Sequence),又称黄金分割数列。在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,从算法的角度利用递归和非递归两种方式实现:

  递归

private static  long Fibonacci(int n)
{
  long result = 1;//当n<=2时都返回1
  if(n>2)//当n>2时,进行递归计算
  {
    result= Fibonacci(n-1)+Fibonacci(n-2);
  }
  return result;
}

  循环

private static long Fibonacci(int n)
        {
            long result = 1; //当n<=2时都返回1
            if (n > 2)          //当n>2时,利用循环计算
            {
                long first = 1;
                long second = 1;              
                int i = 0;
                n = n - 2;      //每次当然要减少两次循环
                while (i < n)
                {
                    first = second;
                    second = result;
                    result = first + second;
                    i++;
                }
            }
            return result;
        }


7、什么是匿名方法?请写一段代码

  答:匿名方法(Anonymous methods)匿名方法是没有名称只有主体的方法。 提供了一种传递代码块作为委托参数的技术。在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。

  匿名方法概念实例:

using System;

delegate void NumberChanger(int n);
namespace DelegateAppl
{
    class TestDelegate
    {
        static int num = 10;
        public static void AddNum(int p)
        {
            num += p;
            Console.WriteLine("Named Method: {0}", num);
        }

        public static void MultNum(int q)
        {
            num *= q;
            Console.WriteLine("Named Method: {0}", num);
        }
        public static int getNum()
        {
            return num;
        }

        static void Main(string[] args)
        {
            // 使用匿名方法创建委托实例
            NumberChanger nc = delegate(int x)
            {
               Console.WriteLine("Anonymous Method: {0}", x);
            };
            
            // 使用匿名方法调用委托
            nc(10);

            // 使用命名方法实例化委托
            nc =  new NumberChanger(AddNum);
            
            // 使用命名方法调用委托
            nc(5);

            // 使用另一个命名方法实例化委托
            nc =  new NumberChanger(MultNum);
            
            // 使用命名方法调用委托
            nc(2);
            Console.ReadKey();
        }
    }
}

输出的结果为:
Anonymous Method: 10
Named Method: 15
Named Method: 30

  上列匿名方法是通过使用delegate关键字创建委托实例来声明的。例如:

delegate void NumberChanger(int n);//声明一个有参的委托
...
NumberChanger nc = delegate(int x)
{
    Console.WriteLine("Anonymous Method: {0}", x);
};

代码块

Console.WriteLine("Anonymous Method: {0}", x);

是匿名方法的主体。

  委托可以通过匿名方法调用,也可以通过命名方法调用,即,通过向委托对象传递方法参数。例如:

nc(10);

8、列出几种使用过的工作流产品和框架, 并简要对比他们的差异。

  答:java开发语言的jbpm、Apache ODE、Enhydra Shark、Bonita、Open Business Engine、Eclipse JWT

  .Net的Windows Workflow Foundation、NetBPM、CCFlow,参考

  模拟公司的请假流程,

这个典型的流程假设:公司有两级领导,一级为主管Chief,一级为老板Boss

场景描述:

  在某公司中,部门员工休假需要主管Chief的批准。 
  如果休假天数大于10天,则 在部门主管同意后,还必须老板Boss批准。 
  如果是部门主管请假则直接提交老板批准。 
  在休假被批准之前,申请人可以撤销休假申请。 
  申请批准后,对休假天数进行修改(也可以是其他业务数据处理)。 每次休假申请结束之 后,不管通过未通过或是否取消,都必须记录下来。 
  流程结束时,系统要把请假的结果信息Email给申请人。

  对于大于10天的申请,如果部门主管已批准同意而上级主管还未批准,这时申请人撤销申请后,系统应发Email通知部门主管申请已撤销。

9、列出你所了解的设计模式,说一说实用设计模式可能带来的好处,并尝试用代码写一个例子。

   答:是对面向对象设计中反复出现的问题的解决方案。是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

  https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F

猜你喜欢

转载自www.cnblogs.com/hofmann/p/10873339.html