版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Tuxedo速成培训,Copy Right 2004-2007,Shanghai Baosight Software Co.,Ltd. The document is created and modified by Baosight, All rights reserved by Baosight.,Tuxedo速成培训,Tuxedo及C/S结构介绍 Tuxedo应用的一个简单例子 客户端开发 服务端开发 应用配置 Tuxedo管理命令,TUXEDO是什么,BEA TUXEDO是在企业、Internet 这样的分布式运算环境中开发和管理三层结构的客户/服务器型关键任务应用系统的强有力工具。它具
2、备分布式事务处理和应用通信功能,并提供完善的各种服务来建立、运行和管理关键任务应用系统。开发人员能够用它建立跨多个硬件平台、数据库和操作系统的可互操作的应用系统。BEA TUXEDO是企业、 Internet 分布式应用中的基础主干平台。它提供了一个开放的环境,支持各种各样的客 户、数据库、网络、遗留系统和通讯方式。,分布式系统的层次结构,分布式系统的主要层次: 用户界面:被分成表示管理和表示逻辑。代表有主机框架的仿真终端;UNIX系统的X终端等;还包括Web浏览器界面。 商业逻辑:包含应用逻辑和应用规则。 数据管理:分为数据访问逻辑(SQL)和数据库管理。,基本的C/S模式,客户端模块 (可
3、能包含逻辑处理),服务端模块 (在数据库中包含逻辑处理),基本的C/S模式,C/S系统是一种分布式系统,其特点是: 客户端提供用户界面、请求交易 服务端按交易组织,将结果返回客户端 交易是分散的、按需求的操作,可管理多层C/S模式,TUXEDO的C/S方案,Tuxedo速成培训,Tuxedo及C/S结构介绍 Tuxedo应用的一个简单例子 客户端开发 服务端开发 应用配置 Tuxedo管理命令,客户端:提交交易请求 服务端:响应请求交易的服务 配置文件:描述机器信息、服务信息等,TUXEDO 应用的三个基本部分,一个例子 (图示),#include atmi.h/* TUXEDO Header
4、 File */ main(int argc, char *argv) char *buf ; long sendlen, rcvlen; int ret; if (tpinit(TPINIT *) NULL) = -1) (void) fprintf(stderr, Tpinit failedn);exit(1); sendlen = strlen(argv1); if(buf = (char *) tpalloc(STRING, NULL, sendlen+1) = NULL) (void) fprintf(stderr,Error allocating send buffern); tp
5、term();exit(1); (void) strcpy(buf, argv1); ret = tpcall(”TOUPPER, (char *) buf, 0, (char *) ,一个例子(客户端),一个例子(客户端),应用程序包含TUXEDO系统的头文件”atmi.h”,以便引用TUXEDO的函数和变量定义。 客户端调用tpinit()连接应用 用tpalloc()分配一个STRING类型数据缓冲 将数据拷贝进缓冲 用tpcall()包含数据缓冲,向交易“TOUPPER”发一个同步请求 调用tpterm()切断与应用的连接,#include #include #include “atm
6、i.h” void TOUPPER (TPSVCINFO *rqst) int i; for ( i=0;ilen-1;i+) rqst-datai = toupper(rqst-datai); tpreturn(TPSUCCESS,0,rqst-data,0L,0); ,一个例子(服务端),一个例子(服务端),服务端: 包含TUXEDO系统头文件”atmi.h” 象所有的TUXEDO交易函数一样,TOUPPER不用直接返回任何值,所以返回类型为void 从客户端收到的数据放在TPSVCINFO结构中,是唯一的入参 交易处理 用tpreturn()将数据缓冲返回客户端,一个例子(配置文件),有
7、关应用的信息,如可用交易,交易位置,应用范围等,有必要集中管理于单一资源。事实上,这些信息被集中于文件UBBCONFIG。该文件分7节,主要部分内容描述如下: *RESOURCES节包含全局信息,如:标识公告牌位置的唯一键值(IPCKEY),主控节点的名字(MASTER),应用类型(MODEL),SHM表示是一个单节点应用。 *MACHINES节包含节点信息,如:机器物理名,TUXEDO系统位置(TUXDIR),服务程序位置(APPDIR),以及本文件的二进制码文件名(TUXCONFIG)。 *GROUPS节包含一些管理用信息,如设定服务或交易的分布式事务处理。 *SERVERS节包含需要启动
8、的交易和其组信息等其他信息。 *SERVICES节包含影响应用操作方式的的必要信息。本节列出的交易都是需要特别配置的,如有特别的优先级,装入参数,数据依赖路由等。,一个例子(建立应用),建立一个TUXEDO应用,有以下关键步骤: 确保环境变量设置正确TUXCONFIG, PATH, TUXDIR, SHLIB_PATH, APPDIR, others. 编写client端和server端的代码,编译buildclient, buildserver buildclient f client.c o client -w buildserver f simpserv.c o simpserv s T
9、OUPPER 定义配置文件ubbconfig ubbconfig, tmloadcf 启动Tuxedotmboot 执行程序,Tuxedo速成培训,Tuxedo及C/S结构介绍 Tuxedo应用的一个简单例子 客户端开发 服务端开发 应用配置 Tuxedo管理命令,客户端在C/S模式中的作用,为了更好的了解客户端的所有任务以编写客户端应用,有必要重新认识客户端在C/S模式中扮演的角色。 首先,客户端是用户界面。当用户在系统上用程序进行一次操作的整个过程就是一个客户端过程。前端过程是对客户端的另一个描述。客户端的首要任务就是获得执行操作应该得到的数据。 一旦客户端得到了应有的信息,应该将数据按服
10、务能够识别并适合传输的格式打包。 然后,向服务端发送请求并等待回应。 收到回应数据后,将其按一定格式展现给终端用户。,客户端开发过程,客户端程序的设计和实现可以被分成2部分考虑: 用户处理过程 TUXEDO功能部分 TUXEDO功能部分 ,利用TUXEDO的ATMI API调用实现: 基本的TUXEDO调试技巧(tperrno,tpstrerror,userlog) TUXEDO进程管理(tpinit,tpterm) 基本数据缓冲管理(tpalloc,tprealloc,tpfree) 基本通讯(tpcall,tpacall,tpgetrply),调试和错误处理,当调用ATMI出错时,返回值为
11、-1,全局变量tperrno被设值,该变量提供系统定义的出错原因。函数tpstrerror()以此变量为参数,返回错误的字符说明信息。 完整的错误号和文本错误信息存在于文件$TUXDIR/include/atmi.h。 函数userlog()重定向输出文件为ULOG.mmddyy。使用方法同printf()。该函数每次输出都写硬盘,这样在系统失败时也能保留调试信息。,进程管理,为了使客户端能够访问TUXEDO交易,客户端程序必须连接TUXEDO应用并进行登记。这种管理性步骤在切断连接时也要类似执行一次。API如下: int tpinit(TPINIT *tpinfo) 客户端通过调用tpini
12、t()与应用连接,进行交互,有以下事件发生: 调用安全接口检查客户端是否需要认证 连接BB,使进一步的ATMI函数得到信息 使BBL了解BB中已经存在请求 建立客户端消息队列使服务可以发回返回信息,系统可以送出广播通知等 int tpterm() 客户端调用tpterm()切断与应用的连接,结束了客户端的TUXEDO进程,该过程发生以下事件: BB入口删除,使BBL知道客户端已经离开 客户端离开BB,客户端的信号量被移除,数据缓冲管理,ATMI提供函数分配(tpalloc(),tprealloc())、释放(tpfree())TUXEDO数据缓冲。应用负责将应用数据填入缓冲。应用的数据类型和组
13、织决定应该选择何种数据缓冲。函数type()可以返回正在使用的数据缓冲类型。 以下是TUXEDO基本的数据缓冲类型: STRING以空值结尾的单域字符数据。 CARRAY 有长度定义的单域二进制数据,不进行编、解码。使BBL了解BB中已经存在请求 VIEW类似C的结构多域组织 FML无固定结构的自定义缓冲,使用类型缓冲区,在Tuxedo系统中的所有通信过程都是通过类型缓冲区来完成的,Tuxedo系统提供了大量的类型缓冲区来供开发者使用。所有类型缓冲区都必须通过Tuxedo的tpalloc(), tprealloc(), tpfree()这些ATMI来分配回收。 统一定义的类型缓冲区可以使它们在
14、跨越不同网络、不同协议、不同CPU构架以及不同操作系统之间得到统一的处理,这就使得开发者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的开发上。,同步通讯,客户端与服务端之间的同步通讯通过tpcall()这一ATMI函数调用完成。函数tpcall()有6个参数: 交易名 请求数据缓冲 请求数据缓冲的长度(仅缓冲类型为CARRY时需要) 返回数据缓冲的地址。缓冲大小可以根据收到数据而改变。 返回数据缓冲大小的地址 标志量 标志量可以是以下值: TPNOTRAN如有交易不调用 TPNOBLOCK如有阻塞不等待 TPNOTIME愿意等待直到超时 TPSIGRS
15、TRT系统中断信号在TUXEDO完成后再发布 出错返回-1,错误原因如下: TPEINVAL参数错误 TPETRAN交易相关错误 TPETIME超时,异步通讯,ATMI提供2个异步通讯函数:tpacall()、tpgetrply() tpacall()有4个参数: 交易名 请求数据缓冲 请求数据缓冲的长度(仅缓冲类型为CARRY时需要) 标志量(同tpcall()) 返回值是一个非负描述符(句柄),用于其后的tpgetrply()调用。如果tpacall()调用失败,句柄是-1,错误原因设置在tperrno,可能是以下值: TPELIMIT过多未处理的tpacall() TPETIME超时 t
16、pacall()后总跟随一个tpgetrply(),有4个参数: 变量地址,可以传入tpacall()所得句柄,或另设一个 返回数据缓冲的地址,缓冲大小可以根据收到数据而改变。 返回数据缓冲大小的地址 标志量,Tuxedo系统提供的通信模式,Tuxedo系统提供多种通信模式: 同步Request/Response模式; 异步Request/Response模式; 嵌套调用; 调用转发; 会话通信; 主动消息通告; 基于事件的通信; 基于队列的通信; 使用事务。,同步Request/Response模式,Tuxedo客户程序使用ATMI函数tpcall()把一个请求送到服务程序,客户程序要等到服
17、务程序作出响应后才处理后面的工作,在收到服务程序的响应之前一直处于阻塞状态。,异步Request/Response模式,客户程序需调用两个ATMI函数:tpacall()函数,用于请求一个服务;tpgetrply()函数,用于取得服务程序的响应。,嵌套调用,一个服务可以充当Tuxedo客户程序,去调用其它Tuxedo服务。,调用转发,在嵌套服务中,最里层嵌套服务可以直接给客户程序一个响应,没有必要按照调用栈逐级返回,这就使其它嵌套服务可以处理其它请求,当第一个服务是一个分发代理时,这种模式是非常有用的。在嵌套调用中,被客户调用的服务X使用tpforward()函数把请求传给服务Y,服务X没有t
18、preturn()函数。,使用事务,要使用事务,应用程序开发者需要使用如下ATMI函数: tpbegin(),用于开始一个事务; tpcommit(),开始一个提交处理; tpabort(),立即终止事务。 任何放在begin,commit/abort之外的代码不包含事务中。,编译C语言客户端程序,当C语言的客户端程序编码完后,需要连接正确的库并编译。使用buildclient可以使该过程容易一点。该命令引用了C语言编译器并按正确的次序连接TUXEDO系统的库。为使用buildclient,应确认客户端程序包含了”atmi.h”,TUXDIR被设了正确的值。命令语法如下: buildclien
19、t -v o executable f first-file -f first-file -l last-file 参数解释如下: -o生成的可执行文件名 -f需要在连接TUXEDO库之前传给编译器的文件名。如有多于一个的文件名,名字应用空格分隔并用引号引起。也可以使用多个-f参数。 -l需要在连接TUXEDO库之前传给编译器的文件名。语法同上。 -v编译过程显示。,Tuxedo速成培训,Tuxedo及C/S结构介绍 Tuxedo应用的一个简单例子 客户端开发 服务端开发 应用配置 Tuxedo管理命令,服务的运行流程,为了更好的了解服务端的所有任务以编写服务端应用,有必要重新认识服务端在C/
20、S模式中扮演的角色。 首先,服务是系统资源的联系点。例如,一个数据库服务联系实际数据库并对其进行查询和修改。为有效进行,应建立一个数据库连接。 其次,服务必须发布系统内可以访问的交易,保证客户端可以知道把请求发往何处。 以上两步结束后,服务进入一个循环接收请求、处理请求并返回结果。接收请求包括进入消息队列,得到交易请求。处理请求包括检查请求数据缓冲,运行商业规则和逻辑,可能还包括访问数据库和返回结果数据缓冲。 当系统管理员需要关闭系统,可以通过系统管理工具将关闭系统的消息发给服务。服务完成所有交易,取消交易发布,关闭资源连接然后结束。,创建Tuxedo的服务程序,尽管开发者使用ATMI编程接口
21、来创建Tuxedo客户程序和服务程序,但服务程序不全部由开发者来编写,开发者只需写一些称为服务的商业函数,然后和Tuxedo的一些二进制程序联编成一个可执行的服务程序。Tuxedo服务程序启动后,它总是保持运行状态,直到接收到一个shutdown消息为止。服务程序的任务包括: 在Tuxedo服务程序启动时,执行tpsvrinit()函数,可以在里面打开一些如数据库之类的资源供以后使用; 在Tuxedo服务程序关闭时,执行tpsvrdone()函数,可以在里面关闭tpsvrinit()中打开的资源; Tuxedo服务程序以服务的形式来响应客户程序的请求,客户程序不是通过名字来调用服务程序的,而是
22、调用服务,客户程序不知道处理它请求的服务程序的位置; 服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序。,创建Tuxedo的服务程序,初始化和结束服务,tpsvrinit()和tpsvrdone()分别用来启动和关闭服务。如果应用不提供这两个函数,可以使用替代函数。tpsvrinit()用tpopen()缺省打开RM连接。tpsvrdone()用tpclose()关闭RM连接。 tpsrvinit()象标准C语言的main()一样使用参数argc,argv。服务的命令行参数可以传入该函数,被getopt()解析。本函数出错时返回-1,成功返回0。
23、tpsvrdone()无参数,无返回值。,返回控制,在一般的C程序中,函数通过调用return()来清空函数调用堆栈,将控制返回调用点。 TUXEDO系统的交易函数必须结束于将回应返回给客户端或转发到另一交易函数。函数tpreturn()用来结束交易将回应数据缓冲发给客户端。函数tpforward()将交易转发给另一个交易,由其负责回应原来的客户端。 tpreturn()设计来代替常规的return(),结束绝大多数函数。它将回应数据缓冲返回请求的客户端,控制权返回给由TUXEDO提供的服务程序的标准main()。 tpreturn()有5个参数: 交易结果,表示交易是否成功 应用定义返回码,
24、使交易可以发送一个整型代码到客户端,给出交易处理结果的详细信息,通过全局变量tpurcode送到客户端程序 回应数据缓冲的的指针 回应数据缓冲的长度(仅缓冲类型为CARRY时需要) 标志位,通常不使用,创建服务,当C语言的交易程序编码完成后,需要连接正确的库并编译。使用buildserver可以完成这一过程。该命令引用了C语言编译器并按正确的次序连接TUXEDO系统的库,连接TUXEDO生成的main()等。buildserver还用-s参数产生合适的交易名/函数名映射表。要使用buildserver,必须先正确设定环境变量TUXDIR,PATH,SHLIB_PATH。命令语法如下: buil
25、dserver -v o executable -s service2,service3:func -f source/object -l object/library file -r RM 参数解释如下: -o生成的可执行文件名 -f需要在连接TUXEDO库之前传给编译器的文件名。如有多于一个的文件名,名字应用空格分隔并用引号引起。也可以使用多个-f参数。 -l需要在连接TUXEDO库之前传给编译器的文件名。 -v编译过程显示。 -r连接此处指出的RM库。该RM的名字必须含在$TUXDIR/udataobj/RM文件中。,Tuxedo速成培训,Tuxedo及C/S结构介绍 Tuxedo应用的
26、一个简单例子 客户端开发 服务端开发 应用配置 Tuxedo管理命令,应用配置总览,应用的描述信息配置在系统核心位置,用一个文件描述,通常称为ubbconfig文件,在主控机器上。整个TUXEDO系统的管理任务可以在一台机器上完成,在配置中被定为主控节点。 在运行时,这些信息被装入一段共享内存(一个IPC资源),称为公告牌(Bulletin BoardBB);包含有配置中不同机器的信息,在这些机器上运行的服务的信息,这些服务提供的交易的信息以及其他相关信息。 客户端在运行时连接公告牌。当客户端程序调用一个交易,将根据公告牌找到合适的服务队列。 所以,公告牌是: 供客户端寻找适当的服务运行一个交
27、易请求 包含应用信息:机器,服务,交易,网络等 创建于ubbconfig文件 TUXEDO提供一个管理进程,称为BBL(Bulletin Board Liaison),包含了一个公告牌的本地拷贝和本地服务器上应用的状态。 TUXEDO提供的另一个管理进程DBBL(Distinguished Bulletin Board Liaison),用于多服务器配置时。DBBL与BBL协同,保证所有部分的公告牌内容的一致性。,配置文件,任何TUXEDO应用系统的最基本的管理任务,是建立并维护配置文件。该文件通常称为ubbconfig文件。负责该工作的系统管理员必须很好的了解分布于各台机器上的应用服务的数据
28、流,消息队列的构造,资源间的相互关系。ubbconfig文件可视作包含应用启动信息的容器,需编译成二进制文件tuxconfig,作为启动时的参考。 其内信息包括: 系统范围信息(*RESOURCES节) 机器信息(*MACHINES节) 组信息(*GROUPS节) 服务信息(*SERVERS节) 交易信息(*SERVICES节) 网络组信息(*NETGROUPS节) 网络信息(*NETWORK节) 路由原则信息(*ROUTING节) 当完成了ubbconfig文件后,用tmloadcf命令生成tuxconfig,应用的信息,*RESOURCES节包含整个应用范围的信息。本节必须在配置文件第一节
29、,不可缺少。信息说明如下: 参数意义 *RESOURCES*RESOURCES节 IPCKEY共享内存id UIDTUXEDO管理员用户id GIDTUXEDO管理员用户组id PERMTUXEDO管理员组用户的权限 MAXACCESSERS服务端和客户端的最大进程数 MAXSERVERS限制可以启动服务总数 MAXSERVICES限制可以发布交易总数 MASTER指出主控节点的逻辑名 MODEL应用构架,MP表示多机 OPTIONSLAN,MIGRATE表示是一个网络应用,服务可以移植到替代处理器上,应用的信息(续),参数意义 SECURITY安全级别(5个) AUTHSVC客户端可以通过交
30、易“AUTHSVC”获得认证 NOTIFYDIPIN,客户端通过dip-in收到广播通知 SYSTEM_ACCESSPROTECTED,NO_OVERRIDE,应用代码不得干扰共享内存 LDBAL设Y则进行负载平衡 SCANUNIT内部时间间隔单位,单位是秒 SANITYSCAN检索公告牌的内部时间间隔,单位是SCANUNIT BLOCKTIME交易超时时间,单位是SCANUNIT BBLQUERYDBBL查询所有BBL的时间间隔 DBBLWAITDBBL等待BBL回应的超时时间 MAXCONV同时最大会话数,服务器信息,*MACHINES节包含应用有关的每个服务器的信息。本节必须在*RESO
31、URCES节后列出。 参数意义 *MACHINESMACHINES节 samples服务器名,可以通过”uname n” 得到 TUXDIRTUXEDO系统软件安装位置 APPDIR应用服务位置全路径 TUXCONFIGTUXEDO配置文件全路径 ENVFILE环境文件全路径 ULOGPFX应用日志文件全路径 MAXACCESSERS本机最多处理器数,可以超越*RESOURCES节定义 MAXCONV本机最大会话数,可以超越*RESOURCES节定义,组定义,*GROUP节包含服务组的定义。一台服务器至少要定义一个服务组。 每个组只要定义组名,映射组名的组号和逻辑机器名。组为分布式交易系统和数
32、据依赖路由等灵活性措施提供了支持。 参数意义 *GROUPSGROUP节 GRPNAME组的唯一标识符,可以是字母数字 GRPNO组的唯一数字标识符 LMID组所在的机器,服务定义,*SERVERS节包含的是服务进程的信息。本节中每一个入口代表一个应用启动时加载的服务。这些信息包含服务名,命令行参数,服务环境,重启动等等。由于每个服务功能各不相同,其配置参数也因此相同或相异。 参数意义 *SERVERSSERVER节,列出所有服务程序 DEFAULT本处列出的参数为其下列出的服务的缺省值,但可以被单列条目替代相应值 RESTART如果设成Y,则服务可以重启动 MAXGEN在GRACE定义时间之
33、内,服务可以重启动MAXGEN次 GRACE周期,单位是秒 SRVGRP服务属于一个在*GROUPS节中定义的服务组;如果需要移植服务,也可以定义在多个组中。 SRVID服务组中代表服务的唯一值 MIN最少在启动时启动的服务数 MAX运行时,最多可以起的实例数,服务定义(续),参数意义 CLOPT跟随服务启动的其他参数 -A 服务内建交易全发布 r指定服务记录时间戳,用于以后计算交易处理时间 -e 定义标准错误重定向文件 -o 定义标准输出重定向文件 -TUXEDO参数和服务特定参数的分隔符 SYSTEM_ACCESS设定后,应用错误不干扰公告牌 RQADDR当设定此项后,所有本服务的实例都使
34、用相同的请求队列。这是在应用中设置 MSSQ(Multiple Server Single Queue)的方便办法,可以改善处理流量。任何时候,所有MSSQ集中的实例发布相同的交易集。 REPLYQ设成Y,则服务又作为一个MSSQ集配置,任何其中的交易调用其他交易,就建立一个单独的回应队列。,交易定义,*SERVICES节提供了应用的特殊交易的信息。包括负载平衡(LOAD)和数据缓冲类型检查(BUFTYPE)。如果全部都是缺省值则本节可以省略。 参数意义 *SERVICES交易节 #注释行符号 大写字母交易名,由应用服务提供 BUFTYPE任何向该交易的请求,数据应该是此处定义类型 GROUP交易所在服务所在的组 LOAD负载因子,表示处理请求的时间,用于计算负载平衡 PRIO优先级,生成TUXCONFIG文件,UBBCONFIG文件是一个可以编辑成需要的应用配置的文本文件。但是,在实际应用上读取的是二进制TUXCONFIG文件用于操作。命令tmloa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 爆破器材运输工安全技术交底
- java软件工程师笔试题及答案
- 小学三年级英语教学设计:Unit 6 Numbers in life Part B Let's talk and let's learn
- 卫生法规试题及答案
- 小学科学五年级上册《轮轴的秘密》教学设计
- 统编版初中语文七年级上册第1课《春》教学设计:基于整本书阅读导入的文本重构与审美体验
- 小学三年级心理健康教育《兴趣是学习的动力》教学设计
- 小学四年级德育与法治教案 恶作剧的代价与责任担当
- 帕金森护理查房(含病例分析)
- 2026年(狂犬病暴露预防处置)预防接种培训试题(附答案)
- 2026淹溺事故生产安全专项应急预案
- 2026年宝洁(中国)秋招试题及答案
- 2026年青年教师赛课指导课件(专题深化版)
- 小学道德与法治新部编版五年级上册全册教案(2026秋)
- 应用化工专业毕业论文
- 2026中稀(保定)稀土新材料有限公司招聘1人笔试历年参考题库附带答案详解
- 2026秋外研版九年级上册英语单词表
- 《传感器与检测技术》课件 第三章 电阻式传感器
- 认识有理数(第1课时有理数)课件2026-2027学年北师大版数学七年级上册
- 国企党务工作者(党建岗)面试题和专题题20问及答案
- 财务管理实务操作案例分析与解答
评论
0/150
提交评论