<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    2012年9月24日

    遲來的年終總結(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 閱讀(265) | 評論 (0)編輯 收藏

    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)編輯 收藏

    Spring加載資源分析

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

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

    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 閱讀(32440) | 評論 (13)編輯 收藏

    JMX分析3-MXBean及OpenMBean

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

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

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

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

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

    JMX分析2-Monitor

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

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

    JMX分析1-MBean的實現

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

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

    主站蜘蛛池模板: 亚洲欧洲久久av| 国产成人无码a区在线观看视频免费| 中文字幕亚洲乱码熟女一区二区 | 黄色短视频免费看| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 久久精品亚洲综合一品| 13小箩利洗澡无码视频网站免费| 国产一区二区视频免费| 亚洲AV无码XXX麻豆艾秋| 国产成人免费A在线视频| 青青青视频免费观看| 亚洲国产精品综合久久网络 | 亚洲片一区二区三区| 成人免费ā片在线观看| 亚洲国产精华液网站w| 日本一道本不卡免费| 亚洲国产午夜精品理论片| 成人性生交大片免费看无遮挡| 久久亚洲精品国产精品婷婷| 日韩免费无砖专区2020狼| 免费看内射乌克兰女| 国产亚洲精品a在线无码| 日韩中文字幕免费视频| 亚洲第一男人天堂| 丁香亚洲综合五月天婷婷| 二个人看的www免费视频| 久久精品亚洲精品国产色婷| 免费无码又黄又爽又刺激| 黄色a级免费网站| 亚洲va中文字幕无码久久不卡| 18国产精品白浆在线观看免费 | 一级a性色生活片久久无少妇一级婬片免费放 | 日本XXX黄区免费看| 久久精品国产亚洲精品2020| 精品免费人成视频app| 亚洲av永久无码精品网址| 国产亚洲色婷婷久久99精品91| 最近免费字幕中文大全视频| 亚洲精品成a人在线观看夫| 亚洲综合另类小说色区| 中文免费观看视频网站|