1)函數式編程的優點和劣勢分別是什麼?
優點:
①不可變性編程
②並行操做安全
③執行順序更靈活函數式編程
④代碼更加簡潔
純粹的函數式編程,變量具備不可變性,同一個參數不會在不一樣場景下得出不一樣的結果,所以大大加強了系統的穩定性。並行操做,與線程無關,提升了安全性。函數
以Lambda表達式爲例,Lambda語法實現了類型自動推斷,在方法引用時考慮參數類型和返回值便可。Lambda可做爲參數傳給函數、Lambda結合forEach,stream(),FunctionalInterface Lib的使用,簡化了代碼。函數能夠被當作變量使用,好比,在用遞歸時,只關注表達式,即描述問題自己,而不是如何實現,代碼更加接近天然語言。
劣勢:
①消耗資源優化
②可能佔用的空間會大些線程
③不易排查
以遞歸爲例,其子問題的答案被重複計算,當輸入的參數較大,程序可能會因建立過多的堆棧,產生溢出問題,此時要考慮尾遞歸優化。尾遞歸優化時還要考慮編譯器、解釋器的支持與否。這樣一來,在獲得便利的同時也加大了函數式編程的難度和異常維護的開銷。
2)Stream流的哪個方法最有價值,爲何》設計
Java 8引入了全新的Stream API。blog
Stream提供許多實用的功能,不一樣的方法有不一樣的用處,轉換操做(map、filter、sorted、distinct)、合併操做(concat、flatMap)、並行處理(parallel)、聚合操做(reduce、count、max、min、sum、average)、其餘操做(allMatch、forEach)等。遞歸
我的認爲,Stream的價值不止於它的某一個方法在平常開發中被用到次數的多少來決定的,而是它的設計使得返回結果依然是一個Stream。由於是Stream,能夠利用它去進行內存計算;由於是Stream,能夠利用它的惰性計算去處理諸多複雜問題。由於是Stream,Lambda在與Stream的結合使用中,讓代碼更加簡潔。內存