zoukankan      html  css  js  c++  java
  • [转] .NET出现频率非常高的笔试题

    又到了金三银四的跳槽季,许多朋友又开始跳槽了,这里我简单整理了一些出现频率比较高的.NET笔试题,希望对广大求职者有所帮助。

    一、.net基础

    1、  a=10,b=15,请在不使用第三方变量的情况下,把a、b的值互换

    答:小学算法,加法交换律和加法结合律
    int a=a+b; int b=a-b;int a=a-b;

    2、session喜欢丢值且占内存,Cookis不安全,请问用什么办法代替这两种原始的方法

    答:redis 或者 memcache。当然,微软也提供了解决方案。iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式
    存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

    3、如何处理几十万条并发数据?

    答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

    4、62-63=1 等式不成立,请移动一个数字(不可以移动减号和等于号),使得等式成立,如何移动?

    答案:62移动成2的6次方

    5、<%# %> 和 <% %> 有什么区别?

    答:<%# %>表示绑定的数据源,<% %>是服务器端代码块

    6、ASP.Net页面生命周期简单描述

    每个页面的生命周期为用户的每一次访问,也就是说每一次客户端与服务器之间的一个往返过程.全局变量的生命周期在此之间.
    
    1. Page_Init();
    2. Load ViewState and Postback data;
    3. Page_Load();
    4. Handle control events;
    5. Page_PreRender();
    6. Page_Render();
    7. Unload event;
    8. Dispose method called;

    7、写出程序的输出结果

     1 public abstract class A
     2 {
     3 public A()
     4 {
     5 Console.WriteLine(‘A’);
     6 }
     7 public virtual void Fun()
     8 {
     9 Console.WriteLine(“A.Fun()”);
    10 }
    11 }
    12 public class B: A
    13 {
    14 public B()
    15 {
    16 Console.WriteLine(‘B’);
    17 }
    18 public new void Fun()
    19 {
    20 Console.WriteLine(“B.Fun()”);
    21 }
    22 public static void Main()
    23 {
    24 A a = new B();
    25 a.Fun();
    26 }
    27 }
    A
    B
    A.Fun()

    8、 写出程序的输出结果:

    public class A
    {
    public virtual void Fun1(int i)
    {
    Console.WriteLine(i);
    }
    public void Fun2(A a)
    {
    a.Fun1(1);
    Fun1(5);
    }
    }
    
    public class B : A
    {
    public override void Fun1(int i)
    {
    base.Fun1 (i + 1);
    }
    public static void Main()
    {
    B b = new B();
    A a = new A();
    a.Fun2(b);
    b.Fun2(a);
    }
    }
    2
    5
    1
    6

    9、在下面的例子里

     

    class A
       {
           public A()
           {
               PrintFields();
           }
           public virtual void PrintFields() { }
       }
     
       class B : A
       {
           int x = 1;
           int y;
           public B()
           {
               y = -1;
           }
           public override void PrintFields()
           {
               Console.WriteLine("x={0},y={1}", x, y);
           }
       }
     
       class Program
       {
           public static void Main()
           {
               B b = new B();
           b.PrintFields() Console.ReadKey(); } }

     

    当使用new B()创建B的实例时,产生什么输出?(var b=new B();b.PrintFields())

    答:X=1,Y=0;x= 1 y = -1   如果只是 var b=new B();的话 答案是 X=1,Y=0

    10、如何提高.NET的性能

    1. 使用异步方式调用Web服务和远程对象
    只要有可能就要避免在请求的处理过程中对Web服务和远程对象的同步调用,因为它占用的是的ASP.NET 线程池中的工作线程,这将直接影响Web服务器响应其它请求的能力。
    
    2. 使用适当的Caching策略来提高性能
    
    3. 判断字符串,不要用""比较。
    //避免
    if(strABC!=null && strABC!="")
    {}
    //推荐
    if(!string.IsNullOrEmpty(strABC))
    {}
    
    4. 页面优化
    5.用完马上关闭数据库连接
    6. 尽量使用存储过程,并优化查询语句
    7. 只读数据访问用SqlDataReader,不要使用DataSet
    ……….

    11、说出一些数据库优化方面的经验?

    索引内部原理:想象成Dictionary,插入、删除、更新的速度慢了,加上索引也多占用了空间,查询的速度快了。加上索引以后速度提升非常明显。
    
    (1)在经常检索的字段上(select * from Person where Name=@Name)使用索引提高查询速度。
    
    (2)select中只列出必要的字段,而不是*。
    
    (3)避免隐式类型转换造成的全表扫描,在索引上使用函数也会造成全表扫描(因为索引只是为字段建立的,一旦使用表达式或者函数,那么索引就是失效了,当然也可以使用“函数索引”、
    “表达式索引”解决这个问题),使用索引不一定能提高查询速度。 (4)避免在索引列上使用计算(where Name+'A'=@MyName) ......

    二、程序设计

    1.请编程实现一个冒泡排序算法?

    Int[] arrAge = new int[5]; //给数组元素赋初始值
    For(int i=0; i<5; i++)
    {
        Int intTemp = 0;
        For(int j=i+1; j<5; j++)
        {
           If(arrAge[i]<arrAge[j])
           {
               intTemp = arrAge[i];
               arrAge[i] = arrAge[j];
               arrAge[j] = intTemp;
           }
        }
    }

    2. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。

      public class MainClass
               {
                      public static void Main()
                      {
                      Console.WriteLine(Foo(30));
                      }
                      public static int Foo(int i)
                      {
                      if (i <= 0)
                      return 0;
                      else if(i > 0 && i <= 2)
                      return 1;
                      else return Foo(i -1) + Foo(i - 2);
                      }
               } 

    3、编写一个单例(Singleton)类。

    public FileManager
    {
         private FileManager(){}
         public static FileManager Instance = new FileManager();
    }

    4. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
    要求: 1.要有联动性,老鼠和主人的行为是被动的。
    2.考虑可扩展性,猫的叫声可能引起其他联动效应。

    要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
    评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
    <2>从Mouse和Master中提取抽象(5分)
    <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

    设计方法一

    public interface Observer
    {
    void Response(); //观察者的响应,如是老鼠见到猫的反映
    }
    public interface Subject
    {
    void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象—老鼠
    }
    public class Mouse : Observer
    {
    private string name;
    public Mouse(string name, Subject subj)
    {
    this.name = name;
    subj.AimAt(this);
    }
    
    public void Response()
    {
    Console.WriteLine(name + ” attempt to escape!”);
    }
    }
    public class Master : Observer
    {
    public Master(Subject subj)
    {
    subj.AimAt(this);
    }
    
    public void Response()
    {
    Console.WriteLine(“Host waken!”);
    }
    }
    
    public class Cat : Subject
    {
    private ArrayList observers;
    public Cat()
    {
    this.observers = new ArrayList();
    }
    public void AimAt(Observer obs)
    {
    this.observers.Add(obs);
    }
    public void Cry()
    {
    Console.WriteLine(“Cat cryed!”);
    foreach (Observer obs in this.observers)
    {
    obs.Response();
    }
    }
    }
    class MainClass
    {
    static void Main(string[] args)
    {
    Cat cat = new Cat();
    Mouse mouse1 = new Mouse(“mouse1″, cat);
    Mouse mouse2 = new Mouse(“mouse2″, cat);
    Master master = new Master(cat);
    cat.Cry();
    }
    }
    View Code

    //———————————————————————————————
    设计方法二: 使用event — delegate设计..

    public delegate void SubEventHandler();
    public abstract class Subject
    {
    public event SubEventHandler SubEvent;
    protected void FireAway()
    {
    if (this.SubEvent != null)
    this.SubEvent();
    }
    }
    public class Cat : Subject
    {
    public void Cry()
    {
    Console.WriteLine(“cat cryed.”);
    this.FireAway();
    }
    }
    public abstract class Observer
    {
    public Observer(Subject sub)
    {
    sub.SubEvent += new SubEventHandler(Response);
    }
    public abstract void Response();
    }
    public class Mouse : Observer
    {
    private string name;
    public Mouse(string name, Subject sub) : base(sub)
    {
    this.name = name;
    }
    public override void Response()
    {
    Console.WriteLine(name + ” attempt to escape!”);
    }
    }
    public class Master : Observer
    {
    public Master(Subject sub) : base(sub){}
    public override void Response()
    {
    Console.WriteLine(“host waken”);
    }
    }
    class Class1
    {
    static void Main(string[] args)
    {
    Cat cat = new Cat();
    Mouse mouse1 = new Mouse(“mouse1″, cat);
    Mouse mouse2 = new Mouse(“mouse2″, cat);
    Master master = new Master(cat);
    cat.Cry();
    }
    }
    View Code

    三、数据库操作

    1、数据库查询正表变横标,横表变正表

    2、参考 走向面试之数据库基础:一、你必知必会的SQL语句练习-Part 2

    3、排序

      

    数据显示为

    empid       deptid      salary
    ----------- ----------- ---------------------------------------
    1           10          5500.00
    2           10          4500.00
    3           20          1900.00
    4           20          4800.00
    5           40          6500.00
    6           40          14500.00
    7           40          44500.00
    8           50          6500.00
    9           50          7500.00

    需求:根据部门分组,显示每个部门的工资等级

    预期结果:

    empid       deptid      salary                                  rank
    ----------- ----------- --------------------------------------- --------------------
    1           10          5500.00                                 1
    2           10          4500.00                                 2
    4           20          4800.00                                 1
    3           20          1900.00                                 2
    7           40          44500.00                               1
    6           40          14500.00                               2
    5           40          6500.00                                 3
    9           50          7500.00                                 1
    8           50          6500.00                                 2

    SQL脚本:

    SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

    四、IQ和逻辑推理

    结语

    祝愿所有跳槽或准备跳槽的朋友,都能够找到自己理想的工作,越跳越高,越来越好!

     
     
  • 相关阅读:
    leetcode--Populating Next Right Pointers in Each Node II
    leetcode—Populating Next Right Pointers in Each Node
    Pascal's Triangle II
    leetcode—pascal triangle
    leetcode—triangle
    October 23rd, 2017 Week 43rd Monday
    October 22nd, 2017 Week 43rd Sunday
    October 21st 2017 Week 42nd Saturday
    October 20th 2017 Week 42nd Friday
    October 19th 2017 Week 42nd Thursday
  • 原文地址:https://www.cnblogs.com/178mz/p/4481455.html
Copyright © 2011-2022 走看看