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

01-基于SOA架构someip 开发-Linux开发环境搭建

  1. 前言:

SOME/IP 是一个汽车的中间件解决方案,可用于控制消息。从一开始,它的设计就是为了完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR设备,以及头部单元或远程信息处理设备。同时还确保了SOME/IP支持信息娱乐域以及车内其他域的功能,从而使SOME/IP可以用于多数替换场景以及更传统的CAN场景,在智能网联汽车,面向服务开发SOA架构思想环境下,SOME/IP扮演着非常重要的角色--通信。

2. 准备工作

2.1 下载开源code (3.2.0版本)

capicxx-core-runtime

github/镜像下载地址:https://hub.yzuu.cf/COVESA/capicxx-core-runtime/tree/89720d3c63bbd22cbccc80cdc92c2f2dd20193ba

https://github.com/COVESA/capicxx-core-runtime/tree/89720d3c63bbd22cbccc80cdc92c2f2dd20193ba

或者通过tag 选择对应的版本下载:如下图

capicxx-someip-runtime

github/镜像下载地址:https://hub.yzuu.cf/COVESA/capicxx-someip-runtime/tree/0ad2bdc1807fc0f078b9f9368a47ff2f3366ed13

TAG下载操作如上图

capicxx-dbus-runtime

github/镜像下载地址:https://hub.yzuu.cf/COVESA/capicxx-dbus-runtime/tree/d1610ad0d6f1b6751964af41a0cc1599e2d7a955

TAG下载操作如上图

vsomeip

github/镜像下载地址:https://hub.yzuu.cf/COVESA/vsomeip/tree/13f9c89ced6ffaeb1faf485152e27e1f40d234cd

TAG下载操作如上图

2.2 下载工具 (最新)

commonapi_core_generator

下载地址:https://hub.yzuu.cf/GENIVI/capicxx-core-tools/releases/latest/download/commonapi_core_generator.zip

commonapi_dbus_generator

下载地址:https://hub.yzuu.cf/GENIVI/capicxx-dbus-tools/releases/latest/download/commonapi_dbus_generator.zip

commonapi_someip_generator

下载地址:https://hub.yzuu.cf/GENIVI/capicxx-someip-tools/releases/latest/download/commonapi_someip_generator.zip

2.3 下载dbus1.10.10 (dbus-1.10.10.tar.gz)

下载地址:http://dbus.freedesktop.org/releases/dbus/dbus-1.10.10.tar.gz

2.4 boost_1_74_0.tar.gz

下载地址:https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/boost_1_74_0.tar.gz

2.5 下载 dlt-daemon-2.18.8.tar.gz

下载地址:https://hub.yzuu.cf/COVESA/dlt-daemon/tags

选择 最新:v2.18.8

2.6 安装依赖文件

ubuntu

sudo apt install -y asciidoc source-highlight doxygen graphviz asciidoc pkg-config

3. 开发框架

开发项目离不开开发框架搭建,如何运作整个资源。

3.1 开发框架

.
├── build
├── build_x86.sh
├── cfg
│ ├── commonapi.ini
│ ├── vsomeip_client.json
│ ├── vsomeip.json
│ └── vsomeip_server.json
├── CMakeLists.txt
├── doc
│ ├── CommonAPICppSpecification.pdf
│ ├── CommonAPICppUserGuide.pdf
├── examples
│ ├── CMakeLists.txt
│ ├── fidl
│ ├── src
│ └── src-gen
│ └── v0
├── host_tools
│ ├── commonapi_core_generator
│ ├── commonapi_dbus_generator
│ └── commonapi_someip_generator
├── thirdparty
│ ├── archive
│ │ ├── capicxx-core-runtime-89720d3c63bbd22cbccc80cdc92c2f2dd20193ba.zip
│ │ ├── capicxx-dbus-runtime-d1610ad0d6f1b6751964af41a0cc1599e2d7a955.zip
│ │ ├── capicxx-someip-runtime-0ad2bdc1807fc0f078b9f9368a47ff2f3366ed13.zip
│ │ ├── dbus-1.10.10.tar.gz
│ │ └── vsomeip-13f9c89ced6ffaeb1faf485152e27e1f40d234cd.zip
│ ├── capicxx-core-runtime
│ ├── capicxx-dbus-runtime
│ ├── capicxx-someip-runtime
│ ├── CMakeLists.txt
│ ├── dbus-1.10.10
│ └── vsomeip
├── toolchains
│ ├── archive
│ │ ├── boost_1_74_0.tar.gz
│ │ ├── commonapi_core_generator.zip
│ │ ├── commonapi_dbus_generator.zip
│ │ ├── commonapi_someip_generator.zip
│ │ └── dlt-daemon-2.18.8.tar.gz
│ ├── boost_1_74_0
│ ├── dlt-daemon-2.18.8
│ └── scripts
│ ├── build_boost_android.sh
│ └── build_boost_common.sh

3.2 编译脚本

3.2.1 Ubuntu Linux 编译脚本:

#!/bin/bash
#
#----------------------------------------------------------
#    author: Tim
#    email : 1352430027@qq.com                                                              
#    description: SOA someip build script                                                   
# ---------------------------------------------------------
#    Warm reminder :Abort operation with Ctrl+C
# ---------------------------------------------------------ROOT_DIR=$(pwd)DBUS_ARCHIVE_PATH=${ROOT_DIR}/thirdparty/archive/dbus-1.10.10.tar.gz
DBUS_DIR=${ROOT_DIR}/thirdparty/dbus-1.10.10BOOST_ARCHIVE_PATH=${ROOT_DIR}/toolchains/archive/boost_1_74_0.tar.gz
BOOST_DIR=${ROOT_DIR}/toolchains/boost_1_74_0DLT_ARCHIVE_PATH=${ROOT_DIR}/toolchains/archive/dlt-daemon-2.18.8.tar.gz
DLT_DIR=${ROOT_DIR}/toolchains/dlt-daemon-2.18.8PREFIX_DIR=${ROOT_DIR}/build/x86
PREFIX_INSTALL_DIR=${PREFIX_DIR}/installecho -e "Project dir: $ROOT_DIR"if [ -d ${PREFIX_INSTALL_DIR} ];thenrm -rf $PREFIX_INSTALL_DIRmkdir -p $PREFIX_INSTALL_DIR
elsemkdir -p $PREFIX_INSTALL_DIR
fiif [ ! -d ${DBUS_DIR} ];thenif [ -e  ${DBUS_ARCHIVE_PATH} ];thenecho -e "archive $DBUS_ARCHIVE_PATH is exist. now do it."tar -xzf ${DBUS_ARCHIVE_PATH} -C ${ROOT_DIR}/thirdparty/ cd ${DBUS_DIR}for i in ${ROOT_DIR}/thirdparty/capicxx-dbus-runtime/src/dbus-patches/*.patch; do patch -p1 < $i; done./configuremakecd ${ROOT_DIR}elseecho -e "archive ${DBUS_ARCHIVE_PATH} is not exist. now get it."cd thirdparty/archive/wget http://dbus.freedesktop.org/releases/dbus/dbus-1.10.10.tar.gzcd ${ROOT_DIR}tar -xzf ${DBUS_ARCHIVE_PATH} -C ${ROOT_DIR}/thirdparty/  cd thirdparty/dbus-1.10.10for i in ${ROOT_DIR}/thirdparty/capicxx-dbus-runtime/src/dbus-patches/*.patch; do patch -p1 < $i; done./configuremakecd ${ROOT_DIR}fi
fiif [ ! -d ${BOOST_DIR} ];thenecho -e "dir ${BOOST_DIR} is not exist. now do it."if [ -e  ${BOOST_ARCHIVE_PATH} ];thenecho -e "archive $BOOST_ARCHIVE_PATH is exist. now do it."tar -xzf ${BOOST_ARCHIVE_PATH} -C ${ROOT_DIR}/toolchains/ mkdir -p ${BOOST_DIR}/build/x86cd ${BOOST_DIR}./bootstrap.sh --prefix=build/x86./b2 installsudo ./bootstrap.sh --prefix=/usr/localsudo ./b2 installcd ${ROOT_DIR}elseecho -e "archive ${BOOST_ARCHIVE_PATH} is not exist. now get it."cd ${ROOT_DIR}/toolchains/archivewget https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gztar -xzf boost_1_78_0.tar.gz -C ${ROOT_DIR}/toolchains/mkdir -p ${BOOST_DIR}/build/x86cd ${BOOST_DIR}./bootstrap.sh --prefix=build/x86./b2 installsudo ./bootstrap.sh --prefix=/usr/localsudo ./b2 installcd ${ROOT_DIR}fi
fiif [ ! -d ${DLT_DIR} ];thenecho -e "dir ${DLT_DIR} is not exist. now do it."if [ -e  ${DLT_ARCHIVE_PATH} ];thenecho -e "archive $DLT_ARCHIVE_PATH is exist. now do it."tar -xzf ${DLT_ARCHIVE_PATH} -C ${ROOT_DIR}/toolchains/ mkdir -p ${DLT_DIR}/build/x86cd ${DLT_DIR}/build/x86cmake ../../makesudo make installcd ${ROOT_DIR}fi
fiif [ ! -d ${ROOT_DIR}/toolchains ];thenmkdir toolchains
fiif [ ! -d ${ROOT_DIR}/host_tools ];thenmkdir host_tools
fiif [ ! -e ${ROOT_DIR}/toolchains/archive/commonapi_core_generator.zip ]; thencd ${ROOT_DIR}/toolchains/archiveecho -e "archive file commonapi_core_generator.zip is not exist. now get it.."wget https://hub.yzuu.cf/GENIVI/capicxx-core-tools/releases/latest/download/commonapi_core_generator.zipcd ${ROOT_DIR}
fiif [ ! -d host_tools/commonapi_core_generator ];thenunzip -o toolchains/archive/commonapi_core_generator.zip -d host_tools/commonapi_core_generator
fiif [ ! -e ${ROOT_DIR}/toolchains/archive/commonapi_dbus_generator.zip ];thencd ${ROOT_DIR}/toolchains/archiveecho -e "archive file commonapi_dbus_generator.zip is not exist. now get it.."wget https://hub.yzuu.cf/GENIVI/capicxx-dbus-tools/releases/latest/download/commonapi_dbus_generator.zipcd ${ROOT_DIR}
fiif [ ! -d host_tools/commonapi_dbus_generator ];thenunzip -o toolchains/archive/commonapi_dbus_generator.zip -d host_tools/commonapi_dbus_generator
fiif [ ! -e ${ROOT_DIR}/toolchains/archive/commonapi_someip_generator.zip ];thencd ${ROOT_DIR}/toolchains/archiveecho -e "archive file commonapi_someip_generator.zip is not exist. now get it.."wget https://hub.yzuu.cf/GENIVI/capicxx-someip-tools/releases/latest/download/commonapi_someip_generator.zipcd ${ROOT_DIR}
fiif [ ! -d host_tools/commonapi_someip_generator ];thenunzip -o toolchains/archive/commonapi_someip_generator.zip -d host_tools/commonapi_someip_generator
fiecho "---------------------------"
echo " > start to build X86."
echo "---------------------------"cmake -B $PREFIX_DIR \-DCMAKE_INSTALL_PREFIX=$PREFIX_INSTALL_DIR \cmake --build $PREFIX_DIR --target install

3.2.2 Android NDK 编译脚本:

//TODO

3.2.3 QNX编译脚本:

//TODO

4. 结果输出

.
└── x86
├── CMakeCache.txt
├── CMakeDoxyfile.in
├── CMakeDoxygenDefaults.cmake
├── CMakeFiles
│ ├── 3.20.0
│ │ ├── CMakeCCompiler.cmake
│ │ ├── CMakeCXXCompiler.cmake
│ │ ├── CMakeDetermineCompilerABI_C.bin
│ │ ├── CMakeDetermineCompilerABI_CXX.bin
│ │ ├── CMakeSystem.cmake
│ │ ├── CompilerIdC
│ │ └── CompilerIdCXX
│ ├── cmake.check_cache
│ ├── CMakeDirectoryInformation.cmake
│ ├── CMakeError.log
│ ├── CMakeOutput.log
│ ├── CMakeRuleHashes.txt
│ ├── CMakeTmp
│ ├── Makefile2
│ ├── Makefile.cmake
│ ├── progress.marks
│ └── TargetDirectories.txt
├── cmake_install.cmake
├── examples
│ ├── CMakeFiles
│ │ ├── CMakeDirectoryInformation.cmake
│ │ ├── fidl_gen.dir
│ │ ├── HelloWorldClient.dir
│ │ ├── HelloWorldService.dir
│ │ ├── HelloWorldSomeIPClient.dir
│ │ ├── HelloWorldSomeIPService.dir
│ │ └── progress.marks
│ ├── cmake_install.cmake
│ ├── HelloWorldClient
│ ├── HelloWorldService
│ ├── HelloWorldSomeIPClient
│ ├── HelloWorldSomeIPService
│ └── Makefile
├── install
│ ├── etc
│ │ └── vsomeip
│ ├── include
│ │ └── CommonAPI-3.2
│ └── lib
│ ├── cmake
│ ├── libCommonAPI-DBus.so -> libCommonAPI-DBus.so.3.2.0
│ ├── libCommonAPI-DBus.so.3.2.0
│ ├── libCommonAPI.so -> libCommonAPI.so.3.2.0
│ ├── libCommonAPI.so.3.2.0
│ ├── libCommonAPI-SomeIP.so -> libCommonAPI-SomeIP.so.3.2.0
│ ├── libCommonAPI-SomeIP.so.3.2.0
│ ├── libvsomeip3-cfg.so -> libvsomeip3-cfg.so.3
│ ├── libvsomeip3-cfg.so.3 -> libvsomeip3-cfg.so.3.1.20
│ ├── libvsomeip3-cfg.so.3.1.20
│ ├── libvsomeip3-e2e.so -> libvsomeip3-e2e.so.3
│ ├── libvsomeip3-e2e.so.3 -> libvsomeip3-e2e.so.3.1.20
│ ├── libvsomeip3-e2e.so.3.1.20
│ ├── libvsomeip3-sd.so -> libvsomeip3-sd.so.3
│ ├── libvsomeip3-sd.so.3 -> libvsomeip3-sd.so.3.1.20
│ ├── libvsomeip3-sd.so.3.1.20
│ ├── libvsomeip3.so -> libvsomeip3.so.3
│ ├── libvsomeip3.so.3 -> libvsomeip3.so.3.1.20
│ ├── libvsomeip3.so.3.1.20
│ └── pkgconfig
├── install_manifest.txt
├── Makefile
└── thirdparty
├── capicxx-core-runtime
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── CommonAPIConfig.cmake
│ ├── CommonAPIConfigVersion.cmake
│ ├── CommonAPI.pc
│ ├── commonapi.spec
│ ├── CommonAPITargets.cmake
│ ├── Doxyfile
│ ├── libCommonAPI.so -> libCommonAPI.so.3.2.0
│ ├── libCommonAPI.so.3.2.0
│ └── Makefile
├── capicxx-dbus-runtime
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── CommonAPI-DBusConfig.cmake
│ ├── CommonAPI-DBusConfigVersion.cmake
│ ├── CommonAPI-DBus.pc
│ ├── commonapi-dbus.spec
│ ├── CommonAPI-DBusTargets.cmake
│ ├── Doxyfile
│ ├── libCommonAPI-DBus.so -> libCommonAPI-DBus.so.3.2.0
│ ├── libCommonAPI-DBus.so.3.2.0
│ └── Makefile
├── capicxx-someip-runtime
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── CommonAPI-SomeIPConfig.cmake
│ ├── CommonAPI-SomeIPConfigVersion.cmake
│ ├── CommonAPI-SomeIP.pc
│ ├── CommonAPI-SomeIPTargets.cmake
│ ├── libCommonAPI-SomeIP.so -> libCommonAPI-SomeIP.so.3.2.0
│ ├── libCommonAPI-SomeIP.so.3.2.0
│ └── Makefile
├── CMakeFiles
│ ├── CMakeDirectoryInformation.cmake
│ └── progress.marks
├── cmake_install.cmake
├── Makefile
└── vsomeip
├── CMakeFiles
├── cmake_install.cmake
├── Doxyfile
├── examples
├── libvsomeip3-cfg.so -> libvsomeip3-cfg.so.3
├── libvsomeip3-cfg.so.3 -> libvsomeip3-cfg.so.3.1.20
├── libvsomeip3-cfg.so.3.1.20
├── libvsomeip3-e2e.so -> libvsomeip3-e2e.so.3
├── libvsomeip3-e2e.so.3 -> libvsomeip3-e2e.so.3.1.20
├── libvsomeip3-e2e.so.3.1.20
├── libvsomeip3-sd.so -> libvsomeip3-sd.so.3
├── libvsomeip3-sd.so.3 -> libvsomeip3-sd.so.3.1.20
├── libvsomeip3-sd.so.3.1.20
├── libvsomeip3.so -> libvsomeip3.so.3
├── libvsomeip3.so.3 -> libvsomeip3.so.3.1.20
├── libvsomeip3.so.3.1.20
├── Makefile
├── tools
├── vsomeip3Config.cmake
├── vsomeip3ConfigVersion.cmake
├── vsomeip3.pc
└── vsomeip3Targets.cmake

相关文章:

01-基于SOA架构someip 开发-Linux开发环境搭建

前言&#xff1a;SOME/IP 是一个汽车的中间件解决方案&#xff0c;可用于控制消息。从一开始&#xff0c;它的设计就是为了完美地适应不同尺寸和不同操作系统的设备。这包括小型设备&#xff0c;如相机、AUTOSAR设备&#xff0c;以及头部单元或远程信息处理设备。同时还确保了S…...

历时半年!从外包到现在阿里网易25K,分享一下自己的涨薪经验

前言 首先自我介绍一下&#xff0c;本人普通一本毕业&#xff0c;年初被老东家裁员干掉了&#xff0c;之后一直住在朋友那混吃等死&#xff0c;转折是今年年后&#xff0c;二月初的时候和大佬吃了个饭&#xff0c;觉得自己不能这样下去了&#xff0c;拿着某大佬给我的面试资料…...

支付系统中的设计模式04:改进的策略与外观模式

随着业务越做越大,交易量大了,老板觉得可以用一些变相的方法增加一些收入了,同时也有利于用户,做到双赢。这很好理解,“往地上戳一棍子都能冒出油来”,谁能扛得住这种诱惑呢? 于是,老板就提了这样的需求: 支付系统需要根据不同的结算模式,返利给账户: 1、选择T+1结算…...

关于数据分析和数据指标,企业还需要做什么?

数据虽然已经成为了各行各业对未来的共识&#xff0c;也切实成为了各领域企业的重要资产。但真正谈到发挥数据的价值&#xff0c;就必须从规模庞大的数据中找出需求的数据&#xff0c;然后进行利用。这个过程光是想想就知道很麻烦&#xff0c;更别提很多数据都是经常会用到的&a…...

jvm之垃圾回收器

分类 按线程 串行并行工作模式 并发式独占式碎片处理方式 压缩式非压缩式工作内存空间 年轻代老年代 评估GC的性能指标 吞吐量&#xff1a;运行用户代码的时间占总运行时间的比例暂停时间&#xff1a;执行垃圾收集时&#xff0c;程序的工作线程被暂停的时间内存占用: java堆区…...

【c++】类和对象7—继承

文章目录关于继承继承与非继承的对比继承方式继承中的对象模型继承中的构造和析构顺序继承同名成员处理方式继承同名静态成员处理方式多继承语法菱形继承关于继承 我们发现&#xff0c;定义一些类时&#xff0c;下级别的成员处理拥有上一级的共性&#xff0c;还有自己的特性。 …...

vue实现预览、下载和打印后端返回的pdf文件流

需求&#xff1a;后端返回pdf文件流&#xff0c;前端能够预览、下载打印。 后端返回的文件流部分截图 需要实现的效果图 前面第1步只是为了展示后台返回数据流&#xff0c;完成功能的时候&#xff0c;不需要调用接口的&#xff0c;只需要利用调用接口的url。 实现步骤&am…...

【Android视频号④ 问题总结】

这节坑比较多~ 差点没把我给整死&#xff01;&#xff01;&#xff01; 环境介绍 首先我调试都是root过的真机&#xff0c;但是生产环境都是没有Root的云机&#xff0c;属于自己改的Rom框架也不是XP或LSP 是技术人员利用Xposed源码改的框架 问题&解决 模块源码更改 这…...

推荐算法—widedeep原理知识总结代码实现

wide&deep原理知识总结代码实现1. Wide&Deep 模型的结构1.1 模型的记忆能力1.2 模型的泛化能力2. Wide&Deep 模型的应用场景3. Wide&Deep 模型的代码实现3.1 tensorflow实现3.2 pytorch实现今天&#xff0c;总结一个在业界有着巨大影响力的推荐模型&#xff0c…...

PHP面向对象03:命名空间

PHP面向对象03&#xff1a;命名空间一、命名空间基础二、子空间三、命名空间访问1. 非限定名称2. 限定名称3. 完全限定名称四、全局空间五、命名空间应用六、命名空间引入一、命名空间基础 namespace&#xff0c;是指人为的将内存进行分隔&#xff0c;让不同内存区域的同名结构…...

Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去

路由文件 当应用程序需要向 Elasticsearch 添加文档时&#xff0c;它们首先要知道目标索引是什么。在很多的应用案例中&#xff0c;特别是针对时序数据&#xff0c;我们想把每个月的数据写入到一个特定的索引中。一方面便于管理索引&#xff0c;另外一方面在将来搜索的时候可以…...

前端开发常用的18个JavaScript框架和库

JavaScript 可以说是最流行的编程语言之一&#xff0c;也是Web 开发人员必须学习的 3 种语言之一&#xff0c;JavaScript 几乎可以做任何事情&#xff0c;更可以在包括物联网在内的多个平台和设备上运行。在WebGL库和SVG/Canvas元素的支持下&#xff0c;JavaScript变得惊人的强…...

理解、总结重点知识

一、常见的数据结构 1、数组结构 数组结构&#xff1a; 存储区间连续、内存占用严重、空间复杂度大 优点&#xff1a;随机读取和修改效率高&#xff0c;原因是数组是连续的&#xff08;随机访问性强&#xff0c;查找速度快&#xff09;缺点&#xff1a;插入和删除数据效率低&a…...

记一次从文件备份泄露到主机上线

前言 记录下某个测试项目中&#xff0c;通过一个文件备份泄露到主机上线的过程。 文件备份泄露 对于测试的第一项当然是弱口令&#xff0c;bp跑了一通词典&#xff0c;无果。目录又爆破了一通&#xff0c;发现一个web.rar可通&#xff0c;赶紧下载看看&#xff0c;如下图所示…...

8年测开经验面试28K公司后,吐血整理出1000道高频面试题和答案

1、python的数据类型有哪些 答&#xff1a;Python基本数据类型一般分为&#xff1a;数字、字符串、列表、元组、字典、集合这六种基本数据类型。 浮点型、复数类型、布尔型(布尔型就是只有两个值的整型)、这几种数字类型。列表、元组、字符串都是序列。 2、列表和元组的区别 答…...

Linux 基础知识之权限管理

目录一、权限的认识二、用户切换三、文件权限1.三类文件访问者2.文件权限类型3.文件访问权限4.文件权限值表示一、权限的认识 权限是对用户所能进行的操作的限制&#xff0c;如果不对用户作出限制&#xff0c;那么碰到恶意用户&#xff0c;就会损害其他用户的利益。 Linux是多用…...

百度LAC分词

对应数据的链接放这里了 import pandas as pd from util.logger import Log import os from util.data_dir import root_dir from LAC import LAC os_file_name os.path.split(os.path.realpath(__file__))[-1]# 加载LAC模型 lac LAC(mode"lac") # 载入自定义词典 …...

软件测试面试题 —— 整理与解析(1)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;&#x1f30e;【Austin_zhai】&#x1f30f; &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xf…...

深入浅出C++ ——红黑树模拟实现STL中的set与map

文章目录一、红黑树二、用泛型红黑树模拟实现set三、用泛型红黑树模拟实现map一、红黑树 红黑树作为set和map的底层容器&#xff0c;既要实现插入key又要实现插入pair&#xff0c;所以做了稍许的改动&#xff0c;使其成为一颗泛型结构的红黑树&#xff0c;通过不同的实例化参数…...

自动化测试框架设计

大数据时代&#xff0c;多数的web或app产品都会使用第三方或自己开发相应的数据系统&#xff0c;进行用户行为数据或其它信息数据的收集&#xff0c;在这个过程中&#xff0c;埋点是比较重要的一环。 埋点收集的数据一般有以下作用&#xff1a; 驱动决策&#xff1a;ABtest、漏…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上&#xff0c;在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库&#xff0c;Redis 的键值对中的 key 就是字符串对象&#xff0c;而 val…...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)

当我们网关配置好了&#xff0c;DNS也配置好了&#xff0c;最后在虚拟机里还是无法访问百度的网址。 第一种情况&#xff1a; 我们先考虑一下&#xff0c;网关的IP是否和虚拟机编辑器里的IP一样不&#xff0c;如果不一样需要更改一下&#xff0c;因为我们访问百度需要从物理机…...