Java面試題總結之Java基礎(三)

来源:https://www.cnblogs.com/yangxianyang/archive/2019/05/17/10884192.html
-Advertisement-
Play Games

1、JAVA 語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try 塊中可以拋出異常嗎? 答:Java 通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在Java 中,每個異常都是一個對象,它是Throwa ...


 

1JAVA 語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try 塊中可以拋出異常嗎

答:Java 通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在Java 中,每個異常都是一個對象,它是Throwable 類或其它子類的實例。當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常併進行處理。Java 的異常處理是通過5 個關鍵詞來實現的:try、catch、throw、throws 和finally。一般情況下是用try 來執行一段程式,如果出現異常,系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最後(finally)由預設處理器來處理;try 用來指定一塊預防所有“異常”的程式;catch 子句緊跟在try 塊後面,用來指定你想要捕捉的“異常”的類型;throw 語句用來明確地拋出一個“異常”;throws 用來標明一個成員函數可能拋出的各種“異常”;Finally 為確保一段代碼不管發生什麼“異常”都被執行的一段代碼;可以在一個成員函數調用的外面寫一個try 語句,在這個成員函數內部寫另一個try 語句保護其他代碼。每當遇到一個try 語句,“異常”的框架就放到堆棧上面,直到所有的try 語句都完成。如果下一級的try 語句沒有對某種“異常”進行處理,堆棧就會展開,直到遇到有處理這種“異常”的try 語句。

2、運行時異常與一般異常有何異同?

答:異常表示程式運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java 編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。

3、說出一個你最常見到的runtime exception

答:ArithmeticException, ArrayStoreException, BufferOverflowException,

BufferUnderflowException, CannotRedoException, CannotUndoException,

ClassCastException, CMMException, ConcurrentModificationException,

DOMException, EmptyStackException, IllegalArgumentException,

IllegalMonitorStateException, IllegalPathStateException,

IllegalStateException, ImagingOpException, IndexOutOfBoundsException,

MissingResourceException, NegativeArraySizeException,

NoSuchElementException, NullPointerException, ProfileDataException,

ProviderException, RasterFormatException, SecurityException,

SystemException, UndeclaredThrowableException,

UnmodifiableSetException, UnsupportedOperationException

4final, finally, finalize 的區別?

答:final:修飾符(關鍵字);如果一個類被聲明為final,意味著它不能不能作為父類被繼承,因此一個類不能既被聲明為abstract的,又被聲明為final 的;將變數或方法聲明為final,可以保證它們在使用中不被改變;被聲明為final 的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改;被聲明為final 的方法也同樣只能使用,不能重載。finally:異常處理時提供finally 塊來執行任何清除操作。finalize:方法名;Java 技術允許使用finalize() 方法在垃圾收集器,將對象從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時,對這個對象調用的。它是在Object 類中定義的,因此所有的類都繼承了它。子類覆蓋finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。

5、類Example A 繼承Exception,類ExampleB 繼承Example A

有如下代碼片斷:

try{

throw new ExampleB(“b”);

}catch(ExampleA e){

System.out.printfln(“ExampleA”);

}catch(Exception e){

System.out.printfln(“Exception”);

}

 

輸出的內容應該是:

A:ExampleA  B:Exception  C:b  D:無

答:輸出為A。

6、介紹JAVA 中的Collection FrameWork(及如何寫自己的數據結構)

答:Collection FrameWork 如下:

Collection

├List元素可以重覆,有序(存入順序和取出順序一致)

│├LinkedList底層數據結構是鏈表,查詢慢,增刪快,線程不安全效率高。

│├ArrayList底層數據結構是數組,查詢快,增刪慢,線程不安全效率高。

│└Vector底層數據結構是數組,查詢快,增刪慢,線程安全效率低。

│ └Stack

└Set元素無序,不可以重覆。

   ├HashSet線程不安全,存取速度快。

 └TreeSet線程不安全,可以對Set集合中的元素進行排序。

 

Map

├Hashtable線程安全,速度快。底層是哈希表數據結構。是同步的。不允許null作為鍵,null作為值

├HashMap線程不安全,速度慢。底層也是哈希表數據結構。是不同步的。允許null作為鍵,null作為值。替代了Hashtable.

└WeakHashMap可以用來對Map集合中的進行排序。

Collection 是最基本的集合介面,一個Collection 代表一組Object,即Collection 的元素(Elements); Map 提供key 到value 的映射。

Collection 和 Collections的區別

Collection是集合類的上級介面,子介面主要有Set 和List、Map。 

Collections是針對集合類的一個幫助類,提供了操作集合的工具方法:一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。

7、你所知道的集合類都有哪些?主要方法有哪些?

答:最常用的集合類是List 和Map。List 的具體實現包括ArrayList 和Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。List 適用於按數值索引訪問元素的情形。Map 提供了一個更通用的元素存儲方法。Map 集合類用於存儲元素對(稱作“鍵”和“值”),其中每個鍵映射到一個值。

8、說出ArrayList,Vector, LinkedList 的存儲性能和特性?

答:ArrayList 和Vector 都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等記憶體操作,所以索引數據快而插入數據慢,Vector 由於使用了synchronized 方法(線程安全),通常性能上較ArrayList 差,而LinkedList 使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。

9Collection Collections 的區別?

答:Collection 是java.util 下的介面,它是各種集合的父介面,繼承於它的介面主要有Set 和List;Collections 是個java.util 下的類,是針對集合的幫助類,提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。

10HashMap Hashtable 的區別?

答:二者都實現了Map 介面,是將惟一鍵映射到特定的值上;主要區別在於:

1)HashMap 沒有排序,允許一個null 鍵和多個null 值,而Hashtable 不允許;

2)HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey,因為contains 方法容易讓人引起誤解;

3)Hashtable 繼承自Dictionary 類,HashMap 是Java1.2 引進的Map 介面的實現;

4)Hashtable 的方法是Synchronize 的,而HashMap 不是,在多個線程訪問Hashtable 時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。Hashtable 和HashMap 採用的hash/rehash 演算法大致一樣,所以性能不會有很大的差異。

11Arraylist Vector 區別?

答:就ArrayList 與Vector 主要從二方面來說:

1)同步性:Vector 是線程安全的(同步),而ArrayList 是線程式不安全的;

2)數據增長:當需要增長時,Vector 預設增長一倍,而ArrayList 卻是一半。

12ListMapSet 三個介面,存取元素時,各有什麼特點?

答:List 以特定次序來持有元素,可有重覆元素。Set 無法擁有重覆元素,內部排序。Map 保存key-value 值,value 可多值。

13Set 里的元素是不能重覆的,那麼用什麼方法來區分重覆與否呢? 是用==還是equals()? 它們有何區別?

答:Set 里的元素是不能重覆的,用equals ()方法來區分重覆與否。覆蓋equals()方法用來判斷對象的內容是否相同,而”==”判斷地址是否相等,用來決定引用值是否指向同一對象。

14、用程式給出隨便大小的10 個數,序號為1-10,按從小到大順序輸出,並輸出相應的序號。

答:代碼如下:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Iterator;

import java.util.List;

import java.util.Random;

 

public class RandomSort {

      public static void printRandomBySort() {

             Random random = new Random(); // 創建隨機數生成器

             List<Integer> list = new ArrayList<Integer>();

             // 生成10 個隨機數,並放在集合list 中

             for (int i = 0; i < 10; i++) {

                    list.add(random.nextInt(1000));

             }

             Collections.sort(list); // 對集合中的元素進行排序

             //第一種輸出方法

             Iterator<Integer> it = list.iterator();

             int count = 0;

             while (it.hasNext()) { // 順序輸出排序後集合中的元素

                    System.out.println(++count + ": " + it.next());

             }

             //第二種輸出方法

             for (Integer integer : list) {

                    System.out.println(integer);

             }

      }

 

      public static void main(String[] args) {

             printRandomBySort();

      }

}

 

15、用JAVA 實現一種排序,JAVA 類實現序列化的方法?COLLECTION 框架中,實現比較要實現什麼樣的介面?

答:用選擇排序代碼如下:

public class ChooseSort {

   private int[] array;

   private int length;

 

   public ChooseSort(int[] array) {

      this.array = array;

      this.length = array.length;

   }

 

   /**

    * 列印數組中的所有元素

    */

   public void display() {

      for (int i : array) {

        System.out.print(i + " ");

      }

      System.out.println();

   }

 

   /**

    * 選擇排序演算法

    */

   public void chooseSort() {

      for (int i = 0; i < length - 1; i++) {// 做第i趟排序

        int minIndex = i;

        for (int j = minIndex + 1; j < length; j++) {// 選最小的記錄

           if (array[minIndex]>array[j]) {

              minIndex = j;// 記下目前找到的最小值所在的位置

           }

        }

        // 在內層迴圈結束,也就是找到本輪迴圈的最小的數以後,再進行交換

        if (i != minIndex) { // 交換a[i]和a[minIndex]

           int temp = array[i];

           array[i] = array[minIndex];

           array[minIndex] = temp;

        }

      }

   }

 

   public static void main(String[] args) {

      int[] array = { 100, 45, 36, 21, 17, 13, 7 };

      ChooseSort cs = new ChooseSort(array);

      System.out.println("排序前的數據為:");

      cs.display();

      cs.chooseSort();

      System.out.println("排序後的數據為:");

      cs.display();

   }

}

 

JAVA 類實現序例化的方法是實現java.io.Serializable 介面;Collection 框架中實現比較要實現Comparable 介面和Comparator 介面。

16sleep() wait() 有什麼區別?

答:sleep 是線程類(Thread)的方法,使此線程暫停執行並指定時間,把執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep 不會釋放對象鎖。wait 是Object 類的方法,對對象調用wait 方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify 方法(或notifyAll)後本線程才進入對象鎖定池準備,獲得對象鎖進入運行狀態。

17、當一個線程進入一個對象的一個synchronized 方法後,其它線程是否可進入此對象的其它方法?

答:其它線程只能訪問該對象的其它非同步方法,同步方法則不能進入。

18、請說出你所知道的線程同步的方法。

答:wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock;sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException 異常;notify():喚醒一個處於等待狀態的線程,註意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM 確定喚醒哪個線程,而且不是按優先順序;

notityAll():喚醒所有處入等待狀態的線程,註意並不是給所有喚醒線程一個對象的鎖,而是讓它們互相競爭。

19、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?

答:多線程有兩種實現方法,分別是繼承Thread 類與實現Runnable 介面,同步的實現方面有兩種,分別是synchronized,wait 與notify。

20、同步和非同步有何異同,在什麼情況下使用他們?舉例說明。

答:如果數據將線上程間共用。例如正在寫的數據以後可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那麼這些數據就是共用數據,必須進行同步存取。當應用程式在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,就應該使用非同步編程,在很多情況下採用非同步途徑往往更有效率。

21、啟動一個線程是用run()還是start()?

答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM 調度並執行。這並不意味著線程就會立即運行。當cpu分配給它時間時,才開始執行run()方法(如果有的話)。start()是方法,它調用run()方法.而run()方法是你必須重寫的. run()方法中包含的是線程的主體。

22、線程的基本概念、線程的基本狀態以及狀態之間的關係?

答:線程指在程式執行過程中,能夠執行程式代碼的一個執行單位,每個程式至少都有一個線程,也就是程式本身;Java 中的線程有四種狀態分別是:運行、就緒、掛起、結束。

23、簡述synchronized java.util.concurrent.locks.Lock 的異同?

答:相同點:Lock 能完成synchronized 所實現的所有功能;

不同點:Lock 有比synchronized 更精確的線程語義和更好的性能。synchronized 會自動釋放鎖,而Lock 一定要求程式員手工釋放,並且必須在finally中釋放。

24java 中有幾種方法可以實現一個線程?用什麼關鍵字修飾同步方法?stop()suspend()方法為何不推薦使用?

答:有兩種實現方法,分別是繼承Thread 類與實現Runnable 介面;用synchronized 關鍵字修飾同步方法;反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處於一種不連貫狀態,那麼其他線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在;suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被“掛起”的線程恢復運行。對任何線程來說,如果它們想恢複目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。故不應該使用suspend(),而應在自己的Thread 類中置入一個標誌,指出線程應該活動還是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()重新啟動線程。

25、設計4 個線程,其中兩個線程每次對j 增加1,另兩個線程對j 每次減少1;寫出程式。

答:以下程式使用內部類實現線程,對j 增減的時候沒有考慮順序問題:

public class TestThread {

   private int j;

 

   public TestThread(int j) {

      this.j = j;

   }

 
//增加j
   private synchronized void inc() {

      j++;

      System.out.println(j + "--Inc--" + Thread.currentThread().getName());

   }

 //減少j

   private synchronized void dec() {

      j--;

      System.out.println(j + "--Dec--" + Thread.currentThread().getName());

   }

 

   public void run() {

      new Dec().start();

      new Thread(new Inc()).start();

      new Dec().start();

      new Thread(new Inc()).start();

   }

 

   class Dec extends Thread {

      public void run() {

        for (int i = 0; i < 100; i++) {

           dec();

        }

      }

   }

 

   class Inc implements Runnable {

      public void run() {

        for (int i = 0; i < 100; i++) {

 

           inc();

        }

      }

   }

 

   public static void main(String[] args) {

      new TestThread(5).run();

   }

}

 

26、什麼是java 序列化,如何實現java 序列化?

答:序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網路之間。序列化是為瞭解決在對對象流進行讀寫操作時所引發的問題;序列化的實現:將需要被序列化的類實現Serializable 介面,該介面沒有需實現的方法,implements Serializable 只是為了標註該對象是可被序列化的。

27java 中有幾種類型的流?JDK 為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

答:位元組流,字元流。位元組流繼承於InputStream、OutputStream,字元流繼承於Reader、Writer。在java.io 包中還有許多其他的流,主要是為了提高性能和使用方便。

28、文件和目錄(IO)操作:

1)如何列出某個目錄下的所有文件?

2)如何列出某個目錄下的所有子目錄?

3)如何判斷一個文件或目錄是否存在?

4)如何讀寫文件?

答:1)示例代碼如下:

File file = new File("e:");

      File[] files = file.listFiles();

      for (int i = 0; i < files.length; i++) {

        if (files[i].isFile())

           System.out.println(files[i]);

}

 

2)示例代碼如下:

File file = new File("e:\\");

      File[] files = file.listFiles();

      for (int i = 0; i < files.length; i++) {

        if (files[i].isDirectory())

           System.out.println(files[i]);

  }

 

3)創建File 對象,調用其exsit()方法即可返回是否存在,如:

System.out.println(new File("d:\\t.txt").exists());

 

4)示例代碼如下:

public class Test {

   public static void main(String[] args) throws IOException {

      // 讀文件:

      FileInputStream fin = new FileInputStream("e:\\tt.txt");

      byte[] bs = new byte[100];

      while (true) {

        int len = fin.read(bs);

        if (len <= 0)

           break;

        System.out.print(new String(bs, 0, len));

      }

      fin.close();

      // 寫文件:

      FileWriter fw = new FileWriter("e:\\test.txt");

      //System.getProperty("line.separator")相當於"/n"\n’ 這樣寫的話,剔除了平臺無關性

      fw.write("hello world!" + System.getProperty("line.separator"));

      fw.write("你好!鄭州!");

      fw.close();

 

   }

 

}

 

29、寫一個方法,輸入一個文件名和一個字元串,統計這個字元串在這個文件中出現的次數。

答:代碼如下:

public static int countWords(String file, String find) throws Exception {

      int count = 0;

      Reader in = new FileReader(file);

      int c;

      while ((c = in.read()) != -1) {

        while (c == find.charAt(0)) {

           for (int i = 1; i < find.length(); i++) {

              c = in.read();

              if (c != find.charAt(i))

                 break;

              if (i == find.length() - 1)

                 count++;

           }

        }

      }

      return count;

}

 

30Java 的通信編程,編程題(或問答),用JAVA SOCKET 編程,讀伺服器幾個字元,再寫入本地顯示?

答:Server 端程式:

import java.net.*;

import java.io.*;

 

public class Server {

   private ServerSocket ss;

   private Socket socket;

   private BufferedReader in;

   private PrintWriter out;

 

   public Server() {

      try {

        //創建 ServerSocket 對象(並綁定埠)

        ss = new ServerSocket(10000);

        while (true) {

           //調用 accept 方法,等待來自客戶端的連接

           socket = ss.accept();

           String RemoteIP = socket.getInetAddress().getHostAddress();

           String RemotePort = ":" + socket.getLocalPort();

           System.out.println("A client come in!IP:" + RemoteIP + RemotePort);

           //調用 getXXXStream 方法,進行 I/O操作

           in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

           String line = in.readLine();

           System.out.println("Cleint send is :" + line);

           out = new PrintWriter(socket.getOutputStream(), true);

           out.println("Your Message Received!");

           out.close();

           in.close();

           //關閉 Socket

           socket.close();

        }

      } catch (IOException e) {

        out.println("wrong");

      }

   }

 

   public static void main(String[] args) {

      new Server();

   }

}

 

Client 端程式:

 

import java.io.*;

import java.net.*;

 

public class Client {

   Socket socket;

   BufferedReader in;

   PrintWriter out;

 

   public Client() {

      try {

        System.out.println("Try to Connect to 127.0.0.1:10000");

        //1.創建 Socket 對象,並連接伺服器 (ip字元串,埠號)

        socket = new Socket("127.0.0.1", 10000);

        System.out.println("The Server Connected!");

        System.out.println("Please enter some Character:");

        BufferedReader line = new BufferedReader(new InputStreamReader(System.in));

        out = new PrintWriter(socket.getOutputStream(), true);

        out.println(line.readLine());

        //2.調用 getXXXStream 方法,進行 I/O操作

        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        System.out.println(in.readLine());

        out.close();

        in.close();

        //3、關閉 Socket

        socket.close();

      } catch (IOException e) {

        out.println("Wrong");

      }

   }

 

   public static void main(String[] args) {

      new Client();

   }

}

 


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

-Advertisement-
Play Games
更多相關文章
  • [toc] "項目的Github地址" 需求介紹 為了縮短用戶看到首頁信息的時間, 我們把首頁顯示的類目信息, 廣告等數據放到Redis緩存中, 這樣就不用通過耗時的資料庫操作獲取數據, 而是直接從Redis緩存中獲取. 在開始之前先記錄一個坑: 重啟虛擬機後nginx伺服器關閉了, 導致nginx ...
  • 2019-05-18 08:48:27 加油,加油,堅持!!! 這道題我沒有想出公式推導,只是按照模擬題來做,第5個樣例超時 樣例超時,方法錯誤 https://www.cnblogs.com/ECJTUACM-873284962/p/6375011.html AC代碼: 我的代碼: ...
  • 如何入門Python爬蟲?爬蟲原理及過程詳解,“入門”是良好的動機,但是可能作用緩慢。如果你手裡或者腦子裡有一個項目,那麼實踐起來你會被目標驅動,而不會像學習模塊一樣慢慢學習。 ...
  • 13.1 偏函數(partial function) 13.1.1 需求 -> 思考 一個集合val list = List(1,2,3,4,"abc"),完成如下要求 1) 將集合list中的所有數字+1,並返回一個新的集合 2) 要求忽略掉非數字的元素,即返回的新的集合形式為(2,3,4,5) ...
  • 靜態static 如果一個成員變數使用了static關鍵字,那麼這個變數不再屬於對象自己,而是屬於所在的類,多個對象共用同一份數據 靜態static 關鍵字修飾成員變數 靜態static關鍵字修飾成員方法 一旦使用static修飾成員方法,那麼這就成為了靜態方法,靜態方法不屬於對象,而是屬於類的 如 ...
  • 硬體記憶體架構? Java記憶體模型? 記憶體間交互的操作有哪些? 原子性、可見性、有序性? 先行發生原則有哪些? ...
  • hibernate介紹 hibernate是一個開源的輕量級的框架, hibernate框架應用在javaee三層結構中的dao層框架,在dao層對資料庫進行crud操作,使用hibernate框架實現crud操作; hibernate底層就是jdbc,hibernate對jdbc進行了封裝;使用h ...
  • Recently, I was made a service which can provide a simple way to get best model. so, i spent lot of time to read source code of auto-sklearn, auto-skl ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...