一、
1.C#中值类型和引用类型分别包含哪些,分别列举一下
值类型:Sbyte, short, int, long, byte, ushort, char, ulong
引用类型包括:数组,用户定义的类、接口、委托,object,字符串
2.关键词ref和out的作用是什么?它们有什么区别?
ref和out都是按地址传递,使用后都将改变原来参数的数值。
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.