Java面試題及詳細答案120道之(041-060)

前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。

前后端面試題-專欄總目錄

在這里插入圖片描述

文章目錄

  • 一、本文面試題目錄
      • 41. 什么是工廠模式?簡單工廠、工廠方法、抽象工廠的區別?
      • 42. Java中的泛型有什么作用?
      • 43. Java中的`Comparable`和`Comparator`有何區別?
      • 44. 什么是Java中的注解?
      • 45. Java中的線程池有什么作用?
      • 46. 解釋Java中的`雙親委派模型`
      • 47. Java中的字符編碼有哪些常見類型,它們有什么區別?
      • 48. 什么是Java中的函數式接口?如何使用Lambda表達式?
      • 49. 簡述Java中的泛型擦除機制
      • 50. 什么是Java中的線程局部變量(ThreadLocal)?如何使用?
      • 51. 解釋Java中的動態代理及其實現方式
      • 52. 什么是Java中的注解(Annotation)?如何自定義注解?
      • 53. 解釋Java中的序列化與反序列化
      • 54. Java中的`equals()`和`==`有什么區別?
      • 55. 什么是Java中的Lambda表達式?適用于什么場景?
      • 56. 解釋Java中的Stream API及其常用操作
      • 57. Java中的`volatile`關鍵字有什么作用?
      • 58. Java中的`try-with-resources`語法有什么作用?
      • 59. 解釋Java中的深拷貝與淺拷貝
      • 60. Java中的`String`、`StringBuilder`、`StringBuffer`有什么區別?
  • 二、120道面試題目錄列表

一、本文面試題目錄

41. 什么是工廠模式?簡單工廠、工廠方法、抽象工廠的區別?

答案
工廠模式:用于創建對象,隱藏實例化邏輯,解耦對象創建與使用。

區別

  • 簡單工廠:一個工廠類根據參數創建不同產品(違反開閉原則)。

    class CarFactory {public static Car createCar(String type) {if ("Benz".equals(type)) return new Benz();else if ("BMW".equals(type)) return new BMW();return null;}
    }
    
  • 工廠方法:每個產品對應一個工廠類,通過繼承擴展(符合開閉原則)。

    interface CarFactory { Car createCar(); }
    class BenzFactory implements CarFactory {public Car createCar() { return new Benz(); }
    }
    class BMWFactory implements CarFactory {public Car createCar() { return new BMW(); }
    }
    
  • 抽象工廠:創建一系列相關產品(產品族),如汽車工廠同時生產汽車和發動機。

42. Java中的泛型有什么作用?

  • 答案:泛型用于在編譯時確保類型安全,可將類型作為參數傳遞,使代碼更通用。例如List表示該列表只能存儲String類型元素,避免了類型轉換錯誤,提高了代碼的可讀性和可維護性。

43. Java中的ComparableComparator有何區別?

答案

特性ComparableComparator
定義位置類內部(implements Comparable類外部(單獨實現Comparator接口)
方法int compareTo(T o)int compare(T o1, T o2)
排序邏輯類自身的默認排序(自然排序)外部定義的定制排序
適用場景固定排序邏輯靈活切換排序邏輯(如升序/降序)

代碼示例

// Comparable:類內部實現
class Student implements Comparable<Student> {int age;@Overridepublic int compareTo(Student o) {return Integer.compare(this.age, o.age); // 按年齡升序}
}// Comparator:外部實現
class StudentNameComparator implements Comparator<Student> {@Overridepublic int compare(Student s1, Student s2) {return s1.name.compareTo(s2.name); // 按姓名排序}
}

44. 什么是Java中的注解?

  • 答案:注解是Java 5.0引入的新特性,用于為代碼添加元數據。它可以用于類、方法、變量等上面,提供信息給編譯器、開發工具或運行時環境。例如@Override注解用于標識方法重寫,@Deprecated注解表示方法已過時等。

45. Java中的線程池有什么作用?

  • 答案:線程池用于管理和復用線程,避免頻繁創建和銷毀線程帶來的開銷,提高系統性能和資源利用率。常見的線程池類有ThreadPoolExecutor,可通過它創建不同類型的線程池,如FixedThreadPool(固定大小線程池)、CachedThreadPool(緩存線程池)等。

46. 解釋Java中的雙親委派模型

原理:類加載器的委派機制,當加載類時,先委托父加載器加載,父加載器無法加載時才自己加載,避免類重復加載和安全問題(如自定義java.lang.String不會被加載)。
類加載器層次

  • 啟動類加載器(Bootstrap ClassLoader):加載JAVA_HOME/lib下的類;
  • 擴展類加載器(Extension ClassLoader):加載JAVA_HOME/lib/ext下的類;
  • 應用類加載器(Application ClassLoader):加載類路徑下的類;
  • 自定義類加載器:繼承ClassLoader,重寫findClass()

代碼示例(類加載委派):

public class ClassLoaderDemo {public static void main(String[] args) {// 獲取當前類的類加載器(應用類加載器)ClassLoader appClassLoader = ClassLoaderDemo.class.getClassLoader();System.out.println(appClassLoader); // 輸出sun.misc.Launcher$AppClassLoader// 父加載器(擴展類加載器)ClassLoader extClassLoader = appClassLoader.getParent();System.out.println(extClassLoader); // 輸出sun.misc.Launcher$ExtClassLoader// 啟動類加載器(C++實現,返回null)ClassLoader bootstrapClassLoader = extClassLoader.getParent();System.out.println(bootstrapClassLoader); // 輸出null}
}

47. Java中的字符編碼有哪些常見類型,它們有什么區別?

  • 答案:常見的字符編碼有ASCII、UTF - 8、UTF - 16等。ASCII編碼用7位二進制數表示一個字符,只能表示英文字母、數字和一些特殊字符;UTF - 8是一種可變長度編碼,可表示世界上幾乎所有字符,對英文字符用1個字節表示,對其他字符根據需要用2 - 4個字節表示;UTF - 16通常用2個字節表示一個字符,但對于一些特殊字符需用4個字節。

48. 什么是Java中的函數式接口?如何使用Lambda表達式?

  • 原理:函數式接口是只包含一個抽象方法的接口(可以有默認方法和靜態方法),用@FunctionalInterface注解標識。Lambda表達式是函數式接口的實例化方式,用于簡化匿名內部類的寫法。
  • 代碼示例
import java.util.function.Predicate;// 自定義函數式接口
@FunctionalInterface
interface Calculator {int calculate(int a, int b);
}public class FunctionalInterfaceDemo {public static void main(String[] args) {// 使用Lambda表達式實現Calculator接口Calculator add = (a, b) -> a + b;System.out.println(add.calculate(2, 3)); // 輸出5// 內置函數式接口Predicate(判斷條件)Predicate<Integer> isEven = num -> num % 2 == 0;System.out.println(isEven.test(4)); // 輸出trueSystem.out.println(isEven.test(5)); // 輸出false}
}

49. 簡述Java中的泛型擦除機制

  • 原理:Java泛型是“偽泛型”,在編譯階段會進行類型擦除:編譯器將泛型類型參數替換為其邊界類型(若無邊界則替換為Object),并在必要時插入類型轉換代碼。這意味著泛型信息在運行時不存在,無法通過反射獲取泛型參數的具體類型(除非通過匿名內部類等特殊方式)。
  • 代碼示例
import java.util.ArrayList;public class GenericErasureDemo {public static void main(String[] args) {ArrayList<String> strList = new ArrayList<>();ArrayList<Integer> intList = new ArrayList<>();// 類型擦除后,兩者的運行時類型相同System.out.println(strList.getClass() == intList.getClass()); // 輸出true// 編譯時泛型檢查,運行時無限制(可通過反射繞過)try {strList.getClass().getMethod("add", Object.class).invoke(strList, 10);System.out.println(strList); // 輸出[10],說明運行時無泛型限制} catch (Exception e) {e.printStackTrace();}}
}

50. 什么是Java中的線程局部變量(ThreadLocal)?如何使用?

  • 原理ThreadLocal用于為每個線程提供獨立的變量副本,確保線程間數據隔離。其內部通過Thread類中的threadLocals(類型為ThreadLocalMap)存儲數據,每個ThreadLocal對象作為key,對應的線程私有值作為value。
  • 注意:使用后需手動調用remove()方法清理數據,否則可能導致內存泄漏(ThreadLocalMap中的Entry是弱引用key,但value是強引用,若線程長期存活,value無法回收)。
  • 代碼示例
public class ThreadLocalDemo {// 定義ThreadLocal變量,指定泛型類型為Stringprivate static ThreadLocal<String> threadLocal = new ThreadLocal<>();public static void main(String[] args) {// 線程1設置并獲取值new Thread(() -> {threadLocal.set("線程1的數據");System.out.println(Thread.currentThread().getName() + ":" + threadLocal.get());threadLocal.remove(); // 清理數據}, "線程1").start();// 線程2設置并獲取值new Thread(() -> {threadLocal.set("線程2的數據");System.out.println(Thread.currentThread().getName() + ":" + threadLocal.get());threadLocal.remove(); // 清理數據}, "線程2").start();}
}
// 輸出:
// 線程1:線程1的數據
// 線程2:線程2的數據
No.大劍師精品GIS教程推薦
0地圖渲染基礎- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】
1Openlayers 【入門教程】 - 【源代碼+示例 300+】
2Leaflet 【入門教程】 - 【源代碼+圖文示例 150+】
3MapboxGL【入門教程】 - 【源代碼+圖文示例150+】
4Cesium 【入門教程】 - 【源代碼+綜合教程 200+】
5threejs【中文API】 - 【源代碼+圖文示例200+】

51. 解釋Java中的動態代理及其實現方式

原理:動態代理允許在運行時創建目標類的代理對象,增強目標方法(如日志、事務)而不修改源碼。
實現方式

  • JDK動態代理:基于接口,通過Proxy.newProxyInstance()生成代理類;
  • CGLIB動態代理:基于繼承,通過生成目標類子類實現代理(需引入CGLIB庫)。

代碼示例(JDK動態代理):

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;// 目標接口
interface Target {void doSomething();
}// 目標實現類
class TargetImpl implements Target {@Overridepublic void doSomething() {System.out.println("執行目標方法");}
}// 代理處理器
class ProxyHandler implements InvocationHandler {private Object target;public ProxyHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("代理:方法執行前"); // 增強邏輯Object result = method.invoke(target, args); // 調用目標方法System.out.println("代理:方法執行后");return result;}
}public class DynamicProxyDemo {public static void main(String[] args) {Target target = new TargetImpl();// 生成代理對象(基于接口)Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(),new Class[]{Target.class},new ProxyHandler(target));proxy.doSomething();}
}
// 輸出:代理:方法執行前 → 執行目標方法 → 代理:方法執行后

52. 什么是Java中的注解(Annotation)?如何自定義注解?

原理:注解是代碼的元數據,用于標記類、方法等,可通過反射解析。內置注解如@Override@Deprecated,自定義注解需用@interface聲明。
核心元注解

  • @Retention:指定注解保留階段(源碼、字節碼、運行時);
  • @Target:指定注解可修飾的元素(類、方法等)。

代碼示例

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;// 自定義注解
@Retention(RetentionPolicy.RUNTIME) // 運行時保留,可通過反射獲取
@Target(ElementType.METHOD) // 僅修飾方法
@interface Log {String value() default "執行方法"; // 注解屬性
}public class AnnotationDemo {@Log("測試方法") // 使用注解public void test() {System.out.println("測試方法執行");}public static void main(String[] args) throws Exception {// 反射獲取注解Log log = AnnotationDemo.class.getMethod("test").getAnnotation(Log.class);System.out.println(log.value()); // 輸出:測試方法}
}

53. 解釋Java中的序列化與反序列化

原理:序列化將對象轉換為字節流(便于存儲/傳輸),反序列化則將字節流恢復為對象。需實現Serializable接口(標記接口,無方法),transient關鍵字修飾的字段不參與序列化。

代碼示例

import java.io.*;class User implements Serializable { // 實現Serializable接口private String name;private transient int age; // transient字段不序列化public User(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "User{name='" + name + "', age=" + age + "}";}
}public class SerializationDemo {public static void main(String[] args) throws IOException, ClassNotFoundException {// 序列化User user = new User("Alice", 20);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.ser"));oos.writeObject(user);oos.close();// 反序列化ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.ser"));User deserializedUser = (User) ois.readObject();ois.close();System.out.println(deserializedUser); // 輸出:User{name='Alice', age=0}(age被transient修飾,未序列化)}
}

54. Java中的equals()==有什么區別?

原理

  • ==:比較基本類型時為值比較;比較引用類型時為內存地址(對象是否為同一實例)比較。
  • equals():Object類默認實現為==,但可重寫(如String類重寫為值比較)。

代碼示例

public class EqualsDemo {public static void main(String[] args) {// 基本類型比較int a = 10;int b = 10;System.out.println(a == b); // true(值相等)// 引用類型比較String s1 = new String("hello");String s2 = new String("hello");System.out.println(s1 == s2); // false(地址不同)System.out.println(s1.equals(s2)); // true(String重寫equals,比較值)}
}

55. 什么是Java中的Lambda表達式?適用于什么場景?

原理:Lambda是函數式接口的匿名實現,簡化代碼。格式:(參數) -> 表達式/代碼塊
適用場景:簡化集合遍歷(如forEach)、線程創建、Stream API等。

代碼示例

import java.util.Arrays;
import java.util.List;public class LambdaDemo {public static void main(String[] args) {// 1. 簡化線程創建(Runnable是函數式接口)new Thread(() -> System.out.println("Lambda線程運行")).start();// 2. 集合遍歷List<String> list = Arrays.asList("a", "b", "c");list.forEach(str -> System.out.println(str)); // 輸出a、b、c// 3. 簡化Comparatorlist.sort((s1, s2) -> s2.compareTo(s1)); // 倒序排序System.out.println(list); // 輸出[c, b, a]}
}

56. 解釋Java中的Stream API及其常用操作

原理:Stream API用于處理集合數據,支持鏈式操作(過濾、映射、聚合等),類似SQL查詢,分為中間操作(返回Stream)和終端操作(返回結果)。

常用操作

  • filter():過濾元素;
  • map():轉換元素;
  • collect():收集結果(如轉List);
  • count():統計元素數。

代碼示例

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class StreamDemo {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);// 過濾偶數 → 乘以2 → 收集為ListList<Integer> result = numbers.stream().filter(n -> n % 2 == 0) // 中間操作:保留偶數.map(n -> n * 2) // 中間操作:乘以2.collect(Collectors.toList()); // 終端操作:轉ListSystem.out.println(result); // 輸出[4, 8, 12]}
}

57. Java中的volatile關鍵字有什么作用?

原理volatile保證變量的可見性和禁止指令重排序,但不保證原子性。

  • 可見性:線程修改volatile變量后,立即刷新到主內存,其他線程讀取時從主內存加載;
  • 有序性:禁止編譯器和CPU對volatile變量相關指令重排序(如單例模式中的雙重檢查鎖)。

代碼示例(禁止重排序):

public class VolatileDemo {private static volatile VolatileDemo instance; // 禁止重排序private VolatileDemo() {}public static VolatileDemo getInstance() {if (instance == null) {synchronized (VolatileDemo.class) {if (instance == null) {// 若不加volatile,可能發生指令重排序:// 1. 分配內存 → 2. 實例化對象 → 3. 賦值給instance// 重排序后可能為1→3→2,導致其他線程獲取到未初始化的instanceinstance = new VolatileDemo();}}}return instance;}
}

58. Java中的try-with-resources語法有什么作用?

原理try-with-resources用于自動關閉實現AutoCloseable接口的資源(如流、連接),替代傳統的try-finally,避免資源泄漏。

代碼示例

import java.io.FileInputStream;
import java.io.IOException;public class TryWithResources {public static void main(String[] args) {// 資源在try塊結束后自動關閉try (FileInputStream fis = new FileInputStream("test.txt")) {int data = fis.read();while (data != -1) {System.out.print((char) data);data = fis.read();}} catch (IOException e) { // 統一處理異常e.printStackTrace();}// 無需手動調用fis.close()}
}

59. 解釋Java中的深拷貝與淺拷貝

原理

  • 淺拷貝:復制對象時,僅復制基本類型字段,引用類型字段仍指向原對象(如Object.clone()默認實現);
  • 深拷貝:復制對象及引用類型字段指向的所有對象,完全獨立于原對象(需手動實現,如序列化/反序列化或遞歸克隆)。

代碼示例

import java.util.Arrays;class Person implements Cloneable {private String name;private int[] ages; // 引用類型public Person(String name, int[] ages) {this.name = name;this.ages = ages;}// 淺拷貝(默認clone)@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}// 深拷貝(手動復制引用類型)public Person deepClone() throws CloneNotSupportedException {Person clone = (Person) super.clone();clone.ages = Arrays.copyOf(this.ages, this.ages.length); // 復制數組return clone;}// getter/setter省略
}public class CopyDemo {public static void main(String[] args) throws CloneNotSupportedException {int[] ages = {20, 30};Person original = new Person("Alice", ages);// 淺拷貝Person shallowClone = (Person) original.clone();shallowClone.ages[0] = 25;System.out.println(original.ages[0]); // 輸出25(原對象被修改)// 深拷貝Person deepClone = original.deepClone();deepClone.ages[0] = 30;System.out.println(original.ages[0]); // 輸出25(原對象未被修改)}
}

60. Java中的StringStringBuilderStringBuffer有什么區別?

原理

  • String:不可變字符序列(底層char[]final修飾),每次修改創建新對象,效率低;
  • StringBuilder:可變字符序列,非線程安全,效率高(單線程推薦);
  • StringBuffer:可變字符序列,線程安全(方法加synchronized),效率低(多線程推薦)。

代碼示例

public class StringCompare {public static void main(String[] args) {String str = "a";str += "b"; // 創建新String對象(原對象不變)StringBuilder sb = new StringBuilder("a");sb.append("b"); // 直接修改內部數組,無新對象StringBuffer sbf = new StringBuffer("a");sbf.append("b"); // 線程安全的append}
}

二、120道面試題目錄列表

文章序號Java面試題120道
1Java面試題及詳細答案120道(01-20)
2Java面試題及詳細答案120道(21-40)
3Java面試題及詳細答案120道(41-60)
4Java面試題及詳細答案120道(61-80)
5Java面試題及詳細答案120道(81-100)
6Java面試題及詳細答案120道(5101-120)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92940.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92940.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92940.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【嘗試】本地部署openai-whisper,通過 http請求識別

安裝whisper的教程&#xff0c;已在 https://blog.csdn.net/qq_23938507/article/details/149394418 和 https://blog.csdn.net/qq_23938507/article/details/149326290 中說明。 1、創建whisperDemo1.py from fastapi import FastAPI, UploadFile, File import whisper i…

Visual Studio 的常用快捷鍵

Visual Studio 作為主流的開發工具&#xff0c;提供了大量快捷鍵提升編碼效率。以下按功能分類整理常用快捷鍵&#xff0c;涵蓋基礎操作、代碼編輯、調試等場景&#xff08;以 Visual Studio 2022 為例&#xff0c;部分快捷鍵可在「工具 > 選項 > 環境 > 鍵盤」中自定…

Triton Server部署Embedding模型

在32核CPU、無GPU的服務器上&#xff0c;使用Python后端和ONNX后端部署嵌入模型&#xff0c;并實現并行調用和性能優化策略。方案一&#xff1a;使用Python后端部署Embedding模型 Python后端提供了極大的靈活性&#xff0c;可以直接在Triton中運行您熟悉的sentence-transformer…

Java動態調試技術原理

本文轉載自 美團技術團隊胡健的Java 動態調試技術原理及實踐, 通過學習java agent方式進行動態調試了解目前很多大廠開源的一些基于此的調試工具。 簡介 斷點調試是我們最常使用的調試手段&#xff0c;它可以獲取到方法執行過程中的變量信息&#xff0c;并可以觀察到方法的執…

人工智能-python-OpenCV 圖像基礎認知與運用

文章目錄OpenCV 圖像基礎認知與運用1. OpenCV 簡介與安裝OpenCV 的優勢安裝 OpenCV2. 圖像的基本概念2.1. 圖像的存儲格式2.2. 圖像的表示3. 圖像的基本操作3.1. 創建圖像窗口3.2. 讀取與顯示圖像3.3. 保存圖像3.4. 圖像切片與區域提取3.5. 圖像大小調整4. 圖像繪制與注釋4.1. …

Windows電腦添加、修改打印機的IP地址端口的方法

本文介紹在Windows電腦中&#xff0c;為打印機添加、修改IP地址&#xff0c;從而解決電腦能找到打印機、但是無法打印問題的方法。最近&#xff0c;辦公室的打印機出現問題——雖然在電腦的打印機列表能找到這個打印機&#xff0c;但是選擇打印時&#xff0c;就會顯示文檔被掛起…

告別復雜配置!Spring Boot優雅集成百度OCR的終極方案

1. 準備工作 1.1 注冊百度AI開放平臺 訪問百度AI開放平臺 注冊賬號并登錄 進入控制臺 → 文字識別 → 創建應用 記錄下API Key和Secret Key 2. 項目配置 2.1 添加依賴 (pom.xml) <dependencies><!-- Spring Boot Web --><dependency><groupId>o…

「iOS」——內存五大分區

UI學習iOS-底層原理 24&#xff1a;內存五大區總覽一、棧區&#xff08;Stack&#xff09;1.1 核心特性1.2 優缺點1.3函數棧與棧幀1.3 堆棧溢出風險二、堆區&#xff08;Heap&#xff09;;2.1 核心特性2.2 與棧區對比三、全局 / 靜態區&#xff08;Global/Static&#xff09;3.…

每日一題【刪除有序數組中的重復項 II】

刪除有序數組中的重復項 II思路class Solution { public:int removeDuplicates(vector<int>& nums) {if(nums.size()<2){return nums.size();}int index 2;for (int i 2; i < nums.size();i ) {if(nums[i] ! nums[index-2]) {nums[index]nums[i];}}return ind…

兼容性問題記錄

1、dialog設置高度MATCH_PARENT全屏后&#xff0c;三星機型和好像是一加&#xff0c;會帶出頂部狀態欄&#xff0c;設置隱藏狀態欄屬性無效。解決方法&#xff1a;高度不設置為MATCH_PARENT&#xff0c;通過windowmanager.getdefaultdisplay來獲取并設置高度&#xff0c;再設置…

6.數組和字符串

在C語言中&#xff0c;數組和字符串是基礎且重要的概念。它們用于存儲和操作一系列相同類型的元素或字符序列。數組1. 數組定義與初始化數組是一系列相同類型的數據項的集合&#xff0c;這些數據項可以通過一個共同的名字來引用。數組中的每個元素都有一個索引&#xff08;也稱…

odoo代碼分析(一)

Odoo 是一套基于網絡的開放式源代碼商業應用套件,既可以作為獨立應用運行,也可以作為集成的全功能 ERP 系統使用。Odoo 平臺采用模塊化架構,允許組織根據自身需求起步,并在需求增長時擴展功能。 什么是 Odoo? Odoo 提供了一個完整的商業應用生態系統,包括: 客戶關系管…

從“人工眼”到‘智能眼’:EZ-Vision視覺系統如何重構生產線視覺檢測精度?

制造業是我國實體經濟的基礎&#xff0c;是國內經濟增長的重要引擎。制造業智能化建設是當下的必然趨勢&#xff0c;然而目前依舊有很多中小型企業因為成本原因&#xff0c;無法加快智能化制造的步伐。在智能檢測領域更是如此&#xff0c;很多企業依舊在采用人工檢測&#xff0…

Etcd原理基礎學習

etcd 是一個開源的分布式鍵值存儲系統&#xff0c;專注于提供高可用性、強一致性的數據存儲與訪問&#xff0c;廣泛應用于分布式系統的服務發現、配置管理和協調任務。以下是其核心特性和應用場景的詳細介紹。接下來就看看Etcd如何實現服務注冊&#xff0c;以及如何通過Raft算法…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-32,(知識點:模數轉換器,信噪比,計算公式,)

目錄 1、題目 2、解答 步驟一&#xff1a;明確理想 ADC 的信噪比公式 步驟二&#xff1a;推導公式的來源 步驟三&#xff1a;得出答案 3、相關知識點 一、信噪比&#xff08;SNR&#xff09;的定義 二、理想 ADC 的量化噪聲 三、滿量程正弦波信號的功率 四、信噪比公…

Redis過期數據的刪除策略是什么?有哪些?

定時刪除&#xff1a;- 每個設置了TTL的key中都會創建一個計時器&#xff0c;等到過期時間就會立即刪除- 對內存友好&#xff0c;但是會占用大量的CPU資源去處理過期數據&#xff0c;從而影響緩存的吞吐量和響應時間惰性刪除&#xff1a;- 設置了key的過期后&#xff0c;不會立…

linux dd命令詳解

dd 是一個功能強大的 Unix/Linux 命令行工具&#xff0c;用于低級別的字節流操作&#xff0c;常用于創建、復制、轉換和處理文件或設備數據。它在 macOS 和 Linux 系統上都可用&#xff0c;但在 macOS 上有一些細微差異。本文將詳細講解 dd 命令的用法&#xff0c;包括參數、常…

多線程同步技術是用于協調多個線程訪問共享資源或執行順序的機制,以避免數據競爭、死鎖、線程不安全等問題

多線程同步技術是用于協調多個線程訪問共享資源或執行順序的機制,以避免數據競爭、死鎖、線程不安全等問題。 在提供的代碼中,存在多線程操作加熱板的場景,涉及鎖競爭和硬件資源訪問,優化多線程同步可以顯著提升程序性能和穩定性。 以下是多線程同步技術的詳細解釋、常見…

CRMEB標準版,從創建數據表到實現最基礎增刪改查的實現過程

很多使用了CRMEB單商戶系統的童鞋在進行二開的時候&#xff0c;都會遇到新建了數據表之后不知道對數據表怎么進行操作。那么&#xff0c;這篇文章將帶你完整的實現一遍&#xff0c;以后就不會怕啦。一、創建數據表就以最簡單的為例&#xff0c;創建一個學生的信息表編號姓名性別…

J2EE模式---數據訪問對象模式

數據訪問對象模式基礎概念數據訪問對象模式&#xff08;Data Access Object Pattern&#xff0c;簡稱 DAO 模式&#xff09;是一種結構型設計模式&#xff0c;其核心思想是將數據訪問邏輯與業務邏輯分離&#xff0c;通過一個抽象層&#xff08;DAO&#xff09;來處理數據的持久…