小5聊记录一次.Net开发工程师面试题
Posted 小5聊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小5聊记录一次.Net开发工程师面试题相关的知识,希望对你有一定的参考价值。
对于正在找工作的同学们,面试时,除了填写基本信息外,一般还会让做一份和专业相关的面试题
目录
1、什么是委托,委托是不是事件
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。
- 委托特点
委托类似于 C++ 函数指针,但它们是类型安全的。
委托允许将方法作为参数进行传递。
委托可用于定义回调方法。
委托可以链接在一起;例如,可以对一个事件调用多个方法。
方法不必与委托签名完全匹配。
- 委托类型
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型
Func可以接受0个至16个传入参数,必须具有返回值
Action可以接受0个至16个传入参数,无返回值
Predicate只能接受一个传入参数,返回值为bool类型
2、重载和重写异同
区别/名称 | 重载 | 重写 |
范围 | 同一个类 | 不同的类 |
方法名 | 相同 | 相同 |
参数列表 | 不同 | 相同 |
是否返回父类异常 | 会 | 不会 |
返回类型 | 相同 | 相同 |
面向对象 | 多态 | 继承 |
重载场景:构造函数,根据不同的参数设置不同的构造函数
重写场景: 在新的类里重新编写方法的逻辑
3、依赖注入生命周期
.NET Core 自带依赖注入框架,支持三种不同生命周期的注入模式:
- Singleton 单例模式
服务只在第一次请求时被创建,之后的每次请求都使用这个已创建的服务。
- Scoped 作用域模式
服务在每次请求时被创建,整个请求过程中都使用这个创建的服务。
- Transient 瞬态模式
服务在每次请求时被创建
4、 输出以下代码执行的值
- 面试题
代码根据当时做题时回想,基本是如下代码
题目要求:输出list和num值
List<int> list = new List<int>() 1, 4, 3, 9, 7, 8, 2 ;
Func<int, int, bool> 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<length; newIndex++)
while (!sort(list[index], list[newIndex])) //满足大的在前面
int temp = list[index];
list[index] = list[newIndex];
list[newIndex] = temp;
num++;
index++;
- 知识点
考查了冒泡排序
//有返回参数
Func
Func<in T1, in T2, ..., out TResult> (T1, T2, ...)
Func<int, int, bool> sort= (x, y) => return x<y; ;
//无返回参数
Action<T1, T2, T3, ...>(t1, t2, t3 ...)
Action<int> 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表添加如下数据
/*
insert into member(memberId,nickName)
values(1,'张三')
insert into member(memberId,nickName)
values(2,'李四')
insert into member(memberId,nickName)
values(3,'王五')
insert into member(memberId,nickName)
values(4,'六六')
insert into member(memberId,nickName)
values(5,'七七')
insert into member(memberId,nickName)
values(6,'八八')
insert into member(memberId,nickName)
values(7,'九九')
*/
- 创建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]
--添加数据
/*
insert into active(groupNo,point,memberId)
values(1001,100,5)
insert into active(groupNo,point,memberId)
values(1001,200,3)
insert into active(groupNo,point,memberId)
values(1001,500,2)
insert into active(groupNo,point,memberId)
values(1001,150,1)
insert into active(groupNo,point,memberId)
values(1001,130,7)
insert into active(groupNo,point,memberId)
values(1002,100,2)
insert into active(groupNo,point,memberId)
values(1002,200,1)
insert into active(groupNo,point,memberId)
values(1002,500,5)
insert into active(groupNo,point,memberId)
values(1003,100,7)
insert into active(groupNo,point,memberId)
values(1003,200,4)
insert into active(groupNo,point,memberId)
values(1003,500,1)
*/
- 查询语句
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()
以上是关于小5聊记录一次.Net开发工程师面试题的主要内容,如果未能解决你的问题,请参考以下文章
小5聊.net core 2.1开发微信公众号消息解密报错41000原因
字节跳动Android开发高工面试:海量Android大厂高频面试题精编解析