20230919 .NET面經

来源:https://www.cnblogs.com/bblitz/archive/2023/09/20/17716840.html
-Advertisement-
Play Games

在學習C#中的記錄類型時,對出現的Equals和ReferenceEquals得到的不同結果表示不理解,隨即進行相關資料查找。 值類型 == : 比較兩者的“內容”是否相同,即“值”是否一樣Equals:比較兩者的“內容”是否相同,即“值”是否一樣ReferenceEquals:返回false,因為 ...


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)創建的對象決定。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 全局有序 在RocketMQ中,如果使消息全局有序,可以為Topic設置一個消息隊列,使用一個生產者單線程發送數據,消費者端也使用單線程進行消費,從而保證消息的全局有序,但是這種方式效率低,一般不使用。 局部有序 假設一個Topic分配了兩個消息隊列,生產者在發送消息的時候,可以對消息設置一個路由I ...
  • 可能很多人都看到過一個線程數設置的理論:CPU 密集型的程式 - 核心數 + 1,I/O 密集型的程式 - 核心數 * 2,不會吧,不會吧,真的有人按照這個理論規劃線程數? ...
  • SpringBoot監聽Iphone15有貨郵件提醒+python自動化腳本小功能。後端基於SpringBoot為,通過蘋果官網進行有貨介面調用,將JSON結果解析分析是否有貨,並展示近10條有貨記錄列;可靈活監聽對應型號,通過郵件關聯,有貨郵件通知;也可靈活進行有貨自動觸發自動化Selenium+... ...
  • 基於java志願者服務管理系統設計與實現,可適用於校園志願者活動服務平臺,校園愛心志願者活動,愛心活動管理信息系統,大學志願者服務平臺,大學生志願者服務平臺,大學生愛心活動系統,線上志願者活動平臺,校園志願者活動,大學志願者活動平臺等等; ...
  • 關於Unity 如何與Blazor Server結合 一、介紹 最近工作中有Unity與Blazor Server結合的需求,在網上找了一圈,發現這方面的資料比較少,特此寫下這篇記錄一下自己的實現過程,希望可以幫到有需要的朋友。(下方多圖預警) OS Version : windows 11 Uni ...
  • Dockcer上傳hub和配置國內鏡像源 1.Dockcer上傳hub 要將本地的Docker鏡像上傳到Docker鏡像倉庫,可以按照以下步驟操作: linux環境 1.創建用戶 首先,確保你已經在Docker Hub或其他容器註冊表上創建了一個賬戶,並且擁有上傳鏡像的許可權。 2.登錄用戶 在命令行 ...
  • 在.Net Framework時代,我們生成驗證碼大多都是用System.Drawing。 在.Net 6中使用也是沒有問題的。 但是,System.Drawing卻依賴於Windows GDI+。 為了實現跨平臺,我陷入了沉思!! 微軟推薦使用SkiaSharp 進行替代,所以就開始了,踩坑之旅 ...
  • 上篇文章講述了C#集合知識點,本文將介紹C#異常處理知識點。異常處理是.NET開發中至關重要的一部分,它允許開發者在程式出現錯誤或不正常情況時採取適當的措施,從而提高應用程式的穩定性和可靠性。本文將介紹C#異常處理知識點,異常的基本概念略過,請查看官網。 1、自定義異常 開發者可以創建自定義異常類, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...