版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
蘇州大學Android【韓冬】期末復習蘇州大學Android【韓冬】期末復習蘇州大學Android【韓冬】期末復習xxx公司蘇州大學Android【韓冬】期末復習文件編號:文件日期:修訂次數(shù):第1.0次更改批準審核制定方案設(shè)計,管理制度《Android應用開發(fā)》復習題:Android的體系結(jié)構(gòu)是怎樣的?請簡要加以說明。
Android的系統(tǒng)架構(gòu)采用了分層架構(gòu)的思想。從上層到底層共包括四層:應用層、應用框架層、系統(tǒng)運行庫層、Linux內(nèi)核層。Android程序結(jié)構(gòu)是怎樣的?請簡要加以分析。
src目錄:java源代碼gen目錄:BuildConfig.java、R.javares目錄:res目錄是資源目錄,可以存放應用使用到的各種資源,如XML界面文件、圖片、數(shù)據(jù)等。assets目錄:assets資源目錄一般可用于存放html文件、數(shù)據(jù)庫文件、javascript文件等,還有原始格式的文件.AndroidManifest.xml:列出了應用程序提供的功能,開發(fā)好的各種組件需要在此文件中進行配置,當應用使用到系統(tǒng)內(nèi)置的應用還需在此文件中聲明使用權(quán)限Handler消息傳遞機制是怎樣的?試以“計時器”的編程舉例加以說明。
首先需要在主線程當中創(chuàng)建一個Handler對象,并重寫handleMessage()方法。然后當子線程中需要進行UI操作時,就創(chuàng)建一個Message對象,并通過Handler將這條消息發(fā)送出去。之后這條消息會被添加到MessageQueue的隊列中等待被處理,而Looper則會一直嘗試從MessageQueue中取出待處理消息,最后分發(fā)回Handler的handleMessage()方法中。由于Handler是在主線程中創(chuàng)建的,所以此時handleMessage()方法中的代碼也會在主線程中運行,于是我們在這里就可以安心地進行UI操作了。一條Message經(jīng)過這樣一個流程的輾轉(zhuǎn)調(diào)用后,也就從子線程進入到了主線程,從不能更新UI變成了可以更新UI,整個異步消息處理的核心思想也就是如此。什么是進程內(nèi)服務?請編程加以說明。在同一個進程下調(diào)用的服務,(通常情況下)即在一個應用程序下的服務。Service的啟動有兩種方式:context.startService()和context.bindService()。新建一個MyService繼承自Service,并重寫父類的onCreate()、onStartCommand()和onDestroy()方法。Service與activity通訊:context.bindService()我們首先創(chuàng)建了一個ServiceConnection的匿名類,在里面重寫了onServiceConnected()方法和onServiceDisconnected()方法,這兩個方法分別會在Activity與Service建立關(guān)聯(lián)和解除關(guān)聯(lián)的時候調(diào)用。bindService()方法接收三個參數(shù),第一個參數(shù)就是剛剛構(gòu)建出的Intent對象,第二個參數(shù)是前面創(chuàng)建出的ServiceConnection的實例,第三個參數(shù)是一個標志位,這里傳入BIND_AUTO_CREATE表示在Activity和Service建立關(guān)聯(lián)后自動創(chuàng)建Service,這會使得MyService中的onCreate()方法得到執(zhí)行,但onStartCommand()方法不會執(zhí)行。然后如何我們想解除Activity和Service之間的關(guān)聯(lián)怎么辦呢?調(diào)用一下unbindService()方法就可以了,這也是UnbindService按鈕的點擊事件里實現(xiàn)的邏輯。
什么是跨進程服務?請編程加以說明。通過一個應用程序(客戶端)的Activity調(diào)用另一個應用程序(服務端)的Service為跨進程服務。由于每個應用程序都運行在自己的進程空間,并且可以從應用程序UI運行另一個服務進程,而且經(jīng)常會在不同的進程間傳遞對象。在Android平臺,一個進程通常不能訪問另一個進程的內(nèi)存空間,所以要想對話,需要將對象分解成操作系統(tǒng)可以理解的基本單元,并且有序的通過進程邊界。Android提供了AIDL工具來處理這項工作。在Android中,如果需要在不同進程間實現(xiàn)通信,就需要用到AIDL技術(shù)去完成。AIDL是一種接口定義語言,編譯器通過*.aidl文件的描述信息生成符合通信協(xié)議的Java代碼,無需自己去寫這段繁雜的代碼,只需要在需要的時候調(diào)用即可,通過這種方式我們就可以完成進程間的通信工作。在Android中,每個應用程序都有自己的進程,當需要在不同的進程之間傳遞對象時,該如何實現(xiàn)呢顯然,Java中是不支持跨進程內(nèi)存共享的。因此要傳遞對象,需要把對象解析成操作系統(tǒng)能夠理解的數(shù)據(jù)格式,以達到跨界對象訪問的目的。我們只是修改了ServiceConnection中的代碼??梢钥吹剑@里首先使用了MyAIDLService.Stub.asInterface()方法將傳入的IBinder對象傳換成了MyAIDLService對象,接下來就可以調(diào)用在MyAIDLService.aidl文件中定義的所有接口了。ClientTest中的Activity如果想要和MyService建立關(guān)聯(lián)其實也不難,首先需要將MyAIDLService.aidl文件從ServiceTest項目中拷貝過來,注意要將原有的包路徑一起拷貝過來,完成后項目的結(jié)構(gòu)如下圖所示:這里先是對MyAIDLService.Stub進行了實現(xiàn),重寫里了toUpperCase()和plus()這兩個方法。這兩個方法的作用分別是將一個字符串全部轉(zhuǎn)換成大寫格式,以及將兩個傳入的整數(shù)進行相加。然后在onBind()方法中將MyAIDLService.Stub的實現(xiàn)返回。這里為什么可以這樣寫呢?因為Stub其實就是Binder的子類,所以在onBind()方法中可以直接返回Stub的實現(xiàn)。我們實現(xiàn)了IPerson.Stub這個抽象類的hello方法,然后再onBind(Intent)方法中返回我們的stub實例,這樣一來調(diào)用方獲取的IPerson.Stub就是我們的這個實例,hello方法也會按照我們的期望那樣執(zhí)行。我們要重寫ServiceConnection中的onServiceConnected方法將IBinder類型的對象轉(zhuǎn)換成我們的IPerson類型。我們再通過服務端Service定義的“ent.action.AIDLService”這個標識符來綁定我們所需要的服務,這樣客戶端和服務端就實現(xiàn)了通信的連接,我們就可以調(diào)用IPerson中的hello方法了。使用了MyAIDLService.Stub.asInterface()方法將傳入的IBinder對象傳換成了MyAIDLService對象,接下來就可以調(diào)用在MyAIDLService.aidl文件中定義的所有接口了。IPerson接口中的抽象內(nèi)部類Stub繼承android.os.Binder類并實現(xiàn)IPerson接口,其中比較重要的方法是asInterface(IBinder)方法,該方法會將IBinder類型的對象轉(zhuǎn)換成IPerson類型,必要的時候生成一個代理對象返回結(jié)果。如何發(fā)送廣播?請編程加以說明。因此新建一個MyBroadcastReceiver繼承自BroadcastReceiver,代碼如下所示:
publicclassMyBroadcastReceiverextendsBroadcastReceiver{
@Override
publicvoidonReceive(Contextcontext,Intentintent){
Toast.makeText(context,"receivedinMyBroadcastReceiver",
Toast.LENGTH_SHORT).show();
}
}然后在AndroidManifest.xml中對這個廣播接收器進行注冊然后修改MainActivity中的代碼,如下所示:publicclassMainActivityextendsActivity{ …… @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Buttonbutton=(Button)findViewById(R.id.button); button.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Intentintent=newIntent("com.example.broadcasttest. MY_BROADCAST"); sendBroadcast(intent); } }); …… } ……}可以看到,我們在按鈕的點擊事件里面加入了發(fā)送自定義廣播的邏輯。首先構(gòu)建出了一個Intent對象,并把要發(fā)送的廣播的值傳入,然后調(diào)用了Context的sendBroadcast()方法將廣播發(fā)送出去,這樣所有監(jiān)聽com.example.broadcasttest.MY_BROADCAST這條廣播的廣播接收器就會收到消息。此時發(fā)出去的廣播就是一條標準廣播。如何接收系統(tǒng)廣播消息?請編程加以說明。其實只需要新建一個類,讓它繼承自BroadcastReceiver,并重寫父類的onReceive()方法就行了。這樣當有廣播到來時,onReceive()方法就會得到執(zhí)行,具體的邏輯就可以在這個方法中處理。registerReceiver(BroadcastReceiver,intentFilter);--oncreate()unregisterReceiver(BroadcastReceiver);--ondestroy()什么是觀察者模式觀察者模式的使用場景是怎樣的觀察者模式的優(yōu)缺點是什么試編程加以說明。定義:定義對象間一對多的依賴關(guān)系,使得每當一個對象改變狀態(tài),則所有依賴于它的對象都會得到通知并被自動更新使用場景:關(guān)聯(lián)行為場景。注意的是,關(guān)聯(lián)行為是可拆分的,而不是組合關(guān)系。事件多級觸發(fā)場景跨系統(tǒng)的消息交換場景,如消息隊列的處理機制優(yōu)點:觀察者和被觀察這之間是抽象耦合的建立一套觸發(fā)機制缺點:需要考慮下開發(fā)效率和運行效率什么是裝飾模式裝飾模式的使用場景是怎樣的裝飾模式的優(yōu)缺點是什么試編程加以說明。裝飾模式就是給一個對象增加一些新的功能,而且是動態(tài)的,要求裝飾對象和被裝飾對象實現(xiàn)同一個接口,裝飾對象持有被裝飾對象的實例。裝飾器模式的應用場景:(1)需要擴展一個類的功能。(2)動態(tài)的為一個對象增加功能,而且還能動態(tài)撤銷。(繼承不能做到這一點,繼承的功能是靜態(tài)的,不能動態(tài)增刪。)缺點:產(chǎn)生過多相似的對象,不易排錯。優(yōu)點:裝飾類和被裝飾類可以獨立發(fā)展,而不會互相耦合裝飾模式是繼承關(guān)系的一個替代方案裝飾模式可以動態(tài)地擴展為一個實現(xiàn)類的功能Executor、ExecutorService和Executors的區(qū)別是什么?
Executor是一個簡單的標準化接口,用于定義類似于線程的自定義子系統(tǒng),包括線程池、異步IO和輕量級任務框架。根據(jù)所使用的具體Executor類的不同,可能在新創(chuàng)建的線程中,現(xiàn)有的任務執(zhí)行線程中,或者調(diào)用execute()的線程中執(zhí)行任務,并且可能順序或并發(fā)執(zhí)行。ExecutorService提供了多個完整的異步任務執(zhí)行框架。ExecutorService管理任務的排隊和安排,并允許受控制的關(guān)閉。Executors類提供大多數(shù)Executor的常見類型和配置的工廠方法,以及使用它們的幾種實用工具方法Java里面線程池的頂級接口是Executor,但是嚴格意義上講Executor并不是一個線程池,而只是一個執(zhí)行線程的工具。真正的線程池接口是ExecutorService。ExecutorService繼承Executor。Executors類為創(chuàng)建ExecutorService提供了便捷的工廠方法。為什么說Executors類為創(chuàng)建ExecutorService提供了便捷的工廠方法?
要配置一個線程池是比較復雜的,尤其是對于線程池的原理不是很清楚的情況下,很有可能配置的線程池不是較優(yōu)的,因此在Executors類里面提供了一些靜態(tài)工廠,生成一些常用的線程池。
(1)newCachedThreadPool:創(chuàng)建一個可緩存的線程池。如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑(60秒不執(zhí)行任務)的線程,當任務數(shù)增加時,此線程池又可以智能地添加新線程來處理任務。此線程池不會對線程池大小做限制,線程池大小完全依賴于操作系統(tǒng)(或者說JVM)能夠創(chuàng)建的最大線程大小。
(2)newFixedThreadPool:創(chuàng)建固定大小的線程池。每次提交一個任務就創(chuàng)建一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,如果某個線程因為執(zhí)行異常而結(jié)束,那么線程池會補充一個新線程。
(3)newSingleThreadExecutor:創(chuàng)建一個單線程的線程池。這個線程池只有一個線程在工作,也就是相當于單線程串行執(zhí)行所有任務。如果這個唯一的線程因為異常結(jié)束,那么會有一個新的線程來替代它。此線程池保證所有任務的執(zhí)行順序按照任務的提交順序執(zhí)行。
(4)newScheduledThreadPool:創(chuàng)建一個定長線程池,此線程池支持定時以及周期性執(zhí)行任務的需求。MyBatis與JDDC相比的優(yōu)勢是什么?
數(shù)據(jù)庫連接不再過于頻繁。SQL語句比較集中SQL語句參數(shù)比較靈活支持結(jié)果映射和結(jié)果緩存。SQL重用度提高。相對安全將MyBatis引入到項目中都有哪些步驟?
(1)引入MyBatis的JAR包;(2)配置MyBatis的XML配置文件;(3)編寫映射接口和SQL映射XML文件;(4)在應用中使用接口,獲得結(jié)果。Fragment的生命周期是什么?試編程加以說明。
(1)當一個Fragment被創(chuàng)建的時候,它會經(jīng)歷以下狀態(tài):onAttach()→onCreate()→onCreateView()→onActivityCreated()。(2)當這個Fragment對用戶可見的時候,它會經(jīng)歷以下狀態(tài):onStart()→onResume()。(3)當這個Fragment進入后臺的時候,它會經(jīng)歷以下狀態(tài):onPause()→onStop()。(4)當這個Fragment被銷毀了(或者持有它的Activity被銷毀了),它會經(jīng)歷以下狀態(tài):onPause()→onStop()→onDestroyView()→onDestroy()→onDetach()。(5)一旦Activity進入Resumed狀態(tài)(也就是Running狀態(tài)),你就可以自由地添加和刪除Fragment了。因此,只有當Activity在Resumed狀態(tài)時,F(xiàn)ragment的生命周期才能獨立地運轉(zhuǎn),其它時候是依賴于Activity的生命周期變化的。如何把Fragment加入到Activity中?試編程加以說明。
當Fragment被加入Activity中時,它會處在對應的ViewGroup中。加載方式①:通過Activity的布局文件將Fragment加入Activity加載方式②:通過編程的方式將Fragment加入到一個ViewGroup中。如何安裝配置Maven請簡要加以說明。
安裝JDK下載Maven配置環(huán)境變量給Maven添加本地倉庫配置用戶范圍settings.xml錯誤處理設(shè)置MAVEN_OPTS環(huán)境變量何為Maven坐標?何為Maven倉庫?如何編寫POM坐標:maven的坐標通過5個元素進行定義,其中g(shù)roupId、artifactId、version是必須的,packaging是可選的(默認為jar),classifier是不能直接定義的。groupId:定義當前Maven項目所屬的實際項目,跟Java包名類似,通常與域名反向一一對應。artifactId:定義當前Maven項目的一個模塊,默認情況下,Maven生成的構(gòu)件,其文件名會以artifactId開頭,如hibernate-core-3.6.5.Final.jar。version:定義項目版本。packaging:定義項目打包方式,如jar,war,pom,zip,……,默認為jar。classifier:定義項目的附屬構(gòu)件,如hibernate-core-3.6.6.Final-sources.jar,hibernate-core-3.6.6.Final-javadoc.jar,其中sources和javadoc就是這兩個附屬構(gòu)件的classifier。classifier不能直接定義,通常由附加的插件幫助生成。倉庫:在Maven的術(shù)語中,倉庫是一個位置(place),例如目錄,可以存儲所有的工程jar文件、libraryjar文件、插件或任何其他的工程指定的文件。Maven倉庫有三種類型:本地(local)中央(central)遠程(remote)Maven倉庫就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven項目可以從同一個Maven倉庫中獲取自己所需要的依賴JAR,這節(jié)省了磁盤資源。編寫POM/qileilove/articles/410638.html就像Make的Makefile、Ant的build.xml一樣,Maven項目的核心是pom.xml。POM(ProjectObjectModel,項目對象模型)定義了項目的基本信息,用于描述項目如何構(gòu)建,聲明項目依賴,等等?,F(xiàn)在先為HelloWorld項目編寫一個最簡單的pom.xml。首先創(chuàng)建一個名為helloworld的文件夾,打開該文件夾,新建一個名為pom.xml的文件,輸入其內(nèi)容,如代碼清單3-1所示。代碼清單3-1HelloWorld的POM<?xml
version="1.0"
encoding="UTF-8">
<project
xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchemainstance"
xsi:schemaLocation="/POM/4.0.0
/mavenv4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>helloworld</artifactId>
<version>1.0SNAPSHOT</version>
<name>Maven
Hello
World
Project</name>
</project>代碼的第一行是XML頭,指定了該xml文檔的版本和編碼方式。緊接著是project元素,project是所有pom.xml的根元素,它還聲明了一些POM相關(guān)的命名空間及xsd元素,雖然這些屬性不是必須的,但使用這些屬性能夠讓第三方工具(如IDE中的XML編輯器)幫助我們快速編輯POM。根元素下的第一個子元素modelVersion指定了當前POM模型的版本,對于Maven2及Maven3來說,它只能是4.0.0。這段代碼中最重要的是包含groupId、artifactId和version的三行。這三個元素定義了一個項目基本的坐標,在Maven的世界,任何的jar、pom或者war都是以基于這些基本的坐標進行區(qū)分的。groupId定義了項目屬于哪個組,這個組往往和項目所在的組織或公司存在關(guān)聯(lián)。譬如在googlecode上建立了一個名為myapp的項目,那么groupId就應該是com.googlecode.myapp,如果你的公司是mycom,有一個項目為myapp,那么groupId就應該是com.mycom.myapp。本書中所有的代碼都基于groupIdcom.juvenxu.mvnbook。artifactId定義了當前Maven項目在組中唯一的ID,我們?yōu)檫@個HelloWorld項目定義artifactId為helloworld,本書其他章節(jié)代碼會分配其他的artifactId。而在前面的groupId為com.googlecode.myapp的例子中,你可能會為不同的子項目(模塊)分配artifactId,如myapputil、myappdomain、myappweb等。顧名思義,version指定了HelloWorld項目當前的版本——1.0SNAPSHOT。SNAPSHOT意為快照,說明該項目還處于開發(fā)中,是不穩(wěn)定的版本。隨著項目的發(fā)展,version會不斷更新,如升級為1.0、1.1SNAPSHOT、1.1、2.0等。6.5節(jié)會詳細介紹SNAPSHOT,第13章會介紹如何使用Maven管理項目版本的升級發(fā)布。最后一個name元素聲明了一個對于用戶更為友好的項目名稱,雖然這不是必須的,但還是推薦為每個POM聲明name,以方便信息交流。沒有任何實際的Java代碼,我們就能夠定義一個Maven項目的POM,這體現(xiàn)了Maven的一大優(yōu)點,它能讓項目對象模型最大程度地與實際代碼相獨立,我們可以稱之為解耦,或者正交性。這在很大程度上避免了Java代碼和POM代碼的相互影響。比如當項目需要升級版本時,只需要修改POM,而不需要更改Java代碼;而在POM穩(wěn)定之后,日常的Java代碼開發(fā)工作基本不涉及POM的修改。參考書:《Android編程權(quán)威指南》FragmentManager是如何管理fragment并將它們的視圖添加到activity的視圖層級結(jié)構(gòu)中的?
P122-7.6android:layout_weight屬性的工作原理是什么?
Android:layout_weight屬性告知LinearLayout如何進行子組件的布置安排LinearLayout是分兩個步驟來設(shè)置視圖的寬度的第一步:LinearLayout查看layout_width屬性值第二步:LinearLayoout依據(jù)layout_weight屬性值進行額外的空間分配如何使用抽象activity托管fragment
P150如何使用fragmentargument試舉例說明。
P169在“《Android編程權(quán)威指南》-第12章對話框”中,CrimeFragment和DatePickerFragment由同一activity托管。CrimeFragment是如何傳遞數(shù)據(jù)給DatePickerFragment的?DatePickerFragment又是如何返回數(shù)據(jù)給CrimeFragment的?要傳遞crime記錄日期給DatePickerFragment,需將記錄日期保存在DatePickerFragment的argumentbundle中,這樣,DatePickerFragment便可直接獲取到它。eq\o\ac(○,)設(shè)置目標fragment建立關(guān)聯(lián),可以將CrimeFragment設(shè)置為DataPickerFragment的目標fragmentPublicvoidsetTargetFragment(Fragmentfragment,intrequestCode)eq\o\ac(○,)傳遞數(shù)據(jù)給目標fragment建立CrimeFragment與DataPickerFragment間的聯(lián)系之后,將數(shù)據(jù)返回給CrimeFragment。返回的日期數(shù)據(jù)將作為extra附加給Intent補充了解:androidinflater用法在實際開發(fā)中LayoutInflater這個類還是非常有用的,它的作用類似于findViewById()。不同點是LayoutInflater是用來找res/layout/下的xml布局文件,并且實例化;而findViewById()是找xml布局文件下的具體widget控件(如Button、TextView等)。具體作用:1、對于一個沒有被載入或者想要動態(tài)載入的界面,都需要使用LayoutInflater.inflate()來載入;2、對于一個已經(jīng)載入的界面,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。FragmentTransaction如果需要添加、刪除、替換Fragment,則需要借助FragmentTransaction對象,F(xiàn)ragmentTransaction代表Acticity對Fragment執(zhí)行的多個改變Handler“計時器”編程布局文件:<LinearLayoutxmlns:android="/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="6dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="時間:" android:layout_weight="4" android:textSize="20dp"/> <EditText android:id="@+id/txttime" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="00:00:00" android:textSize="20dp" android:layout_weight="1"/> </LinearLayout> <Button android:id="@+id/btnstart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="開始計時" android:layout_gravity="center_horizontal"/> <Button android:id="@+id/btnend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止計時" android:layout_gravity="center_horizontal"/></LinearLayout>功能實現(xiàn)Java程序中,定義了一個Runnable對象,重寫了其run()方法,該方法實現(xiàn)間隔1秒
向Handler對象發(fā)送一條消息,Handler對象接收都消息以后設(shè)置編輯框文本,顯示最新
計時。啟動應用程序后,點擊開始計時,設(shè)置該按鈕的單擊事件監(jiān)聽,單擊事件定義了一
個接收Runnable對象的Thread,借由該Thread的start()方法來啟動Runnable。點擊結(jié)束
計時,設(shè)置按鈕的單擊事件監(jiān)聽,來停止Runnable。具體實現(xiàn)代碼如下所示:publicclassMainActivityextendsActivity{TextViewtxt;Buttonbtnstart;Buttonbtnend;Dateoldtime;booleanisstop;Threadthread;Handlerhandler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){if(msg.what==0x123){SimpleDateFormatformat=newSimpleDateFormat("HH:mm:ss");txt.setText(format.format(oldtime));}elseif(msg.what==0x456){thread.stop();}}};Runnablerunnable=newRunnable(){@Overridepublicvoidrun(){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版合同中車庫的買賣稅費解析3篇
- 文具購銷合同3篇
- 新版廣告合同框架協(xié)議3篇
- 教育行業(yè)軟件開發(fā)人員合同樣本3篇
- 安徽教育行業(yè)教師勞動合同范本3篇
- 工程基礎(chǔ)建設(shè)合同模板3篇
- 提成協(xié)議范本3篇
- 攔水壩建設(shè)合同規(guī)定3篇
- 改進工作態(tài)度嚴于律己的保證書3篇
- 招標文件范本樣本模板3篇
- 表-柴油的理化性質(zhì)及危險特性
- 婦產(chǎn)科名詞解釋及簡答題
- 法律職業(yè)倫理考試題庫匯總含答案
- 了不起的狐貍爸爸精編版課件
- 品質(zhì)部年終總結(jié)報告
- 部編版八年級語文下冊《燈籠》評課稿
- 紅棉研學100題(訓練題)
- 論群團組織在助推企業(yè)發(fā)展的作用發(fā)揮
- 催化材料智慧樹知到答案章節(jié)測試2023年南開大學
- 牙隱裂牙隱裂
- 辦公樓裝飾裝修改造工程施工組織設(shè)計方案
評論
0/150
提交評論