C# 题目

 

计算机组成原理

 

1、为什么计算的补数(补码)=反码+1?

 

题目 http://blog.zhaojie.me/2011/03/my-interview-questions-for-dotnet-programmers.html

1、考察对常量和自读字段 初始化过程的了解

         

 static readonly int A = C * D;

          static readonly int B = 10;

          const int C = 5;

          static readonly int D = B * C;

          static void Main(string[] args)

          {

              Console.WriteLine("{0},{1},{2},{3}", A, B, C, D);

              Console.ReadKey();

          }

 

      问:A、B、C、D数值是多少?

 

 

扩展 1.1、 考察对类初始化过程的了解

 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(string[] args)
        {

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

    }

X =? Y=?

 

扩展1.2 仔细看题目 考察对类初始化过程的了解

    class A
    {
        public static int X;
        static A()
        {
            X = B.Y + 1;
        }
    }
    class B
    {
        public static int Y = A.X + 1;
        static B() { Y = A.X + 4; }
       
    }
    class Program
    {
        static void Main(string[] args)
        {

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

    }

X =? Y=?

扩展1.3 仔细看题目 考察对类初始化过程的了解

String s="a"+"b"+"c",到底创建了几个对象?

 

题目2 考察对匿名方法的了解:

  class Program
    {
        private delegate void TestDelegate();
 
        static void Main(string[] args)
        {
            TestDelegate[] delegates = new TestDelegate[2];

            int outside = 0;

            for(int i = 0; i < 2; i++)
            {
                int inside = 0;

                delegates[i] = delegate
                {
                    Console.WriteLine("({0},{1})", outside, inside);
                    outside++;
                    inside++;
                };
            }

            delegates[0]();
            delegates[0]();
            delegates[0]();

            delegates[1]();
            delegates[1]();

            Console.ReadKey();
        }
    }

输出值是多少:答案https://blog.csdn.net/Rvng2014/article/details/101413582

题目3考察对匿名方法的了解:如何修改让他出现预期效果 期望输出是 0,2,4,6,8

  List<Func<int>> actions = new List<Func<int>>();

            int variable = 0;
            while (variable < 5)
            {
                delegates[variable] = delegate
                {
                    Console.WriteLine("({0} )", outside);
                    outside++;
                     
                };
                actions.Add(() => variable * 2);
                ++variable;
            }

            foreach (var act in actions)
            {
                Console.WriteLine(act.Invoke());

            }

这个程序 运行结果是什么:如何修改

答案:https://www.yht7.com/news/160155

题目4、输出结果是什么

public class Test
{
    public readonly struct Point
    {
        public Point(int x, int y) => (X, Y) = (x, y);
    
    public int X { get; }
    public int Y { get; }
    }
    static Point Transform(Point point) => point switch
    {
        { X: 0, Y: 0 } => new Point(0, 0),
        { X: var x, Y: var y } when x < y => new Point(x + y, y),
        { X: var x, Y: var y } when x > y => new Point(x - y, y),
        { X: var x, Y: var y } => new Point(2 * x, 2 * y),
    };

    static void Main()
    {
        Point i = new(1, 0);
        Console.WriteLine(Transform(i)); 


    }

 

}

 

考察对逆变和协变的理解


interface IFoo<in T>

{


}

interface IBar<in T>

{


    void Test(IFoo<T> foo); //对吗?

}

 

答案:在编译时和不报错,但是这个接口不错继承。

 

题目5、有了 委托字段/属性,为什么还需要事件呢?

答案:https://www.cnblogs.com/cdaniu/p/15367766.html

 

题目6、事件参数EventArgs.Empty字段有什么意义?是什么意思?

答案:https://www.cnblogs.com/cdaniu/p/15382744.html

题目7、 内存泄漏的一个常见来源有哪些

答案:1、事件处理器,会延长对象的声明周期,导致内存泄漏。
           2、在匿名方法中捕获类成员。
           3、静态变量 例如:让静态字段指向一个集合对象(因为)。因为静态字段的引用会一直存在,直到加载类型的AppDomain卸载为止。

https://zhuanlan.zhihu.com/p/141032986

 

题目8、字符串为什么做引用类型?为什么字符串赋值 ,做参数都和值类型一样。

题目9、考察多字符的理解

string a = new string(new char[] {'a', 'b', 'c'});
object o = String.Copy(a);
Console.WriteLine(object.ReferenceEquals(o, a));
String.Intern(o.ToString());
Console.WriteLine(object.ReferenceEquals(o, String.Intern(a)));

object o2 = String.Copy(a);
String.Intern(o2.ToString());
Console.WriteLine(object.ReferenceEquals(o2, String.Intern(a)));

输出结果是什么:

 9.1 扩展题目  考察对string 特性的了解

            string s = new string(new char[] { 'x', 'y', 'z' });
            Console.WriteLine(String.IsInterned(s) ?? "not interned");
            String.Intern(s);
            Console.WriteLine(String.IsInterned(s) ?? "not interned");
             Console.WriteLine(object.ReferenceEquals( String.IsInterned(new string(new char[] { 'x', 'y', 'z' })), s));
            

            //当最后一行代码为:
            Console.WriteLine(object.ReferenceEquals("xyz", s));
            //输出结果是什么

            //当最后一行代码为:
            Console.WriteLine(object.ReferenceEquals("x" + "y" + "z", s));
            //输出结果是什么

            //当最后一行代码为:
            Console.WriteLine(object.ReferenceEquals(String.Format("{0}{1}{2}", 'x', 'y', 'z'), s));
            //输出结果是什么

 9.2 扩展题目:考察委托的相等性

Action a = () => Console.WriteLine("a");
Action b = () => Console.WriteLine("a");

Console.WriteLine(a == b);  
Console.WriteLine(a + b == a + b);  
Console.WriteLine(b + a == a + b);  

 輸出結果是:

 

 9.3 扩展题目:对== 和 equals的了解

 int i1 = 8;
 int i2 = 8;
 bool bo5 = ((object)i1).Equals(i2); 
 Console.WriteLine(bo5);
 bool bo2 = (object)i1 == (object)i2;
 Console.WriteLine(bo2);

输出的结果是:

10、为什么struct 实例字段不能初始值设定

11、引用类型和值类型是针对编译时还是运行时?

12、软件是如何实现跨平台的?

13、Win32平台是什么与.net平台有关系

 14、写出x=? y=? a=? b=?组合的所有可能出现的结果。主要考察队volatile关键字和内存屏障、重排序的的应用

using System;
using System.Threading;
using System.Threading.Tasks;

namespace MemoryBarriers
{
    class Program
    {
        static volatile int x, y, a, b;
        static void Main()
        {
            while (true)
            {
                var t1 = Task.Run(Test1);
                var t2 = Task.Run(Test2);
                Task.WaitAll(t1, t2);
                if (a == 0 && b == 0)
                {
                    Console.WriteLine("{0}, {1}", a, b);
                }
                x = y = a = b = 0;
            }
        }

        static void Test1()
        {
            x = 1;
           a = y;
        }

        static void Test2()
        {
            y = 1;       
            b = x;
        }
    }
}

 15、指针和句柄有啥区别?

 16、异步操作一定要开辟新线程?

17、finally内的代码一定会执行吗?

18、如何修改 ,以下代码,完成任务

目的是:每个2s继续一次垃圾回收
发生错误:只执行一次
原因:t被垃圾回收了。 当第一次执行垃圾回收时候GC发现 t 声明后再无引用。所以就被回收了。

源代码

public static void Main() {   
    Timer t = new Timer(TimerCallback, null, 0, 2000);  
    Console.ReadLine();  
    t = null;  
}

19、为什么我们需要析构函数?

 20、AOT,JIT是什么?

 21、元数据在.net 中的应用有哪些

22、数组初始值设定项 例如:A[] a=new A{a,s,f}。为什么要省略 new A从而变成A[] a={a,s,f}

 23、为什么C# jsonserializeOption中默认不识别尾部逗号、默认不包含字段、默认不skip注释?

24、xml为什么要写<?xml version='1.0'?>

25、Encoding.UTF8 与 new UTF8Encoding(false) 有什么区别

26、数组的元素访问时间复杂度是多少,删除、插入数组元素的复杂度是多。为什么数组可以通过索引来访问?

27、算法的时间复杂度是多少

void loss(int n){
int i=1;
while(i<=n){
i=I*2;
}
}

 28、关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少。 

29、

二、这货还是不是平衡二叉树?

判断一棵平衡二叉树(AVL树)有如下必要条件:

条件一:必须是二叉搜索树。
条件二:每个节点的左子树和右子树的高度差至多为1。

在这里插入图片描述
在这里插入图片描述

30、为什么要发明红黑树?

31、最好的排序法是谁

32、什么是堆

堆是完全二叉树,虽然的典型实现方法数组,但从逻辑的角度上讲,实际上一种树结构。

小根堆:完全二叉树中,根≤左、右
大根堆:完全二叉树中,根≥左、右

33、为啥减法运算可以转化成加法运算,原理是什么?

34、以下结构体的内存是多少?

 struct MyStruct
{
    int a;
    decimal b;//decimal由4int组成,因此它不是最长的,double才是最长的。
    double c;

}

 35、结构体的内存对齐规则是什么?

36、为什么依赖比关联的耦合度低?

37、C# 为什么不支持多重继承?

38、判断偶数?

posted @ 2021-09-28 14:22  小林野夫  阅读(155)  评论(0编辑  收藏  举报
原文链接:https://www.cnblogs.com/cdaniu/