隨筆 - 12, 文章 - 0, 評論 - 22, 引用 - 0
          數據加載中……

          2016年2月14日

          遲來的年終總結(2014-2015)

              正好2016年的春假結束了,趁這個時間總結一下前面兩年的工作情況。
              2014年之前一直做的是java后臺開發,工作的內容整體感覺是不難的,平常也都有自我學習源碼、框架之類的。2014-2015年這兩年跟隨移動互聯網的潮流,轉作了android開發,負責android團隊。在一家公司一直做后臺近3年,也的確對相同的業務沒什么激情了,工作性質的轉變還挺不錯。回首這兩年時間,心情到是有些復雜。
              2014年初剛轉到android組的時候,對于android的了解是零;另外也是頭一次管理團隊,心里也是有些忐忑。進入android團隊沒2個月,恰逢android版本的整體升級(參考別組的產品代碼來改造升級),我自己攔了一部分核心業務來做。最初的想法是籍著這個升級的項目來了解andorid代碼,順便熟悉業務,之后就是暗無天日2個多月的忙碌。最后產品是出來了,但是發現對于android知識和業務的了解的還是不夠,之間還一度感覺精神都抑郁了,想想也是夠嗆的。這兩個月之前也算是對產品代碼有了一定了解,另外對于團隊間的運作和管理也有了一定的熟悉,磕磕碰碰的度過了最艱難的時期。這2個月的時間對我說,算是這兩年中工作上最重要的一個時期。回過頭來看,其實這兩個月自己時間的安排不太合理,每天小組的瑣事挺多,分去了我一半精力,另一半又趕產品升級的事;的確是有點顧此失彼。當時可能還是選擇一些小模塊來熟悉代碼,會比較合理。
              度過了最難的2個月后,工作和小組管理也步上正規。我們部門是b2b,公司內部的資源和分散,經常一個模塊的功能,需要3,4個小組一起來處理。又經過好長時間,熟悉流程,并跟其他小組人來完善流程,也逐步融入團隊,適應andorid小組的節奏。這個事在2015年還在不斷的進行中。2014年中還是出過幾件有意思的事,小組成員離職、與其他組人員溝通出問題遭投訴,android人員招聘等等,細節就不一一道來了。
              2015年感覺相對2014年是平穩很多,畢竟適應了1年的小組節奏了。2015年工作主要在于項目管理和小組的管理上。每周組織小組成員的知識培訓,制定代碼規范,優化外部流程等等。這一年的出差倒是需要提一下,有過幾次銷售讓出差說是給客戶技術解答,最后發現一句話都不用說;后面出差的時候我都會再三確認出差的具體事由。總體來說去外面出差還是挺不錯的,跟客戶了解項目需求、技術解答等也是挺有意思、挺鍛煉人的,如有時間多,還可以順便在當地玩玩。
              兩年下來,可惜的是對于android的了解,只是個皮毛。2014兼顧開發和管理,對于andorid技術的專研不深也就算了;2015年其實有很多時間可以加深android的了解,可惜由于種種原因都沒能花時間進去。這兩年的收獲也是不小,由一個純粹的開發,到項目管理、團隊管理的職責轉變,也使自己的眼界開闊了不少;對于熱門的移動行業也有一定的了解;andorid小組最初由7個人,一度達到15個人,跟隨著小組一起成長。2016年工作又是有變動,重新回到后臺開發,之后可能出差會多些,還要學學技術包裝,哎感覺跟技術這條路背道而馳了。2016年已經起航,祝福自己順利吧!
              

          posted @ 2016-02-14 00:28 heavensay 閱讀(264) | 評論 (0)編輯 收藏

          2013年10月29日

          jQuery分析紀要

                 本文是對jQuery源碼分析的簡單紀要。

          jQuery相關對象內存圖



              jQuery代碼分析紀要:
                  1、 jQuery一加載進來,就執行匿名函數,進行jQuery的初始化工作,定義jQuery的功能,最后暴露出jQuery和$變量給用戶使用。
          (function( window, undefined ) {

          window.jQuery = window.$ = jQuery
          })( window );

                  2、 jQuery功能擴展函數Extend
          jQuery.extend = jQuery.fn.extend = function() {
              
          }
                  jQuery提供了2個供用戶擴展的函數jQuery.extend和jQuery.fn.extend。
                  jQuery.extend 用于擴展jQuery自身方法,如jQuery.ajax, jQuery.getJSON等,jQuery.fn.extend則是用于擴展jQuery(...)的方法,從上面的內存圖中可以看出,經過jQuery包裝后的dom元素,在其原型鏈上會擁有jQuery.fn.extend擴展的方法。

                  3、 jQuery函數,就是我們平常$('#id')所執行的函數,返回包裝過的dom元素
             // Define a local copy of jQuery
              jQuery = function( selector, context ) {
                  // The jQuery object is actually just the init constructor 'enhanced'
                  return new jQuery.fn.init( selector, context, rootjQuery );
              },

          posted @ 2013-10-29 20:18 heavensay 閱讀(395) | 評論 (0)編輯 收藏

          2013年10月28日

          Spring加載資源分析

               摘要: 這篇文檔是對Spring加載和解析xml文件過程的分析  閱讀全文

          posted @ 2013-10-28 00:12 heavensay 閱讀(11409) | 評論 (2)編輯 收藏

          2013年10月20日

          Js中Prototype、__proto__、Constructor、Object、Function關系介紹

          一    Prototype、__proto__與Object、Function關系介紹

                  Function、Object:Js自帶的函數對象。
                  prototype,每一個函數對象都有一個顯示的prototype屬性,它代表了對象的原型(Function.prototype函數對象是個例外,沒有prototype屬性)。
                  __proto__:每個對象都有一個名為__proto__的內部隱藏屬性,指向于它所對應的原型對象(chrome、firefox中名稱為__proto__,并且可以被訪問到)。原型鏈正是基于__proto__才得以形成(note:不是基于函數對象的屬性prototype)。
                 關于上面提到的函數對象,我們來看以下例子,來說明:
                  var o1 = {};
                  var o2 =new Object();
                  
                  function f1(){}
                  var f2 = function(){}
                  var f3 = new Function('str','console.log(str)');
              
                  f3('aabb');   // aabb
                  console.log('typeof Object:'+typeof Object);            //function
                  console.log('typeof Function:'+typeof Function);        //function
                  console.log('typeof o1:'+typeof o1);   //object
                  console.log('typeof o2:'+typeof o2);   //object
                  console.log('typeof f1:'+typeof f1);   //function
                  console.log('typeof f2:'+typeof f2);   //function
                  console.log('typeof f3:'+typeof f3);   //function
          • 通常我們認為o1、o2是對象,即普通對象;f1、f2、f3為函數。
          • 但是其實函數也是對象,是由Function構造的,
          • f3這種寫法就跟對象的創建的寫法一樣。f1、f2最終也都像f3一樣是有Function這個函數構造出來的
          • f1、f2、f3為函數對象,Function跟Object本身也是函數對象。
                 Js中每個對象(null除外)都和另一個對象相關聯,通過以下例子跟內存效果圖來分析Function、Object、Prototype、__proto__對象間的關系。

              function Animal(){
                  
              }
              var  anim = new Animal();
              
              console.log('***********Animal anim proto*****************');
              console.log('typeof Animal.prototype:' +typeof Animal.prototype);  //object 
              console.log('anim.__proto__===Animal.prototype:'+(anim.__proto__===Animal.prototype));  //true
              console.log('Animal.__proto__===Function.prototype:'+(Animal.__proto__===Function.prototype));  //true
              console.log('Animal.prototype.__proto__===Object.prototype:'+(Animal.prototype.__proto__===Object.prototype));  //true
              
              console.log('***********Function proto*****************');
              console.log('typeof Function.prototype:'+typeof Function.prototype);  //function
              console.log('typeof Function.__proto__:'+typeof Function.__proto__);  //function
              console.log('typeof Function.prototype.prototype:'+typeof Function.prototype.prototype); //undefined
              console.log('typeof Function.prototype.__proto__:'+typeof Function.prototype.__proto__);   //object
              console.log('Function.prototype===Function.__proto__:'+(Function.prototype===Function.__proto__)); //true

              console.log('***********Object proto*****************');
              console.log('typeof Object.prototype:'+typeof Object.prototype);  //object
              console.log('typeof Object.__proto__:'+typeof Object.__proto__);  //function
              console.log('Object.prototype.prototype:'+Object.prototype.prototype);  //undefied
              console.log('Object.prototype.__proto__===null:'+(Object.prototype.__proto__===null));  //null

              console.log('***********Function Object  proto關系*****************');
              console.log('Function.prototype===Object.__proto__:'+(Function.prototype===Object.__proto__));   //true
              console.log('Function.__proto__===Object.__proto__:'+(Function.__proto__===Object.__proto__));   //true
              console.log('Function.prototype.__proto__===Object.prototype:'+(Function.prototype.__proto__===Object.prototype));   //true

              /********************* 系統定義的對象Array、Date ****************************/
              console.log('**************test Array、Date****************');      
              var array = new Array();
              var date = new Date();
              console.log('array.__proto__===Array.prototype:'+(array.__proto__===Array.prototype));   //true
              console.log('Array.__proto__===Function.prototype:'+(Array.__proto__===Function.prototype));  //true
              console.log('date.__proto__===Date.prototype:'+(date.__proto__===Date.prototype));    //true
              console.log('Date.__proto__===Function.prototype:'+(Date.__proto__===Function.prototype));     //true

          Function、Object、Prototype、__proto__內存關系圖


                  上面的內存圖跟堆棧結構可以參照文章Javascript_01_理解內存分配
                  堆區圖說明:
           
                  Function.prototype函數對象圖內部表示prototype屬性的紅色虛框,只是為了說明這個屬性不存在。

                  通過上圖Function、Object、Prototype關系圖中,可以得出一下幾點:
          1. 所有對象所有對象,包括函數對象的原型鏈最終都指向了Object.prototype,而Object.prototype.__proto__===null,原型鏈至此結束。
          2. Animal.prototype是一個普通對象。
          3. Object是一個函數對象,也是Function構造的,Object.prototype是一個普通對象。
          4. Object.prototype.__type__指向null。
          5. Function.prototype是一個函數對象,前面說函數對象都有一個顯示的prototype屬性,但是Function.prototype卻沒有prototype屬性,即Function.prototype.prototype===undefined,所有Function.prototype函數對象是一個特例,沒有prototype屬性。
          6. Object雖是Function構造的一個函數對象,但是Object.prototype沒有指向Function.prototype,即Object.prototype!==Function.prototype。

          二    Prototype跟Constructor關系
          介紹
                   在 JavaScript 中,每個函數對象都有名為“prototype”的屬性(上面提到過Function.prototype函數對象是個例外,沒有prototype屬性),用于引用原型對象。此原型對象又有名為“constructor”的屬性,它反過來引用函數本身。這是一種循環引用(i.e. Animal.prototype.constructor===Animal)。
                  通過以下例子跟內存效果圖來分析Prototype、constructor間的關系。
              console.log('**************constructor****************'); 

              console.log('anim.constructor===Animal:'+(anim.constructor===Animal))    ;    //true
              console.log('Animal===Animal.prototype.constructor:'+(Animal===Animal.prototype.constructor))    ;    //true
              console.log('Animal.constructor===Function.prototype.constructor:'+(Animal.constructor===Function.prototype.constructor));   //true
              console.log('Function.prototype.constructor===Function:'+(Function.prototype.constructor===Function));    //true
              console.log('Function.constructor===Function.prototype.constructor:'+(Function.constructor===Function.prototype.constructor));    //true

              console.log('Object.prototype.constructor===Object:'+(Object.prototype.constructor===Object));    //true
              console.log('Object.constructor====Function:'+(Object.constructor===Function));    //true

           prototype、constructor內存關系圖(在Function、Object、Prototype關系圖上加入constructor元素):


                  上圖中,紅色箭頭表示函數對象的原型的constructor所指向的對象。
          1. 注意Object.constructor===Function;本身Object就是Function函數構造出來的        
          2. 如何查找一個對象的constructor,就是在該對象的原型鏈上尋找碰到的第一個constructor屬性所指向的對象。
          參考:
          http://www.libuchao.com/2012/05/14/prototypes-in-javascript/ (JavaScript 的原型對象 Prototype)
          http://rockyuse.iteye.com/blog/1426510 (理解js中的原型鏈,prototype與__proto__的關系)



          posted @ 2013-10-20 23:47 heavensay 閱讀(32438) | 評論 (13)編輯 收藏

          2012年11月27日

          JMX分析3-MXBean及OpenMBean

               摘要:        MXBean跟標準MBean很像,標準MBean需要實現XXXXMBean這樣命名的接口,而MXBean則需要實現XXXXMXBean這樣命名的接口,也可以在接口上使用注解@MXBean,而不用強制使用XXXMXBean這樣的命名格式。但是MXBean有點在于它可以供任何的client,包括remote client訪問相關屬性和執行相關操作。...  閱讀全文

          posted @ 2012-11-27 00:39 heavensay 閱讀(3780) | 評論 (0)編輯 收藏

          2012年11月7日

          class卸載、熱替換和Tomcat的熱部署的分析

               摘要:      這篇文章主要是分析Tomcat中關于熱部署和JSP更新替換的原理,在此之前先介紹class的熱替換和class的卸載的原理。一 class的熱替換 ClassLoader中重要的方法 loadClass       ClassLoader.loadClass(...) 是ClassLoader的入口點。當一個類沒有指明用...  閱讀全文

          posted @ 2012-11-07 22:29 heavensay 閱讀(22679) | 評論 (7)編輯 收藏

          2012年10月17日

          JMX分析2-Monitor

               摘要: JMX Monitor主要用于監控MBeanServer注冊的MBeans屬性值得變化,在屬性的值達到閾值的時候發送消息。 JMX agent需要實現Monitor功能。  閱讀全文

          posted @ 2012-10-17 00:04 heavensay 閱讀(937) | 評論 (0)編輯 收藏

          2012年9月24日

          JMX分析1-MBean的實現

               摘要:       本文只是JDK7中JMX在本地,MBeanServer管理MBeans的默認實現的探索學習,沒有涉及JMX Remote。      JMX 使用了 Java Bean 模式來傳遞信息。一般說來,JMX 使用有名的 MBean,其內部包含了數據信息,這些信息可能是:應用程序配置信息、模塊信息、系統信息、統計信息等。另外,MBe...  閱讀全文

          posted @ 2012-09-24 08:33 heavensay 閱讀(6984) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 静乐县| 蓬莱市| 伊宁市| 绥阳县| 襄樊市| 德令哈市| 华池县| 瑞昌市| 西充县| 莲花县| 湖北省| 郁南县| 九寨沟县| 青河县| 建昌县| 平邑县| 安化县| 平顶山市| 濉溪县| 黔江区| 儋州市| 老河口市| 青州市| 荆州市| 龙州县| 竹山县| 奉贤区| 台东市| 营山县| 瑞金市| 中西区| 始兴县| 普陀区| 巴南区| 敖汉旗| 方城县| 白城市| 资溪县| 潼南县| 习水县| 洛浦县|