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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果文中有什么错误,欢迎指出。以免更多的人被误导。
原文地址:https://www.cnblogs.com/chenze-Index/p/13926341.html