对于正在找工作的同学们,面试时,除了填写基本信息外,一般还会让做一份和专业相关的面试题
目录
1、什么是委托,委托是不是事件
2、重载和重写异同
3、依赖注入生命周期
4、 输出以下代码执行的值
5、查询每组活动前3名学生
1、什么是委托,委托是不是事件
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。
委托特点
委托类似于 C++ 函数指针,但它们是类型安全的。
委托允许将方法作为参数进行传递。
委托可用于定义回调方法。
委托可以链接在一起;例如,可以对一个事件调用多个方法。
方法不必与委托签名完全匹配。
委托类型
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型
Func可以接受0个至16个传入参数,必须具有返回值
Action可以接受0个至16个传入参数,无返回值
Predicate只能接受一个传入参数,返回值为bool类型
2、重载和重写异同
| 区别/名称 | 重载 | 重写 |
| 范围 | 同一个类 | 不同的类 |
| 方法名 | 相同 | 相同 |
| 参数列表 | 不同 | 相同 |
| 是否返回父类异常 | 会 | 不会 |
| 返回类型 | 相同 | 相同 |
| 面向对象 | 多态 | 继承 |
重载场景:构造函数,根据不同的参数设置不同的构造函数
重写场景: 在新的类里重新编写方法的逻辑
3、依赖注入生命周期
.NET Core 自带依赖注入框架,支持三种不同生命周期的注入模式:
Singleton 单例模式
服务只在第一次请求时被创建,之后的每次请求都使用这个已创建的服务。
Scoped 作用域模式
服务在每次请求时被创建,整个请求过程中都使用这个创建的服务。
Transient 瞬态模式
服务在每次请求时被创建
4、 输出以下代码执行的值
面试题
代码根据当时做题时回想,基本是如下代码
题目要求:输出list和num值
Listlist = new List () { 1, 4, 3, 9, 7, 8, 2 }; Func sort = (x, y) => { return x > y; }; int num = 0; int index = 0; int length = list.Count; while (index < length) { for(int newIndex = index + 1; newIndex 知识点
考查了冒泡排序
//有返回参数 Func Func(T1, T2, ...) Func sort= (x, y) => { return x (t1, t2, t3 ...) Action method1=(x) =>{ Console.WriteLine(x); }; 一般使用两个for循环实现
int numCount = 0; int[] arr =new int[7] { 1, 4, 3, 9, 7, 8, 2 }; for(int i = 0; i < arr.Length; i++) { for (int j = i + 1; j < arr.Length; j++) { int a = arr[i]; int b = arr[j]; if (a < b) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; numCount++; } } }5、查询每组活动前3名学生
题目:有一张表学生member,有一张活动表active,查询每组活动前3名学生
查询效果如下
创建member表和添加数据
--创建表 CREATE TABLE [dbo].[member]( [id] [int] IDENTITY(1,1) NOT NULL, [memberId] [int] NULL, [nickName] [varchar](50) NULL, ConSTRAINT [PK_member] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] --member表添加如下数据创建active表和添加数据
--创建表 CREATE TABLE [dbo].[active]( [id] [int] IDENTITY(1,1) NOT NULL, [groupNo] [int] NULL, [point] [int] NULL, [memberId] [int] NULL, ConSTRAINT [PK_active] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] --添加数据查询语句
select (case when a2.groupNo=1001 then '跳高' when a2.groupNo=1002 then '赛跑' when a2.groupNo=1003 then '铅球' else '其他' end) as groupNoText, (case when a2.sort_id=1 then 'No.1' when a2.sort_id=2 then 'No.2' when a2.sort_id=3 then 'No.3' else '其他' end) as groupNoText, a2.point, a3.nickName from( select groupNo from active group by groupNo ) as a1 left join( select sort_id=row_number() over(partition by groupNo order by point desc),* from active ) as a2 on a2.groupNo=a1.groupNo left join member as a3 on a3.memberId=a2.memberId where sort_id<=3 order by a2.groupNo,a2.point desc知识点
考查了row_number()和over()



