1. 程式人生 > >note:日常+list+C3P0

note:日常+list+C3P0

 


資料庫連線池
資料庫連線是一種關鍵的、有限的、昂貴的資源
最小連線數:連線池一直保持的資料庫連線
最大連線數:連線池能申請的最大連線數,如果資料庫連線請求超過此數,後面的資料庫連線請求將被加入到等待佇列中
C3P0:是一個開放原始碼的JDBC連線池,它在lib目錄中與Hibernate 一起釋出,包括了實現jdbc3和jdbc2擴充套件規範說明的Connection 和Statement 池的DataSources 物件。

1
ArrayList和LinkList的區別
ArrayList(陣列結構):
       優點:get和set呼叫花費常數時間,也就是查詢的速度快;
       缺點:新項的插入和現有項的刪除代價昂貴,也就是新增刪除的速度慢
LinkedList(連結串列結構):
優點:新項的插入和和現有項的刪除開銷很小,即新增和刪除的速度快
缺點:對get和set的呼叫花費昂貴,不適合做查詢
通過程式碼測試區別:

新增資料ArrayList耗時多
LinkList耗時少

拿資料Array耗時少
Link耗時多

2
Collection介面的remove()方法和Iterator介面的remove()方法區別?
①效能方面
Collection的remove方法必須首先找出要被刪除的項,找到該項的位置採用的是單鏈表結構查詢,單鏈表查詢效率比較低,需要從集合中一個一個遍歷才能找到該物件;
  Iterator的remove方法結合next()方法使用,比如集合中每隔一項刪除一項,Iterator的remove()效率更高
②容錯方面
  在使用Iterator遍歷時,如果使用Collection的remove則會報異常,會出現ConcurrentModificationException,因為集合中物件的個數會改變而Iterator 內部物件的個數不會,不一致則會出現該異常
  在使用Iterator遍歷時,不會報錯,因為iterator內部的物件個數和原來集合中物件的個數會保持一致
通過程式碼測試區別:

 

3
Array與ArrayList有什麼區別
①Array是Java中的陣列,宣告陣列有三種方式
int[] a=new int[10];
int a[]=new int[10];
int a[]={1,2,3,4};
可以看出:在定義一個數組的時候,必須指定這個陣列的資料型別及陣列的大小,也就是說陣列中存放的元素個數固定並且型別一樣

②ArrayList是動態陣列,也就是陣列的複雜版本,它可以動態的新增和刪除元素,被稱為”集合“,集合的宣告如下
ArrayList list = new ArrayList(10);
ArrayList<Integer> list1 = new ArrayList<Integer>();
可以看出:在不使用泛型的情況下,這個list是可以新增進不同型別的元素的,而且arraylist是可以不用指定長度的。在使用泛型時,我們就只能新增一種型別的資料了
可以從三方面回答面試官
①.ArrayList是Array的複雜版本
②.儲存的資料型別:Array只能儲存相同資料型別的資料,而ArrayList可以儲存不同資料型別的資料
③.長度的可變:Array的長度是固定的,而ArrayList的長度是可變的
4
怎樣將一個數組轉成List,有什麼方法
陣列轉list,可以使用Arrays.asList(陣列),例如

list =Arrays.asList()
List =new array(list)//add remove

List轉陣列,使用list.toArray(),例如

str[] =list.toarray(new str[list.size])

5
HashSet、TreeSet、LinkedHashSet區別?
可以從集合的使用場合回答面試官
①.需要速度快的集合,使用HashSet
②.需要集合有排序功能,使用TreeSet
③.需要按照插入的順序儲存集合,使用LinkedHashSet
以下程式碼,可以體現HashSet的速度快

HashSet速度最快
TreeSet速度最慢
LinkedHashSet速度介於之間

以下程式碼,可以體現TreeSet有排序功能:
TreeSet.add(9)
TreeSet.add(5)
TreeSet.add(6)
TreeSet.add(2)
2569
執行結果如下,可以看出TreeSet是有排序功能

以下程式碼,可以體現LinkedHashSet輸出的順序和插入的順序是一致的
TreeSet.add(9)
TreeSet.add(5)
TreeSet.add(6)
TreeSet.add(2)
9562
執行結果如下

6
HashMap、TreeMap、linkedHashMap區別?
可以從集合的使用場合回答面試官
①.在Map中插入、刪除和定位元素,HashMap是最好的選擇
②.需要集合有排序功能,使用TreeMap更好
③.需要按照插入的順序儲存集合,使用LinkedHashMap
以下程式碼,可以體現HashMap的速度快
HashMap速度最快
TreeMap速度最慢
linkedHashMap速度比tree map快 和hash map相近
以下程式碼,可以體現TreeMap有排序功能:
tree map.put(1,"")
tree map.put(3,"")
tree map.put(2,"")

tree map.keyset
[1,2,3]
執行結果如下:

以下程式碼,可以體現LinkedHashMap輸出的順序和插入的順序是一致的
LinkedHashMap.put(1,"")
LinkedHashMap.put(3,"")
LinkedHashMap.put(2,"")
it.next()
1
3
2
執行結果如下:

7
HashMap和HashSet區別

HashMap實現了Map介面 儲存鍵值對 呼叫put()向map中新增元素
HashMap使用key計算hashcode HashMap相對於HashSet較快,因為它是使用唯一的鍵獲取物件

HashSet實現了Set介面 儲存物件 呼叫add()向set中新增元素
HashSet使用成員物件計算hashcode
HashSet較HashMap來說比較慢

8
HashMap的實現原理
通過put和get儲存和獲取物件,儲存物件時,我們將K/V傳給put方法時,它呼叫hashcode計算hash從而得到bucket位置,進一步儲存,HashMap會根據當前bucket的佔用情況自動調整容量。獲取物件時,我們將K傳遞給get,他呼叫hashcode計算hash從而得到bucket位置,並進一步呼叫equals()方法確認鍵值對。
9
List、Set、Map之間的區別
List和Set都繼承Collection,但是Map不是Collection的子介面。

List可以允許重複的元素 可以插入多個null元素
有序的容器,插入的順序和輸出的順序一樣

Set不允許重複元素 只允許一個null元素
無序容器

Map鍵值對儲存,鍵必須唯一,但是值可以重複 鍵只允許一個null,值可以允許有多個null
無序容器

 

DEL /F /A /Q \\?\%1  RD /S /Q \\?\%1
bat 刪除

無限彈窗
:start
start cmd
goto start

remove directory
rd/s/q F:\xxx
del/f/s/q F:\XXX\222.TXT


開啟記事本
start notepad

ctrl+shift+f
工作列 輸入法 右擊 設定

圓形
<div style="width: 500px; height: 500px; border-radius: 250px;border: #ff8080 solid 2px;"></div>


1
SpringBoot
2
Redis
3
Linux
4
工作流
5
SQL優化
6
分散式
01
SpringBoot
1
Spring的工作流程

SpringBoot將Spring應用的啟動流程進行了一個“模板化”的操作,所以我們可以通過SpringApplication.run()方法進行一站式啟動

 

02
Redis
1
MongoDB與Redis區別
①. 效能方面:redis要大於mongodb
②. 操作的便利性:
a. Mongodb支援豐富的資料表達,索引,最類似關係型資料庫,支援的查詢語言非常豐富
b. Redis資料結構方面豐富一點
③. 記憶體空間大小和資料量大小:
a. Mongodb適合大量資料的儲存
④. 資料一致性
a. Redis事務支援比較弱
b. Mongodb不支援事務
⑤. 應用場景:
a. Redis用在資料量較小的操作和運算上
b. Mongodb:主要解決海量資料的訪問效率問題
2
Memcached和redis的區別
①. 儲存方式:
1) Memcached把資料全部存在記憶體中,斷電後會掛掉,資料不能超過記憶體大小
2) Redis有部分存在硬碟上,這樣能保證資料的永續性
②. 資料支援型別
1) Memcached對資料型別支援相對簡單
2) Redis有複雜的資料型別
③. Value大小
1) Redis最大可以達到1G
2) Memcached只有1MB
3
在專案中快取用在哪裡
在專案中經常會被查詢,但不經常會被修改和刪除的資料,比如:資料字典
4
Redis如何持久化
持久化就是將記憶體中的資料寫入到硬碟中
①. RDB:是將資料寫入到一個臨時檔案(dump.rdb),持久化結束之後,用這個臨時檔案替換上次持久化的檔案,達到資料恢復。RDB是間隔一段時間進行持久化,如果持久化之間redis發生故障,會發生資料丟失,所以這種方式更適合資料要求不嚴謹的時候,預設開啟的
AOF:是將執行過的指令記錄下來,資料恢復時按照從前到後的順序再將指令執行一遍,實現資料恢復。AOF的優點是可以保持更高的資料完整性,但是AOF檔案比RDB檔案大,且恢復速度慢,預設是關閉的
5
Redis的記憶體淘汰策略有那些
Redis的記憶體淘汰指的是使用者儲存的一些鍵可以被redis主動從例項中刪除,從而產生讀miss的情況,記憶體淘汰是為了更好的使用記憶體,用一定的快取miss來換取記憶體的使用率。Redis提供的記憶體淘汰策略有:
①. noeviction:預設策略,不刪除任意資料,但是記憶體不夠時,會直接返回錯誤
②. Allkeys-lru:從資料集中(包括設定過期時間和未設定過期時間的資料集),優先移除最近未使用的key
③. Volatile-lru:在設定了過期時間的資料集中,優先移除最近未使用的key
④. Allkeys-random:從資料集中(包括設定過期時間和未設定過期時間的資料集),隨機移除某個key
⑤. Volatile-random:在設定了過期時間的資料集中,隨機移除某個key
Volatile-ttl:在設定了過期時間的資料集中,具有更早過期時間的key優先移除
6
redis有哪些資料型別
①. String(字串):redis最基本的資料型別,一個key對應一個value,一個鍵最大能儲存512MB
②. Hash(雜湊):是一個鍵值對集合,特別適合用於儲存物件
③. List(列表):存放多個字串值,可以重複,按照插入順序進行排序,也可以新增一個元素到列表的頭部和尾部
④. Sets(集合):存放多個值,不可以重複,沒有順序
⑤. ZSet(有序集合):存放多個值,不可以重複,有順序。不同的是每個元素都會關聯一個double型別的分數,redis正是通過分數來為集合中的成員進行從小到大的排序
7
Redis一般用在那些場景
①. 快取熱資料使用,熱資料就是在專案中經常會被查詢,但不經常會被修改和刪除的資料
②. 計數器,諸如統計點選數等應用
③. 佇列
④. 位操作(大資料處理),比如統計QQ使用者線上
⑤. 分散式鎖和單執行緒機制
⑥. 最新列表
⑦. 排行榜,使用zadd新增有序集合

 

03
Linux
1
怎麼用linux部署web應用
①. 首先將web應用打包成war包
②. 使用WinSCP工具將war包上傳到tomcat的webapp目錄
③. 使用命令startup.sh或者catalina.sh啟動Tomcat即可
2
Linux如何獲取某個服務埠號
netstat 檢視正在的埠連線資訊
netstat -anltp|grep 服務名:檢視具體的某個服務埠號
3
Linux怎麼給一個檔案賦權
給目錄下所有的子目錄和檔案賦權:chmod -R 777 *
給某一個檔案賦權:chmod 777 檔名
4
Linux檢索查詢日誌
tail -n 10 test.log:查詢日誌尾部最後10行的日誌
tail -n +10 test.log: 查詢10行之後的所有日誌
head -n 10 test.log:查詢日誌檔案中的頭10行日誌
head -n +10 test.log:查詢日誌檔案中除了最後10行的其他所有日誌
5
寫出幾條常用的Linux命令
①. ls:顯示檔案和目錄
②. mkdir:建立目錄
③. cd:切換目錄
④. cat:檢視檔案內容
⑤. cp:複製檔案
⑥. mv:移動或重新命名
⑦. rm:刪除檔案
⑧. find:查詢檔案
⑨. pwd:顯示當前目錄
⑩. Ifconfig:檢視網路狀態
⑪. tar:解壓

 

04
工作流
1
工作流在專案中使用流程
①. 流程定義:就是畫流程圖,可以線上畫流程圖,也可以上傳zip格式的流程圖
②. 部署流程:通過RepositoryService管理流程定義
③. 啟動流程例項:通過RuntimeTime啟動、刪除流程例項
④. 查詢待辦任務:通過TaskService檢視正在執行的任務
⑤. 辦理任務:使用taskService
⑥. 流程結束

 

05
SQL優化
1
當你資料庫有100萬條資料的時候怎麼優化SQL語句
①. 不要有超過5個以上的表連線(連線的表越多,其編譯的時間和連線的開銷也越大,效能越不好控制,最好是把連線拆開成較小的幾個部分逐個順序執行)
②. 考慮使用臨時表或表變數存放中間結果
③. 修改like程式,去掉前置百分號,like語句因為前置百分號而無法使用索引,會導致全表掃描
④. 限制結果集,要儘量減少返回的結果行,包括行數和欄位列數
⑤. 使用儲存過程封裝複雜的SQL語句或商業邏輯,因為儲存過程的執行計劃可以被快取在記憶體中較長時間,減少了重新編譯的時間,還有儲存過程可以減少客戶端和伺服器的頻繁互動。
⑥. 儘量避免在where子句中使用!=或<>操作符,否則會進行全表掃描,應避免全表掃描,考慮在where及order by設計的列上建立索引
⑦. 儘量避免在where子句中對欄位進行null值判斷,否則會進行全表掃描,例如select id from person where num is null,可以在num上設定預設值0,確保表中num列沒有null列,然後使用查詢:select id from person where num=0
⑧. 儘量避免在where子句中使用or來連線條件,否則會進行全表掃描,例如select id from person where num=05 or num=22,優化後:select id from person where num=05 union all select id from person where num=22
2
資料庫什麼時候用到儲存過程
當一個事務涉及到多個SQL語句時或者設計到對多個表的操作時就要考慮使用儲存過程

 

06
分散式
1
分散式和叢集的區別
分散式:一個業務分拆多個子業務,部署在不同的伺服器上
叢集:同一個業務,部署在多個伺服器上

例如:小飯店原來只有一個廚師,切菜洗菜備料炒菜全乾。後來客人多了,廚房一個廚師忙不過來,又請了個廚師,兩個廚師都能炒一樣的菜,這兩個廚師的關係是叢集。

為了讓廚師專心炒菜,把菜做到極致,又請了個配菜師負責切菜,備菜,備料,廚師和配菜師的關係是分散式,一個配菜師也忙不過來了,又請了個配菜師,兩個配菜師關係是叢集。
總結一句話:就是“分頭做事”與“一堆人”的區別