原创 Java算法-八皇后問題

       本文旨在在於記錄一個百度上看來的算法,算法讓我喫驚的地方在於將數組下標的功能發揮的淋漓盡致。八皇后問題常規算法矩陣維護法、遞歸法、迭代法、手動堆棧法四種。但是本質都是在描述同一行、同一列或同一斜線上(右上到左下,左上到右下)

原创 分佈式id生成算法-雪花算法(SnowFlake)Java實現

背景        唯一性ID在很多場景下都有重要的應用,在分佈式系統中,有一些需要使用全局唯一ID的場景而且對ID唯一性要求更爲嚴格,比如全鏈路追蹤技術,數據庫分片技術,訂單號生成系統等等都需要唯一性ID。常見的分佈式ID生成策略有U

原创 散列表、位圖、布隆過濾器

三個方案整體上都可以很好的解決數據查找問題,細節上又有些區別。   散列表:散列表着眼於精確查詢,這意味着散列表需要存儲所有數據,通過高效的hash函數精確快速定位數據。這同時也帶來了一個問題就是內存空間消耗,當面臨大量數據時會面臨硬件內

原创 Java筆試題摘錄-基礎中的基礎

1.存在使i + 1 < i的數嗎() 答案:存在 解析:如果i爲int型,那麼當i爲int能表示的最大整數時,i+1就溢出變成負數了,此時不就<i了嗎。2.存在使i > j || i <= j不成立的數嗎() 答案:存在 解析:比如Do

原创 數據庫大表調優策略總結

數據庫大表優化是我們開發中面臨的最直觀的問題,我將其分爲兩個層次,一個層次是數據庫層次的,另一個層次是服務優化層次。 簡介 數據庫層次的調優最常見的策略是分表(垂直分表),其次是sql優化,索引優化,而後是緩存。再之後是主從複製,讀寫分離

原创 數據與鏈表,指針,集合的區別

討論數據結構之間的區別,本質上是討論數據結構的構造,內存分配,增刪改查效率,應用場景這幾個層次來考慮,針對數據和鏈表的區別我們大概可以做如下的歸納。 數組:線性數據結構;連續內存空間,無法改變容量;存儲相同類型數據;支持隨機訪問(查詢),

原创 java中String類爲什麼要設計成final

這是個很有趣的問題,String設計成final類型,不能被繼承、不能被重寫,簡言之String是不可變的。問題在於爲什麼不可變呢?這主要是性能與安全性的考慮。String是JVM中使用頻率非常高的數據類型,涉及很多底層操作,因此SUN公

原创 服務限流,分流,降級,熔斷

本質都是犧牲服務可用性換取服務穩定性,進而保障服務高可用。 限流:限流用來控制請求併發量,當訪問超過一定數量後拒絕訪問。比如tomcat,線程池,netty等等均有限流機制,當請求過來後進入服務隊列,超過一定數值進入等待隊列,超過等待隊列

原创 日誌採集系統Flume和Kafka

簡介        flume是管道流方式,提供了很多的默認實現,讓用戶通過參數部署,及擴展API。屬於hadoop體系組件,主要特點是擁有豐富的agent(數據採集器)接口和底層集成了HDFS寫功能。除此之Flume對我們來說並不是什

原创 Mysql事務隔離級別實現機制

MYSQL使用MVCC機制實現事務隔離,主要是通過構建一致性視圖來實現事務可見性隔離。我常說問題解決總是伴隨這新問題的產生,看看MVCC給我們帶來了那些有趣的思考吧。 在MySQL中默認隔離級別是RR(REPEATABLE-READ),

原创 分佈式無處不在,數據庫事務弱一致性是否必然

在計算機系統中,指令是計算機運行的最小的功能單位。在一個多核計算機中,以指令爲單位,涉及兩條及以上指令的操作都將面臨事物一致性的問題。因爲兩條以上指令涉及多個CPU協作,已經不滿足事務一致性的原則了。深入計算機對機器指令的執行以計算機元器

原创 多線程鎖總覽

在談論某種技術的時候,我習慣先梳理概括這個技術解決的是什麼問題,這樣便於我們歸納總結,分類理解。關於鎖,我的理解而言,鎖解決的是多線程場景下共享資源使用的問題。明白了這個關鍵點後那麼問題就很明確了,就很利於我們對所進行理解了,整體上看分爲

原创 進程內緩存一致性

首先這個是我們不需要考慮的問題,進程內緩存應該在一個進程,一個請求結束後失效。如果需要長時間有效多個進程數據一致,可以使用redis,codis,memcached等外部緩存。 對哪些已經使用進程內緩存來實現多進程數據一致性的問題,通常有

原创 Redis緩存穿透、緩存雪崩問題

穿透雪崩主要是因爲查詢數據庫造成的,那麼讀寫分離,緩存數據查詢失敗不去查數據庫就好了。查的時候有即是有,無即是無,不會再查數據庫,緩存的穿透和雪崩問題就不存在了。其次添加數據庫和緩存同步功能,保證數據庫和緩存數據是一致的即可(需要注意的是

原创 Redis基礎介紹

簡單的說就是11225531,單進程單線程,兩種實現方式,兩種數據保存模式,五種數據結構,五種數據類型,三種特性,一個文件 單進程單線程模式避免線程上下文切換和CPU切換,免去加解鎖的麻煩。 保存數據有兩種方式:快照模式(Snapshot