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

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

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

    隨筆-88  評(píng)論-77  文章-48  trackbacks-0
      2006年7月5日

    發(fā)布21個(gè)已知被微軟黑屏的序列號(hào)提醒相關(guān)用戶不要冒險(xiǎn)去驗(yàn)證升級(jí)

    發(fā)布21個(gè)已知被微軟黑屏的序列號(hào),提醒使用該序列號(hào)的用戶就不要冒險(xiǎn)去驗(yàn)證升級(jí)了。

    已知被黑屏的序列號(hào)(這21個(gè)序列號(hào)是我今天一個(gè)個(gè)通過驗(yàn)證測試出來的結(jié)果):

    XP8BF-F8HPF-PY6BX-K24PJ-TWT6M 

    F4297-RCWJP-P482C-YY23Y-XH8W3

    HH7VV-6P3G9-82TWK-QKJJ3-MXR96

    HCQ9D-TVCWX-X9QRG-J4B2Y-GR2TT

    MRX3F-47B9T-2487J-KWKMF-RPWBY

    T72KM-6GWBP-GX7TD-CXFT2-7WT2B

    QHYXK-JCJRX-XXY8Y-2KX2X-CCXGD

    DG8FV-B9TKY-FRT9J-6CRCC-XPQ4G

    MFBF7-2CK8B-93MDB-8MR7T-4QRCQ

    MRX3F-47B9T-2487J-KWKMF-RPWBY

    DFXFM-DKWTG-MYDWJ-68DQF-YBCYG

    TB7JC-3VJKY-J3VMR-PP8TP-HMTWY

    KR88V-RCBCB-D78QP-V4FF9-JW77M

    HWCTG-CQPWK-D22DQ-JD7TQ-GXVW8

    Q7TG8-MQ3BK-RHXQC-YDXJD-6Q6M3

    BP6XM-YXMKY-V4Q74-KJP8X-VW3CQ

    BFBPF-TF64Y-BT8T9-DQJFY-3TH7W

    GQ9CX-QDFPR-XFRMF-T3M94-2JG9Y

    XPF44-PDM32-XT4B8-R8W8C-CPP6T

    RC7QJ-KX66J-V4R9W-32HC4-CJH2B

    DDQXW-THQ8M-79V6K-2YFGH-R793Q

    注:但有網(wǎng)友反映MRX3F-47B9T-2487J-KWKMF-RPWBY這個(gè)序列號(hào)有些地方能通過正版驗(yàn)證,有些地方不能通過正版驗(yàn)證,看來微軟這次驗(yàn)證還分蠻細(xì)的,并可以按地區(qū)來判斷序列號(hào)是否為盜版和正版呀。
    posted @ 2008-10-26 00:40 崛起的程序員 閱讀(375) | 評(píng)論 (0)編輯 收藏

    AJAX 流行之后,總想好好學(xué)習(xí)一下。但是眾多的框架實(shí)在難以選擇。說明一下 ASP.NET AJAX 并不包括在 AJAX 框架之中。
    剛開始學(xué)了 JQuqery, 眾多的 $get(),...等等符號(hào)早已把我搞暈了。暫時(shí)就放棄了。
    后來學(xué)習(xí) ASP.NET AJAX ,在微軟的領(lǐng)導(dǎo)下,逐漸由服務(wù)器端轉(zhuǎn)向客戶端編程。 激起我客戶端編程的興趣,
    才想起學(xué)習(xí)一下了 Jquery.
          隨著WEB2.0及ajax思想在互聯(lián)網(wǎng)上的快速發(fā)展傳播,陸續(xù)出現(xiàn)了一些優(yōu)秀的Js框架,其中比較著名的有Prototype、YUI、jQuery、mootools、Bindows以及國內(nèi)的JSVM框架等,通過將這些JS框架應(yīng)用到我們的項(xiàng)目中能夠使程序員從設(shè)計(jì)和書寫繁雜的JS應(yīng)用中解脫出來,將關(guān)注點(diǎn)轉(zhuǎn)向功能需求而非實(shí)現(xiàn)細(xì)節(jié)上,從而提高項(xiàng)目的開發(fā)速度。
          jQuery是繼prototype之后的又一個(gè)優(yōu)秀的Javascript框架。它是由 John Resig 于 2006 年初創(chuàng)建的,它有助于簡化 JavaScript™ 以及Ajax 編程。有人使用這樣的一比喻來比較prototype和jQuery:prototype就像Java,而jQuery就像ruby. 它是一個(gè)簡潔快速靈活的JavaScript框架,它能讓你在你的網(wǎng)頁上簡單的操作文檔、處理事件、實(shí)現(xiàn)特效并為Web頁面添加Ajax交互。

    它具有如下一些特點(diǎn):
    1、代碼簡練、語義易懂、學(xué)習(xí)快速、文檔豐富。
    2、jQuery是一個(gè)輕量級(jí)的腳本,其代碼非常小巧,最新版的JavaScript包只有20K左右。
    3、jQuery支持CSS1-CSS3,以及基本的xPath。
    4、jQuery是跨瀏覽器的,它支持的瀏覽器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。
    5、可以很容易的為jQuery擴(kuò)展其他功能。
    6、能將JS代碼和HTML代碼完全分離,便于代碼和維護(hù)和修改。
    7、插件豐富,除了jQuery本身帶有的一些特效外,可以通過插件實(shí)現(xiàn)更多功能,如表單驗(yàn)證、tab導(dǎo)航、拖放效果、表格排序、DataGrid,樹形菜單、圖像特效以及ajax上傳等。

    jQuery的設(shè)計(jì)會(huì)改變你寫JavaScript代碼的方式,降低你學(xué)習(xí)使用JS操作網(wǎng)頁的復(fù)雜度,提高網(wǎng)頁JS開發(fā)效率,無論對(duì)于js初學(xué)者還是資深專家,jQuery都將是您的首選。
    jQuery適合于設(shè)計(jì)師、開發(fā)者以及那些還好者,同樣適合用于商業(yè)開發(fā),可以說jQuery適合任何JavaScript應(yīng)用的地方,可用于不同的Web應(yīng)用程序中。
    官方站點(diǎn):http://jquery.com/  中文站點(diǎn):http://jquery.org.cn/

    1.2、目的
    通過學(xué)習(xí)本文檔,能夠?qū)Query有一個(gè)簡單的認(rèn)識(shí)了解,清楚JQuery與其他JS框架的不同,掌握jQuery的常用語法、使用技巧及注意事項(xiàng)。

    二、使用方法
    在需要使用JQuery的頁面中引入JQuery的js文件即可。
    例如:<script type="text/javascript" src="js/jquery.js"></script>
    引入之后便可在頁面的任意地方使用jQuery提供的語法。

    三、學(xué)習(xí)教程及參考資料
    請(qǐng)參照《jQuery中文API手冊(cè)》和http://jquery.org.cn/visual/cn/index.xml
    推薦兩篇不錯(cuò)的jquery教程:《jQuery的起點(diǎn)教程》和《使用 jQuery 簡化 Ajax 開發(fā)》


    四、語法總結(jié)和注意事項(xiàng)

    1、關(guān)于頁面元素的引用
    通過jquery的$()引用元素包括通過id、class、元素名以及元素的層級(jí)關(guān)系及dom或者xpath條件等方法,且返回的對(duì)象為jquery對(duì)象(集合對(duì)象),不能直接調(diào)用dom定義的方法。

    2、jQuery對(duì)象與dom對(duì)象的轉(zhuǎn)換
    只有jquery對(duì)象才能使用jquery定義的方法。注意dom對(duì)象和jquery對(duì)象是有區(qū)別的,調(diào)用方法時(shí)要注意操作的是dom對(duì)象還是jquery對(duì)象。
    普通的dom對(duì)象一般可以通過$()轉(zhuǎn)換成jquery對(duì)象。
    如:$(document.getElementById("msg"))則為jquery對(duì)象,可以使用jquery的方法。
    由于jquery對(duì)象本身是一個(gè)集合。所以如果jquery對(duì)象要轉(zhuǎn)換為dom對(duì)象則必須取出其中的某一項(xiàng),一般可通過索引取出。
    如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]這些都是dom對(duì)象,可以使用dom中的方法,但不能再使用Jquery的方法。
    以下幾種寫法都是正確的:
    $("#msg").html();
    $("#msg")[0].innerHTML;
    $("#msg").eq(0)[0].innerHTML;
    $("#msg").get(0).innerHTML;

    3、如何獲取jQuery集合的某一項(xiàng)
    對(duì)于獲取的元素集合,獲取其中的某一項(xiàng)(通過索引指定)可以使用eqget(n)方法或者索引號(hào)獲取,要注意,eq返回的是jquery對(duì)象,而get(n)和索引返回的是dom元素對(duì)象。對(duì)于jquery對(duì)象只能使用jquery的方法,而dom對(duì)象只能使用dom的方法,如要獲取第三個(gè)<div>元素的內(nèi)容。有如下兩種方法:
    $("div").eq(2).html();    //調(diào)用jquery對(duì)象的方法
    $("div").get(2).innerHTML;  //調(diào)用dom的方法屬性

    4、同一函數(shù)實(shí)現(xiàn)set和get
    Jquery中的很多方法都是如此,主要包括如下幾個(gè):
    $("#msg").html();    //返回id為msg的元素節(jié)點(diǎn)的html內(nèi)容。
    $("#msg").html("<b>new content</b>");  
    //將“<b>new content</b>” 作為html串寫入id為msg的元素節(jié)點(diǎn)內(nèi)容中,頁面顯示粗體的new content

    $("#msg").text();    //返回id為msg的元素節(jié)點(diǎn)的文本內(nèi)容。
    $("#msg").text("<b>new content</b>");  
    //將“<b>new content</b>” 作為普通文本串寫入id為msg的元素節(jié)點(diǎn)內(nèi)容中,頁面顯示<b>new content</b>

    $("#msg").height();    //返回id為msg的元素的高度
    $("#msg").height("300");  //將id為msg的元素的高度設(shè)為300
    $("#msg").width();    //返回id為msg的元素的寬度
    $("#msg").width("300");  //將id為msg的元素的寬度設(shè)為300

    $("input").val(");  //返回表單輸入框的value值
    $("input").val("test");  //將表單輸入框的value值設(shè)為test

    $("#msg").click();  //觸發(fā)id為msg的元素的單擊事件
    $("#msg").click(fn);  //為id為msg的元素單擊事件添加函數(shù)
    同樣blur,focus,select,submit事件都可以有著兩種調(diào)用方法

    5、集合處理功能
    對(duì)于jquery返回的集合內(nèi)容無需我們自己循環(huán)遍歷并對(duì)每個(gè)對(duì)象分別做處理,jquery已經(jīng)為我們提供的很方便的方法進(jìn)行集合的處理。
    包括兩種形式:
    $("p").each(function(i){this.style.color=['#f00','#0f0','#00f'][i]})  
    //為索引分別為0,1,2的p元素分別設(shè)定不同的字體顏色。

    $("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})  
    //實(shí)現(xiàn)表格的隔行換色效果

    $("p").click(function(){alert($(this).html())})    
    //為每個(gè)p元素增加了click事件,單擊某個(gè)p元素則彈出其內(nèi)容

    6、擴(kuò)展我們需要的功能
    $.extend({
      min: function(a, b){return a < b?a:b; },
      max: function(a, b){return a > b?a:b; }
    });  //為jquery擴(kuò)展了min,max兩個(gè)方法
    使用擴(kuò)展的方法(通過“$.方法名”調(diào)用):
    alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));

    7、支持方法的連寫
    所謂連寫,即可以對(duì)一個(gè)jquery對(duì)象連續(xù)調(diào)用各種不同的方法。
    例如:
    $("p").click(function(){alert($(this).html())})
    .mouseover(function(){alert('mouse over event')})
    .each(function(i){this.style.color=['#f00','#0f0','#00f'][i]});

    8、操作元素的樣式
    主要包括以下幾種方式:
    $("#msg").css("background");    //返回元素的背景顏色
    $("#msg").css("background","#ccc")  //設(shè)定元素背景為灰色
    $("#msg").height(300); $("#msg").width("200");  //設(shè)定寬高
    $("#msg").css({ color: "red", background: "blue" });//以名值對(duì)的形式設(shè)定樣式
    $("#msg").addClass("select");  //為元素增加名稱為select的class
    $("#msg").removeClass("select");  //刪除元素名稱為select的class
    $("#msg").toggleClass("select");  //如果存在(不存在)就刪除(添加)名稱為select的class

    9、完善的事件處理功能
    Jquery已經(jīng)為我們提供了各種事件處理方法,我們無需在html元素上直接寫事件,而可以直接為通過jquery獲取的對(duì)象添加事件。
    如:
    $("#msg").click(function(){alert("good")})  //為元素添加了單擊事件
    $("p").click(function(i){this.style.color=['#f00','#0f0','#00f'][i]})
    //為三個(gè)不同的p元素單擊事件分別設(shè)定不同的處理
    jQuery中幾個(gè)自定義的事件:
    (1)hover(fn1,fn2):一個(gè)模仿懸停事件(鼠標(biāo)移動(dòng)到一個(gè)對(duì)象上面及移出這個(gè)對(duì)象)的方法。當(dāng)鼠標(biāo)移動(dòng)到一個(gè)匹配的元素上面時(shí),會(huì)觸發(fā)指定的第一個(gè)函數(shù)。當(dāng)鼠標(biāo)移出這個(gè)元素時(shí),會(huì)觸發(fā)指定的第二個(gè)函數(shù)。
    //當(dāng)鼠標(biāo)放在表格的某行上時(shí)將class置為over,離開時(shí)置為out。
    $("tr").hover(function(){
    $(this).addClass("over");
    },
      function(){
       $(this).addClass("out");
    });
    (2)ready(fn):當(dāng)DOM載入就緒可以查詢及操縱時(shí)綁定一個(gè)要執(zhí)行的函數(shù)。
    $(document).ready(function(){alert("Load Success")})
    //頁面加載完畢提示“Load Success”,相當(dāng)于onload事件。與$(fn)等價(jià)
    (3)toggle(evenFn,oddFn): 每次點(diǎn)擊時(shí)切換要調(diào)用的函數(shù)。如果點(diǎn)擊了一個(gè)匹配的元素,則觸發(fā)指定的第一個(gè)函數(shù),當(dāng)再次點(diǎn)擊同一元素時(shí),則觸發(fā)指定的第二個(gè)函數(shù)。隨后的每次點(diǎn)擊都重復(fù)對(duì)這兩個(gè)函數(shù)的輪番調(diào)用。
      //每次點(diǎn)擊時(shí)輪換添加和刪除名為selected的class。
      $("p").toggle(function(){
        $(this).addClass("selected");  
      },function(){
         $(this).removeClass("selected");
      });
    (4)trigger(eventtype): 在每一個(gè)匹配的元素上觸發(fā)某類事件。
    例如:
      $("p").trigger("click");    //觸發(fā)所有p元素的click事件
    (5)bind(eventtype,fn),unbind(eventtype): 事件的綁定與反綁定
    從每一個(gè)匹配的元素中(添加)刪除綁定的事件。
    例如:
    $("p").bind("click", function(){alert($(this).text());});  //為每個(gè)p元素添加單擊事件
    $("p").unbind();  //刪除所有p元素上的所有事件
    $("p").unbind("click")  //刪除所有p元素上的單擊事件

    10、幾個(gè)實(shí)用特效功能
    其中toggle()和slidetoggle()方法提供了狀態(tài)切換功能。
    如toggle()方法包括了hide()和show()方法。
    slideToggle()方法包括了slideDown()和slideUp方法。

    11、幾個(gè)有用的jQuery方法
    $.browser.瀏覽器類型:檢測瀏覽器類型。有效參數(shù):safari, opera, msie, mozilla。如檢測是否ie:$.browser.isie,是ie瀏覽器則返回true。
    $.each(obj, fn):通用的迭代函數(shù)。可用于近似地迭代對(duì)象和數(shù)組(代替循環(huán))。

    $.each( [0,1,2], function(i, n){ alert( "Item #" + i + ": " + n ); });
    等價(jià)于:
    var tempArr=[0,1,2];
    for(var i=0;i<tempArr.length;i++){
      alert("Item #"+i+": "+tempArr[i]);
    }
    也可以處理json數(shù)據(jù),如
    $.each( { name: "John", lang: "JS" }, function(i, n){ alert( "Name: " + i + ", Value: " + n ); });
    結(jié)果為:
    Name:name, Value:John
    Name:lang, Value:JS
    $.extend(target,prop1,propN):用一個(gè)或多個(gè)其他對(duì)象來擴(kuò)展一個(gè)對(duì)象,返回這個(gè)被擴(kuò)展的對(duì)象。這是jquery實(shí)現(xiàn)的繼承方式。
    如:
    $.extend(settings, options);  
    //合并settings和options,并將合并結(jié)果返回settings中,相當(dāng)于options繼承setting并將繼承結(jié)果保存在setting中。
    var settings = $.extend({}, defaults, options);
    //合并defaults和options,并將合并結(jié)果返回到setting中而不覆蓋default內(nèi)容。
    可以有多個(gè)參數(shù)(合并多項(xiàng)并返回)
    $.map(array, fn):數(shù)組映射。把一個(gè)數(shù)組中的項(xiàng)目(處理轉(zhuǎn)換后)保存到到另一個(gè)新數(shù)組中,并返回生成的新數(shù)組。
    如:
    var tempArr=$.map( [0,1,2], function(i){ return i + 4; });
    tempArr內(nèi)容為:[4,5,6]
    var tempArr=$.map( [0,1,2], function(i){ return i > 0 ? i + 1 : null; });
    tempArr內(nèi)容為:[2,3]
    $.merge(arr1,arr2):合并兩個(gè)數(shù)組并刪除其中重復(fù)的項(xiàng)目。
    如:$.merge( [0,1,2], [2,3,4] )  //返回[0,1,2,3,4]
    $.trim(str):刪除字符串兩端的空白字符。
    如:$.trim("  hello, how are you?   ");   //返回"hello,how are you? "

    12、解決自定義方法或其他類庫與jQuery的沖突
    很多時(shí)候我們自己定義了$(id)方法來獲取一個(gè)元素,或者其他的一些js類庫如prototype也都定義了$方法,如果同時(shí)把這些內(nèi)容放在一起就會(huì)引起變量方法定義沖突,Jquery對(duì)此專門提供了方法用于解決此問題。
    使用jquery中的jQuery.noConflict();方法即可把變量$的控制權(quán)讓渡給第一個(gè)實(shí)現(xiàn)它的那個(gè)庫或之前自定義的$方法。之后應(yīng)用Jquery的時(shí)候只要將所有的$換成jQuery即可,如原來引用對(duì)象方法$("#msg")改為jQuery("#msg")。
    如:
    jQuery.noConflict();
    // 開始使用jQuery
    jQuery("div   p").hide();
    // 使用其他庫的 $()
    $("content").style.display = 'none';

    posted @ 2008-09-21 21:24 崛起的程序員 閱讀(314) | 評(píng)論 (0)編輯 收藏
    1377-4167-5844-4698-0048-5821
    posted @ 2008-03-02 19:35 崛起的程序員 閱讀(336) | 評(píng)論 (0)編輯 收藏

    Flex License:
    1307-1581-4356-2616-4951-7949 (Commercial Version)
    1307-1581-4356-2939-1231-4484 (Education Version)

    Charting License:

    1301-4581-4356-7349-9369-3351 (Commercial Version)

    posted @ 2008-02-24 21:43 崛起的程序員 閱讀(404) | 評(píng)論 (0)編輯 收藏

    Today we shipped Visual Studio 2008 and .NET 3.5.  You can download the final release using one of the links below:

    • If you are a MSDN subscriber, you can download your copy from the MSDN subscription site (note: some of the builds are just finishing being uploaded now - so check back later during the day if you don't see it yet).

    • If you are a non-MSDN subscriber, you can download a 90-day free trial edition of Visual Studio 2008 Team Suite here.  A 90-day trial edition of Visual Studio 2008 Professional (which will be a slightly smaller download) will be available next week.  A 90-day free trial edition of Team Foundation Server can also be downloaded here.

    • If you want to use the free Visual Studio 2008 Express editions (which are much smaller and totally free), you can download them here

    • If you want to just install the .NET Framework 3.5 runtime, you can download it here.

    Quick Tour of Some of the New Features

    Visual Studio 2008 and .NET 3.5 contain a ton of new functionality and improvements.  Below are links to blog posts I've done myself as well as links to videos you can watch to learn more about it:

    VS 2008 Multi-Targeting Support

    VS 2008 enables you to build applications that target multiple versions of the .NET Framework.  This means you can use VS 2008 to open, edit and build existing .NET 2.0 and ASP.NET 2.0 applications (including ASP.NET 2.0 applications using ASP.NET AJAX 1.0), and continue to deploy these application on .NET 2.0 machines.  You can learn more about how this works from my blog post here:

    ASP.NET AJAX and JavaScript Support

    .NET 3.5 has ASP.NET AJAX built-in (no separate download required).  In addition to including all of the features in ASP.NET AJAX 1.0, ASP.NET 3.5 also now includes richer support for UpdatePanels integrating with WebParts, ASP.NET AJAX integration with controls like <asp:menu> and <asp:treeview>, WCF support for JSON, and many other AJAX improvements.

    VS 2008 and Visual Web Developer 2008 also now have great support for integrating JavaScript and AJAX into your applications.  You can learn more about this from my blog posts here:

    You can watch some videos that discuss ASP.NET AJAX and Visual Studio 2008 support for it here

    I also highly recommend the excellent ASP.NET AJAX in Action book to learn more about ASP.NET AJAX (both client-side and server-side).

    VS 2008 Web Designer and CSS Support

    VS 2008 and Visual Web Developer 2008 Express includes a significantly improved HTML web designer (the same one that ships with Expression Web).  This delivers support for split-view editing, nested master pages, and great CSS integration.  Below are some articles I've written that discuss this more:

    ASP.NET 3.5 also has a new <asp:ListView> control that provides the ability to perform rich data scenarios with total control over the markup.  It works nicely with the new CSS support in VS 2008.  You can learn more about it from my article here:

    You can watch some videos that discuss the new Visual Studio 2008 web designer features and the new ListView/DataPager controls here

    Language Improvements and LINQ

    The new VB and C# compilers in VS 2008 deliver significant improvements to the languages.  Both add functional programming concepts that enable you to write cleaner, terser, and more expressive code.  These features also enable a new programming model we call LINQ (language integrated query) that makes querying and working with data a first-class programming concept with .NET. 

    Below are some of the articles I've written that explore these new language features using C#:

    Here are a few additional blog posts I've written that show off some of the new VS 2008 code editing support and some cool ways to use these new language features:

    The Visual Basic team has also created some great free videos that cover LINQ.  You can watch them here.

    Data Access Improvements with LINQ to SQL

    LINQ to SQL is a built-in OR/M (object relational mapper) in .NET 3.5.  It enables you to model relational databases using a .NET object model.  You can then query the database using LINQ, as well as update/insert/delete data from it.  LINQ to SQL fully supports transactions, views, and stored procedures.  It also provides an easy way to integrate business logic and validation rules into your data model.  Below are some of the articles I've written that explore how to use it:

    I think you'll find that LINQ and LINQ to SQL makes it much easier to build much cleaner data models, and write much cleaner data code.  I'll be adding more posts to my LINQ to SQL series in the weeks and months ahead (sorry for the delay in finishing them earlier - so much to-do and so little time to-do it all!).

    Scott Stanfield is also working on creating some great LINQ to SQL videos for the www.asp.net site based on my article series above (all videos are in both VB and C#).  You can watch the first 4 videos in this series here.

    Browsing the .NET Framework Library Source using Visual Studio

    As I blogged a few weeks ago, we will be releasing a reference version of the .NET Framework library source code as part of this release.  Visual Studio 2008 has built-in debugger support to automatically step-into and debug this code on demand (VS 2008 can pull down the source for the appropriate .NET Framework library file automatically for you).

    We are deploying the source servers to enable this right now, and will be publishing the steps to turn this feature on in the next few weeks.

    Lots of other improvements

    The list above is only a small set of the improvements coming.  For client development VS 2008 includes WPF designer and project support.  ClickOnce and WPF XBAPs now work with FireFox.  WinForms and WPF projects can also now use the ASP.NET Application Services (Membership, Roles, Profile) for roaming user data. 

    Office development is much richer - including support for integrating with the Office 2007 ribbon, and with Outlook.  Visual Studio Tools for Office support is also now built-into Visual Studio (you no longer need to buy a separate product).

    New WCF and Workflow projects and designers are now included in VS 2008.  Unit testing support is now much faster and included in VS Professional (and no longer just VSTS).  Continuous Integration support is now built-in with TFS.  AJAX web testing (unit and load) is now supported in the VS Test SKU.  And there is much, much more...

    Installation Suggestions

    People often ask me for suggestions on how best to upgrade from previous betas of Visual Studio 2008.  In general I'd recommend uninstalling the Beta2 bits explicitly.  As part of this you should uninstall Visual Studio 2008 Beta2, .NET Framework Beta2, as well as the Visual Studio Web Authoring Component (these are all separate installs and need to be uninstalled separately).  I then usually recommend rebooting the machine after uninstalling just to make sure everything is clean before you kick off the new install.  You can then install the final release of VS 2008 and .NET 3.5 on the machine.

    Once installed, I usually recommend explicitly running the Tools->Import and Export Settings menu option, choosing the "Reset Settings" option, and then re-pick your preferred profile.  This helps ensure that older settings from the Beta2 release are no longer around (and sometimes seems to help with performance).

    Note that VS 2008 runs side-by-side with VS 2005 - so it is totally fine to have both on the same machine (you will not have any problems with them on the same box).

    Silverlight Tools and VS Web Deployment Project Add-Ins

    Two popular add-ins to Visual Studio are not yet available to download for the final VS 2008 release.  These are the Silverlight 1.1 Tools Alpha for Visual Studio and the Web Deployment Project add-in for Visual Studio.  Our hope is to post updates to both of them to work with the final VS 2008 release in the next two weeks.  If you are doing Silverlight 1.1 development using VS 2008 Beta2 you'll want to stick with with VS 2008 Beta2 until this updated Silverlight Tools Add-In is available. 

    posted @ 2007-12-02 02:24 崛起的程序員 閱讀(852) | 評(píng)論 (0)編輯 收藏

    PYHYP-WXB3B-B2CCM-V9DX9-VDY8T

    在開始>設(shè)置>控制面版>添加或刪除程序>卸載vs.net2008>出現(xiàn)卸載界面>點(diǎn)擊Next>輸入上面CD-key ->出現(xiàn)Success畫面。。激動(dòng)ING

    本人使用的是VS2008 RTM版..


    Microsoft.Visual.Studio.Team.System.2008.Team.Suite-ZWTiSO
    ed2k: Microsoft.Visual.Studio.Team.System.2008.Team.Suite-ZWTiSO.iso  [3.83 Gb]
    ed2k: Microsoft.Visual.Studio.Team.System.2008.Team.Suite-ZWTiSO.nfo  [5.8 Kb]
    [ Add all 2 links to your ed2k client ]

    Microsoft.Visual.Studio.2008.Professional.Edition-ZWTiSO
    ed2k: Microsoft.Visual.Studio.2008.Professional.Edition-ZWTiSO.iso  [3.31 Gb]
    ed2k: Microsoft.Visual.Studio.2008.Professional.Edition-ZWTiSO.nfo  [5.5 Kb]
    [ Add all 2 links to your ed2k client ]

    Microsoft.Visual.Studio.Team.System.2008.Development.Edition
    ed2k: Microsoft.Visual.Studio.Team.System.2008.Development.Edition-ZWTiSO.iso  [3.81 Gb]
    ed2k: Microsoft.Visual.Studio.Team.System.2008.Development.Edition-ZWTiSO.nfo  [5.5 Kb]
    [ Add all 2 links to your ed2k client ]

    Microsoft.Visual.Studio.Team.System.2008.Team.Foundation.Server.Workgroup.Edition-ZWTiSO
    ed2k: Microsoft.Visual.Studio.Team.System.2008.Team.Foundation.Server.Workgroup.Edition-ZWTiSO.iso  [1.29 Gb]
    ed2k: Microsoft.Visual.Studio.Team.System.2008.Team.Foundation.Server.Workgroup.Edition-ZWTiSO.nfo  [5.7 Kb]
    [ Add all 2 links to your ed2k client ]

    Microsoft.Visual.Studio.Team.System.2008.Test.Load.Agent-ZWT
    ed2k: Microsoft.Visual.Studio.Team.System.2008.Test.Load.Agent-ZWTiSO.iso  [551.01 Mb]
    ed2k: Microsoft.Visual.Studio.Team.System.2008.Test.Load.Agent-ZWTiSO.nfo  [5.7 Kb]
    [ Add all 2 links to your ed2k client ]

    posted @ 2007-12-02 02:21 崛起的程序員 閱讀(20624) | 評(píng)論 (30)編輯 收藏

    注冊(cè)機(jī)下載地址

    http://www.tkk7.com/Files/ioriqw/Altova%202008.rar
    posted @ 2007-10-30 16:23 崛起的程序員 閱讀(1000) | 評(píng)論 (1)編輯 收藏
         摘要: 在網(wǎng)上找了一圈Ajax的Java框架,感覺不錯(cuò)的只有兩個(gè),一個(gè)是被提到比較多的DWR(Direct Web Remoting),另一個(gè)是剛剛1.0的Ajax4JSF。本文先用代碼說話,各用兩個(gè)框架開發(fā)同樣功能的Ajax輸入驗(yàn)證的小程序。在最后表達(dá)一下鄙人對(duì)這兩個(gè)框架的淺見。·程序功能    頁面上有兩個(gè)輸入框,一個(gè)填用戶名,一個(gè)填密碼。兩個(gè)框空著時(shí)提示...  閱讀全文
    posted @ 2007-08-27 20:17 崛起的程序員 閱讀(566) | 評(píng)論 (0)編輯 收藏
    Go to window-preferences-java-installed jre's- edit
    and add the values
    -Xms512m -Xmx512m -Xss256k
    (or the amount of memory you want)
    eclipse starts tomcat with those values, so your memory problems should be solved
    posted @ 2007-06-10 22:26 崛起的程序員 閱讀(381) | 評(píng)論 (0)編輯 收藏
     
    有個(gè)系統(tǒng)隱藏的文件夾System Volume Information會(huì)達(dá)到1G甚至20G,這是系統(tǒng)還原的文件夾,這個(gè)目錄是WINDOWS對(duì)于大硬盤搜索方便的索引記錄文件!會(huì)在WINDOWS空閑時(shí)自動(dòng)記錄,所以這個(gè)文件夾會(huì)越來越大,然后PF使用率不斷上升,導(dǎo)致機(jī)器卡住!&W&D.C g V b j [ a
    我們可以禁用這個(gè)自動(dòng)索引功能!打開搜索功能->改變首選項(xiàng)->不使用制作索引服務(wù)->不,不要啟用制作索引服務(wù)->確定。還有一件事,就是回到剛才的地方,下面還有一個(gè)“改變制作索引服務(wù)設(shè)置(高級(jí))”,按下去,右鍵彈出的窗口中的那個(gè)索引服務(wù)->刪除,就好了!海騰數(shù)據(jù)中心服務(wù)器論壇 Y \ M z(R1{
    O

    f ?&f t j9Y&] B `
    SystemVolumeInformation\catalog.wci的文件用來存放索引文件,而且在系統(tǒng)空閑時(shí),Windows會(huì)自動(dòng)讀硬盤更新索引,安裝的文件越多,索引文件會(huì)越來越大。
           D Y }&X
    刪除索引服務(wù):海騰數(shù)據(jù)、服務(wù)器論壇聯(lián)盟、win服務(wù)器、代理服務(wù)器,郵件服務(wù)器、代碼、程序、游戲下載、軟件、電腦技術(shù)、設(shè)計(jì)、圖片、信息發(fā)布 N i$y l z:M }
    運(yùn)行msconfig,然后選擇服務(wù)選項(xiàng),找到IndexingService,將前面的小勾去掉,再刪掉文件夾即可。
    posted @ 2007-04-11 10:36 崛起的程序員 閱讀(1433) | 評(píng)論 (0)編輯 收藏

    Introduction

    Changing proxy settings of IE is a frequent requirement of mine. Then I got the idea of writing a tool by myself, at last. I have not found clear instructions on this. Many articles recommend to modify registry directly, but unfortunately their instruction is not enough. Most of them direct me to modify the following values in registry :-

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
    "ProxyEnable"=dword:00000001
    "ProxyServer"=":"
    "ProxyOverride"=""
    "DisablePasswordCaching"=dword:00000001
    

    Details

    I tested it and find that it does not work at least on my computer.( I access internet by ADSL connection.) So I backed up registry and modified proxy settings via Internet Explorer, finding that [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections] is also changed. So I wrote the following code snippet to change proxy settings:

    Collapse
    				void ShowError(long lerr)
    {
        LPVOID lpMsgBuf;
        if (!FormatMessage( 
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM | 
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            lerr,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
            (LPTSTR) &lpMsgBuf,
            0,
            NULL ))
        {
            return;
        }
        MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
        LocalFree( lpMsgBuf );
    }
    void CieproxyDlg::OnBnClickedOk()
    {//set proxy server
        UpdateData();
        GetDlgItemText(IDC_EDIT1,m_sIEProxy);
        HKEY hk;
        LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,
            "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
            NULL,KEY_WRITE|KEY_SET_VALUE,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
            TCHAR* pbuf=m_sIEProxy.GetBuffer(1);
            lret=RegSetValueEx( hk,"ProxyServer",NULL,REG_SZ,pbuf,m_sIEProxy.GetLength());
            DWORD dwenable=1;
            lret=RegSetValueEx(hk,"ProxyEnable",NULL,REG_DWORD,
               (LPBYTE)&dwenable,sizeof(dwenable));
            RegCloseKey(hk);
        }
        const TCHAR* keyname3=_T(
          "software\\Microsoft\\windows\\currentversion\\Internet Settings\\Connections");
        lret=RegOpenKeyEx(HKEY_CURRENT_USER,keyname3,NULL,
            KEY_READ|KEY_WRITE|KEY_SET_VALUE,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
            DWORD dwtype;
            char pbuf[256];
            DWORD dwlen=sizeof(pbuf);
            constchar* valname="Connection to adsl3";
            lret=RegQueryValueEx(hk,valname,NULL,&dwtype,pbuf,&dwlen);
            if(lret!=ERROR_SUCCESS)
            {
                ShowError(lret);
            }
            pbuf[8] = 3;//enable proxy
            pbuf[4]=pbuf[4]+1;
            constchar* p=m_sIEProxy.GetBuffer(1);
            memcpy(pbuf+16,p,m_sIEProxy.GetLength());
            char c=0;
            for(int i=m_sIEProxy.GetLength();i<20;i++)
                pbuf[16+i]=c;
            m_sIEProxy.ReleaseBuffer();
            lret=RegSetValueEx(hk,valname,NULL,REG_BINARY,pbuf,dwlen);
            RegCloseKey(hk);
        }
        DWORD dwret;
        SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL,
            SMTO_NORMAL,1000,&dwret);
    }
    
    void CieproxyDlg::OnBnClickedDisableProxy()
    {
        UpdateData();
        GetDlgItemText(IDC_EDIT1,m_sIEProxy);
        HKEY hk;
        LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,
            "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
            NULL,KEY_WRITE|KEY_SET_VALUE,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
            DWORD dwenable=0;
            lret=RegSetValueEx(hk,"ProxyEnable",NULL,REG_DWORD,
                (LPBYTE)&dwenable,sizeof(dwenable));
            RegCloseKey(hk);
        }
        const TCHAR* keyname3=_T(
          "software\\Microsoft\\windows\\currentversion\\Internet Settings\\Connections");
        lret=RegOpenKeyEx(HKEY_CURRENT_USER,keyname3,
            NULL,KEY_READ|KEY_WRITE|KEY_SET_VALUE,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
            DWORD dwtype;
            char pbuf[256];
            DWORD dwlen=sizeof(pbuf);
            constchar* valname="Connection to adsl3";
            lret=RegQueryValueEx(hk,valname,NULL,&dwtype,pbuf,&dwlen);
            if(lret!=ERROR_SUCCESS)
            {
                ShowError(lret);
            }
            pbuf[8] = 1;//enable proxy
            pbuf[4]=pbuf[4]+1;
            lret=RegSetValueEx(hk,valname,NULL,REG_BINARY,pbuf,dwlen);
            RegCloseKey(hk);
        }
        DWORD dwret;
        SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL,SMTO_NORMAL,
            1000,&dwret);
    }

    Problem with above code is that existing Internet Explorer instances don't know the change of settings. What is more, changing registry directly is not an elegant method. Then the following must be more attractive :

    Collapse
    BOOL SetConnectionOptions(LPCTSTR conn_name,LPCTSTR proxy_full_addr)
    {
        //conn_name: active connection name. //proxy_full_addr : eg "210.78.22.87:8000"
        INTERNET_PER_CONN_OPTION_LIST list;
        BOOL    bReturn;
        DWORD   dwBufSize = sizeof(list);
        // Fill out list struct.
        list.dwSize = sizeof(list);
        // NULL == LAN, otherwise connectoid name.
        list.pszConnection = conn_name;
        // Set three options.
        list.dwOptionCount = 3;
        list.pOptions = new INTERNET_PER_CONN_OPTION[3];
        // Make sure the memory was allocated.if(NULL == list.pOptions)
        {
            // Return FALSE if the memory wasn't allocated.
            OutputDebugString("failed to allocat memory in SetConnectionOptions()");
            return FALSE;
        }
        // Set flags.
        list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
        list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT |
            PROXY_TYPE_PROXY;
    
        // Set proxy name.
        list.pOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
        list.pOptions[1].Value.pszValue = proxy_full_addr;//"http://proxy:80";// Set proxy override.
        list.pOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
        list.pOptions[2].Value.pszValue = "local";
    
        // Set the options on the connection.
        bReturn = InternetSetOption(NULL,
            INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);
    
        // Free the allocated memory.delete [] list.pOptions;
        InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
        InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
        return bReturn;
    }
    BOOL DisableConnectionProxy(LPCTSTR conn_name)
    {
        //conn_name: active connection name. 
        INTERNET_PER_CONN_OPTION_LIST list;
        BOOL    bReturn;
        DWORD   dwBufSize = sizeof(list);
        // Fill out list struct.
        list.dwSize = sizeof(list);
        // NULL == LAN, otherwise connectoid name.
        list.pszConnection = conn_name;
        // Set three options.
        list.dwOptionCount = 1;
        list.pOptions = new INTERNET_PER_CONN_OPTION[list.dwOptionCount];
        // Make sure the memory was allocated.if(NULL == list.pOptions)
        {
            // Return FALSE if the memory wasn't allocated.
            OutputDebugString("failed to allocat memory in DisableConnectionProxy()");
            return FALSE;
        }
        // Set flags.
        list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
        list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT  ;
        // Set the options on the connection.
        bReturn = InternetSetOption(NULL,
            INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);
        // Free the allocated memory.delete [] list.pOptions;
        InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
        InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
        return bReturn;
    }

    The usage is very straightforward:

    				//set proxy
    				const
    				char* connection_name="Connection to adsl3";
        SetConnectionOptions(connection_name,"62.81.236.23:80");
    //disable proxy 
        DisableConnectionProxy(connection_name);
        

    Existing Internet Explorer instances are notified by INTERNET_OPTION_SETTINGS_CHANGED and INTERNET_OPTION_REFRESH

    posted @ 2007-01-25 20:13 崛起的程序員 閱讀(887) | 評(píng)論 (0)編輯 收藏
    Hot Spot JVM5中的GC調(diào)優(yōu)

    Written by Halatu Hubisi


    引言
    有JAVA開發(fā)經(jīng)驗(yàn)的朋友們一定碰到過下面的這種情況,那就是自己所開發(fā)的應(yīng)用運(yùn)行了一段時(shí)間后其性能或者響應(yīng)速度會(huì)有明顯的降低.這是由多方面的原因造成的即有程序本身的優(yōu)化問題,也有運(yùn)行環(huán)境問題.此運(yùn)行環(huán)境即包括硬件環(huán)境也包括軟件環(huán)境.大多數(shù)人第一個(gè)能想到的解決方法是提升硬件的配置而忽略了程序本身的運(yùn)行環(huán)境JVM也提供了比較多的調(diào)優(yōu)選項(xiàng).本文將重點(diǎn)描述利用JVM的一些選項(xiàng)對(duì)GC進(jìn)行調(diào)優(yōu).

    約定:
    1.讀者應(yīng)具備一定JAVA的知識(shí).

    2.本文中的JVM選項(xiàng)均以SUN公司發(fā)布的HotSpot JVM 5為準(zhǔn)(不過大多數(shù)的選項(xiàng)在JVM1.3,JVM1.4中也是可用的).

    3.以JAVA_HOME下demo/jfc/SwingSet2/SwingSet2.jar為例進(jìn)行說明.

    4.閱讀本文需要一些關(guān)于GC的知識(shí),可以到附錄A中了解這些知識(shí)。

    關(guān)鍵字:
    JVM(java虛擬機(jī)),調(diào)優(yōu),GC(垃圾回收)

    JVM GC調(diào)優(yōu)
    為了能夠?qū)VM GC的調(diào)優(yōu)能夠使用在具體的實(shí)踐當(dāng)中,下面將利用若干個(gè)例子來說明GC的調(diào)優(yōu).
    例1:Heap size 設(shè)置
    JVM堆的設(shè)置是指java程序運(yùn)行過程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
    當(dāng)在JAVA_HOME下demo/jfc/SwingSet2/目錄下執(zhí)行下面的命令。
    java -jar -Xmn4m -Xms16m -Xmx16m SwingSet2.jar
    系統(tǒng)輸出為:
    Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space
    Exception in thread "Image Fetcher 3" java.lang.OutOfMemoryError: Java heap space
    Exception in thread "Image Fetcher 1" java.lang.OutOfMemoryError: Java heap space
    Exception in thread "Image Fetcher 2" java.lang.OutOfMemoryError: Java heap space
    除了這些異常信息外,還會(huì)發(fā)現(xiàn)程序的響應(yīng)速度變慢了。這說明Heap size 設(shè)置偏小,GC占用了更多的時(shí)間,而應(yīng)用分配到的執(zhí)行時(shí)間較少。
    提示:在JVM中如果98%的時(shí)間是用于GC且可用的Heap size 不足2%的時(shí)候?qū)伋龃水惓P畔ⅰ?/span>
    將上面的命令換成以下命令執(zhí)行則應(yīng)用能夠正常使用,且未拋出任何異常。
    java -jar -Xmn4m -Xms16m -Xmx32m SwingSet2.jar
    提示:Heap Size 最大不要超過可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為相同,而-Xmn為1/4的-Xmx值。

    例2:Young Generation(-Xmn)的設(shè)置
    在本例中看一下Young Generation的設(shè)置不同將有什么現(xiàn)象發(fā)生。
    假設(shè)將Young generation 的大小設(shè)置為4M ,即執(zhí)行java -jar -verbose:gc -Xmn4m -Xms32m -Xmx32m -XX:+PrintGCDetails SwingSet2.jar,屏幕輸出如下(節(jié)選)
    [GC [DefNew: 3968K->64K(4032K), 0.0923407 secs] 3968K->2025K(32704K), 0.0931870 secs]
    [GC [DefNew: 4021K->64K(4032K), 0.0356847 secs] 5983K->2347K(32704K), 0.0365441 secs]
    [GC [DefNew: 3995K->39K(4032K), 0.0090603 secs] 6279K->2372K(32704K), 0.0093377 secs]
    [GC [DefNew: 3992K->23K(4032K), 0.0057540 secs] 6325K->2356K(32704K), 0.0060290 secs]
    [GC [DefNew: 3984K->27K(4032K), 0.0013058 secs] 6317K->2360K(32704K), 0.0015888 secs]
    [GC [DefNew: 3981K->59K(4032K), 0.0023307 secs] 6315K->2422K(32704K), 0.0026091 secs]
    將程序體制并將Young Generation的大小設(shè)置為8M,即執(zhí)行java -jar -verbose:gc -Xmn8m -Xms32m -Xmx32m -XX:+PrintGCDetails SwingSet2.jar,屏幕輸出如下(節(jié)選)
    [GC [DefNew: 7808K->192K(8000K), 0.1016784 secs] 7808K->2357K(32576K), 0.1022834 secs]
    [GC [DefNew: 8000K->70K(8000K), 0.0149659 secs] 10165K->2413K(32576K), 0.0152557 secs]
    [GC [DefNew: 7853K->59K(8000K), 0.0069122 secs] 10196K->2403K(32576K), 0.0071843 secs]
    [GC [DefNew: 7867K->171K(8000K), 0.0075745 secs] 10211K->2681K(32576K), 0.0078376 secs]
    [GC [DefNew: 7970K->192K(8000K), 0.0201353 secs] 10480K->2923K(32576K), 0.0206867 secs]
    [GC [DefNew: 7979K->30K(8000K), 0.1787079 secs] 10735K->4824K(32576K), 0.1790065 secs]
    那么根據(jù)GC輸出的信息(這里取第一行)做一下Minor收集的比較。可以看出兩次的Minor收集分別在Young generation中找回3904K(3968K->64K)和7616K(7808K->192K)而對(duì)于整個(gè)jvm則找回1943K(3968K->2025)和5451K(7808K->2357K)。第一種情況下Minor收集了大約50%(1943/3904)的對(duì)象,而另外的50%的對(duì)象則被移到了tenured generation。在第二中情況下Minor收集了大約72%的對(duì)象,只有不到30%的對(duì)象被移到了Tenured Generation.這個(gè)例子說明此應(yīng)用在的Young generation 設(shè)置為4m時(shí)顯的偏小。
    提示:一般的Young Generation的大小是整個(gè)Heap size的1/4。Young generation的minor收集率應(yīng)一般在70%以上。當(dāng)然在實(shí)際的應(yīng)用中需要根據(jù)具體情況進(jìn)行調(diào)整。

    例3:Young Generation對(duì)應(yīng)用響應(yīng)的影響
    還是使用-Xmn4m 和-Xmn8m進(jìn)行比較,先執(zhí)行下面的命令

    java -jar -verbose:gc -Xmn4m -Xms32m -Xmx32m -XX:+PrintGCDetails -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime SwingSet2.jar
    屏幕輸出如下(節(jié)選)
    Application time: 0.5114944 seconds
    [GC [DefNew: 3968K->64K(4032K), 0.0823952 secs] 3968K->2023K(32704K), 0.0827626 secs]
    Total time for which application threads were stopped: 0.0839428 seconds
    Application time: 0.9871271 seconds
    [GC [DefNew: 4020K->64K(4032K), 0.0412448 secs] 5979K->2374K(32704K), 0.0415248 secs]
    Total time for which application threads were stopped: 0.0464380 seconds
    Young Generation 的Minor收集占用的時(shí)間可以計(jì)算如下:應(yīng)用線程被中斷的總時(shí)常/(應(yīng)用執(zhí)行總時(shí)?L+應(yīng)用線程被中斷的總時(shí)常),那么在本例中垃圾收集占用的時(shí)?L約為系統(tǒng)的5%~14%。那么當(dāng)垃圾收集占用的時(shí)間的比例越大的時(shí)候,系統(tǒng)的響應(yīng)將越慢。
    提示:對(duì)于互聯(lián)網(wǎng)應(yīng)用系統(tǒng)的響應(yīng)稍微慢一些,用戶是可以接受的,但是對(duì)于GUI類型的應(yīng)用響應(yīng)速度慢將會(huì)給用戶帶來非常不好的體驗(yàn)。

    例4:如何決定Tenured Generation 的大小
    分別以-Xmn8m -Xmx32m和-Xmn8m -Xmx64m進(jìn)行對(duì)比,先執(zhí)行
    java -verbose:gc -Xmn8m -Xmx32m-XX:+PririntGCDetails -XX:+PrintGCTimeStamps java類,命令行將提示(只提取了Major收集)

    111.042: [GC 111.042: [DefNew: 8128K->8128K(8128K), 0.0000505 secs]111.042: [Tenured: 18154K->2311K(24576K), 0.1290354 secs] 26282K->2311K(32704K), 0.1293306 secs]
    122.463: [GC 122.463: [DefNew: 8128K->8128K(8128K), 0.0000560 secs]122.463: [Tenured: 18630K->2366K(24576K), 0.1322560 secs] 26758K->2366K(32704K), 0.1325284 secs]
    133.896: [GC 133.897: [DefNew: 8128K->8128K(8128K), 0.0000443 secs]133.897: [Tenured: 18240K->2573K(24576K), 0.1340199 secs] 26368K->2573K(32704K), 0.1343218 secs]
    144.112: [GC 144.112: [DefNew: 8128K->8128K(8128K), 0.0000544 secs]144.112: [Tenured: 16564K->2304K(24576K), 0.1246831 secs] 24692K->2304K(32704K), 0.1249602 secs]
    再執(zhí)行java -verbose:gc -Xmn8m -Xmx64m-XX:+PririntGCDetails -XX:+PrintGCTimeStamps java類,命令行將提示(只提取了Major收集)
    90.597: [GC 90.597: [DefNew: 8128K->8128K(8128K), 0.0000542 secs]90.597: [Tenured: 49841K->5141K(57344K), 0.2129882 secs] 57969K->5141K(65472K), 0.2133274 secs]
    120.899: [GC 120.899: [DefNew: 8128K->8128K(8128K), 0.0000550 secs]120.899: [Tenured: 50384K->2430K(57344K), 0.2216590 secs] 58512K->2430K(65472K), 0.2219384 secs]
    153.968: [GC 153.968: [DefNew: 8128K->8128K(8128K), 0.0000511 secs]153.968: [Tenured: 51164K->2309K(57344K), 0.2193906 secs] 59292K->2309K(65472K), 0.2196372 secs]
    可以看出在Heap size 為32m的時(shí)候系統(tǒng)等候時(shí)間約為0.13秒左右,而設(shè)置為64m的時(shí)候等候時(shí)間則增大到0.22秒左右了。但是在32m的時(shí)候系統(tǒng)的Major收集間隔為10秒左右,而Heap size 增加到64m的時(shí)候?yàn)?0秒。那么應(yīng)用在運(yùn)行的時(shí)候是選擇32m還是64m呢?如果應(yīng)用是web類型(即要求有大的吞吐量)的應(yīng)用則使用64m(即heapsize大一些)的比較好。對(duì)于要求實(shí)時(shí)響應(yīng)要求較高的場合(例如GUI型的應(yīng)用)則使用32m比較好一些。
    注意:
    1。因?yàn)樵贘VM5運(yùn)行時(shí)已經(jīng)對(duì)Heap-size進(jìn)行了優(yōu)化,所以在能確定java應(yīng)用運(yùn)行時(shí)不會(huì)超過默認(rèn)的Heap size的情況下建議不要對(duì)這些值進(jìn)行修改。
    2。Heap size的 -Xms -Xmn 設(shè)置不要超出物理內(nèi)存的大小。否則會(huì)提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。

    例5:如何縮短minor收集的時(shí)間
    下面比較一下采用-XX:+UseParNewGC選項(xiàng)和不采用它的時(shí)候的minor收集將有什么不同。先執(zhí)行
    java -jar -server -verbose:gc -Xmn8m -Xms32m -Xmx32m SwingSet2.jar
    系統(tǒng)將輸出如下信息(片段〕
    [GC 7807K->2641K(32576K), 0.0676654 secs]
    [GC 10436K->3108K(32576K), 0.0245328 secs]
    [GC 10913K->3176K(32576K), 0.0072865 secs]
    [GC 10905K->4097K(32576K), 0.0223928 secs]
    之后再執(zhí)行 java -jar -server -verbose:gc -XX:+UseParNewGC -Xmn8m -Xms32m -Xmx32m SwingSet2.jar
    系統(tǒng)將輸出如下信息(片段〕
    [ParNew 7808K->2656K(32576K), 0.0447687 secs]
    [ParNew 10441K->3143K(32576K), 0.0179422 secs]
    [ParNew 10951K->3177K(32576K), 0.0031914 secs]
    [ParNew 10985K->3867K(32576K), 0.0154991 secs]
    很顯然使用了-XX:+UseParNewGC選項(xiàng)的minor收集的時(shí)間要比不使用的時(shí)候優(yōu)。

    例6:如何縮短major收集的時(shí)間
    下面比較一下采用-XX:+UseConcMarkSweepGC選項(xiàng)和不采用它的時(shí)候的major收集將有什么不同。先執(zhí)行
    java -jar -verbose:gc -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xmn64m -Xms256m -Xmx256m SwingSet2.jar
    系統(tǒng)將輸出如下信息(片段〕
    [Full GC 22972K->18690K(262080K), 0.2326676 secs]
    [Full GC 18690K->18690K(262080K), 0.1701866 secs
    之后再執(zhí)行 java -jar -verbose:gc -XX:+UseParNewGC -Xmn64m -Xms256m -Xmx256m SwingSet2.jar
    系統(tǒng)將輸出如下信息(片段〕
    [Full GC 56048K->18869K(260224K), 0.3104852 secs]
    提示:此選項(xiàng)在Heap Size 比較大而且Major收集時(shí)間較長的情況下使用更合適。

    例7:關(guān)于-server選項(xiàng) 在JVM中將運(yùn)行中的類認(rèn)定為server-class的時(shí)候使用此選項(xiàng)。SUN 的Hot Spot JVM5 如果判斷到系統(tǒng)的配置滿足如下條件則自動(dòng)將運(yùn)行的類認(rèn)定為server-class,并且會(huì)自動(dòng)設(shè)置jvm的選項(xiàng)(當(dāng)沒有手工設(shè)置這選項(xiàng)的時(shí)候〕而且HOTSPOT JVM5提供了自動(dòng)調(diào)優(yōu)的功能,他會(huì)根據(jù)JVM的運(yùn)行情況進(jìn)行調(diào)整。如果沒有特別的需要是不需要太多的人工干預(yù)的。SUN形象的稱這個(gè)機(jī)制為“人體工學(xué)”(Ergonomics〕。具體可以參考http://java.sun.com/docs/hotspot/gc5.0/ergo5.html
    *.具有2個(gè)或更多個(gè)物理的處理器
    *.具有2G或者更多的物理內(nèi)存
    提示:此選項(xiàng)要放在所有選項(xiàng)的前面。例如:java -server 其他選項(xiàng) java類

    附錄A:預(yù)備知識(shí)
    JVM中對(duì)象的劃分及管理

    JVM根據(jù)運(yùn)行于其中的對(duì)象的生存時(shí)間大致的分為3種。并且將這3種不同的對(duì)象分別存放在JVM從系統(tǒng)分配到的不同的內(nèi)存空間。這種對(duì)象存放空間的管理方式叫做Generation管理方式。
    1。Young Generation:用于存放“早逝”對(duì)象(即瞬時(shí)對(duì)象)。例如:在創(chuàng)建對(duì)象時(shí)或者調(diào)用方法時(shí)使用的臨時(shí)對(duì)象或局部變量。
    2。Tenured Generation:用于存放“駐留”對(duì)象(即較長時(shí)間被引用的對(duì)象)。往往體現(xiàn)為一個(gè)大型程序中的全局對(duì)象或長時(shí)間被使用的對(duì)象。
    3。Perm Generation:用于存放“永久”對(duì)象。這些對(duì)象管理著運(yùn)行于JVM中的類和方法。

    JVM選項(xiàng)的分類

    JVM有這么幾種選項(xiàng)供使用.
    1.供-X選項(xiàng)使用的項(xiàng)目,又稱為非標(biāo)準(zhǔn)選項(xiàng),不同廠商的此類型選項(xiàng)是有所不同的。例如:IBM的JVM用的一些選項(xiàng)在Sun的JVM中就不一定能生效。這種選項(xiàng)的使用方式如下:
    java -Xmn16m -Xms64m -Xmx64m java類名
    2.供-XX選項(xiàng)使用的項(xiàng)目,這種類型的選項(xiàng)可能要求有對(duì)系統(tǒng)信息訪問的權(quán)限。所以要慎用。這種選項(xiàng)的使用方式如下:
    java -XX:MaxHeapFreeRatio=70 -XX:+PrintGCDetails java類名
    3.java選項(xiàng)(即在命令行執(zhí)行java后提示的選項(xiàng)).
    java -server -verbose:gc -d64 java類名

    垃圾收集分類

    在JVM中有兩種垃圾方式,一種叫做Minor(次收集),另一種叫做Major(主收集)。其中Minor在Young Generation的空間被對(duì)象全部占用后執(zhí)行,主要是對(duì)Young Generation中的對(duì)象進(jìn)行垃圾收集。而Major是針對(duì)于整個(gè)Heap size的垃圾收集。其中Minor方式的收集經(jīng)常發(fā)生,并且Minor收集所占用的系統(tǒng)時(shí)間小。Major方式的垃圾收集則是一種“昂貴”的垃圾收集方式,因?yàn)樵贛ajor要對(duì)整個(gè)Heap size進(jìn)行垃圾收集,這會(huì)使得應(yīng)用停頓的時(shí)間變得較長。

    GC信息的格式

    [GC [<collector>: <starting occupancy1> -> <ending occupancy1>, <pause time1> secs] <starting occupancy3> -> <ending occupancy3>, <pause time3> secs]
    <collector> GC為minor收集過程中使用的垃圾收集器起的內(nèi)部名稱.
    <starting occupancy1> young generation 在進(jìn)行垃圾收集前被對(duì)象使用的存儲(chǔ)空間.
    <ending occupancy1> young generation 在進(jìn)行垃圾收集后被對(duì)象使用的存儲(chǔ)空間
    <pause time1> minor收集使應(yīng)用暫停的時(shí)間長短(秒)
    <starting occupancy3> 整個(gè)堆(Heap Size)在進(jìn)行垃圾收集前被對(duì)象使用的存儲(chǔ)空間
    <ending occupancy3> 整個(gè)堆(Heap Size)在進(jìn)行垃圾收集后被對(duì)象使用的存儲(chǔ)空間
    <pause time3> 整個(gè)垃圾收集使應(yīng)用暫停的時(shí)間長短(秒),包括major收集使應(yīng)用暫停的時(shí)間(如果發(fā)生了major收集).
    GC信息的選項(xiàng)
    -XX:+PrintGCDetails 顯示GC的詳細(xì)信息
    -XX:+PrintGCApplicationConcurrentTime 打印應(yīng)用執(zhí)行的時(shí)間
    -XX:+PrintGCApplicationStoppedTime 打印應(yīng)用被暫停的時(shí)間
    提示:1.":"后的"+"號(hào)表示開啟此選項(xiàng),如果是"-"號(hào)那么表示關(guān)閉此選項(xiàng)。
    ?????2.在不同的選項(xiàng)和不同的收集方式和類型下輸出的格式會(huì)有所不同。

    附錄B:HotSpot JVM 選項(xiàng)
    請(qǐng)參考JavaTM HotSpot VM Options

    附錄C:其他資源
    http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
    http://java.sun.com/docs/hotspot/gc5.0/ergo5.html

    posted @ 2006-11-28 19:23 崛起的程序員 閱讀(440) | 評(píng)論 (0)編輯 收藏
    清晨的時(shí)候,
    在近春園曲折的小路上走,
    看見一個(gè)老人坐在湖邊悠閑地垂釣
    依稀聽見濕漉漉的笛聲
    婉約進(jìn)樹林深處,
    老人專注的神情似乎能
    漾起水中的波影,
    然后目光被長長的眉須剪斷,
    撲閃在晨霧中捕捉著空氣.
    這是怎樣一種美妙啊!
    我在他身邊坐下,靜靜等待
    魚兒的到來.半個(gè)小時(shí)過去了,
    我的心情開始煩躁,
    可老人的微笑一如既往.
    "你們二十幾歲的年輕人啊,
    心就像一個(gè)玻璃杯,
    透明,盛滿了陽光."
    老人說話跟垂釣一樣,安詳.
    和仙風(fēng)道骨的老人話別后,
    我決定從粉綠的湖邊繼續(xù)往前走,
    去探尋校園極致的景色,
    享受年輕的心情,
    呵呵,像玻璃杯……???????????????????????????????????
    posted @ 2006-11-19 19:57 崛起的程序員 閱讀(293) | 評(píng)論 (0)編輯 收藏
    String strs = request.getParameter("yourstrs");
    byte b[] = strs.getBytes("ISO-8859-1");
    strs = new String(b);








    簡潔寫法:


    String convert = new String(request.getParmater("inputname").trim().getBytes("ISO8859_1"), "GBK");
    posted @ 2006-11-10 09:53 崛起的程序員 閱讀(240) | 評(píng)論 (0)編輯 收藏
    關(guān)于tomcat4.0配置digest認(rèn)證注意事項(xiàng):
    MemoryRealm作為事例
    在server.xml中需要配置 紅色字體為注意事項(xiàng)
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    ???????????????? debug="0" resourceName="UserDatabase" digest="MD5"/>

    密碼轉(zhuǎn)換成密文的加密格式為:
    {username}:{realm}:{cleartext-password}.

    到bin/目錄下找到digest.bat?文件執(zhí)行如下命令得到密文
    digest -a md5 admin:realm:admin

    其中admin分別用戶和密碼,realm為所配置域名
    admin:realm:admin:ae7cdd2406201487bcce77064b5fe10c

    紅色部分為加密后的密碼。

    完:
    作者: Liming

    posted @ 2006-11-09 04:30 崛起的程序員 閱讀(2006) | 評(píng)論 (0)編輯 收藏
    這是一篇很有趣的文檔,所以摘要一下,其實(shí)類似閱讀筆記,好像是3/25發(fā)布的:
    不知怎么翻譯Sweet Spots,難道翻譯為甜處、甜頭、蜜點(diǎn)、蜜穴?

    本文基于對(duì)以下人的采訪(最后兩位的看法獨(dú)到還是自己看吧!):
    JSF???????????? Jacob Hookom
    RIFE????????????Geert Bevin
    Seam????????????Gavin King
    Spring MVC??????Rob Harrop
    Spring Web Flow Rob Harrop and Keith Donald
    Stripes???????? Tim Fennell
    Struts Action 1 Don Brown
    Tapestry????????Howard Lewis Ship
    Trails??????????Chris Nelson
    WebWork???????? Patrick Lightbody
    Wicket??????????Eelco Hillenius


    JSF(Jacob Hookom)

    1、你認(rèn)為你的framework的"甜點(diǎn)"在哪里?他最適合哪種類型的項(xiàng)目?
    當(dāng)你希望瀏覽器程序像桌面程序一樣工作的時(shí)候,你可以遵循標(biāo)準(zhǔn)并獲得大量第三方支持。它致力于降低復(fù)雜度。它允許你不與view和特定的action、參數(shù)傳遞、狀態(tài)傳遞、渲染打交道就可以進(jìn)行高質(zhì)量的開發(fā),不管是否使用工具。

    2、它不適合于什么樣的場景?在這些場景你推薦什么fremework?它是哪個(gè)?
    它不適合大規(guī)模的、只讀(其實(shí)指讀為主)的網(wǎng)站。在這種情況推薦Struts,因?yàn)橹R(shí)庫豐富(應(yīng)該指文檔和用戶群)。

    3、在下面提到的framework中,你試驗(yàn)過他們么?如果試驗(yàn)過,你比較喜歡哪個(gè)?你不喜歡哪個(gè)?
    Seam:
    優(yōu)點(diǎn):非常簡單直接
    缺點(diǎn):對(duì)于大項(xiàng)目過于簡單;沒有模塊化開發(fā)的好例子
    Struts:
    優(yōu)點(diǎn):巨大的文檔和用戶群;跟著它沒錯(cuò)
    缺點(diǎn):狀態(tài)/行為的分離過于教條化
    WebWork:
    優(yōu)點(diǎn):比Struts易于使用
    缺點(diǎn):復(fù)雜的UI難于維護(hù),UI代碼過于復(fù)雜(JSF作者對(duì)action
    Framework都攻擊這一點(diǎn))
    Tapestry:
    優(yōu)點(diǎn):概念新穎;可以應(yīng)付復(fù)雜的UI
    缺點(diǎn):對(duì)于一個(gè)組件化(JSF主要競爭對(duì)手),它依然依附于page/action的概念

    4、你的framework的未來會(huì)怎樣?對(duì)于用戶開發(fā)會(huì)有什么方便使用的變化?你會(huì)原生支持Ajax么?你們計(jì)劃支持它了么?
    他認(rèn)為JSF這個(gè)標(biāo)準(zhǔn)下這些應(yīng)該有第三方提供。JSF(2.0)會(huì)提供"Partial Faces Request",它是Ajax實(shí)現(xiàn)。JSF也會(huì)增強(qiáng)annotation組建編程。

    5、有對(duì)你們的framework的傳言需要澄清么?如果有,是哪個(gè)?很多JSF書都拿Struts作為對(duì)比。他認(rèn)為這不能體現(xiàn)JSF的特點(diǎn)。他認(rèn)為Struts和WebWork能做到的JSF也能做到。

    6、你對(duì)Ruby on Rails的看法如何?
    它與WebWork一樣好用,它的CoC(Convention over Configration)和腳手架非常好用。他認(rèn)為CoC可以被應(yīng)用在任何framework,他認(rèn)為這是RoR最大的優(yōu)點(diǎn)。他還認(rèn)為RoR會(huì)走上其它framework的路(復(fù)雜性),因?yàn)槿藗冃枰约旱臄U(kuò)展。

    RIFE(Geert Bevin)

    1、你認(rèn)為你的framework的"甜點(diǎn)"在哪里?他最適合哪種類型的項(xiàng)目?
    你可以付出10%的工作量,得到其它framework的90%的......,它是一個(gè)full-stack framework(如RoR)。它吸收了成熟的分層框架的架構(gòu),并將共同的優(yōu)點(diǎn)匯集在一起。提供了web continuation,POJO驅(qū)動(dòng)的CRUD生成,可擴(kuò)展的基于組建的架構(gòu),無session的狀態(tài)控制,關(guān)注REST作為API,雙向無邏輯模版引擎,集成了內(nèi)容控制框架(CMS?)。每個(gè)層次的組建提供了可復(fù)用性(AOP,site,sub-site,page,widget,portlet等)。適合于團(tuán)隊(duì)快速開發(fā)公共Web項(xiàng)目,適合喜歡開發(fā)可復(fù)用組件的人。

    2、它不適合于什么樣的場景?在這些場景你推薦什么fremework?它是哪個(gè)?
    團(tuán)隊(duì)中的每個(gè)人都有其它framework的知識(shí),難于培訓(xùn)他們。開發(fā)狀態(tài)相關(guān)的服務(wù)器端Web組件,而不是用RIA或Ajax去實(shí)現(xiàn)。第三方支持很重要的情況下(可憐RIFE用戶群還不大)。他推薦這種情況下使用JSF。或者在XML為主要發(fā)布形式的情況下,推薦Cocoon。

    3、在下面提到的framework中,你試驗(yàn)過他們么?如果試驗(yàn)過,你比較喜歡哪個(gè)?你不喜歡哪個(gè)?
    他試驗(yàn)過WebWork,JSF,Wicket。他喜歡WebWork的簡單,但是不喜歡它的模版方式(tag的template,應(yīng)該),它也不提供組件封裝。他認(rèn)為JSF的工具支持非常吸引人。Wicket的純Java實(shí)現(xiàn)很不錯(cuò),可惜XML配置很不爽。

    4、你的framework的未來會(huì)怎樣?對(duì)于用戶開發(fā)會(huì)有什么方便使用的變化?你會(huì)原生支持Ajax么?你們計(jì)劃支持它了么?
    關(guān)于Ajax,RIFE剛剛集成了DWR,而且選定以后也使用這個(gè)。集成Dojo,Scriptaculous,Prototype都很容易集成進(jìn)來。

    5、有對(duì)你們的framework的傳言需要澄清么?如果有,是哪個(gè)?這些錯(cuò)誤理念:
    ??1)、RIFE的XML配置繁瑣
    ??2)、RIFE是continuations server
    ??3)、RIFE重新造輪子沒有提供新鮮東西
    ??4)、RIFE的模版語法很蹩腳過于簡單和業(yè)余
    ??5)、RIFE是基于request的framework
    ??6)、RIFE的功能太多,學(xué)習(xí)曲線陡峭

    6、你對(duì)Ruby on Rails的看法如何?
    RoR對(duì)Java社區(qū)的沖擊非常棒,元編成也得到了信任。RoR沒什么特殊之處,也沒有從Ruby語言獲益很多。
    我討厭:它的模版。Partials(RoR中的組件)。URL的分散處理。Active Record提供了從數(shù)據(jù)庫schema而來的DSL,但是卻不是從domain model而來。沒有l(wèi)10n和i18n支持。手動(dòng)狀態(tài)轉(zhuǎn)換。不能在JVM運(yùn)行(......)。實(shí)際上腳手架生成了實(shí)際代碼。Ruby缺少工具和IDE。

    Seam(Gavin King)

    1、你認(rèn)為你的framework的"甜點(diǎn)"在哪里?他最適合哪種類型的項(xiàng)目?
    擁有豐富用戶交互體驗(yàn)的應(yīng)用。方便實(shí)現(xiàn)多窗口的操作,回退的支持,單窗口多工作區(qū),無狀態(tài)瀏覽。對(duì)商務(wù)流程(BPM)的集成是獨(dú)一無二的。Seam方便使用數(shù)據(jù)驅(qū)動(dòng)的ORM。遵循JSF和EJB3,多任務(wù)支持(多窗口/多工作區(qū)),BPM的領(lǐng)先解決方案。

    2、它不適合于什么樣的場景?在這些場景你推薦什么fremework?它是哪個(gè)?
    不適合只是將數(shù)據(jù)從數(shù)據(jù)庫顯示到網(wǎng)頁的應(yīng)用,這時(shí)應(yīng)該使用PHP或RoR。不適合需要設(shè)計(jì)特別的HTML組件的情況,此時(shí)應(yīng)該選用Tapestry或Wicket。還在使用JDK1.4的人們。還有那些喜歡Struts的人(嘿嘿,夠狠)。

    3、在下面提到的framework中,你試驗(yàn)過他們么?如果試驗(yàn)過,你比較喜歡哪個(gè)?你不喜歡哪個(gè)?
    JSF:喜歡他的事件/交互模型。喜歡他的EL和模型綁定。不喜歡那么多XML(為什么沒有annotation)。創(chuàng)建自己的controls太難了。
    Tapestry:非常好。form驗(yàn)證是它的殺手锏!模版方式很有創(chuàng)意。不過非基于POJO的組件模型則讓我對(duì)它失去興趣。
    RIFE:這個(gè)東西很怪,但是有創(chuàng)業(yè)也有趣。我想進(jìn)一步學(xué)習(xí)。如果學(xué)習(xí)先要自費(fèi)武功:D
    Struts:這個(gè)東西的模型view綁定太復(fù)雜了。東西已經(jīng)過時(shí)了。
    WebWork:比Struts好一點(diǎn),不過也過時(shí)了。XWork曾經(jīng)是個(gè)很好的實(shí)現(xiàn),不過現(xiàn)在也過時(shí)了。

    4、你的framework的未來會(huì)怎樣?對(duì)于用戶開發(fā)會(huì)有什么方便使用的變化?你會(huì)原生支持Ajax么?你們計(jì)劃支持它了么?
    Portal支持。遠(yuǎn)程框架Seam Remoting Framework(Ajax)。模版消息的工具支持。以后還要集成ESB,計(jì)劃引擎和異步支持。

    5、有對(duì)你們的framework的傳言需要澄清么?如果有,是哪個(gè)?
    這些都不是真的:JSF不能處理GET requests。JSF post后無法redirect。JSF不能與REST共存。

    6、你對(duì)Ruby on Rails的看法如何?
    它是PHP的很好替代品。如果它有一個(gè)正經(jīng)一點(diǎn)的持久化層它就可以和Java競爭了。

    Spring MVC(Rob Harrop)和Spring Web Flow(Rob Harrop and Keith Donald)

    1、你認(rèn)為你的framework的"甜點(diǎn)"在哪里?他最適合哪種類型的項(xiàng)目?
    Spring MVC:
    穩(wěn)定可擴(kuò)展,支持了i18n、文件上傳、異常處理,這些穩(wěn)定的支持給開發(fā)者堅(jiān)實(shí)的工作基礎(chǔ)。是最佳實(shí)踐,告訴你怎么做是最好的。與Spring集成,領(lǐng)先的IoC遠(yuǎn)生支持。支持,Spring社區(qū)活躍和龐大。Struts開發(fā)者可以平滑過渡。適合多種項(xiàng)目,可選的多種result類型。
    Spring Web Flow:內(nèi)置任務(wù)處理引擎,支持線性處理過程中的持續(xù)狀態(tài)。抽象,減少開發(fā)的關(guān)注點(diǎn)。適合多種項(xiàng)目類型,插件支持Spring MVC、Struts、JSF等。

    2、它不適合于什么樣的場景?在這些場景你推薦什么fremework?它是哪個(gè)?
    Spring MVC:不適合需要組件化開發(fā)的場景。它是一個(gè)request驅(qū)動(dòng)的MVC。那些場景推薦JSF或Tapestry。
    Spring Web Flow:處理線性頁面流,不適合一般的"自由瀏覽"。當(dāng)然Spring Web Flow可以與request驅(qū)動(dòng)或者組件驅(qū)動(dòng)共存。

    3、在下面提到的framework中,你試驗(yàn)過他們么?如果試驗(yàn)過,你比較喜歡哪個(gè)?你不喜歡哪個(gè)?
    Spring框架支持Struts和JSF集成。

    4、你的framework的未來會(huì)怎樣?對(duì)于用戶開發(fā)會(huì)有什么方便使用的變化?你會(huì)原生支持Ajax么?你們計(jì)劃支持它了么?
    Spring MVC:簡化JSP標(biāo)簽。更多的MVC配置schema。CoC風(fēng)格的默認(rèn)控制器、URL影射、view,學(xué)習(xí)Rails和Stripes的優(yōu)點(diǎn)。增強(qiáng)數(shù)據(jù)綁定和驗(yàn)證(支持范型綁定)。Portlet支持。Spring也要接受Ajax,使用DWR庫。
    Spring Web Flow:一大堆,關(guān)心的可以自己看......

    5、有對(duì)你們的framework的傳言需要澄清么?如果有,是哪個(gè)?
    Spring MVC難于配置。在Spring 2.0,將會(huì)改善,可以使用自己定義的基于schema的配置。

    6、你對(duì)Ruby on Rails的看法如何?
    Spring MVC:RoR非常有趣。不過現(xiàn)在就拿出來用還有點(diǎn)幼稚。這里舉了個(gè)例子,關(guān)于變量的復(fù)數(shù)形式的處理,RoR會(huì)使用這樣的CoC風(fēng)格來處理變量list,而Spring MVC也實(shí)驗(yàn)了種種風(fēng)格,但是受到的結(jié)果卻很差。人們認(rèn)為英語的復(fù)數(shù)很古怪,沒有一定的規(guī)則,所以會(huì)帶來混亂,如(person -> people)。所以Spring ...

    Stripes(Tim Fennell)

    1、你認(rèn)為你的framework的“甜點(diǎn)”在哪里?他最適合哪種類型的項(xiàng)目?
    與Spring MVC、WebWork等相同。它提供高質(zhì)量action驅(qū)動(dòng)的框架的同時(shí),盡量簡化配置,增進(jìn)開發(fā)效率。Stripes適合復(fù)雜的數(shù)據(jù)交互的場合。這種情況下綁定驗(yàn)證的強(qiáng)項(xiàng)就完全體現(xiàn)出來了,能夠很好的處理form和map轉(zhuǎn)換等。

    2、它不適合于什么樣的場景?在這些場景你推薦什么fremework?它是哪個(gè)?
    所有的action驅(qū)動(dòng)的framework都適合用戶在非Ajax驅(qū)動(dòng)的情況下在一個(gè)頁面進(jìn)行松關(guān)聯(lián)(loosely
    related)和無狀態(tài)交互的情況。適合每次都刷新的頁面。管理多窗口間持續(xù)狀態(tài)的應(yīng)用會(huì)比較麻煩,此時(shí)應(yīng)該選擇JSF。不過我認(rèn)為90%以上的Web程序都是前者,JSF只適合剩下的那9%,AJAX對(duì)于管理無狀態(tài)UI更加適合。客戶端不需要AJAX,則可以看看Wicket,它更加簡單。

    3、在下面提到的framework中,你試驗(yàn)過他們么?如果試驗(yàn)過,你比較喜歡哪個(gè)?你不喜歡哪個(gè)?
    用過Struts、WebWork、Spring MVC。其中Struts做過商業(yè)項(xiàng)目,不過這個(gè)東西帶來的麻煩遠(yuǎn)比帶來的效率提升要多。它認(rèn)為這些MVC都有三個(gè)缺點(diǎn):暴露了過多的復(fù)雜性給可發(fā)者。沒有提供足夠的開發(fā)便利性,沒有提供足夠多的錯(cuò)誤和提示信息,也沒有date格式化等小的便利(其實(shí)有)。穩(wěn)當(dāng)太差。

    4、你的framework的未來會(huì)怎樣?對(duì)于用戶開發(fā)會(huì)有什么方便使用的變化?你會(huì)原生支持Ajax么?你們計(jì)劃支持它了么?
    1.3要加入Inteceptor,實(shí)現(xiàn)AOP功能。驗(yàn)證系統(tǒng)要加強(qiáng)。支持Ajax。我還在尋找一個(gè)好的Ajax/javascript庫。

    5、有對(duì)你們的framework的傳言需要澄清么?如果有,是哪個(gè)?
    這些觀點(diǎn):1、Stripes使用了annotation代替XML,只是換湯不換藥:由于元數(shù)據(jù)更接近代碼,所以修改默認(rèn)的配置非常方便,不像XML那樣復(fù)雜,這是實(shí)質(zhì)的變化。2、Annotation意味著你只能有一套配置:我認(rèn)為90%的action都有自己的一套配置!Stripes會(huì)根據(jù)繼承關(guān)系尋找Annotations,子類的annotation會(huì)覆蓋父類的,因?yàn)橄駐alidation都是可以繼承的,如果特別需要還可以覆蓋。這樣很合理。在1.3中允許validations基于UI事件進(jìn)行。它向后兼容,不需要可以不用。

    6、你對(duì)Ruby on Rails的看法如何?
    我認(rèn)為Java社區(qū)有很多可以從RoR學(xué)習(xí)的地方。Stripes學(xué)習(xí)了RoR的前端部分,開發(fā)者可以減少配置量。但是RoR的RHTML讓我想到了以前的JSP中混亂的scriptlet。而后面的ActiveRecord是一個(gè)很好的理念,實(shí)現(xiàn)的也很好。ActiveRecord比Hibernate等復(fù)雜的ORM工具要容易理解,因?yàn)檫@樣的特點(diǎn)RoR才引起了這么大的波瀾。

    Struts Action 1(Don Brown)

    1、你認(rèn)為你的framework的“甜點(diǎn)”在哪里?他最適合哪種類型的項(xiàng)目?
    文檔和用戶基礎(chǔ),書籍和背后的支持。容易雇到人(也容易找工作)。雖然其他項(xiàng)目的理念比這個(gè)要先進(jìn),但是這些不算什么。實(shí)際上,Web層是很容易也很直接的。

    2、它不適合于什么樣的場景?在這些場景你推薦什么fremework?它是哪個(gè)?
    如果你需要portlets或者復(fù)雜的頁面(顯示很多東西),那么Struts要么無法工作要么太枯燥。這種情況你需要一個(gè)基于組件的framework,如JSF、Tapestry/Wicket。

    3、在下面提到的framework中,你試驗(yàn)過他們么?如果試驗(yàn)過,你比較喜歡哪個(gè)?你不喜歡哪個(gè)?
    這些我基本都試驗(yàn)過,他們每個(gè)都工作的很不錯(cuò)。

    4、你的framework的未來會(huì)怎樣?對(duì)于用戶開發(fā)會(huì)有什么方便使用的變化?你會(huì)原生支持Ajax么?你們計(jì)劃支持它了么?
    Struts Action2基于WebWork2,很快會(huì)開始。現(xiàn)在已經(jīng)支持Ajax了,我們?cè)趯ふ腋尤菀椎拈_發(fā)方式,JSF支持(Struts Shale),continuation支持,還有支持更多的腳本語言(BSF擴(kuò)展腳本撰寫Action)。

    5、有對(duì)你們的framework的傳言需要澄清么?如果有,是哪個(gè)?
    Struts太過時(shí)了,而且也不酷,難于使用。但是你可以自己修改或者擴(kuò)展它。我認(rèn)為團(tuán)隊(duì)對(duì)于你的限制遠(yuǎn)大于framework對(duì)你的限制。

    6、你對(duì)Ruby on Rails的看法如何?
    不需要D&D工具,旨在幫助開發(fā)人員提高開發(fā)效率的好例子。我們?cè)贏ction2中將學(xué)習(xí)它的先進(jìn)理念。

    Tapestry(Howard Lewis Ship)

    1、你認(rèn)為你的framework的“甜點(diǎn)”在哪里?他最適合哪種類型的項(xiàng)目?
    我想Tapestry對(duì)于中等規(guī)模或者大規(guī)模的應(yīng)用會(huì)帶來很多好處(甚至你可以在單頁面的應(yīng)用程序中獲得好處)。這里有允許你創(chuàng)建新的組件的良好工具。Tapestry不關(guān)心數(shù)據(jù)從哪里來,很多“項(xiàng)目類型”都基于切面(aspect)(如CRUD vs. RSS feed vs. etc.)。我認(rèn)為Tapestry非常容易與IoC集成(HiveMind或與Spring),方便進(jìn)行測試。

    2、它不適合于什么樣的場景?在這些場景你推薦什么fremework?它是哪個(gè)?
    我在其它Java framework中沒有找到到強(qiáng)于Tapestry的優(yōu)點(diǎn)。但是對(duì)于RoR,我自己沒有使用過使用,很難說RoR中的項(xiàng)目應(yīng)該是什么樣子。我沒有仔細(xì)對(duì)比過RIFE,它看起來受了RoR影響,尤其是類似ActiveRecord的數(shù)據(jù)訪問層。但是如果你的應(yīng)用需要特定的URL格式,那么在Tapestry中奮戰(zhàn)勝算不大。

    3、在下面提到的framework中,你試驗(yàn)過他們么?如果試驗(yàn)過,你比較喜歡哪個(gè)?你不喜歡哪個(gè)?
    在這兩年來我沒怎么嘗試過Tapestry以外的東西。我沒怎么學(xué)習(xí)RoR,因?yàn)闀r(shí)間太有限了。

    4、你的framework的未來會(huì)怎樣?對(duì)于用戶開發(fā)會(huì)有什么方便使用的變化?你會(huì)原生支持Ajax么?你們計(jì)劃支持它了么?
    Tapestry 4.0有很好的Ajax支持,通過Tacos庫。而Tapestry4.1還要進(jìn)一步強(qiáng)化這方面的支持。
    Tapestry 5.0提供了明顯的改進(jìn):沒有abstract類(Tapestry的怪癖:)。沒有強(qiáng)迫的繼承關(guān)系。對(duì)屬性進(jìn)行annotation而不是方法。沒有XML,只有模版和annotaions。只能類裝載,自動(dòng)尋找類的變化。最小化API,超越annotaion。面向方面(Aspect-oriented)模塊構(gòu)造,使用mix-ins。

    5、有對(duì)你們的framework的傳言需要澄清么?如果有,是哪個(gè)?
    Tapestry3.0還不容易測試,4.0改善了一些。Tapestry只是個(gè)人秀;實(shí)際上我們有很多活躍的貢獻(xiàn)者。Tapestry的學(xué)習(xí)曲線非場陡峭。它只有漂亮的模版實(shí)現(xiàn);實(shí)際上Tapestry的特點(diǎn)在于狀態(tài)管理(允許對(duì)象存儲(chǔ)狀態(tài),而不是多線程的單例來管理requests之間的游離和持久狀態(tài))

    6、你對(duì)Ruby on Rails的看法如何?
    很有影響力。但是模版的實(shí)現(xiàn)非常丑陋。我聽到了很多意見,關(guān)于RoR的優(yōu)缺點(diǎn)。基于我的基本理解,這些觀念對(duì)Tapestry4產(chǎn)生了影響(它對(duì)Tapestry 5影響更深)。
    RoR意味著限制了你的選擇:如果你選擇RoR那么就要尊旬它的實(shí)踐(CoC..),看起來你的錢會(huì)花的恨值。這些類似Microsoft的哲學(xué)。而Java更崇尚給你更寬松的選擇,不限定你使用的工具,但是曖昧的說這需要你對(duì)你的工具理解更深。不僅對(duì)Tapestry,還對(duì)于JEE、Spring這寫entire stack的框架,需要從RoR學(xué)習(xí),不僅提供工具,還需要提供整套的解決方案。

    Trails(Chris Nelson)

    1、你認(rèn)為你的framework的“甜點(diǎn)”在哪里?他最適合哪種類型的項(xiàng)目?
    Trails的應(yīng)用程序只需要Web界面和持久化的domain model就可以了。Trails給你的domain
    model快速的提供一個(gè)界面,除了POJO自己不需要附加的代碼。Trails允許你修改界面的外觀和行為,包括驗(yàn)證、i18n、安全。這些都不需要java代碼生成,不喜歡代碼生成的人應(yīng)該感覺很舒適。

    2、它不適合于什么樣的場景?在這些場景你推薦什么fremework?它是哪個(gè)?
    Trails講究夠用就好。它允許你快速交付,問問你的客戶:“這樣夠好么?”。這會(huì)改變你的工作流程,當(dāng)然這不是可以覆蓋所有需求的解決方案。當(dāng)UI需求很高,Trails沒有優(yōu)勢。我認(rèn)為Trails適合于混合的應(yīng)用,對(duì)于管理員他們只需要夠用就好,那么就可以使用Trails。其它的部分我們可以訂制開發(fā),我們?cè)谑褂肨apestry、Hibernate、Spring來實(shí)現(xiàn)這些部分,Trails正是基于它們。對(duì)于非交互的應(yīng)用,Trails也不適合,如報(bào)表應(yīng)用,可以考慮Eclipse BIRT。

    3、在下面提到的framework中,你試驗(yàn)過他們么?如果試驗(yàn)過,你比較喜歡哪個(gè)?你不喜歡哪個(gè)?
    我用Struts很多。它曾經(jīng)是偉大的framework。主要的缺陷是它不能自動(dòng)幫定數(shù)據(jù)到domain model。我也研究過JSF,它比Struts強(qiáng),但是自定義組建非常難。Tapestry非常便于自定義組建,尤其對(duì)于建立高階組件(有其它組件組成的)非常方便,Trails正在使用它。

    4、你的framework的未來會(huì)怎樣?對(duì)于用戶開發(fā)會(huì)有什么方便使用的變化?你會(huì)原生支持Ajax么?你們計(jì)劃支持它了么?
    對(duì)于Trails來說我們站在巨人的肩膀上。Tapestry在ajax功能作了很多努力,所以Trails也不難與其共舞。但是我們需要?jiǎng)?chuàng)建更多的例子來演示這些。我們也致力于讓Trails容易介入到已經(jīng)進(jìn)行的項(xiàng)目中。以后Trails還要加入基于實(shí)例的安全(instance-based security)(目前正在使用基于角色的role-based),還有method invocation。

    5、有對(duì)你們的framework的傳言需要澄清么?如果有,是哪個(gè)?
    Trails是對(duì)RoR的移植。Trails的名字來自Rails。它是基于Rails的理念,但不是對(duì)它的移植。

    6、你對(duì)Ruby on Rails的看法如何?
    我認(rèn)為我們有很多需要從RoR學(xué)習(xí)的地方,那將幫助我們享受開發(fā)Web程序的愜意。
    posted @ 2006-08-18 00:02 崛起的程序員 閱讀(189) | 評(píng)論 (0)編輯 收藏
    程序員創(chuàng)業(yè)三關(guān)


    當(dāng)人們還在浩嘆第一次網(wǎng)絡(luò)泡沫破滅的時(shí)候,互聯(lián)網(wǎng)已經(jīng)悄悄迎來了它的第二個(gè)春天;從某種意義上看,甚至已經(jīng)進(jìn)入了夏天——熱烈但不乏浮躁、興奮但失之膚淺。某位投資人聲稱今年總共有三十億美金資本進(jìn)入中國,言下之意,大家都可以甩開膀子大干快上,登陸納市不好說,搞筆錢進(jìn)來花差花差多半是沒問題的。

    另一方面,程序員創(chuàng)業(yè),在中國乃至國外,都不是什么新鮮事兒。我們是那么一群聰明、優(yōu)秀的家伙,大腦發(fā)達(dá),點(diǎn)子就像啤酒的泡沫,撲騰撲騰直往外冒,天生我才,有什么做不到的呢?遙想比爾蓋茨當(dāng)年,西裝革履,談笑間,多少豪杰灰飛煙滅……

    于是我看到,無數(shù)公司成立了,眼看他雄心勃勃,眼看他一敗涂地。成敗固然不足以論英雄,然而英雄卻不得不面對(duì)可能的成敗。可惜的是,程序員朋友們?cè)趧?chuàng)業(yè)的時(shí)候,往往沒有做好充分準(zhǔn)備。據(jù)一些資料顯示,百分之七十五的新創(chuàng)公司,會(huì)在兩、三年內(nèi)倒閉。筆者也曾經(jīng)見過許多程序員創(chuàng)業(yè)失敗的個(gè)案;成功或不成功,有很多因素制約;對(duì)于立志創(chuàng)業(yè)的程序員,至少應(yīng)該突破三關(guān)。

    第一是模式關(guān)。你的創(chuàng)業(yè)計(jì)劃,也許起源于靈機(jī)一動(dòng)。可惜的是,好點(diǎn)子并不能保證你創(chuàng)業(yè)成功。我相信多數(shù)程序員的點(diǎn)子,尚不至于低級(jí)到靠軟色情、盜版、惡性SEO等等下作手段去騙取廣告費(fèi)的地步,但怎么從點(diǎn)子變成盈利模式,卻是讓很多創(chuàng)業(yè)者迷惑的事情。在一些業(yè)界聚會(huì)上,總聽到類似“只要有流量,總有辦法賺錢”之類的說法,在2000年持同樣言論的創(chuàng)業(yè)者,多數(shù)已經(jīng)成為失敗的先烈,因?yàn)樗麄兪冀K沒明白,賺現(xiàn)錢的生意才是好生意。三大門戶成功的要點(diǎn),在于他們想出辦法,把流量轉(zhuǎn)化為盈利模式。缺乏有效的模式,流量只是成本。確定有效經(jīng)營模式、組建有力創(chuàng)業(yè)團(tuán)隊(duì),是首要任務(wù)。

    第二是管理關(guān)。從程序員變成管理者,是艱難的過程。你得明白兩件事:一、管理和寫程序一樣,是門科學(xué);二、人和計(jì)算機(jī)不一樣,人有感情、會(huì)出錯(cuò)。協(xié)調(diào)溝通能力,是程序員創(chuàng)業(yè)必備的素質(zhì)。曾經(jīng)眼見一些項(xiàng)目經(jīng)理,和手下技術(shù)人員通過郵件爭辯不休,甚至發(fā)展到在Blog上互相嘲諷,這樣的管理,可謂徹底失敗。另一個(gè)極端是,和手下稱兄道弟、一團(tuán)和氣,工作被感情所左右,酒肉害了朋友。管理有那么難嗎?我看未必。只做對(duì)公司有利的事,就是根本原則。在和你的手下打交道時(shí),請(qǐng)三思:我這么做,對(duì)公司有好處嗎?對(duì)事業(yè)有好處嗎?如果答案是否定的,那你需要另一個(gè)解決方案。

    第三是堅(jiān)持關(guān)。一位多次創(chuàng)業(yè)不成功的朋友告訴我,他總結(jié)了一條“三年定律”,即任何事如果不能堅(jiān)持三年,則一定失敗。誠哉斯言!另一位朋友說,中國人相信機(jī)會(huì),西方人相信方向和時(shí)間,雖有些偏激,卻也不乏道理。許多程序員都屬于思維活躍、點(diǎn)子特多的一類人,當(dāng)有新鮮的想法出來時(shí),他們傾向于放棄或冷落手上正在執(zhí)行的計(jì)劃。點(diǎn)子復(fù)點(diǎn)子,點(diǎn)子何其多,每天新點(diǎn)子,萬事成蹉跎。西諺有云,雙鳥在林不如一鳥在手;吃到嘴里的鴨子才是好鴨子,湖里那只鴨子看起來比較肥?也許吧,不過,吃了這只鴨子再去涉水抓那只,是不是更有把握呢?

    文短意深,未盡之處不及一一道來。奉上忠言數(shù)句,與程序員朋友們共勉:你永遠(yuǎn)不是最聰明的人;手下比你強(qiáng)是好事;創(chuàng)業(yè)不怕起步晚,只怕起個(gè)不停。
    posted @ 2006-08-15 14:49 崛起的程序員 閱讀(278) | 評(píng)論 (0)編輯 收藏
    在前些日子舉辦的2005年中國國際廣播電視信息網(wǎng)絡(luò)展覽會(huì)上,瑞福特集團(tuán)推出了“視訊夢網(wǎng)”的互動(dòng)視訊運(yùn)營平臺(tái),在網(wǎng)絡(luò)電視正在火熱的時(shí)候,“視訊夢網(wǎng)”的出現(xiàn)引起了很多人的關(guān)注。
    推出“視訊夢網(wǎng)”品牌的互聯(lián)天下將提供代收費(fèi)服務(wù),成為連接各SP與用戶之間的紐帶;并立志成為優(yōu)秀的客戶聚集者,通過統(tǒng)一的服務(wù)品牌和平臺(tái)品牌建立并維持商業(yè)價(jià)值鏈上的多種客戶關(guān)系,集中業(yè)務(wù)流量,形成龐大的用戶規(guī)模。從這個(gè)商業(yè)模式上來看,很明顯有模仿移動(dòng)夢網(wǎng)的意味,從而使得移動(dòng)夢網(wǎng)的模仿者又多了一個(gè)——自從移動(dòng)夢網(wǎng)為中國移動(dòng)帶來巨大的成功以來,“聯(lián)通在線”、“互聯(lián)星空”、“天天在線”等都可以看到它的影子。有趣的是,移動(dòng)夢網(wǎng)實(shí)際上也是模仿日本NTT DoCoMo的i-mode模式,模仿一定能夠帶來成功嗎?

    即便是中國成功的企業(yè)家在談到創(chuàng)新和模仿時(shí)也有不同的看法,在不久前的一次論壇上,遠(yuǎn)大空調(diào)的張躍和泰康人壽的陳東升對(duì)此的觀點(diǎn)截然不同,陳東升有一個(gè)著名的觀點(diǎn):"創(chuàng)新就是率先模仿"。他兩次創(chuàng)業(yè),"模仿"都起了很重要的作用。而張躍對(duì)“模仿”卻不以為然,遠(yuǎn)大走的就完全是一條創(chuàng)新的路子。張躍總是時(shí)時(shí)不忘創(chuàng)新,認(rèn)為這才是企業(yè)的生命力所在。

    兩個(gè)人的觀點(diǎn)雖然不同,但他們達(dá)到的結(jié)果卻很相似——他們都成功了。有人把創(chuàng)新分成不同的層次,原始性創(chuàng)新可算是“視訊夢網(wǎng)”的尖端、中間是創(chuàng)意型的技術(shù)改造、而處于金字塔底座的是大量的模仿性創(chuàng)新。張躍可能更重視前兩個(gè)層次的創(chuàng)新,而陳東升更重視低層的創(chuàng)新。事實(shí)上模仿性創(chuàng)新可以發(fā)揮很重要的作用,日本企業(yè)其實(shí)就是這方面的典范,而在“學(xué)習(xí)日本經(jīng)驗(yàn)”的運(yùn)動(dòng)中施樂公司率先實(shí)行的標(biāo)桿管理,里面也有模仿性創(chuàng)新的因素。

    所以,單純地談模仿是否能成功恐怕并沒有多大意義,模仿移動(dòng)夢網(wǎng)的瑞福特能否成功關(guān)鍵是看模仿中有沒有創(chuàng)新,移動(dòng)夢網(wǎng)的成功也是在于模仿中有創(chuàng)新。陳東升走遍各國探訪先進(jìn)的保險(xiǎn)公司,其實(shí)是有選擇的學(xué)習(xí),集眾家之長為己所用,也是一種創(chuàng)新。

    模仿中最重要的就是不要失去自我,如果只是一味的模仿,沒有創(chuàng)新,那最終的結(jié)果可能就會(huì)像邯鄲學(xué)步的燕人一樣,沒學(xué)會(huì)別人,自己也不會(huì)走路了,只有爬著回去了。

    Re:企業(yè)戰(zhàn)略:創(chuàng)新還是模仿?

    日本人的創(chuàng)新能力強(qiáng)嗎?日本的科技我想在世界上應(yīng)該有一定地位的.小日本的企業(yè)堅(jiān)持一點(diǎn):模仿+改良=創(chuàng)新.你有能力創(chuàng)新嗎??沒有或者不值得的話,那就請(qǐng)模仿吧!等把人家的技術(shù)的消化了再去創(chuàng)新!我想管理思想發(fā)展到今天我們都提倡學(xué)習(xí)型組織,遲早要到思考型組織,接下來就是創(chuàng)新型組織.創(chuàng)新是永遠(yuǎn)的主題,是大創(chuàng)新還是小創(chuàng)新?不同階段的企業(yè)其策略重點(diǎn)也是不一樣的,總的來說中國的企業(yè)大部分還是應(yīng)該走模仿的道路,因?yàn)橹圃旃S說白了就是成本打天下!我們慈溪有個(gè)非常了不起的企業(yè)叫做"卓力"做電器的,大部分是出口生意.他的技術(shù)永遠(yuǎn)不會(huì)落后于他人,因?yàn)樗麜?huì)把全世界最新的產(chǎn)品買過來模仿.他的核心競爭力就是不斷提高的比別人快一步的模仿力,這是一種能力!所以模仿和創(chuàng)新不是矛盾,也許會(huì)有一個(gè)境界的問題,但是我認(rèn)為側(cè)重點(diǎn)應(yīng)該在模仿上,因?yàn)槲覀兊陌l(fā)展階段跟人家不一樣.小企業(yè)多.連國家都說我們要抓大放小,小的一放,任何技術(shù)資源優(yōu)勢都沒有,國家又不管,怎么辦,唯一的優(yōu)勢就是流動(dòng)----人才的流動(dòng),更重要的是信息的流動(dòng)!
    posted @ 2006-08-07 14:41 崛起的程序員 閱讀(282) | 評(píng)論 (0)編輯 收藏
    ?????康盛世紀(jì)首席執(zhí)行官戴志康(25歲), PC POP首席執(zhí)行官李想(25歲),MySee首席執(zhí)行官鄧迪(25歲)、總裁高燃(25歲)、技術(shù)主管張鶴翔(24歲),163888翻唱網(wǎng)首席執(zhí)行官鄭立(24歲),MaJoy總裁茅侃侃(23歲),非常在線首席執(zhí)行官趙寧(23歲),“創(chuàng)智贏家”暢網(wǎng)科技首席技術(shù)官陳曦(24歲)……當(dāng)這樣一批二十多歲的精英集中出現(xiàn)在人們的視線中時(shí),不由得讓人驚呼,“80后”財(cái)富新生代正在崛起。

    ????似乎是數(shù)位少年作家的嶄露頭角,讓人們開始注目“80后”。而當(dāng)在人們眼中的“80后”還是代表著浮躁和反叛時(shí),這個(gè)詞卻在悄悄地與財(cái)富畫上連接符號(hào),一批極為年輕的財(cái)富新貴的出現(xiàn)似乎是一夜之間,同時(shí)顛覆了人們心目中 企業(yè)家 的傳統(tǒng)印象。
    ???
    ???也正由于他們的年紀(jì)之輕和擁有的財(cái)富之重,這段時(shí)間來,他們不斷受到媒體和公眾的追捧。

    ????看看上述這些代表人物從事的行業(yè)就知道,這批“80后”財(cái)富新貴的共同特點(diǎn)是夾了一本叫“互聯(lián)網(wǎng)”的大課本匆匆上路了。互聯(lián)網(wǎng)這座虛擬時(shí)空里的“大學(xué)”,在很多層面上反叛著以一間講堂、一套書本、一種方言、一個(gè)系統(tǒng)為依托的傳統(tǒng) 教育

    ????在李想看來,這正是“80后”的一代人所具有的互聯(lián)網(wǎng)精神:完全不顧忌那些別人認(rèn)為是必須去做的傳統(tǒng),破除墨守成規(guī),只做最正確的事。

    ????和李想說話,你會(huì)發(fā)現(xiàn)他始終思路清晰、方向明確,回答每個(gè)問題不超過3句話,也挑不出一點(diǎn)廢話。“我的方向和目標(biāo)很明確,一開始我就知道我的事業(yè)方向就是互聯(lián)網(wǎng),然后我會(huì)確定每一個(gè)階段的目標(biāo),一個(gè)一個(gè)去實(shí)現(xiàn),所以我不會(huì)受到誘惑去燒錢,也不會(huì)因?yàn)榕龅嚼щy就放棄。”

    ????“像李想、戴志康這批‘80后’創(chuàng)業(yè)家的優(yōu)勢就在于他們創(chuàng)新能力很強(qiáng),敢于嘗試,想了就做。不像70年代的人干什么都思前想后,以致錯(cuò)過很多機(jī)會(huì)。”中華英才網(wǎng)總裁、著名人力資源專家張建國說:“但他們的問題是自我意識(shí)太強(qiáng),而管理企業(yè)是要靠組織體系和團(tuán)隊(duì)協(xié)作的,因此,靠一個(gè)好的創(chuàng)意可以成就一個(gè)企業(yè),但企業(yè)做大以后怎么管理好,這可能是‘80后’企業(yè)家應(yīng)該注意的問題。”

    ????和張建國基本同齡的戴光對(duì)于兒子戴志康也有類似的擔(dān)心,“你可以憑一項(xiàng)技術(shù)創(chuàng)業(yè),但公司做大以后,如何從一個(gè)技術(shù)天才的角色中脫離出來,完成一個(gè)管理者的轉(zhuǎn)型,是一個(gè)大問題”。

    這些擔(dān)心已經(jīng)是李想們正在思考并一直著力解決的問題。

    ????“2003年時(shí)我的性格還是典型的‘80后’,太自我,不太考慮他人的感受。這給了我很多教訓(xùn),讓我慢慢改變,慢慢學(xué)會(huì)跳出來觀察自己,學(xué)會(huì)了解每一個(gè)員工的性格和想法。”李想說,“而且我開始嘗試用心跟別人溝通,而不是用腦子。用腦子太累,大家互相猜來猜去,我喜歡直截了當(dāng),怎么想的就怎么說。后來我發(fā)現(xiàn)其實(shí)大部分人都喜歡這種溝通方式,包括那些很有名的CEO們。所以規(guī)則不是不可以改寫的,關(guān)鍵是你去不去做。”

    ????這正是“80后”財(cái)富新貴的共同特點(diǎn),他們擁有與年齡不相符的成熟和老練。

    ????本期,我們走近“80后”財(cái)富新貴中的兩位:李想和戴志康,也走訪了其中一位的父親,希望能從父輩的教育方式上對(duì)這批財(cái)富新貴的成功緣由有所挖掘。

    ????一個(gè)沒有上過大學(xué),一個(gè)做了大學(xué)的“半路逃兵”,李想和戴志康都沒有受過完整的高等教育,但他們卻創(chuàng)造了奇跡。

    ????這批沒有接受正規(guī)高等教育卻創(chuàng)業(yè)成功的年輕企業(yè)家的崛起,再次引發(fā)對(duì)現(xiàn)行高等教育的爭議,中國高校究竟該培養(yǎng)什么樣人才的問題又一次被提起。

    ????在關(guān)注他們成長的同時(shí),我們也期待他們?cè)诮窈蟮穆飞献叩酶臃€(wěn)健和長久。

    ????見到25歲的PCPOP網(wǎng)首席執(zhí)行官李想時(shí),他的公司一片忙亂,所有的會(huì)議室都被騰出來接待面試者,李想準(zhǔn)備繼續(xù)擴(kuò)大已有的100多人的團(tuán)隊(duì),而他們2004年還顯得空蕩的公司變得擁擠不堪。李想說他已經(jīng)在中關(guān)村一個(gè)新建的寫字樓里租下了比現(xiàn)在大一倍的“新家”,馬上就要搬家了。

    ????作為中國第三大中文 IT 專業(yè)網(wǎng)站——PCPOP網(wǎng)的創(chuàng)始人,李想持有公司50%以上的股份,身家在1億元以上,網(wǎng)站去年的營業(yè)額收入近兩千萬元,利潤一千萬元,取20倍的市盈率,市場價(jià)值兩億元。但李想的野心決不僅限于此,“今年的營業(yè)額要達(dá)到去年的2.5倍,明年要超過1億元,然后2008年達(dá)到一個(gè)上市的標(biāo)準(zhǔn),這是我們未來幾年發(fā)展的一個(gè)方向。”

    ????這個(gè)野心勃勃的年輕人8年前還是一個(gè)上不起網(wǎng)的高中生,當(dāng)時(shí)一小時(shí)8元的上網(wǎng)費(fèi)外加一小時(shí)4元的電話費(fèi)對(duì)于一個(gè)孩子來說實(shí)在昂貴,后來上網(wǎng)費(fèi)用降到只需一小時(shí)1元,他就是那時(shí)候開始接觸互聯(lián)網(wǎng)的,“我一碰互聯(lián)網(wǎng)馬上就迷上了,當(dāng)時(shí)很單純,就是因?yàn)榭梢栽诰W(wǎng)上跟志同道合的人交流、學(xué)習(xí)知識(shí)”。
    李想很快就開始做自己的IT資訊網(wǎng)站,網(wǎng)站的訪問量很快就達(dá)到五六千人。當(dāng)達(dá)到一萬人時(shí),就有
    廣告 商開始找他,要做廣告,訪問量一千次10元,‘我當(dāng)時(shí)想,閑著也是閑著,就給他掛上了”。

    ????沒有在意的李想兩個(gè)月后收到了廣告商6000元的付款,“我當(dāng)時(shí)也很吃驚,這比我父母一個(gè)月加起來掙的還多。”不經(jīng)意間挖到自己的第一桶金,本來心思就不在讀書上的李想終于在高三畢業(yè)時(shí)作出了一個(gè)大膽決定:放棄考大學(xué),自己創(chuàng)業(yè)。

    ????與李想同歲、同樣靠互聯(lián)網(wǎng)起家的康盛世紀(jì)科技有限公司CEO戴志康卻是個(gè)從小和電腦泡到大的人。戴志康出生在大慶一個(gè)高級(jí)知識(shí)分子家庭,父親戴光是大慶石油學(xué)院的博士后。還在上小學(xué)的戴志康沒事就去鼓搗家里的電腦,從286到586,家里的電腦一次次為他升級(jí),戴志康編程的本事也越來越高。

    ????2000年,戴志康竟然經(jīng)過高考前一個(gè)月的突擊準(zhǔn)備考進(jìn)一所知名大學(xué)的 通信 工程專業(yè),這讓老師同學(xué)大跌眼鏡。然而進(jìn)入大學(xué)一年級(jí)后,戴志康便很少在學(xué)校,而是自己在外創(chuàng)業(yè)。“我當(dāng)時(shí)在外面租了個(gè)月租300塊錢的房子,一天差不多15個(gè)小時(shí)都泡在電腦前面,悶頭開發(fā)Discuz!”。

    ????Discuz!是一套能自動(dòng)生成社區(qū)的軟件,能讓不懂技術(shù)的人也能管理自己設(shè)計(jì)的網(wǎng)絡(luò)社區(qū)。剛開始研發(fā)時(shí),戴志康并沒打算以此創(chuàng)業(yè),“我想畢業(yè)后找個(gè)好工作,所以開始研發(fā)Discuz!時(shí)只是興趣,就想證明自己的能力。但在研發(fā)過程中,當(dāng)我產(chǎn)生以此掙錢的念頭時(shí),就不再想找工作了。”

    ????現(xiàn)在,Discuz!已經(jīng)是社區(qū)軟件領(lǐng)域的老大,戴志康也開始進(jìn)行公司的轉(zhuǎn)型,把產(chǎn)品免費(fèi)供應(yīng)給客戶,轉(zhuǎn)而從為客戶提供服務(wù)中獲取收入。這個(gè)仍習(xí)慣于吃學(xué)校食堂、穿地?cái)傄路s開著銀灰色 寶馬 的年輕人,談起自己公司的發(fā)展方向頭頭是道,老練得讓人有些超出想像。

    ????寬松的家庭教育造就了創(chuàng)業(yè)素質(zhì)

    ????戴志康的辦公室立著一個(gè)空空的書架,“我不喜歡看書,我認(rèn)為書是用來查的,不是用來翻的,我討厭被動(dòng)地接收信息,我喜歡從生活中掘取信息”。戴志康的學(xué)習(xí)與常人理解的不同,他既不靠學(xué)校也不靠書本,而是從生活的細(xì)節(jié)中學(xué)習(xí)。

    ????經(jīng)常和朋友聊天到凌晨的戴志康,從中“偷學(xué)”到不少東西。

    “另外,我喜歡獨(dú)立思考。只有獨(dú)立的人才會(huì)堅(jiān)強(qiáng)。當(dāng)遇到看似解決不了的困難時(shí),不獨(dú)立的人馬上想到的是尋求幫助。但在一個(gè)商業(yè)社會(huì)里如果沒有利益的關(guān)聯(lián),沒有人會(huì)幫你,你獲得了別人的幫助也就意味著自己商業(yè)利益的損失。”戴志康說,“再有,勇氣和執(zhí)著是創(chuàng)業(yè)必須的基本素質(zhì),而這兩點(diǎn)獨(dú)立的人很容易獲得。”

    ????戴志康把這種獨(dú)立思考能力的養(yǎng)成歸功于家庭教育,“我父母的教育方式比較西化,給我很大的空間。當(dāng)然,父母同時(shí)也要我自己負(fù)責(zé)任,什么都靠自己,不到萬不得已他們不會(huì)伸手幫忙。而且我父母都是老師,每天和年輕人接觸,心態(tài)也比較年輕。”

    ????戴志康的父親戴光在向筆者總結(jié)他的教育方式時(shí)說,對(duì)孩子的培養(yǎng)不能限制得太死,要給孩子建議而不是命令,孩子覺得對(duì)的要采納,要讓他自己思考,不能給現(xiàn)成的答案,這樣孩子才能有自信、有想法,不是一塊只會(huì)跟著別人的木頭。

    ????“我覺得戴志康之所以能取得一些成就,是他發(fā)揮了自己的特長,大學(xué)里就有了自己的產(chǎn)品,他的創(chuàng)造能力和創(chuàng)新思維特別強(qiáng),又有敢想敢干的冒險(xiǎn)精神,還有就是這孩子是個(gè)踏踏實(shí)實(shí)干事的人,能容得下事、容得下人。”戴光這樣評(píng)價(jià)自己的兒子。

    ????無獨(dú)有偶,李想同樣來自一個(gè)環(huán)境寬松的家庭,他也把自己最重要的創(chuàng)業(yè)素質(zhì)歸結(jié)為“獨(dú)立思考和總結(jié)能力強(qiáng)”以及不斷學(xué)習(xí)的能力。“我小學(xué)時(shí)父母給的是命令,初中時(shí)給的是建議,高中時(shí)是從朋友的角度提出參考,到了高中以后就是信任了。父母給了我很多獨(dú)立思考的機(jī)會(huì),我基本沒有受過什么束縛。”李想說。

    ????財(cái)富新貴引發(fā)教育新思考

    ????“因?yàn)槌隽宋覀冞@樣一批人而在社會(huì)上引起什么‘高等教育無用論’,純屬瞎扯。現(xiàn)實(shí)是大學(xué)里沒有目標(biāo)、隨波逐流的人太多了,所以我們這樣目標(biāo)明確并堅(jiān)持下來的人才顯現(xiàn)出來。

    ????”沒有上過大學(xué)的李想說。

    ????李想坦言,沒有上大學(xué)的確是自己的一個(gè)遺憾,因?yàn)槿松腥鄙倭艘环蒹w驗(yàn)。“如果你有明確的目標(biāo),大學(xué)絕對(duì)是一個(gè)非常好的學(xué)習(xí)場所。但相對(duì)于上學(xué)來說,更重要的是一個(gè)人要有目標(biāo)和方向。”

    ????李想把現(xiàn)在的大學(xué)生分為兩類:畢業(yè)后可以挑單位的和畢業(yè)后“海投”簡歷也找不到工作的,“凡是可以挑單位的學(xué)生,絕對(duì)是從大一起就有明確的目標(biāo)并一直為之努力。現(xiàn)在很多大學(xué)生或者是迷茫,或者雖有目標(biāo),但一遇到困難,就‘喜新厭舊’,常立志而不立長志。”

    ????上了重點(diǎn)大學(xué)卻半路“逃跑”的戴志康這樣看待自己4年的大學(xué)生活:“我考通信專業(yè)時(shí)本來以為會(huì)學(xué)到數(shù)字通信,接觸到一些大型的 交換機(jī) ,結(jié)果到大三才學(xué)到收音機(jī)原理,大四才學(xué)了黑白 電視 機(jī)原理。大學(xué)的課程設(shè)置太落后于時(shí)代,與用人單位的實(shí)際需求太脫節(jié)。”

    ????本身就是大學(xué)教授的戴光坦言,現(xiàn)在大學(xué)的課程設(shè)置的確存在滯后問題。“雖然現(xiàn)在高等教育已進(jìn)入 大眾 化時(shí)代,但很多老師和高校管理者的思維還停留在精英教育上。精英教育是細(xì)線條的,什么都要講到,是培養(yǎng)理論家的,而大眾教育是粗線條的,應(yīng)該給學(xué)生一定的空間,應(yīng)該多一些應(yīng)用性的東西。”

    ????清華大學(xué)科技園副主任、被譽(yù)為清華“創(chuàng)業(yè)之父”的羅建北認(rèn)為,像戴志康、李想這樣的人,在現(xiàn)有的大學(xué)體系中很難培養(yǎng)出來,因?yàn)樵趹?yīng)試教育模式下,很難把創(chuàng)業(yè)所需的一些素質(zhì)加入到教學(xué)中,“創(chuàng)業(yè)素質(zhì)的培養(yǎng)和應(yīng)試教育就是一對(duì)矛盾,因?yàn)槟阋獙W(xué)生多了解社會(huì),從而發(fā)現(xiàn)市場的需求和商機(jī),這都需要時(shí)間來實(shí)踐,那考試怎么辦?”

    posted @ 2006-08-03 15:55 崛起的程序員 閱讀(217) | 評(píng)論 (0)編輯 收藏
    合肥留學(xué)生創(chuàng)業(yè)園 劉濤 ?
      易趣網(wǎng)上開店的人不少,而曲劍秋是其中比較特別的一個(gè)。小曲的特別之處是他經(jīng)營自己的易趣網(wǎng)店的獨(dú)特思路,和他的MBA(工商管理碩士)歸國留學(xué)生的背景。小曲是英國名校愛丁堡商學(xué)院的MBA學(xué)生。
      小曲在網(wǎng)上賣的是玩具。他的網(wǎng)上商店名叫“Toys4U”。在易趣網(wǎng)按店鋪名:Toys4U開心玩具檢索就可以找到小曲的網(wǎng)上商店。打開網(wǎng)店的首頁,你可以看到一個(gè)紅色方塊中的“:)”字符號(hào)正對(duì)你張開著笑臉。這是小曲的商標(biāo)和網(wǎng)上商店的店標(biāo)。“All U BUY IS NOT JUST TOYS”(你在這里得到的不僅僅是玩具!)這句意味深長的話向我們表達(dá)著這個(gè)小小網(wǎng)店的不同尋常的經(jīng)營理念。
      小曲的小店才開了4個(gè)月每個(gè)月銷售額上萬元利潤約在4000元左右,算是小有收獲。
      抱著幾分好奇和驚訝,我輾轉(zhuǎn)聯(lián)系上了這位放棄了很好的工作機(jī)會(huì)而選擇網(wǎng)上開店創(chuàng)業(yè)的MBA歸國留學(xué)生。電話里的小曲很是坦誠,對(duì)我的問題的回答應(yīng)對(duì)之中還是可以感受到一位經(jīng)過英國名校系統(tǒng)培訓(xùn)過的MBA的敏銳思路。
      小曲在英國呆了3年,其中一年半是在上學(xué),另一年半是在實(shí)習(xí)。小曲上學(xué)的地點(diǎn)在愛丁堡。
      小曲家在大連辦著企業(yè),望子成龍的父母鐵了心要掏30萬元把小曲送到英國讀MBA。小曲雖覺得MBA最好是有一定的閱歷再讀比較好。但還是服從了父母的安排。小曲從小喜歡玩具,一到英國就好比如魚得水。小曲說在英國二三十歲的人隔一段時(shí)間給自己買一個(gè)心儀的玩具已成家常便飯,成人玩玩具已是再普通不過的事情。小曲說我不抽煙不喝酒,有點(diǎn)零錢就買玩具。在英國3年,小曲在網(wǎng)上就是eBay(www.ebay.com)和雅虎的玩具拍賣店的常客,對(duì)英國的玩具文化也是深有體會(huì)。小曲回國時(shí)玩具裝滿了箱,價(jià)值有幾萬元人民幣的。小曲多年收藏了從美國、英國以及歐洲其它國家購買來的玩偶精品(從英國運(yùn)回玩具的運(yùn)費(fèi)就高達(dá)1000英鎊),其中不乏“花木蘭”、“獅子王”、“小雞快跑”和“星戰(zhàn)前傳”等全套造型玩偶。
      小曲的家境不錯(cuò)加上每到周末有時(shí)還有華人家庭請(qǐng)小曲去為孩子教鋼琴一小時(shí)20英磅小曲小時(shí)候?qū)W過鋼琴到英國后因參加了使館組織的春節(jié)聯(lián)歡會(huì)表演了彈鋼琴算是打響了自己的品牌),讓自己的個(gè)人愛好有了賺錢的機(jī)會(huì),同時(shí)也讓自己有了買玩具的零花錢。
      在結(jié)束了MBA的一年半課程后小曲爭取到了一個(gè)機(jī)會(huì),到玩具反斗城(Toys″R″us)做銷售助理。玩具反斗城是一個(gè)非常有名的大型玩具超市它的分店遍及歐洲、北美乃至亞洲一些國家和地區(qū)。小曲實(shí)習(xí)的這家超市位于倫敦最繁華的牛津街上的Hamleys哈姆雷 。在玩具反斗城小曲對(duì)歐美的玩具文化有了更深的理解。小曲心想以后回國就以在中國建這樣一個(gè)管理有序的大型玩具專營店為事業(yè)。
      在英國呆了3年后,小曲決定回國,上海是小曲的首選城市。小曲在上海與人合租了房子。小曲心目中的工作還是玩具行業(yè),但小曲很快發(fā)現(xiàn)國內(nèi)的大多玩具公司都是家族管理和家庭作坊,理念上并不能夠彼此認(rèn)同。后來終于打聽到玩具反斗城在廣州的公司可能在上海要招一個(gè)人,但小曲很快發(fā)現(xiàn)對(duì)方要的不過是大專畢業(yè)生。就算自己愿意從底層做起,恐怕別人會(huì)懷疑自己另有企圖,而高級(jí)的職位人家更傾向于非公開招聘的方式。
      一次偶然的機(jī)會(huì),小曲從一本講述歸國MBA的書上知道了易趣網(wǎng),也知道了易趣網(wǎng)的掌門人BO(邵亦波先生,易趣網(wǎng)CEO)和譚海音小姐的創(chuàng)業(yè)故事。同樣的歸國留學(xué)背景讓小曲對(duì)易趣網(wǎng)有了好感。易趣管理和操作的規(guī)范化、國際化,另外低成本的網(wǎng)上操作既是新商品發(fā)布的絕佳平臺(tái),又是一個(gè)最有效的市場信息搜集反饋的工具。小曲心想我為啥不選擇創(chuàng)業(yè)作為自己的起點(diǎn)呢?MBA最終目標(biāo)不都是能干出點(diǎn)事兒嗎?無非是使創(chuàng)業(yè)的過程更加理性化。小曲開始在易趣建立自己的網(wǎng)上商店。一開始就堅(jiān)信易趣提供的這個(gè)平臺(tái)會(huì)被越來越多的人認(rèn)可。在英國的3年多時(shí)間里一直在雅虎和eBay的英國網(wǎng)站上競拍喜愛的動(dòng)作玩偶(Action Figures)也是Toys″R″us網(wǎng)站(和亞馬遜合并后證明了電子商務(wù)一樣可以做得很好)的忠實(shí)顧客,3年下來竟也積攢了近十大箱子玩具運(yùn)回國內(nèi)。 絕大部分玩具都是中國制造的,但因?yàn)樵趪鴥?nèi)沒有銷售而且終端顧客根本無法看到,這更加堅(jiān)定小曲回國投身玩具銷售,帶給國人更多更好玩具的信念。就這樣,回國沒有多久的小曲制定了先在易趣開玩具店鋪,通過其間和廠家以及顧客建立的良性紐帶,進(jìn)而鞏固網(wǎng)上店鋪并適時(shí)向外尋求加盟以拓展實(shí)體店鋪的計(jì)劃。
      小曲用自己租的住處作為自己網(wǎng)上商店的庫房,客廳作為接待網(wǎng)上顧客看樣的場所。自己在國外收藏的玩具當(dāng)然是作為非賣品展示給客戶,培養(yǎng)客戶對(duì)玩具的愛好和對(duì)玩具文化的理解。同時(shí)也提高自己專業(yè)經(jīng)營者的形象。同時(shí)小曲托在外貿(mào)工作的同學(xué)幫忙落實(shí)了國內(nèi)的生產(chǎn)廠家。
      網(wǎng)店一開張小曲就感受到國內(nèi)消費(fèi)者對(duì)玩具的渴望。連續(xù)4個(gè)月每月都贏利4000元左右,月銷售額在一萬多。
      從香格里拉紀(jì)念版紅毛熊熊的熱銷到由正版迪斯尼DISNEY系列玩偶所引起的不俗反響,小曲都是苦心經(jīng)營,由于現(xiàn)在交易量很大,自己的女朋友也來幫忙,負(fù)責(zé)成交后網(wǎng)下的聯(lián)系和交貨發(fā)貨。
      面對(duì)如此好的業(yè)績,小曲說,這只是個(gè)開始,在以后的日子,仍會(huì)秉承一貫誠實(shí)經(jīng)營、價(jià)格公道原則,誠心對(duì)待每一位新老顧客。還說,隨著規(guī)模的擴(kuò)大,買家將直接得到由于相關(guān)成本的降低而帶來的實(shí)惠。
      問及在易趣開店的感受,小曲坦言說:體力和腦力的透支,但是精神上絕對(duì)放松,因?yàn)樵谧鲆患嬲矚g做的事情。賺錢絕不是第一位的(但絕對(duì)必要),否則一張英國MBA文憑加上在海外近三年學(xué)習(xí)工作的積累,也一定讓小曲過得很好,但是那不是他所要追求的。他還說,每上傳一件新商品,每看到買家收到玩具后滿意的回復(fù),打心眼兒里開心!
      小曲說起網(wǎng)上經(jīng)營心得是:盡量及時(shí)回復(fù)買家留言和E-mail,沒有人喜歡等待;商品選擇要有自己的風(fēng)格,物以稀為貴;買家永遠(yuǎn)是挑剔的,所以作為賣家的自己要不斷改進(jìn)商品和服務(wù)的質(zhì)量。做玩具這一行,如同做時(shí)裝店一樣靠的是你進(jìn)貨的眼光,要了解你的客戶。
      談到4個(gè)月來通過網(wǎng)上商店對(duì)中國玩具市場的初步探索,小曲覺得相比之下中國的玩具消費(fèi)市場還不是很發(fā)達(dá),也不成熟。正因?yàn)槿绱瞬庞辛俗约荷媾c發(fā)展的空間與機(jī)會(huì)。小曲說,既然我選擇了這一行作為我的事業(yè),我就要與市場一起成長。目前小曲的客戶大多為收入2000元左右的年輕人。
      我問小曲想沒想過將中國的玩具賣到國外去,小曲說不想,至少暫時(shí)不想,他更愿意為中國的消費(fèi)者服務(wù),“他們從我這里得到快樂,與國內(nèi)的消費(fèi)者之間我們更能夠彼此認(rèn)同。而如果賣給國外的消費(fèi)者,他可能因我是個(gè)中國人而存有偏見,這是我無法接受的,萬一我哪些方面做得不夠,他又會(huì)說中國人怎樣怎樣,這也是我不愿看到的。我做這個(gè)不純粹是為錢,如果單純?yōu)殄X我就不干這個(gè)了。”
      說到開網(wǎng)店的不足之處,小曲說,雖然網(wǎng)上開網(wǎng)店創(chuàng)業(yè)門檻低、投資小,但每次上傳圖片網(wǎng)上打理也怪費(fèi)心費(fèi)力的,一忙就精神高度緊張兩個(gè)多小時(shí)。與網(wǎng)下店鋪比,腦力的投入大多了。
    通過充足的準(zhǔn)備和網(wǎng)上的練兵,小曲準(zhǔn)備利用自己經(jīng)營網(wǎng)上商店建立起來的進(jìn)貨渠道,投資10萬元在網(wǎng)下開一個(gè)玩具專營店。小曲的第一家以顧客為導(dǎo)向的先進(jìn)管理的網(wǎng)下玩具專營店將在今年夏天于大連繁華地段開張營業(yè)。

    案例分析


      看完了故事我們?cè)僮鳇c(diǎn)兒分析,小曲特別之處在于他是一位MBA,而且是一位留學(xué)歸來的MBA。但良好教育的最終目標(biāo)是能干出點(diǎn)事兒,小曲也不例外,對(duì)玩具的強(qiáng)烈渴望夢想著擁有屬于自己的玩具店,而后來所受的教育使得這種想法更加理性化。創(chuàng)業(yè)學(xué)也是MBA必修課之一。
      小曲現(xiàn)在初步展現(xiàn)在人們眼前的是一個(gè)充滿生氣、有自己獨(dú)到經(jīng)營理念、操作規(guī)范的網(wǎng)上店鋪,三個(gè)月就成為在易趣有很高知名度和信用度的商鋪。這是小曲將所學(xué)的知識(shí)在實(shí)踐中給以應(yīng)用的體現(xiàn)。 在同樣做到初步開店成功的易趣個(gè)人網(wǎng)店店主中,小曲有著更廣闊的視野、更好的策劃、更詳盡的目標(biāo)、更高的目標(biāo)。從一開始,小曲就認(rèn)為易趣的模式必定可行,而且制定了“先在易趣開玩具店鋪,通過其間和廠家以及顧客建立的良性紐帶,進(jìn)而鞏固網(wǎng)上店鋪并適時(shí)向外尋求加盟以拓展實(shí)體店鋪”的計(jì)劃。千里之行,始于足下。我們相信小曲會(huì)走的更遠(yuǎn)。
    另外再來看一下目前小曲提供的一些數(shù)據(jù):4個(gè)月來小曲共成交的客戶有500多人。其中60%的客戶會(huì)要求上門看貨,上門看貨后,全對(duì)小曲的專業(yè)性更加認(rèn)可,并增大購買量。有本來在網(wǎng)上只不過是定了十幾元的玩具,網(wǎng)下來一看定了幾百元走。
      因此,我們可以看到即便是網(wǎng)上商店,網(wǎng)絡(luò)也不是一切。網(wǎng)下的貨要經(jīng)得起推敲,網(wǎng)下看貨等環(huán)節(jié)也要下功夫。網(wǎng)上商店只不過讓客戶通過網(wǎng)絡(luò)知道你網(wǎng)下的地址。另外,網(wǎng)上不過是宣傳聯(lián)系客戶,網(wǎng)下你也要做專業(yè)。開個(gè)玩具店也要開出水平來。
      我們?cè)賮砜纯磳?duì)小曲的客戶的一次性購買的情況:一次性購買最多的是1000元。買了500元以上商品的有20%,買了300元以上的有60%。
      因此,我們可以看到對(duì)于小曲這種產(chǎn)品單價(jià)在幾十元上百元上下的玩具,這樣的圖表數(shù)據(jù)說明,大多購買者一次會(huì)挑好幾樣,這說明網(wǎng)上有這樣的消費(fèi)人群在你的網(wǎng)店可以提供比網(wǎng)下價(jià)格更好,品種更多的產(chǎn)品時(shí),他們是愿意“瘋狂”購物的。
      在小曲的500多個(gè)客戶中有10%的人在四個(gè)月內(nèi)重復(fù)購買了三四次。其中有十幾個(gè)外地個(gè)體戶上門來批發(fā)。批發(fā)的金額在幾千元,對(duì)于批發(fā)的客戶,小曲加上很少一點(diǎn)利潤就出。小曲說這些生意我賺得很少,但我在幫廠家出貨,我通過這些生意加強(qiáng)了與廠家的關(guān)系。
      因此,可見小曲的經(jīng)營理念實(shí)施得比較到位,4個(gè)月內(nèi)重復(fù)購買的客戶已達(dá)30%。因此如果全年來統(tǒng)計(jì)會(huì)更高。因此,有沒有回頭客很重要,網(wǎng)店一定要有特色。另外,批發(fā)的客戶數(shù)達(dá)到10%,交易額也不錯(cuò),但創(chuàng)利在總利潤額中所占比例很低,這與小曲的價(jià)格策略有關(guān)。
      可見,網(wǎng)絡(luò)可以虛擬,生意還應(yīng)以誠相待。小生意也要有遠(yuǎn)大目光,要做別人一輩子的生意,而不是一次兩次。

    posted @ 2006-07-28 09:29 崛起的程序員 閱讀(309) | 評(píng)論 (0)編輯 收藏
    posted @ 2006-07-27 19:03 崛起的程序員 閱讀(241) | 評(píng)論 (0)編輯 收藏
    諸位,咱當(dāng)電子工程師也是十余年了,不算有出息,環(huán)顧四周,也沒有看見幾個(gè)有出息的!回顧工程師生涯,感慨萬千,愿意講幾句掏心窩子的話,也算給咱們師弟師妹們提個(gè)醒,希望他們比咱們強(qiáng)!
      
        [1]好好規(guī)劃自己的路,不要跟著感覺走!根據(jù)個(gè)人的理想決策安排,絕大部分人并不指望成為什么院士或教授,而是希望活得滋潤一些,爽一些。那么,就需要慎重安排自己的軌跡。從哪個(gè)行業(yè)入手,逐漸對(duì)該行業(yè)深入了解,不要頻繁跳槽,特別是不要為了一點(diǎn)工資而轉(zhuǎn)移陣地,從長遠(yuǎn)看,這點(diǎn)錢根本不算什么,當(dāng)你對(duì)一個(gè)行業(yè)有那么幾年的體會(huì),以后錢根本不是問題。頻繁地動(dòng)蕩不是上策,最后你對(duì)哪個(gè)行業(yè)都沒有摸透,永遠(yuǎn)是新手! 
      
        [2]可以做技術(shù),切不可沉湎于技術(shù)。千萬不可一門心思鉆研技術(shù)!給自己很大壓力,如果你的心思全部放在這上面,那么注定你將成為孔乙己一類的人物!適可而止為之,因?yàn)榧夹g(shù)只不過是你今后前途的支柱之一,而且還不是最大的支柱,除非你只愿意到老還是個(gè)工程師!      
      
        [3]不要去做技術(shù)高手,只去做綜合素質(zhì)高手!在企業(yè)里混,我們時(shí)常瞧不起某人,說他“什么都不懂,憑啥拿那么多錢,憑啥升官!”這是普遍的典型的工程師的迂腐之言。8051很牛嗎?人家能上去必然有他的本事,而且是你沒有的本事。你想想,老板搞經(jīng)營那么多年,難道見識(shí)不如你這個(gè)新兵?人家或許善于管理,善于領(lǐng)會(huì)老板意圖,善于部門協(xié)調(diào)等等。因此務(wù)必培養(yǎng)自己多方面的能力,包括管理,親和力,察言觀色能力,攻關(guān)能力等,要成為綜合素質(zhì)的高手,則前途無量,否則只能躲在角落看示波器!技術(shù)以外的技能才是更重要的本事!!從古到今,美國日本,一律如此!
      
        [4]多交社會(huì)三教九流的朋友!不要只和工程師交往,認(rèn)為有共同語言,其實(shí)更重要的是和其他類人物交往,如果你希望有朝一日當(dāng)老板或高層管理,那么你整日面對(duì)的就是這些人。了解他們的經(jīng)歷,思維習(xí)慣,愛好,學(xué)習(xí)他們處理問題的模式,了解社會(huì)各個(gè)角落的現(xiàn)象和問題,這是以后發(fā)展的巨大的本錢,沒有這些以后就會(huì)笨手笨腳,跌跌撞撞,遇到重重困難,交不少學(xué)費(fèi),成功的概率大大降低!   
      
        [5]知識(shí)涉獵不一定專,但一定要廣!多看看其他方面的書,金融,財(cái)會(huì),進(jìn)出口,稅務(wù),法律等等,為以后做一些積累,以后的用處會(huì)更大!會(huì)少交許多學(xué)費(fèi)!!    
      
        [6]抓住時(shí)機(jī)向技術(shù)管理或市場銷售方面的轉(zhuǎn)變!要想有前途就不能一直搞開發(fā),適當(dāng)時(shí)候要轉(zhuǎn)變?yōu)楣芾砘蜾N售,前途會(huì)更大,以前搞技術(shù)也沒有白搞,以后還用得著。搞管理可以培養(yǎng)自己的領(lǐng)導(dǎo)能力,搞銷售可以培養(yǎng)自己的市場概念和思維,同時(shí)為自己以后發(fā)展積累龐大的人脈!應(yīng)該說這才是前途的真正支柱!!!  
        [7]逐漸克服自己的心里弱點(diǎn)和性格缺陷!多疑,敏感,天真(貶義,并不可愛),猶豫不決,膽怯,多慮,臉皮太薄,心不夠黑,教條式思維。。。這些工程師普遍存在的性格弱點(diǎn)必須改變!很難嗎?只在床上想一想當(dāng)然不可能,去幫朋友守一個(gè)月地?cái)偅鼫?zhǔn)有效果,去實(shí)踐,而不要只想!不克服這些缺點(diǎn),一切不可能,甚至連項(xiàng)目經(jīng)理都當(dāng)不好--盡管你可能技術(shù)不錯(cuò)!       
      
        [8]工作的同時(shí)要為以后做準(zhǔn)備!建立自己的工作環(huán)境!及早為自己配置一個(gè)工作環(huán)境,裝備電腦,示波器(可以買個(gè)二手的),仿真器,編程器等,業(yè)余可以接點(diǎn)活,一方面接觸市場,培養(yǎng)市場感覺,同時(shí)也積累資金,更重要的是準(zhǔn)備自己的產(chǎn)品,咱搞技術(shù)的沒有錢,只有技術(shù),技術(shù)的代表不是學(xué)歷和證書,而是產(chǎn)品,拿出象樣的產(chǎn)品,就可技術(shù)轉(zhuǎn)讓或與人合作搞企業(yè)!先把東西準(zhǔn)備好,等待機(jī)會(huì),  否則,有了機(jī)會(huì)也抓不住!   
          
        [9]要學(xué)會(huì)善于推銷自己!不僅要能干,還要能說,能寫,善于利用一切機(jī)會(huì)推銷自己,樹立自己的品牌形象,很必要!要?jiǎng)?chuàng)造條件讓別人了解自己,不然老板怎么知道你能干?外面的投資人怎么相信你?提早把自己推銷出去,機(jī)會(huì)自然會(huì)來找你!搞個(gè)個(gè)人主頁是個(gè)好注意!!特別是培養(yǎng)自己在行業(yè)的名氣,有了名氣,高薪機(jī)會(huì)自不在話下,更重要的是有合作的機(jī)會(huì)...      
      
        [10]該出手時(shí)便出手!永遠(yuǎn)不可能有100%把握!!!條件差不多就要大膽去干,去闖出自己的事業(yè),不要猶豫,不要彷徨,干了不一定成功,但至少為下一次沖擊積累了經(jīng)驗(yàn),不干永遠(yuǎn)沒出息,而且要干成必然要經(jīng)歷失敗。不經(jīng)歷風(fēng)雨,怎么見彩虹,沒有人能隨隨便便成功!
    posted @ 2006-07-25 10:22 崛起的程序員 閱讀(213) | 評(píng)論 (1)編輯 收藏
    美國東部時(shí)間2004年9月29日早上10:58分(北京時(shí)間2004年9月29日晚10時(shí)58分),中國互聯(lián)網(wǎng)人才招聘服務(wù)網(wǎng)站51job(前程無憂)成功登陸美國納斯達(dá)克,開盤價(jià)為每存托股18.98美元,當(dāng)天收市價(jià)為21.15美元,比發(fā)行價(jià)每股14美元上漲51%。前程無憂此次共發(fā)行了604萬股美國存托股(ads),共籌得資金8453萬美元……作為51job的創(chuàng)始人之一,首席執(zhí)行長甄榮輝擁有公司30.6%的股份,是公司的第一大股東。”在國慶長假前的9月30日,國內(nèi)各大媒體、網(wǎng)站紛紛報(bào)道了上述消息。

    隨著前程無憂的成功上市,又一個(gè)十億(人民幣)級(jí)的富翁走進(jìn)了人們視線。也許人們津津樂道的是富豪們的身價(jià)排名,或是艷羨于他們“一夜暴富”的傳奇,但是,在故事中的主人公看來,“事實(shí)上,成功一點(diǎn)都不難!最難的是:想成功,但沒有計(jì)劃!如果你有一個(gè)5年或者10年的成功目標(biāo),而且能夠周密地計(jì)劃,堅(jiān)定地執(zhí)行,那么,因?yàn)橛?jì)劃,成功率還是很高的。”

    如果成功是能夠被計(jì)劃的,那么,出身于香港平民家庭的寒門“虎子”甄榮輝(1962年出生,屬虎)依靠清晰的人生定位、嚴(yán)謹(jǐn)?shù)穆殬I(yè)發(fā)展路徑計(jì)算、鍥而不舍的努力與堅(jiān)持,一步一步實(shí)現(xiàn)人生目標(biāo)的創(chuàng)富故事將是可以被復(fù)制的……懵懂少年初識(shí)愁滋味無知貪玩的少年第一次經(jīng)受了人生磨難,置之死地而后生的遭遇警醒了他內(nèi)心深處的精英夢;洗澡排隊(duì)、上廁所排隊(duì)、做飯排隊(duì),香港平民的生存環(huán)境給他上了人生第一課:做任何事必須把握好時(shí)間與效率,看準(zhǔn)了時(shí)機(jī)一定要毫不遲疑地沖上去。

    少年時(shí)期的甄榮輝并沒有顯露出大器將成的先兆,反而以“懶”著稱。

    1962年甄榮輝出生在香港一個(gè)最普通的平民家庭。其父母是從廣東“移居”到香港的,他和媽媽以及另外七八家20多口人“蜂居”在一套總面積不到80平米的公寓內(nèi),在這種高度擁擠狀況下,做飯要排隊(duì),洗澡要排隊(duì),上廁所也要排隊(duì)。做任何事必須要把握好時(shí)間與效率,這是家庭環(huán)境帶給甄榮輝的重要一課。

    炎熱的夏天是最難過的。為了排隊(duì)洗澡,他一放學(xué)就把洗漱用品準(zhǔn)備好,然后每隔5分鐘去洗澡間探查一次,一俟對(duì)方洗完走出房門,他一個(gè)箭步馬上就沖了進(jìn)去。生存的艱難,教育了一個(gè)十幾歲的孩子,一定要抓住機(jī)會(huì),看準(zhǔn)了時(shí)機(jī)一定要毫不遲疑地沖上去。就從“搶”洗澡室開始,甄榮輝小小年紀(jì)便有了競爭意識(shí)。

    因?yàn)楦改付济τ诖蚬赍X養(yǎng)家,沒有人顧及他的功課,于是那個(gè)時(shí)候的他每天回家把書包一扔就坐在沙發(fā)上看電視,然后看到很晚就去睡覺,盡可能地睡,一天睡16個(gè)小時(shí)。“我不是幾天,幾個(gè)月,而是幾年的時(shí)間我都在跟自己說,哎呀,你怎么可以這么懶呢?每天到睡覺的時(shí)候我也會(huì)自責(zé):今天一天又什么活也沒干!明天一定不能這樣!但是到了明天,依然還是看電視、睡覺,睡覺、看電視……”這樣懶的直接后果是,在1979年他中學(xué)會(huì)考時(shí),全香港30多家預(yù)科學(xué)校,沒有一家愿意要他,因?yàn)樗闹袑W(xué)實(shí)在太爛了。如果不能念預(yù)科,不能念大學(xué),對(duì)于他這樣一個(gè)毫無背景的平民家庭的孩子而言,前途是渺茫的。他第一次開始考慮前途問題,告訴自己:再苦再難一定要考上大學(xué)。“有一天我在烈日下排了很長很長的隊(duì)去報(bào)名,好不容易擠上去,人家一看我的中學(xué),皺皺眉說不要。拿著報(bào)名表出來,后面還有一大群人在排隊(duì)。在太陽下烤得太久,我都幾乎有些中暑了,但我還要打起精神去找下一所學(xué)校。我一邊打著出租車找學(xué)校,一邊告訴自己,如果過了這一關(guān),一定要努力讀書。”

    人是需要一些難關(guān)才會(huì)成長的。經(jīng)過這一次的打擊,甄榮輝的自我意識(shí)開始覺醒,他仿佛變了一個(gè)人似的,開始知道發(fā)奮努力了。最后,他進(jìn)入了一所位于偏遠(yuǎn)而荒涼的山上的預(yù)科學(xué)校。經(jīng)過1979年到1981年兩年預(yù)科的努力,他以優(yōu)異成績考入了香港中文大學(xué)工程系。
    小小工程師胸懷鴻鵠志

    香港這個(gè)成熟的商業(yè)社會(huì)教育他,走工程師的路很穩(wěn)定,但是不會(huì)有大的成功,而走商業(yè)的路,就像在滿布鯊魚的大海,游得快就會(huì)贏,否則會(huì)被吃掉。為了獲得更大的成功,他進(jìn)入hp香港公司,成為一名頂級(jí)sales。

    成長時(shí)期的磨難都是鍛煉。不管是從小學(xué)、中學(xué)還是高中,甄榮輝和他的同代人一樣,一直處于一種熙熙攘攘的競爭環(huán)境中,千軍萬馬要擠一條踏向成功的獨(dú)木橋。“所以,對(duì)于競爭來說,我從小也就習(xí)慣了。”

    在英國統(tǒng)治下的香港,甄榮輝接受的是英國精英教育的熏陶,一定要成為社會(huì)精英人士,爬上去了就是爬上去了。香港這個(gè)成熟的商業(yè)社會(huì)教給他的第一課,是讓他對(duì)商業(yè)的重要性有了認(rèn)識(shí),他的創(chuàng)業(yè)意識(shí)亦有所萌芽了。

    1984年甄榮輝大學(xué)畢業(yè)時(shí),大學(xué)組織了一次就業(yè)輔導(dǎo),有來自ibm sales的銷售總監(jiān)及香港電訊的總工程師來給學(xué)生講課。那時(shí)他想:如果我要成功的話,20年后我會(huì)是他們中的哪一位?了解他們的工作及看過當(dāng)場表現(xiàn)后,甄榮輝直覺上很想做sales的工作。“走工程師的路肯定是很穩(wěn)定,走商業(yè)的路,就好像在滿布鯊魚的大海,游得快就會(huì)贏,否則會(huì)被吃掉。”自信自己會(huì)游得快,向往有更大的成功,甄榮輝選擇了挑戰(zhàn)度高的商業(yè)工作,進(jìn)入hp的sales & marketing部門,成為一名銷售工程師。

    hp的工作薪水不錯(cuò)而且穩(wěn)定。他第一個(gè)月工資就是4900港元。甄榮輝似乎天生具有銷售才干,三年后,他就成為公司的銷售冠軍。而到第四年,他每天只需工作不到兩個(gè)小時(shí),就可以完成業(yè)績。“那個(gè)時(shí)候是蠻舒服的。因?yàn)槟阌幸慌罂蛻粼谀愕氖掷锩妫惆阉麄兯藕蚝昧耍@個(gè)客戶其實(shí)是很難丟掉的。”那時(shí)他每天十點(diǎn)鐘出去拜訪客戶,之后就沒事了,但他不敢回家,怕回家老媽操心說,你干嘛這么早回來,是不是給炒魷魚了?于是他就去電影院看電影,一個(gè)禮拜看兩三場電影,看到后來電影都沒得看了,就跑到圖書館睡覺。

    輕輕松松就能拿到30萬(港元)的年薪收入(包括銷售提成),而且作為銷售狀元,在hp的發(fā)展前景光明,這樣的環(huán)境是很多人所羨慕的,但是甄榮輝卻開始不滿足,覺得挑戰(zhàn)不夠大。“我分析自己的現(xiàn)狀,覺得這么發(fā)展下去,只有兩個(gè)選擇。一種選擇是改變自己,適應(yīng)環(huán)境。哎呀,你不要要求這么高了。還有一個(gè)就是改變環(huán)境。其實(shí)你會(huì)發(fā)現(xiàn)mba是一個(gè)很好的換環(huán)境的踏腳石。你可以在高科技公司里做事,你也可以去做咨詢管理顧問,或者是去投資銀行,還可以去消費(fèi)品行業(yè)工作……學(xué)一個(gè)mba可以給你好多路的。”甄榮輝決定放棄hp的工作去讀mba。


    “小聰明”贏得大機(jī)會(huì)

    mba畢業(yè)后的年薪將會(huì)在15萬美元以上,而且有機(jī)會(huì)成為企業(yè)高級(jí)管理人員。他放棄了hp30萬港元的年薪和穩(wěn)定而輕松的工作,將全部的積累用作mba學(xué)費(fèi)。他最終選擇去歐洲念書,“因?yàn)闅W洲學(xué)校只需要1年時(shí)間,不僅花錢少,而且還能早掙錢。”

    1984年加入hp時(shí),月工資是4900港元,當(dāng)甄榮輝1988年離開hp的時(shí)候,他的年薪達(dá)到30萬港元,他把在hp攢下的積蓄作為念mba的學(xué)費(fèi)。當(dāng)時(shí)他申請(qǐng)的是法國insead商學(xué)院。之所以選擇這所學(xué)校,是因?yàn)樗鼘W(xué)時(shí)只有一年,而且學(xué)校知名度并不遜于美國院校。“讀美國學(xué)校mba需要2年時(shí)間,而歐洲學(xué)校只需要1年時(shí)間。因此,去歐洲讀書不僅花錢少,而且還能早掙錢。”他是這樣計(jì)算的。

    當(dāng)他決定離開hp時(shí),他接受了平生第一次專訪,正是在那次訪問上,他第一次清晰表達(dá)了自己的人生愿望。“我記得是一份計(jì)算機(jī)周刊方面的雜志,他們到惠普來采訪銷售架構(gòu)。后來發(fā)現(xiàn)我是銷售冠軍,結(jié)果我又去念書,他們就來采訪我。他們問我的人生目標(biāo),我說我希望畢業(yè)20年以后成為一個(gè)企業(yè)高級(jí)管理人員。”那時(shí),他是25歲。

    要去法國念書,必須會(huì)法語,可是甄榮輝當(dāng)時(shí)沒有任何法語基礎(chǔ),他又一次要挑戰(zhàn)自己的極限了。他花了三個(gè)月來突擊強(qiáng)化法語,但是在考試那天,他依然沒有太多把握。不過,他發(fā)現(xiàn)法語考試主要是面試,由主考老師問幾個(gè)問題,時(shí)間大約為15至20分鐘。他擔(dān)心自己的語言不過關(guān),如果讓老師放開問,自己聽不懂再答不上來不就麻煩了!他事先準(zhǔn)備好20多分鐘的講演內(nèi)容。當(dāng)面試?yán)蠋熖岢龅谝粋€(gè)問題后,他就一口氣地回答下去,一直回答了20分鐘,根本沒有給主考老師提問下一個(gè)問題的工夫。結(jié)果,他就這樣通過了入學(xué)語言考試。

    勤奮成就百萬年薪經(jīng)理人

    “我要先在國外工作一段時(shí)間,看看國外公司是如何運(yùn)作的。而有國外工作的經(jīng)歷,即使以后回香港也能對(duì)我的簡歷更有幫助。”在四個(gè)不同的工作意向中,他最后選擇進(jìn)入貝恩國際策略顧問公司英國辦事處。

    mba畢業(yè)以后,甄榮輝面臨著幾種選擇:一是回香港工作,二是留在國外工作,或者加入高科技企業(yè),或者進(jìn)入咨詢管理公司。四個(gè)方向的工作他都有選擇的機(jī)會(huì),“我決定要先在國外工作一段時(shí)間,因?yàn)閯偝鰜硪荒昃突叵愀郏瑳]有機(jī)會(huì)看看國外是怎么運(yùn)作的,對(duì)我的簡歷可能也不是很有幫助。而選擇做咨詢,是因?yàn)樗容^新鮮,可以接觸不同的事情,見識(shí)面廣。”最后,他選擇了貝恩國際策略顧問公司(bain & company),先在其英國辦事處工作。

    盡管選擇進(jìn)入貝恩公司,對(duì)他是反復(fù)權(quán)衡之后的理性選擇,他很喜歡這份工作,但貝恩卻給了他一個(gè)下馬威。上班三天之后有一個(gè)項(xiàng)目匯報(bào)會(huì),他參加了這個(gè)兩小時(shí)的會(huì)議,卻發(fā)現(xiàn)有70%的內(nèi)容都聽不懂。連會(huì)議都聽不懂,還怎么開展工作?他給遠(yuǎn)在香港的媽媽打電話說可能很快要回香港了。在這次會(huì)議上的受“辱”經(jīng)歷給他以巨大的打擊,他明白自己還得要拼命努力,就像當(dāng)初考大學(xué),當(dāng)初學(xué)習(xí)法語一樣,愛拼才能贏。

    經(jīng)過半年的磨合,他發(fā)現(xiàn)和其他英國同事相比,語言是自己的短處,而分析推理能力是自己的長處。于是,甄榮輝把工作重點(diǎn)放到了項(xiàng)目調(diào)查方面,收集了大量數(shù)據(jù),進(jìn)行調(diào)查分析,并從中找出許多從前別人沒有看到的東西。最初,他的工作是咨詢顧問,當(dāng)他把事先經(jīng)過大量調(diào)查分析后的資料提供給項(xiàng)目經(jīng)理時(shí),項(xiàng)目經(jīng)理似乎驚呆了,因?yàn)楹苌儆幸粋€(gè)咨詢顧問工作像他那樣深入。慢慢地,所有貝恩英國公司的經(jīng)理們都點(diǎn)名要求甄榮輝加入他們的隊(duì)伍。正是由于這樣苦干加巧干,當(dāng)該年貝恩英國要裁員三分之一時(shí),他一個(gè)華人卻被保留下來。

    在加入貝恩兩年多后,甄榮輝順利地從咨詢顧問升到經(jīng)理。1991年他被派駐香港建立辦事處,業(yè)務(wù)發(fā)展迅速。很快,在他一手策劃下,貝恩又在北京開設(shè)了辦事處,他出任貝恩中國總裁。1994年,32歲的甄在加入貝恩4年半后,成為貝恩公司歷史上最年輕的副總裁以及最年輕的合伙人之一。這在“不up(提升)就out(離職)”、聰明人成堆的咨詢公司實(shí)屬難得。



    “億萬富翁夢”的誘惑

    做一個(gè)百萬年薪的職業(yè)經(jīng)理人,“薪水很高,職務(wù)也很穩(wěn)定”,但是永遠(yuǎn)不會(huì)成為有影響力的企業(yè)家。“中國未來20年高速發(fā)展的經(jīng)濟(jì)環(huán)境將造就一批百億級(jí)的富豪”,這一誘惑使得他不辭辛苦,屢次創(chuàng)業(yè)。

    “作咨詢顧問,每天接觸到不同的客戶,為不同的案子服務(wù)。今天你可能是被客戶用直升機(jī)直接接到他們公司總部的樓頂上,你感受了大公司的豪華氣派;明天你沒準(zhǔn)又要坐長途汽車在農(nóng)村奔波,與泥土牛糞為伴。二者的巨大差異,讓你深深感受到這個(gè)世界好像不公平。錢好像很重要,但是有些東西還不只是金錢帶來的差異。然后你就會(huì)想,人生到底追求什么呢?”在成為年薪百萬的財(cái)務(wù)自由人后,甄榮輝不再是那個(gè)為搶廁所而煞費(fèi)苦心的少年小伙,不再是因?yàn)橛绣X能多吃一碗飯而高興的大學(xué)生,不再是那個(gè)第一次擁有自己愛車而在雨中飆車的浪漫青年,他開始思考“人活著為什么”等哲學(xué)層面的問題,能夠做一些更有社會(huì)影響力的事情,成為他的追求目標(biāo)。

    在甄榮輝的記憶中,1995年的一段經(jīng)歷對(duì)他觸動(dòng)很大:“那時(shí)我正負(fù)責(zé)百威啤酒的項(xiàng)目,貝恩總部也過來了一個(gè)高級(jí)合伙人專門負(fù)責(zé)這個(gè)項(xiàng)目。我們陪著百威啤酒董事長august busch在中國各地考察,貝恩的高級(jí)合伙人從來沒來過中國,我全程陪同。有一天晚上,我們和老外在一起喝酒聊天,他們說在中國未來發(fā)展的二十年里面一定會(huì)出現(xiàn)十幾位十億美元家產(chǎn)的富翁。聽到這句話,我心中咯噔一下,因?yàn)槲乙郧皼]想過這個(gè)問題,但仔細(xì)一想覺得很有道理。香港在60年代到80年代的高速發(fā)展中,產(chǎn)生了十多個(gè)十億美元的大富翁,大陸未來20年的高速發(fā)展難道不能產(chǎn)生新的富翁嗎?你既然相信了在中國未來?0年會(huì)有幾十個(gè)富豪出現(xiàn),那你再想一想,自己還有機(jī)會(huì)排上嗎?”

    在大陸經(jīng)濟(jì)快速發(fā)展的大潮中,香港人甄榮輝做起了“億萬富翁夢”。對(duì)他而言,“這個(gè)出發(fā)點(diǎn)不是錢的問題,而是一種成就感。錢不一定就代表成就,但是在某種程度上還是反映了事業(yè)的成功,或者在市場上的影響力。”

    天上不會(huì)掉下餡餅,更不會(huì)掉下財(cái)富。要實(shí)現(xiàn)“億萬富翁”的理想,坐在辦公室等待,或者安于做一個(gè)朝九晚五的打工族肯定是不可能的,必須要投資,要?jiǎng)?chuàng)立自己的企業(yè)。去管理顧問公司的人一般做了兩三年就都想出來自己做事,甄榮輝最初其實(shí)也是有過創(chuàng)業(yè)的想法與嘗試。早在1991年,他就投資做了一種用聲音傳遞郵件的系統(tǒng),后來他還投資做過磁性材料等等,兩次創(chuàng)業(yè)均以失敗告終,但也使他學(xué)到了不少東西,“創(chuàng)業(yè)需要很大的精力,你必須全職去做;同時(shí),團(tuán)隊(duì)也很重要。”

    遭受過兩次創(chuàng)業(yè)失敗的打擊,如果不敢再嘗試,就此放棄,也就沒有今天的前程無憂以及今天的甄榮輝了。從失敗中總結(jié)出了一些經(jīng)驗(yàn)與教訓(xùn),1998年甄榮輝又開始嘗試新的投資項(xiàng)目——人力資源服務(wù)。

    互聯(lián)網(wǎng)創(chuàng)造了新機(jī)會(huì)

    互聯(lián)網(wǎng)經(jīng)濟(jì)的興起,給甄榮輝帶來新的機(jī)會(huì),風(fēng)險(xiǎn)投資成了最熱的話題。甄榮輝想借此良機(jī)把網(wǎng)站作大,決定引入風(fēng)險(xiǎn)投資。他為前程無憂網(wǎng)設(shè)計(jì)了一個(gè)美好的前程:引入投資、上市、做成國際品牌。

    1998年甄榮輝和他的創(chuàng)業(yè)伙伴成立了一家人力資源服務(wù)公司。

    之所以選擇這個(gè)領(lǐng)域,與他的一段經(jīng)歷分不開。1994年,當(dāng)時(shí)任貝恩公司中國區(qū)總裁的甄榮輝需要招募新人,他先在一份英文媒體上刊登了招聘信息,但效果很差。后來,經(jīng)北京同事指點(diǎn),他選擇了北京人愛看的一份當(dāng)?shù)孛襟w,結(jié)果反饋很好。但甄榮輝自己卻感到當(dāng)時(shí)報(bào)紙的印刷質(zhì)量太差。當(dāng)時(shí)香港的《南華早報(bào)》每周有多達(dá)200多頁的招聘專版,人力資源市場十分活躍。但是,比香港人口還多的北京卻沒有這樣一份專業(yè)的招聘紙媒體。他隱約找到了市場的需求空白。

    到了1998年,大陸的人才交流市場日趨活躍,無論是用人單位還是求職者個(gè)人,他們迫切需要一個(gè)更專業(yè)的、定位于白領(lǐng)青年的招聘渠道。市場已經(jīng)成熟!甄榮輝經(jīng)人介紹,和《中國貿(mào)易報(bào)》合作,首先在北京推出了《中國貿(mào)易報(bào).前程招聘專版》。北京《前程招聘專版》的推出,獲得了很大成功,受到了企業(yè)以及求職者的普遍歡迎。受到北京市場的啟發(fā)與鼓舞,甄榮輝和他的創(chuàng)業(yè)團(tuán)隊(duì),開始在全國復(fù)制北京模式。五年多,在全國19個(gè)城市與當(dāng)?shù)孛襟w合作,推出了針對(duì)當(dāng)?shù)厥袌龅摹肚俺陶衅笇0妗贰?br />
    1999年,互聯(lián)網(wǎng)經(jīng)濟(jì)正在全球興起,網(wǎng)絡(luò)給甄榮輝帶來了新的機(jī)遇。

    1999年1月,甄榮輝先在上海推出了career-post.com網(wǎng)站,當(dāng)然內(nèi)容只能算是《前程招聘專版》的電子版,是一些企業(yè)招聘信息的集納。1999年底,互聯(lián)網(wǎng)經(jīng)濟(jì)開始膨脹,風(fēng)險(xiǎn)投資成了最熱的話題。甄榮輝想借此良機(jī)把網(wǎng)站作大,決定引入風(fēng)險(xiǎn)投資。他為自己設(shè)計(jì)了一個(gè)美好的夢想:引入投資、上市、做成國際品牌。網(wǎng)站也因此易名為無憂工作網(wǎng)(51job.com)。無憂工作網(wǎng)的贏利模式十分符合中國國情,也受到國外風(fēng)險(xiǎn)投資者的青睞,很快,在2000年2月,一筆金額為1400萬美元的投資進(jìn)入了甄榮輝的創(chuàng)業(yè)公司。

    2000年以前,甄榮輝在前程無憂的角色還只是一個(gè)“天使投資人”,不參與具體的經(jīng)營管理。等到2000年1400萬美元的風(fēng)險(xiǎn)投資進(jìn)入后,公司發(fā)展需要他全力以赴地投入,這時(shí),他再次面臨著人生的選擇:是繼續(xù)做一個(gè)百萬美金年薪的打工皇帝,還是放棄眼前的舒適去做一個(gè)前途未卜的小公司的ceo,領(lǐng)取6萬美元的年薪?此時(shí),甄榮輝已經(jīng)37歲,在貝恩干了11年,如果繼續(xù)待下去,“薪水很高,職務(wù)也很穩(wěn)定”,但“那時(shí)就有些怕,覺得可能再干20年還是這樣”。同時(shí),互聯(lián)網(wǎng)的起飛讓他看到挑戰(zhàn)背后的巨大機(jī)會(huì):“在互聯(lián)網(wǎng)業(yè),即使你去年做得成功,過了一個(gè)年頭必須重新洗牌。這種充滿刺激的感覺很過癮。可以贏得很大,也可以輸?shù)煤艽螅耆醋约旱臋C(jī)遇與功力。”

    2000年4月,甄榮輝經(jīng)過慎重考慮,決定離開貝恩,出任前程無憂ceo。

    做中國人的ge公司

    也許你看不清路,但你能看得見那里有一座山,那就是你的目標(biāo)。我一直相信人才服務(wù)這塊業(yè)務(wù)有前景,我相信我們有一天是能做到10億美元的;我希望有一天,前程能像ge公司那樣成為行業(yè)典范,影響更多的中國企業(yè)乃至跨國企業(yè)。

    甄榮輝認(rèn)為他的成功“一半是運(yùn)氣,一半是努力”。一直有好運(yùn)氣的甄這次也不例外。

    2000年2月,前程無憂的1400萬美元風(fēng)險(xiǎn)投資到位,而到了2000年4月,網(wǎng)絡(luò)經(jīng)濟(jì)的泡沫開始破滅,很多創(chuàng)業(yè)網(wǎng)站不能再在投資市場上拿到錢了。而有了這筆投資,前程無憂卻獲得一個(gè)空間去慢慢成長。“有了這幾年的時(shí)間給我們成長,我們可以把我們的規(guī)模做大,把我們的管理做好,把我們的市場地位鞏固。”中國的人才市場正處在發(fā)育階段,機(jī)會(huì)無限,前程無憂得以隨著中國人才市場的成熟而成長,在甄榮輝看來,“這是非常幸運(yùn)、非常快意的事”。

    前程無憂的發(fā)展,其實(shí)并非一帆風(fēng)順,也有過十分艱難的時(shí)候。2000年、2001年網(wǎng)絡(luò)泡沫破滅,全球經(jīng)濟(jì)放緩,9.11事件后眾多跨國企業(yè)招聘計(jì)劃凍結(jié),2003年又遇到sars事件,形勢似乎從來不是一片光明。在最艱難的時(shí)候,甄榮輝有沒有過后悔,有沒有想過放棄?

    “我們知道人才服務(wù)這一塊肯定是值得做的,即使最早在北京的東花市小學(xué)起步的時(shí)候我們也看得見。香港《南華早報(bào)》的招聘周刊有200多頁,我們的《前程招聘專版》到現(xiàn)在還沒有發(fā)展到200多頁。所以,我知道成功的機(jī)會(huì)肯定是有的,而且這個(gè)機(jī)會(huì)只有在中國才能找到。日本的人才網(wǎng)站每年幾十個(gè)億美元的營業(yè)收入,我相信我們有一天是能做十億美元的。但是你說是哪一天呢,我也說不出來。你說到底有多長時(shí)間呢,你到底要做多少東西才能得到呢,這個(gè)可能是摸著石頭過河。但是信心我是一直有的。”甄榮輝從來沒有懷疑過自己的選擇。

    據(jù)新浪財(cái)經(jīng)報(bào)告顯示:從1999年到2002年的三年間,前程無憂營業(yè)收入就增長了25倍。到2002年,整個(gè)財(cái)年度實(shí)現(xiàn)盈利,銷售收入約2000萬美元,2003年銷售收入為3544萬美元,增長77%。2004年前三季度銷售收入為4386萬美元,較去年同期增長80%。“我們不斷加快速度開設(shè)辦事處,現(xiàn)在已在全國20個(gè)城市開設(shè)有分公司或辦事處;我們又不斷開發(fā)新產(chǎn)品,為客戶提供招聘獵頭、培訓(xùn)測評(píng)和人事外包等十多項(xiàng)專業(yè)的人力資源服務(wù)……我們的產(chǎn)品線很長,服務(wù)很深入,和客戶的聯(lián)系緊密。這就是我們的競爭優(yōu)勢。”

    四年前甄榮輝放棄貝恩的百萬年薪而出任前程無憂6萬年薪的ceo時(shí),他的計(jì)劃是將51job運(yùn)作上市,但這只是一個(gè)開始,他心中還有一個(gè)更宏偉的夢想——要做一間中國人的ge公司。在甄榮輝理想中,“當(dāng)企業(yè)成為一個(gè)行業(yè)或企業(yè)群里的典范,它的影響力可以超過它規(guī)模的數(shù)倍甚至數(shù)十倍。譬如ge公司,它的影響力是全球的,經(jīng)營ge不再是經(jīng)營一個(gè)企業(yè)那么簡單,它在經(jīng)營企業(yè)人的思想,它在與世人分享領(lǐng)先的管理經(jīng)驗(yàn)。現(xiàn)在,前程無憂還很小,但我希望有一天,前程能像ge公司那樣成為行業(yè)典范,影響更多的中國企業(yè)乃至跨國企業(yè)。”

    這不是一個(gè)5年10年的工程,20年夠不夠呢?“在我退休之前,我希望能夠?qū)崿F(xiàn)這個(gè)愿望。”甄榮輝又開始了一個(gè)新的人生計(jì)劃!
    posted @ 2006-07-25 10:22 崛起的程序員 閱讀(383) | 評(píng)論 (0)編輯 收藏

    對(duì)synchronized(this)的一些理解
    ?
    一、當(dāng)兩個(gè)并發(fā)線程訪問同一個(gè)對(duì)象object中的這個(gè)synchronized(this)同步代碼塊時(shí),一個(gè)時(shí)間內(nèi)只能有一個(gè)線程得到執(zhí)行。另一個(gè)線程必須等待當(dāng)前線程執(zhí)行完這個(gè)代碼塊以后才能執(zhí)行該代碼塊。

    ?

    二、然而,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),另一個(gè)線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。

    ?

    三、尤其關(guān)鍵的是,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),其他線程對(duì)object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。

    ?

    四、第三個(gè)例子同樣適用其它同步代碼塊。也就是說,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),它就獲得了這個(gè)object的對(duì)象鎖。結(jié)果,其它線程對(duì)該object對(duì)象所有同步代碼部分的訪問都被暫時(shí)阻塞。

    ?

    五、以上規(guī)則對(duì)其它對(duì)象鎖同樣適用.

    ?

    舉例說明:

    ?

    一、當(dāng)兩個(gè)并發(fā)線程訪問同一個(gè)對(duì)象object中的這個(gè)synchronized(this)同步代碼塊時(shí),一個(gè)時(shí)間內(nèi)只能有一個(gè)線程得到執(zhí)行。另一個(gè)線程必須等待當(dāng)前線程執(zhí)行完這個(gè)代碼塊以后才能執(zhí)行該代碼塊。

    ?

    package ths;

    public class Thread1 implements Runnable {
    public void run() {
    synchronized(this) {
    for (int i = 0; i < 5; i++) {
    System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);
    }
    }
    }
    public static void main(String[] args) {
    Thread1 t1 = new Thread1();
    Thread ta = new Thread(t1, "A");
    Thread tb = new Thread(t1, "B");
    ta.start();
    tb.start();
    }
    }

    ?

    結(jié)果:

    ?

    A synchronized loop 0
    A synchronized loop 1
    A synchronized loop 2
    A synchronized loop 3
    A synchronized loop 4
    B synchronized loop 0
    B synchronized loop 1
    B synchronized loop 2
    B synchronized loop 3
    B synchronized loop 4

    ?

    二、然而,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),另一個(gè)線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。

    ?

    package ths;

    public class Thread2 {
    public void m4t1() {
    synchronized(this) {
    int i = 5;
    while( i-- > 0) {
    System.out.println(Thread.currentThread().getName() + " : " + i);
    try {
    Thread.sleep(500);
    } catch (InterruptedException ie) {
    }
    }
    }
    }
    public void m4t2() {
    int i = 5;
    while( i-- > 0) {
    System.out.println(Thread.currentThread().getName() + " : " + i);
    try {
    Thread.sleep(500);
    } catch (InterruptedException ie) {
    }
    }
    }
    public static void main(String[] args) {
    final Thread2 myt2 = new Thread2();
    Thread t1 = new Thread(
    new Runnable() {
    public void run() {
    myt2.m4t1();
    }
    }, "t1"
    );
    Thread t2 = new Thread(
    new Runnable() {
    public void run() {
    myt2.m4t2();
    }
    }, "t2"
    );
    t1.start();
    t2.start();
    }
    }

    ?

    結(jié)果:

    ?

    t1 : 4
    t2 : 4
    t1 : 3
    t2 : 3
    t1 : 2
    t2 : 2
    t1 : 1
    t2 : 1
    t1 : 0
    t2 : 0

    ?

    三、尤其關(guān)鍵的是,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),其他線程對(duì)object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。

    ?

    //修改Thread2.m4t2()方法:

    public void m4t2() {
    synchronized(this) {
    int i = 5;
    while( i-- > 0) {
    System.out.println(Thread.currentThread().getName() + " : " + i);
    try {
    Thread.sleep(500);
    } catch (InterruptedException ie) {
    }
    }
    }

    }

    ?

    結(jié)果:

    ?

    t1 : 4
    t1 : 3
    t1 : 2
    t1 : 1
    t1 : 0
    t2 : 4
    t2 : 3
    t2 : 2
    t2 : 1
    t2 : 0

    ?

    四、第三個(gè)例子同樣適用其它同步代碼塊。也就是說,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),它就獲得了這個(gè)object的對(duì)象鎖。結(jié)果,其它線程對(duì)該object對(duì)象所有同步代碼部分的訪問都被暫時(shí)阻塞。

    ?

    //修改Thread2.m4t2()方法如下:

    public synchronized void m4t2() {
    int i = 5;
    while( i-- > 0) {
    System.out.println(Thread.currentThread().getName() + " : " + i);
    try {
    Thread.sleep(500);
    } catch (InterruptedException ie) {
    }
    }
    }

    ?

    結(jié)果:

    ?

    t1 : 4
    t1 : 3
    t1 : 2
    t1 : 1
    t1 : 0
    t2 : 4
    t2 : 3
    t2 : 2
    t2 : 1
    t2 : 0

    ?

    五、以上規(guī)則對(duì)其它對(duì)象鎖同樣適用:

    ?

    package ths;

    public class Thread3 {
    class Inner {
    private void m4t1() {
    int i = 5;
    while(i-- > 0) {
    System.out.println(Thread.currentThread().getName() + " : Inner.m4t1()=" + i);
    try {
    Thread.sleep(500);
    } catch(InterruptedException ie) {
    }
    }
    }
    private void m4t2() {
    int i = 5;
    while(i-- > 0) {
    System.out.println(Thread.currentThread().getName() + " : Inner.m4t2()=" + i);
    try {
    Thread.sleep(500);
    } catch(InterruptedException ie) {
    }
    }
    }
    }
    private void m4t1(Inner inner) {
    synchronized(inner) { //使用對(duì)象鎖
    inner.m4t1();
    }
    }
    private void m4t2(Inner inner) {
    inner.m4t2();
    }
    public static void main(String[] args) {
    final Thread3 myt3 = new Thread3();
    final Inner inner = myt3.new Inner();
    Thread t1 = new Thread(
    new Runnable() {
    public void run() {
    myt3.m4t1(inner);
    }
    }, "t1"
    );
    Thread t2 = new Thread(
    new Runnable() {
    public void run() {
    myt3.m4t2(inner);
    }
    }, "t2"
    );
    t1.start();
    t2.start();
    }
    }

    ?

    結(jié)果:

    盡管線程t1獲得了對(duì)Inner的對(duì)象鎖,但由于線程t2訪問的是同一個(gè)Inner中的非同步部分。所以兩個(gè)線程互不干擾。

    ?

    t1 : Inner.m4t1()=4
    t2 : Inner.m4t2()=4
    t1 : Inner.m4t1()=3
    t2 : Inner.m4t2()=3
    t1 : Inner.m4t1()=2
    t2 : Inner.m4t2()=2
    t1 : Inner.m4t1()=1
    t2 : Inner.m4t2()=1
    t1 : Inner.m4t1()=0
    t2 : Inner.m4t2()=0

    ?

    現(xiàn)在在Inner.m4t2()前面加上synchronized:

    ?

    private synchronized void m4t2() {
    int i = 5;
    while(i-- > 0) {
    System.out.println(Thread.currentThread().getName() + " : Inner.m4t2()=" + i);
    try {
    Thread.sleep(500);
    } catch(InterruptedException ie) {
    }
    }
    }

    ?

    結(jié)果:

    盡管線程t1與t2訪問了同一個(gè)Inner對(duì)象中兩個(gè)毫不相關(guān)的部分,但因?yàn)閠1先獲得了對(duì)Inner的對(duì)象鎖,所以t2對(duì)Inner.m4t2()的訪問也被阻塞,因?yàn)閙4t2()是Inner中的一個(gè)同步方法。

    ?

    t1 : Inner.m4t1()=4
    t1 : Inner.m4t1()=3
    t1 : Inner.m4t1()=2
    t1 : Inner.m4t1()=1
    t1 : Inner.m4t1()=0
    t2 : Inner.m4t2()=4
    t2 : Inner.m4t2()=3
    t2 : Inner.m4t2()=2
    t2 : Inner.m4t2()=1
    t2 : Inner.m4t2()=0

    posted @ 2006-07-19 10:55 崛起的程序員 閱讀(309) | 評(píng)論 (0)編輯 收藏

    Configuration cfg = new Configuration().configure("/hibernate.cfg.xml");

    ??for (Iterator iter = cfg.getTableMappings(); iter.hasNext();) {
    ???Table table = (Table) iter.next();
    ???for (Iterator iterator = table.getColumnIterator(); iterator.hasNext();) {

    ????Column column = (Column) iterator.next();
    ????System.out.println(column.getName());
    ???}

    ??}

    posted @ 2006-07-17 11:39 崛起的程序員 閱讀(433) | 評(píng)論 (0)編輯 收藏
         摘要: Spring Aop Step-By-Step 學(xué)習(xí)筆記(上) ?www.uusam.com ? 最近由于工作需要,要求掌握關(guān)于 Spring 方面的東西。所以花了兩個(gè)星期的時(shí)間來學(xué)習(xí) Spring 的基本知識(shí),主要包括 Ioc ...  閱讀全文
    posted @ 2006-07-05 17:26 崛起的程序員 閱讀(350) | 評(píng)論 (0)編輯 收藏
    MRX3F-47B9T-2487J-KWKMF-RPWBY(VOL 中國工商銀行版)
    QC986-27D34-6M3TY-JJXP9-TBGMD
    DG8FV-B9TKY-FRT9J-6CRCC-XPQ4G(VOL 上海政府專用)
    使用XP修改器修改成為以上任意一個(gè)序列號(hào)。修改完成后到如下地址驗(yàn)證是否通過,優(yōu)先選擇中國工商銀行版本,有的xp使用上海政府專用的序列號(hào)不行。
    http://www.microsoft.com/genuine/downloads/WhyValidate.aspx?displaylang=zh-cn


    驗(yàn)證結(jié)束!

    感謝您驗(yàn)證 Microsoft Windows 軟件。


    感謝您使用 Windows 正版增值計(jì)劃 計(jì)劃。現(xiàn)在您可以訪問正版 Windows 用戶資源。


    驗(yàn)證成功后,可以下載更新安裝Media Player 11 和 IE7。
    posted @ 2006-07-05 15:31 崛起的程序員 閱讀(2987) | 評(píng)論 (1)編輯 收藏
    主站蜘蛛池模板: 亚洲中文字幕一二三四区| 最近2019免费中文字幕6| 四只虎免费永久观看| 亚洲啪啪免费视频| 91大神免费观看| 亚洲VA中文字幕无码一二三区| 一本岛v免费不卡一二三区| 免费一级大黄特色大片| 亚洲va中文字幕| 久久久久久国产精品免费免费| 中文字幕亚洲综合久久| 久久这里只精品99re免费| 亚洲理论电影在线观看| a在线视频免费观看在线视频三区| 国产人妖ts在线观看免费视频| 亚洲经典千人经典日产| 成人免费午夜视频| 亚洲国产系列一区二区三区| 国色精品卡一卡2卡3卡4卡免费| 亚洲精品视频免费看| 最近中文字幕免费2019| 久久久久亚洲av无码专区导航| 久久精品国产大片免费观看| 亚洲AV午夜成人片| 桃子视频在线观看高清免费视频| 亚洲国产精品一区二区久久hs| 国产成年无码久久久免费| 亚洲精品夜夜夜妓女网| 最近免费字幕中文大全| 国产精品国产亚洲精品看不卡| 免费观看久久精彩视频 | 亚洲成色在线综合网站| 91免费福利视频| 亚洲精品国产精品乱码不卡√| 免费一级毛片在线播放视频| 亚洲第一福利视频| 久久成人国产精品免费软件| ass亚洲**毛茸茸pics| 成人免费无毒在线观看网站 | 亚洲三级高清免费| 国产成人亚洲综合网站不卡|