{eval=Array;=+count(Array);}
由于我每年都會面試不少程序員,其中就包括相當(dāng)數(shù)量的Java程序員,所以就這個問題,跟頭條的廣大網(wǎng)友交流一下。
Java工程師面試也是有一定的側(cè)重點(diǎn),做不同的研發(fā)方向,問題上也有所區(qū)別。另外,初級程序員與主力程序員的面試問題也有很大的不同,總的來說就是方向與定位相結(jié)合,下面為大家一一描述。
面試Java初級程序員的流程相對來說比較簡單,通常是兩輪面試,首輪面試一般進(jìn)行技術(shù)面試,次輪面試通常是有HR統(tǒng)一安排關(guān)于職業(yè)規(guī)劃以及心理方面的面試(大部分情況是走個流程),這兩輪面試中,技術(shù)面試起到了關(guān)鍵的作用。
面試初級程序員(2-3級)一般從技術(shù)細(xì)節(jié)入手,要通過面試,首先要知道初級程序員都需要具備哪些能力。下面先描述一下作為一個Java初級程序員(2-3級,Web方向為主)應(yīng)該滿足哪些要求:
清晰Java面向?qū)ο缶幊滩襟E,理解封裝、繼承、多態(tài)等核心概念,理解基本的前端內(nèi)容(HTML、CSS、JavaScript)。
能理解程序流程圖描述的功能需求,能獨(dú)立完成功能模塊的編寫、部署,能理解功能模塊之間的交互關(guān)系,能完成功能模塊之間的消息傳遞和處理。
能理解MVC、DAO等框架,并在實(shí)際開發(fā)中熟練使用,能獨(dú)立完成前后臺的數(shù)據(jù)處理,能完成各種認(rèn)證功能的處理。
能使用數(shù)據(jù)庫連接池等基本優(yōu)化方式提高程序運(yùn)行效率。
能理解容器在程序運(yùn)行中的作用,能配置各種容器的基本參數(shù)。
對程序的安全性有一定的理解,能避免初級的安全性問題。
能處理一定數(shù)量的并發(fā)問題,能解決多線程情況下的數(shù)據(jù)安全問題。
能理解不同角色的任務(wù)分配,能進(jìn)行有效溝通。
常見框架的使用,比如SpringMVC等。
初級程序員的工作往往是編寫程序基本功能組件,是保證程序質(zhì)量的一個重要環(huán)節(jié),所以團(tuán)隊的整體能力往往并不是由架構(gòu)師決定的,反而是由眾多的初級程序員決定的。
主力程序員的面試通常要3輪或4輪,當(dāng)然如果你走到了后面的兩輪,基本上選擇權(quán)就在你手里了,后面的兩輪面試公司會給你安排一個看似比較美好的職業(yè)發(fā)展規(guī)劃,因為主力程序員不僅要編碼通常還承擔(dān)者一部分管理工作(項目責(zé)任人),也是管理層比較倚重的。
主力程序員的技術(shù)面試流程并沒有那么多細(xì)節(jié)問題,首先要了解一下做過哪些項目,在項目中都承擔(dān)了什么任務(wù),項目中遇到了哪些問題,怎么解決的等等。通常主力程序員的面試時間也比較長(2至3個小時),面試的氛圍也比初級程序員要輕松很多。
主力程序員大部分是推薦上來的,有人力資源公司推薦的,也有公司內(nèi)推上來的,當(dāng)然也有主動投送簡歷要求面試的。一般對主力程序員都會有背景調(diào)查,這一方面是對公司負(fù)責(zé),另一方面也是對應(yīng)聘者應(yīng)有的尊重。
希望通過我的回答,大家能對Java程序員的面試有一個基本的了解。
我是悟空問答的簽約作者,致力于為頭條網(wǎng)友提供優(yōu)質(zhì)的科技類問題解答,關(guān)注我,跟我一起交流關(guān)于科技類的問題吧。
謝邀~
從第二家單位開始,就負(fù)責(zé)社招的面試工作(技術(shù)方面),近兩兩年,也開始負(fù)責(zé)校招的工作,和大家分享一下我一般會問的問題,和一些我比較看重的地方,大家可以借鑒。
其實(shí)說實(shí)話,我們單位校招沒有什么優(yōu)勢,一般來面試我們公司開發(fā)崗位的,最好也就是中等偏上的985學(xué)校(最低要求是一本)。所以一般來說,只要不是溝通能力特別差的,基本都會通過。但是面試流程還是要走的,我一般問的都特別簡單:
我主要是面試乙方(外包),初級基本上要兩年以上工作經(jīng)驗;基本上簡歷上寫什么,我就問什么,所以我建議,如果你不會的東西,不要隨便寫在簡歷上。
先做自我介紹,主要看一下表達(dá)能力和第一印象,所以我建議大家面試之前都準(zhǔn)備一套自我介紹的詞兒。
基本上還是從項目出發(fā),先問一下業(yè)務(wù)上的流程,這個階段的開發(fā),我對整個項目的流程問的少,還是主要問單個模塊的業(yè)務(wù)流程。
技術(shù)方面主要以使用為主,就是看看你是否到底使用過。比如寫了使用過Mybatis,那么我可能會問#和$的區(qū)別,如果寫了使用過Spring的話,那么我可能會問依賴注入有幾種方式,諸如此類。
SQL方面會問一些復(fù)雜SQL的寫法,比如一些數(shù)據(jù)庫函數(shù),左連接右連接之類的。
工作三到五年的。
還是從項目出發(fā),問的可能會稍微的多一些,希望對方可以對整個項目甚至是某一個行業(yè)有著整體的了解。
技術(shù)方面不僅僅要求是使用過了,我的要求可能會更高一些。如果還是Mybatis,那么我就可能會問到一級二級緩存,甚至是自定義緩存,如果是Spring的話,可能就會問到Bean是如何被管理的。
一些主流技術(shù)和框架,可能你沒寫在簡歷上,但是我也會問一問。比如現(xiàn)在很常見的內(nèi)存數(shù)據(jù)庫、Spring Boot等。
Java基礎(chǔ)知識可能會問,比如JVM相關(guān)、Java的集合等。
SQL方面,優(yōu)化是我主要問的,比如索引失效的問題。
高級的一般都招不來,哈哈,沒有面試過。
java基礎(chǔ),反射,多線程,static的作用,集合,數(shù)據(jù)庫等基礎(chǔ)知識,還有就是數(shù)據(jù)庫,前端,java web(servlet,xml),ajax是面試的時候問的比較多的,以及一些主流框架的使用。還有做過的項目,以及在項目中遇到哪些比較難解決的問題,最后是怎么解決的。
學(xué)習(xí)java是在“如鵬網(wǎng)”上學(xué)習(xí)的,有詳細(xì)的課程體系,有網(wǎng)絡(luò)的地方就可以學(xué)習(xí),每個章節(jié)的后面都有相應(yīng)的練習(xí)題和面試口才題,需要以錄音的方式進(jìn)行提交,實(shí)時把控學(xué)習(xí)質(zhì)量,為面試做準(zhǔn)備。java重要知識點(diǎn)列舉。
在準(zhǔn)備面試之前,簡歷是很必要的,怎么寫簡歷,投簡歷,才能吸引面試官的眼球,簡歷上哪些內(nèi)容可以寫,哪些內(nèi)容是不能寫的。
在面試的過程中,應(yīng)該注意哪些問題,對于面試官提出來的問題,應(yīng)該怎么去回答。
看過“如鵬網(wǎng)”的免費(fèi)公開課《程序員找工作的六大環(huán)節(jié)揭秘》,從寫簡歷,投簡歷,面試,簽協(xié)議等方面進(jìn)行講解,分析的挺透徹的,可以去看看。
需要java視頻教程和“程序員找工作的六大環(huán)節(jié)揭秘”視頻教程的可在評論區(qū)留言哦。
換個角度,談?wù)勎覀冋腥藭r,都會問那些問題:
面試Java初級工程師:我們通常會問Java基礎(chǔ)知識,包括Java語法、Java工程化的一些知識,重點(diǎn)看面試人的綜合素質(zhì),是否可以培養(yǎng);
面試Java中級工程師:我們通常會問Java常用框架的掌握情況,sql語法,Mysql等知識,做過哪些項目?比如:MyBatis和Hibernate的區(qū)別,sql關(guān)聯(lián)查詢等等;
面試Java高級工程師:我們通常會問Java如何調(diào)優(yōu),Spring Cloud、Dubbo等分布式開發(fā)框架是否用過?微服務(wù)的理解等等;
不管初中高級工程師都會問到的問題是:溝通能力?邏輯思維能力?
給你列舉了以下幾項: 如果以下都高清楚了,你已經(jīng)是一個頂尖的java工程師了!
一、Java基礎(chǔ)
1. String類為什么是final的。
1.線程安全2.支持字符串常量池數(shù)據(jù)共享,節(jié)省資源,提高效率(因為如果已經(jīng)存在這個常量便不會再創(chuàng)建,直接拿來用)
2. HashMap的源碼,實(shí)現(xiàn)原理,底層結(jié)構(gòu)。
總的來說,HashMap就是數(shù)組+鏈表(哈希表或者散列函數(shù))的組合實(shí)現(xiàn),每個數(shù)組元素存儲一個鏈表的頭結(jié)點(diǎn),本質(zhì)上來說是哈希表“拉鏈法”的實(shí)現(xiàn)。
HashMap的鏈表元素對應(yīng)的是一個靜態(tài)內(nèi)部類Entry,Entry主要包含key,value,next三個元素
主要有put和get方法,put的原理是,通過hash&length-1計算index,此時記作Entry[index]=該元素。如果index相同
就是新入的元素放置到Entry[index],原先的元素記作Entry[index].next
get就比較簡單了,先遍歷數(shù)組,再遍歷鏈表元素。
null key總是放在Entry數(shù)組的第一個元素(允許存放一個空鍵值對的原因)
解決hash沖突的方法:鏈地址法
再散列rehash的過程:確定容量超過目前哈希表的容量,重新調(diào)整table 的容量大小,當(dāng)超過容量的最大值時
HashMap的容量size乘以負(fù)載因子[默認(rèn)0.75] = threshold 將會觸發(fā)擴(kuò)容
3. 說說你知道的幾個Java集合類:list、set、queue、map實(shí)現(xiàn)類咯。。。
queue的實(shí)現(xiàn)類: AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQueue, LinkedBlockingQueue, DelayQueue, LinkedList, PriorityBlockingQueue, PriorityQueue和ArrayDqueue
4. 描述一下ArrayList和LinkedList各自實(shí)現(xiàn)和區(qū)別
5. Java中的隊列都有哪些,有什么區(qū)別。
Queue: 基本上,一個隊列就是一個先入先出(FIFO)的數(shù)據(jù)結(jié)構(gòu)
Queue接口與List、Set同一級別,都是繼承了Collection接口。LinkedList實(shí)現(xiàn)了Deque接 口。
Queue的實(shí)現(xiàn)
1、沒有實(shí)現(xiàn)的阻塞接口的LinkedList: 實(shí)現(xiàn)了java.util.Queue接口和java.util.AbstractQueue接口
內(nèi)置的不阻塞隊列: PriorityQueue 和 ConcurrentLinkedQueue
PriorityQueue 和 ConcurrentLinkedQueue 類在 Collection Framework 中加入兩個具體集合實(shí)現(xiàn)。
PriorityQueue 類實(shí)質(zhì)上維護(hù)了一個有序列表。加入到 Queue 中的元素根據(jù)它們的天然排序(通過其 java.util.Comparable 實(shí)現(xiàn))或者根據(jù)傳遞給構(gòu)造函數(shù)的 java.util.Comparator 實(shí)現(xiàn)來定位。
ConcurrentLinkedQueue 是基于鏈接節(jié)點(diǎn)的、線程安全的隊列。并發(fā)訪問不需要同步。因為它在隊列的尾部添加元素并從頭部刪除它們,所以只要不需要知道隊列的大 小, ConcurrentLinkedQueue 對公共集合的共享訪問就可以工作得很好。收集關(guān)于隊列大小的信息會很慢,需要遍歷隊列。
2)實(shí)現(xiàn)阻塞接口的:
java.util.concurrent 中加入了 BlockingQueue 接口和五個阻塞隊列類。它實(shí)質(zhì)上就是一種帶有一點(diǎn)扭曲的 FIFO 數(shù)據(jù)結(jié)構(gòu)。不是立即從隊列中添加或者刪除元素,線程執(zhí)行操作阻塞,直到有空間或者元素可用。
五個隊列所提供的各有不同:
* ArrayBlockingQueue :一個由數(shù)組支持的有界隊列。
* LinkedBlockingQueue :一個由鏈接節(jié)點(diǎn)支持的可選有界隊列。
* PriorityBlockingQueue :一個由優(yōu)先級堆支持的無界優(yōu)先級隊列。
* DelayQueue :一個由優(yōu)先級堆支持的、基于時間的調(diào)度隊列。
* SynchronousQueue :一個利用 BlockingQueue 接口的簡單聚集(rendezvous)機(jī)制。
6. 反射中,Class.forName和classloader的區(qū)別
class.forName()除了將類的.class文件加載到j(luò)vm中之外,還會對類進(jìn)行解釋,執(zhí)行類中的static塊。
而classLoader只干一件事情,就是將.class文件加載到j(luò)vm中,不會執(zhí)行static中的內(nèi)容,只有在newInstance才會去執(zhí)行static塊。
Class.forName(name, initialize, loader)帶參函數(shù)也可控制是否加載static塊。并且只有調(diào)用了newInstance()方法采用調(diào)用構(gòu)造函數(shù),創(chuàng)建類的對象
7. Java7、Java8的新特性(baidu問的,好BT)
java7有一些比較重要的更新,如異常處理增加了被抑制的異常、捕獲多異常、try-with-resource自動釋放資源等,還有應(yīng)用了G1垃圾回收器、switch可以使用String類型、泛型自動判斷類型、fork/join框架把任務(wù)細(xì)分并使用多處理器處理、支持二進(jìn)制字面量等
毫無疑問,Java 8是自Java 5(2004年)發(fā)布以來Java語言最大的一次版本升級,Java 8帶來了很多的新特性,比如編譯器、類庫、開發(fā)工具和JVM(Java虛擬機(jī))。在這篇教程中我們將會學(xué)習(xí)這些新特性,并通過真實(shí)例子演示說明它們適用的場景。
最最重要的是Java8開始支持了Lambda表達(dá)式
8. Java數(shù)組和鏈表兩種結(jié)構(gòu)的操作效率,在哪些情況下(從開頭開始,從結(jié)尾開始,從中間開始),哪些操作(插入,查找,刪除)的效率高
9. Java內(nèi)存泄露的問題調(diào)查定位:jmap,jstack的使用等等
10. string、stringbuilder、stringbuffer區(qū)別
11. hashtable和hashmap的區(qū)別
HashMap是非線程同步的,HashTable是線程同步的。
HashMap允許null作為鍵或者值,HashTable不允許
HashTable中有個一個contains方法,HashMap去掉了此方法
效率上來講,HashMap因為是非線程安全的,因此效率比HashTable高
hashTable繼承Dictionary,而HashMap繼承Abstract
13 .異常的結(jié)構(gòu),運(yùn)行時異常和非運(yùn)行時異常,各舉個例子
14. String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他們之間用 == 比較的結(jié)果
編譯時優(yōu)化
15. String 類的常用方法
16. Java 的引用類型有哪幾種
對象的強(qiáng)、軟、弱和虛引用(四種引用)
在JDK 1.2以前的版本中,若一個對象不被任何變量引用,那么程序就無法再使用這個對象。也就是說,只有對象處于可觸及(reachable)狀態(tài),程序才能使用它。從JDK 1.2版本開始,把對象的引用分為4種級別,從而使程序能更加靈活地控制對象的生命周期。這4種級別由高到低依次為:強(qiáng)引用、軟引用、弱引用和虛引用。
⑴強(qiáng)引用(StrongReference)
強(qiáng)引用是使用最普遍的引用。如果一個對象具有強(qiáng)引用,那垃圾回收器絕不會回收它。當(dāng)內(nèi)存空間不足,Java虛擬機(jī)寧愿拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強(qiáng)引用的對象來解決內(nèi)存不足的問題。 ps:強(qiáng)引用其實(shí)也就是我們平時A a = new A()這個意思。
⑵軟引用(SoftReference)
如果一個對象只具有軟引用,則內(nèi)存空間足夠,垃圾回收器就不會回收它;如果內(nèi)存空間不足了,就會回收這些對象的內(nèi)存。只要垃圾回收器沒有回收它,該對象就可以被程序使用。軟引用可用來實(shí)現(xiàn)內(nèi)存敏感的高速緩存(下文給出示例)。
軟引用可以和一個引用隊列(ReferenceQueue)聯(lián)合使用,如果軟引用所引用的對象被垃圾回收器回收,Java虛擬機(jī)就會把這個軟引用加入到與之關(guān)聯(lián)的引用隊列中。
⑶弱引用(WeakReference)
弱引用與軟引用的區(qū)別在于:只具有弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它所管轄的內(nèi)存區(qū)域的過程中,一旦發(fā)現(xiàn)了只具有弱引用的對象,不管當(dāng)前內(nèi)存空間足夠與否,都會回收它的內(nèi)存。不過,由于垃圾回收器是一個優(yōu)先級很低的線程,因此不一定會很快發(fā)現(xiàn)那些只具有弱引用的對象。
弱引用可以和一個引用隊列(ReferenceQueue)聯(lián)合使用,如果弱引用所引用的對象被垃圾回收,Java虛擬機(jī)就會把這個弱引用加入到與之關(guān)聯(lián)的引用隊列中。
⑷虛引用(PhantomReference)
“虛引用”顧名思義,就是形同虛設(shè),與其他幾種引用都不同,虛引用并不會決定對象的生命周期。如果一個對象僅持有虛引用,那么它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。
虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區(qū)別在于:虛引用必須和引用隊列 (ReferenceQueue)聯(lián)合使用。當(dāng)垃圾回收器準(zhǔn)備回收一個對象時,如果發(fā)現(xiàn)它還有虛引用,就會在回收對象的內(nèi)存之前,把這個虛引用加入到與之 關(guān)聯(lián)的引用隊列中。
ReferenceQueue queue = new ReferenceQueue ();
PhantomReference pr = new PhantomReference (object, queue);
程序可以通過判斷引用隊列中是否已經(jīng)加入了虛引用,來了解被引用的對象是否將要被垃圾回收。如果程序發(fā)現(xiàn)某個虛引用已經(jīng)被加入到引用隊列,那么就可以在所引用的對象的內(nèi)存被回收之前采取必要的行動。
17. 抽象類和接口的區(qū)別
18. java的基礎(chǔ)類型和字節(jié)大小。
19. Hashtable,HashMap,ConcurrentHashMap 底層實(shí)現(xiàn)原理與線程安全問題(建議熟悉 jdk 源碼,才能從容應(yīng)答)
20. 如果不讓你用Java Jdk提供的工具,你自己實(shí)現(xiàn)一個Map,你怎么做。說了好久,說了HashMap源代碼,如果我做,就會借鑒HashMap的原理,說了一通HashMap實(shí)現(xiàn)
21. Hash沖突怎么辦?哪些解決散列沖突的方法?
開放地址法 插入元素時,如果發(fā)生沖突,算法會簡單的從該槽位置向后循環(huán)遍歷hash表,直到找到表中的下一個空槽,并將該元素放入該槽中(會導(dǎo)致相同hash值的元素挨在一起和其他hash值對應(yīng)的槽被占用)。查找元素時,首先散列值所指向的槽,如果沒有找到匹配,則繼續(xù)從該槽遍歷hash表,直到:(1)找到相應(yīng)的元素;(2)找到一個空槽,指示查找的元素不存在,(所以不能隨便刪除元素);(3)整個hash表遍歷完畢(指示該元素不存在并且hash表是滿的)
拉鏈法(hashMap采用的是該種方法)
再散列(雙重散列,多重散列)
建立一個公共溢出區(qū)
22. HashMap沖突很厲害,最差性能,你會怎么解決?從O(n)提升到log(n)咯,用二叉排序樹的思路說了一通
23. rehash
24. hashCode() 與 equals() 生成算法、方法怎么重寫
如何重寫equals()方法
如果你決定要重寫equals()方法,那么你一定要明確這么做所帶來的風(fēng)險,并確保自己能寫出一個健壯的equals()方法.一定要注意的一點(diǎn)是,在重寫equals()后,一定要重寫hashCode()方法.具體原因稍候再進(jìn)行說明.
我們先看看 JavaSE 7 Specification中對equals()方法的說明:
It is reflexive: for any non-null reference value x, x.equals(x) should return true.
It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
For any non-null reference value x, x.equals(null) should return false.
這段話用了很多離散數(shù)學(xué)中的術(shù)數(shù).簡單說明一下:
1. 自反性:A.equals(A)要返回true.
2. 對稱性:如果A.equals(B)返回true, 則B.equals(A)也要返回true.
3. 傳遞性:如果A.equals(B)為true, B.equals(C)為true, 則A.equals(C)也要為true. 說白了就是 A = B , B = C , 那么A = C.
4. 一致性:只要A,B對象的狀態(tài)沒有改變,A.equals(B)必須始終返回true.
5. A.equals(null) 要返回false.
相信只要不是專業(yè)研究數(shù)學(xué)的人,都對上面的東西不來電.在實(shí)際應(yīng)用中我們只需要按照一定的步驟重寫equals()方法就可以了.為了說明方便,我們先定義一個程序員類(Coder):
[java] view plain copy
class Coder {
private String name;
private int age;
// getters and setters
}
我們想要的是,如果2個程序員對象的name和age都是相同的,那么我們就認(rèn)為這兩個程序員是一個人.這時候我們就要重寫其equals()方法.因為默認(rèn)的equals()實(shí)際是判斷兩個引用是否指向內(nèi)在中的同一個對象,相當(dāng)于 == . 重寫時要遵循以下三步:
1. 判斷是否等于自身.
[java] view plain copy
if(other == this)
return true;
2. 使用instanceof運(yùn)算符判斷 other 是否為Coder類型的對象.
[java] view plain copy
if(!(other instanceof Coder))
return false;
3. 比較Coder類中你自定義的數(shù)據(jù)域,name和age,一個都不能少.
[java] view plain copy
Coder o = (Coder)other;
return o.name.equals(name) && o.age == age;
看到這有人可能會問,第3步中有一個強(qiáng)制轉(zhuǎn)換,如果有人將一個Integer類的對象傳到了這個equals中,那么會不會扔ClassCastException呢?這個擔(dān)心其實(shí)是多余的.因為我們在第二步中已經(jīng)進(jìn)行了instanceof 的判斷,如果other是非Coder對象,甚至other是個null, 那么在這一步中都會直接返回false, 從而后面的代碼得不到執(zhí)行的機(jī)會.
上面的三步也是<Effective Java>中推薦的步驟,基本可保證萬無一失.
如何重寫hashCode()方法
在JavaSE 7 Specification中指出,"Note that it is generally necessary to override the hashCode method whenever this method(equals) is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes."
如果你重寫了equals()方法,那么一定要記得重寫hashCode()方法.我們在大學(xué)計算機(jī)數(shù)據(jù)結(jié)構(gòu)課程中都已經(jīng)學(xué)過哈希表(hash table)了,hashCode()方法就是為哈希表服務(wù)的.
當(dāng)我們在使用形如HashMap, HashSet這樣前面以Hash開頭的集合類時,hashCode()就會被隱式調(diào)用以來創(chuàng)建哈希映射關(guān)系.稍后我們再對此進(jìn)行說明.這里我們先重點(diǎn)關(guān)注一下hashCode()方法的寫法.
<Effective Java>中給出了一個能最大程度上避免哈希沖突的寫法,但我個人認(rèn)為對于一般的應(yīng)用來說沒有必要搞的這么麻煩.如果你的應(yīng)用中HashSet中需要存放上萬上百萬個對象時,那你應(yīng)該嚴(yán)格遵循書中給定的方法.如果是寫一個中小型的應(yīng)用,那么下面的原則就已經(jīng)足夠使用了:
要保證Coder對象中所有的成員都能在hashCode中得到體現(xiàn).
對于本例,我們可以這么寫:
[java] view plain copy
@Override
public int hashCode() {
int result = 17;
result = result * 31 + name.hashCode();
result = result * 31 + age;
return result;
}
其中int result = 17你也可以改成20, 50等等都可以.看到這里我突然有些好奇,想看一下String類中的hashCode()方法是如何實(shí)現(xiàn)的.查文檔知:
"Returns a hash code for this string. The hash code for a String object is computed as
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.)"
對每個字符的ASCII碼計算n - 1次方然后再進(jìn)行加和,可見Sun對hashCode的實(shí)現(xiàn)是很嚴(yán)謹(jǐn)?shù)? 這樣能最大程度避免2個不同的String會出現(xiàn)相同的hashCode的情況.
重寫equals()而不重寫hashCode()的風(fēng)險
在Oracle的Hash Table實(shí)現(xiàn)中引用了bucket的概念.如下圖所示:
從上圖中可以看出,帶bucket的hash table大致相當(dāng)于哈希表與鏈表的結(jié)合體.即在每個bucket上會掛一個鏈表,鏈表的每個結(jié)點(diǎn)都用來存放對象.Java通過hashCode()方法來確定某個對象應(yīng)該位于哪個bucket中,然后在相應(yīng)的鏈表中進(jìn)行查找.在理想情況下,如果你的hashCode()方法寫的足夠健壯,那么每個bucket將會只有一個結(jié)點(diǎn),這樣就實(shí)現(xiàn)了查找操作的常量級的時間復(fù)雜度.即無論你的對象放在哪片內(nèi)存中,我都可以通過hashCode()立刻定位到該區(qū)域,而不需要從頭到尾進(jìn)行遍歷查找.這也是哈希表的最主要的應(yīng)用.
如:
當(dāng)我們調(diào)用HashSet的put(Object o)方法時,首先會根據(jù)o.hashCode()的返回值定位到相應(yīng)的bucket中,如果該bucket中沒有結(jié)點(diǎn),則將 o 放到這里,如果已經(jīng)有結(jié)點(diǎn)了, 則把 o 掛到鏈表末端.同理,當(dāng)調(diào)用contains(Object o)時,Java會通過hashCode()的返回值定位到相應(yīng)的bucket中,然后再在對應(yīng)的鏈表中的結(jié)點(diǎn)依次調(diào)用equals()方法來判斷結(jié)點(diǎn)中的對象是否是你想要的對象.
下面我們通過一個例子來體會一下這個過程:
我們先創(chuàng)建2個新的Coder對象:
[java] view plain copy
Coder c1 = new Coder("bruce", 10);
Coder c2 = new Coder("bruce", 10);
假定我們已經(jīng)重寫了Coder的equals()方法而沒有重寫hashCode()方法:
[java] view plain copy
@Override
public boolean equals(Object other) {
System.out.println("equals method invoked!");
if(other == this)
return true;
if(!(other instanceof Coder))
return false;
Coder o = (Coder)other;
return o.name.equals(name) && o.age == age;
}
然后我們構(gòu)造一個HashSet,將c1對象放入到set中:
[java] view plain copy
Set<Coder> set = new HashSet<Coder>();
set.add(c1);
再執(zhí)行:
[java] view plain copy
System.out.println(set.contains(c2));
我們期望contains(c2)方法返回true, 但實(shí)際上它返回了false.
c1和c2的name和age都是相同的,為什么我把c1放到HashSet中后,再調(diào)用contains(c2)卻返回false呢?這就是hashCode()在作怪了.因為你沒有重寫hashCode()方法,所以HashSet在查找c2時,會在不同的bucket中查找.比如c1放到05這個bucket中了,在查找c2時卻在06這個bucket中找,這樣當(dāng)然找不到了.因此,我們重寫hashCode()的目的在于,在A.equals(B)返回true的情況下,A, B 的hashCode()要返回相同的值.
我讓hashCode()每次都返回一個固定的數(shù)行嗎
有人可能會這樣重寫:
[java] view plain copy
@Override
public int hashCode() {
return 10;
}
如果這樣的話,HashMap, HashSet等集合類就失去了其 "哈希的意義".用<Effective Java>中的話來說就是,哈希表退化成了鏈表.如果hashCode()每次都返回相同的數(shù),那么所有的對象都會被放到同一個bucket中,每次執(zhí)行查找操作都會遍歷鏈表,這樣就完全失去了哈希的作用.所以我們最好還是提供一個健壯的hashCode()為妙.
二、Java IO
1. 講講IO里面的常見類,字節(jié)流、字符流、接口、實(shí)現(xiàn)類、方法阻塞。
2. 講講NIO。
3. String 編碼UTF-8 和GBK的區(qū)別?
4. 什么時候使用字節(jié)流、什么時候使用字符流?
5. 遞歸讀取文件夾下的文件,代碼怎么實(shí)現(xiàn)
三、Java Web
1. session和cookie的區(qū)別和聯(lián)系,session的生命周期,多個服務(wù)部署時session管理。
2. servlet的一些相關(guān)問題
3. webservice相關(guān)問題
4. jdbc連接,forname方式的步驟,怎么聲明使用一個事務(wù)。舉例并具體代碼
5. 無框架下配置web.xml的主要配置內(nèi)容
6. jsp和servlet的區(qū)別
四、JVM
1. Java的內(nèi)存模型以及GC算法
2. jvm性能調(diào)優(yōu)都做了什么
3. 介紹JVM中7個區(qū)域,然后把每個區(qū)域可能造成內(nèi)存的溢出的情況說明
4. 介紹GC 和GC Root不正常引用。
5. 自己從classload 加載方式,加載機(jī)制說開去,從程序運(yùn)行時數(shù)據(jù)區(qū),講到內(nèi)存分配,講到String常量池,講到JVM垃圾回收機(jī)制,算法,hotspot。反正就是各種擴(kuò)展
6. jvm 如何分配直接內(nèi)存, new 對象如何不分配在堆而是棧上,常量池解析
7. 數(shù)組多大放在 JVM 老年代(不只是設(shè)置 PretenureSizeThreshold ,問通常多大,沒做過一問便知)
8. 老年代中數(shù)組的訪問方式
9. GC 算法,永久代對象如何 GC , GC 有環(huán)怎么處理
10. 誰會被 GC ,什么時候 GC
11. 如果想不被 GC 怎么辦
12. 如果想在 GC 中生存 1 次怎么辦
五、開源框架
1. hibernate和ibatis的區(qū)別
2. 講講mybatis的連接池。
3. spring框架中需要引用哪些jar包,以及這些jar包的用途
4. springMVC的原理
5. springMVC注解的意思
6. spring中beanFactory和ApplicationContext的聯(lián)系和區(qū)別
BeanFactory特點(diǎn)
BeanFactory常用的實(shí)現(xiàn)類是DefaultListableBeanFactory,調(diào)用者只需要使用getBean()方法就可以獲得指定的引用,無須關(guān)心Bean的實(shí)例化過程。創(chuàng)建Spring容器的實(shí)例時,必須提供Spring容器管理的Bean的詳細(xì)配置信息。Spring的配置信息通常采用XML配置文件來設(shè)置,因此,創(chuàng)建BeanFactory實(shí)例時,應(yīng)該提供XML配置文件作為參數(shù)。XML配置文件通常使用Resource對象傳入。
Resource isr = new ClassPathResource("beans.xml");
//Resource isr = new FileSystemResource("beans.xml");
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
new XmlBeanDefinitionReader(beanFactory).loadBeanDefinition(isr);
ApplicationContext特點(diǎn)
ApplicationContext常用的實(shí)現(xiàn)類是FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和AnnotationConfigApplicationContext。如果在Web應(yīng)用中使用Spring容器,則通常使用XmlWebApplicationContext、AnnotationConfigApplicationContext兩個實(shí)現(xiàn)類。如果需要使用多個XML配置文件創(chuàng)建Spring容器,可以使用FileSystemXmlApplicationContext或者是ClassPathXmlApplicationContext。
除了提供BeanFactory所支持的所有功能外,ApplicationContext還有額外的功能
默認(rèn)初始化所有的Singleton,也可以通過配置取消預(yù)初始化。
繼承MessageSource,因此支持國際化。
資源訪問,比如訪問URL和文件。
事件機(jī)制。
同時加載多個配置文件。
以聲明式方式啟動并創(chuàng)建Spring容器。
由于ApplicationContext會預(yù)先初始化所有的Singleton Bean,于是在系統(tǒng)創(chuàng)建前期會有較大的系統(tǒng)開銷,但一旦ApplicationContext初始化完成,程序后面獲取Singleton Bean實(shí)例時候?qū)⒂休^好的性能。也可以為bean設(shè)置lazy-init屬性為true,即Spring容器將不會預(yù)先初始化該bean。
7. spring注入的幾種方式(循環(huán)注入)
8. spring如何實(shí)現(xiàn)事物管理的
set注入(通常也叫屬性注入),構(gòu)造函數(shù)注入,接口注入(這個現(xiàn)在基本不用),注解注入(@Autowire)
9. springIOC
10. spring AOP的原理
11. hibernate中的1級和2級緩存的使用方式以及區(qū)別原理(Lazy-Load的理解)
12. Hibernate的原理體系架構(gòu),五大核心接口,Hibernate對象的三種狀態(tài)轉(zhuǎn)換,事務(wù)管理。
六、多線程
1. Java創(chuàng)建線程之后,直接調(diào)用start()方法和run()的區(qū)別
2. 常用的線程池模式以及不同線程池的使用場景
3. newFixedThreadPool此種線程池如果線程數(shù)達(dá)到最大值后會怎么辦,底層原理。
4. 多線程之間通信的同步問題,synchronized鎖的是對象,衍伸出和synchronized相關(guān)很多的具體問題,例如同一個類不同方法都有synchronized鎖,一個對象是否可以同時訪問?;蛘咭粋€類的static構(gòu)造方法加上synchronized之后的鎖的影響。
5. 了解可重入鎖的含義,以及Lock 和synchronized的區(qū)別
1. lock是一個接口,而synchronized是java的一個關(guān)鍵字,synchronized是內(nèi)置的語言實(shí)現(xiàn);(具體實(shí)現(xiàn)上的區(qū)別在《Java虛擬機(jī)》中有講解底層的CAS不同,以前有讀過現(xiàn)在又遺忘了。)
2. synchronized在發(fā)生異常時候會自動釋放占有的鎖,因此不會出現(xiàn)死鎖;而lock發(fā)生異常時候,不會主動釋放占有的鎖,必須手動unlock來釋放鎖,可能引起死鎖的發(fā)生。(所以最好將同步代碼塊用try catch包起來,finally中寫入unlock,避免死鎖的發(fā)生。)
3. lock等待鎖過程中可以用interrupt來終端等待,而synchronized只能等待鎖的釋放,不能響應(yīng)中斷;
4. lock可以通過trylock來知道有沒有獲取鎖,而synchronized不能;
5. Lock可以提高多個線程進(jìn)行讀操作的效率。(可以通過readwritelock實(shí)現(xiàn)讀寫分離)
6. 同步的數(shù)據(jù)結(jié)構(gòu),例如concurrentHashMap的源碼理解以及內(nèi)部實(shí)現(xiàn)原理,為什么他是同步的且效率高
7. atomicinteger和Volatile等線程安全操作的關(guān)鍵字的理解和使用
8. 線程間通信,wait和notify
9. 定時線程的使用
10. 場景:在一個主線程中,要求有大量(很多很多)子線程執(zhí)行完之后,主線程才執(zhí)行完成。多種方式,考慮效率。
11. 進(jìn)程和線程的區(qū)別
12. 什么叫線程安全?舉例說明
13. 線程的幾種狀態(tài)
14. 并發(fā)、同步的接口或方法
15. HashMap 是否線程安全,為何不安全。 ConcurrentHashMap,線程安全,為何安全。底層實(shí)現(xiàn)是怎么樣的。
16. J.U.C下的常見類的使用。 ThreadPool的深入考察; BlockingQueue的使用。(take,poll的區(qū)別,put,offer的區(qū)別);原子類的實(shí)現(xiàn)。
17. 簡單介紹下多線程的情況,從建立一個線程開始。然后怎么控制同步過程,多線程常用的方法和結(jié)構(gòu)
18. volatile的理解
19. 實(shí)現(xiàn)多線程有幾種方式,多線程同步怎么做,說說幾個線程里常用的方法
七、網(wǎng)絡(luò)通信
1. http是無狀態(tài)通信,http的請求方式有哪些,可以自己定義新的請求方式么。
2. socket通信,以及長連接,分包,連接異常斷開的處理。
3. socket通信模型的使用,AIO和NIO。
4. socket框架netty的使用,以及NIO的實(shí)現(xiàn)原理,為什么是異步非阻塞。
5. 同步和異步,阻塞和非阻塞。
6. OSI七層模型,包括TCP,IP的一些基本知識
7. http中,get post的區(qū)別
8. 說說http,tcp,udp之間關(guān)系和區(qū)別。
9. 說說瀏覽器訪問www.taobao.com,經(jīng)歷了怎樣的過程。
10. HTTP協(xié)議、 HTTPS協(xié)議,SSL協(xié)議及完整交互過程;
11. tcp的擁塞,快回傳,ip的報文丟棄
12. https處理的一個過程,對稱加密和非對稱加密
13. head各個特點(diǎn)和區(qū)別
14. 說說瀏覽器訪問www.taobao.com,經(jīng)歷了怎樣的過程。
八、數(shù)據(jù)庫MySql
1. MySql的存儲引擎的不同
2. 單個索引、聯(lián)合索引、主鍵索引
3. Mysql怎么分表,以及分表后如果想按條件分頁查詢怎么辦(如果不是按分表字段來查詢的話,幾乎效率低下,無解)
4. 分表之后想讓一個id多個表是自增的,效率實(shí)現(xiàn)
5. MySql的主從實(shí)時備份同步的配置,以及原理(從庫讀主庫的binlog),讀寫分離
6. 寫SQL語句。。。
7. 索引的數(shù)據(jù)結(jié)構(gòu),B+樹
8. 事務(wù)的四個特性,以及各自的特點(diǎn)(原子、隔離)等等,項目怎么解決這些問題
9. 數(shù)據(jù)庫的鎖:行鎖,表鎖;樂觀鎖,悲觀鎖
10. 數(shù)據(jù)庫事務(wù)的幾種粒度;
11. 關(guān)系型和非關(guān)系型數(shù)據(jù)庫區(qū)別
九、設(shè)計模式
1. 單例模式:飽漢、餓漢。以及餓漢中的延遲加載,雙重檢查
2. 工廠模式、裝飾者模式、觀察者模式。
3. 工廠方法模式的優(yōu)點(diǎn)(低耦合、高內(nèi)聚,開放封閉原則)
十、算法
1. 使用隨機(jī)算法產(chǎn)生一個數(shù),要求把1-1000W之間這些數(shù)全部生成。(考察高效率,解決產(chǎn)生沖突的問題)
2. 兩個有序數(shù)組的合并排序
3. 一個數(shù)組的倒序
4. 計算一個正整數(shù)的正平方根
5. 說白了就是常見的那些查找、排序算法以及各自的時間復(fù)雜度
6. 二叉樹的遍歷算法
7. DFS,BFS算法
9. 比較重要的數(shù)據(jù)結(jié)構(gòu),如鏈表,隊列,棧的基本理解及大致實(shí)現(xiàn)。
10. 排序算法與時空復(fù)雜度(快排為什么不穩(wěn)定,為什么你的項目還在用)
11. 逆波蘭計算器
12. Hoffman 編碼
13. 查找樹與紅黑樹
十一、并發(fā)與性能調(diào)優(yōu)
1. 有個每秒鐘5k個請求,查詢手機(jī)號所屬地的筆試題(記得不完整,沒列出),如何設(shè)計算法?請求再多,比如5w,如何設(shè)計整個系統(tǒng)?
2. 高并發(fā)情況下,我們系統(tǒng)是如何支撐大量的請求的
3. 集群如何同步會話狀態(tài)
4. 負(fù)載均衡的原理
5 .如果有一個特別大的訪問量,到數(shù)據(jù)庫上,怎么做優(yōu)化(DB設(shè)計,DBIO,SQL優(yōu)化,Java優(yōu)化)
6. 如果出現(xiàn)大面積并發(fā),在不增加服務(wù)器的基礎(chǔ)上,如何解決服務(wù)器響應(yīng)不及時問題“。
7. 假如你的項目出現(xiàn)性能瓶頸了,你覺得可能會是哪些方面,怎么解決問題。
8. 如何查找 造成 性能瓶頸出現(xiàn)的位置,是哪個位置照成性能瓶頸。
9. 你的項目中使用過緩存機(jī)制嗎?有沒用用戶非本地緩存
————————————————
版權(quán)聲明:本文為CSDN博主「zhouwei1818」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhouwei1818/article/details/80180872
如果可以的話,**建議以一個和面試官交流的心態(tài)去面試**。而且普通面試大部分問答都是有一些套路的。
面試的過程中,肯定會有答不上來的時候,這個時候,坦然的說不知道,就行了;或者再說出來點(diǎn)你知道的,例如思路。**重點(diǎn)** 答不出來的時候一定要淡定,你和面試官是平等的!反過來讓你問面試官,他也肯定有答不上來的!
java基礎(chǔ)必考,線程、集合(list、map、linklist、array,什么無key遍歷map啊,鏈表倒置啊,這幾個東西的數(shù)據(jù)結(jié)構(gòu)和插入查詢特性啊,線程創(chuàng)建方式和同步?。┫嚓P(guān)必問。最好能說清楚常見的設(shè)計模式、要能手寫一個單列模式。
**框架** :主要說你熟練的,會問一些,但是一般都比較基礎(chǔ),只要找;除非,你說你看過這個框架的源碼,剛好面試官也比較了解。
**數(shù)據(jù)庫** 可能會問你都用過什么,最好有一個用的熟練的,沒事兒去配置一下主從數(shù)據(jù)庫費(fèi)不了多少時間,然后就好答這個問題了。sql,一般是必考的,分組查詢,排序,連結(jié)查詢。很可能會讓你手寫sql語句。我還遇到了一個讓你查前多少行的,以及不用框架實(shí)現(xiàn)分頁查詢的。
**源碼** 其實(shí)源碼沒有那么的高大上,即使你說你熟練源碼,剛好面試官也熟悉,他最多也只能問問你這框架從啟動到配置完成,從接收請求,到處理完成再返回的 ** 流程**然后再問一下,你從這些源碼里學(xué)到了什么?這個問題,建議去百度(我都是臨面試了才去百度這些有套路的問題)。
**前端** 你要是像我一樣,囂張到簡歷寫的連前端你都會不少,(不過現(xiàn)在確實(shí)很多公司的招聘后端的要求也要會一些前端)那就很可能要多面你一會兒了,再問問你簡歷里寫的用過的框架,手寫幾串js的代碼啊,還有可能會通過js代碼考察下對DOM概念的理解。正則表達(dá)式也是有可能的。
一般算法和數(shù)據(jù)結(jié)構(gòu)是必考的,操作系統(tǒng)也經(jīng)常被問。如果是校招的話,筆試中還會有一些排列組合啊,語文表達(dá)啊,思維拓展?。阏Σ蝗ジ咧姓??高中剛畢業(yè)的時候比較符合需求?。。浯?,筆試過了還會有好幾輪面試,不管你說你扣過源碼,還是跟過還可以的項目,都會被往深里問,再往深里問,再再往深里問!
下邊是一個簡單的面試記錄
問:說說你的突出點(diǎn)
答:java基礎(chǔ)扎實(shí)(這個慌說的次數(shù)多了,現(xiàn)在說起來都沒感覺了,哈哈),框架使用熟練(這個慌說了你們也發(fā)現(xiàn)不了,所以也沒啥感覺),熟悉Tomcat源碼,springMVC源碼和結(jié)構(gòu)。
問:如果想要統(tǒng)計springMVC每一個訪問時長,放到log文件里,你在哪里做這個統(tǒng)計?為什么?
答:在preHandle攔截器里記錄訪問開始的時間,在postHandle里判斷是哪個訪問,計算訪問時間并存儲。
問:在posthandler里計算,并存儲是吧。答:是。
問:為什么?
答了一個錯誤答案,然后又是一頓鄙視。,,
再問:用一個什么變量存?ThreadLocal?還是一個函數(shù)內(nèi)部局部變量,?
答:線程內(nèi),(其實(shí)是在猜)。
問:為什么? 你不要猜,也不用在乎我的反應(yīng),無論你答什么我都會問你為什么。
答:函數(shù)內(nèi)變量可能會不能覆蓋整個訪問的歷程,,一頓鄙視,然后突然反應(yīng)過來,不對,我說的有問題,外層函數(shù)是可以的,那就放在函數(shù)內(nèi)局部變量里,節(jié)省資源。
問:如果我想把計算結(jié)果存到log里,在哪里做這個事情?
答:(悠長的停頓) 在posthandler處理結(jié)束,返回請求之前
問:為什么?
答:不占用處理請求的資源,(錯誤答案,已經(jīng)慌亂)
問:確定?
答:不確定,,,停頓,,不對 ,還是會占用資源。
問:然后呢
答:(不說話了,,,)(后來想想,這事兒應(yīng)該另起一個線程去做)
(鄙視狀,,,)
問:恩,說說Tomcat
答:(內(nèi)心:幸虧沒問tomcat優(yōu)化,JVM優(yōu)化,,不過,說說?說啥啊?難道說說這個干啥用的?還是說說哪個公司出的?說這些會不會直接趕人啊,,,就這樣過了最少一分鐘,哈哈)然后我就說了下tomcat的結(jié)構(gòu),和啟動過程。
接著問:Tomcat和里面的Servlet是一個進(jìn)程還是多個進(jìn)程,
答:一個進(jìn)程內(nèi)
一頓鄙視,再問:為什么,,,??
答:因為我覺得進(jìn)程是分配資源的基本單位,一般來講,一個應(yīng)用就是一個進(jìn)程。
問:你確定?
(內(nèi)心:大爺?shù)模烙嬕呀?jīng)掛了,那我還怕個球,,,于是乎,坐直,平視,語氣和神態(tài)突然就平靜了)
答:確定。
問:你大學(xué)什么專業(yè)?學(xué)過操作系統(tǒng)嗎?
答:計算機(jī)科學(xué)與技術(shù),當(dāng)然學(xué)過,我清楚的記得這一點(diǎn),進(jìn)程是分配資源的基本單位,不過,可能太久了,記不清了(其實(shí)內(nèi)心是:你長的美,你說的都對)。
問:ok,一個應(yīng)用可以啟多個進(jìn)程嗎?
答:不可以
問:(鄙視狀)確定?
答:(平靜狀)不太確定
問:呵呵
答:麻煩您給講講吧,我不太懂。
問:一個應(yīng)用當(dāng)然是可以啟多個線程的,更何況還有跨應(yīng)用的線程調(diào)用,資源也是可以動態(tài)分配的,,,(當(dāng)時沒聽太懂,也記不清了。)。末了來一句,難道你就沒打開過你的資源管理器看過嗎?
答:當(dāng)然看過,不過都是卡了才看,看哪個程序占用太高,給結(jié)束了。(內(nèi)心:看過,但是跟這個問題有毛關(guān)系嗎??)
上邊是倆個長問題,還有一些其他的,例如:
問:你覺得要做一個厲害的程序員應(yīng)該具備哪些特點(diǎn)?
這個就是一些,F(xiàn)Q啊,工具啊,總結(jié)啊,交流啊什么的;比如說,善用google,要至少對一個跨平臺的工具很了解,善于學(xué)習(xí)最新的技術(shù),善于掌握有力的工具,多逛各大社區(qū),善于總結(jié)。(我就隨便一寫,找工作的話,要提前準(zhǔn)備類似問題。)
問:我看你學(xué)了這么多東西,但是好像沒有認(rèn)真的去思考過為什么,你有沒有想過當(dāng)你記憶達(dá)到一個上限時你還能學(xué)什么?你還能干什么?
這個當(dāng)然是要反駁的,我說我當(dāng)然有思考,然后問你思考的啥,然后答當(dāng)時就想知道Tomcat到springMVC的銜接是怎么銜接的,然后被鄙視:那你直接打幾個斷點(diǎn)調(diào)試一下不完了嗎,java的調(diào)試不是很強(qiáng)嗎?(貌似這個他也不太確定。而我也不知道斷點(diǎn)打到哪去,更不用提怎么調(diào)試,哈哈)。
問:我看你這寫的有一個了解分布式處理,分布式處理是什么?我怎么沒聽過。(這個就是一個概念問題,不重要。)
java面試主體分為兩個部分:
(1).如何理解面向?qū)ο蟮木幊?/p>
(2).如何理解內(nèi)存中的堆棧和靜態(tài)存儲區(qū)的用法
(3).是否可以繼承String 類
(4).String和StringBuilder、StringBuffer區(qū)別?
等等這些常見的java基礎(chǔ)類題目
(1).spring mvc 工作機(jī)制原理
(2).Struts工作機(jī)制?為什么要使用Struts?
(3).如何優(yōu)化Hibernate?
現(xiàn)在只是簡單的列舉幾個面試題目,很多公司的面試直接都沒有筆試,因為水平的高低通常意義上講幾句話就能測試出水平的深淺,所以在面試需要注意以下幾點(diǎn):
1.簡歷上面不要摻雜太多的水份
2.面試過程中要懂得實(shí)事求是,不要吹的太厲害,中間遇上一個技術(shù)高手幾句話就能讓自己下不了臺
3.對于一些沒有工作經(jīng)驗的初學(xué)者能做的事情,就是老老實(shí)實(shí)把基礎(chǔ)做好,沒有經(jīng)驗?zāi)茏C明自己的只有基礎(chǔ),也只有打好自己的基礎(chǔ)才靠譜。
覺得有收獲就點(diǎn)贊
作為從事java開發(fā)6年的程序猿,參于的面試有七八十場吧,程序猿面試問題是根據(jù)企業(yè)的招聘需求而定的,三年和五年的程序員遇到的問題是有區(qū)別的,所以不能一概而論。
五年開發(fā)經(jīng)驗的程序員問道的問題會更趨向于原理方面,當(dāng)然三年經(jīng)驗的問題依然會問道,但是側(cè)重點(diǎn)不一樣了
ConcurrentHashMap的實(shí)現(xiàn)原理
java并發(fā)中的最佳實(shí)踐有哪些
volatile關(guān)鍵字的用途
是否用過消息隊列
是否用過zookeeper和dubbo
zookeeper的選舉機(jī)制說一下
以上就是一些面試會遇到的問題,當(dāng)然只是列舉了一些,因為每個面試官的側(cè)重點(diǎn)不一樣,有的面試官喜歡連環(huán)炮是的發(fā)問,問完一個接著深入問另一個相關(guān)的問題,知道自己回答不上來為止,有的是東一個問題西一個問題,所以沒有什么面試寶典,唯一能做的就是加深自己的修煉
我是北漂coder,以上就是我的回答,歡迎關(guān)注,一起探討交流
多線程,集合,jvm調(diào)優(yōu),gc ,spring 套餐,dubbo,主流框架。還有數(shù)據(jù)結(jié)構(gòu)。設(shè)計模式。
小面是我面試的經(jīng)歷。
【【冷酷到底】面試深受打擊,感覺迷茫了。一個程序員的自白】https://m.zjurl.cn/item/6529754521017516552/?iid=26166306190&app=news_article×tamp=1521475420&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share
2021年很多公司都在問黑紅樹,數(shù)據(jù)結(jié)構(gòu)與算法一定要看哦~
尚硅谷Java大廠面試題第3季,跳槽必刷題目+必掃技術(shù)盲點(diǎn)(周陽主講)_嗶哩嗶哩_bilibili
https://www.bilibili.com/video/BV1Hy4y1B78T?
尚硅谷Java大廠面試題第2季,面試必刷,跳槽大廠神器_嗶哩嗶哩_bilibili
https://www.bilibili.com/video/BV18b411M7xz?
尚硅谷經(jīng)典Java面試題第一季(java面試精講)_嗶哩嗶哩_bilibili
https://www.bilibili.com/video/BV1Eb411P7bP?
強(qiáng)烈推薦一個網(wǎng)站:
Java面試題-幫助你通過Java面試 (zwmst.com)
https://zwmst.com/
1.常用的數(shù)據(jù)結(jié)構(gòu)
2.數(shù)據(jù)里有{1,2,3, 4,5,6,7.8,9},請隨機(jī)打亂順序,生成一個新的數(shù)組(請以代碼實(shí)現(xiàn))
3.寫出代碼判斷一 個整數(shù)是不是2的階次方( 請代碼實(shí)現(xiàn),謝絕調(diào)用API方法)
4.假設(shè)今日是2015年3月1日,星期日,請算出13個月零6天后是星期幾,距離現(xiàn)在多少天(請用代碼實(shí)現(xiàn),謝絕調(diào)用API方法)
5.有兩個籃子,分別為A和B,籃子A里裝有雞蛋,籃子B里裝有蘋果,請用面向?qū)ο蟮乃枷雽?shí)現(xiàn)兩個籃子里的物品交換(請用代碼實(shí)現(xiàn))
1.知識點(diǎn)匯總
2.知識點(diǎn)詳解:
3.類加載與卸載
4.簡述一下JM的內(nèi)存模型
5.堆和棧的區(qū)別
6.什么時候會觸發(fā)FullC
7.什么是Java虛擬機(jī)?為什么Java被稱作是“平臺無關(guān)的編程語言
8.Java內(nèi)存結(jié)構(gòu)
9.對象分配規(guī)則
10.描述一下J加載class文件的原理機(jī)制?
11.Java對象創(chuàng)建過程
12.類的生命周期
13.簡述Javs的對象結(jié)構(gòu)
14.如何判斷對象可以被回收?
15.JVM的永久代中會發(fā)生垃圾回收么?
16.垃圾收集算法
17.調(diào)優(yōu)命令有哪些?
18.調(diào)優(yōu)工具
19.Minor GC與Full GC分別在什么時候發(fā)生?
20.你知道哪些JM性能調(diào)優(yōu)
21.JYM內(nèi)存分哪幾個區(qū),每個區(qū)的作用是什么?
22.簡述J ava垃圾回收機(jī)制?
23.什么是類加載器,類加載器有哪些?”
24.你有沒有遇到過OutOfMemory問題?你是怎么來處理這個問題的?處理過程中有哪些收獲?
26.跟JTM內(nèi)存相關(guān)的幾個核心參數(shù)圖解
27.如何啟動系統(tǒng)的時候設(shè)置JVM的啟動參數(shù)
1.Java中實(shí)現(xiàn)多線程有幾種方法
2.如何停止-個正在運(yùn)行的線程
3.noti fy 0和noti fyAll 0有什么區(qū)別?
4.sleep 0和waitO有什么區(qū)別
5.volatile是什么?可以保證有序性嗎?
6.Thread 類中的start0和run0方法有什么區(qū)別?
7.為什么wait, notify 和notifyA11這些方法不在thread類里面?
8.為什么wai t和noti fy方法要在同步塊中調(diào)用?
9.Java中interrupted和isInterruptedd方法的區(qū)別?
10.Java中synchronized和Reentr antLock有什么不同?
11.有三個線程T1, T2, T3,如何保證順序執(zhí)行?
12.Symchr oni Ie dMap和C oncurrentHashMap有什么區(qū)別?
13.什么是線程安全
14.Thread類中的yi el a方法有什么作用?
15.Java線程池中submitO和execute 0方法有什么區(qū)別?
16.說-說自己對于synchronized關(guān)鍵字的了解
17.說說自己是怎么使用symchronized關(guān)鍵字,在項目中用到了嗎synchr oni zed關(guān)鍵字最主要的三種使用方式:
18.什么是線程安全? Vector是一個線程安全類嗎?
19.volatile關(guān)鍵字的作用?
20.常用的線程池有哪些?
21.簡述一下你對線程 池的理解
22.Java程序是如何執(zhí)行的
23.說一說自己對于synchronized關(guān)鍵字的了解
24.說說自己是怎么使用synchronized關(guān)鍵字,在項目中用到了嗎
25.講一下synchronired 關(guān)鍵字的底層原理
26.為什么要用線程池?
27.實(shí)現(xiàn)Runnabl e接口和Callable接口的區(qū)別
28.執(zhí)行execute 0方法和submi t0方法的區(qū)別是什么呢?
29.如何創(chuàng)建線程池
1.Java語言有哪些特點(diǎn)
2.面向?qū)ο蠛兔嫦蜻^程的區(qū)別
3.八種基本數(shù)據(jù)類型的大小,以及他們的封裝類
4.標(biāo)識符的命名規(guī)則。
5.instanceof 關(guān)鍵字的作用
6.Java自動裝箱與拆箱
7.重載和重寫的區(qū)別
8.equa1s與==的區(qū)別
9.Hasheode的作用
10.String String StringBuffer和StringBuilder 的區(qū)別是什么?
11.ArrayList和1inke aList的區(qū)
12.HashMap和HashT able的區(qū)別
13.Collecti on包結(jié)構(gòu),與Collecti ons的區(qū)別
14.Javs的四種引用,強(qiáng)弱軟虛
15.泛型常用特點(diǎn)
16.Jav創(chuàng)建對象有幾種方式?
17.有沒有可能兩個不相等的對象有相同的hasheode
18.深拷貝和淺拷貝的區(qū)別是什么?
19.final有哪些用法?
20.stati 都有哪些用法?
21.3*0. 1==0. 3返回值是什么
22.a=a+b與a+=b有什么區(qū)別嗎?
23.try catch finally; try里有return, finally還執(zhí)行么?
24.Exepti on與Error包結(jié)構(gòu)
25.00M你遇到過哪些情況,SOF你遇到過哪些情況
26.簡述線程、程序、進(jìn)程的基本概念。以及他們之間關(guān)系是什么
27.線程有哪些基本狀態(tài)?
28.Java序列化中如果有些字段不想進(jìn)行序列化,怎么辦?
29.Java中I0流
30.Java I0與HI0的區(qū)別
31.java反射的作用于原理
32.說說List, Set, Map三者的區(qū)別?
1.Sprine的I0C和AOP機(jī)制?
2.Spring中Autowired和Resouree關(guān)鍵字的區(qū)別?
3.依賴注入的方式有幾種,各是什么?
4.講一下什么是Spring
5.Spr ing MVC流程.
6.Spri ngMVYC怎么樣設(shè)定重定向和轉(zhuǎn)發(fā)的?
7. Sprin/MVC常用的注解有哪些?
8.Sprina的AOP理解:
9.Sprine的I0C理解
10.解釋- -下spring be an的生命周期
11.解釋Spring支持的幾種bean的作用域。
12. Spring基于xm1注入bean的幾種方式:
13.Spring框架中都用到了哪些設(shè)計模式?
1.什么是SpringBoot?為什么要用SpringBoot
2.Spring Boot. 的核心注解是哪個?它主要由哪幾個注解組成的?
3.運(yùn)行Spring Boot有哪幾種方式
4.如何理解Spring Boot 中的Starters?
5.如何在Spring Boo.啟動的時候運(yùn)行一些特定的代碼?
6.Spring Boot需要獨(dú)立的容器運(yùn)行嗎?
7.Spring Boot中的監(jiān)視器是什么?
8.如何使用Spring Boot實(shí)現(xiàn)異常處理?
9.你如何理解Spring Boot中的Starters?
10.springboot常用的starter有哪些
11.SpringBoot 實(shí)現(xiàn)熱部署有哪幾種方式?
12.如何理解Spring Boot配置加載順序?
13.Spring Boot的核心配置文件有哪幾個?它們的區(qū)別是什么?
14.如何集成Spring Boot和ActiveMQ?
15.如何重新加載Spring Boot上的更改,而無需重新啟動服務(wù)器?
16.Spring Boot、Spring MVC和Spring有什么區(qū)別?
17. 能否舉一個例子來解釋更多Staters的內(nèi)容?
18.Spring Boot還提供了其它的哪些Starter Project Opti ons
1.數(shù)據(jù)庫的三范式是什么
2.數(shù)據(jù)庫引擎有哪些
3.InoDB與MyISAM的區(qū)別
4.數(shù)據(jù)庫的事務(wù)
5.索引問題
6.SQL優(yōu)化
7.簡單說一說drop、 delete與truncate的區(qū)別
8.什么是視圖
9.什么是內(nèi)聯(lián)接、左外聯(lián)接、右外聯(lián)接?
10.并發(fā)事務(wù)帶來哪些問題?
11.事務(wù)隔離級別有哪些?MySQI的默認(rèn)隔離級別是?
12.大表如何優(yōu)化?
13.分庫分表之后,id主鍵如何處理?
14.mysq1有關(guān)權(quán)限的表都有哪幾個
15.mysq1有哪些數(shù)據(jù)類型
16.創(chuàng)建索引的三種方式,刪除索引
1.什么是MyBatis
2.MyBati s的優(yōu)點(diǎn)和缺點(diǎn)
3.#}和$ {}的區(qū)別是什么?
4.當(dāng)實(shí)體類中的屬性名和表中的字段名不一樣,怎么辦?
5.Mybatis是如何進(jìn)行分頁的?分頁插件的原理是什么?
6.Mybatis是如何將sql執(zhí)行結(jié)果封裝為目標(biāo)對象并返回的?都有哪些映射形式?
7.如何執(zhí)行批量插入?
8.Xm1映射文件中,除了常見的select |insert lupdae |delete標(biāo)簽之外,還有哪些標(biāo)簽?
9.MyBatis實(shí)現(xiàn)一對一有幾種方式?具體怎么操作的?
10.Mybatis是否支持延遲加載?如果支持,它的實(shí)現(xiàn)原理是什么?
11.Mybatis的一級、二級緩存:
1.Redi s持久化機(jī)制
2.緩存雪崩、緩存穿透、緩存預(yù)熱、緩存更新、緩存降級等問題
3.熱點(diǎn)數(shù)據(jù)和冷數(shù)據(jù)是什么
4.Memcache與Redi s;的區(qū)別都有哪些?
5.單線程的redi s為什么這么快
6.redi s的數(shù)據(jù)類型,以及每種數(shù)據(jù)類型的使用場景
7.redi s的過期策略以及內(nèi)存淘汰機(jī)制
8.Redis為什么是單線程的
9.Redis常見性能問題和解決方案?
10.為什么Redi s的操作是原子性的,怎么保證原子性的?
11.Redis事務(wù)
1.簡述一下什么是Nginx,它有什么優(yōu)勢和功能?
2.Nginx是如何處理一個HTTP請求的呢?
3.列舉-些Ngi nx的特性
4.請列舉Nginx和Apache之間的不同點(diǎn)
5.在Hginx中;如何使用未定義的服務(wù)器名稱來阻止處理請求?
6.請解釋Nei rx服務(wù)器上的Master和W orker進(jìn)程分別是什么?
7.請解釋代理中的正向代理和反向代理
8.解釋Nginx用途
1.什么是SpringCloud
2.什么是微服務(wù)
3.SpringCloud有什么優(yōu)勢
4.什么是服務(wù)熔斷?什么是服務(wù)降級?
5.Eureks和zookeeper都可以提供服務(wù)注冊與發(fā)現(xiàn)的功能,請說說兩個的區(qū)別?
6.SpringBoot和SpringCloud的區(qū)別?
7.負(fù)載平衡的意義什么?
8.什么是Hystrix?它如何實(shí)現(xiàn)容錯?
9.什么是Hystrix斷路器?我們需要它嗎?
10.說說RPC的實(shí)現(xiàn)原理
1. ZooKeeper 是什么?
2. ZooKeeper 提供了什么?
3. Zookeeper文件系統(tǒng)
4. ZAB 協(xié)議?
5. 四種類型的數(shù)據(jù)節(jié)點(diǎn)Znode
6. Zookeeper Watcher 機(jī)制--數(shù)據(jù)變更通知
7.客戶端注冊Watcher 實(shí)現(xiàn)
8. 服務(wù)端處理Watcher 實(shí)現(xiàn)
9.客戶端回調(diào)Watcher
10. ACL 權(quán)限控制機(jī)制
11. Chroot 特性
12.會話管理
13.服務(wù)器角色
14. Zookeeper 下Server工作狀態(tài)
15.數(shù)據(jù)同步
16. zookeeper 是如何保證事務(wù)的順序一致性的?
17.分布式集群中為什么會有Master?
18. zk 節(jié)點(diǎn)宕機(jī)如何處理?
19. zookeeper 負(fù)載均衡和nginx負(fù)載均衡區(qū)別
20. Zookeeper 有哪幾種幾種部署模式?
21.集群最少要幾臺機(jī)器,集群規(guī)則是怎樣的?
22. 集群支持動態(tài)添加機(jī)器嗎?
23. Zookeeper 對節(jié)點(diǎn)的watch監(jiān)聽通知是永久的嗎?為什么不是永久的?
24. Zookeeper 的java客戶端都有哪些?
25. chubby 是什么,和zookeeper比你怎么看?
26. 說幾個zookeeper 常用的命令。
27. ZAB和Paxos算法的聯(lián)系與區(qū)別?
28. Zookeeper的典型應(yīng)用場景
1.如何獲取topic 主題的列表
2.生產(chǎn)者和消費(fèi)者的命令行是什么?
3.consumer 是推還是拉?
4.講講kafka維護(hù)消費(fèi)狀態(tài)跟蹤的方法
5.講一下主從同步
6.為什么需要消息系統(tǒng),mysql不能滿足需求嗎?
7.Zookeeper 對于Kafka的作用是什么?
9.Kafka判斷-個節(jié)點(diǎn)是否還活著有那兩個條件?
10.Kafka與傳統(tǒng)MQ消息系統(tǒng)之間有三個關(guān)鍵區(qū)別
11.講一講kafka的ack的三種機(jī)制
12.消費(fèi)者如何不自動提交偏移里由應(yīng)用提交?
13.消費(fèi)者故障,出現(xiàn)活鎖問題如何解決?
14.如何控制消費(fèi)的位置
15.kafka分布式(不是單機(jī))的情況下,如何保證消息的順序消費(fèi)
16.kafka的高可用機(jī)制是什么?
17.kafka如何減少數(shù)據(jù)丟失
18.kafka如何不消費(fèi)重復(fù)數(shù)據(jù)?比如扣款,我們不能重復(fù)的扣。
1.為什么使用順
2.MQ優(yōu)缺點(diǎn)
3.Kafka、ActiveMQ、Rabbi tMQ、RocketMQ都有什么區(qū)別?
4.如何保證高可用的?
5.如何保證消息的可靠傳輸?如果消息丟了怎么辦
6.如何保證消息的順序性
7.如何解決消息隊列的延時以及過期失效問題?消息隊列滿了以后該怎么處理?有幾百萬消息持續(xù)積壓幾小時,說說怎么解決?
8.設(shè)計M9的思路
1.elasticsearch. 了解多少,說說你們公司es. 的集群架構(gòu),索引數(shù)據(jù)大小,分片有多少,以及一些調(diào)優(yōu)手段。
2.elasticsear ch的倒排索引是什么
3.elasticsearch 索引數(shù)據(jù)多了怎么辦,如何調(diào)優(yōu),部署
4.elasticsearch是如何實(shí)現(xiàn)mster 選舉的
5.詳細(xì)描述一 下Elasticsearch索引文檔的過程
6.詳細(xì)描述一 下Flasticsearch搜索的過程?
7.Elasticsearch 在部署時,對Linux的設(shè)置有哪些優(yōu)化方法
8.lucence內(nèi)部結(jié)構(gòu)是什么?
9.Elasticsearch 是如何實(shí)現(xiàn)Master選舉的?
10.Elasticsearch 中的節(jié)點(diǎn)(比如共20個),其中的10個
11.客戶端在和集群連接時,如何選擇特定的節(jié)點(diǎn)執(zhí)行請求的?
12.詳細(xì)描述一 下Elasticsearch索引文檔的過程。
13.詳細(xì)描述一 下Elasticsearch更新和刪除文檔的過程。
14.詳細(xì)描述一 下Elasticsearch搜索的過程。
15.在Elasticsearch中,是怎么根據(jù)一個詞找到對應(yīng)的倒排索引的?
16.Elasticsearch 在部署時:又Linux的設(shè)置有哪些優(yōu)化方法?
17.對于GC方面,在使用Elasticsearch時要注意什么?
18.Elasticsearch對于大數(shù)據(jù)量(上億量級) 的聚合如何實(shí)現(xiàn)?
19.在并發(fā)情況下,F(xiàn)lasticsearc h如果保證讀寫- 致?
20.如何監(jiān)控Elasticsearch集群狀態(tài)?
21.介紹下你們電商搜索的整體技術(shù)架構(gòu)。
22.介紹一下你們的個性化搜索方
23.是否了解字典樹?
24.拼寫糾錯是如何實(shí)現(xiàn)的?
1.絕對路徑用什么符號表示?當(dāng)前目錄、上層自錄用什么表示?主目錄用什么表示?切換目錄用什么命令?
2.怎么查看當(dāng)前進(jìn)程?怎么執(zhí)行退出?怎么查看當(dāng)前路徑?
3.怎么清屏?怎么退出當(dāng)前命令?怎么執(zhí)行睡眠?怎么查看當(dāng)前用戶id?查看指定幫助用什么命令?
4.Ls命令執(zhí)行什么功能?可以帶哪些參數(shù),有什么區(qū)別?
5.建立軟鏈接(快捷方式),以及硬鏈接的命令。
6.目錄創(chuàng)建用什么命令?創(chuàng)建文件用什么命令?復(fù)制文件用什么命令?
7.查看文件內(nèi)容有哪些命令可以使用?
8.隨意寫文件命令?怎么向屏幕輸出帶空格的字符串,比如”hello world" ?
9.終端是哪個文件夾下的哪個文件?黑洞文件是哪個文件夾下的哪個命令?
10.移動文件用哪個命令?改名用哪個命令?
11.復(fù)制文件用哪個命令?如果需要連同文件夾一塊復(fù)制呢?如果需要有提示功能呢?
12.刪除文件用哪個命令?如果需要連目錄及目錄下文件一塊刪除呢?刪除空文件夾用什么命令?
13.Linux下命令有哪幾種可使用的通配符?分別代表什么含義?
14.用什么命令對一個文件的內(nèi)容進(jìn)行統(tǒng)計? (型號、 單詞數(shù)、字節(jié)數(shù))
15.Grep命令有什么用?如何忽略大小寫?如何查找不含該串的行?
16.Linur中進(jìn)程有哪幾種狀態(tài)?在ps顯示出來的信息中,分別用什么符號表示的?
17.怎么使一個命令在后臺運(yùn)行?
18.利用ps怎么顯示所有的進(jìn)程?怎么利用ps查看指定進(jìn)程的信
19.哪個命令專i ]用來查看后臺任務(wù)?
20.把后臺任務(wù)調(diào)到前臺執(zhí)行使用什么命令?把停下的后臺任務(wù)在后臺執(zhí)行起來用什么命令?
21.終止進(jìn)程用什么命令?帶什么參數(shù)?
22.怎么查看系統(tǒng)支持的所有信號?
23.搜索文件用什么命令?格式是怎么樣的?
24.查看當(dāng)前誰在使用該主機(jī)用什么命令?查找自己所在的終端信息用什么命令?
25.使用什么命令查看用過的命令列表?
26.使用什么命令查看磁盤使用空間?空閑空間呢?
27.使用什么命令查看網(wǎng)絡(luò)是否連通?
28.使用什么命令查看ip 地址及接口信息?
29.查看各類環(huán)境變量用什么命令
30.通過什么命令指定命令提示符
31.查找命令的可執(zhí)行文件是去哪查找的?怎么對其進(jìn)行設(shè)置及添加
32.通過什么命令查找執(zhí)行命令?
33.怎么對命令進(jìn)行取別名?
34.du和df的定義,以及區(qū)別
35.awk 詳解。
36.當(dāng)你需要給命令綁定一個宏或者按鍵的時候,應(yīng)該怎么做呢?
37.如果一個linux新手想要知道當(dāng)前系統(tǒng)支持的所有命令的列表, 他需要怎么做?
38.如果你的助手想要打印出當(dāng)前的目錄棧:你會建議他怎么做?
39.你的系統(tǒng)目前有許多正在運(yùn)行的任務(wù),在不重啟機(jī)器的條件下,有什么方法可以把所有正在運(yùn)行的進(jìn)程移除呢?
40.bash shell 中的hash 命令有什么作用?
41.哪-個bash內(nèi)置命令能夠進(jìn)行數(shù)學(xué)運(yùn)算。
42.怎樣一頁一頁地查看一個大文件的內(nèi)容呢?
43.數(shù)據(jù)字典屬于哪-個用戶的?
44.怎樣查看一個linw: 命令的概要與用法?假設(shè)你在/bin目錄中偶然看到一個你從沒見過的的命令,怎樣才能知道它的作用和用法呢?
45.使用哪一個命令可以查看自己文件系統(tǒng)的磁盤空間配額呢?
46.列舉幾個常用的Linux命令
47.你平時是怎么查看日志的?
1.為什么說簡歷很重要?
2.先從面試來說
3.再從面試說起
4.必知必會的幾點(diǎn)
5.必須了解的兩大法則
6.項目經(jīng)歷怎么寫
7.專業(yè)技能怎么寫
8.排版注意事項
9.其他一些小tips
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答1
回答