來了!Java工程師常見面試題集錦(五)網際網路人必看!(附答案及視訊教程,持續更新)

CSDN學院發表於2019-01-22

又一年春運開啟,年關將至,回家的火車票搶到了嗎?春節嗨喜的心是不是越來越躁動?

來,做幾道面試題,沉澱、儲備,以最好的狀態回家見親人~

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

成員變數:publicprotectedprivatefinalstaticvolatiletransient

值儲存的位置

區域性變數:棧

例項變數:堆

類變數:方法區

作用域

區域性變數:從宣告處開始,到所屬的}結束

例項變數:在當前類中“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

相關文章