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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/chenze-Index/p/13926341.html
Copyright © 2011-2022 走看看