版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、山东大学计算机科学与技术学院基础技术教学部第六章第六章 编写客户端程序编写客户端程序山东大学计算机科学与技术学院第六章第六章 编写客户端程序编写客户端程序根本知识根本知识DIIDSI接口库接口库上下文上下文山东大学计算机科学与技术学院基础技术教学部根本知识根本知识山东大学计算机科学与技术学院恳求恳求恳求:是一个恳求:是一个CORBA伪对象,与一个恳求对象相关伪对象,与一个恳求对象相关联的信息包括目的对象援用,操作名字,联的信息包括目的对象援用,操作名字,0或多个参或多个参数,可选的上下文,以及用于存放前往结果或异常数,可选的上下文,以及用于存放前往结果或异常信息的环境信息的环境封装一个恳求有两
2、种格式封装一个恳求有两种格式静态:恳求对象由静态:恳求对象由IDL桩隐式发送桩隐式发送动态:显式创建一个恳求对象,选择一种通讯方式动态:显式创建一个恳求对象,选择一种通讯方式发送并获取呼应结果,由接口发送并获取呼应结果,由接口Request描画描画山东大学计算机科学与技术学院Request接口接口定义了对一个定义了对一个CORBA对象的某一操作的一次调用恳对象的某一操作的一次调用恳求求调用一个操作之前必需首先获取目的对象援用调用一个操作之前必需首先获取目的对象援用见见P140山东大学计算机科学与技术学院调用类型调用类型静态调用:客户程序在编译前就知道静态调用:客户程序在编译前就知道IDL接口信
3、息接口信息动态调用:动态调用:编写客户程序时髦未确定编写客户程序时髦未确定IDL接口类型接口类型运转时利用接口库效力提供的信息创建一个恳求对运转时利用接口库效力提供的信息创建一个恳求对象象大部分义务是建立恳求对象,而不是调用过程本身大部分义务是建立恳求对象,而不是调用过程本身山东大学计算机科学与技术学院选择调用类型选择调用类型简单性简单性DII需由程序员手工完成需由程序员手工完成IDL桩所完成的义务桩所完成的义务灵敏性灵敏性调用性能调用性能通讯方式通讯方式SII支持同步,单向支持同步,单向DII支持三种:同步,单向,延迟同步支持三种:同步,单向,延迟同步小结:能用小结:能用SII那么用那么用S
4、II山东大学计算机科学与技术学院编写客户程序编写客户程序静态静态public class Client public static void main(String args) org.omg.CORBA.ORB orb=org.omg.CORBA.ORB.init(args, null); / 利用利用POA全称与对象标识全称与对象标识BankManager查找帐户管理员查找帐户管理员 Bank.AccountManager manager = Bank.AccountManagerHelper.bind( orb, /BankPOA, BankManager.getBytes(); Str
5、ing name = args.length 0 ? args0 : David Zeng; / 恳求帐户管理员找出一个指定名字的帐户,无此帐户那么新开一个恳求帐户管理员找出一个指定名字的帐户,无此帐户那么新开一个 Bank.Account account = manager.open(name); System.out.println(name + “的帐户余额为的帐户余额为 + account.getBalance() + 元元); account.deposit(200); System.out.println(“存款存款200元后,余额为元后,余额为 + account.getBala
6、nce() + “元元); if (account.withdraw(600) System.out.println(“取款取款600元后,余额为元后,余额为 + account.getBalance() + 元元); else System.out.println(余额缺乏余额缺乏600元,取款失败,余额坚持不变元,取款失败,余额坚持不变); 客户程序Client.java初始化初始化ORB绑定到效力对象绑定到效力对象调用效力对象提供的效力调用效力对象提供的效力山东大学计算机科学与技术学院public class Client() public static void main(String
7、 args) org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); org.omg.CORBA.Object manager = (com.inprise.vbroker.orb.ORB) orb).bind(“BankPOA,BankManager.getBytes(),null,null); org.omg.CORBA.Request requestOpen = manager._request(“open); String name = args.length0?args0:David;. requestOpen.add_i
8、n_arg().insert_string(name); requestOpen.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_objeref); requsetOpen.invoke(); org.omg.CORBA.Object account = requestOpen.result().value().extract_Object(); org.omg.CORBA.Request requestBalance = account._request(“getBalance); requestBalance.set
9、_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_float); requestBalance.invoke(); float bal=requestBalance.resutl().value().extract_float(); System.out.println(“帐户帐户+name+的余额为的余额为+bal); 初始化org获取帐户管理员的通用对象援用创建一个调用manager的open()操作的恳求对象设置恳求的实践参数设置恳求的前往结果的类型以同步通讯方式发送恳求提取前往结果继续以DII方式调用account的ge
10、tBalance()方法编写客户程序编写客户程序动态动态山东大学计算机科学与技术学院基础技术教学部2 动态调用机制动态调用机制山东大学计算机科学与技术学院动态调用机制动态调用机制根本接口根本接口动态调用过程动态调用过程编程编程山东大学计算机科学与技术学院基础技术教学部根本接口根本接口山东大学计算机科学与技术学院动态调用接口动态调用接口CORBA:Object:定义每个:定义每个CORBA对象都必需支对象都必需支持的方法持的方法CORBA: ORB:定义客户端和效力端都能运用的操:定义客户端和效力端都能运用的操作,是内核实现的方法作,是内核实现的方法CORBA: Request:定义远程对象操作
11、:定义远程对象操作CORBA: List:用于构建参数列表,维护一个由构:用于构建参数列表,维护一个由构造类型造类型NameValue组成的数据项列表组成的数据项列表山东大学计算机科学与技术学院伪对象伪对象IDL对象类由对象类由IDL言语描画并需求向言语描画并需求向BOA和和ORB中中心登记和管理,而且心登记和管理,而且IDL对对 象类都承继基类象类都承继基类CORBAObject伪对象类虽然也可以由伪对象类虽然也可以由IDL言语描画,但是,它不言语描画,但是,它不需求向需求向 BOA和和ORB中心登记,也不需求承继中心登记,也不需求承继CORBAObject类。类。伪对象类包括伪对象类包括E
12、nvironment、NameVal ue、NVList、Request、ServerRequest、Context、Princial、TypeCode、BOA和和ORB。 山东大学计算机科学与技术学院CORBA:ORB见见P141Create_list:生成一个空的:生成一个空的NVlist对象对象Create_operation_list:生成:生成NVlist对象,利用客户对象,利用客户描画的操作参数自动进展填充,并将已赋值的描画的操作参数自动进展填充,并将已赋值的NVlist前往给客户前往给客户山东大学计算机科学与技术学院CORBA:Object对象援用对象援用创建一个恳求,在目的对象
13、上执行创建一个恳求,在目的对象上执行_request: 创建一个恳求对象后,可调用该恳求对象创建一个恳求对象后,可调用该恳求对象的的add_in_arg(),add_name_in_arg()等方法为调用操等方法为调用操作设置一个或多个实参作设置一个或多个实参_create_request:调用前必需先创建操作的实参:调用前必需先创建操作的实参山东大学计算机科学与技术学院CORBA:Request操作恳求操作恳求Add_arg:在恳求格式中添加参数:在恳求格式中添加参数Invoke:完成一个调用:完成一个调用/前往操作前往操作Send:根据恳求中的信息发起操作,不需等待操作:根据恳求中的信息发
14、起操作,不需等待操作结果就将控制前往给调用者结果就将控制前往给调用者Pull_reponse:检查恳求操作能否完成:检查恳求操作能否完成Get_reponse:回送执行恳求的结果信息:回送执行恳求的结果信息山东大学计算机科学与技术学院NVList参数与前往值参数与前往值用于构造参数列表的接口用于构造参数列表的接口Add_item:把一个新的参数加到指定的列表中:把一个新的参数加到指定的列表中Free_memory:山东大学计算机科学与技术学院基础技术教学部动态调用过程动态调用过程山东大学计算机科学与技术学院clienServer1 get_interface2 lookup_name3desc
15、ribe4 create_list5 add_item (1-n)6 create_request7 invoke8 delete9 freeInterfaceDefOperationDefCORBA:ORBCORBA:NvlistCORBA:ObjectORB:Request动态调用环境接口库环境山东大学计算机科学与技术学院一:查询接口定义信息1 客户调用目的对象中的get_interface操作。调用后,客户得到一个存放在接口库中的InterfaceDef对象,从而获得目的对象的接口描画信息山东大学计算机科学与技术学院二:寻觅操作的描画2 以InteraceDef对象作为接口库导航的入口点
16、,找出有关的接口对象以及它所支持的操作。经过调用InterfaceDef的lookup_name操作,得到OperationDef对象3 调用OperationDef对象中的describe(),获得需调用的操作的完好描画,即操作的全部IDL定义山东大学计算机科学与技术学院三. 预备参数列表4 调用ORB接口中用于动态调用的create_list方法,创建一个空闲的参数列表,即Nvlist对象5 调用Nvlist上的add_item(),将各个恳求参数逐一填入参数列表中山东大学计算机科学与技术学院四。创建恳求对象6 调用目的对象上的,从CORBA:Object接口承继的create_reque
17、st操作,构造一个恳求对象。在恳求中指出操作名,参数和前往结果参数山东大学计算机科学与技术学院五。调用已建立的恳求7 调用ORB:Request对象中的invoke操作,发起对恳求的调用六 善后8 执行ORB:Request对象的delete操作,释放恳求对象和相关的内存空间9 调用ORB:NVlist对象上free操作,释放列表构造的相关空间山东大学计算机科学与技术学院public class Client() public static void main(String args) org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,nu
18、ll); org.omg.CORBA.Object manager = (com.inprise.vbroker.orb.ORB) orb).bind(“BankPOA,BankManager.getBytes(),null,null); org.omg.CORBA.Request requestOpen = manager._request(“open); String name = args.length0?args0:David;. requestOpen.add_in_arg().insert_string(name); requestOpen.set_return_type(orb.
19、get_primitive_tc(org.omg.CORBA.TCKind.tk_objeref); requsetOpen.invoke(); org.omg.CORBA.Object account = requestOpen.result().value().extract_Object(); org.omg.CORBA.Request requestBalance = account._request(“getBalance); requestBalance.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_flo
20、at); requestBalance.invoke(); float bal=requestBalance.resutl().value().extract_float(); System.out.println(“帐户帐户+name+的余额为的余额为+bal); 初始化org获取帐户管理员的通用对象援用创建一个调用manager的open()操作的恳求对象设置恳求的实践参数设置恳求的前往结果的类型以同步通讯方式发送恳求提取前往结果继续以DII方式调用account的getBalance()方法实例实例山东大学计算机科学与技术学院基础技术教学部客户端客户端DII编程编程山东大学计算机科学与技
21、术学院实现规范实现规范客户可以运用客户可以运用DII对恣意多个接口的对象发起调用对恣意多个接口的对象发起调用对一个接口的一部分对象发起调用,另一部分用静对一个接口的一部分对象发起调用,另一部分用静态存根调用态存根调用可对一个接口的一个对象有时运用可对一个接口的一个对象有时运用DII,有时运用静,有时运用静态存根态存根用一组用一组API获得和解析一个调用,实现并前往结果获得和解析一个调用,实现并前往结果山东大学计算机科学与技术学院编写编写DII获取目的对象援用获取目的对象援用创建恳求对象创建恳求对象传送实践参数并指定前往类型传送实践参数并指定前往类型发送恳求并等待呼应发送恳求并等待呼应提取结果提
22、取结果山东大学计算机科学与技术学院步骤步骤向目的对象讯问描画目的对象接口信息的对象,并向目的对象讯问描画目的对象接口信息的对象,并将其放在接口库中将其放在接口库中从接口库的对象中,找到所要调用的操作的描画从接口库的对象中,找到所要调用的操作的描画建立调用参数表,并逐一填入参数建立调用参数表,并逐一填入参数创建恳求。恳求中包含目的对象的援用,方法名,创建恳求。恳求中包含目的对象的援用,方法名,参数表和前往值参数表和前往值调用恳求,并作善后处置调用恳求,并作善后处置山东大学计算机科学与技术学院1 获取目的对象援用获取目的对象援用由于编译客户程序时目的对象的接口类型通常尚未由于编译客户程序时目的对象
23、的接口类型通常尚未确定,因此没有可用协助类确定,因此没有可用协助类扩展两个扩展两个bind()方法方法public org.omg.CORBA.Object bind( String fullPoaName,/POA全名 byte objectId,/对象标识 String hostName,/对象所在主机名字 BindOptions options/绑定选项)public org.omg.CORBA.Object bind( String repositoryId,/接口库标识 String objectName,/对象名 String hostName,/对象所在主机名字 BindOpti
24、ons options/绑定选项)org.omg.CORBA.Object manager = (com.inprise.vbroker.orb.ORB) orb).bind(“BankPOA,BankManager.getBytes(),null,null);山东大学计算机科学与技术学院2 创建恳求对象创建恳求对象对目的对象援用的某一操作的一次调用对目的对象援用的某一操作的一次调用发起恳求时,恳求对象被打包经过发起恳求时,恳求对象被打包经过ORB发送到效力端发送到效力端运用运用SII时,该过程对程序员是透明的时,该过程对程序员是透明的运用运用DII,必需由程序员本人显式创建并发送恳求对象,必
25、需由程序员本人显式创建并发送恳求对象必需由程序员本人显式地创建并发送恳求对象,必需由程序员本人显式地创建并发送恳求对象,_request()/_create_requestorg.omg.CORBA.Request request = manager._request(“open);山东大学计算机科学与技术学院3 传送实参并指定前往类型传送实参并指定前往类型恳求对象中操作的实践参数表被表示为一个恳求对象中操作的实践参数表被表示为一个NVlist实例,是假设干实例,是假设干NamedValue对象的列表,每个对象的列表,每个NamedValue是一三元组是一三元组(名字,值,标志名字,值,标志)
26、山东大学计算机科学与技术学院4 发送恳求和提取结果发送恳求和提取结果invoke():阻塞,处置完前往:阻塞,处置完前往send_deferred():非阻塞:非阻塞Return_value()山东大学计算机科学与技术学院public class Client() public static void main(String args) org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); org.omg.CORBA.Object manager = (com.inprise.vbroker.orb.ORB) orb).bind(
27、“BankPOA,BankManager.getBytes(),null,null); org.omg.CORBA.Request requestOpen = manager._request(“open); String name = args.length0?args0:David;. requestOpen.add_in_arg().insert_string(name); requestOpen.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_objeref); requsetOpen.invoke(); org
28、.omg.CORBA.Object account = requestOpen.result().value().extract_Object(); org.omg.CORBA.Request requestBalance = account._request(“getBalance); requestBalance.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_float); requestBalance.invoke(); float bal=requestBalance.resutl().value().extr
29、act_float(); System.out.println(“帐户帐户+name+的余额为的余额为+bal); 初始化org获取帐户管理员的通用对象援用创建一个调用manager的open()操作的恳求对象设置恳求的实践参数设置恳求的前往结果的类型以同步通讯方式发送恳求提取前往结果继续以DII方式调用account的getBalance()方法2.4 实例实例山东大学计算机科学与技术学院_Accountstub.javaDII public boolean withdraw (float amount) org.omg.CORBA.Request _request = this._requ
30、est(withdraw); _request.set_return_type(_orb().get_primitive_tc(org.omg.CORBA.TCKind.tk_boolean); org.omg.CORBA.Any _param_amount = _request.add_in_arg(); _param_amount.insert_float(float)amount); _request.invoke(); java.lang.Exception _exception = _request.env().exception(); if (_exception != null)
31、 throw (org.omg.CORBA.SystemException) _exception; boolean _result; _result = _request.return_value().extract_boolean(); return _result; 山东大学计算机科学与技术学院_Accountstub.javaSII public boolean withdraw (float amount) while (true) if (!_is_local() org.omg.CORBA.portable.OutputStream _output = null; org.omg
32、.CORBA.portable.InputStream _input = null; boolean _result; try _output = this._request(withdraw, true); _output.write_float(float)amount); _input = this._invoke(_output); _result = _input.read_boolean(); return _result; catch (org.omg.CORBA.portable.ApplicationException _exception) final org.omg.CO
33、RBA.portable.InputStream in = _exception.getInputStream(); java.lang.String _exception_id = _exception.getId(); throw new org.omg.CORBA.UNKNOWN(Unexpected User Exception: + _exception_id); catch (org.omg.CORBA.portable.RemarshalException _exception) continue; finally this._releaseReply(_input); else
34、 final org.omg.CORBA.portable.ServantObject _so = _servant_preinvoke(withdraw, _opsClass); if (_so = null) continue; final Bank.AccountOperations _self = (Bank.AccountOperations)_so.servant; try return _self.withdraw(amount); 山东大学计算机科学与技术学院基础技术教学部DSI山东大学计算机科学与技术学院动态框架动态框架DSI允许允许server在运转时辰动态对恣意对象予以实
35、现在运转时辰动态对恣意对象予以实现可以实现恣意多个接口的对象可以实现恣意多个接口的对象可以实现一个接口中的一部分对象,另一部分由静可以实现一个接口中的一部分对象,另一部分由静态框架实现态框架实现不用承继由不用承继由IDL编译器生成的框架编译器生成的框架POA类,也类,也不用运用纽带机制间接运用不用运用纽带机制间接运用POA类类山东大学计算机科学与技术学院原理原理POAImplServerRequestServerRequestIR山东大学计算机科学与技术学院开发步骤开发步骤利用回调方法利用回调方法invoke()接纳从接纳从ORB转发来的一个转发来的一个ServerRequest类型的恳求对象
36、类型的恳求对象从恳求对象中提取实践参数向上调用真正执行效力从恳求对象中提取实践参数向上调用真正执行效力的伺服对象的方法的伺服对象的方法将结果或异常填入恳求对象中将结果或异常填入恳求对象中山东大学计算机科学与技术学院1 对象对象ServerRequestClass ServerRequest public:const char * operation() const;void argument(NVList_prt& parmaters);Context_ptr ctx();void set_result(const Any& value);void set_exceptionc
37、onst Any& value;;作用:实现动态框架功能山东大学计算机科学与技术学院arguments(inout NVlist nv): 得到输入型参数的值。得到输入型参数的值。预备:按照对应操作的预备:按照对应操作的IDL定义为定义为NVlist进展初始赋值,包括设置每个元进展初始赋值,包括设置每个元素的类型码和标志素的类型码和标志flags,输入输出类型,输入输出类型执行后,执行后,NVlist得到输入型参数值得到输入型参数值完胜利能后,在完胜利能后,在NVList中设置前往的值中设置前往的值set_result():设置前往结果的值:设置前往结果的值set_exception(
38、): 抛出异常抛出异常山东大学计算机科学与技术学院2 恳务虚现恳务虚现DSI方式下,对象的恳求交给动态实现例程方式下,对象的恳求交给动态实现例程DIR(Dynamic Implementation Routine)完成:接纳恳求,获得恳求的操作信息,动态决议如何实现对完成:接纳恳求,获得恳求的操作信息,动态决议如何实现对象,最后前往结果象,最后前往结果DIR: 不是某一特定接口的实现对象不是某一特定接口的实现对象经过对象适配器获得一个恳求,并进一步获得该恳求的操作信经过对象适配器获得一个恳求,并进一步获得该恳求的操作信息息动态决议如何实现该对象动态决议如何实现该对象经过对象适配器前往输出结果经
39、过对象适配器前往输出结果需求实现需求实现DIR的例程要由特定对象实现实现的例程要由特定对象实现实现DynamicImplementation接口接口Interface DynamicImplementationvoid invoke();山东大学计算机科学与技术学院import org.omg.CORBA.*;import org.omg.PortableServer.*;public class BankImpl extends org.omg.PortableServer.DynamicImplementation / 属性的定义 protected java.util.Map accou
40、ntList;/ 一切账户的列表 protected ORB orb;/ 用于创建恳求对象的ORB伪对象 protected POA poa;/ 用于创建新对象援用的POApublic BankImpl(ORB orb, POA poa) accountList = new java.util.HashMap(); this.orb = orb; this.poa = poa; / ORB回调方法,是每一个采用DSI的对象实现都必需实现的方法需求实现该接口构造方法,管理员开场时管理的账户清单为空3 程序实例程序实例山东大学计算机科学与技术学院 public void invoke(Server
41、Request request) / 根据当前对象援用取对象标识对Account而言,对象标识就是账户名字 String objectId = new String(_object_id(); System.out.println(objectId + executing + request.operation() + () .); / 根据恳求对象中的操作名字分别处置 if (request.operation().equals(open) / 开设账户操作 try org.omg.CORBA.NVList paramList = orb.create_list(0); org.omg.CO
42、RBA.Any param = orb.create_any(); param.insert_string(); paramList.add_value(name, param, org.omg.CORBA.ARG_IN.value); request.arguments(paramList); String name = paramList.item(0).value().extract_string(); / 执行开户操作,在账户清单中查找或开设指定名字的账户 if (accountList.get(name) = null) java.util.Random random = new j
43、ava.util.Random(); float balance = Math.abs(random.nextInt() % 100000 / 100f; accountList.put(name, new Float(balance); System.out.println(新开账户: + name); org.omg.CORBA.Object account = poa.create_reference_with_id( name.getBytes(), IDL:Bank/Account:1.0); org.omg.CORBA.Any result = orb.create_any();
44、result.insert_Object(account); request.set_result(result); catch(Exception exc) exc.printStackTrace(); 从恳求对象中获取实践参数往恳求对象中填写前往结果创建一any型,并填入“ 山东大学计算机科学与技术学院 else if (request.operation().equals(deposit) / 存款操作 try / 根据对象标识取账户余额 Float balance = (Float) accountList.get(objectId); if (balance = null) thro
45、w new org.omg.CORBA.BAD_PARAM(); / 从恳求对象中获取参数 org.omg.CORBA.NVList paramList = orb.create_list(0); org.omg.CORBA.Any param = orb.create_any(); param.insert_float(0); paramList.add_value(amount, param, org.omg.CORBA.ARG_IN.value); request.arguments(paramList); float amount = paramList.item(0).value()
46、.extract_float(); / 执行存款操作 accountList.remove(objectId); accountList.put(objectId, new Float(balance.floatValue() + amount); / 该操作没有前往结果 catch(Exception exc) exc.printStackTrace(); 山东大学计算机科学与技术学院 else if (request.operation().equals(withdraw) / 取款操作 try / 根据对象标识取账户余额 Float balance = (Float) accountLi
47、st.get(objectId); if (balance = null) throw new org.omg.CORBA.BAD_PARAM(); / 从恳求对象中获取参数 org.omg.CORBA.NVList paramList = orb.create_list(0); org.omg.CORBA.Any param = orb.create_any(); param.insert_float(0); paramList.add_value(amount, param, org.omg.CORBA.ARG_IN.value); request.arguments(paramList); float amount = paramList.item(0).value().extract_float(); / 执行取款操作并填写恳求对象中的前往结果 org.omg.CORBA.Any result = orb.create_any(); if (balance.floatValue() amount) result.insert_boolean(false)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拆架子施工方案(3篇)
- 2026年东营市利津县事业单位公开招聘工作人员(31人)参考考试题库及答案解析
- 2026年甘肃省陇南市西和县汉源镇幼儿园公益性岗位招聘考试备考试题及答案解析
- 中职急救护理学生管理
- 2026西藏山南加查县文旅局公益性岗位招聘1人考试备考题库及答案解析
- 2026黑龙江哈尔滨工业大学电气工程及自动化学院储能与电力变换研究所招聘笔试备考试题及答案解析
- 2026广东省水利水电第三工程局有限公司校园招聘备考考试题库及答案解析
- 2026广东佛山市南海区人民医院后勤岗位招聘1人(神经内科文员)备考考试试题及答案解析
- 迪士尼乐园闯关问答
- 2026年山东工程职业技术大学高层次人才招聘备考考试试题及答案解析
- 统编版语文一年级上册无纸化考评-趣味乐考 玩转语文 课件
- 高压氧进修课件
- 2025年第三类医疗器械经营企业质量管理自查报告
- 2025无人机物流配送网络建设与运营效率提升研究报告
- 事业单位市场监督管理局面试真题及答案
- 人工智能伦理规范
- 校园禁毒管理办法
- 饲料供应循环管理办法
- 保险公司安责险
- 水泥稳定碎石配合比验证
- 尿路感染教学查房
评论
0/150
提交评论