學習一個東西首先要知道為什么要引入它,就是我們能用它來干什么。所以我們先來看看ThreadLocal對我們到底有什么用,然后再來看看它的實現原理。
如果并發的線程數量很多,并且每個線程都是執行一個時間很短的任務就結束了,這樣頻繁創建線程就會大大降低系統的效率,因為頻繁創建線程和銷毀線程需要時間。
一個 List 是一個元素有序的、可以重復、可以為 null的集合(有時候我們也叫它“序列”)。
知道JSON是一種語法上衍生于JS語言的一種輕量級的數據交換格式,也明白了JSON相對于一般的JS數據結構(尤其是對象)的差別,更進一步,仔細地討論了JS中關于JSON處理的3個函數和細節。
RunLoop 是 iOS 和 OS X 開發中非常基礎的一個概念,這篇文章將從 CFRunLoop 的源碼入手,介紹 RunLoop 的概念以及底層實現原理。
通過上一篇文章我們對 GraphQL 有了基礎的了解。我們知道 GraphQL 使用 Schema 來描述數據,并通過制定和實現 GraphQL 規范 定義了支持 Schema 查詢的 DSQL (Domain Specific Query Language,領域特定查詢語言)。Schema 幫助將復雜的業務模型數據抽象拆分成細粒度的基礎數據結構,而 DSQL 的實現則賦予了前端開發者自由組織和定制請求數據的能力。如果以一張圖來表示的話,可以將 GraphQL 看做一條以 通用基礎業務數據模型 為基礎、將傳統后端服務和前端頁面緊密且自由地聯系在一起的紐帶。
現在項目里面大多都已經使用了rxjava, 因此對于很多rxjava的擴展庫,也都可以使用在項目里了。 RxAndroid 已經成為標配了,基本只要使用了Rxjava, 你肯定能看見RxAndroid的身影。
今天對Java的jdk有了更加深入的理解: Java的jdk其實一共包含三部分內容: 1、工具包 2、類庫 3、JRE
Oracle10g引入了一個很重要的功能,就是可以跨越resetlogs進行數據恢復。這就需要我們比較深入的了解一個概念,incarnation。我們通過下面的幾個實驗,來說明什么是incarnation,希望能對大家有所幫助。
本文主要整理了 GCD 中常見的 API 以及底層的實現原理。對于隊列來說,需要理解它的數據結構,轉發機制,以及底層的線程池模型。
Java技術與Java虛擬機說起Java,人們首先想到的是Java編程語言,然而事實上,Java是一種技術,它由四方面組成:Java編程語言、Java類文件格式、Java虛擬機和Java應用程序接口(Java API)。它們的關系如下圖所示:圖1??Java四個方面的關系運行期環境代表著Java平臺,開發人員編寫Java代碼(.java文件),然后將之編譯成字節碼(.class文件)。最后字節碼被裝入內存,一旦字節碼進入虛擬機,它就會被解釋器解釋執行,或者是被即時代碼發生器有選擇的轉換成機器碼執行。從上圖也可以看出Java平臺由Java虛擬機和Java應用程序接口搭建,Java語言則是進入這個平臺的通道,用Java語言編寫并編譯的程序可以運行在這個平臺上。這個平臺的結構如下圖所示:在Java平臺的結構中,可以看出,Java虛擬機(JVM)處在核心的位置,是程序與底層操作系統和硬件無關的關鍵。它的下方是移植接口,移植接口由兩部分組成:適配器和Java操作系統,其中依賴于平臺的部分稱為適配器;JVM通過移植接口在具體的平臺和操作系統上實現;在JVM的上方是Java的基本類庫和擴展類庫以及它們的API,利用JavaAPI編寫的應用程序(application)和小程序(Javaapplet)可以在任何Java平臺上運行而無需考慮底層平臺,就是因為有Java虛擬機(JVM)實現了程序與操作系統的分離,從而實現了Java的平臺無關性。那么到底什么是Java虛擬機(JVM)呢?通常我們談論JVM時,我們的意思可能是:對JVM規范的的比較抽象的說明;對JVM的具體實現;在程序運行期間所生成的一個JVM實例。對JVM規范的的抽象說明是一些概念的集合,它們已經在書《TheJavaVirtualMachineSpecification》(《Java虛擬機規范》)中被詳細地描述了;對JVM的具體實現要么是軟件,要么是軟件和硬件的組合,它已經被許多生產廠商所實現,并存在于多種平臺之上;運行Java程序的任務由JVM的運行期實例單個承擔。在本文中我們所討論的Java虛擬機(JVM)主要針對第三種情況而言。它可以被看成一個想象中的機器,在實際的計算機上通過軟件模擬來實現,有自己想象中的硬件,如處理器、堆棧、寄存器等,還有自己相應的指令系統。JVM在它的生存周期中有一個明確的任務,那就是運行Java程序,因此當Java程序啟動的時候,就產生JVM的一個實例;當程序運行結束的時候,該實例也跟著消失了。下面我們從JVM的體系結構和它的運行過程這兩個方面來對它進行比較深入的研究。
JNI : Java Native Interface 即JAVA本地調用,為何需要這種技術呢
1.為什么要使用memcache 由于網站的高并發讀寫需求,傳統的關系型數據庫開始出現瓶頸,例如: 1)對數據庫的高并發讀寫: 關系型數據庫本身就是個龐然大物,處理過程非常耗時(如解析SQL語句,事務處理等)。如果對關系型數據庫進行高并發讀寫(每秒上萬次的訪問),那么它是無法承受的。
channel 是 Go 語言中的一個非常重要的特性,這篇文章來深入了解一下 channel。
深入理解JVM結構
interface 是 Golang 的一種重要的特性,但是這是以 runtime 為代價的,也就意味著性能的損失(關于 interface 的底層實現之后又時間再寫)。拋開性能不談(現實中使用 Golang 開發的程序 99% 性能都不是問題),interface 對于如何設計我們的代碼確實給了一個很好的思考。
Dennis Ritchie 過世了,他發明了C語言,一個影響深遠并徹底改變世界的計算機語言。一門經歷40多年的到今天還長盛不訓的語言,今天很多語言都受到C的影響,C++,Java,C#,Perl, PHP, Javascript, 等等。但是,你對C了解嗎?相信你看過本站的《C語言的謎題》還有《誰說C語言很簡單?》,這里,我再寫一篇關于深入理解C語言的文章,一方面是緬懷 Dennis,另一方面是告訴大家應該如何學好一門語言。
微博平臺業務經過去年三節Docker化后,已穩定運行半年多了,由于采用的都是較保守的版本,雖然也踩過很多坑,但都在可控內。最近正與RD一起推進一個大項目,前提也是平臺業務全Docker化,這部分已完成90%了。
對于 final 域,編譯器和處理器要遵守兩個重排序規則: 在構造函數內對一個 final 域的寫,與隨后把這個構造對象的引用賦值給一個變量,這兩個操作之間不能重排序 初次讀一個包含 final 域的對象的引用,與隨后初次讀這個 final 域,這兩個操作之間不能重排序
當我們聲明共享變量為volatile后,對這個變量的讀/寫將會很特別。理解volatile特性的一個好方法是:把對volatile變量的單個讀/寫,看成是使用同一個監視器鎖對這些單個讀/寫操作做了同步。