20230919 .NET面经
SQL
IQuerable 和 IEnumerable 的主要区别?


So the difference between IQueryable and IEnumerable is about where the filter logic is executed. One executes on the client side and the other executes on the database.
So if you work with only in-memory data collection, IEnumerable is a good choice, but if you want to query data collection which is connected with database IQueryable is a better choice as it reduces network traffic and uses the power of SQL language.
Id name, 删除重复数据
这道题没答上来有点可惜了...
DELETE FROM A
WHERE id NOT IN (
SELECT MIN(id) -- 保留name列最小id值的行
FROM A
GROUP BY name
)
把一个表里的列装到另一个表里
将表A中s1列包含'abc'的行的s2和s3两列插入到表B作为s1和s2两列
INSERT INTO B (s1, s2)
SELECT s2, s3 FROM A
WHERE s1 LIKE '%abc%';
select * A,B多少行列?
行:rowA * rowB ,列:rowA + rowB
笛卡尔积:

乐观锁
乐观锁是一种并发控制机制,用于解决多个线程同时修改同一数据时可能导致的数据不一致问题。常见的实现乐观锁的方式是通过版本控制机制,以下是一种常见的实现方法:
- 添加版本字段:在需要进行并发控制的数据表中,添加一个用于记录版本号的字段。这个字段可以是一个整数或时间戳类型。
- 读取数据和版本号:在读取数据时,同时获取当前数据的版本号。
- 进行数据修改:当要对数据进行修改时,首先检查当前持有的版本号是否与最新的版本号一致。可以通过将要修改的数据的版本号与读取时获取的版本号进行比较。
- 乐观锁冲突处理:
如果版本号一致,说明没有其他线程修改过数据,可以进行修改操作,并更新版本号。
如果版本号不一致,说明数据已经被其他线程修改过,可能存在并发冲突。可以选择取消当前操作、重试操作或执行其他相关的处理逻辑。
推理题
100盏灯
大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。
第一次,将所有的灯点亮。
第二次,将所有2的倍数的开关按一下。
第三次,将所有3的倍数的开关按一下。
以此类推。第N次,将所有N的倍数的开关按一下。
问第100次按完以后,大厅里还有几盏灯是亮的。

依次写下去,就可以发现,每个灯被操作的步骤,其实为此灯编号的因数。
如灯36被操作的步骤:
(1, 36), (2, 18), (3, 12), (4, 9), (6, 6), (9, 4), (12, 3), (18, 2) (36, 1)
此时题目转化为求[1-100]100个数中,因数个数为奇数的数的数量是多少。
我们注意到,求一个数因数的过程,是从1开始到其平方根,除平方根外,其他的因数都是成对的出现,也就是只有平方数的因数是奇数个!
100以内的平方数只有10个,分别是1,4,9,16,25,36,49,64,81,100,所以上述题目的最后结果是10个灯最后是亮着的。
编程题
如何实现一个可以自定义的可以进行foreach的集合
创建集合类实现IEnumerable接口的GetEnumerator方法返回一个迭代器
创建迭代器类实现IEnumerator接口的MoveNext、Reset、Current方法
foreach:
var enumerator = collection.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
// 自定义集合类
public class MyCollection : IEnumerable
{
private object[] items;
public MyCollection()
{
items = new object[3];
items[0] = "Apple";
items[1] = "Banana";
items[2] = "Orange";
}
// 实现 IEnumerable 接口的 GetEnumerator() 方法
public IEnumerator GetEnumerator()
{
return new MyEnumerator(items);
}
}
// 自定义枚举器类
public class MyEnumerator : IEnumerator
{
private object[] items;
private int position = -1;
public MyEnumerator(object[] collection)
{
items = collection;
}
// 实现 IEnumerator 接口的 MoveNext() 方法
public bool MoveNext()
{
position++;
return (position < items.Length);
}
// 实现 IEnumerator 接口的 Reset() 方法
public void Reset()
{
position = -1;
}
// 实现 IEnumerator 接口的 Current 属性
public object Current
{
get { return items[position]; }
}
}
如下代码输出是什么?
[TestClass]
public class InheritanceTest
{
[TestMethod]
public void test()
{
A a = new A();
B b = new B();
a.Func2(b);
b.Func2(a);
}
class A
{
public virtual void Func1(int i)
{
Console.WriteLine(i);
}
public void Func2(A a)
{
a.Func1(1);
Func1(5);
}
}
class B : A
{
public override void Func1(int i)
{
base.Func1(i+1);
}
public void Func2(A a)
{
a.Func1(1);
Func1(5);
}
}
}
/*
2
5
1
6
*/
实际上是对多态的考察,一个对象的实际类型不由“解释”它的接口/基类类型决定,而是由分配内存时(new)创建的对象决定。
随机推荐
- 【python基础】复杂数据类型-列表类型(列表切片)
1.列表切片 前面学习的是如何处理列表的所有数据元素.python还可以处理列表的部分元素,python称之为切片. 1.1创建切片 创建切片,可指定要使用的第一个数据元素的索引和最后一个数据元素的索 ...
- Quartz + SpringBoot 实现定时任务(多任务,多执行时间)代码模板(直接CV即可)
一,什么是Quartz quartz 是一款开源且丰富特性的Java 任务调度库,用于实现任务调度和定时任务.它支持各种任务类型和灵活的配置选项,具备作业持久化.集群和分布式调度.错误处理和重试机制等 ...
- C++面试八股文:override和finial关键字有什么作用?
某日二师兄参加XXX科技公司的C++工程师开发岗位第22面: (二师兄好苦逼,节假日还在面试...) 面试官:C++的继承了解吗? 二师兄:(不好意思,你面到我的强项了..)了解一些. 面试官:什么是 ...
- Java输出100以内的所有质数
代码如下: public static void main(String[] args) { for(int k=2;k<=100;k++) { boolean flag = true; for ...
- Vue基础介绍
一.Vue基本介绍 1.Vue.js目前最火的的一个前端框架,三大主流前端框架之一.与其他重量级框架不同的是,Vue采用自底向上增量开发的设计.Vue的核心库只关注视图层. 2.Vue.js是一套构建 ...
- P5752 [NOI1999] 棋盘分割题解
本文来自我的洛谷博客. 这个题解思路虽然与其他人的思路相同, 但力求使用清晰易懂的图片和文字,讲解最简洁的道理. 请大家耐心地看完,注意要结合图片一起哦~~ 2022-8-24 更改了格式与错别字. ...
- Hexo博客Next主题文章置顶相关
我需要写一些文章做推荐相关,需要文章置顶功能 博客效果 置顶方法配置 一.修改库文件 原理 在Hexo生成首页HTML时,将top值高的文章排在前面,达到置顶功能. 修改方法 修改Hexo文件夹下的n ...
- 图像处理_ISP_坏点矫正
1 坏点介绍 图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素信息错误,导致图像中的像素 ...
- gin 接口开发 - 用户输入自动 TrimSpace
最近在思考一个问题,针对用户的输入,能不能快速校验? 比方说下面的 struct,大家用过 gin 的就知道,支持指定某个字段为 required,用户如果不输入,就检验不通过. type Login ...
- JVM虚拟机栈
JVM虚拟机栈 1.概述 1.1背景 由于跨平台性的设计,Java的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降 ...