架構師之路--從原理角度來分析性能

  埃及豔后Cleopatra,很小的時候看過媽媽買的一本書裏把她的名字翻譯成克婁巴特拉,裏面有不少描寫她美貌的場景描寫。然而這個以美貌著稱的奇女子,我看到書裏,凱撒和安東尼真正傾心的是Cleopatra背後的埃及文明及Cleopatra的智慧。羅馬是個好戰的國家,人民沒有不少的精力去創造各類文明和手工藝品。而Cleapatra在這些大佬面前的出場,總結兩個字:「華麗」。這種華麗會讓羅馬這些篡位的暴發戶首領眼前一亮。在柏林,有全世界最好的豔后肖像。她的頭髮結的是個簡單的髮髻,風格樸實,鼻子是稍有點長的鷹鉤鼻,嘴也算不上性感,沒有耳環,沒有項鍊。並不是一個性感尤物的相貌。我能夠理解。能夠理解她坐在金碧輝煌的豪華大船的中央,穿着絢麗,體態驕傲而高貴,旁邊是面貌日常的修女來反襯她的美,那是政治。而留給後人的肖像,做爲一個女孩子更想讓人記住的,是更內在本質的東西。古代資料記載,她聰明,詼諧,精通多種語言,喜好學習和閱讀,還有驚人的毅力。後人評價說:「若是Cleopatra的鼻子再塌一點,世界的面貌將會改變。」 我想,其實智慧纔是她最難得的資產。html

 

  本文首發於靜兒1986的博客,原文地址是http://www.cnblogs.com/xiexj/p/6874654.htmljava

  部門開會討論方案。常常有一個很可愛的現象:「方案講解過程當中,會被其餘人批的體無完膚,可是最後該作的仍是會作。」事情就是這樣,批判只是爲了提醒實施過程該注意的問題,可能會有性能問題,一致性問題,併發問題,可能須要怎樣解決。可是提意見的人每每沒有決定權,由於有個真理叫作:「你試過嗎?」。然而這種討論會要先參加,提出本身的意見,而後看着過程的實施,檢驗本身的想法,是頗有利於提升的。沒有提意見的理論基礎,沒有意見可提,最終開會都不會讓你來參加的話,可能工做不少年也只是會作項目而已。不過就我本身而言,如今的問題是一切從技術角度出發,應該多從業務和數據分析的角度總體,大局的從新審視一些目前的工做。終於有藉口明天找我家微微一笑很傾城的男神老大聊聊天了。linux

  提到性能,先看看存儲數據的六個區域:sql

  1>寄存器:這是最快的存儲設備,由於它實際上在處理器內部,就是平時說的CPU。在Java內存模型中,所謂的工做內存就是將主內存的數據拷貝一些到寄存器中來提升計算速度。數據庫

  2>棧:這個存在於隨機存取存儲器區。其硬件基礎是內存條。記得我之前在人人的時候,有時候臺式機開不了機了,我有快捷解決方案:「向主機箱踢兩腳。」真的好使哦,由於開不了機是由於內存條鬆了。後來踢也很差使了,我就把機箱蓋兒打開手動把內存條緊了緊。好了,經過這個例子你們應該明白了,若是沒有內存條,是開不了機的。這個速度僅次於寄存器的設備經過寄存器中的棧指針與寄存器直接交互。其實一段程序的全部元素的生命週期都存於棧中,包括對象的引用。後端

  3>堆:一般說的內存池主要是指這部分,主要存儲Java對象。不一樣於Java棧,編譯器不須要知道堆中的東西要存儲多長時間,因此有它的靈活性。這種動態分配致使其分配和回收都須要比棧更長的時間。緩存

  4>直接內存:直接內存並非虛擬機內存的一部分,jdk1.4中引入NIO,引入了通道與緩衝區的IO方式,它能夠調用Native方法直接分配堆外內存,這個堆外內存就是本機內存,不會影響到堆內存的大小。tomcat

  5>只讀存儲器:安卓手機都用這個東西來存放應用。由於應用一經安裝,就再也不改變。像我這種作服務器端開發的,這個不詳細介紹。服務器

  6>磁盤:Java是在C++上開發的,可是有更多限制。不能像C++同樣控制堆的分配,本身在棧中給對象分配空間,更不能建議編輯器給寄存器分配空間。可是Java對磁盤的存取倒是用程序直接控制的。Java可讓對象持久化,同時這些對象也能夠恢復成一個普通的隨機存儲儲存器中的對象。Java提供了輕量級持久化的支持,而JDBC和Hibernate在數據庫中提供了更爲精細的存儲支持。微信

  7>其餘機器:Java有一種叫流對象,是將對象轉換爲比特流來傳輸到其餘設備。和持久化對象同樣,流對象也能夠恢復成普通對象。

  你們知道基本的數據類型在方法內執行的時候都是直接值拷貝到棧當中。固然它也能夠包裝成非基本類型存到堆中。方法調用時像其餘對象同樣只取它的引用。自動拆裝包嘛。其中數字的類型都是帶符號的。Java提供兩種高精度的數值類型,BigInteger和BigDecimal,它們沒有對應的基本數據類型。計算都要調用對象的方法,而不能直接使用運算符。固然這個要慢,就是所謂的用速度換精準度。我以前創業的生鮮網項目(已經創業失敗了)由於涉及不少錢的東西,大量用到這種數據類型。說到數據類型,你們都知道成員變量都會有一個默認值,而局部變量沒有。其實只要知道JVM原理就能明白:成員變量都須要在方法區中爲其預先分配空間。而局部變量只是在棧中用到,因此沒有默認值。

  說到方法區,Hotspot基本是用持久代來實現方法區,固然jdk1.8以後改爲metaspace元空間了。靜態類的成員變量和方法都是存在方法區中,而方法區是線程共享區域,因此只有一個。而普通java類是在堆中分配內存,分配是在調用new的時候完成的,一個new一個存儲空間。

  上週六原同事微信我,想讓我給他們公司作顧問,作一下團隊管理方面的建議和指導。我說那就不只僅是團隊管理的問題,還涉及到團隊建設,業務選型,架構整體設計等諸多方面,暫定下週先去他們公司作一次訪談。

  

先介紹一下原同事的公司:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
車到加油高薪急招 中高級JAVA、中級.NET、PM、高級數據分析等職位
 
公司簡介
車到( http: //www.51autogo.com/ )專一於爲油企提供加油站綜合運營解決方案,其餘核心團隊具備深厚成品油行業經驗,分別來自殼牌、BP、百度、騰訊、銷售易等跨國油企和互聯網公司。核心優點是同時擁有國內最大的線上營銷、線下運營一體化運營網絡。
經過輕資產模式,車到快速創建了全國加油站服務網絡,經過爲加油站提供品牌、系統、運營等多種服務,可幫助其快速提高銷量和利潤,短短几年內在行業內得到了領先地位。目前已與殼牌、延長、海油、中化道達爾等多家大型油企、數百家民營油企創建了深度合做關係。2016年合做油站近千座、流水金額超過36億。
 
高級JAVA
崗位職責:
一、  參與公司項目的開發,配合需求方和團隊完成項目的代碼開發以及相關文檔編寫
二、  承擔核心功能代碼編寫,重點項目的系統架構設計以及開發;
三、  深刻理解業務需求,分析和發現系統的瓶頸,推進產品性能和架構優化;
四、  技術文檔的編寫;
五、  有能力對平臺框架的性能進行優化/功能升級;
六、  新人指導、培訓以及Code Review,主導技術難題攻關,提高團隊總體技術水平;
 
任職要求:
一、  全日制本科、碩士及以上學歷,985/211院校計算機相關專業畢業,英語讀寫良好;
二、  3年及以上實際Java後端研發經驗,1年以上互聯網系統架構設計經驗;
三、  熟練掌握java及面向對象設計開發,對部分java技術有深刻研究,研究過優秀開源軟件的源碼並有心得者優先;
四、  有較強的邏輯思惟能力,善於分析、概括、解決問題, 可以獨立或帶隊進行項目開發;
五、  對主流框架有深刻理解(如Spring MVC,Spring,MyBatis等)而且熟練使用;
六、  對MQ、RPC、緩存有較爲深刻研究,理解IO、多線程等基礎框架,對JVM的原理有必定的瞭解;
七、  熟悉Mysql數據庫和優化方案、主流應用服務器tomcat,jetty等 配置與部署。
八、  瞭解linux基本命令使用。
 
高級數據分析
崗位描述:
一、對於各種營銷活動的執行、活動效果進行數據追蹤、用戶行爲分析;
二、專項就流失用戶喚醒、用戶差別化營銷等項目進行數據統計和分析;
三、可以深刻了解研究相關的數據問題和痛點,經過商業分析爲研究報告的運營決策、數據產品方向提供數據支持;
四、經過數據報告、產品和建模成果改進數據產品,推進數據驅動研究的實踐和發展。
五、對公司銷售運營數據進行分析彙總,爲公司運營提供數據支持,可以與運營和產品團隊深刻溝通,並向產品團隊提出有效需求;針對研究的新問題、新方向提出數據分析解決方案並對油站營銷方案提供有效建議;
 
崗位要求
一、4年以上相關工做經歷,統計、數學、計算機軟件、數量經濟或其餘相關國家統招重點院校本科及以上學歷;
二、瞭解Hadoop、SPSS等數據平臺技術,對企業數據架構有清晰的思路,對數據中間層設計、搭建及維護有必定的經驗;
三、熟練運用office、SQL,掌握R語言,能高效的與技術和產品團隊進行溝通;
四、良好的研究嗅覺,有良好的數據分析、挖掘和建模的經驗;

  這就是我對他們公司的全部瞭解,源於他老是找我給他公司招人。我如今對於他們究竟要作什麼線上產品,最終要達到什麼效果,人員狀況都不瞭解。下週見他們老總以前要作充分的準備。

相關文章
相關標籤/搜索