ARTS打卡第十二周

2021-09-25 09:04:27 字數 4100 閱讀 3856

algorithm:141. 環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。

示例 1:

輸入:head = [3,2,0,-4], pos = 1

輸出:true

解釋:鍊錶中有乙個環,其尾部連線到第二個節點。

示例 2:

輸入:head = [1,2], pos = 0

輸出:true

解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。

示例 3:

輸入:head = [1], pos = -1

輸出:false

解釋:鍊錶中沒有環。

高階:你能用 o(1)(即,常量)記憶體解決此問題嗎?

解法一:用hashset快取遍歷過的節點,遇到相同節點表示有環。時間複雜度o(n),空間複雜度o(n)

/**

* definition for singly-linked list.

* class listnode

* }*/public

class

solution

return

false;}

}

解法二(高階):將遍歷過的節點指向乙個特殊節點,最後如果又回到這個特殊節點,就表示有環。時間複雜度o(n),空間複雜度o(1).

這個演算法的弊端是破話了原鍊錶。

public

boolean

hascycle

(listnode head)

return q == special;

}

解法三(高階):快慢指標,快指標比慢指標多移動一步,如果有環,最終快指標會追上慢指標。時間複雜度o(n),空間複雜度o(1).

public

boolean

hascycle

(listnode head)

return fast != null && fast == slow;

}

mlag,全稱是multi-chassis link aggregation group(多機架鏈路聚合組),是一種鏈路聚合技術,juniper將其稱為mc-lag,cisco將其稱為mlacp 。

mlag既可以增加頻寬,又可以增強可靠性。mlag從lag發展而來,但相比於lag的鏈路冗餘,mlag提供節點級別的冗餘;相比於stp(spanning tree protocol),ha mlag不需要浪費埠就能防止拓撲環路。

詳解交換機虛擬化技術vrrp、堆疊、m-lag及其區別-信銳技術

例如,我們想返回乙個string型別的list。

list

stringlist = arrays.

aslist

("a"

,"b"

,"c"

);

比較方便的做法是用乙個pojo型別包裝一下:

@data

@xmlrootelement

@xmlaccessortype

(xmlaccesstype.field)

public

class

stringlistvo

implements

serializable

#然後在**裡直接返回這個pojo物件

stringlistvo stringlistvo =

newstringlistvo()

;stringlistvo.

setdata

(stringlist)

;return responseutil.

success

(stringlistvo)

;

這種做法有乙個坑要注意,就是pojo類不能定義有參構造方法,否則就會丟擲messagebodywriter not found異常

一些嘗試

我們無法直接將list放到response的entity裡,也就是說像下面的寫法都是不行的,都會丟擲messagebodywriter not found異常:

#寫法一:

return response.

ok(stringlist)

.build()

;#寫法二:

genericentity

> entity =

newgenericentity

>

(stringlist)

;return response.

ok(entity)

.build()

;

如果是`string`陣列,將其直接放到response裡,是可以的,只不過顯示效果是這樣的:

[,,

,]

如果我們想把stringlistvo搞得更通用一些,定義成范型,就像這樣:

@data

@xmlrootelement

@xmlaccessortype

(xmlaccesstype.field)

public

class

listvo

implements

serializable

#然後在**裡返回這個pojo物件

listvo

stringlistvo =

newlistvo

<

>()

;stringlistvo.

setdata

(stringlist)

;genericentity

> entity =

newgenericentity

>

(stringlistvo)

;return response.

ok(entity)

.build()

;

這樣也是不行的,而且沒有異常輸出。

通過new thread方式建立的執行緒,runnable介面不允許丟擲異常,異常只會傳送到system.err。可以通過設定uncaughtexceptionhandler來捕獲異常。

通過execute方法提交到執行緒池,可以繼承threadpoolexecutor重寫其afterexecute方法處理異常。

通過submit方法提交到執行緒池,其異常只有在呼叫返回的futureget方法的時候,異常才會丟擲來,丟擲executionexception異常,那麼呼叫它的getcause方法就可以拿到最原始的異常物件了。

cpu密集型,建議核心執行緒數設為cpu核數+1,最大執行緒數設為cpu核數*2;

io密集型,建議核心執行緒數設為cpu核數4,最大執行緒數設為cpu核數5;

建議:先呼叫shutdown方法拒絕新任務,然後呼叫awaittermination方法設定超時時間。當awaittermination方法返回false時,表示超時了,此時可以嘗試呼叫shutdownnow方法,這就要求提交到執行緒池的任務能夠響應中斷,做一些資源**的工作。

起乙個定時輪詢執行緒(守護型別),定時檢測線程池中的執行緒數,具體來說就是呼叫getactivecount方法。

當發現執行緒數超過了核心執行緒數大小時,可以考慮將corepoolsize和maximumpoolsize的數值同時乘以2,當然這裡不建議設定很大的執行緒數,因為並不是執行緒越多越好的,可以考慮設定乙個上限值,比如50、100之類的。

ARTS打卡第十五周

algorithm leetcode 933.最近的請求次數 寫乙個 recentcounter 類來計算最近的請求。它只有乙個方法 ping int t 其中 t 代表以毫秒為單位的某個時間。返回從 3000 毫秒前到現在的 ping 數。任何處於 t 3000,t 時間範圍之內的 ping 都將...

第十二周作業

例題1 includeusing namespace std struct date struct student int main stu1,stu2 stu1.num 1001 stu1.age 20 stu2 stu1 cout includeusing namespace std struc...

第十二周總結

對上週考試中重寫equals方法的理解,public boolean equals object object 1 第一行是equals 方法的方法頭,引數為object object,object類是所有類的直接或間接父類,因此 object 引數名稱 代表任何繼承object的例項,即任何乙個物...