【1.4 漫畫PostgreSQL高級數據庫及國產數據庫對比】

🐘 漫畫PostgreSQL高級數據庫及國產數據庫對比

👨?💻 小明:“老王,除了MySQL,還有哪些優秀的關系型數據庫?國產數據庫發展得怎么樣?”

🧙?♂? 架構師老王:“PostgreSQL是世界上最先進的開源數據庫!而且我們國產數據庫也在快速發展,達夢、人大金倉、openGauss都很優秀。讓我們一起學習這些數據庫的特色!”

📚 目錄

  • PostgreSQL核心特性
  • Oracle數據庫
  • 國產數據庫
  • 數據庫選型對比
  • Java集成實戰
  • 性能優化

🐘 PostgreSQL核心特性

🔧 PostgreSQL配置與連接

// PostgreSQL配置
@Configuration
public class PostgreSQLConfig {@Bean@Primary@ConfigurationProperties("spring.datasource.postgresql")public DataSource postgresqlDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:postgresql://localhost:5432/testdb");config.setUsername("postgres");config.setPassword("password");config.setDriverClassName("org.postgresql.Driver");// 連接池配置config.setMaximumPoolSize(20);config.setMinimumIdle(5);config.setConnectionTimeout(30000);config.setIdleTimeout(600000);config.setMaxLifetime(1800000);// PostgreSQL特有配置config.addDataSourceProperty("useSSL", "false");config.addDataSourceProperty("serverTimezone", "Asia/Shanghai");config.addDataSourceProperty("reWriteBatchedInserts", "true");return new HikariDataSource(config);}@Beanpublic JdbcTemplate postgresqlJdbcTemplate(@Qualifier("postgresqlDataSource") DataSource dataSource) {return new JdbcTemplate(dataSource);}
}// PostgreSQL特有數據類型支持
@Entity
@Table(name = "postgresql_features")
public class PostgreSQLFeatureEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;// JSON類型支持@Column(columnDefinition = "jsonb")@Convert(converter = JsonbConverter.class)private Map<String, Object> jsonData;// 數組類型支持@Column(columnDefinition = "text[]")@Convert(converter = StringArrayConverter.class)private String[] tags;// UUID類型@Column(columnDefinition = "uuid")private UUID uuid;// 范圍類型@Column(columnDefinition = "int4range")private String ageRange;// 地理位置類型@Column(columnDefinition = "point")private String location;// 全文搜索向量@Column(columnDefinition = "tsvector")private String searchVector;
}

🔍 PostgreSQL高級查詢

@Repository
public class PostgreSQLAdvancedRepository {@Autowiredprivate JdbcTemplate jdbcTemplate;// JSON查詢public List<Map<String, Object>> queryByJsonField(String jsonPath, String value) {String sql = "SELECT * FROM products WHERE json_data->>'category' = ?";return jdbcTemplate.queryForList(sql, value);}// 數組查詢public List<Map<String, Object>> queryByArrayContains(String tag) {String sql = "SELECT * FROM articles WHERE ? = ANY(tags)";return jdbcTemplate.queryForList(sql, tag);}// 全文搜索public List<Map<String, Object>> fullTextSearch(String searchTerm) {String sql = """SELECT *, ts_rank(search_vector, plainto_tsquery(?)) as rankFROM articles WHERE search_vector @@ plainto_tsquery(?)ORDER BY rank DESC""";return jdbcTemplate.queryForList(sql, searchTerm, searchTerm);}// 窗口函數查詢public List<Map<String, Object>> getTopProductsByCategory() {String sql = """SELECT product_name, category, sales,ROW_NUMBER() OVER (PARTITION BY category ORDER BY sales DESC) as rankFROM productsWHERE ROW_NUMBER() OVER (PARTITION BY category ORDER BY sales DESC) <= 3""";return jdbcTemplate.queryForList(sql);}// CTE公用表表達式public List<Map<String, Object>> getHierarchicalData(Long parentId) {String sql = """WITH RECURSIVE category_tree AS (SELECT id, name, parent_id, 1 as levelFROM categories WHERE parent_id = ?UNION ALLSELECT c.id, c.name, c.parent_id, ct.level + 1FROM categories cJOIN category_tree ct ON c.parent_id = ct.id)SELECT * FROM category_tree ORDER BY level, name""";return jdbcTemplate.queryForList(sql, parentId);}
}

🏛? Oracle數據庫

🔧 Oracle特性與配置

// Oracle數據庫配置
@Configuration
public class OracleConfig {@Bean@ConfigurationProperties("spring.datasource.oracle")public DataSource oracleDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");config.setUsername("hr");config.setPassword("password");config.setDriverClassName("oracle.jdbc.OracleDriver");// Oracle特有配置config.addDataSourceProperty("oracle.jdbc.timezoneAsRegion", "false");config.addDataSourceProperty("oracle.net.keepAlive", "true");return new HikariDataSource(config);}
}// Oracle特有實體設計
@Entity
@Table(name = "ORACLE_FEATURES")
@SequenceGenerator(name = "oracle_seq", sequenceName = "ORACLE_SEQ", allocationSize = 1)
public class OracleFeatureEntity {@Id@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "oracle_seq")private Long id;// CLOB大文本@Lob@Column(name = "CONTENT")private String content;// BLOB二進制@Lob@Column(name = "ATTACHMENT")private byte[] attachment;// Oracle日期類型@Column(name = "CREATE_DATE")@Temporal(TemporalType.TIMESTAMP)private Date createDate;// NUMBER類型@Column(name = "PRICE", precision = 10, scale = 2)private BigDecimal price;
}// Oracle高級查詢特性
@Repository
public class OracleAdvancedRepository {@Autowiredprivate JdbcTemplate oracleJdbcTemplate;// 分頁查詢(Oracle 12c+)public List<Map<String, Object>> queryWithPagination(int offset, int limit) {String sql = """SELECT * FROM (SELECT e.*, ROW_NUMBER() OVER (ORDER BY id) as rnFROM employees e) WHERE rn BETWEEN ? AND ?""";return oracleJdbcTemplate.queryForList(sql, offset + 1, offset + limit);}// 層次查詢public List<Map<String, Object>> getHierarchicalEmployees(Long managerId) {String sql = """SELECT employee_id, name, manager_id, LEVEL, SYS_CONNECT_BY_PATH(name, '/') as pathFROM employeesSTART WITH manager_id = ?CONNECT BY PRIOR employee_id = manager_idORDER SIBLINGS BY name""";return oracleJdbcTemplate.queryForList(sql, managerId);}// 分析函數public List<Map<String, Object>> getSalesAnalytics() {String sql = """SELECT employee_id,sales_amount,SUM(sales_amount) OVER (ORDER BY sales_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as running_total,AVG(sales_amount) OVER (ORDER BY sales_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as moving_avg,RANK() OVER (ORDER BY sales_amount DESC) as sales_rankFROM salesORDER BY sales_date""";return oracleJdbcTemplate.queryForList(sql);}
}

🇨🇳 國產數據庫

🔥 達夢數據庫(DM)

// 達夢數據庫配置
@Configuration
public class DamengConfig {@Bean@ConfigurationProperties("spring.datasource.dameng")public DataSource damengDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:dm://localhost:5236/DAMENG");config.setUsername("SYSDBA");config.setPassword("SYSDBA");config.setDriverClassName("dm.jdbc.driver.DmDriver");// 達夢特有配置config.addDataSourceProperty("loginTimeout", "30");config.addDataSourceProperty("socketTimeout", "0");return new HikariDataSource(config);}
}// 達夢數據庫操作
@Service
public class DamengService {@Autowired@Qualifier("damengDataSource")private DataSource damengDataSource;// 達夢分頁查詢public List<Map<String, Object>> queryWithPagination(int page, int size) {String sql = "SELECT * FROM users LIMIT ?, ?";try (Connection conn = damengDataSource.getConnection();PreparedStatement stmt = conn.prepareStatement(sql)) {stmt.setInt(1, page * size);stmt.setInt(2, size);ResultSet rs = stmt.executeQuery();List<Map<String, Object>> results = new ArrayList<>();while (rs.next()) {Map<String, Object> row = new HashMap<>();row.put("id", rs.getLong("id"));row.put("username", rs.getString("username"));row.put("email", rs.getString("email"));results.add(row);}return results;} catch (SQLException e) {throw new RuntimeException("達夢數據庫查詢失敗", e);}}// 達夢存儲過程調用public void callDamengProcedure(String procedureName, Object... params) {String sql = "{call " + procedureName + "(" + "?,".repeat(params.length).replaceAll(",$", "") + ")}";try (Connection conn = damengDataSource.getConnection();CallableStatement stmt = conn.prepareCall(sql)) {for (int i = 0; i < params.length; i++) {stmt.setObject(i + 1, params[i]);}stmt.execute();} catch (SQLException e) {throw new RuntimeException("達夢存儲過程調用失敗", e);}}
}

🏛? 人大金倉數據庫(KingBase)

// 人大金倉配置
@Configuration
public class KingbaseConfig {@Bean@ConfigurationProperties("spring.datasource.kingbase")public DataSource kingbaseDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:kingbase8://localhost:54321/test");config.setUsername("system");config.setPassword("password");config.setDriverClassName("com.kingbase8.Driver");// 人大金倉特有配置config.addDataSourceProperty("serverTimezone", "Asia/Shanghai");config.addDataSourceProperty("useUnicode", "true");config.addDataSourceProperty("characterEncoding", "utf8");return new HikariDataSource(config);}
}// 人大金倉服務
@Service
public class KingbaseService {@Autowired@Qualifier("kingbaseDataSource")private DataSource kingbaseDataSource;// 人大金倉批量插入public void batchInsert(List<User> users) {String sql = "INSERT INTO users (username, email, age) VALUES (?, ?, ?)";try (Connection conn = kingbaseDataSource.getConnection();PreparedStatement stmt = conn.prepareStatement(sql)) {for (User user : users) {stmt.setString(1, user.getUsername());stmt.setString(2, user.getEmail());stmt.setInt(3, user.getAge());stmt.addBatch();}int[] results = stmt.executeBatch();log.info("人大金倉批量插入完成,影響行數: {}", Arrays.stream(results).sum());} catch (SQLException e) {throw new RuntimeException("人大金倉批量插入失敗", e);}}// 人大金倉全文檢索public List<Map<String, Object>> fullTextSearch(String keyword) {String sql = "SELECT * FROM articles WHERE to_tsvector('simple', title || ' ' || content) @@ to_tsquery('simple', ?)";try (Connection conn = kingbaseDataSource.getConnection();PreparedStatement stmt = conn.prepareStatement(sql)) {stmt.setString(1, keyword);ResultSet rs = stmt.executeQuery();List<Map<String, Object>> results = new ArrayList<>();while (rs.next()) {Map<String, Object> row = new HashMap<>();row.put("id", rs.getLong("id"));row.put("title", rs.getString("title"));row.put("content", rs.getString("content"));results.add(row);}return results;} catch (SQLException e) {throw new RuntimeException("人大金倉全文檢索失敗", e);}}
}

🌟 openGauss數據庫

// openGauss配置
@Configuration
public class OpenGaussConfig {@Bean@ConfigurationProperties("spring.datasource.opengauss")public DataSource openGaussDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:opengauss://localhost:5432/postgres");config.setUsername("gaussdb");config.setPassword("password");config.setDriverClassName("org.opengauss.Driver");// openGauss優化配置config.addDataSourceProperty("prepareThreshold", "5");config.addDataSourceProperty("batchMode", "true");config.addDataSourceProperty("fetchsize", "1000");return new HikariDataSource(config);}
}// openGauss高級特性
@Service
public class OpenGaussService {@Autowired@Qualifier("openGaussDataSource")private DataSource openGaussDataSource;// openGauss列式存儲查詢public List<Map<String, Object>> queryColumnStore(String tableName) {String sql = "SELECT * FROM " + tableName + " WHERE create_date >= ? ORDER BY id";try (Connection conn = openGaussDataSource.getConnection();PreparedStatement stmt = conn.prepareStatement(sql)) {stmt.setDate(1, Date.valueOf(LocalDate.now().minusDays(30)));ResultSet rs = stmt.executeQuery();List<Map<String, Object>> results = new ArrayList<>();ResultSetMetaData metaData = rs.getMetaData();int columnCount = metaData.getColumnCount();while (rs.next()) {Map<String, Object> row = new HashMap<>();for (int i = 1; i <= columnCount; i++) {row.put(metaData.getColumnName(i), rs.getObject(i));}results.add(row);}return results;} catch (SQLException e) {throw new RuntimeException("openGauss列式存儲查詢失敗", e);}}// openGauss分區表操作public void createPartitionTable() {String sql = """CREATE TABLE sales_partition (id SERIAL PRIMARY KEY,sale_date DATE NOT NULL,amount DECIMAL(10,2),region VARCHAR(50)) PARTITION BY RANGE (sale_date) (PARTITION p2023 VALUES LESS THAN ('2024-01-01'),PARTITION p2024 VALUES LESS THAN ('2025-01-01'))""";try (Connection conn = openGaussDataSource.getConnection();Statement stmt = conn.createStatement()) {stmt.execute(sql);log.info("openGauss分區表創建成功");} catch (SQLException e) {throw new RuntimeException("openGauss分區表創建失敗", e);}}
}

📊 數據庫選型對比

🔍 核心特性對比

// 數據庫特性對比服務
@Service
public class DatabaseComparisonService {public DatabaseComparison compareFeatures() {DatabaseComparison comparison = new DatabaseComparison();// PostgreSQL特性DatabaseFeature postgresql = new DatabaseFeature();postgresql.setName("PostgreSQL");postgresql.setOpenSource(true);postgresql.setACIDCompliance(true);postgresql.setJSONSupport(true);postgresql.setFullTextSearch(true);postgresql.setGISSupport(true);postgresql.setAdvancedIndexing(true);postgresql.setExtensibility(true);postgresql.setPerformance("高");postgresql.setEcosystem("豐富");// Oracle特性DatabaseFeature oracle = new DatabaseFeature();oracle.setName("Oracle");oracle.setOpenSource(false);oracle.setACIDCompliance(true);oracle.setJSONSupport(true);oracle.setFullTextSearch(true);oracle.setGISSupport(true);oracle.setAdvancedIndexing(true);oracle.setExtensibility(true);oracle.setPerformance("極高");oracle.setEcosystem("最豐富");oracle.setEnterpriseFeatures("最強");// 達夢特性DatabaseFeature dameng = new DatabaseFeature();dameng.setName("達夢");dameng.setOpenSource(false);dameng.setACIDCompliance(true);dameng.setJSONSupport(true);dameng.setFullTextSearch(true);dameng.setGISSupport(true);dameng.setAdvancedIndexing(true);dameng.setPerformance("高");dameng.setDomesticSupport("強");dameng.setSecurityLevel("高");// 人大金倉特性DatabaseFeature kingbase = new DatabaseFeature();kingbase.setName("人大金倉");kingbase.setOpenSource(false);kingbase.setACIDCompliance(true);kingbase.setJSONSupport(true);kingbase.setFullTextSearch(true);kingbase.setCompatibility("Oracle兼容");kingbase.setPerformance("高");kingbase.setDomesticSupport("強");// openGauss特性DatabaseFeature opengauss = new DatabaseFeature();opengauss.setName("openGauss");opengauss.setOpenSource(true);opengauss.setACIDCompliance(true);opengauss.setColumnStore(true);opengauss.setInMemoryEngine(true);opengauss.setAIOptimization(true);opengauss.setPerformance("極高");opengauss.setDomesticSupport("強");comparison.setDatabases(Arrays.asList(postgresql, oracle, dameng, kingbase, opengauss));return comparison;}
}

🎯 選型建議

// 數據庫選型建議服務
@Service
public class DatabaseSelectionService {public DatabaseRecommendation getRecommendation(ProjectRequirements requirements) {DatabaseRecommendation recommendation = new DatabaseRecommendation();// 根據項目需求推薦數據庫if (requirements.isNeedDomesticDB()) {if (requirements.isHighPerformance()) {recommendation.setPrimary("openGauss");recommendation.setReason("國產數據庫中性能最高,支持列式存儲和內存引擎");} else if (requirements.isOracleCompatibility()) {recommendation.setPrimary("人大金倉");recommendation.setReason("Oracle兼容性最好,遷移成本低");} else {recommendation.setPrimary("達夢");recommendation.setReason("功能完整,穩定性好,國產化支持強");}} else {if (requirements.isNeedAdvancedFeatures()) {recommendation.setPrimary("PostgreSQL");recommendation.setReason("開源數據庫功能最強,擴展性好");} else if (requirements.isEnterpriseLevel()) {recommendation.setPrimary("Oracle");recommendation.setReason("企業級功能最完整,性能和穩定性最佳");} else {recommendation.setPrimary("PostgreSQL");recommendation.setReason("開源免費,功能強大,社區活躍");}}return recommendation;}
}

📊 總結

🌟 各數據庫特色總結

數據庫核心優勢適用場景學習成本
PostgreSQL功能豐富、擴展性強復雜業務、地理信息、JSON處理中等
Oracle企業級功能完整大型企業、關鍵業務
達夢國產化、穩定性好政府、金融、電信中等
人大金倉Oracle兼容性好Oracle遷移項目
openGauss高性能、AI優化OLAP、大數據分析中等

💡 面試重點

Q: PostgreSQL比MySQL有什么優勢?
A: 1)支持更多數據類型(JSON、數組、范圍等) 2)更強的查詢功能(窗口函數、CTE) 3)更好的并發控制(MVCC) 4)更完整的SQL標準支持 5)更強的擴展性

Q: 國產數據庫的發展現狀如何?
A: 國產數據庫快速發展,達夢、人大金倉在傳統市場占有率提升,openGauss在高性能場景表現出色,在國產化替代需求下迎來發展機遇。

Q: 如何進行數據庫遷移?
A: 1)評估現有系統和目標數據庫 2)數據結構映射和兼容性分析 3)制定遷移策略和計劃 4)數據遷移和測試驗證 5)業務切換和監控


🎉 總結:掌握多種數據庫的特性和適用場景,能夠根據業務需求進行合理的技術選型。國產數據庫的崛起為我們提供了更多選擇,在國產化替代的大趨勢下具有重要意義!

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

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

相關文章

OLT、ONU、ONT、SFU、HGU、ODN,它們是什么?它們之間有什么區別?

我們經常會看到OLT、ONU、ONT、SFU、HGU等設備術語。它們分別是什么?又有什么區別呢? PON組件:OLT、ONU、ONT和ODN 無源光網絡(PON)采用光纖和分路器&#xff0c;以點對多點拓撲將數據從單一源分發到多個用戶。與有源光網絡 (AON)不同&#xff0c;PON 僅在光域中運行&#…

sql USING 簡化 JOIN 操作

在 SQL 中&#xff0c;USING 是一種用于簡化 JOIN 操作的語法糖&#xff0c;它允許你明確指定連接表時所依據的列名。與傳統的 ON 子句相比&#xff0c;USING 提供了更簡潔的語法1. 基本語法與作用table1 JOIN table2 USING (column_name);將 table1 和 table2 中 column_name …

android開發中的 AndroidX 版本的查看 及 constraintLayout的簡單用法

1、查看庫的版本 平常我們經常會用到一些庫&#xff0c;但是不知道是什么版本&#xff0c;也不知道最新的是什么版本&#xff0c;當然最好的就是到官網去查看&#xff0c;或者三方的maven庫。 2、官方地址 AndroidX 版本 | Jetpack | Android Developers 3、比如我們來…

oracle鎖表,oracle解鎖表,oracle用戶連接數

一、查看被鎖的表 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id lo.object_id and lo.session_id sess.sid; 二、解鎖表語句 alter …

3D可視化:開啟多維洞察新時代

3D可視化技術以一種前所未有的方式&#xff0c;將數據、模型與現實世界緊密相連&#xff0c;為人們帶來了沉浸式、交互式的全新體驗&#xff0c;徹底革新了信息的呈現與理解方式。一、3D可視化的技術原理從技術本質來看&#xff0c;3D可視化基于一系列復雜而精妙的原理。通過數…

List中的對象進行排序處理

以下是使用 Java Stream 對對象列表按 id 和 age 排序的完整示例&#xff0c;包含升序和降序兩種場景&#xff1a; 1. 定義測試對象類 Getter Setter public class Person {private int id;private int age; }2. 排序實現代碼 import java.util.*; import java.util.stream.…

秋招Day14 - Redis - 底層結構

Redis都有哪些底層數據結構&#xff1f; 有八種核心的底層數據結構。 SDS Redis自己實現的動態字符串&#xff0c;SDS結構中直接存儲了已使用的字符數組長度len和未使用的字符數組長度free&#xff0c;所以獲取長度的時間復雜度是O(1)&#xff0c;還支持動態擴容&#xff0c…

使用Mac自帶的圖像捕捉導出 iPhone 相冊

用 數據線 將 iPhone 連接到 Mac必須是數據線,有些充電線插上去后無法識別到iphone在 iPhone 上點擊“信任此電腦”在 Mac 上打開應用&#xff1a;快速方式&#xff1a;按 Command Space 打開 Spotlight&#xff0c;輸入 圖像捕捉 或 Image Capture&#xff0c;回車或者從 /系…

【UniApp picker-view 多列對齊問題深度剖析與完美解決】

UniApp picker-view 多列對齊問題深度剖析與完美解決一次看似簡單的樣式調整&#xff0c;卻引發了對構建工具、CSS 預處理和組件渲染機制的深度思考創作時間: 2025/7/1 技術棧: UniApp Vue3 TypeScript PostCSS 問題級別: &#x1f534; 高級&#x1f3af; 問題背景 在開發 …

R Studio開發中記錄

1.如何將tar.gz格式的源碼R包編譯為zip格式的二進制R包。 R CMD INSTALL --build knhanes.tar.gz R CMD INSTALL --build nhanes.tar.gz 2.下載RTools RTools: Toolchains for building R and R packages from source on Windows 3.修改環境變量 PATH$PATH:/d/rtools45/usr…

量化交易中的隱藏模式識別:基于潛在高斯混合模型的機會挖掘

*——從市場噪聲中提取黃金信號的數學藝術** > 2025年3月,某對沖基金使用潛在高斯混合模型捕捉到銅期貨的異常波動模式,提前布局實現單月收益47%。核心代碼僅20行,卻顛覆了傳統技術分析范式。 --- ### 01 市場迷思:為何90%的交易者失敗? 金融市場本質是**非…

Qt窗口被外部(非Qt內部機制)強制銷毀,第二次再重復使用不顯示

在Qt開發中&#xff0c;窗口被外部&#xff08;非Qt內部機制&#xff09;強制銷毀 警告信息 External WM_DESTROY received for QWidgetWindow(0x108b8cbdb10, name"xxxxx") , parent: QWindow(0x0) , transient parent: QWindow(0x0) 使用場景 代碼結構如下&#x…

一文詳解Character AI:實用指南+ ChatGPT、Gemini對比分析

本指南將深入剖析Character AI的運行機制、功能特性及其存在的局限性。 近年來&#xff0c;生成式人工智能領域發展態勢迅猛&#xff0c;其應用范疇已遠超單純的文本生成領域。在眾多備受矚目的新興平臺中&#xff0c;Character AI是一款支持用戶以對話形式與人工智能生成角色…

遺傳算法的原理與實現示例

遺傳算法是一種受生物進化理論啟發的隨機優化算法&#xff0c;其核心思想是模擬自然界中 “物競天擇、適者生存” 的進化過程&#xff0c;通過對候選解的迭代優化&#xff0c;找到問題的最優解。 一、核心思想 遺傳算法將優化問題的候選解視為生物群體中的“個體”&#xff0c…

centos7 ping127.0.0.1不通

ping 127.0.0.1&#xff0c;localhost和本地ip都不通&#xff0c;所有的配置也是正確的 檢查下是否禁止了ping vim /proc/sys/net/ipv4/icmp_echo_ignore_all 內容為 1 禁止ping 內容為0 開啟ping sysctl -w net.ipv4.icmp_echo_ignore_all0 變更以上設置即可

【無標題】JavaScript入門

JS 1.JS引入方式 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-引入方式</title><!-- …

(JAVA)自建應用調用企業微信API接口,實現消息推送

建議先簡單了解企業微信開發者中心文檔&#xff1a;開發前必讀 - 文檔 - 企業微信開發者中心 了解一下企業微信調用接口的基礎參數&#xff1a;基本概念介紹 - 文檔 - 企業微信開發者中心 本篇每個步驟都會跟著官網文檔走&#xff0c;都會貼上相關鏈接&#xff0c;看完本篇文…

P/Invoke 在默認封送(marshalling)規則下,常見托管 ? 非托管類型的對應關系

下表整理了 P/Invoke 在默認封送&#xff08;marshalling&#xff09;規則下&#xff0c;常見托管???非托管類型的對應關系。 內容主要依據微軟官方 Marshalling Data with?Platform?Invoke 文檔&#xff0c;并補充了常見指針&#xff0f;句柄用法與字符串緩沖區&#xff…

2.isaacsim4.2 教程-初識OmniGraph

1. OmniGraph&#xff08;視覺編程&#xff09; OmniGraph 是 Omniverse 的可視化編程框架。它提供了一個圖狀結構&#xff0c;將 Omniverse 內多個系統的功能節點串聯起來&#xff1b;同時也是一個計算框架&#xff0c;允許你編寫高度自定義的節點&#xff0c;將自己的功能無…

MonoGame 游戲開發框架日記 -03

第三章&#xff1a;創建類庫 內容介紹 主要內容&#xff1a;創建Core類并編寫 創建這個類主要是為了后續開發方便&#xff0c;并介紹游戲開發中的一種非常重要編程模式 單例模式&#xff0c;以及了解MonoGame基本圖形渲染知識單例模式&#xff1a; 第一步我們得先了解什么是單例…