java后端開發(fā)必備手冊(cè)架構(gòu)師面經(jīng)_第1頁
java后端開發(fā)必備手冊(cè)架構(gòu)師面經(jīng)_第2頁
java后端開發(fā)必備手冊(cè)架構(gòu)師面經(jīng)_第3頁
java后端開發(fā)必備手冊(cè)架構(gòu)師面經(jīng)_第4頁
java后端開發(fā)必備手冊(cè)架構(gòu)師面經(jīng)_第5頁
已閱讀5頁,還剩258頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

目—java基礎(chǔ) java的8種基本數(shù)據(jù)類型裝箱拆箱 8種基本數(shù)據(jù)類型 裝箱和拆 String轉(zhuǎn)出int型,判斷能不能轉(zhuǎn)?如何轉(zhuǎn) shorts1=1;s1=s1+1;有什么錯(cuò)?shorts1=1;s1+=1;有什么錯(cuò) Int與Integer區(qū)別 1.1.7java基本類型與引用類型的區(qū)別 重寫重載封裝繼承多態(tài) Stack Concurrent包 StringStringBufferStringBuilderhashcode String中的hashcode以及 java文件讀取 Java反射 JDKNDKJREJNI static和final的區(qū)別... map,list,set區(qū)別 1.16Session和 IO BIOAIOselect NIO的原理 finalizefinalization publicprivatedefault equls和==的區(qū)別 1.30comparable接口和comparator接 接口和抽象 Runtime類 值傳遞與引用傳 泛型?與T的區(qū)別 枚舉類型字節(jié)碼層面理解 java注解類 字節(jié)流字符流 靜態(tài)內(nèi)部類匿名類 匿名類 二.集合類Set hashMap的原 HashMap問題jdk1.8優(yōu) 7.Hashmap中的key可以為任意對(duì)象或數(shù)據(jù)類型嗎 JDK1.7ConCurrentHashMap原 JDK1.7 JDK1.7 JDK1.7 JDK1.7&JDK1.8 JDK JDK1.8 JDK1.8get方 rehash過 . 參 擴(kuò) hashtable和hashmap的區(qū) HashMap和ConCurrentHashMap區(qū) ConcurrentHashMap和HashTable區(qū) Linkedhashmap與hashmap的區(qū) hashmap與hashset區(qū) Collections.sort內(nèi)部原 hash算 迭代器Iterator LISTArrayList,LinkedList和Vector的區(qū)別和實(shí)現(xiàn)原 快速失敗(fail-fast)和安全失敗(fail- 三鎖volatilesynchronizedLockReentrantLockAQS .volatile和 Volatile與synchronized區(qū) Synchronized原 可重入鎖 樂觀鎖和悲觀鎖阻塞鎖,自旋鎖,偏向鎖,輕量鎖,重量鎖。公平鎖非公 ReentrantLock和synchronized區(qū) 重入鎖、對(duì)象鎖、類鎖的關(guān) 四java多線程 .如何創(chuàng)建線程?哪種好 線程狀 一般線程和守護(hù)線程的區(qū) sleep yieldnotifynotifyAll 中斷線 多線程如何避免死 4,7多線程的好處以及問 多線程共用一個(gè)數(shù)據(jù)變量注意什么 線程通信方 線程 4.11.線程中拋出異常怎么 五.Java進(jìn)階ssh/ssm框 什么是Spring以及優(yōu) ApplicationContext和beanfactory的區(qū) SpringBean生命周 spring中bean的作用 Spring Spring 事 Spring Spring中設(shè)計(jì)模 Servlet生命周 Struts工作流 Struts工作原 do 攔截器與過濾器的區(qū) Struts中為什么不用考慮線程安 Struts2和Struts1區(qū) 六.Java內(nèi)存模型和垃圾回 什么是JMM內(nèi)存模型?(JMM和內(nèi)存區(qū)域劃分不是一回事 JMM中的happens-before原 內(nèi)存分 GC算法(YGCand 垃圾收集器 java類加載機(jī)制雙親委 java類加載的過 雙親委派機(jī) 破壞雙親委派模 內(nèi)存泄 .內(nèi)存泄露的案例分析jvm調(diào) jvm調(diào)優(yōu)目 案例分 jstatjmapjpsjinfo JVM參數(shù)設(shè) 內(nèi)存分配與回收策 面試問 一般Java堆是如何實(shí)現(xiàn)的 對(duì)象在內(nèi)存中的初始化過 對(duì)象的強(qiáng)、軟、弱和虛引 如何減少GC的次 老年代永久 七.juc juc概 List LinkedBlockingQueue和ArrayBlockingQueue迥 線程 線程池工作原 線程池分 線程池底層實(shí)現(xiàn)類ThreadPoolExecutor 線程池狀 四.設(shè)計(jì)模 什么是設(shè)計(jì)模 常見的設(shè)計(jì)模式及其JDK中案例 適配器模 迭代器模 代理模 觀察者模 裝飾器模 工廠模 建造者模 命令模 責(zé)任鏈模 享元模 中介者模 備忘錄模 組合模 模板方法模 單例模 1.非線程安全懶漢模 2、線程安全懶漢模 餓漢模 靜態(tài)類內(nèi)部加 雙重鎖校驗(yàn)?zāi)?懶漢模式與餓漢模式區(qū) 雙重校驗(yàn)鎖方法與線程安全的懶漢模式區(qū) 4.2設(shè)計(jì)模式六大原 4.3java動(dòng)態(tài)代 算 海量數(shù) 七.?dāng)?shù)據(jù)結(jié)構(gòu)與算 排 直接插入排 希爾排 冒泡排 快速排 直接選擇排 堆排 歸并排 基數(shù)排 二分查找 八.數(shù)據(jù) 索引B樹B+ 索引特點(diǎn)優(yōu)缺點(diǎn)適用場(chǎng) Mysql索引原理B+樹 索引分 innoDB與MyISAM引擎區(qū) 事務(wù)隔離級(jí)別(惡果:臟讀幻讀不可重復(fù)讀 數(shù)據(jù)庫特性 8.5.1.Sql優(yōu) 5種連接leftjoin、rightjoin、innerjoin,fulljoincross 數(shù)據(jù)庫范 數(shù)據(jù)庫連接 數(shù)據(jù)庫連接池原 數(shù)據(jù)庫連接池的示例代 DDLDML 分庫分 數(shù)據(jù)庫 封 封鎖協(xié)議(解決臟讀不可重復(fù)讀 死鎖活 解決死鎖的方 兩段鎖協(xié) GAP鎖(解決幻讀 next-key 其它問 limit20000如何優(yōu) 數(shù)據(jù)庫的隔離級(jí)別隔離級(jí)別如何實(shí) charvarchartext區(qū) dropdeletetruncate區(qū) 事 超鍵、候選鍵、主鍵、外鍵視 存儲(chǔ)過程與觸發(fā) 九.網(wǎng) http請(qǐng)求報(bào)文&http響應(yīng)報(bào) http報(bào)文頭部請(qǐng)求頭和響應(yīng) http請(qǐng)求方 http請(qǐng)求過 Get和Post區(qū) http狀態(tài) http長連接短連接HTTP協(xié)議是無狀 http1.1與http1.0的區(qū) http2.0與http1.0的區(qū) 轉(zhuǎn)發(fā)與重定向的區(qū) TCP TCP頭 TCP與UDP區(qū) TCP三次握 TCP四次揮 tcp粘包問題nagle算 tcp如何保證可靠性傳 TCP流量控制擁塞控 滑動(dòng)窗口機(jī) TCP狀態(tài)轉(zhuǎn) TIME_WAIT和 計(jì)算機(jī)網(wǎng)絡(luò)分層模 osi七 ICMP協(xié) RARP協(xié) 路由選擇協(xié)議OSPF IP報(bào) IP地址類 特殊的地 私有地 網(wǎng)絡(luò)攻 SYNFlood攻 DDOS攻 DNS欺 重放攻 SQL注 DNS瀏覽器中輸入U(xiǎn)RL到頁面加載的發(fā)生了什 https 什么是 https與http區(qū) https的通信過 SSL工作原 十操作系 進(jìn)程線 進(jìn)程線程區(qū) 進(jìn)程通信方 僵尸進(jìn) 進(jìn)程同步PV信號(hào) 死 死鎖避免-銀行家算 死鎖避免-安全序 同步異步阻塞非阻 操作系統(tǒng)CPU調(diào)度算 內(nèi)存管理方式(頁存儲(chǔ)段存儲(chǔ)段頁存儲(chǔ) 頁面置換算 概 OPT最優(yōu)頁面置換算 先進(jìn)先出置換算法 最近最久未使用(LRU)算 IO種類IO的原 IO種 設(shè)備I/0輸入輸出控制方 進(jìn)程打開同一個(gè)文件那么這兩個(gè)進(jìn)程得到的文件描述符(fd)相 物理地址虛擬地址邏輯地 十一Linux命 linux如何查看端口被哪個(gè)進(jìn)程占用 查看進(jìn)程打開了哪些文 查看cpu核的個(gè)數(shù)主 Linux如何創(chuàng)建守護(hù)進(jìn) Linux管道機(jī)制原 查看進(jìn)程下的線 linux 查看行數(shù)指令(比如第100行到第150行top linux進(jìn)程調(diào) 系統(tǒng)調(diào)用與庫函數(shù)的區(qū) cache和buffer的區(qū)別 10.13其它的小問 十一.安全加 數(shù)字簽 數(shù)字證 公私 非對(duì)稱加密 對(duì)稱密鑰 DH加密算 SHA 十二.代 讀寫文件 反 十三.面 十四.項(xiàng) 14.1.jieba分詞原 計(jì)算機(jī)磁 其 javajava8據(jù)類型裝箱拆1.1.1.8種基本數(shù)據(jù)類 long 裝箱和Java編譯器在基本數(shù)據(jù)類型和對(duì)應(yīng)的對(duì)象包裝類型之間做的一個(gè)轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成Double,等等。反之就是自動(dòng)拆箱。原始類型String轉(zhuǎn)出int判斷能不能轉(zhuǎn)?如何轉(zhuǎn)答:可以轉(zhuǎn)Integer.parseInt(sNumberFormatException:1)當(dāng)abcd2)3)當(dāng)你輸入超出int上限時(shí)Long.parseLong("123")long1.1.4shorts1=1;s1=s1+1;有什么錯(cuò)?shorts1=1;+=1shorts1=1;s1=s1+1s1+1int,那么將int賦予給short類型的變量s1會(huì)出現(xiàn)類型轉(zhuǎn)換錯(cuò)誤。shorts1=1;s1+=1來說+=java語言規(guī)定的運(yùn)算符,java編譯器會(huì)對(duì)它IntInteger 字節(jié)字符字節(jié)是存儲(chǔ)容量的基本單位,字符是數(shù)子,字母,漢子以及其他語言的各種符號(hào)1字節(jié)=81.1.7java基本類型與引用類型的(地址)重寫重載封裝繼承多好處:1.2.壞處:1.破壞封裝,子類與父類之間緊密耦合,子類依賴于父類的實(shí)現(xiàn),子類缺乏Jva重寫(override)又名覆蓋重載(vrlad)參數(shù)列表不同(個(gè)數(shù),順序,類型)三.Java中是否可以覆蓋(override)一個(gè)private或者是staticJavastatic方法不能被覆蓋定的static方法是編譯時(shí)靜態(tài)綁定的。static方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。javaprivate的方法private修飾的變量和方法只能在當(dāng)前類中使用,private變量或方法的,當(dāng)然也不能覆蓋。StackPriorityQueue是一個(gè)基于優(yōu)先級(jí)堆的無界隊(duì)列,它的元素是按照自然順序(naturalorder)排序的。在創(chuàng)建的時(shí)候,我們可以給它提供一個(gè)負(fù)責(zé)給元素排序的比較器。PriorityQueue不允許null值,因?yàn)樗麄儧]有自然順序,或者說們沒有任何的相關(guān)聯(lián)的比較器。最后,rortQueue不是線程安全的,入隊(duì)和出O(g(n))。堆樹中每個(gè)節(jié)點(diǎn)的子樹都是堆樹1.孩子節(jié)點(diǎn)的下標(biāo)例如下標(biāo)256 (5-1)/2=2(6-1)/2=2 add()區(qū)別:add(Ee)和offer(Ee)的語義相同,都是向優(yōu)先隊(duì)列中插入元素,只是Queue接口規(guī)定二者對(duì)插入失敗時(shí)的處理不同,前者在插入失敗時(shí)拋出異常,后則則會(huì)返回false。對(duì)于PriorityQueue這兩個(gè)方法其實(shí)沒什么差尋找隊(duì)列的頭部元素element()和peek()頭部元 時(shí)間復(fù)雜度為elmet(和pek(的那個(gè)元素,二者唯一的區(qū)別是當(dāng)方法失敗時(shí)前者拋出異常,后者返回nul。根據(jù)小頂堆的性質(zhì),堆頂那個(gè)元素就是全局最小的那個(gè);由于堆用數(shù)組表示,根據(jù)下標(biāo)關(guān)系,0下標(biāo)處的那個(gè)元素既是堆頂元素。所以直接返回?cái)?shù)組0下標(biāo)處的那個(gè)元素即可4.刪除元素remove()和區(qū)別:reov()和pol(失敗時(shí)前者拋出異常,后者返回nul。由于刪除操作會(huì)改變隊(duì)列的結(jié)構(gòu),為維護(hù)小頂堆的性質(zhì),需要進(jìn)行必要的調(diào)整。原理:該方法的作用是從k指定的位置開始,將x逐層向下與當(dāng)前點(diǎn)的左右孩子中較小的那個(gè)交換,直到x或等于左右孩子中的任何一個(gè)為止最大堆小堆上述代碼是構(gòu)建最大堆,最大堆的棧頂是堆的最大的元素,最大的元素比數(shù)組中任意一個(gè)元素小,說明了最大堆這些元素是數(shù)組中最小的幾個(gè)元素。上述代碼為何需要重現(xiàn)寫比較器函數(shù)答:需要查看優(yōu)先隊(duì)列的源碼,如下源碼所示,添加元素需要比較新的元素與父節(jié)點(diǎn)的元素,如果比較器比較結(jié)果大等于使得元素是對(duì)父節(jié)點(diǎn)的元素小才結(jié)束循環(huán),那么必須重新寫比較器函數(shù),調(diào)換兩者的比較順序即可。最小堆,與上述過程相Concurrent包Concurrent包里的其他東西:ArrayBlockingQueue、CountDownLatch面向?qū)γ嫦驅(qū)ο筇攸c(diǎn)、C++Java面向?qū)ο笤O(shè)計(jì)的不同、StringStringBufferStringBuilderhashcode二.StringStringhashcode四.String,是否可以繼承,“+”怎樣實(shí)現(xiàn),與StringBufferjava文件讀JavaJavaprivate成員的值嗎(setget函數(shù))Java.long.reflectJDKNDKJREJDKJREJava運(yùn)行時(shí)環(huán)境(JRE)Java虛擬機(jī)、Java核心類庫和支持文件。它不包含JREJavaDoc,Java調(diào)試器)Java應(yīng)用程序。JDKJDK了解NDK嗎?他和JDK有什么區(qū)別呢?JNI么?NDK技術(shù)使用過哪些呢?static和finalfinal使用finalJVM一 static方法是否可以覆蓋staticstatic方法是編譯時(shí)靜態(tài)綁定的。static方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。二.是否可以static環(huán)境中static變量?static修飾的變量并發(fā)下怎么保證變量的安全static修飾的變量什么時(shí)候賦值classAprivateclassAprivatestaticAa=newA();}public}}publicclassBextendsA{publicB(){}publicstaticvoidmain(String[]args){Bb=newB();}}classclassAprivatestaticAa=newA();}{}}publicclassBextendsA{publicB(){}publicstaticvoidmain(String[]args){Bb=newB();}}}AstaticAB匿名構(gòu)造器構(gòu)造器先與靜態(tài)代碼塊執(zhí)行,靜態(tài)代碼塊只執(zhí)行一classclassApublic}privatestaticAa=newA();}{}}publicclassBextendsA{publicB(){}publicstaticvoidmain(String[]args){Bb=new}}A1AgouzhaoBste.utprt(“00”)次,相當(dāng)于全局變量。map,list,set區(qū)1.16Session1.session 區(qū)cookieWeb送給瀏覽器的一在本地文件中給Webcookie。以后瀏覽器在給特Web的時(shí)候,同時(shí)會(huì)發(fā)送所有為該服務(wù)器存儲(chǔ)的cookie。下面列出了session和cookie的區(qū)別:無論客戶端瀏覽器做怎么樣的設(shè)置,session都應(yīng)該能正常工作??蛻舳丝梢赃x擇禁用cookie,但是,session仍然是能夠工作的,因?yàn)榭蛻舳藷o法禁用服務(wù)端的session。在存儲(chǔ)的數(shù)據(jù)量方面session和cookies也是不一樣的。session能夠存儲(chǔ)任意的Java只能存儲(chǔ)String類型的對(duì)象。Session和session區(qū)別session在服務(wù)器上以怎樣的形式存在sessionsession

Session的實(shí)現(xiàn)原理和應(yīng)用Session原理;既然Session是存儲(chǔ)在服務(wù)器內(nèi)存的,IO BIOAIOselect同步指的是用戶進(jìn)程觸發(fā)IO操作并等待或者輪詢的去查看IO操作是否就緒,而異步是指IOIOIO完IO一般來說I/O模型可以分為:同步阻塞,同步非阻塞,異步阻塞,異步非阻塞IOJAVAIO同步非阻塞IO:在此種方式下,用戶進(jìn)程發(fā)起一個(gè)IO操作以后邊可返回做其它事情,但是IOUAVA的NIOIO。IO:此種方式下是指應(yīng)用發(fā)IO后IOIO程序,這其實(shí)就是同步和異步最關(guān)鍵的區(qū)別,同步必須等IO呢select調(diào)用來完成select本身的實(shí)現(xiàn)方式是阻塞的,而select有個(gè)好處就是異步非阻塞IO:在此種模式下,用戶進(jìn)程只需要發(fā)起一個(gè)IO操作然后立即返回,等IO操IO處理就好了,不需要進(jìn)行實(shí)際的IO讀寫操作,因?yàn)檎嬲腎O讀取或者寫入操作已經(jīng)由內(nèi)NIONIODirectByteBuffer.IOByteStringjavaNIO的實(shí)現(xiàn)原理,我給他將了阻塞非阻塞,同步異步,Buffer與ChannelSelector的運(yùn)行機(jī)制,然后又問NIOThreadLocal維護(hù)變量時(shí),ThreadLocal為每個(gè)使用該變量的線程提供獨(dú)立的變本finalizefinalization一.finalize答:垃圾回收器(arbgececor)決定回收某對(duì)象時(shí),就會(huì)運(yùn)行該對(duì)象的fle()方法但是在Ja中很不幸,如果內(nèi)存總是充足的,那么垃圾回收可能永遠(yuǎn)不會(huì)進(jìn)行,也就是說fle()可能永遠(yuǎn)不被執(zhí)行,顯然指望它做收尾工作是靠不住的。那么fle()究竟是做什么的呢?它最主要的用途是回收特殊渠道申請(qǐng)的內(nèi)存。Ja程序有垃圾回收器,所JN(JvaNtveerfce)調(diào)用o-Jva程序C或C++,fae()finallyfinallyreturntry/catchreturn,比較愛考的是finally里沒有return語句,這時(shí)雖然finally里對(duì)return的值進(jìn)行了return三.finally代碼塊和finalize()方法有什么區(qū)無論是否拋出異常,finally代碼塊都會(huì)執(zhí)行,它主要是用來釋放應(yīng)用占用的資源。finalize()方法是Object類的一個(gè)protected方法,它是在對(duì)象被垃圾回收之前由Java虛擬.publicprivatedefault不寫時(shí)默認(rèn)為default。默認(rèn)對(duì)于同一個(gè)包中的其他類相當(dāng)于公開(public),不可以覆蓋private的方法,因?yàn)閜rivate修飾的變量和方法只能在當(dāng)前類中使hashcode()equals()toString()getClass()waitnotify()notifyAll()equls和==的區(qū)別StringBufferStringBuilder特殊,==equal異Java答:Java中有兩種異常:受檢查的(checked)異常和不受檢查的(unchecked)異常。throws語句在方法或者是構(gòu)造函數(shù)上聲明。throwthrowsthrow關(guān)鍵字用來在程序中明確的拋出異常,相反,throws語句用來表明方法java提供了兩種異常機(jī)制。一種是運(yùn)行時(shí)異常(RuntimeExepction),一種是檢查式異常(checkedexIOsql異常就屬于檢查式異常。對(duì)于這種異常,java編譯器要求我們必須對(duì)出現(xiàn)的這些異常進(jìn)行catch面對(duì)這種異常不管我們是否愿意,只能自己去寫一堆catch來捕捉這些異常。Java的異常處理機(jī)制,Java1.30comparable接口和comparator接comparable接口和comparator定Comparable接口:使用Array或Collection的排序方法時(shí),自定義類需要實(shí)現(xiàn)JavaComparable接口compareTo(TOBJ)方法,它被排序方法所使用,應(yīng)該重寫這個(gè)方法,如果“this”對(duì)象比傳遞的對(duì)象參數(shù)更小、相等或更大時(shí),它返回一個(gè)負(fù)整數(shù)、0或正整作為一個(gè)CEO,我想對(duì)雇員基于薪資進(jìn)行排序,一個(gè)HR想基于年齡對(duì)他們進(jìn)行排序。這就是我們需要使用Comparator接口的情景。因?yàn)镃pareTo(Objecto)方法Comaraor,該接口的compare(Objecto1,Objecto2)方法的實(shí)現(xiàn)需要傳遞兩個(gè)對(duì)象參數(shù),若第一個(gè)參0接口和抽象4,抽象類中的抽象方法的訪問類型可以是publicprotected和private,但接口中的抽象方法只能是public類型的,并且默認(rèn)即為publicabstract訪問類型可以任意,但接口中定義的變量只能是publicstatic類型,并且默認(rèn)為publicstaticfinal類型。Java(Java數(shù)uper,JavaJava可以,抽象類可以通過使用關(guān)鍵字implements來實(shí)現(xiàn)接口。因?yàn)樗鼈兪浅橄蟮模运鼈儾恍枰獙?shí)現(xiàn)所有的方法。好的做法是,提供一個(gè)抽象基類以及一個(gè)接口來聲明類型。這樣的例子是,java.util.List接口和相應(yīng)的java.util.AbstractList抽象類。因?yàn)锳bstractList實(shí)現(xiàn)了所有的通用方法,具體的實(shí)現(xiàn)像LinkedListArrayList不受實(shí)現(xiàn)所有方法的負(fù)擔(dān),List類的靈活性在一個(gè)地方實(shí)現(xiàn)共同的行為。EffectiveJava有個(gè)很好的章節(jié),介紹如何使用Java的抽象類和接口,值得閱讀。Javafinal不可以,Javafinalfinalfinal阻止類被擴(kuò)張。在現(xiàn)實(shí)世界中,抽象表示不完備性,而final是用來證明完整性。底線是,你不能讓你的Java類既abstract又final,同時(shí)使用,是一個(gè)編譯時(shí)錯(cuò)誤。JavastaticstaticJava中將方法聲明為static的準(zhǔn)則,不可以,你不能創(chuàng)建Java抽象類的實(shí)例,它們是不完全的。即使你的抽象類不包含任何完全的不應(yīng)該被實(shí)例化。當(dāng)一段代碼嘗試實(shí)例化一個(gè)抽象類時(shí)Java編譯器會(huì)拋錯(cuò)誤。abtactJavait接口的bstactit。Javaabstract聲明。Java接口中所有方法的聲明默認(rèn)是abstract的。這是抽象方法的例子publicvoidabstractprintVersion();JavamainmainmainSocketRuntimeRuntime:JVMJAVA程序?qū)嶋H上都是啟動(dòng)了一個(gè)JVMJVMRuntimeJVM為其實(shí)例化的。RuntimeRuntime類實(shí)例,但可以通過getRuntimeRuntime運(yùn)行時(shí)對(duì)象的引用。一旦得到了一個(gè)當(dāng)前的RuntimeRuntimeJava虛擬機(jī)的狀態(tài)和行為。查看官方文檔可以看到,Runtime以才會(huì)有g(shù)etRuntimepublicstaticRuntime直接使用此靜態(tài)方法可以取得Runtime值傳遞與引用,.,,jva.ja泛型?與Tpublicstatic<T>voidshow1(List<T>list){for(Objectobject:list){}}publicstaticvoidshow2(List<?>list){for(Objectobject:list){}}publicstaticvoidList<Student>list1=newArrayList<>();list1.add(newStudent("zhangsan",18,0));list1.add(newStudent("lisi",28,0));list1.add(newStudent("wangwu",24,1));//這里如果add(newTeacher(...));就會(huì)報(bào)錯(cuò),因?yàn)槲覀円呀?jīng)給List指定了數(shù)型為StudentSystem.out.println("************分割線//這里我們并沒有給List指定具體的數(shù)據(jù)類型,可以存放多種類型數(shù)Listlist2=newArrayList<>();list2.add(newStudent("zhaoliu",22,1));list2.add(newTeacher("sunba",30,0));}show2show1的區(qū)別了,list2StudentTeacher兩種類型,同樣可以輸T和?的區(qū)別啦//finalclassDayextends{//編譯器為我們添加的靜values()方法publicstaticDay[]values(){return}//編譯器為我們添加的靜態(tài)的valueOf()方法,注意間接調(diào)用了Enum也類的方publicstaticDayvalueOf(String{return(Day)Enum.valueOf(com/zejian/enumdemo/Day,}//私有構(gòu)造privateDay(Strings,int{super(s,}//前面定義的7種枚舉實(shí)publicstaticfinalDayMONDAY;publicstaticfinalDayTUESDAY;publicstaticfinalDayWEDNESDAY;publicstaticfinalDayTHURSDAY;publicstaticfinalDayFRIDAY;publicstaticfinalDaySATURDAY;publicstaticfinalDaySUNDAY;privatestaticfinalDay$VALUES[];{//實(shí)例化枚舉實(shí)MONDAY=newDay("MONDAY",0);TUESDAY=newDay("TUESDAY",1);WEDNESDAY=newDay("WEDNESDAY",2);THURSDAY=newDay("THURSDAY",3);FRIDAY=newDay("FRIDAY",4);SATURDAY=newDay("SATURDAY",5);SUNDAY=newDay("SUNDAY",6);$VALUES=(newDay[]MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,}}java注解類靜態(tài)內(nèi)部類匿名類static。這通常稱為嵌套類(nestedclass)。StaticNestedClass是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。想要理解static應(yīng)用于static的時(shí),就不是這樣了。嵌套類意味著:publicclassprivatestaticStringname="woobo";privateStringnum="X001";staticclassPerson{//public,protected,private//privateStringaddress=PrivateStaticStringpublicStringmail="kongbowoo@";//內(nèi)部類公有成員publicvoiddisplay(){//靜態(tài)內(nèi)部類不能訪問外部類的非靜態(tài)成員(包括非靜態(tài)變量和非靜態(tài)方法)System.out.println("Inner"+address);//}}publicvoid=newPerson();//外部類訪問內(nèi)部類的非靜態(tài)成員:System.out.println(Person.x);//外部類訪問內(nèi)部類的靜態(tài)成員:內(nèi)部類.}publicstaticvoidmain(String[]StaticTeststaticTest=newStaticTest();}}在靜態(tài)嵌套類內(nèi)部,不能訪問外部類的非靜態(tài)成員,Java語法中"靜態(tài)方法不能直接訪問非靜態(tài)成員"所限定.注意,外部類訪問內(nèi)部類的的成員有些特別,不能直接訪問,來訪問,這是因?yàn)殪o態(tài)嵌套內(nèi)的所有成員和方法默認(rèn)為靜態(tài)的了.同時(shí)注意,內(nèi)部靜態(tài)類只StaticTest范圍內(nèi)可見,若在其它類中引用或初始化,均是錯(cuò)誤的...靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問外部類的靜態(tài)變量,而不可訪問外部類的非靜態(tài)變量;三.非靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問外部類的非靜態(tài)變量。象可以直接生成:Outer.Innerin=newOuter.Inner();而不需要通過生成外部類對(duì)象來生成。這樣匿名內(nèi)部類訪問的外部類成員變量或成員方法必須用static修飾JavaI/O底層細(xì)節(jié),注意是底層細(xì)節(jié),而不是怎么用JVMtomcat容器啟動(dòng),jvmHasnMap缺點(diǎn)采用什么方法能保證每個(gè)中的數(shù)據(jù)更均勻解決沖突的方式,還有沒有其他方式(全域哈希Collection集合類中只能在IteratorjavajavaNIO,java多線程、線程池,javajavaConcurrentHashMapLinkedHashMap差異和適用情形ConcurrentHashMap分段鎖是如何實(shí)現(xiàn)的ConcurrentHashmapjdk1.8訪問的時(shí)候是怎么加鎖的ArrayDequeJDBC連接的過程jdbc連接過程JavaIO模型(BIO,NIO等TomcatArrayBlockingQueue源碼Javahashmaptreemaprehashacceptconnect,HashMap的負(fù)載因子.trycatchfinallycatch(tryreturn,finallymapreducereducemapreducepartionjavaIP地址的次數(shù)list,map,set之間的區(qū)別socketjavaioserviableuuid的作用HashMap什么情景下會(huì)用到反射(答注解、Spring配置文件、動(dòng)態(tài)代理)Java8Java8streamilst嗎?CpOWrrrListbjctStackArrayList的區(qū)別statementprestatement的區(qū)別util包下有哪幾種接口cookie禁用怎么辦newsocket實(shí)現(xiàn)過程,具體用的方法;怎么實(shí)現(xiàn)異步很常見的NullpointerexceptionBinderC++/JAVA/Cjava線程安全都體現(xiàn)在哪些方面,如果維護(hù)線程安全JUC包里的ArrayBlockingQueue還有LinkedBlockingQueue啥的又結(jié)合源碼說了通。Xml解析方式,原理優(yōu)缺點(diǎn)JavaJavaScript的區(qū)別二.集合類javahashMaphashcodeKey.hashcodekeyhascodeint32hashMap因?yàn)檎麄€(gè)過程都不需要加HashMapEntry類里面nextEntryA進(jìn)來,通過keyhashindex=0,記做:Entry[0]=Aindex0,現(xiàn)在怎么辦?HashMap會(huì)這樣做:B.nextA,Entry[0B,C,index0,C.nextB,Entry[0Cindex=0的A,B,C三個(gè)鍵值對(duì),next這個(gè)屬性鏈接在一起。所以疑問不用擔(dān)心。也就是說數(shù)組中存儲(chǔ)的是最后插入的元素。到這里為止,HashMapHashMapjdk1.8HashMap如果有很多相同key,后面的鏈很長的話,你會(huì)怎么優(yōu)化?或者你會(huì)用什么數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)?針對(duì)HashMap中某個(gè)Entry鏈太長,查找的時(shí)間復(fù)雜度可能達(dá)O(n),怎么優(yōu)化?HashMapHashmap為什么線程不安全(hash碰撞和擴(kuò)容導(dǎo)致)HashMapcollectionsHashmap中的key/dingjiping/article/details/51005799一個(gè)ConcurrentHashMap維護(hù)一個(gè)Segment數(shù)組,一個(gè)Segment個(gè)HashEntry數(shù)組。JDK1.7ConCurrentHashMapSegmentemt繼承了Renratocksmt樣對(duì)每個(gè)sgmnt中的數(shù)據(jù)需要同步操作的話都是使用每個(gè)sgmntsmt。ConCurrentHashMapSegmentGetPUTJDK1.7CurrentHashMapentryvaluenull,為null時(shí)才使用加鎖的方式再次去獲取。這里可以看出并沒有使用鎖,但是valuenull時(shí)候才是使用了加鎖?。?!Getcount0;countsegmententry0就不用找了put或者remove了這個(gè)segment中的一個(gè)entry,會(huì)不會(huì)導(dǎo)致兩個(gè)線程看到的count值不一致counttransientvolatileintcount;volatileJava5之后,JMM的保證:對(duì)volatile域的寫入操作happens-before于每一個(gè)后續(xù)對(duì)同一個(gè)域count變量的時(shí)候,即使恰好其他線程改變了segment也會(huì)體現(xiàn)出來在get代碼的①和②之間,另一個(gè)線程新增了一個(gè)如果另一個(gè)線程新增的這個(gè)entry又恰好是我們要get的,這事兒就比較微妙putentry的過程。HsEtryetflnrynryeEnryewHshnr(Kk,V,Hshnryet)ewet就可能會(huì)出現(xiàn)當(dāng)前線程得到的eEnrywewaue值為ul,在get代碼的①和②之間,另一個(gè)線程修改了一個(gè)entry的value是用volitale在get代碼的①之后,另一個(gè)線程刪除了一個(gè)假設(shè)我們的鏈表元素是:e1e2e3e4e3entry,HashEntrynexte2nexte4,如果我們get的也恰巧是e3,可能我們順著鏈表剛找到e1,這時(shí)另一個(gè)e3e3返count處能看到其他線程修改后的。①之后到②之間,如果再次發(fā)生了其他線程再刪除了entry節(jié)點(diǎn),就沒get的實(shí)際上是未更新過的!??!。33JDK1.7將當(dāng)前Segment中的table通過key的hashcode定位到HashEntry 遍歷該HashEntry,如果不為空則判斷傳入的key和當(dāng)前遍歷的key是否相等,相等則覆蓋舊的value。 不為空則需要新建一個(gè)HashEntry并加入到Segment中,同時(shí)會(huì)先判斷是否需最后會(huì)解除在1中所獲取當(dāng)前Segment的鎖可以說是首先找到segment確定是哪一個(gè)segment,然后在這個(gè)segment中遍歷查找key值是要查找的key值得entry,如果找到那么就修改該key,entry.JDK1.7JDK1.7&JDK1.8publicintsizepublicintsize()longn=sumCount();return((n<0L)?0:}volatileJDKSegmentCASsynchronized大于8的時(shí)候才去紅黑樹鏈表轉(zhuǎn)紅黑樹的閥值,當(dāng)table[i]下面的鏈表長度大于時(shí)就轉(zhuǎn)化為紅黑樹結(jié)JDK1.8根據(jù)key計(jì)算出hashcodef即為當(dāng)前key定位出的Node,如果為空表示當(dāng)前位置可以寫入數(shù)據(jù),利用hashcodeMOVED1,如果都不滿足,則利用synchronized鎖寫入數(shù)據(jù)(分為鏈表寫入和紅黑樹寫入)如果數(shù)量大于TREEIFY_THRESHOLDJDK1.8get根據(jù)計(jì)算出來的hashcoderehashRedisrehash:dictRehashrehashn個(gè)元素,由于在自動(dòng)調(diào)整大小時(shí)已設(shè)置好了ht[1]的大小,因此rehash的主要過程就ht[0]key,然后將該keyht[1]的桶的大小重新rehash,并在rehash完后將ht[0]指向ht[1],然后將ht[0]清空。在這個(gè)過程中rehashidx非常rehashht[0]的下標(biāo)位置。但是在調(diào)用dictFind的時(shí)候,可能需要對(duì)兩張dict表做查詢。唯一的優(yōu)化判斷是,當(dāng)key在ht[0]不存在且不在rehashing狀態(tài)時(shí),可以速度返回空。如果在rehashing狀態(tài),當(dāng)在ht[0]沒值的時(shí)候,還ht[1]里查找。dictAddrehashing,則把值插入到ht[1].參table是一個(gè)Entry[]數(shù)組類型,而Entry實(shí)際上就是一個(gè)單向鏈表。哈希表的"key-value鍵值對(duì)"都是存儲(chǔ)在EntrycountHashtable的大小,它是HashtablethresholdHashtable的閾值,用于判斷是否需要調(diào)整Hashtable的容量。threshold的值="容量*加載因子"loadFactormodCountfail-fast從下面的代碼中我們可以看出,Hashtablekeyvalue是不允許為空的,當(dāng)我們Hashtablekeyhash值,然hashtablevalue值替換或者插入新的元prevnull了,那么說明第一個(gè)元素就是要?jiǎng)h除的元素,那么就擴(kuò)0.750.75

HashTable11hashtablehashmapHashMap和ConCurrentHashMap區(qū)ConcurrentHashMap和HashTable區(qū)ConcurrentHashMap僅僅鎖定map的某個(gè)部分,而Hashtable則會(huì)鎖定整個(gè)map。hashtable(同一把鎖):使用synchronized來保證線程安全,但效率非常低下。當(dāng)一個(gè)線程訪問同步方法時(shí),其他線程也訪問同步方法,可能會(huì)進(jìn)入阻塞或輪詢狀態(tài),如使用putput也get,競(jìng)爭(zhēng)會(huì)越來越激烈效率越oncurrenthahmap((oncurenthashapSeentahEntrySeenteentantLokashEntyoncurrenthahmapSeent數(shù)組。SeentashapSeentashEntyashEntrySeent守護(hù)著一個(gè)ahEntryahEntrySeent。Linkedhashmap與hashmapLinkedHashMap中的Entry增加了兩個(gè)指針before和after,它們分別用于維護(hù)節(jié)上還是做了一定的調(diào)整,比如,在LinkedHashMap中向哈希表中插入新Entry的同時(shí),還會(huì)通過Entry的addBefore方法將其鏈入到雙向鏈表中。LinkedHashMapHashMapresize操作,但是程(transfer方法)進(jìn)行了重寫在讀取操作上,LinkedHashMap中重寫了HashMap中的get中的getEntry方法獲取Entry對(duì)于HashSet而言,它是基于HashMap實(shí)現(xiàn)的Hashset源碼/blog/673143Hashset如何保證集合的沒有重復(fù)元素?可以看出hashset底層是hashmap但是存儲(chǔ)的是一個(gè)對(duì)象,hashset實(shí)際將該ekeyhashmap,key值(e)相同時(shí),只是進(jìn)行更value,并不會(huì)新增加,所以set中的元素不會(huì)進(jìn)行改變。hashmap與hashset區(qū)Collections.sort內(nèi)部原重寫importimportjava.util.*;classxd{inta;intxd(inta,intb){this.a=a;this.b=b;}}publicclassMainpublicstaticvoidmain(String[]arg){xda=newxd(2,3);xdb=newxd(4,1);xdc=newArrayList<xd>array=newArrayList<>();Collections.sort(array,newComparator<xd>(){publicintcompare(xdo1,xdo2){if(o1.a>o2.a)returnelseif(o1.a<o2.a)return-1;return}forfor(inti=0;i<array.size();i++)for(inti=0;i<array.size();i++)}}hashjavamapTreeMap和TreeSetSetTreeSet,那說一下TreeSet為什么能夠保證有序?java中hashMap.Collections.sort()集合框架的理解對(duì)Java的集合框架有什么樣的了解,用過哪些集合類,各自的效率以及casabaList/Set/Queue接口及其實(shí)現(xiàn)類HashSet/TreeSet/HashMap/TreeMap/hashTable常問:hashSet和HashMap有什么區(qū)別。各自的底層實(shí)現(xiàn)是基于什么的。迭代器Iterator1.IteratorListIterator什么答:Iterator可用來遍歷SetList集合,但是ListIterator只能用來遍歷List。Iterator對(duì)集合只能是前向遍歷,ListIterator既可以前向也可以后ListIterator實(shí)現(xiàn)了Iterator接口,并包含其他的功能,比如:增加元素,替快速失敗(fail-fast)和安全失敗(fail-safe)的區(qū)別是什么答:Iteratorjava.utilConcurrentModificationException拋出這樣的異常。Enumeration接口和Iterator接口的區(qū)別有哪些答:EnumerationIterator2Enumeration安全,因?yàn)槠渌€程不能夠修改正在被iteratorIteratorEnumerationLISTArrayList,LinkedList和Vector的區(qū)別和實(shí)現(xiàn)Vector:一.ArrayListLinkedListArrayListLinkedList都實(shí)現(xiàn)了ListrraListO()時(shí)間復(fù)雜度對(duì)元素進(jìn)行ikeLstO()。相對(duì)于rrListikeLstLinkedListArrayList更占內(nèi)存,因LinkedList為每一個(gè)節(jié)點(diǎn)存儲(chǔ)了兩個(gè)引用,一個(gè)指二.VetorarraylistLinkedlistArrayList就是動(dòng)態(tài)Array的復(fù)雜版本,動(dòng)態(tài)的增加和減少元素.當(dāng)更多的元素加入到ArrayList中時(shí),其大小將會(huì)動(dòng)態(tài)地增長。它的元素可以通過get/set因?yàn)锳rrayList本質(zhì)上是一個(gè)數(shù)組。初始容量為10。1.插入元素的時(shí)候可不會(huì)縮小容量。2.擴(kuò)容增長Arraylist增長原來0.5倍3.Arraylist沒有設(shè)置增長空間VectorArrayList類似,區(qū)別在Vector是同步類(synchronized因此,開銷就ArrayList要大。初始容量為10。實(shí)現(xiàn)了隨機(jī)訪問接口,可以隨機(jī)訪問。Vector是內(nèi)部是動(dòng)態(tài)數(shù)組的形式來存儲(chǔ)數(shù)據(jù)的。1.Vector還可以設(shè)置增長的空間大小,2Vector增長原13.vector線程同步ikeLst是一個(gè)雙鏈表,在添加和刪除元素時(shí)具有比rraList更好的性能.但在et與st方面弱于rraLis.當(dāng)然,這些對(duì)比都是指數(shù)據(jù)量很大或者操作很頻繁的情況下的對(duì)Qeue接口istr()pek(),ol().ArrayList和LinkedList的使用場(chǎng)景,其中add方法的實(shí)現(xiàn)ArrayList,LinkedList的實(shí)現(xiàn)Arraylist三.使用ArrayList答:常用的迭代器設(shè)計(jì)模式,iterator1、迭代器的hasNext方法的作用是判斷當(dāng)前位置是否是數(shù)組最后一個(gè)位置,相等為false,true。ext使用extmdCont是否與此時(shí)的不相等,不相等說明集合的大小被修改過,如果是會(huì)拋出CncrrnodifcioEcetonet四.?dāng)?shù)組(Array和列表(ArrayList)有什么區(qū)別?什么時(shí)候應(yīng)該使用Array而不rrayrraListrryrrListrrList提供更多的方法和特性,如:ddAll(),removeAll(),terator()等等。使用基本數(shù)據(jù)類型或者知道數(shù)據(jù)元素?cái)?shù)量的時(shí)候可以考慮Array;ArrayList處理固定數(shù)量的基本類型數(shù)據(jù)類型時(shí)會(huì)自動(dòng)裝五.ArrayList和VectorArrayListVectorfail-fastArrayListVectornull值,也可以使用索引值對(duì)元素進(jìn)行隨機(jī)訪問。VectorArrayListArrayList,如果CopyOnWriteArrayList。但是,ArrayList比Vector在使用上,ArrayList更加通用,因?yàn)镃ollections工具類容易獲取同步列表和只讀列快速失敗(fail-fast)和安全失敗(fail-一:快速失?。╢ail—(增)Cncrrntodfcionxcpon。原理:迭代器在遍歷時(shí)直接訪問集合中的內(nèi)容,并且在遍歷過程中使modCo用hashNext()/next()遍歷下一個(gè)元素之前,都會(huì)檢測(cè)modCount變量是否為expectedmodCount值,是的話就返回遍歷;否則拋出異常,終止遍歷。注意:這里異常的拋出條件是modCount!=expectedmodCount這個(gè)條件。如果集合發(fā)生變化時(shí)修改modCount值剛好又設(shè)置為了expectedmodCount值,則異常不會(huì)bug。場(chǎng)景:java.util包下的集合類都是快速失敗的,不能在多線程下發(fā)生并發(fā)修改(迭代過二:安全失?。╢ail—Cncrrntodfcionxcpon。Cocurretodifctinxcptonja.tlconcurrent外一個(gè)線程在修改這個(gè)集合,就會(huì)拋出Concurrentodifcation異常,jva.utl下都是快速失敗。jauiconcrrent ReentrantLockAQS.volatile和1.volatile和synchronizedVolatile與synchronized區(qū)別SynchronizedSynchronizedJvm對(duì)象都有對(duì)象頭,對(duì)象頭是實(shí)現(xiàn)synchronizedMarkWord的結(jié)構(gòu)(不固定)MarkWordmonitor(監(jiān)視器鎖)monitormonitor被某個(gè)線程持有后,monitor來看一下monitord的實(shí)現(xiàn)monitor是由ObjectMonitor程ContentionListEntryList:ContentionListEntryWaitSetwaitWaitOnDeck:任何時(shí)刻最多只能有一個(gè)線程正在競(jìng)爭(zhēng)鎖,該線程稱為Owner:獲得鎖的線程稱為!OwnersynchronizatedlockLock多出的三大優(yōu)勢(shì)(嘗試非阻塞加鎖,嘗試超時(shí)加鎖,LocksynchronizedReentrantLockvolatile理解,這個(gè)問題很常見,答出要點(diǎn):java(重入鎖volatile關(guān)鍵字要減小鎖粒度呢(JavaAtomicInteger),CAS,源代碼沒有公開),CASJava編程寫一個(gè)會(huì)導(dǎo)致死鎖的程CAS的思想很簡(jiǎn)單:三個(gè)參數(shù),一個(gè)當(dāng)前內(nèi)存值V、舊的預(yù)期值A(chǔ)、即將更新的值B,當(dāng)且僅當(dāng)預(yù)期A和內(nèi)V相同時(shí),將內(nèi)存值修改B并返true,否則什么都不做,并返回false。實(shí)現(xiàn)原理CAS中有Unsafe類中的compareAndSwapInt方法Unsafe類中的compareAndSwapInt,是一個(gè)本地方法,該方法的實(shí)現(xiàn)位于unsafe.cpp中先想辦法拿到變量valueAtomic::cmpxchgxe是原內(nèi)存的值。其中Atomic::cmpxchg中對(duì)此指令加lock前綴,而lock前綴有兩個(gè)特性1,禁止該指令與前面和后面的讀寫指令重排序2,把寫緩沖區(qū)的所有數(shù)據(jù)刷新到內(nèi)存中這兩點(diǎn)保證了內(nèi)存屏障效果,保證了CAS同時(shí)具有volatile讀和volatileCAS解讀示例樂觀鎖和悲觀鎖阻塞鎖,自旋鎖,偏向鎖,輕量鎖,重量鎖。公平鎖非公平鎖自旋鎖引入背景:那些處于ContetionList、EntryList、WaitSet中的線程均處于阻狀態(tài),阻塞操作由操作系統(tǒng)完成(在Lnu下通過phdmuelck函數(shù))。線程被Lnux)偏向鎖引入背景:避免重入鎖的CAShttps:///articles/YVrQFj1須把這個(gè)線程阻塞并塞入隊(duì)尾(插入隊(duì)尾一般通過一個(gè)CS保持插入過程中沒有ReentrantLock和synchronized區(qū)別常復(fù)雜的同步應(yīng)用中,請(qǐng)考慮使用ReentrantLock,特別是遇到下面2種需求的notify哪個(gè)線程ReentrantLock可中斷可超時(shí)嘗試非阻塞加鎖,嘗試超時(shí)加鎖,嘗試可相應(yīng)tryLock():booleanfalse,truetryLock(longtime,TimeUnitunit)tryLock()就是給了一個(gè)時(shí)間期限,保重入鎖、對(duì)象鎖、類鎖的關(guān)四java程.如何創(chuàng)建線程?哪種好4種方式可以用來創(chuàng)建線程:1.Thread2.Runnable3.應(yīng)用程Executor4.Callable接口實(shí)現(xiàn)Runnable接口比繼承Thread類所具

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論