• 面试题(二)


    1.XML Web Service的原理:利用SOAP(简单对象访问协议)在http上执行远程方法的调用,也可以使用WSDL(web服务描述语言)来完成完整的描述web服务,然后用UDDI注册各个服务提供商提供的服务

    2..net Remoting 的工作原理: 服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置

    3.PDB是用于保存调试和项目状态信息的文件,在debug的时候将产生pdb文件,调试的时候应该放在和对应应用程序集相同的目录

    4.反射和序列化

       反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

      序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

    5.对象一致是指两个对象是同一对象,引用相同;对象相等是指两个对象的值相等,但引用不一定相同

      a.Equals(b)表示a与b一致, a==b表示a与b的值相等

    6.webconfig重要节点:

      system.web 系统配置

      compilation 动态调试编译设置

      customErrors 自定义错误信息设置

      authentication 身份验证,该节设置应用程序的身份验证策略

      authorization 授权,此节点设置应用程序的授权策略

    7.上下文对象是指HttpContext类的Current 属性,当我们在一个普通类中要访问内置对象(Response,Request,Session,Server,Appliction等)时就要以使用此对象

    8.数据库查询优化

     1、多态性,多种数据库兼容;
       2、支持翻页,支持查询总数,页码显示;
       3、能处理100万以上数据量;

    CREATE   PROCEDURE   dbo.LSP_SP_SelectElementByPage       
      @SelectFields   varchar(200),/*要查询的字段列表*/   
      @Condition   varchar(300),/*查询条件*/   
      @PageSize   int   =20,/*页面大小,默认为20*/   
      @PageNumber   int   =1/*页号,默认为第一页*/   
      /*@PageCount   int   out返回满足条件的总页数*/   
      AS   
      begin   
      declare   @count   int   
      select   @count   =count(*)   from   lsp_t_elementInfo   
      if(@count   %@PageSize=0)   
      set   @count   =   @count/@PageSize   
      else   
      set   @count   =   @count/@PageSize   +1   
      select   @count   PageCount   
      select   IDENTITY(int,1,1)   as   iid,ElementName,Type   into   #temptable   from   LSP_T_ElementInfo   
      select     *   from   #temptable   where   iid   between     @PageSize   *   (@PageNumber   -1)   and   @PageSize   *   @PageNumber   
      end   
      GO

    9.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。

    using System.Text; 
    StringBuilder sb = new StringBuilder(0, 10000); 
    string strABC = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; 
    string[] ABC = strABC.Split(','); 
    int len = ABC.Length; 
    Random rd = new Random(); 
    for (int i = 0; i < 10000; i++) 
    { 
      sb.Append(ABC[rd.Next(len)]); 
    }

    10.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复

    int[] intArr=new int[100]; 
    ArrayList myList=new ArrayList(); 
    Random rnd=new Random(); 
    while(myList.Count<100) 
    { 
    int num=rnd.Next(1,101); 
    if(!myList.Contains(num)) 
    myList.Add(num); 
    } 
    for(int i=0;i<100;i++) 
    intArr[i]=(int)myList[i];

    11.用C#写一段选择排序算法,要求用自己的编程风格。

    private int min; 
        public void xuanZhe(int[] list)//选择排序 
        { 
            for (int i = 0; i < list.Length - 1; i++) 
            { 
                min = i;
                for (int j = i + 1; j < list.Length; j++) 
                { 
                    if (list[j] < list[min])
    
                        min = j;
    
                }
                int t = list[min];
    
                list[min] = list[i];
    
                list[i] = t;
    
            } 
        }

    12.写一个函数计算当参数为N的值:1-2+3-4+5-6+7……+N

    public int returnSum(int n) 
        { 
            int sum = 0; 
            for (int i = 1; i <= n; i++) 
            { 
                int k = i; 
                if (i % 2 == 0) 
                { 
                    k = -k; 
                } 
                sum = sum + k; 
            } 
            return sum; 
        }

    方法二:

    对于1-2+3-4+5-6+7+...+n,可以分为2种情况,分别为:
     
    (1)当n是偶数时,1-2+3-4+5-6+7+...+n=(1-2)+(3-4)+(5-6)+……+[(n-1)-n]
                                      =-1×(n/2
                                      =-n/2
     
    (2)当n是奇数时,1-2+3-4+5-6+7+...+n=(1-2)+(3-4)+(5-6)+……+[(n-2)-(n-1)]+n
                                        =-1×(n-1)/2 +n
                                        =(n+1)/2
    因此,最终的算法如下:
    public static int CalculateCrossNumberSequence(int index)
    { 
     if (index <= 0)
      {
         return 0;
      }
         return index % 2 == 0 ? -index / 2 : (index + 1) / 2;
    }
    3、计算1-2+3-4+5-6+7+...+n的值 
      
    递归算法如下: 
      
      
            public static int CalculateNumberSequence(int index) 
            { 
                if (index <= 0) 
                { 
                    return 0; 
                } 
      
                return index % 2 == 0 ? CalculateNumberSequence(index - 1) - index : CalculateNumberSequence(index - 1) + index; 
            } 
      
    对于1-2+3-4+5-6+7+...+n,可以分为2种情况,分别为: 
      
    (1)当n是偶数时,1-2+3-4+5-6+7+...+n=(1-2)+(3-4)+(5-6)+……+[(n-1)-n] 
      
                                                                =-1×(n/2=-n/22)当n是奇数时,1-2+3-4+5-6+7+...+n=(1-2)+(3-4)+(5-6)+……+[(n-2)-(n-1)]+n 
      
                                                                =-1×(n-1)/2 +n 
      
                                                                =(n+1)/2 
      
    因此,最终的算法如下: 
      
      
            public static int CalculateCrossNumberSequence(int index) 
            { 
                if (index <= 0) 
                { 
                    return 0; 
                } 
      
                return index % 2 == 0 ? -index / 2 : (index + 1) / 2; 
            }

     

    13.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的id作为主键,注意:id可能不是连续的)

    解1:select top10 * from A  where id not in(select top30 id from A)
    
    解2:select top10 * from A where id >(select Max(id) from (select top30  id from A ) as A)

    14.有一张表tb有A、B、C三列?如何写一条sql语句实现如下功能:如果A>B 则显示A,B>C则选出B

    select case when a>b then a when b>c then b else c end as result from tb

    15.简单说明一下泛型的有什么好处?

       泛型:通过参数化类型来实现在同一份代码上操作多种数据类型;利用“参数化类型”将类型抽象化,从而实现灵活的复用

       好处是:类型安全、减少拆箱装箱、提高性能和质量、减少重复性的编程任务

    16.什么是sql注入?

       1' or 1=1

    1、计算数组1,1,2,3,5,8,13...第30位的值

    public static int CalculateFibonacciSequence(int index)
            {
                if (index <= 0)
                {
                    return 0;
                }
    
                if (index == 1 || index == 2)
                {
                    return 1;
                }
    
                return CalculateFibonacciSequence(index - 1) + CalculateFibonacciSequence(index - 2);
            }

    用递归算法来计算的话,有很多重复性的操作,采用数组相对来说,效率更高,最终算法如下:

    public static int CalculateFibonacciSequence(int index)
            {
                if (index <= 0)
                {
                    return 0;
                }
    
                if (index == 1 || index == 2)
                {
                    return 1;
                }
    
                int[] fibonacciArray = new int[index];
                fibonacciArray[0] = 1;
                fibonacciArray[1] = 1;
    
                for (int innerIndex = 2; innerIndex < fibonacciArray.Length; innerIndex++)
                {
                    fibonacciArray[innerIndex] = fibonacciArray[innerIndex - 1] + fibonacciArray[innerIndex - 2];
                }
    
                return fibonacciArray[index - 1];
            }

    对于斐波那契数列,通用公式为Fn=F(n-1)+F(n-2)(n>=2,n∈N*),直接循环计算一次就可以获得所需的值

    2、计算1+2+3+4+...+n的值

    递归算法如下:

    public static int CalculateNumberSequenceCount(int index)
            {
                if (index <= 0)
                {
                    return 0;
                }
    
                return CalculateNumberSequenceCount(index - 1) + index;
            }

    当数字(index)很大时,用上面的递归算法肯定是有问题的,我们看下最终的算法,如下所示:

    public static int CalculateNumberSequenceCount(int index)
            {
                if (index <= 0)
                {
                    return 0;
                }
    
                return index * (index + 1) / 2;
            }

    对于1+2+3+4+...+n,完全是高中数学的等差数列求和的一个特例。1+2+3+4+......+n等于(首项+末项)*项数/2,所以结果为n(n+1)/2 。这个完全可以不用递归来进行计算,公式套用一下就解决了。

    3、计算1-2+3-4+5-6+7+...+n的值

    递归算法如下: 

    public static int CalculateNumberSequence(int index)
            {
                if (index <= 0)
                {
                    return 0;
                }
    
                return index % 2 == 0 ? CalculateNumberSequence(index - 1) - index : CalculateNumberSequence(index - 1) + index;
            }

    对于1-2+3-4+5-6+7+...+n,可以分为2种情况,分别为:

    (1)当n是偶数时,1-2+3-4+5-6+7+...+n=(1-2)+(3-4)+(5-6)+……+[(n-1)-n]

                                                                =-1×(n/2)

                                                                =-n/2

    (2)当n是奇数时,1-2+3-4+5-6+7+...+n=(1-2)+(3-4)+(5-6)+……+[(n-2)-(n-1)]+n

                                                                =-1×(n-1)/2 +n

                                                                =(n+1)/2

    因此,最终的算法如下:

    public static int CalculateCrossNumberSequence(int index)
            {
                if (index <= 0)
                {
                    return 0;
                }
    
                return index % 2 == 0 ? -index / 2 : (index + 1) / 2;
            }
  • 相关阅读:
    机器学习(04)——常用专业术语
    C# 线程同步的三类情景
    线程同步的情景之三
    线程同步的情景之二
    线程同步的情景之一
    Thread.Sleep(0) vs Sleep(1) vs Yeild
    Visual Studio 实用扩展推荐
    为革命保护视力 --- 给 Visual Studio 换颜色
    免费的精品: Productivity Power Tools 动画演示
    如何扩展 Visual Studio 编辑器
  • 原文地址:https://www.cnblogs.com/ruishuang208/p/3884146.html
Copyright © 2020-2023  润新知