大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 史上最全的中高級JAVA工程師面試題及答案(二)

史上最全的中高級JAVA工程師面試題及答案(二)

更新時間:2019-10-18 11:32:41 來源:動力節點 瀏覽6117次

  

今天動力節點java培訓機構小編為大家匯總了史上最全的中高級JAVA工程師面試題及答案(二),分別是java線程池面試題、java jvm 面試題、Zookeeper面試題、Mysql面試題及Mysql性能診斷和優化面試題,希望能夠幫助到正在找工作的中高級JAVA程序員,下面就隨小編一起來看看吧。


史上最全的中高級JAVA工程師面試題及答案


java線程池面試題


  25、Executors框架的四種線程池及拒絕策略


  四種線程池


  ExecutorService executorService =固定大小線程池


  Executors.newFixedThreadPool(60); 設置固定值會造成高并發線程排隊等待空閑線程,尤其是當讀取大數據量時線程處理時間長而不釋放線程,導致無法創建新線程。


  可緩存線程池 Executors.newCachedThreadPool(); 線程池無限大,而系統資源(內存等)有限,會導致機器內存溢出OOM。


  定長且可定時、周期線程池 Executors.newScheduledThreadPool(5);


  單線程線程池 Executors.newSingledThreadPool();


/* 自定義線程池。

         * 構造參數:

         * public ThreadPoolExecutor(

             * int corePoolSize,--當前線程池核心線程數

             * int maximumPoolSize,--當前線程池最大線程數

             * long keepAliveTime,--保持活著的空間時間

             * TimeUnit unit,--時間單位

             * BlockingQueueworkQueue,--排隊等待的自定義隊列

             * ThreadFactoty threadFactory,

             * RejectedExecutionHandler handler--隊列滿以后,其他任務被拒絕執行的方法

         * ){.........}


  在使用有界隊列時,若有新的任務需要執行,


  (1)若線程池實際線程數小于corePoolSize,則優先創建線程,


  (2)若大于corePoolSize,則會將任務加入隊列,


  (3)若隊列已滿,則在總線程數不大于maximumPoolSize的前提下,創建新的線程,


  (4)若線程數大于maximumPoolSize,則執行拒絕策略。或其他自定義方式。


  JDK拒絕策略


  (1)AbortPolicy:默認,直接拋出異常,系統正常工作。


  (2)DiscardOldestPolicy:丟棄最老的一個請求,嘗試再次提交當前任務。


  (3)CallerRunsPolicy:只要線程池未關閉,該策略直接在調用者線程中,運行當前被丟棄的任務。用線程池中的線程執行,而是交給調用方來執行, 如果添加到線程池失敗,那么主線程會自己去執行該任務,不會等待線程池中的線程去執行


new ThreadPoolExecutor(   

   2, 3, 30, TimeUnit.SECONDS,    

    new SynchronousQueue(),    

    new RecorderThreadFactory("CookieRecorderPool"),    

     new ThreadPoolExecutor.CallerRunsPolicy());  


  (4)DiscardPolicy:丟棄無法處理的任務,不給予任何處理。


  (5)自定義拒絕策略 如果需要自定義策略,可以實現RejectedExecutionHandler接口。


  26、Reactor模式


Reactor單線程模型


1_meitu_1.jpg

  

2_meitu_2.jpg


一個Acceptor線程,監聽Accept事件,負責接收客戶端的連接SocketChannel,SocketChannel注冊到Selector上并關心可讀可寫事件。一個Reactor線程,負責輪訓selector,將selector注冊的就緒事件的key讀取出來,拿出attach任務Handler根據事件類型分別去執行讀寫等。


  單線程模型的瓶頸:比如:拿一個客戶端來說,進行多次請求,如果Handler中數據讀出來后處理的速度比較慢(非IO操作:解碼-計算-編碼-返回)會造成客戶端的請求被積壓,導致響應變慢!所以引入Reactor多線程模型!


  Reactor多線程模型


1.png


2_meitu_4.jpg


Reactor多線程就是把Handler中的IO操作,非IO操作分開。操作IO的線程稱為IO線程,操作非IO的線程叫做工作線程。客戶端的請求(IO操作:讀取出來的數據)可以直接放進工作線程池(非IO操作:解碼-計算-編碼-返回)中,這樣異步處理,客戶端發送的請求就得到返回了不會一直阻塞在Handler中。但是當用戶進一步增加的時候,Reactor線程又會出現瓶頸,因為Reactor中既有IO操作,又要響應連接請求。為了分擔Reactor的負擔,所以引入了主從Reactor模型!


  主從Reactor模型


3.png


4_meitu_6.jpg


  主Reactor用于響應連接請求,從Reactor用于處理IO操作請求!??


特點是:服務端用于接收客戶端連接的不再是1個單獨的NIO線程(Acceptor線程),而是一個獨立的NIO線程池。??


Acceptor線程池接收到客戶端TCP連接請求處理完成后(可能包含接入認證等),將新創建的SocketChannel注冊到I/O線程池(sub reactor線程池)的某個I/O線程上,由它負責SocketChannel的讀寫和編解碼工作。

?

Acceptor線程池只用于客戶端的登錄、握手和安全認證,一旦鏈路建立成功,就將鏈路注冊到后端subReactor線程池的I/O線程上,有I/O線程負責后續的I/O操作。??


第三種模型比起第二種模型,是將Reactor分成兩部分,mainReactor負責監聽server socket,accept新連接,并將建立的socket分派給subReactor。subReactor負責多路分離已連接的socket,讀寫網 絡數據,對業務處理功能,其扔給worker線程池完成。通常,subReactor個數上可與CPU個數等同。



  java jvm 面試題


  27、Object的內存布局


  

5_meitu_7.jpg

  28、方法區卸載Class的條件


  (1)該類所有的實例已經被回收 


(2)加載該類的ClassLoader已經被回收 


(3)該類對應的java.lang.Class對象沒有任何地方被引用


  Ps:方法區除了回收無用class,也回收廢棄常量,即沒有被引用常量


  29、可以作為GC Roots的對象包括哪些


  (1)虛擬機棧(棧幀中的局部變量表)中引用的變量 


(2)方法區中類靜態屬性引用的對象 


(3)方法區中常量引用的對象 


(4)本地方法棧中JNI引用的變量


  30、JVM運行時內存模型


  方法區、堆、虛擬機棧、本地方法棧、程序計數器


  31、Netty的ByteBuffer的引用計數器機制


  從netty的4.x版本開始,netty使用引用計數機制進行部分對象的管理,通過該機制netty可以很好的實現自己的共享資源池。如果應用需要一個資源,可以從netty自己的共享資源池中獲取,新獲取的資源對象的引用計數被初始化為1,可以通過資源對象的retain方法增加引用計數,當引用計數為0的時候該資源對象擁有的資源將會被回收。


  32、判斷對象是否存活的兩種方法


  (1)引用計數法:缺點是對循環引用的對象無法回收 


(2)可達性分析


  33、Java對象的初始化過程

6_meitu_8.jpg

34、類加載雙親委派模型


  從上到下分三個類加載器:


  BootStrap classloader:啟動類加載器,負責將Java_HOME/lib下的類庫加載到虛擬機內存中,比如rt.jar Extension classloader:擴展類加載器,負責將JAVA_HOME/lib/ext下的類庫加載到虛擬機內存中。


 Application classloader:應用程序類加載器,負責加載classpath環境變量下指定的類庫。如果程序中沒有自定義過類加載器,那么這個就是程序中默認的類加載器。


  雙親委派模型:


  如果一個類加載器收到類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器完成。每個類加載器都是如此,只有當父加載器在自己的搜索范圍內找不到指定的類時(即ClassNotFoundException),子加載器才會嘗試自己去加載。


7_meitu_9.jpg


  防止自定義的一些跟jdk標準庫中沖突的全限定名的類被加載,導致標準庫函數不可用。



  Zookeeper面試題


  35、Zookeeper的常用應用場景有哪些


  分布式鎖:獲取父節點下的最小節點作為獲得鎖的一方


  命名服務:通過在zookeeper節點下創建全局唯一的一個path


  配置管理:配置放在zk上,所有應用監聽節點改變。


  集群管理:GroupMembers集群管理,是否有機器退出和加入


  36、Zookeeper的分布式數據一致性算法


  ?ZAB原子消息廣播協議*。


  一種是基于basic paxos實現的,另外一種是基于fast paxos算法實現的。


  37、Zookeeper數據同步的簡單描述


  在ZooKeeper中所有的客戶端事務請求都由一個主服務器也就是Leader來處理,其他服務器為Follower,Leader將客戶端的事務請求轉換為事務Proposal,并且將Proposal分發給集群中其他所有的Follower,然后Leader等待Follwer反饋,當有過半數(>=N/2+1)的Follower反饋信息后,Leader將再次向集群內Follower廣播Commit信息,Commit為將之前的Proposal提交;


  38、ZK集群最少需要幾臺機器?


  三臺,2N+1,保證奇數,主要是為了leader選舉算法中的“超過半數有效(>=N/2+1)”


  38、Zookeeper和Eureka的區別


  ZK保證Cp,即一致性,分區容錯性,比如當master節點因為網絡故障和其他節點失去聯系的時候,剩余節點會重新進行Master選舉。問題在于Master選舉的時間太長30~210s,選舉期間整個zk集群是不可用的,這就導致選舉期間的注冊服務癱瘓。??


Eureka保證Ap,高可用性,它沒有所謂主從節點概念,各節點平等。某節點掛掉不影響其他節點功能,其他節點照樣提供查詢和注冊功能。Eureka客戶端發現Eureka節點掛掉直接切換到其他正常的節點上去。只不過可能查到的數據不是最新的,也就是Eureka不保證數據的強一致性。??


作為注冊中心,推薦Eureka,因為注冊服務更重要的是可用性。



  Mysql面試題


  39、InnoDB和MyISAM存儲引擎的區別


  Starting from MySQL 5.5.5, the default storage engine for new tables isInnoDB rather than MyISAM.


1571368412171318.jpg


  40、Btree索引和Hash索引的區別


  Btree索引適合范圍查找,Hash索引適合精確查找


  41、數據庫的ACID特性


  數據庫事務必須具備ACID特性


 原子性:Atomic,所有的操作執行成功,才算整個事務成功 


一致性:Consistency,不管事務success或fail,不能破壞關系數據的完整性以及業務邏輯上的一致性 


隔離性:Isolation,每個事務擁有獨立數據空間,多個事務的數據修改相互隔離。事務查看數據更新時,數據要么是另一個事務修改前的狀態,要么是修改后狀態,不應該查看到中間狀態數據。


持久性:Durability,事務執行成功,數據必須永久保存。重啟DB,數據需要恢復到事務執行成功后的狀態。


原子性、一致性、持久性DBMS通過日志來實現。??隔離性DBMS通過鎖來實現


  42、Mysql數據庫的隔離級別


1571368542545779.jpg


  43、Select For Update使用場景


  select for update 的使用場景,為了避免自己看到的數據并不是數據庫存儲的最新數據并且看到的數據只能由自己修改,需要用 for update 來限制。


  44、分布式事務模型之XA和TCC的區別和聯系?


  XA-DTP模型


  最早的分布式事務模型是 X/Open 國際聯盟提出的 X/Open Distributed Transaction Processing(DTP)模型,也就是大家常說的 X/Open XA 協議,簡稱XA 協議。??


DTP 模型中包含一個全局事務管理器(TM,Transaction Manager)和多個資源管理器(RM,Resource Manager)。全局事務管理器負責管理全局事務狀態與參與的資源,協同資源一起提交或回滾;資源管理器則負責具體的資源操作。


  TCC模型


  TCC(Try-Confirm-Cancel)分布式事務模型相對于 XA 等傳統模型,其特征在于它不依賴資源管理器(RM)對分布式事務的支持,而是通過對業務邏輯的分解來實現分布式事務。Try-Confirm-Cancel Try 操作對應2PC 的一階段準備(Prepare);Confirm 對應 2PC 的二階段提交(Commit),Cancel 對應 2PC 的二階段回滾(Rollback),可以說 TCC 就是應用層的 2PC。


  45、Mysql-binlog日志復制方式


  (1)基于段的復制 記錄的是執行的語句


(2)基于行的復制 記錄是表中每一行的操作 


(3)混合復制


  46、mysql主從復制原理


  1571368792836343.jpg


  從服務器的IO線程讀取主服務器的二進制日志變更,寫入到中繼日志relaylog中,如果IO線程追趕上了主服務器的日志,則進入sleep狀態,直到主服務器發送喚醒信號,從服務器上的SQL線程重放relaylog中的日志。


  47、基于日志點的復制和GTID的復制有何區別?


  基于日志點的復制:從主服務器的哪個二進制日志的偏移量進行增量同步,如果指定錯誤會造成遺漏或重復。 


基于GTID的復制:從服務器會告訴主服務器,已經在從服務器上已經執行完了哪些gtid值,然后主庫會把從庫未執行的事務gtid值發送給從庫執行。同一個事務只在指定的從庫上執行一次。



  Mysql性能診斷和優化面試題


  48、聚簇索引和非聚簇索引的區別


  聚簇索引:就是指主索引文件和數據文件為同一份文件,聚簇索引主要用在Innodb存儲引擎中。如主鍵。B+Tree的葉子節點上的data就是數據本身。 


非聚簇索引:就是指B+Tree的葉子節點上的data,并不是數據本身,而是數據存放的地址


  49、消費者宕機:怎么保證消息隊列消息不丟失?


  比如activemq或者rabbitmq生產者消息投遞到消息隊列后,消費者拿到消息后,默認是自動簽收機制,消息隊列將刪除這條消息,但是如果僅僅是拿到但是沒有來得及處理業務邏輯時,消費者就宕機,那么此消息將會丟失,以后也不會再收到。 


解決辦法:消費端要設置簽收機制為手動簽收,只有當消息最終被處理,才告訴消息隊列已經消費,此時消息隊列再刪除這條消息。


  50、MQ集群宕機:怎么保證消息不丟失?


  生產者投遞消息到mq服務器,如果不保證消息和隊列的持久化,那么當mq宕機時消息將徹底丟失,所以需要對消息做持久化存儲,可以存儲到磁盤或者數據庫中,當mq服務器恢復時,消費端可以繼續消費mq服務器中的消息。


  但是,比如RabbitMQ的消息持久化,是不承諾100%的消息不丟失的!??


原因:因為有可能RabbitMQ接收到了消息,但是還沒來得及持久化到磁盤,他自己就宕機了,這個時候消息還是會丟失的。如果要完全100%保證寫入RabbitMQ的數據必須落地磁盤,不會丟失,需要依靠其他的機制。



  Spring源碼面試題


  51、springmvc如何解決循環依賴的問題


  當使用構造器方式初始化一個bean,而且此時多個Bean之間有循環依賴的情況,spring容器就會拋出異常! 解決辦法:初始化bean的時候(注意此時的bean必須是單例,否則不能提前暴露一個創建中的bean)使用set方法進行注入屬性,此時bean對象會先執行構造器實例化,接著將實例化后的bean放入一個map中,并提供引用。當需要通過set方式設置bean的屬性的時候,spring容器就會從map中取出被實例化的bean。比如A對象需要set注入B對象,那么從Map中取出B對象即可。以此類推,不會出現循環依賴的異常。


  52、spring事務的傳播行為和隔離級別


  spring事務七個事務傳播行為


  在TransactionDefinition接口中定義了七個事務傳播行為:


  PROPAGATION_REQUIRED 如果存在一個事務,則支持當前事務。如果沒有事務則開啟一個新的事務。


  PROPAGATION_SUPPORTS 如果存在一個事務,支持當前事務。如果沒有事務,則非事務的執行。但是對于事務同步的事務管理器,PROPAGATION_SUPPORTS與不使用事務有少許不同。


  PROPAGATION_MANDATORY 如果已經存在一個事務,支持當前事務。如果沒有一個活動的事務,則拋出異常。


  PROPAGATION_REQUIRES_NEW 總是開啟一個新的事務。如果一個事務已經存在,則將這個存在的事務掛起。


  PROPAGATION_NOT_SUPPORTED 總是非事務地執行,并掛起任何存在的事務。


  PROPAGATION_NEVER 總是非事務地執行,如果存在一個活動事務,則拋出異常


  PROPAGATION_NESTED如果一個活動的事務存在,則運行在一個嵌套的事務中. 如果沒有活動事務, 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執行


  Spring事務的五種隔離級別


  在TransactionDefinition接口中定義了五個不同的事務隔離級別


  ISOLATION_DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別. 另外四個與JDBC的隔離級別相對應


  ISOLATION_READ_UNCOMMITTED 這是事務最低的隔離級別,它充許別外一個事務可以看到這個事務未提交的數據。這種隔離級別會產生臟讀,不可重復讀和幻像讀


  ISOLATION_READ_COMMITTED 保證一個事務修改的數據提交后才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據。這種事務隔離級別可以避免臟讀出現,但是可能會出現不可重復讀和幻像讀。


  ISOLATION_REPEATABLE_READ 這種事務隔離級別可以防止臟讀,不可重復讀。但是可能出現幻像讀。它除了保證一個事務不能讀取另一個事務未提交的數據外,還保證了避免下面的情況產生(不可重復讀)。


  ISOLATION_SERIALIZABLE 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止臟讀,不可重復讀外,還避免了幻像讀。


timg (3).jpg


以上就是動力java培訓機構小編介紹的“史上最全的中高級JAVA工程師面試題及答案(二)”的內容,希望對大家有幫助,更多java最新面試題請繼續關注動力節點java培訓機構官網,每天會有精彩內容分享與你。


由于“史上最全的中高級JAVA工程師面試題及答案”內容太多,本文已滿,請看下文鏈接:


1~24道中高級JAVA工程師面試題及答案請看鏈接:http://www.dabaquan.cn/javazixun/2169.html


53~64道中高級JAVA工程師面試題及答案請看鏈接:http://www.dabaquan.cn/javazixun/2192.html


相關推薦


面試題總結—高級Java工程師面試題


Java高級開發工程師面試題


秋招中高級Java面試題,10道詳解,死磕就對了


最新Java工程師面試題整理[社招篇]


大家都在收藏的中級常見Java工程師面試題


騰訊Java高級工程師高頻面試題



提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 美日韩毛片 | 人人做人人爽久久久精品 | 精品国产福利久久久 | 久在线 | 久久精品综合网 | 国产一级在线观看www色 | 九九精品热 | 青春草禁区视频在线观看 | 亚洲欧美激情综合第一区 | 国产精品美女一级在线观看 | 亚洲社区在线 | 久久99精品久久久66 | 开心久久婷婷综合中文字幕 | 四虎+网站+影院+网站 | 亚洲高清视频免费 | 亚洲激情网址 | 秘密影院久久综合亚洲综合 | 国产成人影院一区二区 | 国产欧美自拍 | 日本特级毛片 | 青草小视频| 亚洲a免费 | 亚欧精品一区二区三区 | 深夜在线看 | 国产福利在线视频 | 亚洲图片综合网 | 欧美精品国产日韩综合在线 | 午夜精品久久久久久久2023 | 免费人成激情视频在线看 | 欧美激情精品久久久久久大尺度 | 久久国产成人精品国产成人亚洲 | 亚欧毛片 | 国产精品久久久久久免费 | 色色视频网 | 一级片在线免费观看 | 日韩 欧美 亚洲 中文字幕 | 97国产精品| 国产一区二区精品在线观看 | 免费观看国产一区二区三区 | 午夜精品在线免费观看 | 九九热在线免费 |