版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2019Android高級面試題總結(jié)1.說下你所知道的設(shè)計模式與使用場景a.建造者模式:
將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
使用場景比如最常見的AlertDialog,拿我們開發(fā)過程中舉例,比如Camera開發(fā)過程中,可能需要設(shè)置一個初始化的相機配置,設(shè)置攝像頭方向,閃光燈開閉,成像質(zhì)量等等,這種場景下就可以使用建造者模式
裝飾者模式:動態(tài)的給一個對象添加一些額外的職責(zé),就增加功能來說,裝飾模式比生成子類更為靈活。裝飾者模式可以在不改變原有類結(jié)構(gòu)的情況下曾強類的功能,比如Java中的BufferedInputStream包裝FileInputStream,舉個開發(fā)中的例子,比如在我們現(xiàn)有網(wǎng)絡(luò)框架上需要增加新的功能,那么再包裝一層即可,裝飾者模式解決了繼承存在的一些問題,比如多層繼承代碼的臃腫,使代碼邏輯更清晰
觀察者模式:
代理模式:
門面模式:
單例模式:
生產(chǎn)者消費者模式:2.java語言的特點與OOP思想這個通過對比來描述,比如面向?qū)ο蠛兔嫦蜻^程的對比,針對這兩種思想的對比,還可以舉個開發(fā)中的例子,比如播放器的實現(xiàn),面向過程的實現(xiàn)方式就是將播放視頻的這個功能分解成多個過程,比如,加載視頻地址,獲取視頻信息,初始化解碼器,選擇合適的解碼器進(jìn)行解碼,讀取解碼后的幀進(jìn)行視頻格式轉(zhuǎn)換和音頻重采樣,然后讀取幀進(jìn)行播放,這是一個完整的過程,這個過程中不涉及類的概念,而面向?qū)ο笞畲蟮奶攸c就是類,封裝繼承和多態(tài)是核心,同樣的以播放器為例,一面向?qū)ο蟮姆绞絹韺崿F(xiàn),將會針對每一個功能封裝出一個對象,吧如說Muxer,獲取視頻信息,Decoder,解碼,格式轉(zhuǎn)換器,視頻播放器,音頻播放器等,每一個功能對應(yīng)一個對象,由這個對象來完成對應(yīng)的功能,并且遵循單一職責(zé)原則,一個對象只做它相關(guān)的事情3.說下java中的線程創(chuàng)建方式,線程池的工作原理。java中有三種創(chuàng)建線程的方式,或者說四種
1.繼承Thread類實現(xiàn)多線程
2.實現(xiàn)Runnable接口
3.實現(xiàn)Callable接口
4.通過線程池
線程池的工作原理:線程池可以減少創(chuàng)建和銷毀線程的次數(shù),從而減少系統(tǒng)資源的消耗,當(dāng)一個任務(wù)提交到線程池時
a.首先判斷核心線程池中的線程是否已經(jīng)滿了,如果沒滿,則創(chuàng)建一個核心線程執(zhí)行任務(wù),否則進(jìn)入下一步
b.判斷工作隊列是否已滿,沒有滿則加入工作隊列,否則執(zhí)行下一步
c.判斷線程數(shù)是否達(dá)到了最大值,如果不是,則創(chuàng)建非核心線程執(zhí)行任務(wù),否則執(zhí)行飽和策略,默認(rèn)拋出異常4.說下handler原理Handler,Message,looper和MessageQueue構(gòu)成了安卓的消息機制,handler創(chuàng)建后可以通過sendMessage將消息加入消息隊列,然后looper不斷的將消息從MessageQueue中取出來,回調(diào)到Hander的handleMessage方法,從而實現(xiàn)線程的通信。從兩種情況來說,第一在UI線程創(chuàng)建Handler,此時我們不需要手動開啟looper,因為在應(yīng)用啟動時,在ActivityThread的main方法中就創(chuàng)建了一個當(dāng)前主線程的looper,并開啟了消息隊列,消息隊列是一個無限循環(huán),為什么無限循環(huán)不會ANR?因為可以說,應(yīng)用的整個生命周期就是運行在這個消息循環(huán)中的,安卓是由事件驅(qū)動的,Looper.loop不斷的接收處理事件,每一個點擊觸摸或者Activity每一個生命周期都是在Looper.loop的控制之下的,looper.loop一旦結(jié)束,應(yīng)用程序的生命周期也就結(jié)束了。我們可以想想什么情況下會發(fā)生ANR,第一,事件沒有得到處理,第二,事件正在處理,但是沒有及時完成,而對事件進(jìn)行處理的就是looper,所以只能說事件的處理如果阻塞會導(dǎo)致ANR,而不能說looper的無限循環(huán)會ANR另一種情況就是在子線程創(chuàng)建Handler,此時由于這個線程中沒有默認(rèn)開啟的消息隊列,所以我們需要手動調(diào)用looper.prepare(),并通過looper.loop開啟消息主線程Looper從消息隊列讀取消息,當(dāng)讀完所有消息時,主線程阻塞。子線程往消息隊列發(fā)送消息,并且往管道文件寫數(shù)據(jù),主線程即被喚醒,從管道文件讀取數(shù)據(jù),主線程被喚醒只是為了讀取消息,當(dāng)消息讀取完畢,再次睡眠。因此loop的循環(huán)并不會對CPU性能有過多的消耗。5.內(nèi)存泄漏的場景和解決辦法1.非靜態(tài)內(nèi)部類的靜態(tài)實例
非靜態(tài)內(nèi)部類會持有外部類的引用,如果非靜態(tài)內(nèi)部類的實例是靜態(tài)的,就會長期的維持著外部類的引用,組織被系統(tǒng)回收,解決辦法是使用靜態(tài)內(nèi)部類
2.多線程相關(guān)的匿名內(nèi)部類和非靜態(tài)內(nèi)部類
匿名內(nèi)部類同樣會持有外部類的引用,如果在線程中執(zhí)行耗時操作就有可能發(fā)生內(nèi)存泄漏,導(dǎo)致外部類無法被回收,直到耗時任務(wù)結(jié)束,解決辦法是在頁面退出時結(jié)束線程中的任務(wù)
3.Handler內(nèi)存泄漏
Handler導(dǎo)致的內(nèi)存泄漏也可以被歸納為非靜態(tài)內(nèi)部類導(dǎo)致的,Handler內(nèi)部message是被存儲在MessageQueue中的,有些message不能馬上被處理,存在的時間會很長,導(dǎo)致handler無法被回收,如果handler是非靜態(tài)的,就會導(dǎo)致它的外部類無法被回收,解決辦法是1.使用靜態(tài)handler,外部類引用使用弱引用處理2.在退出頁面時移除消息隊列中的消息
4.Context導(dǎo)致內(nèi)存泄漏
根據(jù)場景確定使用Activity的Context還是Application的Context,因為二者生命周期不同,對于不必須使用Activity的Context的場景(Dialog),一律采用Application的Context,單例模式是最常見的發(fā)生此泄漏的場景,比如傳入一個Activity的Context被靜態(tài)類引用,導(dǎo)致無法回收
5.靜態(tài)View導(dǎo)致泄漏
使用靜態(tài)View可以避免每次啟動Activity都去讀取并渲染View,但是靜態(tài)View會持有Activity的引用,導(dǎo)致無法回收,解決辦法是在Activity銷毀的時候?qū)㈧o態(tài)View設(shè)置為null(View一旦被加載到界面中將會持有一個Context對象的引用,在這個例子中,這個context對象是我們的Activity,聲明一個靜態(tài)變量引用這個View,也就引用了activity)
6.WebView導(dǎo)致的內(nèi)存泄漏
WebView只要使用一次,內(nèi)存就不會被釋放,所以WebView都存在內(nèi)存泄漏的問題,通常的解決辦法是為WebView單開一個進(jìn)程,使用AIDL進(jìn)行通信,根據(jù)業(yè)務(wù)需求在合適的時機釋放掉
7.資源對象未關(guān)閉導(dǎo)致
如Cursor,F(xiàn)ile等,內(nèi)部往往都使用了緩沖,會造成內(nèi)存泄漏,一定要確保關(guān)閉它并將引用置為null
8.集合中的對象未清理
集合用于保存對象,如果集合越來越大,不進(jìn)行合理的清理,尤其是入股集合是靜態(tài)的
9.Bitmap導(dǎo)致內(nèi)存泄漏
bitmap是比較占內(nèi)存的,所以一定要在不使用的時候及時進(jìn)行清理,避免靜態(tài)變量持有大的bitmap對象
10.監(jiān)聽器未關(guān)閉
很多需要register和unregister的系統(tǒng)服務(wù)要在合適的時候進(jìn)行unregister,手動添加的listener也需要及時移除6.如何避免OOM?1.使用更加輕量的數(shù)據(jù)結(jié)構(gòu):如使用ArrayMap/SparseArray替代HashMap,HashMap更耗內(nèi)存,因為它需要額外的實例對象來記錄Mapping操作,SparseArray更加高效,因為它避免了KeyValue的自動裝箱,和裝箱后的解箱操作
2.便面枚舉的使用,可以用靜態(tài)常量或者注解@IntDef替代
3.Bitmap優(yōu)化:
a.尺寸壓縮:通過InSampleSize設(shè)置合適的縮放
b.顏色質(zhì)量:設(shè)置合適的format,ARGB_6666/RBG_545/ARGB_4444/ALPHA_6,存在很大差異
c.inBitmap:使用inBitmap屬性可以告知Bitmap解碼器去嘗試使用已經(jīng)存在的內(nèi)存區(qū)域,新解碼的Bitmap會嘗試去使用之前那張Bitmap在Heap中所占據(jù)的pixeldata內(nèi)存區(qū)域,而不是去問內(nèi)存重新申請一塊區(qū)域來存放Bitmap。利用這種特性,即使是上千張的圖片,也只會僅僅只需要占用屏幕所能夠顯示的圖片數(shù)量的內(nèi)存大小,但復(fù)用存在一些限制,具體體現(xiàn)在:在Android4.4之前只能重用相同大小的Bitmap的內(nèi)存,而Android4.4及以后版本則只要后來的Bitmap比之前的小即可。使用inBitmap參數(shù)前,每創(chuàng)建一個Bitmap對象都會分配一塊內(nèi)存供其使用,而使用了inBitmap參數(shù)后,多個Bitmap可以復(fù)用一塊內(nèi)存,這樣可以提高性能
4.StringBuilder替代String:在有些時候,代碼中會需要使用到大量的字符串拼接的操作,這種時候有必要考慮使用StringBuilder來替代頻繁的“”
5.避免在類似onDraw這樣的方法中創(chuàng)建對象,因為它會迅速占用大量內(nèi)存,引起頻繁的GC甚至內(nèi)存抖動
6.減少內(nèi)存泄漏也是一種避免OOM的方法7.說下Activity的啟動模式,生命周期,兩個Activity跳轉(zhuǎn)的生命周期,如果一個Activity跳轉(zhuǎn)另一個Activity再按下Home鍵在回到Activity的生命周期是什么樣的啟動模式Standard模式:Activity可以有多個實例,每次啟動Activity,無論任務(wù)棧中是否已經(jīng)有這個Activity的實例,系統(tǒng)都會創(chuàng)建一個新的Activity實例
SingleTop模式:當(dāng)一個singleTop模式的Activity已經(jīng)位于任務(wù)棧的棧頂,再去啟動它時,不會再創(chuàng)建新的實例,如果不位于棧頂,就會創(chuàng)建新的實例
SingleTask模式:如果Activity已經(jīng)位于棧頂,系統(tǒng)不會創(chuàng)建新的Activity實例,和singleTop模式一樣。但Activity已經(jīng)存在但不位于棧頂時,系統(tǒng)就會把該Activity移到棧頂,并把它上面的activity出棧
SingleInstance模式:singleInstance模式也是單例的,但和singleTask不同,singleTask只是任務(wù)棧內(nèi)單例,系統(tǒng)里是可以有多個singleTaskActivity實例的,而singleInstanceActivity在整個系統(tǒng)里只有一個實例,啟動一singleInstanceActivity時,系統(tǒng)會創(chuàng)建一個新的任務(wù)棧,并且這個任務(wù)棧只有他一個Activity生命周期onCreateonStartonResumeonPauseonStoponDestroy兩個Activity跳轉(zhuǎn)的生命周期1.啟動A
onCreate-onStart-onResume
2.在A中啟動B
ActivityAonPause
ActivityBonCreate
ActivityBonStart
ActivityBonResume
ActivityAonStop
3.從B中返回A(按物理硬件返回鍵)
ActivityBonPause
ActivityAonRestart
ActivityAonStart
ActivityAonResume
ActivityBonStop
ActivityBonDestroy
4.繼續(xù)返回
ActivityAonPause
ActivityAonStop
ActivityAonDestroy8.onRestart的調(diào)用場景(1)按下home鍵之后,然后切換回來,會調(diào)用onRestart()。
(2)從本Activity跳轉(zhuǎn)到另一個Activity之后,按back鍵返回原來Activity,會調(diào)用onRestart();
(3)從本Activity切換到其他的應(yīng)用,然后再從其他應(yīng)用切換回來,會調(diào)用onRestart();說下Activity的橫豎屏的切換的生命周期,用那個方法來保存數(shù)據(jù),兩者的區(qū)別。觸發(fā)在什么時候在那個方法里可以獲取數(shù)據(jù)等。9.是否了SurfaceView,它是什么?他的繼承方式是什么?他與View的區(qū)別(從源碼角度,如加載,繪制等)。SurfaceView中采用了雙緩沖機制,保證了UI界面的流暢性,同時SurfaceView不在主線程中繪制,而是另開辟一個線程去繪制,所以它不妨礙UI線程;
SurfaceView繼承于View,他和View主要有以下三點區(qū)別:
(1)View底層沒有雙緩沖機制,SurfaceView有;
(2)view主要適用于主動更新,而SurfaceView適用與被動的更新,如頻繁的刷新
(3)view會在主線程中去更新UI,而SurfaceView則在子線程中刷新;
SurfaceView的內(nèi)容不在應(yīng)用窗口上,所以不能使用變換(平移、縮放、旋轉(zhuǎn)等)。也難以放在ListView或者ScrollView中,不能使用UI控件的一些特性比如View.setAlpha()View:顯示視圖,內(nèi)置畫布,提供圖形繪制函數(shù)、觸屏事件、按鍵事件函數(shù)等;必須在UI主線程內(nèi)更新畫面,速度較慢。
SurfaceView:基于view視圖進(jìn)行拓展的視圖類,更適合2D游戲的開發(fā);是view的子類,類似使用雙緩機制,在新的線程中更新畫面所以刷新界面速度比view快,Camera預(yù)覽界面使用SurfaceView。
GLSurfaceView:基于SurfaceView視圖再次進(jìn)行拓展的視圖類,專用于3D游戲開發(fā)的視圖;是SurfaceView的子類,openGL專用。10.如何實現(xiàn)進(jìn)程保活a:Service設(shè)置成START_STICKYkill后會被重啟(等待5秒左右),重傳Intent,保持與重啟前一樣
b:通過startForeground將進(jìn)程設(shè)置為前臺進(jìn)程,做前臺服務(wù),優(yōu)先級和前臺應(yīng)用一個級別,除非在系統(tǒng)內(nèi)存非常缺,否則此進(jìn)程不會被kill
c:雙進(jìn)程Service:讓2個進(jìn)程互相保護(hù)對方,其中一個Service被清理后,另外沒被清理的進(jìn)程可以立即重啟進(jìn)程
d:用C編寫守護(hù)進(jìn)程(即子進(jìn)程):Android系統(tǒng)中當(dāng)前進(jìn)程(Process)fork出來的子進(jìn)程,被系統(tǒng)認(rèn)為是兩個不同的進(jìn)程。當(dāng)父進(jìn)程被殺死的時候,子進(jìn)程仍然可以存活,并不受影響(Android5.0以上的版本不可行)聯(lián)系廠商,加入白名單
e.鎖屏狀態(tài)下,開啟一個一像素Activity11.說下冷啟動與熱啟動是什么,區(qū)別,如何優(yōu)化,使用場景等。app冷啟動:當(dāng)應(yīng)用啟動時,后臺沒有該應(yīng)用的進(jìn)程,這時系統(tǒng)會重新創(chuàng)建一個新的進(jìn)程分配給該應(yīng)用,這個啟動方式就叫做冷啟動(后臺不存在該應(yīng)用進(jìn)程)。冷啟動因為系統(tǒng)會重新創(chuàng)建一個新的進(jìn)程分配給它,所以會先創(chuàng)建和初始化Application類,再創(chuàng)建和初始化MainActivity類(包括一系列的測量、布局、繪制),最后顯示在界面上。app熱啟動:當(dāng)應(yīng)用已經(jīng)被打開,但是被按下返回鍵、Home鍵等按鍵時回到桌面或者是其他程序的時候,再重新打開該app時,這個方式叫做熱啟動(后臺已經(jīng)存在該應(yīng)用進(jìn)程)。熱啟動因為會從已有的進(jìn)程中來啟動,所以熱啟動就不會走Application這步了,而是直接走M(jìn)ainActivity(包括一系列的測量、布局、繪制),所以熱啟動的過程只需要創(chuàng)建和初始化一個MainActivity就行了,而不必創(chuàng)建和初始化Application冷啟動的流程
當(dāng)點擊app的啟動圖標(biāo)時,安卓系統(tǒng)會從Zygote進(jìn)程中fork創(chuàng)建出一個新的進(jìn)程分配給該應(yīng)用,之后會依次創(chuàng)建和初始化Application類、創(chuàng)建MainActivity類、加載主題樣式Theme中的windowBackground等屬性設(shè)置給MainActivity以及配置Activity層級上的一些屬性、再inflate布局、當(dāng)onCreate/onStart/onResume方法都走完了后最后才進(jìn)行contentView的measure/layout/draw顯示在界面上冷啟動的生命周期簡要流程:
Application構(gòu)造方法–>attachBaseContext()–>onCreate–>Activity構(gòu)造方法–>onCreate()–>配置主體中的背景等操作–>onStart()–>onResume()–>測量、布局、繪制顯示冷啟動的優(yōu)化主要是視覺上的優(yōu)化,解決白屏問題,提高用戶體驗,所以通過上面冷啟動的過程。能做的優(yōu)化如下:1、減少onCreate()方法的工作量2、不要讓Application參與業(yè)務(wù)的操作3、不要在Application進(jìn)行耗時操作4、不要以靜態(tài)變量的方式在Application保存數(shù)據(jù)5、減少布局的復(fù)雜度和層級6、減少主線程耗時12.為什么冷啟動會有白屏黑屏問題?原因在于加載主題樣式Theme中的windowBackground等屬性設(shè)置給MainActivity發(fā)生在inflate布局當(dāng)onCreate/onStart/onResume方法之前,而windowBackground背景被設(shè)置成了白色或者黑色,所以我們進(jìn)入app的第一個界面的時候會造成先白屏或黑屏一下再進(jìn)入界面。解決思路如下1.給他設(shè)置windowBackground背景跟啟動頁的背景相同,如果你的啟動頁是張圖片那么可以直接給windowBackground這個屬性設(shè)置該圖片那么就不會有一閃的效果了<stylename=``"Splash_Theme"``parent=``"@android:style/Theme.NoTitleBar"``>`<itemname=``"android:windowBackground"``>@drawable/splash_bg</item>`<itemname=``"android:windowNoTitle"``>``true``</item>`</style>`2.采用世面的處理方法,設(shè)置背景是透明的,給人一種延遲啟動的感覺。,將背景顏色設(shè)置為透明色,這樣當(dāng)用戶點擊桌面APP圖片的時候,并不會"立即"進(jìn)入APP,而且在桌面上停留一會,其實這時候APP已經(jīng)是啟動的了,只是我們心機的把Theme里的windowBackground的顏色設(shè)置成透明的,強行把鍋甩給了手機應(yīng)用廠商(手機反應(yīng)太慢了啦)<stylename=``"Splash_Theme"``parent=``"@android:style/Theme.NoTitleBar"``>`<itemname=``"android:windowIsTranslucent"``>``true``</item>`<itemname=``"android:windowNoTitle"``>``true``</item>`</style>`3.以上兩種方法是在視覺上顯得更快,但其實只是一種表象,讓應(yīng)用啟動的更快,有一種思路,將Application中的不必要的初始化動作實現(xiàn)懶加載,比如,在SpashActivity顯示后再發(fā)送消息到Application,去初始化,這樣可以將初始化的動作放在后邊,縮短應(yīng)用啟動到用戶看到界面的時間13.Android中的線程有那些,原理與各自特點AsyncTask,HandlerThread,IntentServiceAsyncTask原理:內(nèi)部是Handler和兩個線程池實現(xiàn)的,Handler用于將線程切換到主線程,兩個線程池一個用于任務(wù)的排隊,一個用于執(zhí)行任務(wù),當(dāng)AsyncTask執(zhí)行execute方法時會封裝出一個FutureTask對象,將這個對象加入隊列中,如果此時沒有正在執(zhí)行的任務(wù),就執(zhí)行它,執(zhí)行完成之后繼續(xù)執(zhí)行隊列中下一個任務(wù),執(zhí)行完成通過Handler將事件發(fā)送到主線程。AsyncTask必須在主線程初始化,因為內(nèi)部的Handler是一個靜態(tài)對象,在AsyncTask類加載的時候他就已經(jīng)被初始化了。在Android3.0開始,execute方法串行執(zhí)行任務(wù)的,一個一個來,3.0之前是并行執(zhí)行的。如果要在3.0上執(zhí)行并行任務(wù),可以調(diào)用executeOnExecutor方法HandlerThread原理:繼承自Thread,start開啟線程后,會在其run方法中會通過Looper創(chuàng)建消息隊列并開啟消息循環(huán),這個消息隊列運行在子線程中,所以可以將HandlerThread中的Looper實例傳遞給一個Handler,從而保證這個Handler的handleMessage方法運行在子線程中,Android中使用HandlerThread的一個場景就是IntentServiceIntentService原理:繼承自Service,它的內(nèi)部封裝了HandlerThread和Handler,可以執(zhí)行耗時任務(wù),同時因為它是一個服務(wù),優(yōu)先級比普通線程高很多,所以更適合執(zhí)行一些高優(yōu)先級的后臺任務(wù),HandlerThread底層通過Looper消息隊列實現(xiàn)的,所以它是順序的執(zhí)行每一個任務(wù)。可以通過Intent的方式開啟IntentService,IntentService通過handler將每一個intent加入HandlerThread子線程中的消息隊列,通過looper按順序一個個的取出并執(zhí)行,執(zhí)行完成后自動結(jié)束自己,不需要開發(fā)者手動關(guān)閉14.ANR的原因1.耗時的網(wǎng)絡(luò)訪問
2.大量的數(shù)據(jù)讀寫
3.數(shù)據(jù)庫操作
4.硬件操作(比如camera)
5.調(diào)用thread的join()方法、sleep()方法、wait()方法或者等待線程鎖的時候
6.servicebinder的數(shù)量達(dá)到上限
7.systemserver中發(fā)生WatchDogANR
8.service忙導(dǎo)致超時無響應(yīng)
9.其他線程持有鎖,導(dǎo)致主線程等待超時
10.其它線程終止或崩潰導(dǎo)致主線程一直等待15.三級緩存原理當(dāng)Android端需要獲得數(shù)據(jù)時比如獲取網(wǎng)絡(luò)中的圖片,首先從內(nèi)存中查找(按鍵查找),內(nèi)存中沒有的再從磁盤文件或sqlite中去查找,若磁盤中也沒有才通過網(wǎng)絡(luò)獲取16.LruCache底層實現(xiàn)原理:LruCache中Lru算法的實現(xiàn)就是通過LinkedHashMap來實現(xiàn)的。LinkedHashMap繼承于HashMap,它使用了一個雙向鏈表來存儲Map中的Entry順序關(guān)系,
對于get、put、remove等操作,LinkedHashMap除了要做HashMap做的事情,還做些調(diào)整Entry順序鏈表的工作。
LruCache中將
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職農(nóng)業(yè)技術(shù)(農(nóng)業(yè)技術(shù)應(yīng)用)試題及答案
- 2025年大學(xué)一年級(醫(yī)學(xué)檢驗技術(shù))臨床微生物檢驗試題及答案
- 2025年中職農(nóng)業(yè)經(jīng)濟管理(農(nóng)村經(jīng)濟核算)試題及答案
- 2025年高職第二學(xué)年(制冷與空調(diào)技術(shù))制冷系統(tǒng)設(shè)計專項測試卷
- 2025年大學(xué)第四學(xué)年(生物技術(shù))基因工程綜合測試試題及答案
- 2025年大學(xué)編輯出版學(xué)(編輯校對基礎(chǔ))試題及答案
- 2025年大學(xué)(口腔醫(yī)學(xué))口腔醫(yī)學(xué)心理學(xué)試題及答案
- 2025年大學(xué)護(hù)理技能綜合訓(xùn)練(護(hù)理綜合技能)試題及答案
- 2025年高職新能源汽車檢測與維修(汽車減排管理)試題及答案
- 2025年中職西式烹飪工藝(海鮮烹飪)試題及答案
- 2022年-2024年青島衛(wèi)健委事業(yè)編中醫(yī)筆試真題
- JJG(交通) 070-2006 混凝土超聲檢測儀
- 合作銷售礦石協(xié)議書
- 2025上海初三各區(qū)一模、二模作文題、主題歸納及審題分析指導(dǎo)
- 圍手術(shù)期心肌梗塞的護(hù)理
- 2025-2026學(xué)年蘇教版(2024)小學(xué)科學(xué)二年級上冊期末測試卷附答案(共三套)
- 垃圾清運補充合同范本
- 2026屆湖南省長沙市長郡集團(tuán)九年級物理第一學(xué)期期末預(yù)測試題含解析
- 生日主題宴會設(shè)計方案
- 《JJG 1081.1-2024鐵路機車車輛輪徑量具檢定規(guī)程 第1部分:輪徑尺》 解讀
- 《基坑圍護(hù)結(jié)構(gòu)滲漏檢測技術(shù)標(biāo)準(zhǔn)》
評論
0/150
提交評論