20201023:算法+錯題
錯題一
- 下列說法正確的是()
答案及解析:Csychronized關鍵字和volatile關鍵字比較: (1)volatile關鍵字是線程同步的輕量級實現,所以volatile性能肯定比synchronized關鍵字要好。但是volatile關鍵字 只能用于變量而synchronized關鍵字可以修飾方法以及代碼塊。 (2)多線程訪問volatile關鍵字不會發生阻塞,而synchronized關鍵字可能會發生阻塞 (3)volatile關鍵字能保證數據的可見性,但不能保證數據的原子性。synchronized關鍵字兩者都能保證。 (4)volatile關鍵字主要用于解決變量在多個線程之間的可見性,而 synchronized關鍵字解決的是多個線程之間訪問資源 的同步性。
錯題二
- 如下的Java程序:若采用命令行“java Test one two three”調用,則程序輸出的結果為:
public class Test { public static void main(String[] args) { System.out.println(args[0]); } } ```
答案及解析:B
采用命令行“ java Test one two three ”調用
其中Test為調用的方法,而one two three則為Test方法里面main函數的參數;
System.out.println(args[0]);表示輸出第一個元素,故為one;
錯題三
- 關于依賴注入,下列選項中說法錯誤的是()
答案及解析:B
依賴控制和控制反轉是同一概念:
依賴注入和控制反轉是對同一件事情的不同描述,從某個方面講,就是它們描述的角度不同。
依賴注入是從應用程序的角度在描述,可以把依賴注入描述完整點:應用程序依賴容器創建并注入它所需要的外部資源;而控制
反轉是從容器的角度在描述,描述完整點:容器控制應用程序,由容器反向的向應用程序注入應用程序所需要的外部資源。
錯題四
- 以下代碼執行的結果是多少()?
public class Demo { public static void main(String[] args) { Collection<?>[] collections = {new HashSet<String>(), new ArrayList<String>(), new HashMap<String, String>().values()}; Super subToSuper = new Sub(); for(Collection<?> collection: collections) { System.out.println(subToSuper.getType(collection)); } } abstract static class Super { public static String getType(Collection<?> collection) { return “Super:collection”; } public static String getType(List<?> list) { return “Super:list”; } public String getType(ArrayList<?> list) { return “Super:arrayList”; } public static String getType(Set<?> set) { return “Super:set”; } public String getType(HashSet<?> set) { return “Super:hashSet”; } } static class Sub extends Super { public static String getType(Collection<?> collection) { return "Sub"; } } } ```
答案及解析:C
重載靜態多分派——根據傳入重載方法的參數類型,選擇更加合適的一個重載方法
static方法不能被子類覆寫,在子類中定義了和父類完全相同的static方法,則父類的static方法被隱藏,Son.staticmethod()
或new Son().staticmethod()都是調用的子類的static方法,如果是Father.staticmethod()或者Father f = new Son();
f.staticmethod()調用的都是父類的static方法。
此題如果都不是static方法,則最終的結果是A. 調用子類的getType,輸出collection
錯題五
- 下列代碼的運行結果為:()
import java.io.*; import java.util.*; public class foo{ public static void main (String[] args){ String s; System.out.println("s=" + s); } } ```
答案及解析:C
局部變量可以先申明不用必須初始化,但使用到了一定要先初始化
錯題六
- 以下代碼可以使用的修飾符是:()
public interface Status { /*INSERT CODE HERE*/ int MY_VALUE=10; } ```
答案及解析:A B D
接口中字段的修飾符:public static final(默認不寫)
接口中方法的修飾符:public abstract(默認不寫)
abstract只能修飾類和方法 不能修飾字段
錯題七
- class A {}
class B extends A {}
class C extends A {}
class D extends B {}
Which four statements are true ?
答案及解析:A C D G
1. 只看尖括號里邊的!!明確點和范圍兩個概念
2. 如果尖括號里的是一個類,那么尖括號里的就是一個點,比如List<A>,List<B>,List<Object>
3. 如果尖括號里面帶有問號,那么代表一個范圍,<? extends A> 代表小于等于A的范圍,<? super A>代表大于等于A的范圍,
4. <?>代表全部范圍
5. 尖括號里的所有點之間互相賦值都是錯,除非是倆相同的點
6. 尖括號小范圍賦值給大范圍,對,大范圍賦值給小范圍,錯。如果某點包含在某個范圍里,那么可以賦值,否則,不能賦值
7. List<?>和List 是相等的,都代表最大范圍
----------------------------------------------------------------------------------
7.補充:List既是點也是范圍,當表示范圍時,表示最大范圍
public static void main(String[] args) {
List<A> a;
List list;
list = a; //A對,因為List就是List<?>,代表最大的范圍,A只是其中的一個點,肯定被包含在內
List<B> b;
a = b; //B錯,點之間不能相互賦值
List<?> qm;
List<Object> o;
qm = o; //C對,List<?>代表最大的范圍,List<Object>只是一個點,肯定被包含在內
List<D> d;
List<? extends B> downB;
downB = d; //D對,List<? extends B>代表小于等于B的范圍,List<D>是一個點,在其中
List<?extends A> downA;
a = downA; //E錯,范圍不能賦值給點
a = o; //F錯,List<Object>只是一個點
downA = downB; //G對,小于等于A的范圍包含小于等于B的范圍,因為B本來就比A小,B時A的子類嘛
}
算法一
-
請判斷一個鏈表是否為回文鏈表
示例1:
輸入: 1->2 輸出: false
示例2:
輸入: 1->2->2->1 輸出: true
class Solution { public boolean isPalindrome(ListNode head) { ListNode slow = head; ListNode fast = head; if(fast==null||fast.next==null){//0個節點或者1個節點 return true; } while(fast.next!=null&&fast.next.next!=null){ fast = fast.next.next; slow = slow.next; } //對鏈表后半段進行反轉 ListNode midNode = slow; //后半段鏈表的第一個節點 ListNode firNode = slow.next; //插入節點從第一個節點后面一個開始 ListNode cur = firNode.next; //第一個節點最后會變最后一個節點 firNode.next = null; while(cur!=null){ //保存下次遍歷的節點 ListNode nextNode = cur.next; cur.next = midNode.next; midNode.next = cur; cur = nextNode; } //反轉之后對前后半段進行比較 slow = head; fast = midNode.next; while(fast!=null){ if(fast.val!=slow.val){ return false; } slow = slow.next; fast = fast.next; } return true; } }
智能推薦
易錯題
在對數組全部元素賦初值時,不可以省略行數,但能省略列數。(F) 數組定義中,數組名后是用方括號括起來的常量表達式,不能用圓括號。(T) 函數strcmp從頭至尾順序地將其對應字符比較,遇到兩個字符不等時,兩個字符相減得到一個int型值,兩個字符串完全相同時,則返回0.(T) 指向數組元素的指針只可指向數組的首元素。 (F) 對于已正確定義的二維數組a, *(a[i]+j)與a[i][j]的含義相同...
NowCoder錯題
1.下面一段程序的輸出結果是? 分析:這題在不同的編譯器會有不同的結果: 第一種情況: j = (i++*i++);=>3*4 第一次i++返回3 第二次i++返回4 最后i的值為5 k = (++i*++i);=>6*7 第三次++i返回6 第四次++i 返回7 最后i的值為7 但是還有一種編譯器的分析情況是這樣 j=(i...
20201023-第一次培訓心得
本次培訓中學習到的新知識點有 固定導航欄的實現 flex布局實現頁面自適應窗口大小 Github上傳任務的基本步驟 固定導航欄的實現 利用css中position參數的設置可以使導航欄位置固定 top值為0使得導航欄固定在頁面頂端 width參數以百分比描述使得菜單欄可橫跨頁面 導航欄中flex布局的應用 在導航欄內部使用flex布局可使Logo和列表分居兩側 頁面主體中flex布局的應用 jus...
C++基礎錯題
1:以下代碼最后一次打印結果是() 最后輸出 iCount = 6 解析: 靜態局部變量的特點:1. 該變量在全局數據區分配內存;2. 靜態局部變量在程序執行到該對象的聲明處時被首次初始化,即以后的 函數調用 不再進行初始化;3. 靜態局部變量一般在聲明處初始化,如果沒有顯式初始化,會被程序自動初始化為0。 調用fun(1),icount = 2 輸出icount = 3 調用fun(2),ico...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...