版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
一、華為題庫tcpip應用層之上的幾個協(xié)議具體說明內(nèi)容:OSI是一個開放性的通信系統(tǒng)互連參考模型,他是一個定義得非常好的協(xié)議規(guī)范。OSI模型有7層結構,每層都可以有幾個子層。OSI的7層從上到下分別是7應用層6表示層5會話層4傳輸層3網(wǎng)絡層2數(shù)據(jù)鏈路層1物理層;其中高層(即7、6、5、4層)定義了應用程序的功能,下面3層(即3、2、1層)主要面向通過網(wǎng)絡的端到端的數(shù)據(jù)流。其中傳輸層包含tcpudpspx等協(xié)議Tcpip模型是一系列網(wǎng)絡協(xié)議的總稱。Tcpip模型的四層結構: 這些協(xié)議分成四個層次,上一層的協(xié)議都以下一層的協(xié)議為基礎。從下到上的四層,連接層(LindLayer)、網(wǎng)絡層(InternetLayer)、傳輸層(TransportLayer)、應用層(ApplicationLayer)。連接層負責建立電路連接,是整個網(wǎng)絡的物理基礎,典型的協(xié)議包括以太網(wǎng)、ADSL等。數(shù)據(jù)鏈路層。這個層次為待傳送的數(shù)據(jù)加入一個以太網(wǎng)協(xié)議頭,并進行CRC編碼,為最后的數(shù)據(jù)傳輸做準備。再往下則是硬件層次了,負責網(wǎng)絡的傳輸,這個層次的定義包括網(wǎng)線的制式,網(wǎng)卡的定義等等(這些我們就不用關心了,我們也不做網(wǎng)卡),所以有些書并不把這個層次放在tcp/ip協(xié)議族里面,因為它幾乎和tcp/ip協(xié)議的編寫者沒有任何的關系。發(fā)送協(xié)議的主機從上自下將數(shù)據(jù)按照協(xié)議封裝,而接收數(shù)據(jù)的主機則按照協(xié)議從得到的數(shù)據(jù)包解開,最后拿到需要的數(shù)據(jù)。這種結構非常有棧的味道,所以某些文章也把tcp/ip協(xié)議族稱為tcp/ip協(xié)議棧。網(wǎng)絡層負責分配地址和傳送二進制數(shù)據(jù),主要協(xié)議是IP協(xié)議。傳輸層負責傳送文本數(shù)據(jù),主要協(xié)議是TCP協(xié)議、UDP協(xié)議應用層負責傳送各種最終形態(tài)的數(shù)據(jù),是直接與用戶打交道的層,典型協(xié)議是HTTP、FTP等。TCP/IP詳解學習筆記(1)-基本概念互聯(lián)網(wǎng)IP地址:現(xiàn)在,通常使用的IP地址是一個32bit的數(shù)字,也就是我們常說的IPv4標準,這32bit的數(shù)字分成四組,也就是常見的55的樣式。IPv4標準上,地址被分為五類,我們常用的是B類地址。具體的分類請參考其他文檔。需要注意的是IP地址是網(wǎng)絡號+主機號的組合,這非常重要。32Bit分成四組,一組8bit2^8=16*16=256域名系統(tǒng)域名系統(tǒng)是一個分布的數(shù)據(jù)庫,它提供將主機名(就是網(wǎng)址啦)轉換成IP地址的服務。RFCRFC是什么?RFC就是tcp/ip協(xié)議的標準文檔,在這里我們可以看到RFC那長長的定義列表,現(xiàn)在它一共有4000多個協(xié)議的定義,當然,我們所要學習的,也就是那么十幾個協(xié)議而已。端口號(port)注意,這個號碼是用在TCP,UDP上的一個邏輯號碼,并不是一個硬件端口,我們平時說把某某端口封掉了,也只是在IP層次把帶有這個號碼的IP包給過濾掉了而已。
應用編程接口現(xiàn)在常用的編程接口有socket和TLI。而前面的有時候也叫做“Berkeleysocket”,可見Berkeley對于網(wǎng)絡的發(fā)展有多大的貢獻。TCP/IP詳解學習筆記(2)-數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層有三個目的:
為IP模塊發(fā)送和
接收IP數(shù)據(jù)報。
為ARP模塊發(fā)送ARP請求和接收ARP應答。
為RARP發(fā)送RARP請
求和接收RARP應答ip大家都聽說過。至于ARP和RARP,ARP叫做地址解析協(xié)議,是用IP地址換MAC地址的一種協(xié)議,而RARP則叫做逆地址解析協(xié)議,在tcp/ip協(xié)議的后面章節(jié)會介紹它們(在局域網(wǎng)里面用ARP協(xié)議可以很容易的搞癱瘓網(wǎng)絡哦)數(shù)據(jù)鏈路層的協(xié)議還是很多的,有我們最常用的以太網(wǎng)(就是平時我們用的網(wǎng)卡)協(xié)議,也有不太常見的令牌環(huán),還有FDDI,當然,還有國內(nèi)現(xiàn)在相當普及的PPP協(xié)議(就是adsl寬帶),以及一個loopback協(xié)議。聯(lián)系linux里面的ifconfig-a命令,這個命令通常會得到如下的結果其中,eth0就是以太網(wǎng)接口,而lo則是loopback接口。這也說明這個主機在網(wǎng)絡鏈路層上至少支持loopback協(xié)議和以太網(wǎng)協(xié)議。以太網(wǎng)(Ether-net)的定是指數(shù)字設備公司(
DigitalEquipmentCorp.)、英特爾公司(IntelCorp.)和Xerox公司在1982年聯(lián)合公布的一個標準,這個標準里面使用了一種稱作CSMA/CD的接入方法。而IEEE802提供的標準集802.3(還有一部分定義到了802.2中)也提供了一個CSMA/CD的標準。這兩個標準稍有不同,TCP/IP協(xié)議對這種情況的處理方式如下:·
以太網(wǎng)的IP數(shù)據(jù)報封裝在RFC894中定義,而IEEE802網(wǎng)絡的IP數(shù)據(jù)報封裝在RFC1042中定義。·
一臺主機一定要能發(fā)送和接收RFC894定義的數(shù)據(jù)報?!?/p>
一臺主機可以接收RFC894和RFC1042的封裝格式的混合數(shù)據(jù)報?!?/p>
一臺主機也許能夠發(fā)送RFC1042數(shù)據(jù)報。。如果主機能同時發(fā)送兩種類型的分組數(shù)
據(jù),那么發(fā)送的分組必須是可以設置的,而且默認條件下必須是RFC894分組??梢?,RFC1042在TCP/IP里面處于一個配角的地位。這兩種不同的數(shù)據(jù)報格式請參考教材。ppp(點對點協(xié)議)是從SLIP的替代品。他們都提供了一種低速接入的解決方案。而每一種數(shù)據(jù)鏈路層協(xié)議,都有一個MTU(最大傳輸單元)定義,在這個定義下面,如果IP數(shù)據(jù)報過大,則要進行分片(fragmentation),使得每片都小于MTU,注意PPP的MTU并不是一個物理定義,而是指一個邏輯定義(個人認為就是用程序控制)??梢杂胣etstat來打印出MTU的結果,比如鍵入netstat-in/fengzanfeng/articles/1339347.html上文摘自上面的網(wǎng)址/goodboy1881/article/category/204448上面的是tcpip協(xié)議的補充繼承子類父類的問題extends關鍵字理解繼承是理解面向對象程序設計的關鍵。在Java中,通過關鍵字extends繼承一個已有的類,被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類)。在Java中不允許多繼承。 子類可以覆蓋父類的方法。Java中是單繼承,一個子類只能有一個直接父類。 子類包含于父類同名方法的現(xiàn)象稱為方法重寫,也成為方法覆蓋。Override。方法的重寫遵守“兩同兩小一大”規(guī)則,兩同,方法名相同,形參列表相同。兩小指的子類返回值類型應該比父類方法返回值類型更小或者相等。子類方法聲明拋出的異常應該比父類方法聲明拋出的異常類更小或者相等。一大,子類的訪問權限應該比父類方法更大或者相等。覆蓋方法和被覆蓋的方法要么都是類方法,要么都是實例方法。 java的集合對象arraylistlinklisthashsethashmap的區(qū)別arrayListLinkList1.ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結構,LinkedList基于鏈表的數(shù)據(jù)結構。
2.對于隨機訪問get和set,ArrayList優(yōu)于LinkedList,因為ArrayList可以隨機定位,而LinkedList要移動指針一步一步的移動到節(jié)點處。(參考數(shù)組與鏈表來思考)Arraylist適合查詢linkedlist適合增刪改
3.對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢,只需要對指針進行修改即可,而ArrayList要移動數(shù)據(jù)來填補被刪除的對象的空間。ArrayList和LinkedList是兩個集合類,用于存儲一系列的對象引用(references)。例如我們可以用ArrayList來存儲一系列的String或者Integer。那么ArrayList和LinkedList在性能上有什么差別呢?什么時候應該用ArrayList什么時候又該用LinkedList呢?
java中ArrayList、LinkList區(qū)別/wuchuanpingstone/article/details/6678653hashset和hashmap/6931.html/uid-26864892-id-3167656.html/fisher/archive/2006/12/13/87398.htmlStringbuffer和String的比較/rpp506815950/archive/2012/11/07/2758646.html接口的說法不能有proteced修飾的方法不能有static修飾的方法都是publicabstract修飾的方法都是publicvoid類型一個類能實現(xiàn)多個接口/blog/1513135接口里不允許定義靜態(tài)方法,接口支持多繼承。接口的主要用途是被實現(xiàn)類實現(xiàn)數(shù)據(jù)庫連接池的原理/shuaihj/article/details/14223015數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數(shù)量的連接,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。我們可以通過設定連接池最大連接數(shù)來防止系統(tǒng)無盡的與數(shù)據(jù)庫連接。更為重要的是我們可以通過連接池的管理機制監(jiān)視數(shù)據(jù)庫的連接的數(shù)量﹑使用情況,為系統(tǒng)開發(fā)﹑測試及性能調(diào)整提供依據(jù)。collectionIterator接口arraylisthashsethashmaplinklist/topics/300005812使用jdbc鏈接java的codeJDBC連接各種數(shù)據(jù)庫的方法(經(jīng)典)SqlserverPublic
void
FindAllUsers(){
//1、裝載sqlserver驅動對象
DriverManager.registerDriver(new
SQLServerDriver());
//2、通過JDBC建立數(shù)據(jù)庫連接
Connection
con
=DriverManager.getConnection("jdbc:sqlserver://:1433;DatabaseName=customer",
"sa",
"123");
//3、創(chuàng)建狀態(tài)
Statement
state
=con.createStatement();
//4、查詢數(shù)據(jù)庫并返回結果
ResultSet
result
=state.executeQuery("select
*
from
users");
//5、輸出查詢結果
while(result.next()){
System.out.println(result.getString("email"));
}
//6、斷開數(shù)據(jù)庫連接
result.close();
state.close();
con.close();
}
1)連接Oracle8/8i/9i/10g/11g(thin模式)Class.forName("oracle.JDBC.driver.OracleDriver").newInstance();Stringurl="JDBC:oracle:thin:@localhost:1521:orcl"
//orcl為Oracle數(shù)據(jù)庫的SIDStringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);2)連接DB2數(shù)據(jù)庫Class.forName("com.ibm.db2.jcc.DB2Driver");Stringurl="JDBC:db2://localhost:5000/testDb";Stringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);3)連接MySQL數(shù)據(jù)庫Class.forName("com.mysql.jdbc.Driver");Stringurl="JDBC:mysql://localhost:8080/testDB";Stringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);4)連接SQLServer2000數(shù)據(jù)庫Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver");Stringurl="JDBC:microsoft:sqlserver://localhost:1433;DatabaseName=testDb";Stringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);5)連接PostgreSQL數(shù)據(jù)庫Class.forName("org.postgresql.Driver");Stringurl="JDBC:postgresql://localhost/testDb";Stringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);6)連接Access數(shù)據(jù)庫Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Stringurl="JDBC:odbc:Driver={MicrosoftAccessDriver(*.mdb)};DBQ="+application.getRealPath("/Data/testDb/mdb");Connectionconn=DriverManager.getConnection(url,"","");7連接Sybase數(shù)據(jù)庫Class.forName("com.sybase.JDBC.SybDriver");Stringurl="JDBC:sybase:Tds:localhost:5007/testDb";Propertiespro=System.getProperties();pro.put("user","userId");pro.put("password","user_password");Connectioncon=DriverManager.getConnection(url,pro);8連接informix數(shù)據(jù)庫Class.forName("rmix.JDBC.ifxDriver");Stringurl="JDBC:informix-sqli:localhost:1533/testDb:INFORMIXSERVER=myserver"user=testUser;password=testpassword";Connectioncon=DriverManager.getConnection(url);就是那個保存數(shù)組面試題目問題dataset和list的使用區(qū)別/envelope/archive/2010/04/20/1716343.html/topics/350207425java框架問題spring3.0/lib/view/open1338338587698.htmlspringstrutshibernate內(nèi)存溢出為何會出現(xiàn)內(nèi)存溢出如何處理內(nèi)存溢出/miyunhong/article/details/5373910/jxzxm1_2/article/details/2499751dataset的幾個實現(xiàn)/fttbfttb/articles/1509662.html標準html寫界面的code/html/html_forms.asp前臺界面的一些封裝類可以直接使用的有哪些JavaScript內(nèi)置對象/developerworks/cn/web/wa-objectsinjs-v1b/JavaScriptDOM對象http://www.caogen8.co/w3school/js/js_obj_htmldom.asp.htm什么是線程安全什么是不安全?/zwq194/archive/2012/06/26/2563567.htmlshh架構struts關于action的使用/lsh6688/article/details/7525963還有就是java的一些細節(jié)問題我記不住了你網(wǎng)上搜搜華為java面試會有好多看看就好了./link?url=0M6kj9LRAV76YazYQFOZhKuxTM0rPVnpfyiG3wXzNluksR4DbC-wOXqkuBO38dd4kNeC2DYwDjrcZKqK5I2pxtr1mIAoE7Np7mLI-B-BdZq二、面試十大算法題目字符串如果IDE沒有代碼自動補全功能,所以你應該記住下面的這些方法。鏈表在Java中,鏈表的實現(xiàn)非常簡單,每個節(jié)點Node都有一個值val和指向下個節(jié)點的鏈接next。classNode{ intval; Nodenext; Node(intx){ val=x; next=null; }}/article/1017將這些全部實現(xiàn),并且記憶。常用排序算法:/morewindows/article/details/6684558說明各個排序算法的具體實現(xiàn)。/11745/關于直觀展示各個排序算法的gif圖片。Verygood程序員必知的8種算法/pzhtpf/article/details/7559896集中排序算法的比較/articles/Izi6nm快速排序:基本思想:先從隊列中取出一個數(shù)據(jù)作為基準。分區(qū)過程,將比這個數(shù)大的都放它右邊,比它小的都放左邊。在針對左右區(qū)間,分別執(zhí)行上述操作,直到左右區(qū)間都只剩下一個數(shù)。采用的核心思路是遞歸的思路:挖坑填數(shù)加分治法(1)基本思想:選擇一個基準元素,通常選擇第一個元素或者最后一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大于等于基準元素,此時基準元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分。(2)實例:實現(xiàn):privatevoidquickSort(int[]array,intfrom,intto){
if(from<to){
inttemp=array[to];
inti=from-1;
for(intj=from;j<to;j++){
if(array[j]<=temp){
i++;
inttempValue=array[j];
array[j]=array[i];
array[i]=tempValue;
}
}
array[to]=array[i+1];
array[i+1]=temp;
quickSort(array,from,i);
quickSort(array,i+1,to);
}
}歸并排序介紹:歸并排序(Mergesort,臺灣譯作:合并排序)是建立在歸并操作上的一種有效的\o"排序"排序\o"算法"算法。該算法是采用\o"分治法"分治法(DivideandConquer)的一個非常典型的應用步驟:申請空間,使其大小為兩個已經(jīng)排序序列之和,該空間用來存放合并后的序列設定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置重復步驟3直到某一指針達到序列尾將另一序列剩下的所有元素直接復制到合并序列尾(1)基本排序:歸并(Merge)排序法是將兩個(或兩個以上)有序表合并成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然后再把有序子序列合并為整體有序序列。(2)實例:實現(xiàn)-1publicvoidmergeSort(int[]data,intleft,intright){
//TODOAuto-generatedmethodstub
if(left<right){
//找出中間索引
intcenter=(left+right)/2;
//對左邊數(shù)組進行遞歸
mergeSort(data,left,center);
//對右邊數(shù)組進行遞歸
mergeSort(data,center+1,right);
//合并
merge(data,left,center,right);
}
}
publicvoidmerge(int[]data,intleft,intcenter,intright){
//TODOAuto-generatedmethodstub
int[]tmpArr=newint[data.length];
intmid=center+1;
//third記錄中間數(shù)組的索引
intthird=left;
inttmp=left;
while(left<=center&&mid<=right){
//從兩個數(shù)組中取出最小的放入中間數(shù)組
if(data[left]<=data[mid]){
tmpArr[third++]=data[left++];
}else{
tmpArr[third++]=data[mid++];
}
}
//剩余部分依次放入中間數(shù)組
while(mid<=right){
tmpArr[third++]=data[mid++];
}
while(left<=center){
tmpArr[third++]=data[left++];
}
//將中間數(shù)組中的內(nèi)容復制回原數(shù)組
while(tmp<=right){
data[tmp]=tmpArr[tmp++];
}
System.out.println(Arrays.toString(data));
}堆排序介紹:堆積排序(Heapsort)是指利用\o"堆(數(shù)據(jù)結構)"堆這種數(shù)據(jù)結構所設計的一種排序算法。堆是一個近似\o"完全二叉樹"完全二叉樹的結構,并同時滿足堆性質:即子結點的鍵值或索引總是小于(或者大于)它的父節(jié)點。步驟:(1)基本思想:堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。堆的定義如下:具有n個元素的序列(h1,h2,...,hn),當且僅當滿足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)時稱之為堆。在這里只討論滿足前者條件的堆。由堆的定義可以看出,堆頂元素(即第一個元素)必為最大項(大頂堆)。完全二叉樹可以很直觀地表示堆的結構。堆頂為根,其它為左子樹、右子樹。初始時把要排序的數(shù)的序列看作是一棵順序存儲的二叉樹,調(diào)整它們的存儲序,使之成為一個堆,這時堆的根節(jié)點的數(shù)最大。然后將根節(jié)點與堆的最后一個節(jié)點交換。然后對前面(n-1)個數(shù)重新調(diào)整使之成為堆。依此類推,直到只有兩個節(jié)點的堆,并對它們作交換,最后得到有n個節(jié)點的有序序列。從算法描述來看,堆排序需要兩個過程,一是建立堆,二是堆頂與堆的最后一個元素交換位置。所以堆排序有兩個函數(shù)組成。一是建堆的滲透函數(shù),二是反復調(diào)用滲透函數(shù)實現(xiàn)排序的函數(shù)。(2)實例:初始序列:46,79,56,38,40,84建堆:交換,從堆中踢出最大數(shù)剩余結點再建堆,再交換踢出最大數(shù)依次類推:最后堆中剩余的最后兩個結點交換,踢出一個,排序完成。publicvoidheapSort(int[]a){
System.out.println("開始排序");
intarrayLength=a.length;
//循環(huán)建堆
for(inti=0;i<arrayLength;i++){
//建堆
buildMaxHeap(a,arrayLength-1-i);
//交換堆頂和最后一個元素
swap(a,0,arrayLength-1-i);
System.out.println(Arrays.toString(a));
}
}
privatevoidswap(int[]data,inti,intj){
inttemp=data[i];
data[i]=data[j];
data[j]=temp;
}
privatevoidbuildMaxHeap(int[]data,intlastIndex){
//從lastIndex處節(jié)點(最后一個節(jié)點)的父節(jié)點開始
for(inti=(lastIndex-1)/2;i>=0;i--){
//k保存正在判斷的節(jié)點
intk=i;
//如果當前k節(jié)點的子節(jié)點存在
while(k*2+1<=lastIndex){
//k節(jié)點的左子節(jié)點的索引
intbiggerIndex=2*k+1;
//如果biggerIndex小于lastIndex,即biggerIndex+1代表的k節(jié)點的右子節(jié)點存在
if(biggerIndex<lastIndex){
//若果右子節(jié)點的值較大
if(data[biggerIndex]<data[biggerIndex+1]){
//biggerIndex總是記錄較大子節(jié)點的索引
biggerIndex++;
}
}
//如果k節(jié)點的值小于其較大的子節(jié)點的值
if(data[k]<data[biggerIndex]){
//交換他們
swap(data,k,biggerIndex);
//將biggerIndex賦予k,開始while循環(huán)的下一次循環(huán),重新保證k節(jié)點的值大于其左右子節(jié)點的值
k=biggerIndex;
}else{
break;
}
}
}
}選擇排序選擇排序(Selectionsort)是一種簡單直觀的\o"排序算法"排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最小元素,然后放到排序序列末尾。以此類推,直到所有元素均排序完畢。簡單選擇排序:(1)基本思想:在要排序的一組數(shù)中,選出最小的一個數(shù)與第一個位置的數(shù)交換;然后在剩下的數(shù)當中再找最小的與第二個位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個數(shù)和最后一個數(shù)比較為止。(2)實例:實現(xiàn)-1publicvoidselectSort(int[]a){
intposition=0;
for(inti=0;i<a.length;i++){
intj=i+1;
position=i;
inttemp=a[i];
for(;j<a.length;j++){
if(a[j]<temp){
temp=a[j];
position=j;
}
}
a[position]=a[i];
a[i]=temp;
}
}冒泡排序與交換排序有點類似冒泡排序(BubbleSort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的\o"排序算法"排序算法。它重復地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。步驟:比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數(shù)。針對所有的元素重復以上的步驟,除了最后一個。持續(xù)每次對越來越少的元素重復上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。(1)基本思想:在要排序的一組數(shù)中,對當前還未排好序的范圍內(nèi)的全部數(shù),自上而下對相鄰的兩個數(shù)依次進行比較和調(diào)整,讓較大的數(shù)往下沉,較小的往上冒。即:每當兩相鄰的數(shù)比較后發(fā)現(xiàn)它們的排序與排序要求相反時,就將它們互換。(2)實例:實現(xiàn)1-第一種實現(xiàn)方式bymyselfpublicvoidBubbleSort(int[]a){
for(inti=0;i<a.length;i++){
for(intj=i+1;j<a.length;j++){
if(a[i]>a[j]){
swap(a,i,j);
//inttemp;
//temp=a[j];
//a[j]=a[i];
//a[i]=temp;
}
}
}
}
publicvoidswap(int[]args,inta,intb){
inttemp;
temp=args[b];
args[b]=args[a];
args[a]=temp;
}此實現(xiàn)類似于交換排序實現(xiàn)-2正宗的冒泡排序publicstaticvoidbubbleSort(int[]array){
//下兩種選擇一種即可
///方式1
for(inti=array.length-1;i>0;i--){
for(intj=0;j<i;j++){
if(array[j]>array[j+1]){
Sort.swap(array,j,j+1);//交換j和j+1
}
}
}
///方式2
for(inti=0;i<array.length;i++){
for(intj=0;j<array.length-1-i;j++){
if(array[j]>array[j+1]){
Sort.swap(array,j,j+1);//交換j和j+1
}
}
}
}插入排序介紹:插入排序(InsertionSort)的算法描述是一種簡單直觀的\o"排序算法"排序算法。它的工作原理是通過構建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應位置并插入。插入排序在實現(xiàn)上,通常采用in-place排序(即只需用到O(1)的額外空間的排序),因而在從后向前掃描過程中,需要反復把已排序元素逐步向后挪位,為最新元素提供插入空間。步驟:從第一個元素開始,該元素可以認為已經(jīng)被排序取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描如果該元素(已排序)大于新元素,將該元素移到下一位置重復步驟3,直到找到已排序的元素小于或者等于新元素的位置將新元素插入到該位置中重復步驟2(1)基本思想:在要排序的一組數(shù)中,假設前面(n-1)[n>=2]個數(shù)已經(jīng)是排好順序的,現(xiàn)在要把第n個數(shù)插到前面的有序數(shù)中,使得這n個數(shù)也是排好順序的。如此反復循環(huán),直到全部排好順序。(2)實例實現(xiàn)-1publicvoidinsertSort(int[]args){
for(inti=0;i<args.length;i++){
intj=i-1;
intkey=args[i];
while(j>=0&&args[j]>key){
args[j+1]=args[j];
args[j]=key;
j--;
}
}
}實現(xiàn)-2publicvoidinsertSort(int[]args){
for(inti=0;i<args.length;i++){
intj=i-1;
intkey=args[i];
for(;j>=0&&args[j]>key;j--){
args[j+1]=args[j];
//args[j]=key;
}
args[j+1]=key;
}
}希爾排序是針對插入排序的一個直接優(yōu)化。介紹:希爾排序,也稱遞減增量排序算法,是\o"插入排序"插入排序的一種高速而穩(wěn)定的改進版本。希爾排序是基于插入排序的以下兩點性質而提出改進方法的:1、插入排序在對幾乎已經(jīng)排好序的數(shù)據(jù)操作時,效率高,即可以達到\o"線性排序"線性排序的效率2、但插入排序一般來說是低效的,因為插入排序每次只能將數(shù)據(jù)移動一位>希爾排序(最小增量排序)1)基本思想:算法先將要排序的一組數(shù)按某個增量d(n/2,n為要排序數(shù)的個數(shù))分成若干組,每組中記錄的下標相差d.對每組中全部元素進行直接插入排序,然后再用一個較小的增量(d/2)對它進行分組,在每組中再進行直接插入排序。當增量減到1時,進行直接插入排序后,排序完成。(2)實例:實現(xiàn):publicvoidshellSort(int[]a){
doubled1=a.length;
inttemp=0;
while(true){
d1=Math.ceil(d1/2);//math.ceil(x)返回大于參數(shù)x的最小整數(shù),即對浮點數(shù)向上取整
intd=(int)d1;
for(intx=0;x<d;x++){
for(inti=x+d;i<a.length;i+=d){
intj=i-d;
temp=a[i];
for(;j>=0&&a[j]>temp;j-=d){
a[j+d]=a[j];
//a[j]=temp;
}
a[j+d]=temp;
}
}
if(d==1){
break;
}
}
}基數(shù)排序(1)基本思想:將所有待比較數(shù)值(正整數(shù))統(tǒng)一為同樣的數(shù)位長度,數(shù)位較短的數(shù)前面補零。然后,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以后,數(shù)列就變成一個有序序列。(2)實例:實現(xiàn)publicvoidsort(int[]array){
//首先確定排序的趟數(shù);
intmax=array[0];
for(inti=1;i<array.length;i++){
if(array[i]>max){
max=array[i];
}
}
inttime=0;
//判斷位數(shù);
while(max>0){
max/=10;
time++;
}
//建立10個隊列;
List<ArrayList>queue=newArrayList<ArrayList>();
for(inti=0;i<10;i++){
ArrayList<Integer>queue1=newArrayList<Integer>();
queue.add(queue1);
}
//進行time次分配和收集;
for(inti=0;i<time;i++){
//分配數(shù)組元素;
for(intj=0;j<array.length;j++){
//得到數(shù)字的第time+1位數(shù);
intx=array[j]%(int)Math.pow(10,i+1)/(int)Math.pow(10,i);
ArrayList<Integer>queue2=queue.get(x);
queue2.add(array[j]);
queue.set(x,queue2);
}
intcount=0;//元素計數(shù)器;
//收集隊列元素;
for(intk=0;k<10;k++){
while(queue.get(k).size()>0){
ArrayList<Integer>queue3=queue.get(k);
array[count]=queue3.get(0);
queue3.remove(0);
count++;
}
}
}//endfor
}遞歸vs迭代三、面經(jīng)1-2-3面經(jīng)-1博主畢業(yè)快滿三年了,由于種種原因想換一份工作。學了7年計算機技術,在目前的行業(yè)用到的技術不多,還是想去尋找一份互聯(lián)網(wǎng)行業(yè)的工作,這樣更能學以致用發(fā)揮自己的特長。從上次更新博客到現(xiàn)在已經(jīng)三周左右了,這三周博客基本斷更了,現(xiàn)在找工作也基本收尾了,來聊一聊我所遇到的一些面試經(jīng)歷,希望給各位尋求新機會的小伙伴一個參考??偣裁嫱?家收了7個offer,應該算是比較成功的吧。博文中主要還是聊一下技術相關的,博文中所涉及的公司均以代號標志,不便透露細節(jié)。第一家面試的公司是一家互聯(lián)網(wǎng)創(chuàng)業(yè)公司,這里簡稱D,博主對這家公司的印象還是不錯的,共面試了5輪,筆試一輪,技術面3輪,最后一輪是HR面。雖然公司總共員工只有小幾百人,但是做事比較專業(yè),很多大型的成熟公司也未必做得更好。首先說說筆試,很多一些小的公司,就是從網(wǎng)上題庫中拉點選擇題讓你做做,之后的面試和筆試題無關,這里我遇到的筆試題是和第一輪技術面相關的,有點小套路。筆試題據(jù)博主的回憶,共有這么些題(都是簡答題):1.寫出java中synchronized的使用方式。可以參考:Java多線程知識小抄集(一)2.Java中設置最大堆和最小堆內(nèi)存的參數(shù)是什么?-Xmx-Xms3.volatile的作用?兩點:內(nèi)存可見性;防止指令重排序;4.寫一個二分查找算法5.寫一個你熟悉的設計模式,畫出UML圖,說出此模式的作用以及寫出此模式的主要方法。6.一道設計題。(略)7.BeanFactory和ApplicationContext的區(qū)別。(Sping的容器可以分為兩種類型:1.BeanFactory:(org.springframework.beans.factory.BeanFactory接口定義)是最簡答的容器,提供了基本的DI支持。最常用的BeanFactory實現(xiàn)就是XmlBeanFactory類,它根據(jù)XML文件中的定義加載beans,該容器從XML文件讀取配置元數(shù)據(jù)并用它去創(chuàng)建一個完全配置的系統(tǒng)或應用。2.ApplicationContext應用上下文:org.springframework.context.ApplicationContext)基于BeanFactory之上構建,并提供面向應用的服務。)(第4,5題在下面會解釋)第一輪技術面主要根據(jù)簡歷以及筆試題進行論述。先將筆試題,首先是寫出一個熟悉的設計模式,那當然寫個單例咯,這個最簡單嘛,主要是UML圖也特別好畫。詳細可以參考設計模式:單例模式(Singleton)。博主寫的是內(nèi)部類的寫法:這種寫法是懶漢式線程安全的寫法。面試官問到一個問題:為什么這種寫法是線程安全的?那么這里就設計到一個JVM加載的知識:JVM內(nèi)部機制可以保證在執(zhí)行類構造器()方法的時候是線程安全的,詳細可以參考博文:Java虛擬機類加載機制。。這里博主還特意說了虛擬機規(guī)范嚴格規(guī)定了有且只有5種情況(JDK7)必須對類進行初始化(執(zhí)行類構造器()方法):遇到new,getstatic,putstatic,invokestatic這失調(diào)字節(jié)碼指令時,如果類沒有進行過初始化,則需要先觸發(fā)其初始化。生成這4條指令的最常見的Java代碼場景是:使用new關鍵字實例化對象的時候、讀取或設置一個類的靜態(tài)字段(被final修飾、已在編譯器把結果放入常量池的靜態(tài)字段除外)的時候,以及調(diào)用一個類的靜態(tài)方法的時候。使用java.lang.reflect包的方法對類進行反射調(diào)用的時候,如果類沒有進行過初始化,則需要先觸發(fā)其初始化。當初始化一個類的時候,如果發(fā)現(xiàn)其父類還沒有進行過初始化,則需要先觸發(fā)其父類的初始化。當虛擬機啟動時,用戶需要指定一個要執(zhí)行的主類(包含main()方法的那個類),虛擬機會先初始化這個主類。當使用jdk1.7動態(tài)語言支持時,如果一個java.lang.invoke.MethodHandle實例最后的解析結果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,并且這個方法句柄所對應的類沒有進行初始化,則需要先出觸發(fā)其初始化。尤其是第5點,是個特別偏冷的知識點,當你記住這個的時候,可以給面試官留下一個很好的印象。在后面的博文中會經(jīng)常涉及這種冷知識,可以讓你的面試過程添加幾處亮點。下面就是要說明一下的二分查找法(首先確保被排序的數(shù)組有序),這里有兩種寫法:遞歸和非遞歸的寫法。博主憋了一個遞歸的算法,不過最好還是用非遞歸的寫法。二分查找法還是很容易的,關鍵這里引申出了變種算法,譬如:給你一個key,找出這個數(shù)組中最左邊的key,或者最右邊的key。當然還有其他變種算法,有興趣的朋友可以自行查找相關資料。接下去就根據(jù)簡歷聊一聊項目和Java基礎了。下面稍微列舉一些問題:1.Memcached和Redis的區(qū)別?參考:Redis和Memcached的區(qū)別2.ActiveMQ的集群配置方式有哪些?(基于共享文件,基于數(shù)據(jù)庫,基于Zookeeper等)3.Mybatis的一些知識點。(略)4.虛擬機的類加載機制。(加載-驗證-準備-解析-初始化,詳細可以參考
Java虛擬機類加載機制))5.內(nèi)部類相關知識點。6.面向對象的設計原則?參考:面向對象的設計原則7.SpringAop的原理?動態(tài)代理。8.Spring常用的注解?9.NIO的相關。參考:攻破JAVANIO技術壁壘10.數(shù)據(jù)庫優(yōu)化相關。(博主基本不直接接觸數(shù)據(jù)庫,so遇到此類問題直接say:Idon’tknow.有興趣的小伙伴可以自行查閱一些資料,譬如數(shù)據(jù)訪問優(yōu)化漏斗法則。)11.linux下查看文件有哪些方式?cattacheadtailmorelessnlvimvigvim技術面二面約好的10:00電面,11:30也沒來,后來咨詢了HR才說面試官出差去了。。。好吧,畢竟公司還在創(chuàng)業(yè)初期,管理上有疏忽可以理解。第二次約的2面同樣是10:00,這次是10:27來的電話。額。。。這此的面試官好像是CTO,面的也比較深一些:1.談談你對HashMap的理解,怎么樣去保證線程安全?博主對HashMap巴拉巴拉的一陣,可以參考:Java集合框架:HashMap.
.然后有三種方法可以保證hashMap的線程安全:換成HashTable;用synchronizedMap包裝一下HashMap;換成ConcurrentHashMap。然后補了一句ConcurrentHashMap是比較推崇的,然后就被問了另一個問題:說一下ConcurrentHashMap的實現(xiàn)原理。然后解釋了一下,最后問了個問題:用HashMap怎么去實現(xiàn)ConcurrentHashMap?當時想了一個,覺得不okay,想說第二個方案就被制止了?,F(xiàn)在想想:把HashMap用Collections.synchronizedMap()包裝一下替換屌Segment即可。(如果不知所云,請閱讀一下ConcurrentHashMap的源碼先~~)補充:這里還問了平常用了那些線程安全的隊列,包括:ConcurrentLinkedQueue,ConcurrentLinkedDeque以及BlockingQueue系列。2.Java集合中有哪些常用的類?ArrayList的上級(父類或者接口)是什么,HashMap的上級又是什么?常用的類:Map系(HashMap,LinkedHashMap,TreeMap,WeakHashMap,EnumMap等);List系(ArrayList,LinkedList,Vector,Stack等);Set系(HashSet,LinkedHashSet,TreeSet);工具類(Collections,Arrays)。這里如果說出來了,就必須對其十分了解,比如博主在另一家互聯(lián)網(wǎng)公司W(wǎng)的面試過程中就被問到:你對java集合了解有多少?博主說:我看過所有集合的源碼。然后就被問到:Collections.sort()里面的實現(xiàn)是什么排序算法?這個問題確實夠冷門的!幸虧看過,不然就被打臉了。。(TimSort,加強型歸并排序)ArrayListextendsAbstractListimplementsList,RandomAccess,Cloneable,Serializable.然后AbstractList又繼承了AbstractCollection.然后List和AbstractCollection又都implements了Collection.HashMapextendsAbstractMapimplementsMap,Cloneable,Serializable.3.css導入方式?這個只要2周不沒看過就會忘記。。博主當時就忘記了。。超簡單的題,但是又是最不起眼的題,細節(jié)做的不夠好。4.js中的ajax操作的方式?這個寫的太多了,所以答起來很easy5.一句話概括NIO。博主說了一通,包括Reactor模式神馬的。但是面試官說:你說的也很對,但是不是我想要的結果。斯巴達。。。6.設計數(shù)據(jù)庫的一道題,比較簡單,不贅述。7.常用的linux命令?(這個被用了好多次了)8.SpringIOC的原理?答案:基于反射9.數(shù)據(jù)庫事務隔離級別?UncommitRead;CommitRead;RepeatedRead;Serializable.10.memcached與Redis的區(qū)別?技術三面之前說過博主對數(shù)據(jù)庫相關的知識,除了會寫SQL之外,其他的基本白癡。這次面試將近40mins,差不多被問了30mins的數(shù)據(jù)庫的知識。比如:數(shù)據(jù)庫優(yōu)化;訪問多少條數(shù)據(jù),數(shù)據(jù)庫的反應延遲是多少;表和視圖的區(qū)別。當然還有一些其他的,譬如Spring中的注解在xml文件中怎么配置?面試過程中有兩種問題比較難答:第一種,冷門知識,比如Colletions.sort()用到什么排序算法?第二種就是上面的這種特別簡單,用過的都知道,但是像這種在Spring配置文件中配置完之后就基本不動了,所以特別容易遺忘。還有類似的比如:Spring中的自動裝配怎么配置?HR面最后是HR面,這個最簡單,只要言語不過激都是okay的,主要談談在原來公司主要做什么,為什么要換份新工作,期望薪資神馬的。(ps:談薪資是門藝術,同樣兩個人,面試打分也是一樣的,但是薪資會談和不會談之間可能相差很多,這門藝術博主還在研究中,雖然有所收獲,但是還是不敢出來賣弄,等博主把人事六大塊之一的薪酬領悟之后再來探討探討。)總結博主總結幾個心得,僅供參考:面試第一要素:不要緊張,如果你真是技術族,而且對技術有所癡迷,一聊起技術來根本不會緊張。面試第二要素:要對簡歷上的內(nèi)容了如指掌,包括原理源碼,如果略懂或者根本就是用了幾天就再也沒用過的技術就從簡歷上刪掉吧,否則被面試官抓住不放就糟糕了。面試第三要素:學會引導面試,掌握主動權。這門技藝需要多去混點面筋,然后自我優(yōu)化之后,一般都可以掌握。面試第四要素:做人要低調(diào)。面試你這個職位的人的技術肯定比這個職位高好幾個level,不要覺得你回答了你非常熟悉的問題就高調(diào)起來,面試官隨時可以挖出一堆坑來讓你往里面跳。面試第五要素:要自信。有些面試官會對某些你回答完問題之后會補一句:你確定?這時候就要看你自己了,有可能面試官再提醒你,也有可能再詐你。歸根結底還是要技術掌握的夠硬,底氣就足一些。面經(jīng)-2H:\01--B.——個人文檔\gxy\簡歷\2面經(jīng)-3H:\01--B.——個人文檔\gxy\簡歷\3面經(jīng)-4H:\01--B.——個人文檔\gxy\簡歷\4四、常用工具類、集合等的操作。面向對象和面向過程的區(qū)別面向過程:優(yōu)點:性能比面向對象高,因為類調(diào)用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發(fā)、Linux/Unix等一般采用面向過程開發(fā),性能是最重要的因素。
缺點:沒有面向對象易維護、易復用、易擴展面向對象
優(yōu)點:易維護、易復用、易擴展,由于面向對象有封裝、繼承、多態(tài)性的特性,可以設計出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護
缺點:性能比面向過程低Java的四個基本特性(抽象、封裝、繼承,多態(tài))抽象:就是把現(xiàn)實生活中的某一類東西提取出來,用程序代碼表示,我們通常叫做類或者接口。抽象包括兩個方面:一個是數(shù)據(jù)抽象,一個是過程抽象。數(shù)據(jù)抽象也就是對象的屬性。過程抽象是對象的行為特征。封裝:把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進行封裝隱藏。封裝分為屬性的封裝和方法的封裝。
繼承:是對有著共同特性的多類事物,進行再抽象成一個類。這個類就是多類事物的父類。父類的意義在于抽取多類事物的共性。多態(tài):允許不同類的對象對同一消息做出響應。方法的重載、類的覆蓋正體現(xiàn)了多態(tài)。重載和重寫的區(qū)別 重載:發(fā)生在同一個類中,方法名必須相同,參數(shù)類型不同、個數(shù)不同、順序不同,方法返回值和訪問修飾符可以不同,發(fā)生在編譯時。
重寫:發(fā)生在父子類中,方法名、參數(shù)列表必須相同,返回值小于等于父類,拋出的異常小于等于父類,訪問修飾符大于等于父類;如果父類方法訪問修飾符為private則子類中就不是重寫。構造器Constructor是否可被override構造器不能被重寫,不能用static修飾構造器,只能用publicprivateprotected這三個權限修飾符,且不能有返回語句。訪問控制符public,protected,private,以及默認的區(qū)別private只有在本類中才能訪問;public在任何地方都能訪問;protected在同包內(nèi)的類及包外的子類能訪問;默認不寫在同包內(nèi)能訪問。是否可以繼承String類String類是final類故不可以繼承,一切由final修飾過的都不能繼承String和StringBuffer、StringBuilder的區(qū)別可變性:String類中使用字符數(shù)組保存字符串,privatefinalcharvalue[],所以string對象是不可變的。StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串,char[]value,這兩種對象都是可變的。線程安全性:String中的對象是不可變的,也就可以理解為常量,線程安全。AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer對方法加了同步鎖或者對調(diào)用的方法加了同步鎖,所以是線程安全的。StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。性能:每次對String類型進行改變的時候,都會生成一個新的String對象,然后將指針指向新的String對象。StringBuffer每次都會對StringBuffer對象本身進行操作,而不是生成新的對象并改變對象引用。相同情況下使用StirngBuilder相比使用StringBuffer僅能獲得10%~15%左右的性能提升,但卻要冒多線程不安全的風險。hashCode和equals方法的關系equals相等,hashcode必相等;hashcode相等,equals可能不相等。抽象類和接口的區(qū)別語法層次:抽象類和接口分別給出了不同的語法定義設計層次:抽象層次不同,抽象類是對類抽象,而接口是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是接口卻是對類局部(行為)進行抽象。跨域不同,抽象類所體現(xiàn)的是一種繼承關系,要想使得繼承關系合理,父類和派生類之間必須存在”is-a”關系,即父類和派生類在概念本質上應該是相同的。對于接口則不然,并不要求接口的實現(xiàn)者和接口定義在概念本質上是一致的,僅僅是實現(xiàn)了接口定義的契約而已,”like-a”的關系。。設計層次不同,抽象類是自底向上抽象而來的,接口是自頂向下設計出來的。自動裝箱與拆箱裝箱:將基本類型用它們對應的引用類型包裝起來;拆箱:將包裝類型轉換為基本數(shù)據(jù)類型;Java使用自動裝箱和拆箱機制,節(jié)省了常用數(shù)值的內(nèi)存開銷和創(chuàng)建對象的開銷,提高了效率,由編譯器來完成,編譯器會在編譯期根據(jù)語法決定是否進行裝箱和拆箱動作。什么是泛型、為什么要使用以及泛型擦除泛型,即“參數(shù)化類型”。創(chuàng)建集合時就指定集合元素的類型,該集合只能保存其指定類型的元素,避免使用強制類型轉換。Java編譯器生成的字節(jié)碼是不包涵泛型信息的,泛型類型
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年影視作品版權授權合同模板集合3篇
- 個性化人才委托培養(yǎng)合同書(2024年版)版B版
- 2024年高新技術公司股權質押合同
- 二零二五版?zhèn)€人房貸提前還款公司擔保借款合同3篇
- 二零二五年度酒店地毯定制化設計與生產(chǎn)合同3篇
- 2025年度酒店物業(yè)管理委托合同書樣本3篇
- 2025年湘教版八年級數(shù)學下冊月考試卷含答案
- 2025年滬科新版選修6歷史下冊階段測試試卷
- 二零二五版110KV配電設施智能化改造項目施工合同3篇
- 2025-2030年中國醫(yī)療垃圾處理行業(yè)市場運行狀況及發(fā)展趨勢預測報告
- 安徽省蕪湖市2023-2024學年高一上學期期末考試 英語 含答案
- 醫(yī)學教程 常見體表腫瘤與腫塊課件
- 內(nèi)分泌系統(tǒng)異常與虛勞病關系
- 智聯(lián)招聘在線測評題
- DB3418T 008-2019 宣紙潤墨性感官評判方法
- 【魔鏡洞察】2024藥食同源保健品滋補品行業(yè)分析報告
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗人員理論考試題及答案
- 2024年駐村第一書記工作總結干貨3篇
- 教室裝修施工計劃
- 診療方案自查整改報告(2篇)
- 滬教版四年級上冊數(shù)學列式計算(附參考答案)
評論
0/150
提交評論