1. 程式人生 > >思特奇2019校招筆試題

思特奇2019校招筆試題

描述系統對外提供的所有服務,因此介面中的成員常量和方法都必須是公開(public)型別的,確保外部使用者能訪問它們;

介面僅僅描述系統能做什麼,但不指明如何去做,所以介面中的方法都是抽象(abstract)方法;

介面不涉及和任何具體例項相關的細節,因此介面沒有構造方法,不能被例項化,沒有例項變數,只有靜態(static)變數;

介面的中的變數是所有實現類共有的,既然共有,肯定是不變的東西,因為變化的東西也不能夠算共有。所以變數是不可變(final)型別,也就是常量了。

public  abstract interface A{

public static final int name="xx";

public abstract void output(){}

}

java8介面新特性,我怕是落伍了 package JianZhiOffer;   public  interface SiTeQI {     public static void say(){       }     public static void main(String []args){       }     public default void dance(){              } }  

今天我本來想在普通的類中去寫一個main函式,可是弄巧成拙居然在剛剛定義的接口裡寫上了,然後奇怪的是,我發現竟然沒有

報錯?介面居然允許有方法體?後來上網查了一下,才覺得自己落伍了!

 Java8比起以前的版本存在很大的變化,我們知道在之前的版本中介面只能是定義抽象的方法,是不能定義實現的,但是在java8環境下,這個不可能已經變得可能。下面我們通過例子一步一步的來講解下java8的用法。

在介面中可以定義實現的方法體是java8的一大特性,可以定義多個靜態或者預設的方法,靜態必須加上static,預設方法必須加上default關鍵字。

  此外,值得注意的是:面向物件中,java只是支援單繼承,不支援多繼承,一個類只能繼承一個類,

  (1)如果多個介面定義了同樣的靜態方法,

          即使存在實現類,同時實現多個介面,仍然是不可使用實現類名呼叫介面的方法

  (2)如果多個介面定義了同樣的預設方法

         實現類實現多個介面時,必須重寫掉預設方法,否則編譯失敗。

   --------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.要想在你的檢視上成功的執行查詢需要做什麼?(B)

  A.只能在基礎表中有select許可權             B.在檢視中需要有select許可權

  C. 基礎表中必須有資料                    D.基礎表必須在同一個 使用者模式中

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下【b】定義能正常編譯通過。

  A.boolean f=1                          B.boolean f=true

  C.int k=028                             D.char c="a"

解釋一下c選項吧,我們知道高階語言預設8進位制以0開頭,16進位制以0x開頭,

然而這裡的028請你擦亮眼睛,他可不是8進位制,誰家8進位制還有8?在這種情況下編譯器認為他是10進位制,然而10進位制是不允許被這麼定義的,java編譯器根本不識別,因此會出現編譯錯誤

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

3子類繼承了父類,對於父類中進行封裝的方法,子類仍然可以直接呼叫,他說的對嗎

不對,只能直接呼叫非私有的方法。如果是private修飾的方法,子類也是不能呼叫的。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

4關於overload(過載)說不正確的是

  A.引數型別、個數、順序至少有一個不相同。   B.不能過載只有返回值不同的方法名

  C.存在於父類和子類、同類中。       D.方法被定義為final不能被過載

A

=-----------------------------------------------------------------------------------------------------------------------------------------------------------------------5.以下宣告合法的是(b)

  A.default  String  s               B.public  final  static  native  int  w( )

  C. abstract  double  d            D. abstract  final  double  hyperbolicCosine( )

abstract /default不能修飾屬性,只能修飾方法,abstract&& final絕對永不到一起 去,不然子類怎麼重寫父類的方法?

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

6關於overload(過載)說不正確的是(c)

  A.引數型別、個數、順序至少有一個不相同。   B.不能過載只有返回值不同的方法名

  C.存在於父類和子類、同類中。       D.方法被定義為final不能被過載

過載不看返回值,看引數,c說的是重寫

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

7下面方法中,用於排程執行緒使其執行的是

  A.init(),start()    B.start(),run()    C. run(),resume()   D. resume(),sleep()

Java的執行緒是通過java.lang.Thread類來實現的。VM啟動時會有一個由主方法所定義的執行緒。可以通過建立Thread的例項來建立新的執行緒。每個執行緒都是通過某個特定Thread物件所對應的方法run()來完成其操作的,方法run()稱為執行緒體。通過呼叫Thread類的start()方法來啟動一個執行緒。

在Java當中,執行緒通常都有五種狀態,建立、就緒、執行、阻塞和死亡:   第一是建立狀態new Thread()。在生成執行緒物件new,並沒有呼叫該物件的start方法,這是執行緒處於建立狀態。   第二是就緒狀態start()。當呼叫了執行緒物件的start方法之後,該執行緒就進入了就緒狀態,但是此時執行緒排程程式還沒有把該執行緒設定為當前執行緒,此時處於就緒狀態。線上程執行之後,從等待或者睡眠中回來之後,也會處於就緒狀態。   第三是執行狀態run()。執行緒排程程式將處於就緒狀態的執行緒設定為當前執行緒,此時執行緒就進入了執行狀態,開始執行run函式當中的程式碼。   第四是阻塞狀態sleep()suspend()wait()執行緒正在執行的時候,被暫停,通常是為了等待某個事件的發生(比如說某項資源就緒)之後再繼續執行。sleep,suspend,wait等方法都可以導致執行緒阻塞。   第五是死亡狀態stop()。如果一個執行緒的run方法執行結束或者呼叫stop方法後,該執行緒就會死亡。對於已經死亡的執行緒,無法再使用start方法令其進入就緒。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2.下列說法正確的有( bcd) A. 環境變數可在編譯source code時指定 B. 在編譯程式時,所能指定的環境變數不包括class path(根本就不能編譯source code時指定環境變數) C. javac一次可同時編譯數個Java原始檔 D. javac.exe能指定編譯結果要置於哪個目錄(directory)

環境變數(path/classpath)是你提前設定好的,,,不然你怎麼用java javac jvm怎麼尋找的類檔案啊

任何一門語言的環境變數都是編譯前就設定好的,換句話說,你想編譯執行這個語言,你的電腦必須先安裝這個語言的編譯執行程式,對於java這個先編譯後解釋才能執行的語言,你的電腦上需要有java的編譯器和直譯器(你可能在想,我沒有裝啊,實際你裝了,只是你不知道自己裝的是什麼,還記得你學習java時安裝的jdk和jre嗎,這兩個一個是java的編譯程式所在的位置,一個是java的解釋程式所在的位置),同樣對於c語言這個只需要編譯就可以執行的傢伙,你的電腦上需要有c的編譯器gcc,你是安裝了的,同樣對於c++語言這個只需要編譯就可以執行的傢伙,你的電腦上需要有c++的編譯器g++,你是安裝了的,不然這門語言根本無法在此電腦中執行

既然說到了原理上的東西,不如就多說點

(1)高階語言在電腦上直接是不能編譯執行的,必須依靠高階語言對應的編譯器直譯器才能在電腦上直接編譯執行,因此我們在使用任何一門高階語言(c/c++/java)都是必須現在自己的電腦上安裝編譯程式解釋程式,這個語言才可以執行

(2)Java的編譯程式-javac(將java編譯成class中間程式碼)

          Java的解釋程式-java(將java的class中間程式碼翻譯成目標語言)

c/c++只有編譯程式,.ccp/.c編譯之後直接生成目的碼

(3)實際上你自己定義一門語言也沒人攔你,但是記得給自己的語言開發一個編譯器哦

(4)實際上編譯程式解釋程式基本都是用c/c++開發的,因為編譯器畢竟是個追求速度的東西,

拿java舉例,你看一下他的java/javac是什麼型別的檔案你就知道是用什麼語言編寫的了

(5)你會發現有的時候那個函式什麼的明明就是舊版本的這個語言支援的,某天你將自己的編譯器更新了之後你會發現不支援了?

現在用編譯原理的知識為大家解答下,任何一門高階語言的更新實質上是因為他的編譯器更新了,他的編譯器更新了又因為是他想為他的語言加一些新的特性,但是你知道的加一些新的特性必須需要編譯器的支援,因此往往我們要選擇合適版本的編譯器,編譯器支援什麼樣的語法,識別什麼樣的單詞,那麼你的語言就是什麼樣的,如果讓我開發語言,我首先會開發一款編譯器,你就拿之前更新的java8舉例,java又出新的版本了,如果你想體驗java8的這種新特性的話,首先你的電腦得支援,那麼你就需要安裝java8的編譯器直譯器,否則你的電腦是不支援的

(6)java能一次編譯到處執行的原因:

java 執行環境jre裡面是有一個java的虛擬機器的,java為不同的作業系統安裝不同的jvm直譯器,jvm直譯器負責將統一的class位元組碼(與作業系統無關)轉換為作業系統可以識別的機器碼

編譯快,解釋慢,因此java慢,c快

首先說一下java相關的環境變數有哪些吧:path/ classpath/java_home

1在編譯java程式碼之前必須設定好path環境變數,因為jvm在編譯執行的時候需要用到java java命令,

2在編譯java程式碼之前必須設定好classpath環境變數,因為jvm在編譯的時候需要依靠classpath來搜尋Java程式碼中設計到的類的所在路徑

閱讀更多 ---------------------  作者:[email protected]  來源:CSDN  原文:https://blog.csdn.net/strivenoend/article/details/83039822  版權宣告:本文為博主原創文章,轉載請附上博文連結!