网站手绘教程/网站设计公司怎么样
提纲
1) 为什么在EPICS上编程
2)构建系统特性:假设基本理解Unix Make
3)在libCom中可用的工具
1) 为什么在EPICS上编程
1、社区标准:EPICS合作者知道和明白EPICS结构
2、在很多操作系统之间代码移值性
- 使得C/C++代码可移植不总是容易的。
- EPICS APIs在所有目标机上相同。
- 支持Linux,Mac,Window(MS, Cygwin, MinGW),Solaris, vxWroks, RTEMS等。
3、在操作系统之间构建的可移值性。
- 编译代码可能不是小事。
- EPICS Makefiles在所有主机上工作相同。
- 支持Linux, Mac,Windows(MS, Cygwin, MinGW),Solaris。
2) EPICS构建系统
1、用于在源代码树中Makefiles的构建规则的高级集合
- 需要GNU Make版本3.81及以上。
- 从没有见过一个相同构建规则的集合。
- 自动规则,imake,premake和Qmake都产生Makefiles
- Cmake产生Makefiles或者Visual Stdio工程文件
2、为多种目标机架构构建而设计:其它构建系统没有集成此功能
3、构建规则需要一个特定的应用程序布局
a)<top>/configure目录
- RELEASE file(s)
- 若干CONFIG*和RULES*文件
b) Makefiles必须有特定的内容
- 设置TOP变量
- 包含特定的CONFIG和RULES文件
Makefiles
1) 四种不同类型,与此角色相关联
顶层:
用于向下进入子目录(支持额外的构建目标)
结构的:
用于向下进入子目录。
条件的
用于构建软件
启动
用于iocBoot/ioc目录
2) 不同
a) 它们包含的那些configure/RULES*
b) 那些规则检查来控制它们想做什么的那些变量
顶层Makefile
1) <top>/Makefile
TOP = .
include $(TOP)/configure/CONFIG
DIRS = list of subdirectories
aslo set *_DEPEND_DIRS here
include $(TOP)/configure/RULES_TOP
2) 在第二个include行后添加任何其它的规则
3)DIRS变量列出了要在其内递归构建的所有子目录。
4)*_DEPEND_DIR变量控制子目录构建的顺序。
- 示例:test_DENPEND_DIRS = configure src
- test子目录将在configure和src目录后被构建。
- 设置*_DEPEND_DIR变量对于并行构建重要:运行'make -j'将在所有子目录中同时构建
结构化的Makefile
1) 只用于向下进入子目录的Makefiles
TOP = .. 根据适合调整路径
include $(TOP)/configure/CONFIG
DIR = list of subdirectories
aslo set *_DEPEND_DIR here
include $(TOP)/configure/RULES_DIRS
2) 非常类似顶层Makefile
- 像之前设置DIRS和*_DEPEND_DIRS变量
- 包含RULES_DIRS替代RULES_TOP
3) 示例
- <top>/exampleApp
- <top>/iocBoot
启动的Makefiles
1) 用于iocBoot/ioc目录的Makefiles
TOP = ../..
include $(TOP)/configure/CONFIG
ARCH = ioc目标架构
TARGETS = 待构建的其它文件
include $(TOP)/configure/RULES.ioc
2) ARCH设置控制产生的TARGETS的内容
3)已知TARGETS是
- cdCommands:只用于vxWorks
- envPahts:用于其它操作系统
- dllPath.bat:用于windows架构
- relPath.sh:用于cygwin
4) 可以在第二个include行后添加用于其它目标的规则。
构建的Makefiles
1) 用于编译软件的Makefiles
TOP = ../.. 视情况而定调整路径
include $(TOP)/configure/CONFIG
在这里设置变量
include $(TOP)/configure/RULES
此处添加额外的规则和依赖
2)构建的Makefiles必须被命名为'Makefile',不要’GNUmakefile‘或'makefile'。
3)很多变量可用于控制构建什么
完整列表见应用开发者手册的第四章。
构建和/或安装什么
1)受到一个命名最终产品的变量集合控制
- INC:C/C++头文件(.h)
- LIBRARY:静态的或者共享对象库(lib.a lib.so .dll)
- LOADABLE_LIBRARY:共享对象库(lib.so .dll lib.dylib)
- PROD:可执行的程序(.exe)
- TESTPROD:可执行程序,但不安装。
- OBJS:对象文件(.o)
- SCRIPTS:被解析的脚本。
- DBD:数据库定义文件(.dbd)
- DBDINC:记录类型或者菜单数据库定义文件
- DB:数据库实例文件(.db .vbd)
- TARGETS:其它构建目标,可能需要构建规则,在很多情况中,你使用的名称不应该包括前缀/后缀
2)指定名称的对象按照它们被构建被复制到合适的安装目录。例如:<top>/include, <top>/lib/<arch>, <top>/bin/<arch>, <top>/dbd和<top>/db
限制构建
1)通过使用这些变量限制构建目标为(所有)主机架构:
PROD_HOST, TESTPROD_HOST, LIBRARY_HOST, LOADABLE_LIBRARY_HOST, OBJS_HOST, SCRIPTS_HOST
2) 通过使用这些变量限制构建为(所有)IOC架构:
PROD_IOC, TESTPROC_IOC, LIBRARY_IOC, OBJS_IOC, SCRIPT_IOC
3) 通过使用这些变量限制构建为OS-specific架构:
- PROD_<osclass>, TESTPROD_<osclass>, LIBARY_<osclass>, LOADABLE_LIBRARY_<osclass>
- <osclass>可以是Linux, vxWorks, Win32, Darwin, RTEMS或solaris
- 示例,仅为嵌入的目标构建库
LIBRARY_vxWorks = myDev
LIBRARY_RETMES = myDev
指定源文件名称
1) 如果一个Makefile仅创建一个目标(库,可执行文件等),你可以添加所有源文件的名称到SRCS变量:
SRCS = myDev.c myDrv.c
2) 如果一个Makefile仅创建一个库,你可以添加所有库源文件的名称到LIB_SRCS变量:
LIBRARY = myDev
LIB_SRCS += myDev.c myDrv.c
3) 如果一个Makefile仅创建一个可执行文件(PROD),你可以添加所有它的源文件的名称到PROD_SRCS变量:
PROD = myIOC
PROD_SRCS += myMain.c mySeq.st
4) 但使用<name>_SRCS变量通常最好:
LIBRARY = myLib
myLib_SRCS = parser.c scanner.cpp process.cpp
PROD = myTool
myTool_SRCS += tool.c
操作系统特定的源文件
1) 你可以在源文件变量名称末尾添加_<osclass>来限制在什么OS上构建此代码:
- SRCS_<osclass>
- LIB_SRCS_<osclass>
- PROD_SRCS_<osclass>
- <name>_SRCS_<osclass>
2)当设置_<osclass>变量时,重要的_DEFAULT变量用于所有不带_<osclass>版本的OS的构建
3)示例:
LIBRARY = myDev
LIB_SRCS = myDev.c
LIB_SRCS_vxWorks = devVx.c
LIB_SRCS_RTEMS = devRtems.c
LIB_SRCS_DEFAULT = devPosix.c # Linux, Darwin, Solaris
LIB_SRCS_WIN32 = -nil-
源文件位置
1) 通常源文件出现在与Makefile相同目录中
2)可以告诉make从附近目录搜索源文件
SRC_DIRS += <dir>
此处<dir>是从O.<arch>构建目录到包含此源文件的目录的相对路径。
3)可以使用代码的多个OS-Specific实现。
4)在一个或多个这些子目录中放置源文件。
- os/<osclass>:OS-specific版本
- os/posix:基于Posix的OS的版本(Linux,Unix,Darwin,RTEMS)
- os/default:最后机会的通用版本。
5)相同源文件文件名应该用于所有版本。
C/C++编译器标记
1)为编译器命令行添加标志的很多方法,例如:
- USR_CFLAGS:所有C编译
- USR_CXXFLAGS:所有C++编译
- USR_CPPFLAGS:C预编译器标志
- USR_CFLAGS_<osclass>:用于<osclass>的所有C编译。
- USR_CXXFLAGS_<osclass>:用于<osclass>的所有C++编译。
- USR_CFLAGS_<arch>:用于<arch>的所有C编译。
- USR_CXXFLAGS_<arch>:用于<arch>的所有C++编译。
- <name>_CFLAGS:编译<name>.c
- <name>_CFLAGS_<osclass>:为<osclass>编译<name.c>
- <name>_CFLAGS_<arch>:为<arch>编译<name.c>
2) 包含文件搜索路径有它们子集的变量
- USR_INCLUDES, USR_INCLUDES_<osclass>, <name>_INCLUDES, <name>_INCLUDES_<osclass>, <name>_INCLUDES_<arch>
- 在INCLUDES中指定名称的每个目录前需要一个’-I‘标记。
与库文件链接
1)由在configure/RELEASE文件中被列出的其它EPICS模块提供的库文件通常将被自动找到
构建系统自动搜索那些lib/<arch>目录以及<top>/lib/<arch>目录。
2)如果一个库文件被放置在其它地方,Makefile必须指定在何处
设置变量<name>_DIR为这个库的绝对路径
例如:
LIBS += usb
usb_DIR = /opt/local/lib
3) 如果它来自一个非EPICS包,使用<top>/configure/CONFIG_SITE来设置此路径为那个包:
不要让用户必须编辑Makefiles来能够构建此代码
在Makefiles中的条件
1) 使用GNU Makefile条件来调整构建
- configure/CONFIG文件包含<top>/configure/RELEASE和<top>/configure/CONFIG_SITE文件
- 如果构建依赖可选模块是否可用,使用configure/RELEASE变量
- 在CONFIG_SITE中使用变量来让用户使能/禁用特性
ifdef SNCSEQ在这里用于与sequencer一起构建的行
else在这里用于没有与sequencer一起构建的行
endififeq ($(BUILD_IOCS), YES)在这里用于构建IOCs的行
else在这里用于不构建IOCs的行
endif
libCom -- 通用工具库
1) 这个库有两个主要功能
- 在所有支持的OS之间提供一个共同的操作系统API
- 为由IOC,通道访问和其它程序使用实现了更多通用工具。
2)base/src/libCom包含了159个C/C++头文件(3.14.12.5)
3)没有时间在这里讨论或甚至提到
4)主要功能在IOC应用程序开发者指南章节中讨论了:
- IOC错误日志记录
- 任务看门狗
- IOC shell
- libCom
- libCom OSI库文件
- Registry
对应C代码的libCom亮点
1) 多线程和线程间通信
- epicsThread, epicsMutex, epicsEvent
- epicsRingBytes, epicsRingPointer, epicsMessageQueue
2)进程通信和字符串转换
- epicsStdio, epicsStdlib, epicsString
- osiSock
- errlog & logClient
- macLib
3) 数据类型和结构体
epicsTypes, ellLib, gpHash
4) 数学
calc引擎, epicsMath, epicsEndian
5) 共享库
shareLib.h和epicsExport.h
多线程
1) epicsThread.h提供了一个通用的线程API
线程创建(名称,优先级,栈大小,函数,参数)
- 如果支持,OS线程优先级映射到范围low=0 .. high=99
- 栈大小是OS和架构相关的:Small, medium, large
支持的线程操作:
- sleep(延时), 挂起,继续,获取名称,获取id,休眠量,显示
- 没有远程杀死一个线程的API,例程必须为要退出的线程返回
C++包装类
2)线程私有变量
变量操作:创建,销毁,get,set
3)线程onceAPI
确保初始化函数的执行仅一次
被其它线程执行初始化函数的并行尝试将在这个函数在第一个线程中返回前推迟它们。
互斥和事件信号
1) epicsMutex.h
- 互斥信号量
- 支持递归锁
- 来自OS可用的优先级继承和删除安全性。
- 互斥操作:创建,销毁,锁定,解锁,尝试锁定,显示
- C++包装类
2)3.15 epicsSpin.h:spin-lock信号量,基于epicsMutex C API。
3)epicsEvent.h
- 二进制信号量
- 事件操作:创建,销毁,信号,等待,尝试等待,无超时等待,显示
- C++包装类
环形消息缓存
1) epicsRingBytes.h
- 固定大小环形缓存
- 支持变长度消息
- 如果需要,调用者必须实现锁:如果单写入线程,在写入时不需要锁定;如果单读取线程,读取时不需要锁定;Base 3.15提供一个可选的内部spin-lock
- 缓存操作:创建,删除,put,get,flush
- 状态请求:size,is full, is empty, 使用字节,空闲字节。
用于指针的环形缓存
epicsRingPointer.h
1) 固定大小的环形缓存
2)仅支持单指针消息
3)调用者必须根据需要实现锁定
- 如果单写入线程,在写入时不需要锁定
- 如果单读取线程,在获取时不需要锁定
- Base 3.15提供了一个可选的内部spin-lock
4) C++包装类
5)缓存操作:
- 创建,删除,push,pop,flush
- 3.15:create-locked
6) 状态查询:
- 大小,是满,是空,已用字节,空闲字节
消息队列
epicsMessageQueue.h
1) 固定大小的队列
2)支持变长消息
3)为与多个读取和写入线程而设计
4)C++包装类
5)队列操作:创建,销毁,发送,尝试发送,无超时发送,接收,尝试接收,不超时接收
6)状态查询:pending, show
对<stdio.h>的包装
epicsStdio.h(包含了stdio.h)
1) epicsSnprintf() & epicsVsnprintf()
- 实现或者对C99的snprintf()&vsnprintf()函数的包装
- 确保所有操作系统表现基本相同
2)用于重定向stdin, stdout, stderr流的基础设施
- 用于每个流的每线程设置(主要用于iocsh):epicsGetThreadStdinI(), epicsSetThreadStdin()等
- 包含epicsStdioRedirect.h来重新定义标识符stdin, stdout&stderr和函数printf(), puts()和putchar():在3.15中,这个头被合并到了epicsStdio.h
3)各种文件和文件名函数:推荐不使用这些老的APIs
标准库
epicsStdlib.h(包含stdlib.h)
1) epicsStrtod()
- 同义或者对strtod()的包装
- 确保所有操作系统表现相同,支持NaN和Inf字符串
2)epicsScanDouble() epicsScanFloat()
确保sscanf("%f")和sscanf("%lf")支持NaN和Inf字符串。
3)3.15:epicsParse函数系列
- 用于转换字符串为所有数值类型
- 可选的单位字符串捕获
- 错误检查包括值向上溢出和向下溢出
- 所有函数返回一个状态值(错误代码)
字符串处理
epicsString.h
1) 编译有用字符串函数:
- 从raw转换字符串到转义的C类型
- 从转义的C类型转换字符串为raw
- 用转义的不可打印字符打印字符串
- shell团聚匹配(此字符串匹配通配符模式吗?)
- 计算字符串的哈希值和内存缓存
2)这些替代了不是在所有操作系统上可用的标准例程
- 大小写无关的字符串比较(strcasecmp, strncasecmp)
- 可再入字符串tokenization(strtok_r)
- 字符串复制(strdup)
宏替换
macLib.h
1) 通用宏替换库
2)支持多种变量范围,递归宏,...
3)也处理环境变量
4)操作:创建上下文,启用/禁用警告,删除上下文,获取宏值,设置宏值,push scope,pop scope,解析宏定义,安装被解析的定义,展开字符串,用环境变量展开字符串,报告上下文。
5)高效,可高,经过充分测试
6)更详细见base/src/libCom/macLib中macLibREADME文件。
网络套接字API
osiSock.h
1) 提供用于创建和使用网络套接字的统一API:对于Windows,Solaris等不需要特殊的应用程序代码。
2)被Base(CA客户端和服务器,日志客户端和服务器等),Asyn,pvAccess使用。
3)使用特别广泛,可靠。
4)为常见任务提供若干例程
- 查询可用的网络接口
- 创建套接字,绑定到地址,监听连接,ioctl, 销毁
- 配置用于广播UDP的套接字
- 转换套接字或IP地址为ASCII(DNS和数值)或者从ASCII(DNS和数值)转成套接字或IP地址
- 如何解冻被阻塞从一个套接字读取的线程
- 查找套接字错误消息字符串。
报告和记录错误
1)errMdef.h errlog.h
提供用于与错误处理和日志相关目的的APIs
- 关联和查找有错误状态值的字符串
- 用于错误数值前缀的标准
- 记录和flush错误消息
- 转发记录的错误到一台远程服务器的监听程序
- 在调试口启用/禁用记录消息的显示
2)iocLogServer
- 用于IOCs和应用程序记录错误消息到其的服务器应用程序。
- 存储消息在环形文件中(可配置固定最大尺寸)
- 也支持记录文件目录轮转
3) IOC应用程序开发手册中第10章详细描述。
标准类型
epicsTypes.h
1)各种大小的EPICS标准类型定义
2)以前的C99,以及我们支持的操作系统的一些
3)定义这些标准类型:epicsInt8, epicsUInt8, epicsInt16,epicsUInt16, epicsInt32, epicsUInt32, epicsFloat32, epicsFloat64 epicsEnum16; 3.15:epicsInt64, epicsUInt64
4)epicsInt8总是'char',因而可能在某些架构上是无符号的。
5) 也定义了:
- MAX_STRING_SIZE(40)
- epicsFalse(0)
- epicsTrue(1)
- stringOf(token)
链表
ellLib.h
1) 双链表管理程序
2)插入式 - 链接对象必须包含一个ELLNODE, 不需要额外内存
3)操作:初始化列表, 对象计数, 第一个对象,末尾对象,下一个对象,前一个对象,添加对象,连接链表,删除对象,提取对象,获取第一个对象,插入对象,获取第n个对象,步进n个对象,在链表中查找对象,释放所有对象,验证链表有效性。
4)链表和节点会被静态地初始化
5)高效,可靠,经过充分测试
6)模仿vxWorks lstLib的API
哈希表
gpHash.h
1) 用于通过名称快速对象查找的通用哈希表
2)在初始化时固定的buckets数目:2的指数,从256到65536
3)在一个哈希表中可以存储多个对象类型:传入一个类型ID(指针)来区分,在哈希计算中被包含
4)非-obtrusive, 表分配节点对象
5)线程安全的访问,表包含一个互斥锁
6)操作:创建表,添加指定名称的对象,通过名称查找,通过名称删除,释放表,转存内容
计算引擎
1)表达式编译器和计算引擎
2)编译数学表达式为一个私有的后缀字节代码格式:支持大多数标准C操作,在语法中小差别
3)用指定的输入值集合(double)快速执行字节代码
4)被Base中calc,calcout,transform记录,areaDetector插件使用。
5)检查输入值的例程被编译的表达式使用和修改。
6) 操作:编译表达式,执行计算,参数使用,转存字节码
7)高效,可靠,经过充分测试
8)在IOC应用程序开发者手册中详细描述
其它头文件
1) epicsMath.h
- 包含math.h
- 定义epicsINF和epicsNAN
- 确保finite(), isnan()和isinf()都被定义
2)epicsEndian.h
a)定义4个数值宏
- EPICS_ENDIAN_LITTLE
- EPICS_ENDIAN_BIG
- EPICS_BYTE_ORDER
- EPICS_FLOAT_WORD_ORDER
b) 两个_ORDER宏是架构专用,并且应该与前两个做比较来确定CPU的大小端
库导出和导入
1) shareLib.h
a) 定义用于标记库符号的若干宏,对windows DLLs必不可少
- epicsShareFunc:要被导出/导入的函数
- epicsShareClass:要被导出/导入的类
- epicsShareExtern:'extern'变量声明
- epicsShareDef:变量定义
- epicsShareAPI:在windows上函数使用__stdcall调用规则
b) 取决于是否定义了宏epicsExportSharedSymbols以及编译器是否正在构建DLL或一个静态(archive)库,这些定义不同。
2) epicsExport.h
- 定义epicsExportSharedSymbols,接着包含shareLib.h
- 为IOC注册定义了一些其它宏:epicsExportAddress, epicsExportRegistrar(), epicsRegisterFunction()
合适地使用shareLib.h
1) 库头文件应该:在这个头文件中包含这些声明所需的shareLib.h以及任何其它头文件,接着使用合适的epicsShare关键字来装饰这个头的声明。
2)库实现应该:
- 包含用于此代码将成为其组成部分的库外找到代码的所有所需头。被这个模块头文件包含的外部头也必须被包含在这里。
- # define epicsExportSharedSymbols
- 包含用于此代码将成为其组成部分的库内找到代码的所有所需头。
2)实现包含epicsExport.h而不是定义宏epicsExportSharedSymbols。
单元测试
1) epicsUnitTest.h
- 单元测试报告库
- 产生测试任何东西协议(TAP)标准输出
- 与在工作站上构建系统'runtests'和'tapfiles'目标一起运行
- 在运行在嵌入操作系统时,内建测试使用功能
- 操作:plan,ok,pass,fail,skip,todo,diagnostic, abort, done
2) testMain.h
定义一个宏MAIN(),允许测试在工作站上以程序被构建以及在嵌入操作系统上以函数被构建
3)构建系统变量TESTPROD, TESTSCRIPT(3.15:TESTLIBRARY构建程序而不安装它们;测试程序通常在它们的O.<arch>目录中运行。
4)通过运行'make runtests'等添加要被运行的测试程序名到TESTS。
相关文章:

EPICS编程
提纲 1) 为什么在EPICS上编程 2)构建系统特性:假设基本理解Unix Make 3)在libCom中可用的工具 1) 为什么在EPICS上编程 1、社区标准:EPICS合作者知道和明白EPICS结构 2、在很多操作系统之间代码移值性…...

17:00面试,还没10分钟就出来了,问的实在是太...
从外包出来,没想到死在另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以也就忍了。没想到8月一纸通知,所有人不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个兄弟内推我去…...

docker都有那些工具,及工具面试题
docker介绍 Docker 是一种开源的容器化平台,可以帮助开发者将应用程序和依赖项打包到轻量级的容器中,然后部署到任何基于 Linux 的操作系统中。使用 Docker 可以大大简化开发、部署和管理应用程序的过程,使其更加快速、灵活和可靠。 Docker…...

LAMP网站应用架构
LAMP 一、LAMP概述1、各组件的主要作用2、构建LAMP各组件的安装顺序 二、编译安装Apache httpd服务1、关闭防火墙,将安装Apache所需软件包传到/opt目录下2.安装环境依赖包3.配置软件模块4.编译及安装5.优化配置文件路径,并把httpd服务的可执行程序文件放…...

C++虚函数virtual(动态多态)(纯虚函数)
怎么判断函数是虚函数还是普通函数? 用VS,在调用对象的方法的地方。。按altg ,如果他跳转到正确的函数,那也就意味着他是编译时可以确定的。。。 但是如果他跳到了这个调用对象的基类的函数,那么也就意味着他是一个运行…...

【Java 接口】接口(Interface)的定义,implements关键字,接口实现方法案例
博主:_LJaXi Or 東方幻想郷 专栏: Java | 从入门到入坟 专属:六月一日 | 儿童节 Java 接口 接口简介 🎃接口的定义 🧧接口实现类名定义 🎁接口实现类小案例 🎈后话 🎰 接口简介 &…...

解决Vmware上的kali找不到virtualbox上的靶机的问题
解决kali找不到靶场ip问题的完整方法 1.配置靶机2.配置kali的虚拟网络3.配置kali中的eth0网络 1.配置靶机 靶机部署在Virtualbox上对其进行网络配置,选择连接方式为仅主机(Host-Only)网络。 2.配置kali的虚拟网络 在编辑中选择虚拟网络配…...

查看MySQL服务器是否启用了SSL连接,并且查看ssl证书是否存在
文章目录 一、查看MySQL服务器是否启用了SSL连接 1.登录MySQL服务器 2.查看SSL配置 二、查看证书是否存在 前言 查看MySQL服务器是否启用了SSL连接,并且查看ssl证书是否存在 一、查看MySQL服务器是否启用了SSL连接 1.登录MySQL服务器 在Linux终端中…...

华为OD机试真题 Java 实现【表示数字】【牛客练习题】
一、题目描述 将一个字符串中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。 数据范围:字符串长度满足1≤n≤100 。 二、输入描述 输入一个字符串。 三、输出描述 字符中所有出现的数字前后加上符号“*”,其他字符保持不变。 四、解题思路…...

使用Python进行接口性能测试:从入门到高级
前言: 在今天的网络世界中,接口性能测试越来越重要。良好的接口性能可以确保我们的应用程序可以在各种网络条件下,保持流畅、稳定和高效。Python,作为一种广泛使用的编程语言,为进行接口性能测试提供了强大而灵活的工…...

sed编辑器
文章目录 一.sed命令基础1.sed概念2.sed的工作流程3.命令格式4.sed命令的常用选项5.sed命令的操作符 二.sed命令的打印功能1.打印文本文件内容1.1 格式1.2 默认打印方式 2.指定行打印2.1 指定行号打印2.2 只打印文件的行数2.3 即打印文件的行号也打印文件的内容2.4 即显示行也显…...

深入理解深度学习——正则化(Regularization):稀疏表示
分类目录:《深入理解深度学习》总目录 另一种策略是惩罚神经网络中的激活单元,稀疏化激活单元。这种策略间接地对模型参数施加了复杂惩罚。我们已经在《深入理解深度学习——正则化(Regularization):参数范数惩罚》中讨…...

【Android】分别用JAVA和Kotlin实现横向扫描的动画效果
Android 横向扫描的动画可以通过使用 ViewPropertyAnimator 和 ObjectAnimator 来实现。 首先,在 XML 布局文件中创建一个 ImageView,并设置其宽度为 0dp,高度为 match_parent。然后,创建一个横向的渐变色 Drawable,并…...

长尾词挖掘,如何选择精准的长尾词优化?
长尾词的挖掘也是一门大学问,它存在多种不同的方法。最常用的方法是把关键词直接放搜索引擎的搜索框搜索和使用长尾词挖掘工具这两种。 以运动水壶为例。 关键词直接放搜索引擎的搜索框搜索,结果如下: 使用长尾词挖掘工具,…...

Python相关环境变量配置和模拟手机app登录
【java环境变量配置】 接着,打开系统->高级系统设置->环境变量。新建一个JAVA_HOME C:\Program Files\Java\jdk1.8.0_201(这里是你的安装路径,最好复制粘贴) 然后在Path下添加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 然后…...

c++ 11标准模板(STL) std::map(九)
定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…...

深入探索chatGPT插件:SceneXplain,Wolfram,和AppyPieAIAppBuilder
1. 引言 在这个日益依赖技术的世界中,AI插件已经成为了我们日常生活和工作的重要组成部分。在这篇博客中,我们将深入探索三个强大的AI插件:SceneXplain,Wolfram,和AppyPieAIAppBuilder,了解他们的功能&…...

华为OD机试真题B卷 Java 实现【停车场车辆统计】,附详细解题思路
一、题目描述 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。 车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位&a…...

第二章:MySQL环境搭建
第二章:MySQL环境搭建 2.1:MySQL的下载、安装、配置 MySQL的四大版本 MySQL Community Server社区版本:开源免费、自由下载,但不提供官方技术支持,适用于大多数普通用户。MySQL Enterprise Edition企业版本࿱…...

生产环境之负载均衡LVS+keepalived方案(2)_LVS介绍
LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,linux内核2.6.X之后的版本默认已集成了LVS模块(内核模块名为:ipvs),实现了基于传输层的请求负载均衡调度方案,LVS支持的工作模…...

【parsel】------- PYTHON爬虫基础4
parsel 这个库可以对 HTML 和 XML 进行解析,并支持使用 XPath 和 CSS Selector 对内容进行提取和修改,同时它还融合了正则表达式提取的功能。 内容目录 from parsel import Selector提取节点提取 class 包含 item-0 的节点 提取文本获取提取到的所有 li…...

MySQL数据库从入门到精通学习第8天(表数据的查询)
表数据的查询 基本查询语句单表查询聚合函数查询多表连接查询子查询合并查询结果定义表和字段的别名使用正则表达式查询 基本查询语句 SELECT 语句非常的强大,是最常用的查询语句。他具有一个固定的格式,如下: SELECT 查询的内容 FROM 数据…...

什么是IPAM?如何使用IPAM来管理IP地址和DHCP?
在计算机网络中,IPAM(IP Address Management)是一种用于管理IP地址和DHCP(Dynamic Host Configuration Protocol)的工具或系统。IPAM旨在简化和集中管理IP地址分配、子网划分和DHCP配置等任务。本文将详细介绍IPAM的概…...

PCIE学习
目录 一、PCIE结构1、层次结构2、数据包TLPDLLP PCIE寄存器配置1、基址寄存器的作用2、基址寄存器的位置 三、PCIE读取数据 一、PCIE结构 1、层次结构 绝大多数的总线或者接口,都是采用分层实现的。PCIe也不例外,它的层次结构如下: PCIe定…...

商业智力,Social焕新|数说故事重磅发布“SocialGPT”,国内首个专注Social领域的商业大模型
AGI时代的到来,市场风云变幻,世界正在经历着一场技术革命的颠覆性洗礼。 2023年6月6日6时,数说故事正式对外发布数说故事“SocialGPT”,国内首个专注Social领域的商业大模型。数说故事“SocialGPT”大家昵称它为“社牛”大模型&a…...

STM32HAL库RS485-ModBus协议控制伺服电机
STM32HAL库RS485-ModBus协议控制伺服电机 一个月前,接手了一个学长的毕设小车,小车采用rs485通信的modbus协议驱动轮毂电机,与往常我学习的pwm控制电机方法大相径庭,在这里以这篇博客记录下该学习过程。 小车主要架构 电机型号 …...

【医学图像】图像分割系列.3 (uncertainty)
介绍几篇使用不确定性引导的医学图像分割论文:UA-MT(MICCAI2019),SSL4MIS(MICCAI2021),UG-MCL(AIIM2022). Uncertainty-aware Self-ensembling Model for Semi-supervise…...

Java有线程安全的set吗?
在Java中,有线程安全的Set实现。一个常用的线程安全的Set实现是ConcurrentSkipListSet。ConcurrentSkipListSet是一个有序的集合,基于跳表(SkipList)的数据结构实现。它提供了线程安全的操作,并且具有较好的性能。 接下来笔者用一段简单的Jav…...

《HelloGitHub》第 86 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 …...

LDGRB-01 3BSE013177R1 将数字输入和继电器输出结合
LDGRB-01 3BSE013177R1包的一部分是全面的通信选项,包括Modbus主/从或CS31,这种产品很少提供。128kB的用户内存和0.1秒/指令的程序处理时间只是AC500-eCo令人印象深刻的性能的两个例子。除了与现有AC500系列的互操作性,AC500-eCo系统还使用基…...