🐘 漫画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; 第一步我们得先了解什么是单例…