Error,ExceptionError:嚴重問題,例如內存溢出Exception->運?時異常:RuntimeException,編譯時異常AWTError1、?絡基礎問題TCP和UDP的區別,TCP為什么是三次握?,不是兩 " />

騰訊的Java?試題整合
?錄
騰訊Java?試題:
1、說說Java中異常的分類。
答:異常分類:
Throwable->Error,Exception
Error:嚴重問題,例如內存溢出
Exception->運?時異常:RuntimeException,編譯時異常
AWTError
1、?絡基礎問題
TCP和UDP的區別,TCP為什么是三次握?,不是兩次。
答:1、因為tcp是全雙?協議,區別在于前者可靠,后者不可靠,以及效率更?。
Dubbo?試題
1、dubbo和dubbox之間的區別?
答:Dubbox和Dubbo本質上沒有區別,名字的含義擴展了Dubbo?已,以下擴展出來的功能
?持REST風格遠程調?(HTTP+JSON/XML);
?持基于Kryo和FST的Java?效序列化實現;
?持基于Jackson的JSON序列化;
?持基于嵌?式Tomcat的HTTPremoting體系;
升級Spring?3.x;
升級ZooKeeper客戶端;
?持完全基于Java代碼的Dubbo配置;
2、Dubbo?試題:?般使?什么注冊中??還有別的選擇嗎?
答:Dubbo?般?zookeeper做注冊中?
還可以?:Redis,數據庫,consul
JavaList?試題
1、ArrayList和LinkedList的區別?分別?在什么場景?
答:①ArrayList和LinkedList可想從名字分析,它們?個是Array(動態數組)的數據結構,?個是Link(鏈表)的數據結構,此外,它們兩個
都是對List接?的實現。
前者是數組隊列,相當于動態數組;后者為雙向鏈表結構,也可當作堆棧、隊列、雙端隊列
②當隨機訪問List時(get和t操作),ArrayList?LinkedList的效率更?,因為LinkedList是線性的數據存儲?式,所以需要移動指針
從前往后依次查找。
③當對數據進?增加和刪除的操作時(add和remove操作),LinkedList?ArrayList的效率更?,因為ArrayList是數組,所以在其中進?
增刪操作時,會對操作點之后所有數據的下標索引造成影響,需要進?數據的移動。
④從利?效率來看,ArrayList?由性較低,因為它需要?動的設置固定??的容量,但是它的使??較?便,只需要創建,然后添加數
據,通過調?下標進?使?;?LinkedList?由性較?,能夠動態的隨數據量的變化?變化,但是它不便于使?。
⑤ArrayList主要控件開銷在于需要在lList列表預留?定空間;?LinkList主要控件開銷在于需要存儲結點信息以及結點指針信息。
場景:
鏈表,插?刪除快,查找修改慢。適?于頻繁增刪的場景。
數組,查找快,插?刪除慢。適?于頻繁查找和修改的場景。
2、怎么給List排序?
答:List如何排序:
①:使?默認正序,可以傳第?個參數?定義排序
②:?定義bean實現Comparable接?。
③:實現Comparator接??定義?較器
JavaMap集合?試題
1、Collection集合接?和Map接?有什么關系?
答:沒有直接關系,但是?些?類會有依賴,Collection是最基本的集合接?,聲明了適?于JAVA集合(只包括Set和List)的通??法。
Map接?并不是Collection接?的?接?,但是它仍然被看作是Collection框架的?部分。
2、你都知道哪些常?的Map集合?
答:HashMap、HashTable、TreeMap、LinkedHashMap
Spring?試題
1、什么是Spring的內部bean?
答:當?個bean只能被某?個類使?時,稱該bean為內部bean。
2、為什么說Spring是?個容器?
答:Spring的核?理念就是更?便地管理JavaBean,?被管理的JavaBean存緩存在?個Map中,這個Map就可以理解為?來裝
JavaBean的容器,即IOC容器
zookeeper?試題
1、zookeeper是什么框架?
答:ZooKeeper是?個分布式的,開放源碼的分布式應?程序協調服務
JVM?試題:
1、說說Java虛擬機的?命周期及體系結構。
2、Java是如何實現跨平臺的?
注意:跨平臺的是Java程序,?不是JVM。JVM是?C/C++開發的,是編譯后的機器碼,不能跨平臺,不同平臺下需要安裝不同版本
的JVM
答:我們編寫的Java源碼,編譯后會?成?種.class?件,稱為字節碼?件。Java虛擬機(JVM)就是負責將字節碼?件翻譯成特定平
臺下的機器碼然后運?,也就是說,只要在不同平臺上安裝對應的JVM,就可以運?字節碼?件,運?我們編寫的Java程序。
?這個過程,我們編寫的Java程序沒有做任何改變,僅僅是通過JVM這?“中間層”,就能在不同平臺上運?,真正實現了“?次編
譯,到處運?”的?的。
3、什么是JVM?
解析:不僅僅是基本概念,還有JVM的作?。
答:JVM,即JavaVirtualMachine,Java虛擬機。它通過模擬?個計算機來達到?個計算機所具有的的計算功能。JVM能夠跨計算機
體系結構來執?Java字節碼,主要是由于JVM屏蔽了與各個計算機平臺相關的軟件或者硬件之間的差異,使得與平臺相關的耦合統?由
JVM提供者來實現。
4、JVM由哪些部分組成?
解析:這是對JVM體系結構的考察
答:JVM的結構基本上由4部分組成:
類加載器,在JVM啟動時或者類運?時將需要的class加載到JVM中
執?引擎,執?引擎的任務是負責執?class?件中包含的字節碼指令,相當于實際機器上的CPU
內存區,將內存劃分成若?個區以模擬實際機器上的存儲、記錄和調度功能模塊,如實際機器上的各種功能的寄存器或者PC指針的記錄器
等
本地?法調?,調?C或C++實現的本地?法的代碼返回結果
5、類加載器是有了解嗎?
解析:底層原理的考察,其中涉及到類加載器的概念,功能以及?些底層的實現。
答:顧名思義,類加載器(classloader)?來加載Java類到Java虛擬機中。?般來說,Java虛擬機使?Java類的?式如下:Java
源程序(.java?件)在經過Java編譯器編譯之后就被轉換成Java字節代碼(.class?件)。
類加載器負責讀取Java字節代碼,并轉換成類的?個實例。每個這樣的實例?來表??個Java類。通過此實例的
newInstance()?法就可以創建出該類的?個對象。實際的情況可能更加復雜,?如Java字節代碼可能是通過?具動態?成的,也可能是
通過?絡下載的。
6、Java虛擬機是如何判定兩個Java類是相同的?
答:Java虛擬機不僅要看類的全名是否相同,還要看加載此類的類加載器是否?樣。只有兩者都相同的情況,才認為兩個類是相同的。即
便是同樣的字節代碼,被不同的類加載器加載之后所得到的類,也是不同的。?如?個Java類,編譯之后?成了
字節代碼?件。兩個不同的類加載器ClassLoaderA和ClassLoaderB分別讀取了這個?件,并定義出兩個
類的實例來表?這個類。這兩個實例是不相同的。對于Java虛擬機來說,它們是不同的類。試圖對這兩個類的對象進?相
互賦值,會拋出運?時異常ClassCastException。
7、類似-Xms、-Xmn這些參數的含義:
答:堆內存分配:
JVM初始分配的內存由-Xms指定,默認是物理內存的1/64
JVM最?分配的內存由-Xmx指定,默認是物理內存的1/4
默認空余堆內存?于40%時,JVM就會增?堆直到-Xmx的最?限制;空余堆內存?于70%時,JVM會減少堆直到-Xms的最?限制。
因此服務器?般設置-Xms、-Xmx相等以避免在每次GC后調整堆的??。對象的堆內存由稱為垃圾回收器的?動內存管理系統回收。
?堆內存分配:
JVM使?-XX:PermSize設置?堆內存初始值,默認是物理內存的1/64;
由XX:MaxPermSize設置最??堆內存的??,默認是物理內存的1/4。
-Xmn2G:設置年輕代??為2G。
-XX:SurvivorRatio,設置年輕代中Eden區與Survivor區的?值。
()和wait(n)、wait()的區別?
sleep?法:是Thread類的靜態?法,當前線程將睡眠n毫秒,線程進?阻塞狀態。當睡眠時間到了,會解除阻塞,進?可運?狀態,
等待CPU的到來。睡眠不釋放鎖(如果有的話);
wait?法:是Object的?法,必須與synchronized關鍵字?起使?,線程進?阻塞狀態,當notify或者notifyall被調?后,會解除
阻塞。但是,只有重新占?互斥鎖之后才會進?可運?狀態。睡眠時,釋放互斥鎖。
2、synchronized關鍵字?
1.答:底層實現:進?時,執?monitorenter,將計數器+1,釋放鎖monitorexit時,計數器-1;
當?個線程判斷到計數器為0時,則當前鎖空閑,可以占?;反之,當前線程進?等待狀態。
含義:(monitor機制)
Synchronized是在加鎖,加對象鎖。對象鎖是?種重量鎖(monitor),synchronized的鎖機制會根據線程競爭情況在運?時會有偏向
鎖(單?線程)、輕量鎖(多個線程訪問synchronized區域)、對象鎖(重量鎖,多個線程存在競爭的情況)、?旋鎖等。
該關鍵字是?個?種鎖的封裝。
3、volatile關鍵字?
答:該關鍵字可以保證可見性不保證原?性。
功能:
主內存和?作內存,直接與主內存產?交互,進?讀寫操作,保證可見性;
禁?JVM進?的指令重排序。
解析:關于指令重排序的問題,可以查閱DCL雙檢鎖失效相關資料。
4、volatile能使得?個?原?操作變成原?操作嗎?
答:能。
?個典型的例?是在類中有?個long類型的成員變量。如果你知道該成員變量會被多個線程訪問,如計數器、價格等,你最好是將其設置
為volatile。為什么?因為Java中讀取long類型變量不是原?的,需要分成兩步,如果?個線程正在修改該long變量的值,另?個線程
可能只能看到該值的?半(前32位)。但是對?個volatile型的long或double變量的讀寫是原?。
5、volatile修飾符的有過什么實踐?
?種實踐是?volatile修飾long和double變量,使其能按原?類型來讀寫。double和long都是64位寬,因此對這兩種類型的讀是分
為兩部分的,第?次讀取第?個32位,然后再讀剩下的32位,這個過程不是原?的,但Java中volatile型的long或double變量的
讀寫是原?的。
volatile修復符的另?個作?是提供內存屏障(memorybarrier),例如在分布式框架中的應?。簡單的說,就是當你寫?個volatile變
量之前,Java內存模型會插??個寫屏障(writebarrier),讀?個volatile變量之前,會插??個讀屏障(readbarrier)。意思就是
說,在你寫?個volatile域時,能保證任何線程都能看到你寫的值,同時,在寫之前,也能保證任何數值的更新對所有線程是可見的,因為
內存屏障會將其他所有寫的值更新到緩存。
6、ThreadLocal(線程局部變量)關鍵字?
答:當使?ThreadLocal維護變量時,其為每個使?該變量的線程提供獨?的變量副本,所以每?個線程都可以獨?的改變??的副本,
?不會影響其他線程對應的副本。
ThreadLocal內部實現機制:
每個線程內部都會維護?個類似HashMap的對象,稱為ThreadLocalMap,?邊會包含若?了Entry(K-V鍵值對),相應的線程被稱
為這些Entry的屬主線程;
Entry的Key是?個ThreadLocal實例,Value是?個線程特有對象。Entry的作?即是:為其屬主線程建?起?個ThreadLocal實例
與?個線程特有對象之間的對應關系;
Entry對Key的引?是弱引?;Entry對Value的引?是強引?。
7、我們為什么要使?線程池?核?線程池內部實現了解嗎?
答:
減少創建和銷毀線程的次數,每個?作線程都可以被重復利?,可執?多個任務。
可以根據系統的承受能?,調整線程池中?作線程的數?,放置因為消耗過多的內存,?把服務器累趴下(每個線程?約需要1MB內存,
線程開的越多,消耗的內存也就越?,最后死機)
?試官:核?線程池內部實現了解嗎?
答:對于核?的?個線程池,?論是newFixedThreadPool()?法,newSingleThreadExecutor()還是newCachedThreadPool()?
法,雖然看起來創建的線程有著完全不同的功能特點,但其實內部實現均使?了ThreadPoolExecutor實現,其實都只是
ThreadPoolExecutor類的封裝。
1.解釋AOP模塊
AOP(Aspect-OrientedProgramming)指?種程序設計范型,該范型以?種稱為切?(aspect)的語?構造為基礎,切?是?種新的
模塊化機制,?來描述分散在對象、類或?法中的橫切關注點(crosscuttingconcern)。
2.有哪些不同類型的IOC(依賴注?)?式?
構造器依賴注?:構造器依賴注?通過容器觸發?個類的構造器來實現的,該類有?系列參數,每個參數代表?個對其他類的依賴。
Setter?法注?:Setter?法注?是容器通過調??參構造器或?參static???法實例化bean之后,調?該bean的tter?法,即實現
了基于tter的依賴注?。
3.你怎樣定義類的作?域?
當定義?個在Spring?,我們還能給這個bean聲明?個作?域。它可以通過bean定義中的scope屬性來定義。如,當Spring要在需要的
時候每次?產?個新的bean實例,bean的scope屬性被指定為prototype。另???,?個bean每次使?的時候必須返回同?個實例,這
個bean的scope屬性必須設為singleton。
框架的事務管理有哪些優點?
它為不同的事務API如JTA,JDBC,Hibernate,JPA和JDO,提供?個不變的編程模式。
它為編程式事務管理提供了?套簡單的API?不是?些復雜的事務API如
它?持聲明式事務管理。
它和Spring各種數據訪問抽象層很好得集成。
5.什么是SpringMVC框架的控制器?
控制器提供?個訪問應?程序的?為,此?為通常通過服務接?實現。控制器解析?戶輸?并將其轉換為?個由視圖呈現給?戶的模型。
Spring??個?常抽象的?式實現了?個控制層,允許?戶創建多種?途的控制器。
6.在SpringAOP中,關注點和橫切關注的區別是什么?
關注點是應?中?個模塊的?為,?個關注點可能會被定義成?個我們想實現的?個功能。
橫切關注點是?個關注點,此關注點是整個應?都會使?的功能,并影響整個應?,?如?志,安全和數據傳輸,?乎應?的每個模塊都需
要的功能。因此這些都屬于橫切關注點。
1.使?Spring框架的好處是什么?
答:輕量:Spring是輕量的,基本的版本?約2MB。
控制反轉:Spring通過控制反轉實現了松散耦合,對象們給出它們的依賴,?不是創建或查找依賴的對象們。
?向切?的編程(AOP):Spring?持?向切?的編程,并且把應?業務邏輯和系統服務分開。
容器:Spring包含并管理應?中對象的?命周期和配置。
MVC框架:Spring的WEB框架是個精?設計的框架,是Web框架的?個很好的替代品。
事務管理:Spring提供?個持續的事務管理接?,可以擴展到上?本地事務下?全局事務(JTA)。
異常處理:Spring提供?便的API把具體技術相關的異常(?如由JDBC,HibernateorJDO拋出的)轉化為?致的unchecked異常。
2、Spring由哪些模塊組成?
答:以下是Spring框架的基本模塊:
Coremodule
Beanmodule
Contextmodule
ExpressionLanguagemodule
JDBCmodule
ORMmodule
OXMmodule
JavaMessagingService(JMS)module
Transactionmodule
Webmodule
Web-Servletmodule
Web-Strutsmodule
Web-Portletmodule
3、BeanFactory–BeanFactory實現舉例。
答:Bean??是??模式的?個實現,提供了控制反轉功能,?來把應?的配置和依賴從正真的應?代碼中分離。
最常?的BeanFactory實現是XmlBeanFactory類。
4、什么是SpringIOC容器?
答:SpringIOC負責創建對象,管理對象(通過依賴注?(DI),裝配對象,配置對象,并且管理這些對象的整個?命周期。
5、IOC的優點是什么?
答:IOC或依賴注?把應?的代碼量降到最低。它使應?容易測試,單元測試不再需要單例和JNDI查找機制。最?的代價和最?的侵?性
使松散耦合得以實現。IOC容器?持加載服務時的餓漢式初始化和懶加載。
6、什么是基于注解的容器配置?
答:相對于XML?件,注解型的配置依賴于通過字節碼元數據裝配組件,??尖括號的聲明。
開發者通過在相應的類,?法或屬性上使?注解的?式,直接組件類中進?配置,?不是使?xml表述bean的裝配關系。
1、什么是SpringMVC框架的控制器?
答:控制器提供?個訪問應?程序的?為,此?為通常通過服務接?實現。控制器解析?戶輸?并將其轉換為?個由視圖呈現給?戶的模
型。Spring??個?常抽象的?式實現了?個控制層,允許?戶創建多種?途的控制器。
2、什么是基于注解的容器配置?
答:相對于XML?件,注解型的配置依賴于通過字節碼元數據裝配組件,??尖括號的聲明。
開發者通過在相應的類,?法或屬性上使?注解的?式,直接組件類中進?配置,?不是使?xml表述bean的裝配關系。
3、怎樣開啟注解裝配?
答:注解裝配在默認情況下是不開啟的,為了使?注解裝配,我們必須在Spring配置?件中配置元素。
4、@Required注解
答:這個注解表明bean的屬性必須在配置的時候設置,通過?個bean定義的顯式的屬性值或通過?動裝配,若@Required注解的bean屬
性未被設置,容器將拋出BeanInitializationException。
5、@Autowired注解
答:@Autowired注解提供了更細粒度的控制,包括在何處以及如何完成?動裝配。它的?法和@Required?樣,修飾tter?法、構造
器、屬性或者具有任意名稱和/或多個參數的PN?法。
6、@Qualifier注解
答:當有多個相同類型的bean卻只有?個需要?動裝配時,將@Qualifier注解和@Autowire注解結合使?以消除這種混淆,指定需要裝
配的確切的bean。
Spring數據訪問
1、什么是Mybatis?
(1)Mybatis是?個半ORM(對象關系映射)框架,它內部封裝了JDBC,開發時只需要關注SQL語句本?,不需要花費精?去處理加載
驅動、創建連接、創建statement等繁雜的過程。程序員直接編寫原?態sql,可以嚴格控制sql執?性能,靈活度?。
(2)MyBatis可以使?XML或注解來配置和映射原?信息,將POJO映射成數據庫中的記錄,避免了?乎所有的JDBC代碼和?動設
置參數以及獲取結果集。
(3)通過xml?件或注解的?式將要執?的各種statement配置起來,并通過java對象和statement中sql的動態參數進?映射?成最終
執?的sql語句,最后由mybatis框架執?sql并將結果映射為java對象并返回。(從執?sql到返回result的過程)。
2、Mybaits的優點?
(1)基于SQL語句編程,相當靈活,不會對應?程序或者數據庫的現有設計造成任何影響,SQL寫在XML?,解除sql與程序代碼的耦
合,便于統?管理;提供XML標簽,?持編寫動態SQL語句,并可重?。
(2)與JDBC相?,減少了50%以上的代碼量,消除了JDBC?量冗余的代碼,不需要?動開關連接;
(3)很好的與各種數據庫兼容(因為MyBatis使?JDBC來連接數據庫,所以只要JDBC?持的數據庫MyBatis都?持)。
(4)能夠與Spring很好的集成;
(5)提供映射標簽,?持對象與數據庫的ORM字段關系映射;提供對象關系映射標簽,?持對象關系組件維護。
3、MyBatis框架的缺點?
(1)SQL語句的編寫?作量較?,尤其當字段多、關聯表多時,對開發?員編寫SQL語句的功底有?定要求。
(2)SQL語句依賴于數據庫,導致數據庫移植性差,不能隨意更換數據庫。
4、MyBatis框架適?場合?
(1)MyBatis專注于SQL本?,是?個?夠靈活的DAO層解決?案。
(2)對性能的要求很?,或者需求變化較多的項?,如互聯?項?,MyBatis將是不錯的選擇。
5、MyBatis與Hibernate有哪些不同?
(1)Mybatis和hibernate不同,它不完全是?個ORM框架,因為MyBatis需要程序員??編寫Sql語句。
(2)Mybatis直接編寫原?態sql,可以嚴格控制sql執?性能,靈活度?,?常適合對關系數據模型要求不?的軟件開發,因為這類軟件
需求變化頻繁,?但需求變化要求迅速輸出成果。但是靈活的前提是mybatis?法做到數據庫?關性,如果需要實現?持多種數據庫的軟
件,則需要?定義多套sql映射?件,?作量?。
(3)Hibernate對象/關系映射能?強,數據庫?關性好,對于關系模型要求?的軟件,如果?hibernate開發可以節省很多代碼,提?效
率。
6、Mybatis是如何進?分頁的?分頁插件的原理是什么?
Mybatis使?RowBounds對象進?分頁,它是針對ResultSet結果集執?的內存分頁,??物理分頁。可以在sql內直接書寫帶有物理分頁
的參數來完成物理分頁功能,也可以使?分頁插件來完成物理分頁。
分頁插件的基本原理是使?Mybatis提供的插件接?,實現?定義插件,在插件的攔截?法內攔截待執?的sql,然后重寫sql,根據
dialect??,添加對應的物理分頁語句和物理分頁參數。
1、Mybatis動態sql有什么??執?原理?有哪些動態sql?
答:Mybatis動態sql可以在Xml映射?件內,以標簽的形式編寫動態sql,執?原理是根據表達式的值完成邏輯判斷并動態拼接sql的功
能。
Mybatis提供了9種動態sql標簽:trim|where|t|foreach|if|choo|when|otherwi|bind。
2、Xml映射?件中,除了常見的lect|inrt|updae|delete標簽之外,還有哪些標簽?
答:
3、為什么說Mybatis是半?動ORM映射?具?它與全?動的區別在哪??
答:Hibernate屬于全?動ORM映射?具,使?Hibernate查詢關聯對象或者關聯集合對象時,可以根據對象關系模型直接獲取,所以它是
全?動的。?Mybatis在查詢關聯對象或關聯集合對象時,需要?動編寫sql來完成,所以,稱之為半?動ORM映射?具。
4、MyBatis實現?對?有?種?式?具體怎么操作的?
答:有聯合查詢和嵌套查詢,聯合查詢是?個表聯合查詢,只查詢?次,通過在resultMap??配置association節點配置?對?的類就可以完
成;
嵌套查詢是先查?個表,根據這個表??的結果的外鍵id,去再另外?個表??查詢數據,也是通過association配置,但另外?個表的查詢
通過lect屬性配置。
5、MyBatis實現?對多有?種?式,怎么操作的?
答:有聯合查詢和嵌套查詢。聯合查詢是?個表聯合查詢,只查詢?次,通過在resultMap??的collection節點配置?對多的類就可以完
成;嵌套查詢是先查?個表,根據這個表??的結果的外鍵id,去再另外?個表??查詢數據,也是通過配置collection,但另外?個表的查詢通
過lect節點配置
6、Mybatis的?級、?級緩存:
答:1)?級緩存:基于PerpetualCache的HashMap本地緩存,其存儲作?域為Session,當Sessionflush或clo之后,該
Session中的所有Cache就將清空,默認打開?級緩存。
2)?級緩存與?級緩存其機制相同,默認也是采?PerpetualCache,HashMap存儲,不同在于其存儲作?域為
Mapper(Namespace),并且可?定義存儲源,如Ehcache。默認不打開?級緩存,要開啟?級緩存,使??級緩存屬性類需要實現
Serializable序列化接?(可?來保存對象的狀態),可在它的映射?件中配置
3)對于緩存數據更新機制,當某?個作?域(?級緩存Session/?級緩存Namespaces)的進?了C/U/D操作后,默認該作?域下所有
lect中的緩存將被clear。
7、equal和hashcode作?和區別?
答:?先,我們要明?hashCode()和equals()?法的作?是什么,然后才能說他的區別,說了區別之后在說明使?的時候需要注意的地
?,這樣的回答思路基本是OK的。
?、hahsCode()和equals()的作?是什么?
hahsCode()和equals()的作?其實是?樣的,?的都是為了再java???較兩個對象是否相等?致
?、hahsCode()和equals()的區別是什么?
我們可以從兩個?度分別介紹他們的區別:?個是性能,?個是可靠性。他們的主要區別體現在這?
()既然已經實現?較兩個對象的功能了,為什么還需要hashCode()呢?
因為重寫的equals()??般?較的較為全?和復雜(它會對這個對象內所以成員變量??進??較),這樣效率很低,?通過hashCode()對
?,則只要?成?個hash值就能?較了,效率很?
2.那hashCode的效率這么?,為啥還要?equals()呢?
因為hashCode()并不是完全可靠,?常有可能的情況是,兩個完全不同的對象的hash值卻是?樣的。
所以會有下?三個重要的結論:
*equals()相等的兩個對象他們的hashCode()肯定相等,即equals()絕對可靠。
*hahsCode()相同的兩個對象,它們的equals()不?定相同。即?hashCode()?較相同的時候不靠譜
*hashCode()不同的兩個對象,他們的那么equals()肯定不同。即?hashCode()?較不同的時候肯定靠譜
hashCode()和equals使?的注意事項
1.對于需要?量并且快速的對?的話如果都?equals()去做顯然效率太低,所以解決?案為:每當需要?較的時候,?先?hahsCode()
去對?,?如果hashCode()不?樣,則兩個對象肯定不?樣,此時就沒有必要再?equals()?較了;如果hashCode()相同,則這兩個對
象有可能相同,這時候再去?較這兩個對象的equals(),如若equals()也相同,則表?這兩個真的相同的,這樣既??提?了效率,?保證
了準確性。
2.事實上,我們平時?的集合框架中的hashMap、hashSet,hashTable中對key的?較就是使?上述這種?法。
3.?Obejct默認的equals和HashCode?法返回的是對象的地址相關信息。所以當我們通過new關鍵字創建了兩個內容相同的對象,雖然
他們的內容相同,但是他們在內存中分配的地址不同,導致它們的hashCode()不同,這肯定不是我們想要的。所以當我們要將某個類應?
到集合中去的時候,就必須重寫equals()?法和hashCode()?法。
擴展
1.阿?巴巴開發規約明確規定:
*.只要重寫了equals()?法,就必須重寫hashCode()?法
*.因為Set存儲的是不重復的對象,依據hashCode和equals進?判斷,所以Set存儲的對象必須重寫這兩個?法
*.如果對象定義為Map的健,那么就必須重寫equals()?法和hashCode()?法
*.String重寫了equals()?法和hashCode()?法,所以我們可以?常愉快的時候String對象作為key
2.是不是每個對象都要重寫這兩個?法,到底什么時候重寫?
*.事實上?般情況下,我們并不需要重寫這兩個?法,只有該類被應?到集合框架中去的時候,才應該重寫。
3.我能不能值重寫equals()?法,不重寫hashCode()?法?
*.如果重寫了equals()?法,?如說基于對象的內容實現的,?保留了hashCode()的實現不改變,那么最終出現的情況很可能是,兩個對象
明明是“相等的”,但是hashCode()卻不?樣,這不是寶寶想要的
4.為什么需要hashCode
*.通過hashCode可以提?對?的性能
1、如何保證單機保證3wtps訪問量?
答:今天?試被問道?個問題,如何保證單機保證3wtps的訪問量?
聽到這個問題,第?反應有點蒙,想成了3w的并發量了,想了?下,?前的容器?如tomcat的最?并發量也就?千就扛不住了...
后來我先說IO模型使?NOI,能夠處理?數據?并發的請求,然后從代碼優化上說要盡量并?處理邏輯,以及優化JVM,調整堆??,減少
FullGC,使停頓時間減少,最終使每個請求的處理時間減少。
但是也知道這個說法挺不搭題的....
后來?試官跟我說從兩??來分析,???是從請求上來說,將多個請求合并成?個請求發送,減少請求次數,???是把請求都改成
異步的,后臺處理,讓請求過來之后就直接返回成功。
當時感覺這兩個??說的也沒問題。畢竟第?次出去?試,腦袋???有些蒙了,然后后邊就是隨便聊了?下我個?擅長的??,我就
說了?下??項?上使?的springCloud,的?些核?組件及注冊中?的實現原理等,然后就沒有然后了...
感覺這次?試基本是涼了,但是也還好,做好了準備,第?次?試當做總結經驗教訓了吧。
回來的路上,也?直在思考這個問題,有了?些想法:
1.?先從題?的說明上,本?存在?些問題,說的是要保證3W的tps,但是如果將請求合并了,是減少了請求次數,但是也打不到3w
的tps了啊,這樣本?就不符合這個題?的要求了,所以我認為要么修改題?的說明,要么這個3wtps就是?個固定值,?法通過外部優化
來減少了,只能從系統內部去優化。
2.然后從系統優化來說,這個題?本?也存在?定的問題,就是這3w的tps到底是峰值流量還是平時流量,是需要同步給出處理結果,
還是可以接受異步的后續返回處理結果。
如果是需要同步給出處理結果,那么就只能從業務處理流程上進?優化,也就是盡量把串?的處理流程改成并?的處理流程,把查詢盡量從
數據庫改到緩存中。但是即使這樣,?個需要同步返回結果的3wtps單機處理,每個請求的處理時間=1%3000≈0.00033秒=0.33微
妙,感覺在時間上是根本?法處理完?個業務流程的。如果?個業務流程?法處理完的話,那么請求就會出現堆積現象,堆積過多就會出現
OOM,內存溢出了...所以我個?感覺這個單機3W同步處理的優化是不符合現實的,只能從業務上去處理,盡量把同步的業務邏輯改成異步
的業務邏輯,即使改成異步的業務邏輯,雖然能夠?撐住3w的tps,但是因為服務的處理速刷?法達到3wtps的處理速度,那么最終會造成
內存的不斷消耗,最終導致OOM的出現。
3.看這個tps到底是峰值還是平時了,如果只是峰值3w,平時很低,?且可以使?異步的話,那么就可以使?MQ了,請求過來直接把
請求發送到MQ中去,不處理業務。然后創建消費者去消費這些消息。達到削峰填??的。
4.計算?下,如果?個請求的處理時間是10ms,那么單線程每秒的處理速度=1000%10=100個,采?并?處理,如果是?個四核
?線程的處理器,理論上創建16個線程去處理,那么每秒的處理速度=100*16=1600個。不知道這樣的計算?法是否正確.
2、講?下模版模式和策略模式的區別?
答:模板?法模式的主要思想:定義?個算法流程,將?些特定步驟的具體實現、延遲到?類。使得可以在不改變算法流程的情況下,通過
不同的?類、來實現“定制”流程中的特定的步驟。
策略模式的主要思想:使不同的算法可以被相互替換,?不影響客戶端的使?。
3、redis和MQ如何平滑的擴容與縮容?
答:MQ的消息是存放在內存或者磁盤中的,在縮減集群數量時,必須要遷移節點的數據。增加節點時,要重新配置集群。這么看來是?法
平滑縮容和擴容的。
4、MQ的消息?產?消費速度快得多,有什么解決?案嗎?
?產消息?消費速度快得多,這個本?是沒問題的,因為MQ的?個作?就是削峰。
如果要提?消費速度,可以增加多個消費者
5、feign如何實現負載均衡,與Ribbon的負載均衡有什么區別?
答:
Feign?般?Ribbon來實現負載均衡。
與Ribbon負載均衡的區別?我覺得2個是不?樣的東西吧,Feign已經包含了Ribbon,需要配合使?,?般?產環境?的是Spring
Cloud技術來整合的,當然也可以?其他技術來替代。
Feign作為客戶端
Ribbon作為負載均衡
Eureka作為注冊中?
Zuul作為?關
Security作為安全OAuth2認證
?先得知道Feign和Ribbon是什么,然后具體怎么實現參考?馬哥微服務課程,也可以看官?
Feign:申明式Web服務客戶端
申明式:接?聲明、Annotation驅動
Web服務:HTTP的?式作為通訊協議
客戶端:?于服務調?的存根
假設,有?個Java接?UrService,Feign可以將其聲明它是以HTTP?式調?的。
Ribbon:客戶端負載均衡器,可以對HTTP和TCP客戶端的?為進?控制。
Java技術、?試、就業交流群:929041174(新群)。
Java實操項?、學習資料有需求可以加美??師微信備注“111”領取資料哦:
本文發布于:2023-03-08 05:52:44,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/1678225964130466.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:騰訊面試題.doc
本文 PDF 下載地址:騰訊面試題.pdf
| 留言與評論(共有 0 條評論) |