1503 字
8 分钟
面试题-01
1.eq的值?
public static DateTime Now => DateTime.Now; var eq = Now == Now; eq == false
Now 属性被定义为返回 DateTime.Now 的一个快捷方式,但这里重要的是你并不是直接调用 DateTime.Now 两次进行比较,而是先调用了 Now 属性一次并将其结果存储在隐式的中间变量中(由编译器生成),然后再次调用 Now 属性并比较这两个结果。 由于这两次对 Now 属性的调用是独立的,并且都发生在几乎相同的时间点,很有可能(但不保证)这两个 DateTime 值会是相同的。但是,从逻辑上讲,由于 Now 属性的每次调用都会返回当前的日期和时间,因此从严格意义上说,这两次调用返回的值应该是不同的(尽管在实际操作中,由于时钟分辨率的原因,它们可能会是相同的)。
2.numbers至少继承了什么接口?
foreach(var i in numbers){ Console.Write(i); }
至少实现了 IEnumerable<T>或者IEnumerable
3.在C#中,a.Equals(b)和a==b有什么区别?
- 默认行为:对于引用类型,a.Equals(b) 默认比较引用相等性,而 a == b 也默认比较引用相等性(除非类重写了 == 操作符)。
- 可重写性:Equals 方法可以被重写以提供自定义的相等性逻辑,而 == 操作符也可以被重写(通过定义 operator ==),但通常不这么做,因为这会改变语言的基本语义。
- 使用场景:Equals 方法通常用于更复杂的相等性检查,尤其是在涉及继承、接口或自定义相等性逻辑的场景中。而 == 操作符则更常用于值类型的比较或简单的引用类型比较(在没有重写的情况下)。
- 性能:在某些情况下,Equals 方法可能比 == 操作符更慢,因为它可能涉及更多的方法调用和逻辑判断。但是,在大多数情况下,这种性能差异是可以忽略不计的。
- 空引用:如果 a 是 null,那么调用 a.Equals(b) 会抛出 NullReferenceException 异常。而 a == null 是安全的,并且会返回 true 或 false。因此,在比较之前检查 null 通常是一个好习惯。可以使用 ReferenceEquals 方法或 == 操作符来安全地检查两个引用是否都为 null 或是否指向同一对象。
4.推断解释下面ling 所代表的含义
iDbcontext db - ...;Guid[] clientids ; ....;// 客户var dbclient - db.client.AsQueryable();// 客户联系人var dbclientlinkman - db.Clientlinkman.AsQueryable();var query : from c in dbclient where clientids.contains(c.id) join l in dbClientlinkman on c.id equals l.clie ntid into ls from l in ls.defaultifempty() where l !: null select new clientname c.clientname, linkmanname - l.linkman,};var list - query.ToArray(var clientmap = list.ToDictionary(k => k.clientname, v => v.Linkmanname);return clientmap;- 查询来源:从dbclient(即数据库中的客户表)开始查询。
- 过滤条件:只选择那些其Id在clientids数组中的客户。
- 连接:将dbclient中的每个客户与dbClientLinkman(即数据库中的客户联系人表)进行连接。连接条件是客户的Id与联系人的ClientId相匹配。into ls表示将匹配的联系人列表(可能是0个、1个或多个)放入ls中。
- 左连接:使用ls.DefaultIfEmpty()进行左连接。这意味着,即使某个客户在dbClientLinkman中没有匹配的联系人,该客户也会被包含在结果中,但对应的联系人将为null。
- 再次过滤(虽然在这里是不必要的):由于我们已经使用了DefaultIfEmpty(),所以这一步的where l != null实际上是不必要的,因为DefaultIfEmpty()已经确保了l要么是有效的联系人对象,要么是null。
- 选择结果:为每个匹配的客户-联系人组合创建一个新的匿名对象,该对象包含客户的ClientName和联系人的LinkmanName(如果有的话)。
- 结果转换:将查询结果转换为数组,并将该数组转换为一个字典,其中键是客户的ClientName,值是相应的联系人的LinkmanName(如果有的话)。如果一个客户有多个联系人,只有第一个联系人的名字会被添加到字典中(因为字典的键是唯一的)。
简短总结:根据clientids数组查询满足条件的客户信息并关联查询出客户联系人表的数据,最后将结果转换为字典。
5.关系型数据库的几种事务隔离级别
- 读未提交(Read Uncommitted):
- 这是最低的隔离级别。
- 一个事务可以读取到其他事务还未提交的数据。
- 这种隔离级别可能导致脏读(Dirty Read),即读取到未提交的数据。
- 并发性能最高,但一致性最差。
- 读已提交(Read Committed):
- 这是大多数数据库系统的默认隔离级别(但不是MySQL的默认隔离级别)。
- 一个事务只能读取到其他事务已经提交的数据,避免了脏读问题。
- 但仍可能出现不可重复读和幻读问题。
- 可重复读(Repeatable Read):
- 一个事务在执行期间读取到的数据始终保持一致,不受其他事务的影响。
- 避免了不可重复读问题,但仍可能出现幻读问题。
- MySQL的InnoDB存储引擎默认使用此隔离级别。
- 串行化(Serializable):
- 这是最高的隔离级别。
- 所有事务必须按顺序依次执行,避免了所有并发问题,如脏读、不可重复读和幻读。
- 但牺牲了系统的并发性能,因为事务之间需要等待前一个事务完成才能开始执行。
总结:4种,分别是读未提交、读已提交、可重复读、串行化
6.数据库查询题
Sql server数据库,写出符合要求的sql语句:查询员工表employee中名字name重复且名字长度为2的name字段
SELECT name, COUNT(*) AS countFROM employeeWHERE LEN(name) = 2GROUP BY nameHAVING COUNT(*) > 1; 相关文章 智能推荐
1
记录一次NPOI库导出Excel遇到的小问题解决方案
杂七杂八 在工作中经常回去导入或者导出Excel,那么我在工作中用的是NPOI库,很方便。不过在用的时候难免会出现问题,在这里记录一下这次需求遇到的问题。
2
C#中进行单元测试
.NET 技术合集 单元测试前言时隔多个月,终于抽空学习了点新知识,那么这次来记录一下C#怎么进行单元测试,单元测试是做什么的。我相信大部分刚毕业的都很疑惑单元测试是干什么的?在小厂实习了6个月后,我发现每天除了写CRUD就是写CRUD,几乎用不到单元测试。写完一个功能直接上手去测,当然这只是我个人感受,仅供参考。然后当我还在抱怨测试好烦的时候,大佬跟我说为什么不用单元测试和集成测试,我这也是有苦说不出。
3
C# LINQ基础差集计算
.NET 技术合集 C# LINQ基础差集计算前言最近开发的时候遇到个需求,接口参数为表的主键集合,用接口传递过来的参数去数据库查询数据,然后返回数据库不存在的数据。举个例子集合 1,2,3,4,5数据库 1,2,3通过查询语句查询,能从数据库查询出1,2,3来,然后与参数对比发现4,5是不存在与数据库的,那么要返回出来。
4
弹幕树洞项目功能新增篇
杂七杂八 项目地址项目后端地址:https://github.com/ZyPLJ/ZYTteeHole项目前端页面地址:ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue目前项目测试访问地址:http://tree.pljzy.top/ 注意是http,输成https就访问到博客里面去了。
5
弹幕树洞项目
杂七杂八 ZY树洞前言ZY树洞是一个基于.NET Core开发的简单的评论系统,主要用于大家分享自己心中的感悟、经验、心得、想法等。好了,不卖关子了,这个项目其实是上班无聊的时候写的,为什么要写这个项目呢?因为我单纯的想吐槽一下工作中的不满而已。
随机文章 随机推荐