JavaEE第二階段面試題總結(3)

目錄

基礎語法與算法a++ 與 ++a的區別?&和&&的區別***說說jvm***GC是什麼? 爲什麼要有GC?數組有沒有length()這個方法?String有沒有length()這個方法?面向對象什麼是多態?Integer封裝類可以被繼承嗎?String可以被繼承嗎?int 和 Integer有什麼區別?extends和implements區別構造器Constructor是否可被override?接口是否可以繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承具體類(concrete class)?抽象類中是否可以有靜態的main方法?類的加載機制(類加載機制)據下方代碼,寫出打印結果:(類加載機制)查看如下代碼,寫出打印結果:請簡述面向對象的一些基本概念java中的常用類,不少於6個?集合List, Set, Map是否繼承自Collection接口?HashMap的數據結構 存放數據的機制和擴容問題談談HashSet的存儲原理list和map的應用場景常用集合的的底層實現?Map怎麼實現有序Set和Map的底層hashmap和hashtable的區別?Collections vs CollectionList vs Set集合的工具類有哪些?如何實現集合排序?不使用工具類的話怎麼排序?ArrayList vs LinkedListSet vs MapConcurrentHashMap vs HashMap vs LinkedHashMapIO流與異常運行時的異常和一般異常有什麼異同?try-catch中return和finally哪個優先執行請說出常見的運行異常有用過NIO嗎?NIO的優點在哪裏?NIO是什麼他跟IO有什麼區別?多線程,網絡編程線程池有沒有用過,怎麼用的,在哪裏用的?SimpleDataFormat是線程安全的嗎?啓動一個線程用的是start()還是run()?sleep()和wait()有什麼區別?談談創建多線程的方式談談你對線程安全的理解?如何解決線程的安全問題?Synchronized加在普通方法和靜態方法的區別同步代碼塊和同步方法的區別談談線程的生命週期談談對線程池的理解?jdk提供了哪幾種線程池?他們有什麼區別?對多線程的瞭解?在什麼地方使用到過多線程?是否有用過線程池?用的什麼線程池?UDP和TCP的區別網絡的分層什麼是tcp協議Http和Https的區別Http的報文裏有什麼反射與解析解析XML有幾種方式反射你是怎麼理解的?編程題請寫出下面代碼的運行結果給定一個不重複的自然數數組{3,5,9,7,4,13,15,0,2,20},已知其最大值20,請將其按從小到大的方式順序輸出,要求算法複雜度爲1對於1-100範圍內的整數I(包括100),找出滿足I,I+4,I+10(I+10也在100範圍)都是素質的整數I,計算這樣I的個數cnt和這些整數的和sum用java代碼找出A數組中不存在於B數組的項,例如:A[1,2,3],B[4,2]單例具體實現請在如下函數體中補充完成代碼,實現根據輸入字符串返回該字符串的倒序形式。如輸入“ABC”返回“CBA”。下面的程序代碼輸出的結果是多少?寫一個函數,2 個參數,1 個字符串,1 個字節數,返回截取的字符串,要求字符串中的中文不能出現亂碼:如(“我ABC”,4)應該截爲“我AB”,輸入(“我ABC 漢DEF”,6)應該輸出爲“我ABC”而不是“我ABC+漢的半個”。給定的一個文件“a.txt”,找出所有符合“Japanes”字符串的個數,並修改爲“Japanese”智力題

基礎語法與算法

a++ 與 ++a的區別?

a++: 後置自增,先計算表達式的值,變量值後+1 
++a: 前置自增,變量值先+1,再計算表達式的值

&和&&的區別

&有兩個用法:

  • 第一個是作爲邏輯運算符使用,被當成邏輯運算符時有一個非短路的特性,即當第一個操作數爲false,那麼第二個操作數仍然執行。
  • 第二個是作爲位運算符使用。

&&只有一個用法:

  • 只能作爲邏輯運算符使用,和&的區別在於&&有一個短路的特點,即當第一個操作數爲false時(因爲這個時候已經可以確定表達式的最終結果已經是false),那麼第二個操作數不會執行。

***說說jvm

jvm: java虛擬機, 
用法1:可以將字節碼解釋成不同平臺都能識別的指令 
用法2:在jvm中的垃圾回收機制,可以自動回收系統中的無用內存

***GC是什麼? 爲什麼要有GC?

GC爲垃圾回收器,系統中開闢了大量空間,當這些空間無用時,可通過GC進行釋放;提高系統執行性能

數組有沒有length()這個方法?String有沒有length()這個方法?

數組沒有length()方法,只有length屬性; 
String有length()方法;

面向對象

什麼是多態?

概念:多態是面向對象的基本特徵之一。在java中一個對象的類型可以分爲兩種,即編譯時類型與運行時類型。當一個對象的編譯時類型和運行時類型不相同的時候,就發生了所謂的多態。

理解:換句話說,在Java中用一個父類(父接口)的變量指向之類的對象時,就發生了多態。比如 A a = new B(), 其中A是B的父類或者父接口。爲什麼會有這樣的特性?爲什麼不是子類的變量指向父類的對象?我們可以換一個生活中的例子來理解。比如現在想要一個動物,先聲明一個動物的變量: 
Animal a; 
但是在實際生活中,根本沒有一個具體的物種叫動物,所以其實我們需要創建的一個具體的動物的對象,比如狗(動物是狗的父類): 
new Dog(); 
最後將一條狗給與正需要一個動物的‘你’是一個非常合理的行爲: 
Animal a = new Dog(); 
反過來卻不成立,同樣也不合理,你沒辦法把隨便一個動物給一個正需要狗的人。

作用:多態在面向對象編程中有着非常重要的作用。很多架構搭建,設計模式都使用到了多態的特性。多態的最大作用在於,使用一個父類的變量調用方法時,本質上調用的是子類的重寫方法。換而言之,讓一個Animal a執行 '叫喊'的行爲,本質上我們聽到的應該是“旺、旺、旺”,因爲這個動物其實是Dog。這個特點讓多態廣泛的運用在架構與程序設計之中,極大的增強了程序的拓展性與維護性。

Integer封裝類可以被繼承嗎?

不能,因爲它是final修飾的類。 
sun在設計Integer類時添加了final關鍵字,意爲不讓其他人隨意的拓展和覆蓋Integer本來的行爲方法。這麼設計的作用在於Integer是int類型的包裝類,是對基本類型在面向對象的一個補充,很多基礎類和第三方的工具類大量引用了這個類型的變量。如果隨意覆蓋本來的方法會導致這些基礎類無法達到預想的結果,從而破壞了底層的實現效果(比如破壞了自動裝箱和自動拆箱)。這是sun公司不願意看到的。如果要對Integer有任何拓展,完全可以通過自定義一個類對Integer進行封裝來實現,無需繼承。

String可以被繼承嗎?

不能,同上

int 和 Integer有什麼區別?

int爲基本類型,Integer爲引用類型。 
Integer是int類型的包裝類,對於int類型在面向對象中的補充。在很多時候沒辦法直接使用int基本類型,這個時候就需要用到Integer了,比如泛型時,是不能填寫基本類型的,必須使用包裝類。另外在很多實體類的設計時,通常也是使用包裝類,因爲包裝類可以直接複製爲null,而基本類型必須根據不同的基本類型賦予不同的值,操作起來會更加麻煩。

extends和implements區別

implements: 用於實現一個接口 
extends: 用於繼承一個類 
注意:當一個接口需要繼承另一個接口時,需要用到extends關鍵字,而且接口繼承多個接口。

構造器Constructor是否可被override?

構造器Constructor不能被繼承,因此不能重寫,但可以被重載。

接口是否可以繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承具體類(concrete class)?抽象類中是否可以有靜態的main方法?

  1. 接口可以繼承接口,而且接口繼承多個接口
  2. 抽象類可以實現接口
  3. 抽象類可以繼承具體類
  4. 抽象類中可以有靜態main方法

類的加載機制

  • 什麼是類加載機制? 
    在一個java程序運行時,虛擬機並不會立刻將這個程序所有的類信息加載到內存中,而是在這個類第一次被使用時進行加載。將一個類加載到虛擬機內存中的過程稱爲類加載機制。 
    注意:一個類在一條JVM進程中只會被加載一次。

  • 類加載的步驟 
    類加載可以大致分成3個步驟,分別是:

    • 聲明靜態Field時指定初始值;
    • 使用靜態初始化塊爲靜態Field指定初始值;
    • 驗證:驗證是連接階段的第一步,這一階段的目的是爲了確保Class文件的字節流中包含的信息符合當前虛擬機的要求,並且不會危害虛擬機自身的安全。
    • 準備:準備階段是正式爲類變量分配內存並設置類變量初始值的階段,這些變量所使用的內存都將在方法區中進行分配。這時候進行內存分配的僅包括類變量(被static修飾的變量),而不包括實例變量,實例變量將會在對象實例化時隨着對象一起分配在堆中。其次,這裏所說的初始值“通常情況”下是數據類型的零值
    • 解析:
      解析階段是虛擬機將常量池內的符號引用替換爲直接引用的過程。解析動作主要針對類或接口、字段、類方法、接口方法、方法類型、方法句柄和調用點限定符7類符號引用進行。
    • 通過一個類的全限定名來獲取定義此類的二進制字節流(並沒有指明一定要從一個Class文件中獲取,可以從其他渠道,譬如:網絡、動態生成、數據庫等,不同的渠道可以使用不同的類加載器);
    • 將這個字節流所代表的靜態存儲結構轉化爲方法區的運行時數據結構;
    • 在堆內存中生成一個代表這個類的java.lang.Class對象,作爲方法區這個類的各種數據的訪問入口;
    • 加載階段 
      在加載階段需要用到類加載器(ClassLoader類),虛擬機需要完成以下3件事情:

    • 連接階段 
      連接階段和加載階段是交叉進行的,可能加載階段還沒有完成,連接階段已經開始,但是加載和連接的開始順序是固定不變的。連接階段又可以拆分成3個階段:

    • 初始化階段 
      在類的初始化階段,JVM負責對類進行初始化,主要是對靜態Field初始化。
      對靜態Field初始化分兩種:

      初始化順序會按照源碼的編寫順序執行。

  • 類的加載的時機 
    當碰到以下幾種情況時會觸發一個類被加載進虛擬機內存中:

    • 創建類的實例。(new關鍵字、反射、反序列化等等)
    • 訪問類中的某個靜態成員
    • 使用反射方式強制創建某個類對應的Class對象。比如:Class.forName("包名.類名");
    • 加載某個類的子類
    • 直接使用java.exe命令運行某個主類,當運行某個主類時,程序會先加載該主類

(類加載機制)據下方代碼,寫出打印結果:

結果: 
SSClass 
SuperClass init! 
123

原因:
對於靜態字段,只有直接定義這個字段的類纔會被初始化,因此通過其子類來引用父類中定義的靜態字段,只會觸發父類的初始化而不會觸發子類的初始化。

(類加載機制)查看如下代碼,寫出打印結果:

 

請簡述面向對象的一些基本概念

  1. 封裝:將類的屬性私有化,使用方法進行封裝來獲取設置和獲取屬性值
  2. 繼承:子類繼承父類,可使用父類的屬性和方法; 另一大特性:重寫
  3. 多態:父類對象指向子類對象,可以調用子類重寫方法
  4. 抽象:如果一個類有相關方法不知具體實現,該方法可設置爲抽象方法,所在類就是抽象類;
    具體實現交給子類完成;在應用中抽象類可作爲模板使用

java中的常用類,不少於6個?

String,StringBuffer,Date,SimpleDateFormat,Random,Math,System,Runtime等

集合

List, Set, Map是否繼承自Collection接口?

List,Set是,Map不是

HashMap的數據結構 存放數據的機制和擴容問題

HashMap底層採用的是哈希表這種數據結構。 
哈希表的特點在於查詢速度快,時間複雜度爲O(1)。

  • 存放數據的機制: 
    哈希表實際上是一個數組,當一個鍵值對(key-value)要放入HashMap中時,首先會獲得這個鍵(key)的hashcode,通過hashcode結合一個哈希函數計算得到一個int類型的值。這個值會充當數組的下標,將該鍵值對放入數組指定的下標位置。如果該位置已經存在一個鍵值對數據,則會進行鍵的對比,如果兩個鍵通過equals方法比較返回true,則hashmap會認爲key重複,則直接做一個value覆蓋的操作。如果不重複,則會在數組這個位置形成一個鏈表將兩個元素鏈接起來。這是採用的鏈地址法解決衝突的一種手段。
  • 擴容問題:
    哈希表有一個填充因子,填充因子是元素個數與數組長度的佔比。當元素個數與數組長度的比例達到填充因子的大小時,則需要進行擴容。擴容就是創建一個更大的數組,將老的數組的元素通過哈希函數的計算重新放入新的數組中,從而降低元素越來越多所帶來的哈希表查詢性能嚴重下降的問題。但是擴容本身就是一個非常耗時的操作,所以在預先知道數據量很大的情況下,在創建HashMap的時候應該提前設置好底層哈希表的總長度和填充因子的大小,儘可能避免在元素添加過程中頻繁的觸發擴容機制。

談談HashSet的存儲原理

HashSet的底層就是由HashMap實現的,所以具體存儲原理可以參照HashMap的底層實現。

list和map的應用場景

list: 存儲有序且允許重複的單個對象 
map: 存儲無序且唯一的鍵值對

常用集合的的底層實現?

  • ArrayList和Vector: 
    ArrayList和Vector是List的兩個典型實現類。它們底層的實現方案相同。都是採用動態數組的方式實現的。特點是元素有序並且可以重複。ArrayList本身是線程不安全的,Vector是線程安全的。但是Vector比較古老,所以絕大多數情況下應該使用ArrayList。
  • LinkedList: 
    LinkedList也是List的一個具有代表性的實現類。底層採用的是雙向鏈表。從中間插入和刪除元素的效率更高。
  • HashMap:
    HashMap的是Map集合的常用實現類,底層採用的是哈希表的數據結構存放數據的。特點是插入和查詢速度很快。但是隨着元素個數越來越多,效率會有所下降,但是仍然是效率很高的一種數據結構。HashMap的key值是無序且不重複的。
  • LinkedHashMap: 
    LinkedHashMap底層採用的是哈希表 + 鏈表的形式存放數據的。因爲需要額外的維護一個鏈表,所謂元素的操作速度會比HashMap略慢。但是因爲有鏈表的存在,遍歷元素的速度反而會比HashMap快,並且可以按照元素的插入順序遍歷出來。
  • TreeMap: 
    底層採用的是紅-黑樹實現的。相對於哈希表,紅黑樹的插入和查詢速度要慢,但是紅-黑樹可以維護元素本身的字典順序,所以當需要對key進行大小排序的時候,才應該使用TreeMap,否則都應該選擇HashMap
  • HashSet/LinkedHashSet/TreeSet: 
    Set集合的底層其實就是Map集合實現的。Set集合中包含一個Map集合,每個元素插入到Set集合中時,其實就是插入到底層的Map集合的key的位置,value是一個固定的Object對象,沒有任何意義。因此可以發現Set和Map的實現類幾乎是一一對應的。

Map怎麼實現有序

通過LinkedHashMap實現有序,具體實現同上

Set和Map的底層

Set底層實現是由Map完成的

hashmap和hashtable的區別?

Hashtable: 
線程安全,效率會低於HashMap。而且key和value都不能存放null值。
HashMap: 
線程不安全,因此效率會高於Hashtable。key和value都可以爲null,但是key只能有一個null。

Collections vs Collection

Collections: 集合的工具類 
Collection: 用於存儲單個對象的集合接口

List vs Set

List: 存儲有序且允許重複的對象,可以使用下標遍歷 
Set: 存儲無序且唯一的對象,不能使用下標遍歷

集合的工具類有哪些?如何實現集合排序?不使用工具類的話怎麼排序?

集合的工具類: Arrays,Collections 
工具類排序: Arrays.sort(),Collections.sort() 
如果不使用工具類,對於Map和Set可以分別採用TreeMap和TreeSet實現元素的排序。對於List,則可以手寫一個排序算法實現元素的排序,比如快速排序、希爾排序等

ArrayList vs LinkedList

ArrayList: 通過數組擴容的方式存儲對象,查找和向後追加元素效率高 
LinkedList:通過雙向鏈表的方式存儲對象,連續位置添加和刪除效率高

Set vs Map

聯繫: Set的存儲是通過Map來實現的 
區別: Set存儲單個對象無序且唯一, Map存儲鍵值對(key-value),key無序且唯一

ConcurrentHashMap vs HashMap vs LinkedHashMap

  • HashMap: 
    查詢和插入速度極快,但是線程不安全,在多線程情況下在擴容的情況下可能會形成閉環鏈路,耗光cpu資源。
  • LinkedHashMap: 
    基本和HashMap實現類似,多了一個鏈表來維護元素插入的順序,因此維護的效率會比HashMap略低。但是因爲有鏈表的存在,遍歷效率會高於HashMap。
  • ConcurrentHashMap:
    線程安全,而且採用分段鎖的方式進行數據同步,因此相對於Hashtable來說,效率要高。但是因爲引入了段的概念,所以每次元素插入或者獲取,需要進行兩次哈希算法,第一次確定到該元素位於哪一段,第二次才能真正確定到元素位置。因此效率會低於HashMap。不過在多線程情況下,這種性能的犧牲換取數據安全是非常值得的。因此在多線程的情況下應該首選ConcurrentHashMap。

IO流與異常

運行時的異常和一般異常有什麼異同?

運行時異常: 可以編譯通過,運行時報錯 
一般異常: 編譯時報警告,需提供處理異常方式

try-catch中return和finally哪個優先執行

finally會優先執行,在一段代碼中,finally是必須執行的

請說出常見的運行異常

空指針,數組溢出,類型轉換,算術異常

有用過NIO嗎?NIO的優點在哪裏?

NIO底層採用的是內存映射實現的,因此效率會比普通的IO效率要高。

NIO是什麼他跟IO有什麼區別?

  • NIO是NO Block IO流,是一種基於通道與緩衝區操作的流,是非阻塞的流,讀寫效率高
  • IO是Block IO流,是一種基於讀寫操作的流,是阻塞流,讀寫效率比NIO低

多線程,網絡編程

線程池有沒有用過,怎麼用的,在哪裏用的?

在需要創建和銷燬大量臨時線程時,可以使用線程池

SimpleDataFormat是線程安全的嗎?

不是

啓動一個線程用的是start()還是run()?

啓動線程應該採用start()方法。如果直接調用run()方法,則會像調用普通方法一樣執行run方法中的內容。就不會有爭搶cpu時間片的過程,達不到線程的效果。

sleep()和wait()有什麼區別?

  • sleep()方法:
    sleep()方法是Thread類中的靜態方法,當一個線程調用sleep()方法以後,不會釋放同步資源鎖,其他線程仍然會等待資源鎖的釋放。
  • wait()方法:
    wait()方法是Object類提供的一個普通方法,而且必須同同步資源鎖對象在同步代碼塊或者同步方法中調用。當調用wait()方法後,當前線程會立刻釋放掉同步鎖資源。其他線程就有機會獲得同步資源鎖從而繼續往下執行。

談談創建多線程的方式

  • 繼承Thread的方式 
    使用這種方式,當前類就代表一個線程類。可以直接調用start方法啓動線程。在線程執行體中要獲取當前正在執行的線程只需要通過this關鍵字就可以了。缺點在於Java的單繼承特性,一旦當前類繼承了Thread類就沒有辦法再繼承其他類了。
  • 實現Runnable接口的方式 
    使用這種方式,當前類並不代表線程。只是代表線程的一個執行體。想要啓動線程還必須new一個Thread對象,將執行體對象傳過去執行。好處在於Runnable是一個接口,並不耽誤繼承其他類。缺點在於稍顯麻煩,獲取當前正在執行的線程不能用this關鍵字,應該採用 Thread.currentThread();方式。
  • 使用Callable和Future創建線程
    這種方式創建的線程好處在於,可以有返回值

談談你對線程安全的理解?如何解決線程的安全問題?

  • 當多個線程互搶資源時,會造成數據混亂;通過線程安全可以確保數據完整性;
  • 線程的安全可以通過以下加鎖方式解決:
    1. 同步代碼塊
    2. 同步方法
    3. 互斥對象鎖

Synchronized加在普通方法和靜態方法的區別

  • Synchronized修飾普通方法:要確保調用該方法的對象爲同一對象,才能確保線程安全
  • Synchronized修飾靜態方法:靜態方法屬於類,可以確保線程安全

同步代碼塊和同步方法的區別

  • 同步代碼塊鎖的範圍是代碼塊區域
  • 同步方法鎖的範圍是當前的方法塊區域

談談線程的生命週期

  1. 實例化線程對象
  2. 啓動線程
  3. 進入就緒狀態
  4. cpu調度後進入運行狀態
  5. 當cpu調度另一線程或當前線程進入阻塞後重新回到3,就緒狀態
  6. 線程的結束

談談對線程池的理解?jdk提供了哪幾種線程池?他們有什麼區別?

  • 線程池可以提高線程的創建和銷燬的開銷
  • jdk提供了以下幾種線程池:
  1. newSingleThreadExecutor(單線程的線程池) 
    只有一個線程在執行,相對於單線程執行任務
  2. newFixedThreadPool(固定大小的線程池) 
    固定線程數處理任務;當任務過多,則固定的線程數誰先執行完任務,就執行剩餘任務
  3. newScheduledThreadPool(可緩存的線程池) 
    如果線程池長度超過處理需要,可靈活回收空閒線程,若無可回收,則新建線程

對多線程的瞭解?在什麼地方使用到過多線程?是否有用過線程池?用的什麼線程池?

多線程是程序中的多條執行路徑,每個線程在程序中互搶資源;在購票系統,通訊聊天中可以用到多線程
newCachedThreadPool:帶緩存線程池,如果線程池長度超過處理需要,可靈活回收空閒線程,若無可回收,則新建線程

UDP和TCP的區別

  • UDP:無連接的傳輸協議,數據不安全,性能高
  • TCP:建立連接的傳輸協議,數據安全,性能低

網絡的分層

OSI七層模型: 應用程,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層 
TCP四層模型: 應用層,傳輸層,網絡層,網絡接口層

什麼是tcp協議

是一種可靠安全的傳輸協議,傳輸效率低,需建立連接,經過三次握手;

Http和Https的區別

  • http: 超文本傳輸協議,是一種明文的傳輸協議
  • https: 可理解爲安全版的超文本傳輸,進行加密的一種傳輸協議

Http的報文裏有什麼

報文裏有: 請求行(requestline)、請求頭部(header)、空行和請求數據等4個部分組成

反射與解析

解析XML有幾種方式

dom解析,sax解析,pull解析

反射你是怎麼理解的?

  • 通過方式機制可以獲取私有的屬性,方法,構造器

  • 在應用上更靈活性,例如在文件注入方面的使用,通過加載類名,可以得到所屬對象的信息

  • 平常用什麼工具解析json?xml轉換成json字符串展示出來是什麼樣子的?

  • 解析json的工具有: json-lib,Gson,Fast-json

  • xml解析爲json: 標籤形式轉爲: {key1:value1,key2:value2}

編程題

請寫出下面代碼的運行結果

給定一個不重複的自然數數組{3,5,9,7,4,13,15,0,2,20},已知其最大值20,請將其按從小到大的方式順序輸出,要求算法複雜度爲1

 

對於1-100範圍內的整數I(包括100),找出滿足I,I+4,I+10(I+10也在100範圍)都是素質的整數I,計算這樣I的個數cnt和這些整數的和sum

用java代碼找出A數組中不存在於B數組的項,例如:A[1,2,3],B[4,2]

 

請在如下函數體中補充完成代碼,實現根據輸入字符串返回該字符串的倒序形式。如輸入“ABC”返回“CBA”

下面的程序代碼輸出的結果是多少?

寫一個函數,2 個參數,1 個字符串,1 個字節數,返回截取的字符串,要求字符串中的中文不能出現亂碼:如(“我ABC”,4)應該截爲“我AB”,輸入(“我ABC 漢DEF”,6)應該輸出爲“我ABC”而不是“我ABC+漢的半個”。

給定的一個文件“a.txt”,找出所有符合“Japanes”字符串的個數,並修改爲“Japanese”

智力題

  • 現在有一個工人幫你幹7天的活,你需要每天付給他等額的工錢,現在你有一塊寶石,這個寶石只能切割兩次,如何給他付工錢?

  • 有一個教授,在他三個弟子頭上分別貼上了3個正整數,其中2個數相加等於第三個數(能看到別人看不見自己的),教授問第一個弟子你知道自己頭上的是什麼數麼,第一個弟子說不知道,教授又問第二個弟子,第二個弟子也說不知道,這時第三個弟子說我知道了,自己頭上是144,請問爲什麼第三個弟子那麼肯定自己頭上是144?另外兩個弟子頭上是什麼數字?

  • 在某一沙漠邊,兩位考古工作者想穿過這篇沙漠到另一邊的小鎮去考古,這片沙漠雖不大,要穿過它也需要10天時間。但是,沒每人隨身只能帶8斤糧食和8斤水。而每人每天起碼要消耗1斤糧食和1斤水。由於當地又沒有駱駝可以租用,使他們在旅途中因爲無法得到糧食和水的補充而不能完全抵達到沙漠另一邊。當然,當地的民工是有的,但他們每人也只能帶8斤糧食和8斤水,而且他們每天也要消耗1斤糧食和1斤水。考古工作者該怎樣穿過這片沙漠?

  • 猜牌問題S先生、P先生、Q先生他們知道桌子的抽屜裏有16張撲克牌:紅桃A、Q、4黑桃J、8、4、2、7、3草花K、Q、5、4、6方塊A、5。約翰教授從這16張牌中挑出一張牌來,並把這張牌的點數告訴P先生,把這張牌的花色告訴Q先生。這時,約翰教授問P先生和Q先生:你們能從已知的點數或花色中推知這張牌是什麼牌嗎?於是,S先生聽到如下的對話:P先生:我不知道這張牌。Q先生:我知道你不知道這張牌。P先生:現在我知道這張牌了。Q先生:我也知道了。聽罷以上的對話,S先生想了一想之後,就正確地推出這張牌是什麼牌。請問:這張牌是什麼牌?

  • 燒一根不均勻的繩要用一個小時,如何用它來判斷半個小時?燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章