zoukankan      html  css  js  c++  java
  • C# 理论题型汇总

    一、

    1.C#中值类型和引用类型分别包含哪些,分别列举一下

    值类型:Sbyte, short, int, long, byte, ushort, char, ulong

    引用类型包括:数组,用户定义的类、接口、委托,object,字符串

    2.关键词ref和out的作用是什么?它们有什么区别?

    refout都是按地址传递,使用后都将改变原来参数的数值。

    ref 变量使用前要先声明同时要赋值,out可方法内赋值

    3.readonly和const有什么区别

    const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化 

    4.Asp.net mvc Action向View传值的方式有哪些?有什么区别?

    ViewData[""],ViewBag, Model,TempData[""],return View(data)

    5.Asp.net mvc中用过过滤器吗,一般用在哪些方面

     

    6.网站如何实现用户的唯一登录,类似QQ,同一个账号和密码,两人同时登录的时候,以后一个为有效,前面登录的自动退出。

    这块还没自己单独做过,修改用户表的sessionId值为当前浏览器session获取的getId()。每次登录进行验证sessionId是否一致。不一致则跳转登录页。

    7.JQuery的基本选择器包含哪些?JQuery中的$(this)和js中的this有什么区别?

    id选择器:$(“#id”)class选择器$(“.class”), parent > child(直系子元素), prev + next(下一个兄弟元素,等同于next()方法)等。

    $(this)是Jquery中的对象,而this是html中的元素,使用的形式不一样。

    8.使用过Vue吗?Vue和JQuery的区别是什么?

    9.使用过的数据库访问方式都有哪些?

    10.数据库中的锁有那几种?在实际工作中,你通过锁解决过哪些问题?

    悲观锁,乐观锁。主要解决用户大量并发的情况,并发使用过时间戳来判断是谁先进行操作,

    11.在实际工作中,哪些情况下数据库系统成为系统的瓶颈?你是如何解决的?

    12.使用过ABP框架吗?你是怎么理解和使用ABP框架的?ABP和三层结构的区别是什么?

    13.Asp.net mvc 中的模型验证使用过吗,进行哪些验证?

    14.HTTP请求的谓词都有哪些?在asp.net中如何限制HTTP请求谓词?

    15.使用过哪些前端组件?

    16.面向对象的三个基本特征

    面向对象的三个基本特征是:封装、继承、多态。

    17. 简述 private、 protected、 public、 internal 修饰符的访问权限。
    private : 私有成员, 在类的内部才可以访问。
    protected : 保护成员,该类内部和继承类中可以访问。
    public : 公共成员,完全公开,没有访问限制。

    internal: 在同一命名空间内可以访问。

    18.ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递

     ref传进去的参数必须在调用前初始化,out不必

    ref传进去的参数在函数内部可以直接使用,而out不可

    ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值

    应该说,系统对ref的限制是更少一些的。out虽然不要求在调用前一定要初始化,但是其值在函数内部是不可见的,也就是不能使用通过out传进来的值,并且一定要在函数内赋一个值。或者说函数承担初始化这个变量的责任。

    二、

    1.实现方法,List<int>有1万个随机整数,获取集合中每个整数的数量,并按照整数大小正序排序。

    List<int>对象包含1万个随机数,获取每个随机数出现的个数,并按照个数的大小排序,输出:随机数个数,随机数。

    static void Main(string[] args)
    {
        List<int> iList = new List<int>();
        for (int i = 0; i < 10000; i++)
        {
            iList.Add(new Random().Next());
        }
        List<int> list = new List<int> { 3, 5, 1, 4,100,98 };
        list = list.OrderBy(s => s).ToList();//升序排序
        list = list.OrderByDescending(s => s).ToList();//降序排序
        int iCount=iList.Distinct().Count();//去重
        Console.WriteLine();
    }

    2.现一个方法,按照顺序遍历指定范围的数字,例如1到100,如果数字是3的倍数,输出“android”,5的倍数输出“ios”,同时是3和5的倍数输出“android&ios”,其他数字原样输出

    static void Main(string[] args)
    {
        int i = 1;
        while (i <= 100)
        {
            if (i % 3 == 0)
            {
                if (i%5==0)
                {
                    Console.WriteLine("既是3的倍数,也是5的倍数==>"+i);
                    i++;
                    continue;
                }
                Console.WriteLine("3的倍数==>"+i);
                i++;
                continue;
            }
            if (i % 5 == 0)
            {
                Console.WriteLine("5的倍数==>" + i);
                i++;
                continue;
            }
            Console.WriteLine(i); 
            i++;
        }
        Console.ReadLine();
    }

    3.实现一个Reverse方法,作用是将array数组中,从begin位置到end位置之间的元素反序。例如,原数组内容[1,2,3,4,5,6],反转第2到4个位置的内容,结果:[1,4,3,2,5,6]

    static void Main(string[] args)
    {
        string a = ""; string b = "";
        int[] _array = new int[6] { 1, 2, 3, 4, 5, 6 };
        for (int i = 0; i < _array.Length; i++)
        {
            if (i == 0)
            {
                a = "" + _array[i];
            }
            else
            {
                a = a + "," + _array[i];
            }
        }
        Console.WriteLine(a);        
        RecursiveReverse(_array, 1, 3);
        for (int i = 0; i < _array.Length; i++)
        {
            if (i == 0)
            {
                b = "" + _array[i];
            }
            else
            {
                b = b + "," + _array[i];
            }
        }
    
        Console.WriteLine(b);
        Console.ReadLine();
    }
    
    private static void RecursiveReverse(int[] _array, int left, int right)
    {
        int temp = _array[left];
        _array[left] = _array[right];
        _array[right] = temp;
    }

    4.实现一个文章分享系统,用户在app中将文章分享到微信朋友圈,其他人浏览文章时会随机显示广告,根据广告的浏览量和点击率给分享者佣金。你会如何设计实现该系统?系统可能遇到的问题,以及解决方案是什么?

    5.一维数组和二位数组定义的方式

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
      
    namespace ConsoleApplication1  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                //一维数组定义与初始化  
                int[] one1 = new int[] {3,2,1 };//第一种方式  
                int[] one2 = { 3, 2, 1 };      //第二种方式  
                int[] one3;                    //第三种方式  
                one3=new int[]{3,2,1};  
      
                
                //二维数组定义与初始化  
      
                //不规则二维数组  
                int[][] array = new int[2][];  
                array[0] = new int[3];  
                array[0][1] = 11;  
                array[0][2] = 12;  
                array[1] = new int[] { 1, 2, 3, 4,5 };  
      
                //或int[][] array = new int[2][] { new int[] {0,11,12 }, new int[] {1,2,3,4,5 }};  
                
                Console.WriteLine( "不规则二维数组:  ");  
                for (int i = 0; i < array.Length; i++)  
                {  
                    foreach (int j in array[i])  
                    {  
                        Console.Write(j+"   ");  
                    }  
                    Console.WriteLine();  
                }  
      
                //固定长度的矩阵数组  
                int[,] arrray1=new int[2,5]{{9,9,9,9,0},{0,0,9,0,0}};  
                Console.WriteLine("规则二维数组输出方法一:  ");  
                for (int ii = 0; ii < 2; ii++)                        //输出方法一  
                {  
                    for (int j = 0; j < 5; j++)  
                    {  
                        Console.Write(arrray1[ii,j] + "   ");  
                    }  
                    Console.WriteLine();  
                }  
                Console.WriteLine("规则二维数组输出方法二:  ");  
                foreach (int j in arrray1)//arrray.length=10;      //输出方法二  
                {  
                    Console.Write(j + "   ");  
                }  
                Console.WriteLine();  
                Console.ReadLine();  
            }  
        }  
    } 

     三、数据库相关

    1.查询多个用户最后登录的记录

    -- 1.创建表结构
    create table test_log
    (
    id int identity (1,1) not null,
    name varchar(50),
    createDate datetime
    CONSTRAINT [PK_test_log] PRIMARY KEY CLUSTERED 
    (
        [id] ASC
    )
     
    ) ON [PRIMARY]
    
    -- 2.插入数据
    insert into test_log ([name],createdate) values 
    ('张三','2020-11-10 15:49:38.470'),
    ('张三','2020-11-01 15:49:38.470'),
    ('李四','2020-11-03 15:49:38.470'),
    ('张三','2020-11-04 15:49:38.470'),
    ('李四','2020-11-05 15:49:38.470'),
    ('张三','2020-11-06 15:49:38.470'),
    ('王五','2020-11-07 15:49:38.470'),
    ('张三','2020-11-08 15:49:38.470');
    
    -- 3.查询出最后登录用户的记录
    -- >1.普通查询
    select [name],max(createDate) from test_log group by [name];
    -- >2.使用partition by分析函数  按照用户登录的时间排序
    select *
    from (select t.*,row_number() over(partition by name order by createDate desc) rn from test_log t) a
    where a.rn = 1
    --order by a.name;

    2.

    作者:chenze
    出处:https://www.cnblogs.com/chenze-Index/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    Redis应用----消息传递
    Memcache存储机制与指令汇总
    文本挖掘预处理之向量化与Hash Trick
    证书(Certificate)与描述文件(Provisioning Profiles)
    IOS使用命令行打包
    IOS使用xcode编译代码
    IOS使用SourceTree
    docker修改docker0 mtu
    linux开机自启动
    设计模式
  • 原文地址:https://www.cnblogs.com/chenze-Index/p/13926341.html
Copyright © 2011-2022 走看看