惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
A
About on SuperTechFans
博客园 - Franky
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
Last Week in AI
Last Week in AI
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
V
V2EX
G
Google Developers Blog

博客园 - 风的影

微服务 口试常见题 SQL 大数据查询如何进行优化? 事件和委托的区别 虚方法(virtual)和抽象方法(abstract)的和接口(interface)的区别 高并发的秒杀 C#算法 口试C#概念 口试Linq题 口试大数据及大并发问题 笔试题多线程 SQL笔试基础 口试基础 笔试基础知识 Asp.net项目从Vs2003转换到Vs2005的常见问题大全及解决方法 烦人的网页iframe去除 经典sql注入教程 C# 相当于ASP里Eval中的计算公式的方法(超简单的方法) 自己写的后台静态权限验证类
笔试代码考查
风的影 · 2018-07-30 · via 博客园 - 风的影

写出以下代码的输出结果

  class A
  {
    public A()
    {
      i = 3;
    }

    public int i;

    public int Calc(int j)
    {
      return i + j * j;
    }
  }
  class B : A
  {
    new public int i;
    new public int Calc(int j = 10)
    {
      if (j < 0)
      {
        return i + base.Calc(j);
      }
      return i + j;
    }

    public int? compare(int l, int n)
    {
      if (l > n)
      {
        return 1;
      }
      else if (l < n)
      {
        return -1;
      }
      else
      {
        return null;
      }
    }

  }

static void Main(string[] args)
{

  B b = new B() { i = 2 };        
  Console.WriteLine(b.i);        2
  Console.WriteLine(((A)b).i);      3
  Console.WriteLine(b.Calc());      12
  Console.WriteLine(b.Calc(1));      3
  Console.WriteLine(b.Calc(-1));      6
  Console.WriteLine(((A)b).Calc(3));    12

}

考点:考查继承类中new的第二种用法,new的三种用法分别是:第一种 创建对象、调用构造函数;第二种 是作为修饰符,显示隐藏继承于基类的继承成员;第三种 是用在泛型中添加类型的约束

递归或冒泡排序

//一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。
public static int foo(int n)
  {
    if (n < 0)
    {
      return 0;
    }
    else if (n <= 2)
    {
      return 1;
    }
    else
    {
      return foo(n - 1) + foo(n - 2);
    }
  }

//冒泡排序

public static void BubbleSort(int[] arr)
{
  for (int i = 0; i < arr.Length-1; i++)
  {
    for (int j = i+1; j < arr.Length; j++)
    {
      if (arr[j] < arr[i])
      {
        arr[i] = arr[i] + arr[j];
        arr[j] = arr[i] - arr[j];
        arr[i] = arr[i] - arr[j];
      }
    }
  }
}

写法很多不写太多答案了,考查新手编码基础,逻辑性。注意算法的时间复杂度优化,O(n2)

var b=new B();b.PrintFields();产生什么输出?

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);
  }
}

答案:x=1,y=0

   x=1,y=-1

考点:这道题就是考查类继承时执行的顺序,及继承类中override作用,在new B()时,先执行了int x = 1;int y;再执行B的构造函数,未进构造函数前会先是会先创建父类A对象构造函数,这时会执行PrintFields();方法,因为PrintFields方法为virtual 虚拟方法,在子类override 中重写的该方法,所以实际执行的为B中的PrintFields方法。为什么Y=0?这是因为调用的是父类方法,子类的中的Y还没初始化,默认值为0,这时候才会执行到B的构造函数,赋值了y = -1;,在b.PrintFields()时,自然就是x=1,y=-1了。

下面的代码输出结果

using System;

class A

{

public static int X;

static A(){

X=B.Y+1;

}

}

class B

{

public static int Y=A.X+1;

static B(){}

static void Main(){

Console.WriteLine(“X={0},Y={1}“,A.X,B.Y);

}

}

产生的输出结果是什么?

x=1,y=2

写出程序的输出结果

class Class1 {

private string str = "Class1.str";

private int i = 0;

 static void StringConvert(string str) {

str = "string being converted.";

 }

static void StringConvert(Class1 c) {

c.str = "string being converted.";

 }

static void Add(int i) {

i++;

}

static void AddWithRef(ref int i) {

i++;

}

static void Main() {

int i1 = 10;

 int i2 = 20;

 string str = "str";

Class1 c = new Class1();

Add(i1);

 AddWithRef(ref i2);

 Add(c.i);

 StringConvert(str);

StringConvert(c);

 Console.WriteLine(i1);

 Console.WriteLine(i2);

 Console.WriteLine(c.i);

 Console.WriteLine(str);

 Console.WriteLine(c.str);

 }

}

答案:10  21  0  str  string being converted.

考点:更改的是是局部变量的值。

写出程序的输出结果

public abstract class A

{

public A()

{

Console.WriteLine('A');

 }

public virtual void Fun()

{

Console.WriteLine("A.Fun()");

}

}

public class B: A

{

public B()

{

Console.WriteLine('B');

 }

public new void Fun()

{

Console.WriteLine("B.Fun()");

}

public static void Main()

{

A a = new B();

a.Fun();

}

}

答案:A  B  A.Fun()

考点:抽像类、虚方法、继承、显示隐藏

A a = new B();创建B对象时先创建继承的A对象,先执行A构造函类,再执行B构造函数,输出A  B

a.Fun();注意这个a是A的对象,虽然是以new B();创建,但声明的是A对象,执行Fun()时,会执行A的方法(new 是显式隐藏从基类继承的成员,但A类执行还是A的虚方法)

写出程序的输出结果

 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 

考点:分清楚是哪个对象,调的是哪个方法,  a.Fun2(b)时,调的是A类的public void Fun2(A a),传的参数是b,此时A a实际是B的对象,a.Fun1(1)也就是B类里的Fun1(1),B类里代码是base.Fun1 (i + 1);又调的A类的Fun1(2),输出2,Fun1(5);是直接调的A类自己的,输出5, b.Fun2(a);同理,调的是B类继承的A类的public void Fun2(A a),传的参数是a,此时A a实际是A的对象,a.Fun1(1)也就是A类里的Fun1(1),输出1,Fun1(5);是直接调的B类复写的,输出6