




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
java工程師大型企業(yè)常見面試題總結(jié)資料僅供參考企業(yè)面試總結(jié)經(jīng)過一星期的緊張面試,獲得了許多的面試經(jīng)驗,總結(jié)了面試中遇到的問題,現(xiàn)對一些主要問題進行總結(jié),希望能給大家以幫助。非項目方面redis內(nèi)存溢出及宕機狀態(tài)的處理redis存在于內(nèi)存中,內(nèi)存大小有限,也會存在宕機或重啟導(dǎo)致內(nèi)存數(shù)據(jù)清空的情況,此時我們可經(jīng)過對redis中的數(shù)據(jù)設(shè)置生存周期及對數(shù)據(jù)進行持久化操作來盡量避免這些情況帶來的危害。設(shè)置生命周期:到期后數(shù)據(jù)銷毀EXPIREkeyseconds 設(shè)置生存時間PERSISTkey 清除生命時間(重新設(shè)值也會清除生命周期)TTLkey查看剩余生存時間TTL返回值:大于0的數(shù)字:剩余生存時間,單位為秒i-1:沒有生存時間,永久存儲-2:數(shù)據(jù)已經(jīng)被刪除持久化:是把數(shù)據(jù)從內(nèi)存以某種形式持久化到磁盤上。持久化方式:RDB(relationaldatabase)和AOF(appendonlymode)RDB:經(jīng)過快照方式實現(xiàn),當符合條件時就對內(nèi)存數(shù)據(jù)進行快照并存儲到硬盤上??煺盏臈l件在配置文件中配置。由2個參數(shù)構(gòu)成,時間和改動的鍵的個數(shù)??煺者^程:使用fork函數(shù)復(fù)制一份當前進程(父進程)的副本(子進程),然后父進程繼續(xù)處理任務(wù),子進程則執(zhí)行寫入磁盤操作。寫入完成后再用臨時文件替舊的RDB文件。AOF:是將redis的每一條命令進行記錄,并保存到磁盤的AOF文件中,重啟后會執(zhí)行該文件進行數(shù)據(jù)恢復(fù),需要手動開啟。優(yōu)化:aof會記錄每一條命令,包括一條數(shù)據(jù)的多次操作,這樣造成了冗余??墒褂肂GREWRITEAOF技術(shù)來進行重寫,去除數(shù)據(jù)的中間執(zhí)行過程,保留最終數(shù)據(jù)命令即可。重寫的策略是當aof文件的大小超過上一次大小的某個比例時就會進行重寫。問題:文件是先寫入緩存的,而緩存讀取到硬盤需要時間,假設(shè)在這個時間數(shù)據(jù)丟失那也會導(dǎo)致數(shù)據(jù)的丟失。因此即使每秒做文件同步也可能導(dǎo)致數(shù)據(jù)丟失。Spring注解開發(fā)的配置此處會讓你說出幾個常見注解,說幾個就行。有時還會問你注解底層怎么實現(xiàn)就說不太了解。在xml配置文件中開啟注解功能<!--base-package:注解寫在哪個包--><context:component-scanbase-package="cn.itcast.bean"/>注解:@Component(value="名稱") 利用構(gòu)造方法創(chuàng)立對象@Scope(value="singleton/prototype") 單例和多例@Lazy(value=true/false) 延遲創(chuàng)立問題@PostConstruct 指定方法為初始化方法@PreDestory 指定方法為銷毀方法@Autowired 注入引用類型,只能按照類型進行匹配@Resource 注入引用類型,如果有name屬性值,則按照bean的名稱進行匹配;如果沒有name屬性值,則按照類型進行類型匹配數(shù)據(jù)庫優(yōu)化此處重點是數(shù)據(jù)庫的索引問題,索引可大大提高查詢效率,可是大數(shù)據(jù)量時也會影響效率。此時她還會問你當數(shù)據(jù)量很大時索引不行了該怎么處理,就回答讀寫分離,分庫分表。提前對這兩塊做下了解,看看京東淘寶的處理方式。索引存儲的值按索引列中的順序排列。能夠利用B-Tree索引進行全關(guān)鍵字、關(guān)鍵字范圍和關(guān)鍵字前綴查詢。數(shù)據(jù)庫優(yōu)化sql級別的優(yōu)化sql語句的書寫方式對效率也是有一定影響的。使用>=替代>select*fromempwheredeptno>=10(效率高,因為depto直接定位到10,效率高)select*fromempwheredeptno>9(先定位到9,然后還要排除9,效率低)如果使用union或者unionall了,此時如果不需要考慮去掉重復(fù)的數(shù)據(jù),盡量不要使用union,因為union默認是去重復(fù)的,去重復(fù)過程,也會影響效率。對groupby子句的優(yōu)化上面:盡量在groupby前面將數(shù)據(jù)過濾掉。selectjob,avg(sal)fromempwherejob='CLERK'groupbyjob(效率高)selectjob,avg(sal)fromempgroupbyjobhavingjob='CLERK'(效率低)使用視圖:(數(shù)據(jù)量非常大的情況下)經(jīng)常被查詢的列數(shù)據(jù),而且這些數(shù)據(jù)不被經(jīng)常的修改,刪除。數(shù)據(jù)表建立索引索引是快速搜索的關(guān)鍵。MySQL索引的建立對于MySQL的高效運行是很重要的。索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表能夠有多個單列索引,但這不是組合索引。組合索引,即一個索包含多個列。MySQL索引類型包括:普通索引:這是最基本的索引,它沒有任何限制。唯一索引
:它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。主鍵索引
:它是一種特殊的唯一索引,不允許有空值。組合索引:將多個字段建到一個索引里。有個“最左前綴”的結(jié)果。建立索引的時機:一般來說,在WHERE和JOIN中出現(xiàn)的列需要建立索引,但也不完全如此,因為MySQL只對<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE才會使用索引。在以通配符%和_開頭作查詢時,MySQL不會使用索引。SELECT
*
FROM
mytable
WHERE
username
like'admin%'
而下句就不會使用:
SELECT
*
FROM
mytable
WHEREt
Name
like'%admin'
缺點:提高了查詢速度,但降低了更新速度。因為更新時要額外保存索引文件。索引文件在大數(shù)據(jù)量時會膨脹很快。因此如果你的MySQL有大數(shù)據(jù)量的表,就需要花時間研究建立最優(yōu)秀的索引,或優(yōu)化查詢語句。使用索引的技巧和注意事項
:索引不會包含有NULL值的列
只要列中包含有NULL值都將不會被包含在索引中,復(fù)合索引中只要有一列含有NULL值,那么這一列對于此復(fù)合索引就是無效的。因此我們在數(shù)據(jù)庫設(shè)計時不要讓字段的默認值為NULL。
使用短索引
對串列進行索引,如果可能應(yīng)該指定一個前綴長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字符內(nèi),多數(shù)值是惟一的,那么就不要對整個列進行索引。短索引不但能夠提高查詢速度而且能夠節(jié)省磁盤空間和I/O操作。
索引列排序
MySQL查詢只使用一個索引,因此如果where子句中已經(jīng)使用了索引的話,那么order
by中的列是不會使用索引的。因此數(shù)據(jù)庫默認排序能夠符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創(chuàng)立復(fù)合索引。
like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like
“%aaa%”
不會使用索引而like
“aaa%”能夠使用索引。
不要在列上進行運算
select
*
from
users
where
YEAR(adddate)<;
將在每個行上進行運算,這將導(dǎo)致索引失效而進行全表掃描,因此我們能夠改成
select
*
from
users
where
adddate<‘-01-01’;
不使用NOT
IN和<>操作淘寶分庫分表機制:淘寶根據(jù)訂單號做拆分的,下單有兩個維度,買家和賣家。淘寶將訂單表拆分到16個mysql庫中,而在每個庫中又將訂單表拆分為64份,相當于將一張表拆分為1024份,事務(wù)進行了分散,很大程度上提高了并發(fā)的事務(wù)處理能力。因此買家和賣家怎么找到對應(yīng)的表呢?對于16臺服務(wù)器,每臺服務(wù)器64張表只需要2位買家和賣家id的后兩位數(shù)字就能夠準確定位到具體的庫和表。訂單號中同時存在買家id的最后兩位和賣家id的最后兩位。分別在訂單號的倒數(shù)第3位,4位和最后兩位數(shù)。RabbitMq消息隊列此處要點是消費者沒收到消息該怎么處理。應(yīng)用進程之間的通信方法開發(fā)語言:Erlang–面向并發(fā)的編程語言。AMQP是消息隊列的一個協(xié)議。六種模式,只用五種簡單隊列Work模式:兩個消費者,能者多勞訂閱模式1、1個生產(chǎn)者,多個消費者2、每一個消費者都有自己的一個隊列3、生產(chǎn)者沒有將消息直接發(fā)送到隊列,而是發(fā)送到了交換機4、每個隊列都要綁定到交換機5、生產(chǎn)者發(fā)送的消息,經(jīng)過交換機,到達隊列,實現(xiàn),一個消息被多個消費者獲取的目的注意:消息發(fā)送到?jīng)]有隊列綁定的交換機時,消息將丟失,因為,交換機沒有存儲消息的能力,消息只能存在在隊列中。路由模式生產(chǎn)者為消息指定類型,路由綁定不同的隊列,隊列指定接收的類型,只有類型匹配隊列才接收。模式1:自動確認 只要消息從隊列中獲取,無論消費者獲取到消息后是否成功消息,都認為是消息已經(jīng)成功消費。模式2:手動確認 消費者從隊列中獲取消息后,服務(wù)器會將該消息標記為不可用狀態(tài),等待消費者的反饋,如果消費者一直沒有反饋,那么該消息將一直處于不可用狀態(tài)。Spring的IOC和AOP的底層實現(xiàn)IOC底層:工廠設(shè)計模式+XML技術(shù)+反射配置AOP底層:動態(tài)代理SSH中單例多例問題三層結(jié)構(gòu)各用的是單例還是多例,為什么,action層是單例還是多例,什么時候用多例。單例多例主要看該層有沒有定義成員變量,定義了成員變量的話由于存在多線程的共同調(diào)用相同變量因此要設(shè)置為多例。scope屬性:bean的生命周期 singleton:單例(默認值)(在初始化配置文件的時候創(chuàng)立的對象,不是getBean()) prototype:多例(在getBean()的時候創(chuàng)立對象)<beanid="s5"class="cn.itcast.bean.Student"scope="singleton"></bean><beanid="s5"class="cn.itcast.bean.Student"scope="prototype"></bean>結(jié)合項目中使用場景: 分層開發(fā)的時候: dao對象:單例 biz對象:單例 action對象:必須多例的(屬性或模型驅(qū)動有數(shù)據(jù)共享,因此必須多例)單例的書寫及各種模式的區(qū)別面試官讓我手寫出一種單例模式并解釋各種模式的區(qū)別,此處最好寫出雙重校驗鎖模式。//雙重校驗鎖寫法classSingleDemoProblem4{ privateSingleDemoProblem4(){} privatestaticSingleDemoProblem4sdp=null; privatestaticObjectobj=newObject(); publicstaticSingleDemoProblem4getInstance(){ /*設(shè)置雙重校驗鎖防止多線程情況下,某個線程進來判斷變量為空進入準備創(chuàng)立對象,但還沒創(chuàng)立cpu被搶走, 別的線程過來發(fā)現(xiàn)變量還是空又進來創(chuàng)立對象,結(jié)果導(dǎo)致多個線程創(chuàng)立多個對象出來*/ if(sdp==null){ synchronized(obj){ if(sdp==null){ sdp=newSingleDemoProblem4(); } } } returnsdp; }}餓漢式:在類加載時就創(chuàng)立對象,不論對象用不用都會創(chuàng)立,造成內(nèi)存的浪費。但能保證對象的唯一性。懶漢式:只在使用的時候創(chuàng)立對象,多線程下不能保證每次使用的對象唯一。SpringBuild和springBuffer的區(qū)別聯(lián)系:兩者都是字符串緩沖區(qū)類,作用與功能相似,內(nèi)部的方法也都相同.但使用場景不同.區(qū)別:StringBuffer是線程安全的,但對于多線程效率低下(因為內(nèi)部用了synchronize關(guān)鍵字保證線程安全,這樣必然犧牲了執(zhí)行效率)StringBuilder安全性稍差,但對于多線程效率稍高Mybatis中${}和#{}的區(qū)別此處要點是注意哪種能防止sql注入,為什么能防止sql注入。線程池問題問你用的線程池引用的哪個包。和線程池有關(guān)的幾個概念:最大容量:一個線程池中最多能夠保存的線程數(shù)量;最小容量:一個線程池中,最少保存的線程數(shù)量;最大存活時間:一個線程最多能夠保持空閑的時間;如果超出這個時間,一般這個線程就會被銷毀;線程的一些面試問題要多了解。Linux怎么查看文件內(nèi)容的前10行,怎么查看進程Linux你肯定不能說不知道,說了解一點,然后她會問你一些常見指令,因此要記住一些常見的指令。有的答不出來就說平時用的不多,而且平時不會就會上網(wǎng)查。Netstat–an|grep80查看端口信息Vim中:/內(nèi)容直接搜索內(nèi)容Ps–ef|grepredis查看服務(wù)端口進程servicenetworkrestart重啟網(wǎng)絡(luò)服務(wù)tail-200fcatalina.log 動態(tài)顯示日志最后200行head-n10catalina.log查看前10行命令tar-zcvfabc.tar.gz* 壓縮當前目錄下所有文件,壓縮后文件名為abc.tar.gztar-zxvfabc.tar.gz-C/usr/local/xixi/ 解壓到指定目錄中記得指定目錄前面加–C查找文件查找的是腳本文件(執(zhí)行文件)whichfilename查找的是二進制的文件(執(zhí)行文件)whereis-bfilename查找特定文件whereisfilename(利用數(shù)據(jù)庫來查找)eclipse快捷鍵Alt+Shift+M任意選中一塊代碼,自動轉(zhuǎn)換為方法,自動添加參數(shù)返回類型。ctrl+shift+x轉(zhuǎn)為大寫ctrl+shift+y轉(zhuǎn)為小寫hashmap和hashtable的區(qū)別|----:HashMap:是開發(fā)中使用最多的一個map集合類;在它的底層使用哈希表保存數(shù)據(jù)(數(shù)據(jù)是無序的);它的鍵和值允許使用null;是線程不安全的;|---:LinkedHashMap:是HashMap的子類,主要操作和HashMap一樣;不同的是,在底層使用哈希表和鏈表保存數(shù)據(jù),哈希表負責(zé)保存數(shù)據(jù)和維護數(shù)據(jù)的唯一性,鏈表負責(zé)記錄數(shù)據(jù)添加的順序;因此它和HashMap不同之處是,它的數(shù)據(jù)是有序的(添加和迭代的順序一樣);實際上,在HashSet底層就是使用的HashMap實現(xiàn)的;LinkedHashSet底層使用的是LinkedHashMap實現(xiàn);|----:HashTable:出現(xiàn)的比較早,在JDK1.1版本就出現(xiàn);它的主要操作和HashMap一樣,不同之處在于,HashTable是線程安全的,效率比較低;它不允許使用null做鍵或值;在實際開發(fā)中現(xiàn)在被HashMap取代;|---:Properties:主要保存Key-Value的集合,在開發(fā)中主要用來操作配置文件(文件中的配置信息都是鍵值正確形式)到IO流在學(xué);|----:TreeMap:底層使用二叉樹實現(xiàn),它保存的數(shù)據(jù),在保存的時候鍵都是有序的;此處還問了一個課堂沒講過的實現(xiàn)類可取代hashTable,它是ConcurrentHashMap,這個自己可做下了解。ConcurrentHashMap與HashTable都能夠用于多線程的環(huán)境,可是當Hashtable的大小增加到一定的時候,性能會急劇下降,因為迭代時需要被鎖定很長的時間。因為ConcurrentHashMap引入了分割(segmentation),不論它變得多么大,僅僅需要鎖定map的某個部分,而其它的線程不需要等到迭代完成才能訪問map。簡而言之,在迭代的過程中,ConcurrentHashMap僅僅鎖定map的某個部分,而Hashtable則會鎖定整個map。HashTable雖然性能上不如ConcurrentHashMap,但并不能完全被取代,兩者的迭代器的一致性不同的,HashTable的迭代器是強一致性的,而ConcurrentHashMap是弱一致的。ConcurrentHashMap的get,clear,iterator都是弱一致性的。ArrayList怎么去重巧妙利用hashSet不能存儲重復(fù)元素的原理,把arrayList放到hashSet中再放回arrayList即可。說說垃圾處理機制大致了解,能說出一點即可現(xiàn)在使用的Java虛擬機并不是只是使用一種內(nèi)存回收機制,而是分代收集的算法。就是將內(nèi)存根據(jù)對象存活的周期劃分為幾塊。一般是把堆分為新生代、和老年代。短命對象存放在新生代中,長命對象放在老年代中。對于不同的代,采用不同的收集算法:新生代:由于存活的對象相對比較少,因此能夠采用復(fù)制算法該算法效率比較快。老年代:由于存活的對象比較多哈,能夠采用標記-清除算法或是標記-整理算法是否寫過mysql的存儲過程mysql執(zhí)行語句是要先編譯,然后再執(zhí)行的。這樣如果查詢并發(fā)大的時候。會浪費很多資源和時間。造成mysql進程占用資源過多,癥狀就是慢。但存儲過程能夠把一些特別的語句封裝成一個方法,再編譯好成一個能夠執(zhí)行的方法,對外只要接收參數(shù)就能夠了。這樣就不用再編譯。執(zhí)行就快了什么時候會用到?你覺得你數(shù)據(jù)庫因為同時出現(xiàn)太多讀寫操作而變得慢,那么就要用了。JDBC底層步驟Jvm機制及類的加載過程棧區(qū),堆區(qū),方法區(qū)類加載順序:類加載時先在方法區(qū)中為類開辟一個空間,非靜態(tài)成員加載到非靜態(tài)區(qū)域,靜態(tài)成員加載到靜態(tài)區(qū)域,為靜態(tài)成員變量分配空間并賦默認值,然后執(zhí)行靜態(tài)代碼塊或顯示賦值,賦值完成類加載結(jié)束。對象創(chuàng)立過程:遇到new關(guān)鍵字在堆中開辟一個空間,為非靜態(tài)成員變量分配空間并賦默認值,執(zhí)行構(gòu)造函數(shù)先看有沒有this語句調(diào)用其它構(gòu)造函數(shù),沒有就執(zhí)行隱式三步:1、執(zhí)行父類構(gòu)造函數(shù),2、為非靜態(tài)成員變量顯示賦值,3、執(zhí)行構(gòu)造代碼塊。結(jié)束后執(zhí)行構(gòu)造函數(shù)體中的內(nèi)容,執(zhí)行完對象創(chuàng)立結(jié)束。抽象類和接口的區(qū)別共同點:都能夠有抽象函數(shù),都不能被實例化。區(qū)別:聲明上:抽象類,class;接口interface書寫成員:抽象類,書寫任何類成員;接口:只能書寫成員變量和函數(shù)有無構(gòu)造函數(shù):抽象類,有構(gòu)造函數(shù);接口:沒有構(gòu)造函數(shù)。作用上:抽象類是描述的繼承體系中的共同的特征和行為,如果行為不確定,就定義為抽象函數(shù);接口描述的是不屬于繼承體系的共同的功能;接口能夠用來定義規(guī)則。繼承關(guān)系上:抽象類:單一繼承,多重繼承;接口:多繼承,多實現(xiàn)。項目方面我簡歷上寫得我在項目中承擔(dān)的模塊是訂單模塊和購物車模塊,因此自己的模塊一定要搞清楚。搞清楚相關(guān)技術(shù)在你承擔(dān)模塊中的運用。購物車模塊中未登錄狀態(tài)下把商品放入redis中,那這個key怎么設(shè)置?此處要搞清楚怎么
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 1157-2019地面用晶體硅光伏組件行業(yè)安全生產(chǎn)標準化基本要求
- 2024年大屏幕液晶投影電視機項目資金籌措計劃書代可行性研究報告
- 2024年工農(nóng)業(yè)塑料制品:塑料零部件項目資金申請報告代可行性研究報告
- 2024年發(fā)電機組、內(nèi)燃發(fā)電機組及旋轉(zhuǎn)式變流機項目投資申請報告代可行性研究報告
- 2025年中國邊緣智能行業(yè)市場現(xiàn)狀及未來發(fā)展前景預(yù)測分析報告
- 虛擬現(xiàn)實影視特效制作與衍生品授權(quán)合同
- 智能電梯監(jiān)測與安全防護技術(shù)服務(wù)合同
- 跨國房地產(chǎn)項目可行性研究報告委托協(xié)議
- 拼多多品牌合作授權(quán)與多平臺運營支持合作協(xié)議
- 緊急狀態(tài)電力備用補充服務(wù)合同
- 難點02:總集篇·十六種陰影部分面積法專項練習(xí)-2024年小升初數(shù)學(xué)典型例題系列(解析版)2
- 全球經(jīng)濟2025年全球經(jīng)濟與貿(mào)易師考試試題及答案
- 2024年國家大劇院招聘真題
- 2025年四川省綿陽市富樂學(xué)校中考模擬英語試題(含答案)
- 文化產(chǎn)業(yè)發(fā)展的試題及答案
- 學(xué)校大型活動組織流程
- 2025年教育信息化2.0背景下教師跨學(xué)科教學(xué)能力培養(yǎng)模式創(chuàng)新與優(yōu)化
- 2025-2030全球及中國協(xié)作機器人系統(tǒng)行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 財務(wù)公司調(diào)賬合同協(xié)議
- 品牌輸出合同協(xié)議
- 2025年SAT語法沖刺備考:真題解析與模擬試題卷
評論
0/150
提交評論