來了!Java工程師常見面試題集錦(五)網際網路人必看!(附答案及視訊教程,持續更新)
又一年春運開啟,年關將至,回家的火車票搶到了嗎?春節嗨喜的心是不是越來越躁動?
來,做幾道面試題,沉澱、儲備,以最好的狀態回家見親人~
Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533
Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938
Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513
Java工程師常見面試題集錦(四)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86525565
如果覺得文字學習較慢,也可以跟著老師一起視訊學習:
Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533
41. 有n步臺階,一次只能上1步或2步,共有多少種走法?
1)遞迴
n=1 ->一步 ->f(1) = 1
n=2 ->(1)一 步一步(2)直接2步 ->f(2) = 2
n=3 ->(1)先到達f(1),然後從f(1)直接跨2步 ->f(3) = f(1) + f(2)
(2)先到達f(2),然後從f(2)跨1步
n=4 ->(1)先到達f(2),然後從f(2)直接跨2步 ->f(4) = f(2) + f(3)
(2)先到達f(3),然後從f(3)跨1步
……
n=x ->(1)先到達f(x-2),然後從f(x-2)直接跨2步 ->f(x) = f(x-2) + f(x-1
(2)先到達f(x-1),然後從f(x-1)跨1步
2)迴圈迭代 (one儲存最後走一步,two儲存最後走兩步)
n=1 ->一步 ->f(1) = 1
n=2 ->f(1) = 1 ->f(2) = 2
n=3 ->(1)先到達f(1),然後從f(1)直接跨2步 ->f(3) = two + one
(2)先到達f(2),然後從f(2)跨1步 f(3) = f(1) + f(2) two = f(1) ; one = f(2)
n=4 ->(1)先到達f(2),然後從f(2)直接跨2步 ->f(4) = two + one
(2)先到達f(3),然後從f(3)跨1步 f(4) = f(2) + f(3) two = f(2); one = f(3)
……
n=x ->(1)先到達f(x-2),然後從f(x-2)直接跨2步 ->f(x) = two + one
(2)先到達f(x-1),然後從f(x-1)跨1步 f(x) = f(x-2) + f(x-1) two = f(x-2); one = f(x-1)
小結: 方法呼叫自身稱為遞迴,利用變數的原值推出新值稱為迭代。
1)遞迴
優點:大問題轉化為小問題,可以減少程式碼量,同時程式碼精簡,可讀性好;
缺點:遞迴呼叫浪費了空間,而且遞迴太深容易造成堆疊的溢位。
2)迭代
優點:程式碼執行效率好,因為時間只因迴圈次數增加而增加,而且沒有額外的空間開銷;
缺點:程式碼不如遞迴簡潔,可讀性好
42.變數的分類及其區別
變數的分類有:
1)成員變數:類變數、例項變數
2)區域性變數
變數的區別:
①宣告的位置
區域性變數:方法體{}中,形參,程式碼塊{}中
成員變數:類中方法外
類變數:有static修飾
例項變數:沒有static修飾
②修飾符
區域性變數:final
成員變數:public、protected、private、final、static、volatile、transient
③值儲存的位置
區域性變數:棧
例項變數:堆
類變數:方法區
④作用域
區域性變數:從宣告處開始,到所屬的}結束
例項變數:在當前類中“this.”(有時this.可以預設),在其他類中“物件名.”訪問
類變數:在當前類中“類名.”(有時類名.可以省略),在其他類中“類名.”或“物件名.”訪問
⑤生命週期
區域性變數:每一個執行緒,每一次呼叫執行都是新的生命週期
例項變數:隨著物件的建立而初始化,隨著物件的被回收而消亡,每一個物件的例項變數是獨立的
類變數:隨著類的初始化而初始化,隨著類的解除安裝而消亡,該類的所有物件的類變數是共享的
43.Gits實戰操練——分支
建立分支
git branch <分支名>
git branch –v 檢視分支
切換分支
•git checkout <分支名>
一步完成: git checkout –b <分支名>
合併分支
先切換到主幹 git checkout master
git merge <分支名>
刪除分支
先切換到主幹 git checkout master
git branch -D <分支名>
44. 請說出與執行緒同步相關的方法
1)wait():使一個執行緒處於等待(阻塞)狀態,並且釋放所持有的物件的鎖;
2)sleep():使一個正在執行的執行緒處於睡眠狀態,是一個靜態方法,呼叫此方法要捕捉InterruptedException 異常;
3)notify():喚醒一個處於等待狀態的執行緒,當然在呼叫此方法的時候,並不能確切的喚醒某一個等待狀態的執行緒,而是由JVM確定喚醒哪個執行緒,而且與優先順序無關;
4)notityAll():喚醒所有處入等待狀態的執行緒,注意並不是給所有喚醒執行緒一個物件的鎖,而是讓它們競爭;
5)JDK 1.5通過Lock介面提供了顯式(explicit)的鎖機制,增強了靈活性以及對執行緒的協調。Lock介面中定義了加鎖(lock())和解鎖(unlock())的方法,同時還提供了newCondition()方法來產生用於執行緒之間通訊的Condition物件;
6)JDK 1.5還提供了訊號量(semaphore)機制,訊號量可以用來限制對某個共享資源進行訪問的執行緒的數量。在對資源進行訪問之前,執行緒必須得到訊號量的許可(呼叫Semaphore物件的acquire()方法);在完成對資源的訪問後,執行緒必須向訊號量歸還許可(呼叫Semaphore物件的release()方法)。
45. 編寫多執行緒程式有幾種實現方式?
Java 5以前實現多執行緒有兩種實現方法:一種是繼承Thread類;另一種是實現Runnable介面。兩種方式都要通過重寫run()方法來定義執行緒的行為,推薦使用後者,因為Java中的繼承是單繼承,一個類有一個父類,如果繼承了Thread類就無法再繼承其他類了,顯然使用Runnable介面更為靈活。補充:Java 5以後建立執行緒還有第三種方式:實現Callable介面,該介面中的call方法可以線上程執行結束時產生一個返回值,程式碼如下所示:
package com.lovo.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class MyTask implements Callable<Integer> {
private int upperBounds;
public MyTask(int upperBounds) {
this.upperBounds = upperBounds;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for(int i = 1; i <= upperBounds; i++) {
sum += i;
}
return sum;
}
}
public class Test {
public static void main(String[] args) throws Exception {
List<Future<Integer>> list = new ArrayList<>();
ExecutorService service = Executors.newFixedThreadPool(10);
for(int i = 0; i < 10; i++) {
list.add(service.submit(new MyTask((int) (Math.random() * 100))));
}
int sum = 0;
for(Future<Integer> future : list) {
while(!future.isDone()) ;
sum += future.get();
}
System.out.println(sum);
}
}
Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533
Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938
Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513
Java工程師常見面試題集錦(四)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86525565
如果覺得文字學習較慢,也可以跟著老師一起視訊學習:
Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533
46.synchronized關鍵字的用法?
synchronized關鍵字可以將物件或者方法標記為同步,以實現對物件和方法的互斥訪問,可以用synchronized(物件) { … }定義同步程式碼塊,或者在宣告方法時將synchronized作為方法的修飾符。在第60題的例子中已經展示了synchronized關鍵字的用法。
47.舉例說明同步和非同步
如果系統中存在臨界資源(資源數量少於競爭資源的執行緒數量的資源),例如正在寫的資料以後可能被另一個執行緒讀到,或者正在讀的資料可能已經被另一個執行緒寫過了,那麼這些資料就必須進行同步存取(資料庫操作中的悲觀鎖就是最好的例子)。當應用程式在物件上呼叫了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,就應該使用非同步程式設計,在很多情況下采用非同步途徑往往更有效率。事實上,所謂的同步就是指阻塞式操作,而非同步就是非阻塞式操作。
48.Java執行緒池概述
Java執行緒池的工作原理和資料庫連線池的差不多,因為每次重新建立執行緒
都是很耗資源的操作,所以我們可以建立一個執行緒池,這樣當需要用到執行緒
進行某些操作時,就可以直接去執行緒池裡面找到空閒的執行緒,這樣就可以直接
使用,而不用等到用到的時候再去建立,用完之後可以把該執行緒重新放入執行緒池
供其他請求使用從而提高應用程式的效能。
執行緒池的核心流程:
1.構建一個 ThreadPoolExecutor 並指定預設要建立的執行緒的數量
2.通過 threadPool.execute()
去新增一個個要執行的執行緒即實現了Runable介面的java類
3.在實現了Runable介面的java類的run方法中寫入具體的業務程式碼
49.執行緒的生命週期
50.Java反射機制的作用
(1)在執行時判斷任意一個物件所屬的類。
(2)在執行時判斷任意一個類所具有的成員變數和方法。
(3)在執行時任意呼叫一個物件的方法。
(4)在執行時構造任意一個類的物件。
Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533
Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938
Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513
Java工程師常見面試題集錦(四)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86525565
如果覺得文字學習較慢,也可以跟著老師一起視訊學習:
Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533
相關文章
- Java工程師常見面試題集錦(三)網際網路人必看!(附答案及視訊教程,持續更新!)Java工程師面試題
- Java工程師常見面試題集錦(二)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- Java工程師常見面試題集錦(六)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- Java工程師常見面試題集錦(一)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- 知否?知否!Java工程師常見面試題集錦(四)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- 雲端計算工程師面試題集錦,常見雲端計算面試題及答案工程師面試題
- GO面試題集錦快答[持續更新]Go面試題
- 大資料類工程師面試題集錦附指南:網際網路公司篇!大資料工程師面試題
- 雲端計算工程師面試題集錦,雲端計算面試題及答案工程師面試題
- 雲端計算面試題及答案,雲端計算工程師面試題集錦面試題工程師
- 2018年最新大資料類工程師面試題集錦附指南:網際網路公司篇!大資料工程師面試題
- 網際網路 Java 工程師面試題(Spring 面試題一)Java工程師面試題Spring
- Java常見面試題及答案彙總Java面試題
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 常見AI面試題及答案AI面試題
- 2019最新Web前端經典面試試題及答案,持續更新Web前端面試
- Docker常見面試題及答案!Linux入門教程Docker面試題Linux
- 10道常見的Python面試題及答案!Python入門必看Python面試題
- 好程式設計師Java教程分享JavaScript常見面試題五程式設計師JavaScript面試題
- 前端工程師面試必備(持續更新中)前端工程師面試
- 好程式設計師web前端分享HTML5常見面試題集錦五程式設計師Web前端HTML面試題
- 求職面試常見問題:Python常見面試題全解析附答案求職Python面試題
- Android開發工程師面試指南(面試題集附答案、簡歷模板)Android工程師面試題
- PHP開發工程師面試問題集錦PHP工程師面試
- Python資料型別面試題集錦!(附答案)Python資料型別面試題
- 測試面試題集錦(五)| 自動化測試與效能測試篇(附答案)面試題
- Java面試專屬視訊 最新Java阿里京東美團滴滴面試題及答案教程Java阿里面試題
- Java工程師面試題之Dubbo(含答案)Java工程師面試題
- Linux面試題,淺析常見Linux命令面試題及答案Linux面試題
- 新手必看!使用New File Menu常見問題集錦
- 吐血總結!50道Python面試題集錦(附答案)Python面試題
- 高階前端工程師面試必備(持續更新中)前端工程師面試
- AI面試題(持續更新)AI面試題
- Hbase面試題(持續更新)面試題
- 金三銀四:螞蟻金服JAVA開發面試題及答案之一面(持續更新)Java面試題
- 面試過了,總結測試工程師面試題(含答案)工程師面試題
- 一線網際網路常見的14個Java面試題,你顫抖了嗎程式設計師Java面試題程式設計師
- Java開發工程師最新面試題庫系列——集合部分(附答案)Java工程師面試題