stackoverflow上一个最会举例子的专家
https://stackoverflow.com/
Premraj是stackoverflow上一個一個最會舉例子的專家,我特意收集了他的一些有趣的舉例:
Java弱引用最精彩的解釋
https://stackoverflow.com/questions/299659/whats-the-difference-between-softreference-and-weakreference-in-java/46291143#46291143
https://stackoverflow.com/questions/12646404/concurrenthashmap-and-hashtable-in-java/31579480#31579480?
https://stackoverflow.com/questions/510632/whats-the-difference-between-concurrenthashmap-and-collections-synchronizedmap
?
https://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap/50551555#50551555
HashMap,LinkedHashMap和TreeMap之間的區別
這三個類都實現了Map接口,并提供了大部分相同的功能。最重要的區別是條目的迭代順序:
HashMap絕對不保證迭代順序。當添加新元素時,它甚至可以(并且將)完全改變。TreeMap將根據其compareTo()方法(或外部提供的Comparator)按鍵的“自然排序”進行迭代。此外,它實現了SortedMap接口,該接口包含依賴于此排序順序的方法。LinkedHashMap?將按照條目放入地圖的順序進行迭代
“Hashtable”是基于散列的映射的通用名稱。在Java API的上下文中,?Hashtable是一個過時的類,它來自Java 1.1之前的集合框架。它不應再被使用,因為它的API混雜著復制功能的過時方法,并且它的方法是同步的(這會降低性能并且通常是無用的)。使用ConcurrentHashMap而不是Hashtable。
這三個都表示從唯一鍵到值的映射,因此實現了Map接口。
-
HashMap是基于鍵散列的映射。它支持O(1)get / put操作。密鑰必須具有一致的實現
hashCode()并且equals()為此工作。 -
LinkedHashMap與HashMap非常相似,但它增加了對添加(或訪問)項目的順序的認知,因此迭代順序與插入順序(或訪問順序,取決于構造參數)相同。
-
TreeMap是基于樹的映射。其put / get操作需要O(log n)時間。它要求項目具有一些比較機制,可以使用Comparable或Comparator。迭代順序由此機制確定。
?
?
其實就是LinkedHashMap是插入順序,TreeMap是排序的順序。
https://stackoverflow.com/questions/1216380/what-is-a-stream/33914070#33914070
什么是流?
https://stackoverflow.com/questions/3085285/difference-between-cohesion-and-coupling/48472013#48472013?
內聚與耦合的區別
----
https://enterprisecraftsmanship.com/2015/09/02/cohesion-coupling-difference/
高內聚,低耦合指南
實質上,高內聚意味著將代碼庫的一部分保存在一個地方。同時,低耦合是盡可能地分離代碼庫的不相關部分。
理論上,指南看起來很簡單。但是,在實踐中,您需要深入了解軟件的域模型,以便了解代碼庫的哪些部分實際相關。
----
內聚是指類(或模塊)可以做什么。低凝聚力意味著班級做了各種各樣的行動 - 它是廣泛的,沒有關注它應該做什么。高凝聚力意味著課程專注于應該做的事情,即只關注課堂意圖的方法。
低內聚的例子:
-------------------
| Staff |
-------------------
| checkEmail() |
| sendEmail() |
| emailValidate() |
| PrintLetter() |
-------------------
高內聚的例子:
----------------------------
| Staff |
----------------------------
| -salary |
| -emailAddr |
----------------------------
| setSalary(newSalary) |
| getSalary() |
| setEmailAddr(newEmail) |
| getEmailAddr() |
----------------------------
至于耦合,它指的是兩個類/模塊相互依賴或相互依賴的方式。對于低耦合類,更改一個類中的主要內容不應該影響另一個類。高耦合會使您難以更改和維護代碼;?由于課程緊密相連,因此進行更改可能需要對整個系統進行改造。
良好的軟件設計具有高內聚力和低耦合性。
Java中的ThreadFactory用法
有人可以簡要解釋如何使用ThreadFactory?使用和不使用ThreadFactory的示例可能對理解差異非常有幫助。
他也是引用了這里:
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadFactory.html?
如何在非線程的對象上調用wait()和notify()方法?
如何在不是線程的對象上調用wait()和notify()方法?那真的沒有意義,是嗎?
當然,它必須有意義,因為這兩種方法可用于所有Java對象。有人可以提供解釋嗎?我無法理解如何使用wait()和之間的線程之間進行通信notify()。
其實wait,notify成員函數不應該屬于線程,它應該屬于命名為東西條件變量它來自POSIX線程。你可以看看cpp如何包裝這個概念,它將它包裝成一個專用的類名std :: condition_variable。
我認為cpp比java更好地封裝,java做得太多了,它把概念直接放到了Object類中,好吧,這讓人們在開始時感到困惑。
?
?
Spring @Transactional - 隔離,傳播
有人可以通過現實世界的例子解釋注釋中的隔離和傳播參數@Transactional。基本上何時以及為什么我應該選擇更改其默認值。
什么是回調函數?
?
如何用簡單的英語解釋回調?它們與從另一個函數調用一個函數有什么不同?
?
JDK動態代理和CGLib有什么區別?
http://bytebuddy.net/#/?
Java字節碼3-使用ByteBuddy實現一個Java-Agent?
基于 ByteBuddy 運行時動態修改字節碼
https://gist.github.com/premraj10/3a3eac42a72c32de3a41ec13ef3d56ad
什么是枚舉,為什么它們有用?
https://www.javatpoint.com/enum-in-java
總結
以上是生活随笔為你收集整理的stackoverflow上一个最会举例子的专家的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用沙锅炖花生米焖猪脚的做法
- 下一篇: Jdk11,Jdk12的低延迟垃圾收集器