首页 > 其他分享 >20230919 .NET面经

20230919 .NET面经

时间:2023-09-20 11:23:09浏览次数:45  
标签:Func1 版本号 items void 面经 20230919 100 NET public

SQL

IQuerable 和 IEnumerable 的主要区别?

https://stackoverflow.com/questions/252785/what-is-the-difference-between-iqueryablet-and-ienumerablet

IEnumerable

IQuerable

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

笛卡尔积:

笛卡尔积

乐观锁

乐观锁是一种并发控制机制,用于解决多个线程同时修改同一数据时可能导致的数据不一致问题。常见的实现乐观锁的方式是通过版本控制机制,以下是一种常见的实现方法:

  1. 添加版本字段:在需要进行并发控制的数据表中,添加一个用于记录版本号的字段。这个字段可以是一个整数或时间戳类型。
  2. 读取数据和版本号:在读取数据时,同时获取当前数据的版本号。
  3. 进行数据修改:当要对数据进行修改时,首先检查当前持有的版本号是否与最新的版本号一致。可以通过将要修改的数据的版本号与读取时获取的版本号进行比较。
  4. 乐观锁冲突处理:
    • 如果版本号一致,说明没有其他线程修改过数据,可以进行修改操作,并更新版本号。

    • 如果版本号不一致,说明数据已经被其他线程修改过,可能存在并发冲突。可以选择取消当前操作、重试操作或执行其他相关的处理逻辑。

推理题

100盏灯

大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。
第一次,将所有的灯点亮。
第二次,将所有2的倍数的开关按一下。
第三次,将所有3的倍数的开关按一下。
以此类推。第N次,将所有N的倍数的开关按一下。
问第100次按完以后,大厅里还有几盏灯是亮的。

image

依次写下去,就可以发现,每个灯被操作的步骤,其实为此灯编号的因数。
如灯36被操作的步骤:

(1, 36), (2, 18), (3, 12), (4, 9), (6, 6), (9, 4), (12, 3), (18, 2) (36, 1)

此时题目转化为求[1-100]100个数中,因数个数为奇数的数的数量是多少。

ref: https://www.cnblogs.com/dhf327/p/4773672.html

我们注意到,求一个数因数的过程,是从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)创建的对象决定。

标签:Func1,版本号,items,void,面经,20230919,100,NET,public
From: https://www.cnblogs.com/bblitz/p/17716840.html

相关文章

  • kubernetes中,如何更新对象的label(标签)?
    1、给资源对象添加标签这里的操作都是在pod资源对象上完成的。kubectllabelpodpod-static-ip-76c554659d-kwjh8role=backend 2、查看资源对象的标签[root@nccztsjb-node-23~]#kubectlgetpodpod-static-ip-76c554659d-kwjh8--show-labelsNAME......
  • .NET 实现仓储Repository(AI)
    来自你的消息:请用.netcore7实现仓储模式来自WeTabAI的消息:非常抱歉,当前没有.NETCore7的版本。最新的.NET版本是.NET6。在.NET6中,您可以使用仓储模式来管理您的数据存储。仓储模式是一种在应用程序中使用的设计模式,它将数据访问逻辑与业务逻辑分离。通过仓储......
  • [MDP.Net] 軟體分層(Layer)與程式專案(Project)
    在.NET裡,軟體分層(Layer)與程式專案(Project),不一定是一對一,常常有一個Layer切割成好幾個Project的情景發生。MDP.Net是將DDD的每個Context,設計為Domain層的Project。在Project裡面會包含該Context相關的Entity、Repository、Service….,用來封裝並提供Context的商業邏輯。裡面需......
  • 【.NET8】访问私有成员新姿势UnsafeAccessor(下)
    前言书接上回,我们讨论了在.NET8中新增的UnsafeAccessor,并且通过UnsafeAccessor访问了私有成员,这极大的方便了我们代码的编写,当然也聊到了它当前存在的一些局限性,那么它的性能到底如何?我们今天就来实际测试一下。测试代码话不多说,直接上代码,本次测试代码如下:usingSystem.Linq.......
  • 20230919
    //division,introduce,manager,marketing,outstanding,pleased,staff,top-notch,trading,businesscard,FinancialOfficer,inchargeof,keypersonnel,namecard,responsiblefor,salesfigure,topshape,touchdowndivision-部门Divisionreferstoa......
  • PHP、NET语言中的Ticks时间DateTime
    PHP语言:【夏令時間的公式】<?php//date_default_timezone_set("Asia/Taipei");//GMT+8date_default_timezone_set('Europe/London');//GMT+0//LondonAsia$s1=637338818029530000;//GMT+8$s2=621355968000000000;//GMT+0$NowTime=($s1-$s2)/100......
  • 每日总结20230919
    代码时间(包括上课)5h代码量(行):30行博客数量(篇):1篇相关事项:1、今天上午上的是软件设计模式和人机交互技术,软件设计模式讲的是单例模式和适配器模式,人机交互技术讲的是定位。2、今天上午人机交互技术留了三十分钟小组讨论明天软件案例开发分析的PPT讲解。3、晚上和下午的话去科技......
  • 20230919打卡
    今天的学习重点是链表合并和多项式创建。链表合并是算法与数据结构中的重要内容,它可以将两个有序链表合并成一个有序链表。通过学习链表合并的原理和实现方法,我掌握了如何有效地处理链表数据结构,并能够理解和运用链表相关的算法。另外,我还学习了多项式的创建。多项式是数学中的重......
  • App性能指标(安装、冷启动、卸载、平均内存/cpu/fps/net)测试记录
    【需求背景】需要针对产品以及竞品做出横向对比,输出对应的比对测试报告,供产研进行产品性能优化依据 【测试方案】对于主流的厂商和系统版本进行多维度的横向对比厂商:华为系、小米系、蓝绿系、三星系、苹果系、联想等系统:android10-14,ios11-16,鸿蒙2-3指标:安装时间、冷启动......
  • 20230919_京东良西延动态
    京良路西延近况4京良路西段工程是咱房山居民十分关心的一件大事该工程横跨房山区、丰台区道路全长约3730米近日,京良路西段涉及到的铁匠营村腾退搬迁又有新进展了村中道路两侧安装了施工围挡又新张挂了很多宣传条幅显示项目进入收尾阶段腾退搬迁工作将加快实施青......