JavaSE基礎總結(筆試面試題)
目錄
7.父類和子類中,靜態程式碼塊、程式碼塊、構造方法、普通方法執行順序
15.Integer.parseInt()和 Integer.valueOf()
17.String,StringBuffer,StringBulider的區別
20.兩個物件相等,hashCode一定相同,但hashCode相同不一定是同一個物件
21.equals 方法被覆蓋之後,hashCode也一定會被覆蓋
22.ArrayList,Vector 使用陣列實現,LinkedList使用的是雙向連結串列
27.Deque 中的LinkedList 和 ArrayDeque的區別
32.windows 系統中使用"\"表示的路徑分隔符,但是 java 中"\"轉義字元 ,所以"\\" 表示路徑分割,或者"/"表示路徑的分割建議使用這種形式
34.序列化和反序列化(物件流 ObjectInputStream和ObjectOutputStream)
47.synchronized 鎖物件的時候,可以使用任意的物件
54.執行緒池中的執行緒是由執行緒建立的,程式設計師只需要建立執行緒池就可以
56.執行緒池的任務:Callable或者Runnable任務
57.四種執行緒池的底層:ThreaPoolExecutor
59.併發容器:jdk1.5提出,改善同步容器效能,專門為併發環境設計
60.HashMap、HashTable、ConcurrentHashMap的區別
61.Java中的Callable和Runnable有什麼區別
64.為什麼wait, notify 和 notifyAll這些方法不在thread類裡面
70. 有三個執行緒T1,T2,T3,怎麼確保它們按順序執行
72.如不指定泛型:集合中存放的資料預設為Obiect型別的
1.構造方法不能被重寫,但可以過載,宣告為 final 的方法不能被重寫,宣告為 static 的方法不能被重寫,但是能夠被再次宣告。
2.抽象的(abstract)方法是否可同時是靜態的(static), 是否可同時是本地方法(native),是否可同時被 synchronized
6.陣列中沒有length方法,但是有length屬性,字串有length方法,javaScript中字串長度使用length屬性
4.三次握手和四次揮手 http://blog.51cto.com/jinlong/2065461
JavaSE基礎
1.物件例項化
(1)Class.forName(“類的全名稱”);
(2)Person person = new Person();
2.類的過載:
類名相同,形參列表不同(型別,順載序,個數),system.out.println();也是方法重
3.不定長引數,本質是一個數組形式,int...a
- 定義方法時不確定有幾個入參時使用
- 一個方法中只能有一個,位於形參末尾
4.方法中使用全域性變數 this
- 全域性變數(成員變數/成員屬性):編寫在類中
- 區域性變數:宣告在方法或者程式碼塊中
5.形參列表中的變數是區域性變數
6.構造方法的作用:
使用構造方法建立物件並且可以為類中的屬性賦值(例項化物件)
- 構造方法在建立的時候就給物件初始化; 一個物件建立構造方法只能執行一次;
- 一般方法是物件呼叫才執行,給物件新增物件具備的功能; 一般方法可以被物件多次呼叫;
注意:多型分類
執行時多型(重寫時多型)
父類引用接收子類的物件
編譯時多型
方法過載方法名相同形參列表不同
7.父類和子類中,靜態程式碼塊、程式碼塊、構造方法、普通方法執行順序
父類中的靜態變數和靜態程式碼塊
子類中的靜態變數和靜態程式碼塊
父類中的普通變數和程式碼塊->構造方法
子類中的普通變數和程式碼塊->構造方法
變數和程式碼塊的執行與宣告順序有關,變數一般宣告在程式碼塊前
8.修飾符修飾範圍
9.子類只能繼承父類非private的方法
10.instanceof
instanceof是一個二元操作符,用法是:boolean result = a instanceof ClassA,即判斷物件a是否是類Class A的例項,如果是的話,則返回true,否則返回false。向下轉型,需要先向上轉型,而且只能轉化為本類物件
11.抽象方法不可以被private修飾
12.抽象類和介面的比較
|
抽象類 |
介面 |
構造方法 |
可以有 |
不可以有 |
方法 |
可以有抽象方法和普通方法 |
只能有抽象方法,但1.8版本之後可以有預設方法 |
實現 |
子類用extend來實現 |
用implments實現 |
修飾符 |
public、default、protected |
預設public |
變數 |
可以有常量也可以有變數 |
只能是靜態常量預設有public static final修飾 |
main方法 |
可以有 |
不可以有 |
多繼承 |
單繼承 |
實現多個介面 |
靜態方法 |
可以有 |
不可以 |
速度 |
比較快 |
比較慢 |
13.匿名內部類常用於實現介面或抽象類
14.基本型別的包裝類
int - Interger char - character
在-128~127之間的Integer值,用的是原生資料型別int,會在記憶體裡供重用,也就是說這之間的Integer值進行==比較時只是進行int原生數 據型別的數值比較,而超出-128~127的範圍,進行==比較時是進行地址及數值比較。
15.Integer.parseInt()和 Integer.valueOf()
Integer.parseInt()返回值為基本資料型別
Integer.valueOf()返回值為包裝型別
16.Object類中的方法:
equals(),finalize(),clone(),getClass()(返回執行時的類,有且僅有一份,可用 物件.getClass() 或者 forName.getClass(),)wait(),notify(),notifyAll(),hashCode(),toString().
17.String,StringBuffer,StringBulider的區別
String只讀字串,意味著其引用的字串內容不能發生改變
StringBuffer/StringBuilder 表示的字串物件可以直接進行修改。
StringBuilder 是 Jdk1.5 中引入的,它和 StringBuffer 的方法完全相同,區別在於它是在單執行緒環境下使用的,
因為它的所有方法都沒有被 synchronized 修飾,因此它的效率理論上也比StringBuffer 要高。
18.BigDemail用於精確計算
19.集合只能存放抽象資料型別
20.兩個物件相等,hashCode一定相同,但hashCode相同不一定是同一個物件
21.equals 方法被覆蓋之後,hashCode也一定會被覆蓋
22.ArrayList,Vector 使用陣列實現,LinkedList使用的是雙向連結串列
23.ArrayList常用方法:
set(),get(),size(); HashMap常用方法:put():新增物件:get():獲得物件的值;
size():檢視集合中的資料有多少個
迭代方式
- for迴圈
- foreach
- 迭代器(collection介面下的集合都可使用)
4.jdk1.8中出現了stream流
Map迭代 (1)將Map轉化為Set集合,使用keySet
Set<String> keySet = mapkeySet();
(2)1.8新特性
map.forEach((k,v)->{
system.out.println(k+"="+v);
});
24.解決ArrayList 執行緒不安全問題
(1)轉化為執行緒安全的類
ArrayList = Collection.synchronizedList(arrayList);
(2)併發環境下可以使用CopyOnWriterList
25.解決HashMap執行緒不安全問題
(1)轉化為執行緒安全類
map = Collection.synchronizedMap(map);
(2)併發環境下可以使用CurrentHashMap
26.堆和棧
堆是在程式執行時,而不是在程式編譯時,申請某個大小的記憶體空間。即動態分配記憶體,對其訪問和對一般記憶體的訪問沒有區別。
{堆是指程式執行是申請的動態記憶體,而棧只是指一種使用堆的方法(即先進後出)。}棧是先進後出的,但是於堆而言卻沒有這個特性,兩者都是存放臨時資料的地方。
佇列:先進先出,棧:先進後出
25.集合原始碼分析
(1)ArrayList
List介面可變陣列非同步實現,每次擴容擴為原來的1.5倍,執行緒不安全
(2)Vector
API與ArrayList相同,基於陣列實現,可擴容,有synchronize修飾,執行緒安全
(3)LinkedList
底層是雙向連結串列,非同步,同時實現List和Deque,可以當佇列使用,執行緒不安全
(4)ArrayDeque
使用陣列實現的雙端佇列
(5)HashSet
底層使用雜湊表實現(陣列+連結串列),實際是由一個HashMap的例項支援的,允許使用NULL值
使用該方法時,需要重寫equals和hashCode方法。
(6)LinkedHashSet
雜湊表+雙向連結串列實現
(7)HashMap
底層使用雜湊表(雜湊連結串列/陣列+連結串列)實現,陣列中每一項是個單向連結串列,即陣列和連結串列的結合體,可以儲存NUll值,1.8之後採用
雜湊列表+紅黑樹的方式,執行緒不安全
(8)HashTable
底層使用陣列實現,陣列中每一項是個單鏈表,即陣列和連結串列的結合體,key和value不能為NUll
26.ArrayList和LinkedList區別
ArrayList底層是用陣列實現的順序表,是隨機存取型別,可自動擴增,並且在初始化時,陣列的長度是0,只有在增加元素時,長度才會增加,預設是10,不能無限擴增,有上限,在查詢操作的時候效能更好
LinkedList底層是用連結串列來實現的,是一個雙向連結串列,注意這裡不是雙向迴圈連結串列,順序存取型別。在原始碼中,似乎沒有元素個數的限制。應該能無限增加下去,直到記憶體滿了在進行刪除,增加操作時效能更好。
27.Deque 中的LinkedList 和 ArrayDeque的區別
LinkedListDeque使用的是連結串列實現的雙端佇列
ArrayDeque 使用的是陣列實現雙端佇列
28.catch 可以出現多次,首先捕獲小異常,然後捕獲大異常
29.final 、finally 、finalize
final 用於宣告變數,方法,類,表示變數不可改變(引用不能改變,只可以改變),方法不能重寫,類不可以被繼承
finally 用於異常處理中,表示,必須要執行的程式碼塊,除非java虛擬機器停止工作,否則一定會執行
finalize() 是Object類中的一個方法,用於java虛擬機器的垃圾回收
30.IO體系中存在的設計模式:
裝飾模式 - 用於動態的給物件新增一些功能,類似於繼承,但是比繼承更加靈活
31.IO
BIO 傳統IO,阻塞並同步 NIO,同步非阻塞 AIO 非同步非阻塞
32.windows 系統中使用"\"表示的路徑分隔符,但是 java 中"\"轉義字元 ,所以"\\" 表示路徑分割,或者"/"表示路徑的分割建議使用這種形式
33.集合和資料間的相互轉化
(1)集合轉陣列
List list = new ArrayList();
String [] arr = list.toArray(new arr[list.size()]);
(2)陣列轉集合
String [] arr;
List list = Array.asLast(arr);
34.序列化和反序列化(物件流 ObjectInputStream和ObjectOutputStream)
物件序列化:將物件以二進位制的形式儲存到硬碟上
物件反序列化:將硬碟上的二進位制檔案轉化為物件輸出
35.什麼時候需要實現序列化,如何實現?
把一個物件寫入資料來源或者將物件從資料來源讀出來,序列化物件要實現serializable介面(標誌性介面,方法為空)
36.深克隆和淺克隆
淺克隆:物件需要Cloneable 並重寫 clone() 方法
深克隆:物件要實現Cloneable,Serialzable介面,引用要實現Serialzable介面,先將物件以流的方式寫入,然後讀出,完成深克隆
37.標誌性介面:
介面中的內容為空,如Cloneable和Serialzable
38.程序和執行緒的區別
程序指得是作業系統對於某一事件的程式例項
執行緒是微觀的程序,程序有一個或者以上的執行緒組成
39.多執行緒作用:
降低開發和維護開銷,並提高複雜應用的效能,提高資源利用率和吞吐量
40.多執行緒的實現方式
(1)繼承Thread類並重寫run()方法;
(2)實現Runnable介面並重寫run方法;
(3)實現Callable介面由FeatureTask建立
(4)通過執行緒池建立 如ExecutorService
42.多執行緒中不要呼叫run()方法,不然多執行緒會失效
43.多執行緒的生命週期
新建:當通過new操作符建立一個執行緒時,處於新建狀態
就緒:使用start()方法之後處於就緒狀態
執行:真正執行run()方法
阻塞:執行了sleep()、wait() 方法後
死亡:當執行緒執行完或者因為異常退出run()方法後
44.sleep(),wait()方法的區別
sleep() 屬於Thread類,wait() 屬於Object類
sleep()執行後不會釋放物件鎖,wait()會釋放物件鎖,重新進入就緒狀態需要notify()或者notifyAll方法
45.執行緒控制:加塞join()(插隊)
睡眠sleep()沒有放棄CPU的執行權
讓步yield()放棄CPU的執行權
46.執行緒安全
指的是多執行緒訪問同一個方法、物件或程式碼時不會產生不確定的結果
引起執行緒安全的原因:存在多條執行緒共同操作的共享資料
47.synchronized 鎖物件的時候,可以使用任意的物件
48.volatile關鍵字
使用該關鍵字修飾變數 表示變數是多執行緒可見的。每一個執行緒在執行的時候自己的執行緒記憶體,執行緒記憶體中存放的是主記憶體的資料的拷貝。如果使用volatile關鍵字修飾變數,執行緒在使用變數的時候不是從執行緒記憶體中獲取,而是從主記憶體中獲得資料。
49.synchronized關鍵字
當synchronized修飾靜態方法時,修飾的是當前類的class物件鎖
當synchronized修飾例項方法時,修飾的時物件中的例項方法
50.併發和並行
併發:一個處理器同時處理多個任務
並行:多個處理器處理不同的任務
51.原子性問題解決方案
(1)使用同步程式碼塊或同步方法
(2)使用原子性操作的類 java.util.concurrent.atomic 底層使用CAS實現 (CompareAndSwap)
52.Lock鎖
實現類為ReentrantLock Lock lock = new ReentrantLock();
lock.lock();
53.Lock鎖和synchronized的區別
Lock產生異常時不會自動釋放鎖 所以要在finally中釋放鎖(lock.unlock();)
synchronized修飾的鎖產生異常時會自動釋放
54.條件鎖 Condition 需要結合Lock鎖
54.執行緒池中的執行緒是由執行緒建立的,程式設計師只需要建立執行緒池就可以
55.執行緒池建立的四種方式
ExecutorService executor1 = executors.newSingleThreadExecutor();//建立只有一個執行緒的執行緒池
ExecutorService executor2 = executors.newFixedThreadPool(10);//建立一個固定數量執行緒的執行緒池
ExecutorService executor3 = executors.newCachedThreadPool();//建立一個可拓展的執行緒池,沒有上限
ExecutorService executor4 = executors.newScheduledThreadPool();//建立一個可以輪序執行的
56.執行緒池的任務:Callable或者Runnable任務
57.四種執行緒池的底層:ThreaPoolExecutor
58.同步容器:synchronize修飾,產生效能影響
59.併發容器:jdk1.5提出,改善同步容器效能,專門為併發環境設計
(1)HashMap(執行緒不安全)、HashTable(執行緒安全) 可以用 ConcurrentHashMap代替
(2)ArrayList、vector 可以使用 CopyOnWriteArrayList
(3)set 可以使用CopyOnWriteArraySet
(4)Queue 可以使用 ConcurrentLinkedQueue(高效能佇列) 或linedBlokingQueue(阻塞佇列)
目錄
JavaSE基礎
1.物件例項化
2.類的過載:
3.不定長引數,本質是一個數組形式,int...a
4.方法中使用全域性變數 this
5.形參列表中的變數是區域性變數
6.構造方法的作用:
7.父類和子類中,靜態程式碼塊、程式碼塊、構造方法、普通方法執行順序
目錄
Mybatis
1.談談MyBatis
2.Mybatis分為三層
3.Mybatis和jdbc的區別
4.對映檔案
5.模糊查詢:LIKE
6.$和#的區別
7.主鍵自增
8.API
9.SqlSession不是執行緒安全的
10.呼叫
目錄
Spring
1.談談Spring
2.Spring包含JavaEE中三層每一層的解決方案
3.Spring 框架的優點
4.首先需要匯入的4個包
5.IOC:控制反轉,將原本在程式中手動建立物件的控制權交給了Spring框架來管理。
6.DI:依
忙忙碌碌,時間過得很快,已經一個月零4天了,每次新開課程的時候就覺得自己有些頭大,總覺得很多人能夠直接理解或者記憶的東西,我需要更多的時間去學習和記憶,每次都需要時間去消化,上這麼久課了,很少有能夠讓我覺得直接可以會,可以直接消化,需要更多的時間精力去接受,可能天賦不夠 ,只能勤奮來湊,也給自己
面試崗位:
後端研發工程師
找牛客大佬要了白金碼,跳過死亡筆試,直接視訊面,從3點開始,到晚上8點結束。 blog image more http auto 最終 進行 .get fall 最近在學習多線程,題目源自 MoreWindows先生的 《秒殺多線程第一篇》(http://blog.csdn.net/morewindows/article/details/739274 urn for循環 生成器 出現 擁有 移動 iterable 文本 協議 可叠代對象
字符串、列表、元祖、集合、字典都是可叠代的,數字是不可叠代的。(可以用for循環遍歷取出內部元素的就是可叠代的)
如何查看一個變量是否為可叠代:
from collections im
前言:先簡單說說我最近的面試經歷吧。面試的公司很多,大部分最後都能得到令人滿意的結果,我將這些體會記錄下來,面了這麼多公司,如果不留下什麼,那豈不是太浪費了。對於我來說,這也是一次自我檢查,在這次面試中總結經驗,認清自己,同時希望這些對即將換工作或者打算看看其他機會的你有一些
首先了解下為什麼要有繼承
舉個例子,我們要定義幾個類,學生類,老師類,清潔工類,在他們裡面都要定義一個吃飯的方法,那麼,每個類裡面都定義是不是有些麻煩,於是出現了繼承,想想,學生老師清潔工都是人,這個時候我們可以定義一個人類,裡面定義一個吃飯的方法,然後這幾個類再繼承人類,
產生的原因
∑對資源的需求>可用資源∑對資源的需求>可用資源
注意
單純的增加網路資源無法解決問題
例如:把結點的儲存空間擴大,更換更高速率的鏈路,提高結點處理機的運算速度,不僅不能解決問題,而且可能使網路效能更壞。
原因
問題導讀1.機器學習工程師面試的流程是什麼?2.本文典型的第一輪面試由哪三部分組成?3.對於基本 white col 排序 簡單 請求 走了 才會 www. 朋友 1.背景:
因為公司變動,lz不得不出來看看機會, 面試的崗位主要是後端,歷經三周,面了北京大大小小的幾家公司,最後收獲了滿意的offer。
自己也成長收獲了不少, 謹以筆記,自己可以日後回憶,也希望能幫助到
來源: 這是一個很常見的javascript面試題目。
通常喜歡出的題目是: 對String物件定義一個重複n次數的方法。或者是對Array物件擴充套件一個求和的方法。
下面我就以擴充套件Array的求和方法作為例子。有興趣的同學可以自己寫寫第一個題目。
題目:
將兩個已經排好序的連結串列組合成一個排序的連結串列。
/*
歸併排序的思想
時間:2015年4月8日 19:59:02
*/
#include <iostream>
#include <cstdlib>
using namespace
20.01_IO流(IO流概述及其分類)
1.概念
IO流用來處理裝置之間的資料傳輸
Java對資料的操作是通過流的方式
Java用於操作流的類都在IO包中
流按流向分為兩種:輸入流,輸出流。
流按操作型別分為兩種:
位元組流 : 位元組流可以操作任何資
介面是不能例項化的,但是可以例項化介面的類的物件。比如 Map m = new hashMap()。
什麼是執行緒?與程序有什麼區別?為什麼要使用多執行緒?
執行緒是一個程度執行過程中,能夠執行程式程式碼的一個執行單元。有四種狀態:執行,掛起,就緒,結
1. C 和 C++ 的區別
a. C 是面向過程、結構化的語言; C++ 是面向物件、模組化的語言,主要特點是封裝、繼承、多型。
b. 動態管理記憶體的方法不同,C 中用 malloc / free 分配、釋放記憶體; C++中還有 new / delete。
c. C++ 中有引用,
一、合併兩個有序連結串列(簡單)
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4 輸出:1->1->2->3-&
STL筆試面試題總結
一.STL有哪些元件?
STL提供六大元件彼此此可以組合套用:
1、容器
容器就是各種資料結構,我就不多說,看看下面這張圖回憶一下就好了,從實現角度看,STL容器是一種class template。
2、演算法
各種常見演算法,如sort,s
1.Huffman編碼中的貪心策略,該部分所需要的計算時間。
首先,要理解Huffman編碼中那部分用到了貪心演算法,貪心的策略,這樣才能求所需的計算時間。
哈夫曼編碼演算法:每次將集合中兩個權值最小 相關推薦
JavaSE基礎總結(筆試面試題)
MyBatis總結(筆面試題)
Spring框架總結(筆面試題)
javase基礎總結(周總結)
今日頭條Java工程師崗面試分享,我總結的失敗原因(附面試題)
(Google面試題)有四個線程1、2、3、4同步寫入數據……C++11實現
what's the python之可叠代對象、叠代器與生成器(附面試題)
一年iOS工作經驗,如何拿下百度、美團、快手等Offer(附面試題)
聊聊java中的繼承(附面試題)
TCP擁塞控制機制(附面試題)
機器學習工程師|資料科學家面試流程介紹(含面試題)
一份來自一月寒冬互聯網一線的面經(附面試題)
利用原型對原始物件的方法進行擴充套件(javascript面試題)
將兩個已排序的連結串列歸併成一個連結串列(C++面試題)
JAVASE基礎-day20(IO(位元組流))
【ForOffer】面試題基礎總結(3)
C++概念總結(筆試、面試題總結)
leetcode 騰訊筆試面試題之連結串列題目總結(持續更新。。。)
STL筆試面試題總結(乾貨)
筆試面試題總結(一)--- 軟體開發