当前位置: 首页 > news >正文

sqlite3 c++ client选择; c++环境搭建 : abseil-cpp | fnc12/sqlite_orm

sqlite3 c++ client选择

今日20250305

  • 2.4K星: 7月前最后提交核心: SRombauts/SQLiteCpp.git : 薄封装、命令式sql、非orm、支持事务
  • 2.4K星: 1月前最后提交核心: fnc12/sqlite_orm.git : 厚封装、非侵入、真orm、真泛型、类型复杂、支持事务、报错信息不完整(启动事务失败,断点调试大致是 一个空表的unique约束失败,但这不该失败)
    因真泛型导致DbInstance必须放在x.h中,否则无法引出DbInstance的类型, 若x.h被多方包含而总链接过程可能诱发重复函数报错
    (笨办法是 将auto类型 打印出来 而手工填回x.h内,从而改造为 x.h和x.cpp配合的正常形式,避免总链接重复函数报错)
    因真泛型导致类型复杂而必须大量使用auto
  • 0.9K星: 3年前最后提交核心: SqliteModernCpp/sqlite_modern_cpp.git: 薄封装、sql+流操作符、非orm、支持事务
  • 0.7星: 7年前最后提交核心: paulftw/hiberlite.git : 厚封装、宏侵入、半orm、类型简单、未见事务
  • 0.6星: 7年前最后提交核心: iwongu/sqlite3pp.git : 薄封装、命令式sql、字段名绑定、类型简单、支持事务

fnc12/sqlite_orm.git
将auto类型 打印出来 而手工填回x.h内,从而改造为 x.h和x.cpp配合的正常形式,避免总链接重复函数报错

//{c++复杂类型文本打印 开始
//注意模板实例必须让编译器看到
#include <iostream>
#include <typeinfo>
#include <cxxabi.h>template <typename T>
void CxxPrintType(  const T& value) {int status = 0;char* demangled = abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &status);if (status == 0) {std::cout << "类型Sqlite3Db:【 " << demangled <<  "】" << std::endl;free(demangled); // 必须手动释放内存} else {std::cout << "Failed_to_demangle_name." << std::endl;}
}
//c++复杂类型文本打印 结束}

std::string db_path = "/tmp/insert.sqlite3.db";
using namespace sqlite_orm;
auto tb_TypeDef= make_table("tb_TypeDef",
make_column("typeId", &TbTypeDef::typeId, primary_key().autoincrement()),
make_column("typeName", &TbTypeDef::typeName,unique()),
make_column("category", &TbTypeDef::category)
);
auto tb_TypeDefLoc= make_table("tb_TypeDefLoc",...);
auto tb_StructDef= make_table("tb_StructDef",...);
auto tb_UnionDef= make_table("tb_UnionDef",...);
auto tb_ClassDef= make_table("tb_ClassDef",...);auto db = make_storage(db_path, tb_TypeDef,tb_TypeDefLoc,tb_StructDef,tb_UnionDef,tb_ClassDef );CxxPrintType( db); // 类型Sqlite3DbType由此行打印出来, 打印结果 作为 手工放到 宏 Sqlite3DbType 右边
#define Sqlite3DbType sqlite_orm::internal::storage_t<sqlite_orm::internal::table_t<TbTypeDef, false, sqlite_orm::internal::column_t<int TbTypeDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<> > >, sqlite_orm::internal::column_t<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > TbTypeDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> >, sqlite_orm::internal::column_t<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > TbTypeDef::*, sqlite_orm::internal::empty_setter> >, sqlite_orm::internal::table_t<TbTypeDefLoc, false, sqlite_orm::internal::column_t<int TbTypeDefLoc::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> >, sqlite_orm::internal::column_t<int TbTypeDefLoc::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> >, sqlite_orm::internal::column_t<int TbTypeDefLoc::*, sqlite_orm::internal::empty_setter>, sqlite_orm::internal::column_t<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > TbTypeDefLoc::*, sqlite_orm::internal::empty_setter> >, sqlite_orm::internal::table_t<TbStructDef, false, sqlite_orm::internal::column_t<int TbStructDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> > >, sqlite_orm::internal::table_t<TbUnionDef, false, sqlite_orm::internal::column_t<int TbUnionDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> > >, sqlite_orm::internal::table_t<TbClassDef, false, sqlite_orm::internal::column_t<int TbClassDef::*, sqlite_orm::internal::empty_setter, sqlite_orm::internal::unique_t<> > > >

fnc12/sqlite_orm

问题:fnc12/sqlite_orm.git理想情况下需要将DbConn放在x.h中,可能导致链接时有重复函数
优势:真泛型、真orm

参考 README.md#installation

编译步骤

#ubuntu22.04#source  /app/bash-simplify/gitproxy.sh && gitproxy_set
git config --global http.proxy socks5://westgw:7890 ; 
git config --global https.proxy socks5://westgw:7890  ; git --no-pager   config  --list | grep proxy
#http.proxy=socks5://westgw:7890
#https.proxy=socks5://westgw:7890

sudo apt install -y libsqlite3-devrepoD=/app3/sqlite_orm__fnc12
bldD=${repoD}__build
installD=${repoD}__install
repoUrl=https://github.com/fnc12/sqlite_orm.git
repoTag=v1.9.1git clone -b $repoTag $repoUrl $repoD
#展开:git clone -b v1.9.1 https://github.com/fnc12/sqlite_orm.git /app3/sqlite_orm__fnc12
cmake -S $repoD  -B $bldD -DCMAKE_INSTALL_PREFIX=$installD
#展开: cmake -S /app3/sqlite_orm__fnc12 -B /app3/sqlite_orm__fnc12__build -DCMAKE_INSTALL_PREFIX=/app3/sqlite_orm__fnc12__install#列出目标
cmake --build $bldD --target help | grep -i build
#... rebuild_cache
#... ContinuousBuild
#... ExperimentalBuild
#... NightlyBuildcmake  --build $bldD --target install -j 4
#展开: cmake --build /app3/sqlite_orm__fnc12__build --target install -j 4ls $bldD/cmake_install.cmake #安装脚本
#(展开):安装脚本为: /app3/sqlite_orm__fnc12__build/cmake_install.cmake
#安装目录 CMAKE_INSTALL_PREFIX 写在此 安装脚本 cmake_install.cmake 内

编译产物

(  cd $installD ; find . -type f ) 
#展开: cd /app3/sqlite_orm__fnc12__install ; find . -type f

/app3/sqlite_orm__fnc12__install/目录下为编译产物

./include/sqlite_orm/sqlite_orm.h
./lib/cmake/SqliteOrm/SqliteOrmConfig.cmake
./lib/cmake/SqliteOrm/SqliteOrmConfigVersion.cmake
./lib/cmake/SqliteOrm/SqliteOrmTargets.cmake

报错记录

1. 需要libsqlite3-dev

cmake -S /app3/sqlite_orm__fnc12 -B /app3/sqlite_orm__fnc12__build:报错:

CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):Could NOT find SQLite3 (missing: SQLite3_INCLUDE_DIR SQLite3_LIBRARY)
Call Stack (most recent call first):/usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)/usr/share/cmake-3.22/Modules/FindSQLite3.cmake:54 (find_package_handle_standard_args)dependencies/CMakeLists.txt:28 (find_package)

解决: sudo apt install -y libsqlite3-dev

abseil-cpp

参考: https://abseil.io/docs/cpp/quickstart-cmake

abseil-cpp.git/dd4c89b == abseil-cpp.git/20240722.1

1. clone代码仓库、编译


git clone https://github.com/abseil/abseil-cpp.git  /app/abseil-cpp/
#/app/abseil-cpp/.git/config
git checkout 20240722.1git rev-parse HEAD
#dd4c89bd657f1e247ce5111a5c89ffe6ccfd0c92cmake -S  /app/abseil-cpp  -B /app/abseil-cpp/build   -DABSL_BUILD_TESTING=OFF -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_CXX_STANDARD=14
cmake --build /app/abseil-cpp/build  --target all
ls /app/abseil-cpp/absl/strings/str_split.h

2. test.cpp

#include <string>
#include <vector>
#include "absl/strings/str_split.h"#include <stdio.h>
int main(int argc, char** argv){std::vector<std::string> v = absl::StrSplit("a,b,c", ',');
printf("v[0]=%s\n",v[0].c_str());return 0;
}

3. 编译运行

/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/clang++  -v   -L /app/abseil-cpp/build/absl/base/ -L /app/abseil-cpp/build/absl/strings/    -l absl_base  -l absl_raw_logging_internal -l absl_throw_delegate   -l absl_string_view   -l absl_strings_internal -l absl_strings      -I /app/abseil-cpp/   test.cpp  -o test.elf &&  ./test.elf

正常运行,并输出a

3A. 当少给 .a时 链接报错举例

/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/clang++  -v   -L /app/abseil-cpp/build/absl/base/ -L /app/abseil-cpp/build/absl/strings/ -L /app/abseil-cpp/build/absl/log/   -l absl_base  -l absl_log_internal_format -l absl_string_view   -l absl_strings_internal -l absl_strings      -I /app/abseil-cpp/   test.cpp  -o test.elf &&  ./test.elf

报错

"/usr/bin/ld" -pie -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o test.elf /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/app/abseil-cpp/build/absl/base/ -L/app/abseil-cpp/build/absl/strings/ -L/app/abseil-cpp/build/absl/log/ -L/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/../lib/x86_64-unknown-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/12 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/lib/../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/lib -L/lib -L/usr/lib -labsl_base -labsl_log_internal_format -labsl_string_view -labsl_strings_internal -labsl_strings /tmp/test-9d0c36.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o /lib/x86_64-linux-gnu/crtn.o
mold: error: undefined symbol: /app/abseil-cpp/build/absl/strings/libabsl_strings.a(str_split.cc.o): absl::lts_20240722::raw_log_internal::RawLog(absl::lts_20240722::LogSeverity, char const*, int, char const*, ...)
mold: error: undefined symbol: /app/abseil-cpp/build/absl/strings/libabsl_strings.a(str_split.cc.o): absl::lts_20240722::base_internal::ThrowStdOutOfRange(char const*)
clang-15: error: linker command failed with exit code 1 (use -v to see invocation)

3B. 报错探索并解决: nushell 在*.a中查找给定函数所在.a

nushell == /app5/nu-0.102.0-x86_64-unknown-linux-gnu/nu

3A报错缺少函数

  • absl::lts_20240722::raw_log_internal::RawLog
  • absl::lts_20240722::base_internal::ThrowStdOutOfRange

以下用nushell查找这些函数所在.a

/usr/bin/find  /app/abseil-cpp/build/absl/ -name "*.a"  |  lines|each  { |f|  nm --defined-only -C  $f } | str  contains   "absl::lts_20240722::base_internal::ThrowStdOutOfRange" | /usr/bin/grep true
# │  8 │ true  │/usr/bin/find  /app/abseil-cpp/build/absl/ -name "*.a"  |  lines|each  { |f|  $f }  | /usr/bin/grep  " 8 "
#│  8 │ /app/abseil-cpp/build/absl/base/libabsl_throw_delegate.a                           │/usr/bin/find  /app/abseil-cpp/build/absl/ -name "*.a"  |  lines|each  { |f|  nm --defined-only -C  $f } | str  contains   "absl::lts_20240722::raw_log_internal::RawLog" | /usr/bin/grep true
# │  4 │ true  │/usr/bin/find  /app/abseil-cpp/build/absl/ -name "*.a"  |  lines|each  { |f|  $f }  | /usr/bin/grep  " 4 "
# │  4 │ /app/abseil-cpp/build/absl/base/libabsl_raw_logging_internal.a                     │

相关文章:

sqlite3 c++ client选择; c++环境搭建 : abseil-cpp | fnc12/sqlite_orm

sqlite3 c client选择 今日20250305 2.4K星: 7月前最后提交核心: SRombauts/SQLiteCpp.git : 薄封装、命令式sql、非orm、支持事务2.4K星: 1月前最后提交核心: fnc12/sqlite_orm.git : 厚封装、非侵入、真orm、真泛型、类型复杂、支持事务、报错信息不完整&#xff08;启动事…...

IMX6ULL驱动开发uboot篇02

目录 网络操作 第零步&#xff1a;先将网线跟电脑接好&#xff0c;打开串口连接到开发板上&#xff0c;然后上电&#xff0c;让UBoot停下来 第一步&#xff1a;查看我们的网线构成的虚拟子网是哪一个 第二步&#xff1a;我们必须把虚拟机的网卡模式从NAT改成桥接&#xff0c…...

智谱AI-FunctionCall

智谱AI-FunctionCall 编写FuncationCall大模型的函数调用&#xff0c;先直观的感受一下的感受下FunctionCall的魅力 文章目录 智谱AI-FunctionCall[toc]1-参考网址2-思路整理3-代码拆件1-[非核心]两个业务函数2-[非核心]业务函数的JsonSchema定义3-[核心]FunctionCall的调用1-打…...

数据保险箱:备份文件的关键价值与自动化实践

在信息化社会&#xff0c;数据已经成为我们生活、工作和学习的核心组成部分。无论是企业机密、个人隐私&#xff0c;还是创意作品、研究数据&#xff0c;它们都以数字形式存在于我们的电子设备中。然而&#xff0c;数据如同脆弱的玻璃制品&#xff0c;稍有不慎就可能面临丢失或…...

数字电路基础——逻辑门

逻辑门是数字电子技术中的基本构建块。这些组件用于对1和0进行操作,可以将它们组合起来创建其他构建块,并设计出如锁存器、触发器、加法器、移位寄存器等电路。 七种主要的逻辑门类型: 一、基本逻辑门 1.1 与门(AND gate) 1.1.1 逻辑运算规则 与门有多个输入端和一个输出…...

爬虫逆向:脱壳工具BlackDex的详细使用

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、BlackDex简介二、下载与安装三、基本使用步骤3.1 启动BlackDex3.2 导入目标APK文件3.3 开始脱壳3.4 查看脱壳结果四、后续分析4.1 使用 JADX 反编译 Dex 文件4.2 使用 Apktool 反编译 Dex 文件4.3 JD-GUI4.4 dex2ja…...

JavaScript中的Math()

目录 一、Math() 1.1floor() 1.2ceil() 1.3round() 1.4random() 1.5max() 1.6min() 1.7pow() 1.8sqrt() 1.9trunc() 二、parseFloat() 三、toFixed() 四、toString() 4.1Number类型转换为字符串 4.2Boolean类型转换为字符串 4.3Date()类型转换为字符串 4.4Arr…...

深度学习模型Transformer初步认识整体架构

第一章&#xff1a;人工智能之不同数据类型及其特点梳理 第二章&#xff1a;自然语言处理(NLP)&#xff1a;文本向量化从文字到数字的原理 第三章&#xff1a;循环神经网络RNN&#xff1a;理解 RNN的工作机制与应用场景(附代码) 第四章&#xff1a;循环神经网络RNN、LSTM以及GR…...

【从模仿到超越:AIGC的崛起与AGI的终极梦想】

一、基本概念 1. AIGC&#xff08;人工智能生成内容&#xff09; 定义&#xff1a;基于人工智能技术生成文本、图像、音频、视频等数字内容的方法。技术基础&#xff1a;依赖深度学习模型&#xff08;如GPT、DALL-E、Stable Diffusion&#xff09;和自然语言处理&#xff08;…...

标量、向量、矩阵与张量:从维度理解数据结构的层次

在数学和计算机科学中&#xff0c;维度描述了数据结构的复杂性&#xff0c;而标量、向量、矩阵、张量则是不同维度的数据表示形式。它们的关系可以理解为从简单到复杂的扩展&#xff0c;以下是详细解析&#xff1a; 1. 标量&#xff08;Scalar&#xff09;&#xff1a;0维数据 …...

windows 上删除 node_modules

在 Windows 11 上&#xff0c;你可以通过命令行来删除 node_modules 文件夹并清除 npm 缓存。以下是具体步骤&#xff1a; 删除 node_modules 打开命令提示符&#xff08;Command Prompt&#xff09;或终端&#xff08;PowerShell&#xff09;。 导航到项目目录。你可以使用 …...

单例模式的五种实现方式

1、饿汉式 ①实现&#xff1a;在类加载的时候就初始化实例 ②优点&#xff1a;线程安全 ③缺点&#xff1a;实例在类加载的时候创建&#xff0c;可能会浪费资源 //饿汉式 public class EagerSingleton{private EagerSingleton(){} //私有构造方法private static EagerSingle…...

启智平台华为昇腾910B使用MS-Swift微调Janus-Pro-7/1B

最近想要微调一下DeepSeek出品的Janus多模态大模型 利用启智平台的昇腾910B国产计算卡进行大模型的微调 查看了一下MS-Swift支持了Janus模型的微调&#xff0c;LLamafactory好像暂时还不支持该模型的微调 看到了MS-Swift有单独对昇腾的支持&#xff0c;因此首先要安装swift&…...

蓝桥试题:传球游戏(二维dp)

一、题目描述 上体育课的时候&#xff0c;小蛮的老师经常带着同学们一起做游戏。这次&#xff0c;老师带着同学们一起做传球游戏。 游戏规则是这样的&#xff1a;n 个同学站成一个圆圈&#xff0c;其中的一个同学手里拿着一个球&#xff0c;当老师吹哨子时开始传球&#xff0…...

迷你世界脚本小地图接口:Mapmark

小地图接口&#xff1a;Mapmark 彼得兔 更新时间: 2023-10-25 10:33:48 具体函数名及描述如下: 序号 函数名 函数描述 1 newShape(...) 新增一个形状(线&#xff0c;矩形&#xff0c;圆形) 2 deleteShape(...) 删除一个形状 3 setShapeColor(...) 设置…...

从零开始在Windows使用VMware虚拟机安装黑群晖7.2系统并实现远程访问

文章目录 前言1.软件准备2. 安装VMware17虚拟机3.安装黑群晖4. 安装群晖搜索助手5. 配置黑群晖系统6. 安装内网穿透6.1 下载cpolar套件6.2 配置群辉虚拟机6.3 配置公网地址6.4 配置固定公网地址 总结 前言 本文主要介绍如何从零开始在Windows系统电脑使用VMware17虚拟机安装黑…...

Qt6.8.2创建WebAssmebly项目使用FFmpeg资源

Qt6新出了WebAssmebly功能&#xff0c;可以将C写的软件到浏览器中运行&#xff0c;最近一段时间正在研究这方便内容&#xff0c;普通的控件响应都能实现&#xff0c;今天主要为大家分享如何将FFmpeg中的功能应用到浏览器中。 开发环境&#xff1a;window11&#xff0c;Qt6.8.2…...

Java阻塞队列深度解析:高并发场景下的安全卫士

一、阻塞队列的核心价值 在电商秒杀系统中&#xff0c;瞬时涌入的10万请求如果直接冲击数据库&#xff0c;必然导致系统崩溃。阻塞队列如同一个智能缓冲带&#xff0c;通过流量削峰和异步解耦两大核心能力&#xff0c;成为高并发系统的核心组件。 二、Java阻塞队列实现类对比 …...

软件信息安全性测试流程有哪些?专业软件测评服务机构分享

在数字化时代&#xff0c;软件信息安全性测试的重要性愈发凸显。尤其是对于企业来说&#xff0c;确保软件的安全性不仅是维护用户信任的关键&#xff0c;也是满足合规要求的必要条件。 软件信息安全性测试是指通过一系列系统化的测试手段&#xff0c;评估软件应用在受到攻击时…...

Linux - 网络基础(应用层,传输层)

一、应用层 1&#xff09;发送接收流程 1. 发送文件 write 函数发送数据到 TCP 套接字时&#xff0c;内容不一定会立即通过网络发送出去。这是因为网络通信涉及多个层次的缓冲和处理&#xff0c;TCP 是一个面向连接的协议&#xff0c;它需要进行一定的排队、确认和重传等处理…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...