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

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

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

    Rising Sun

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      148 隨筆 :: 0 文章 :: 22 評(píng)論 :: 0 Trackbacks

    #

     The VMware vSphere Web Services SDK includes all the components necessary to work with the VMware vSphere API, including WSDL files, sample code, and libraries. The vSphere Web Services SDK facilitates development of client applications that target the VMware vSphere API. With the vSphere Web Services SDK, developers can create client applications to manage, monitor, and maintain VMware vSphere components, as deployed on VMware®VMware vSphere®ESX®, ESXi™, and VMware®vCenter™ Server systems.

    這是官方對(duì)vSphere Web Services SDK的介紹,簡單來說就是提供了管理vcenter,ESXi的程序接口,目前支持JAVA和.NET平臺(tái),下面以windows 7平臺(tái)為例,介紹JAVA開發(fā)環(huán)境的部署過程

    一、開發(fā)環(huán)境準(zhǔn)備

    1、安裝JAVA開發(fā)環(huán)境 J2SE 1.6 b22

    http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u22-oth-JPR

    安裝到c:\java下,不要安裝到C:\program files下,目錄中有空格,執(zhí)行腳本的時(shí)候會(huì)報(bào)錯(cuò)

     

    2、安裝SOAP工具JAX-WS2.1

    http://jax-ws.java.net/2.1.1/index.html

    雙擊安裝即可

     

    3、下載vSphere Web Services SDK 5.1

    http://communities.vmware.com/community/vmtn/developer/downloads

    解壓到c:\devprojects下

     

    二、開發(fā)環(huán)境配置

    1、設(shè)置系統(tǒng)變量

    JAVA_HOME=C:\java\jdk1.6.0_22

    JAVAHOME=C:\java\jdk1.6.0_22

    SDKHOME=C:\devprojects

    VMKEYSTORE=C:\VMware-Certs\vmware.keystore(稍后介紹安裝過程)

    WEBHOME=C:\devprojects\vsphere-ws\java\Axis\lib\wbem.jar

    WS_SDK_HOME=C:\devprojects\SDK\vsphere-ws

    CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;C:\devprojects\SDK\vsphere-ws\java\JAXWS\lib\samples.jar;C:\devprojects\SDK\vsphere-ws\java\JAXWS\lib\vim25.jar(這個(gè)變量很重要)

     

    2、服務(wù)器認(rèn)證

    2.1、將ESX Server或Vcenter的證書導(dǎo)入本機(jī),ESXi的證書在/etc/vmware/ssl/rui.crt;Vcenter的證書在C:/Documents and Settings/All Users/Application Data/VMware/VMware VitualCenter/SSL/rui.crt

    2.2、證書拷貝到本機(jī)的C:/VMware-Certs目錄下,打開windows7的命令行界面,切換到C:/VMware-Certs目錄下,使用jdk的keytool工具導(dǎo)入證書:

    keytool -import -file <certificate-filename> -alias <server-name> -keystore vmware.keystore

    其中certificate-filename為rui.crt,service-name可以為服務(wù)器的機(jī)器名或IP地址,運(yùn)行成功后會(huì)在C:/VMware-Certs目錄下生成vmware.keystore文件。

     

    3、重新編譯JAX-WS

    如果你的安裝的版本不是JDK 1.6 b22或者SOAP不是用 JAX-WS2.1,就需要重新編譯

    打開CMD,切換到C:\devprojects\SDK\vsphere-ws\java\JAXWS\

    運(yùn)行build.bat

    運(yùn)行成功會(huì)出現(xiàn)會(huì)出現(xiàn)

    Generating stubs from wsdl
     
    Compiling stubs.
    ...
    Done
     
    三、運(yùn)行簡單的客戶端腳本以驗(yàn)證安裝成功
     
    打開CMD,切換到C:\devprojects\SDK\vsphere-ws\java\JAXWS\
     
    run.bat com.vmware.general.SimpleClient --urlhttps://yourFQDNservername/sdk --username  username --password password,如下輸出表示配置SDK成功
     
     
     
    四、錯(cuò)誤調(diào)試
    1、如果出現(xiàn)找不到類的錯(cuò)誤,ClassNotFoundException:........,可以這樣
     
    打開CMD,切換到C:\devprojects\SDK\vsphere-ws\java\JAXWS\
     
    java -Djavax.net.ssl.trustStore=%VMKEYSTORE% com.vmware.general.SimpleClient--url https://example.com/sdk --username pubs --password ***
     
    2、如果提示JAVA虛擬機(jī)的內(nèi)存不夠,可以這樣
     
    java -Djavax.net.ssl.trustStore=%VMKEYSTORE% -Xms 512M -XMx1024M com.vmware.general.SimpleClient--url https://example.com/sdk --username pubs --password ***
    posted @ 2013-07-31 18:41 brock 閱讀(890) | 評(píng)論 (0)編輯 收藏

    BIND-DLZ實(shí)驗(yàn):http://bind-dlz.sourceforge.net/
    實(shí)驗(yàn)環(huán)境:RHEL4,BIND-9.5.0-P2.tar.gz(9.4.0以上版本都已含DLZ補(bǔ)丁),Mysql-5.0.56.tar.gz
    1、安裝mysql(先安裝gcc等相關(guān)軟件包)
       #tar zxvf mysql-5.0.56.tar.gz 
       #cd mysql-5.0.56
       #./configure --prefix=/usr/local/mysql --localstatedir=/usr/loal/mysql/data --   libexecdir=/usr/local/mysql/lib --disable-shared
       #make
       #make install
       #cd /usr/local/mysql/
       #groupadd -g 1003 mysql
       #useradd -g 1003 mysql
       #chown -R mysql .
       #chgrp -R mysql .
       #chown -R mysql lib
       #./bin/mysql_install_db --user=mysql //以mysql的用戶身份安裝
       #chown -R root .
       #./bin/mysqld_safe --user=mysql & //在后臺(tái)啟動(dòng)mysql

    # cd /root/mysql-5.0.56
    # cp support-files/my-medium.cnf /etc/my.cnf
    # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    # chmod 700 !$
    # chkconfig --add mysqld
    # chkconfig --list mysqld
      mysqld 1:off 2:on 3:on 4:on 5:on 6:off
    # service mysqld start[restart/reload/stop]
    # vi /etc/my.cnf
     add this:(
    防止mysql服務(wù)器無查詢后8小時(shí)自動(dòng)重連)
    wait_timeout = 86400

    interactive_timeout = 86400

       #/usr/local/mysql/bin/mysqladmin -uroot password 'aptech'
       #./bin/mysql -uroot -paptech
       #echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
       #. !$
      
    2、安裝bind
       #tar zxvf bind-9.5.0-P2.tar.gz 
       #cd bind-9.5.0-P2
       #./configure --prefix=/usr/local/bind9 --with-dlz-mysql=/usr/local/mysql --enable-threads=no
       //--with-dlz-mysql=/usr/local/mysql 要求bind安裝中支持DLZ
       //--enable-threads=no 關(guān)閉多線程 
       //--disable-openssl-version-check 禁止openssl版本的檢查
       #make
       #make install

    3、創(chuàng)建database,table
       create database mydata;
       use mydata;
       create table other_dns_records(
       zone varchar(255),
       host varchar(255),
       type varchar(255),
       data varchar(255),
       ttl int(11),
       mx_priority varchar(255), 
       refresh int(11),
       retry int(11),
       expire int(11),
       minimum int(11),
       serial bigint(11),
       resp_person varchar(255), 
       primary_ns varchar(255));
     
       create table cnc_dns_records(
       host varchar(255),
       type varchar(255),
       data varchar(255),
       ttl int(11),
       mx_priority varchar(255), 
       refresh int(11),
       retry int(11),
       expire int(11),
       minimum int(11),
       serial bigint(11),
       resp_person varchar(255), 
       primary_ns varchar(255));
      
       insert other_dns_records(zone,host,type,data,ttl,retry)
       values('aaa.com','www','A','192.168.199.2','86400','13');
       insert cnc_dns_records(zone,host,type,data,ttl,retry)
       values('bbb.com','www','A','192.55.199.199','86400','13');
    4、編輯/usr/local/bind9/etc/named.conf
       #cd /usr/local/bind9/etc
       #../sbin/rndc-confgen -a
       #../sbin/rndc-confgen > named.conf
       #vi !$   //vi named.conf
       #less named.conf
     # Use with the following in named.conf, adjusting the allow list as needed:
     key "rndc-key" {
            algorithm hmac-md5;
            secret "c4aUV+N7GbOF773V+/LnAA==";
     };
     
     controls {
            inet 127.0.0.1 port 953
                    allow { 127.0.0.1; } keys { "rndc-key"; };
     };
    # End of named.conf
    options {
    directory "/usr/local/bind9/etc/";
    pid-file "/usr/local/bind9/var/run/named.pid";
    allow-query { any; };
    recursion no;
    version "gaint-d1";
    };
    include "/usr/local/bind9/etc/cnc.cl";
    include "/usr/local/bind9/etc/other.cl";
    view "cnc-user" {
    match-clients { cnc; };
    dlz "Mysql zone" {
    database "mysql
    {host=localhost dbname=mydata ssl=false port=3306 user=root pass=aptech}
    {select zone from cnc_dns_records where zone = '%zone%'}
    {select ttl, type, mx_priority, case when lower(type)='txt' then concat('/"', data, 
    '/"')
    when lower(type) = 'soa' then concat_ws('
    ', data, resp_person, serial, refresh, retry, expire, minimum) else data end as mydata from
    cnc_dns_records where zone = '%zone%' and host = '%record%'}";
    };
    };
    view "other-user" {
    match-clients { other; };
    dlz "Mysql zone" {
    database "mysql
    {host=localhost dbname=mydata ssl=false port=3306 user=root pass=aptech}
    {select zone from other_dns_records where zone='%zone%'}
    {select ttl, type, mx_priority, case when lower(type) = 'txt' then concat('/"', data, 
    '/"')
    when lower(type)='soa' then concat_ws('
    ', data, resp_person, serial, refresh, retry, expire, minimum) else data end as mydata from
    other_dns_records where zone = '%zone%' and host = '%record%'}";
    };
    };
    [root@dlz etc]# less cnc.cl 
    acl "cnc"{
    192.168.9.0/24;
    };
    [root@dlz etc]# less other.cl 
    acl "other" {
    127.0.0.0/18;
    };
     
    5、啟動(dòng)&測試
    [root@dlz ~]# /usr/local/bind9/sbin/named -gc  /usr/local/bind9/etc/named.conf
    06-Mar-2009 22:23:02.569 starting BIND 9.5.0-P2 -gc /usr/local/bind9/etc/named.conf
    06-Mar-2009 22:23:02.579 loading configuration from '/usr/local/bind9/etc/named.conf'
    06-Mar-2009 22:23:02.583 listening on IPv4 interface lo, 127.0.0.1#53
    06-Mar-2009 22:23:02.586 listening on IPv4 interface eth0, 192.168.1.5#53
    06-Mar-2009 22:23:02.588 Loading 'Mysql zone' using driver mysql
    06-Mar-2009 22:23:02.604 default max-cache-size (33554432) applies: view cnc-user
    06-Mar-2009 22:23:02.609 Loading 'Mysql zone' using driver mysql
    06-Mar-2009 22:23:02.612 default max-cache-size (33554432) applies: view other-user
    06-Mar-2009 22:23:02.616 default max-cache-size (33554432) applies: view _bind
    06-Mar-2009 22:23:02.621 command channel listening on 127.0.0.1#953
    06-Mar-2009 22:23:02.621 ignoring config file logging statement due to -g option
    06-Mar-2009 22:23:02.623 running
    posted @ 2013-07-31 18:40 brock 閱讀(345) | 評(píng)論 (0)編輯 收藏

         摘要: Spring的事務(wù)管理難點(diǎn)剖析(7):數(shù)據(jù)連接泄漏底層連接資源的訪問問題    對(duì)于應(yīng)用開發(fā)者來說,數(shù)據(jù)連接泄漏無疑是一個(gè)可怕的夢(mèng)魘。只要你開發(fā)的應(yīng)用存在數(shù)據(jù)連接泄漏的問題,應(yīng)用程序最終都將因數(shù)據(jù)連接資源的耗盡而崩潰,甚至還可能引起數(shù)據(jù)庫的崩潰。數(shù)據(jù)連接泄漏像一個(gè)黑洞那樣讓開發(fā)者避之唯恐不及。    Spring DAO對(duì)所有支持的數(shù)據(jù)訪...  閱讀全文
    posted @ 2013-05-29 09:53 brock 閱讀(1019) | 評(píng)論 (0)編輯 收藏

    癥狀:系統(tǒng)運(yùn)行了一段時(shí)間報(bào)錯(cuò):java.sql.SQLException: ORA-01000: 超出打開游標(biāo)的最大數(shù)

    step 1:
        查看數(shù)據(jù)庫當(dāng)前的游標(biāo)數(shù)配置slqplus:show parameter open_cursors;

    step 2:
        查看游標(biāo)使用情況:
    select o.sid, osuser, machine, count(*) num_curs
    from v$open_cursor o, v$session s
    where user_name = 'user' and o.sid=s.sid
    group by o.sid, osuser, machine
    order by  num_curs desc;
    此處的user_name='user'中,user代表占用數(shù)據(jù)庫資源的數(shù)據(jù)庫用戶名.

    step 3:
        查看游標(biāo)執(zhí)行的sql情況:

    select o.sid q.sql_text
    from v$open_cursor o, v$sql q
    where q.hash_value=o.hash_value and o.sid = 123;

    step 4:
        根據(jù)游標(biāo)占用情況分析訪問數(shù)據(jù)庫的程序在資源釋放上是否正常,如果程序釋放資源沒有問題,則加大游標(biāo)數(shù)。
        alter system set open_cursors=2000 scope=both;
        
        補(bǔ)充:在java代碼中,執(zhí)行conn.createStatement()和conn.prepareStatement()的時(shí)候,實(shí)際上都是相當(dāng)與在數(shù)據(jù)庫中打開了一個(gè)cursor。尤其是,如果你的createStatement和prepareStatement是在一個(gè)循環(huán)里面的話,就會(huì)非常容易出現(xiàn)這個(gè)問題。因?yàn)橛螛?biāo)一直在不停的打開,而且沒有關(guān)閉。
         一般來說,我們?cè)趯慗ava代碼的時(shí)候,createStatement和prepareStatement都應(yīng)該要放在循環(huán)外面,而且使用了這些Statment后,及時(shí)關(guān)閉。最好是在執(zhí)行了一次executeQuery、executeUpdate等之后,如果不需要使用結(jié)果集(ResultSet)的數(shù)據(jù),就馬上將Statment關(guān)閉,調(diào)用close()方法。

    posted @ 2013-05-29 09:53 brock 閱讀(194) | 評(píng)論 (0)編輯 收藏

         摘要: http://vc.hsly0559.cn/c/20111216_957.html首先,馬云坑到了很多錢。。。所以確實(shí)有一批大神在為他干活  其次,現(xiàn)在阿里系出來又是出書又是演講跳大神裝B。。不是牛人。。給我的感覺。。跳梁小丑一樣,給后端的牛人抹黑,我實(shí)在看不習(xí)慣  第三,最近關(guān)于Tengine的討論很火,簡單看了下,在大流量下確實(shí)表現(xiàn)不錯(cuò),而且據(jù)說可以過濾掉一些攻擊或類似攻擊流量,這是其宣稱的特...  閱讀全文
    posted @ 2013-05-16 16:54 brock 閱讀(323) | 評(píng)論 (0)編輯 收藏

    1 做產(chǎn)品經(jīng)理,而不是功能經(jīng)理;

    2 做產(chǎn)品需求,而不是用戶需求;

    要錦上添花,而不是畫蛇添足;

    追求人性化,而不是追求完美。

     

    產(chǎn)品經(jīng)理是個(gè)很奇怪的崗位,好像大多數(shù)人都能做,因?yàn)槊總€(gè)人對(duì)某個(gè)產(chǎn)品都有自己的看法,都能提出一些意見和想法,甚至能設(shè)計(jì)實(shí)現(xiàn)原理;也好像大多數(shù)人都做不好產(chǎn)品經(jīng)理,因?yàn)榛ヂ?lián)網(wǎng)上成千上萬個(gè)產(chǎn)品,大部分是垃圾,沒幾個(gè)產(chǎn)品是用戶真心覺得很不錯(cuò)的。

     

    我做產(chǎn)品經(jīng)理,還不到兩年,以前十來年一直在做技術(shù)。之前做技術(shù)的時(shí)候,我很看不上產(chǎn)品經(jīng)理。當(dāng)時(shí)想:產(chǎn)品經(jīng)理自己什么都實(shí)現(xiàn)不了,每天就是提點(diǎn)想法,而且想法還經(jīng)常不靠譜,如果哪天裁員,產(chǎn)品經(jīng)理的位置最危險(xiǎn)了;但等我轉(zhuǎn)來做了產(chǎn)品經(jīng)理,想法發(fā)生了根本的變化:嗯,產(chǎn)品經(jīng)理太重要的,一個(gè)產(chǎn)品的未來就決定在產(chǎn)品經(jīng)理身上。

     

    你問我現(xiàn)在如何看待技術(shù)人員?嘿嘿,我現(xiàn)在覺得,技術(shù)就是一把刀,讓它殺誰就殺誰!當(dāng)然,這只是開玩笑。一個(gè)好的技術(shù)團(tuán)隊(duì)對(duì)于產(chǎn)品經(jīng)理來說,那是相當(dāng)重要。

     

    對(duì)如何做產(chǎn)品經(jīng)理,我還真的是小學(xué)生,自己負(fù)責(zé)的淘寶搜索最近兩年也沒什么大提升。特別是看了周鴻祎、張小龍關(guān)于對(duì)產(chǎn)品的一些訪談以后,我更發(fā)現(xiàn)自己在這方面的差距。

     

    不過我有個(gè)優(yōu)點(diǎn),就是善于學(xué)習(xí)、思考、總結(jié)并分享。而且作為一個(gè)外行進(jìn)入到這個(gè)領(lǐng)域,觀察的角度也會(huì)不一樣。這一年多下來,也找到一些感覺,發(fā)現(xiàn)周圍的一些產(chǎn)品經(jīng)理,容易走入一些誤區(qū),分享給大家。

     

    做產(chǎn)品經(jīng)理,而不是功能經(jīng)理。

     

    這句話我最早是聽天貓總裁逍遙子說的,當(dāng)時(shí)沒有感覺,現(xiàn)在發(fā)現(xiàn)非常有道理,因?yàn)橹車嗟漠a(chǎn)品經(jīng)理實(shí)際上是在做一名功能經(jīng)理。

     

    他們只是不停的在接產(chǎn)品功能需求,然后不停實(shí)現(xiàn)產(chǎn)品功能。缺登錄,設(shè)計(jì)一個(gè)登錄框;沒有數(shù)據(jù),找某個(gè)平臺(tái)打通一下;管理不方便,設(shè)計(jì)一個(gè)工具來管理;頁面不美觀,重新規(guī)劃一下頁面結(jié)構(gòu)……

     

    功能經(jīng)理,每天都很忙,關(guān)注還有多少需求在后面排隊(duì),需求方是否得到滿足。而用戶體驗(yàn)到底如何,功能是否真的真有價(jià)值,是否可以更加完美,功能經(jīng)理很少關(guān)心。當(dāng)有人抱怨某個(gè)功能不爽的時(shí)候,他會(huì)說:

    這個(gè)功能我已經(jīng)有了啊,你說體驗(yàn)不太好?沒辦法,工程師資源太緊張啊,你說為啥設(shè)計(jì)的這么別扭?kao,想起來就來氣,大老板非要求這樣啊,我們也只能這樣設(shè)計(jì),沒辦法!

     

    他經(jīng)常表達(dá)的語氣是他也不得已而為之,把責(zé)任都推到其他人身上。

     

    然而做一個(gè)合格的產(chǎn)品經(jīng)理,需要關(guān)注用戶的體驗(yàn),真正關(guān)注用戶的反饋,關(guān)注數(shù)據(jù)的質(zhì)量,關(guān)注每一個(gè)細(xì)節(jié)。就像買一雙鞋一樣,不只是能穿,還要考慮是否合腳,是否舒服,款式是否漂亮。

     

    有一次開會(huì),淘寶的總裁語嫣姐姐說了一句很樸素但很有道理的一句話:產(chǎn)品能用和好用完全不是一回事!

     

    (大家不用批評(píng)淘寶搜索啊,我知道很多地方還不好用。大家再給我點(diǎn)時(shí)間,我也認(rèn)識(shí)到這個(gè)問題不是......)

     

    實(shí)現(xiàn)產(chǎn)品需求,而不是用戶需求。

     

    這個(gè)話題很有意思。當(dāng)你問用戶需要什么的時(shí)候,他會(huì)回答他需要一匹更快的馬。喬布斯說,永遠(yuǎn)不要問用戶想要什么!因?yàn)橛脩舳际巧倒希恢雷约合胍裁础?/span>

     

    這其實(shí)是產(chǎn)品經(jīng)理經(jīng)常把用戶需求當(dāng)成產(chǎn)品需求。對(duì)所有用戶說的,他們沒錯(cuò),提的都是自己的期望,不是一個(gè)產(chǎn)品需求。前些天有張小龍的采訪,張小龍說他不看用戶的數(shù)據(jù)。其實(shí)張小龍很關(guān)心用戶的需求,我和張小龍?jiān)谝粋€(gè)群里,如果有人在群里提一些微信使用不爽的功能,張小龍會(huì)很快給出反饋。

     

    這些產(chǎn)品大神們,背后的意思是,不應(yīng)該簡單滿足用戶需求,而應(yīng)該思考把用戶需求提煉成產(chǎn)品需求。當(dāng)一個(gè)產(chǎn)品的用戶有上百萬上千萬的時(shí)候,產(chǎn)品需求的理解和提煉,就相當(dāng)重要。

     

    這個(gè)道理比較容易理解,不做多解釋。

     

    要錦上添花,而不是畫蛇添足。

     

    互聯(lián)網(wǎng)的發(fā)展,讓很多互聯(lián)網(wǎng)產(chǎn)品經(jīng)理有個(gè)慣性:做產(chǎn)品迭代要快。快速上線,快速修改。這里也有誤區(qū),對(duì)于一些基本功能,確實(shí)要快速上線,快速迭代。因?yàn)橛惺袌龈偁帲枰焖偾腥胧袌觯@得用戶。然而大部分的產(chǎn)品經(jīng)理,沒有機(jī)會(huì)從零開始設(shè)計(jì)一個(gè)新產(chǎn)品,大部分時(shí)候在現(xiàn)有的產(chǎn)品上做升級(jí)或優(yōu)化。這時(shí)設(shè)計(jì)的很多功能,都是錦上添花的功能,還真不能太快。

     

    錦上添花的功能,同樣重要,會(huì)讓產(chǎn)品更好玩,更有意思,更有特點(diǎn)。例如微信最早設(shè)計(jì)的搖一搖功能、朋友圈功能。微博的微刊功能、之前的送禮物的功能。

     

    問題在于,錦上添花,添上去的一定是一朵花,說得俗一點(diǎn),不能添上去是一坨屎。如果是后者,那么就有點(diǎn)畫蛇添足了,或者成了雞肋功能。

     

    什么是一朵花?就是功能添加上去以后,會(huì)讓用戶眼前一亮。給人有“哇!!!”的感覺……

     

    遺憾的是淘寶搜索之前的很多功能添上去的都不是一朵花,上線了太多的畫蛇添足的功能。這些功能一旦上線,就很難下線。因?yàn)楫?dāng)你產(chǎn)品的用戶群有上億的時(shí)候,再爛的一個(gè)功能,每天也會(huì)有幾十萬用戶在使用。一旦你下線,會(huì)有很多人很不爽。

     

    淘寶搜索的同店購就有點(diǎn)這個(gè)味道。技術(shù)實(shí)現(xiàn)成本高,體驗(yàn)一般,用的人也不多。有一段時(shí)間我們把這個(gè)功能隱藏起來了,有人在微博上說:

    媽的,我現(xiàn)在最想做的事情,就是找把刀殺個(gè)淘寶搜索的產(chǎn)品經(jīng)理來解解恨,我居然死活找不到我最常用的同店購了!

     

    畫蛇添足的功能越多,讓產(chǎn)品背負(fù)的垃圾就越多,造成好的功能沒有資源做,差的功能又無法下線。

     

    追求人性化,而不是追求完美。

     

    很多產(chǎn)品經(jīng)理,追求完美。這是作為產(chǎn)品經(jīng)理很好的品質(zhì),然而,有一點(diǎn)卻經(jīng)常被產(chǎn)品經(jīng)理忽視,產(chǎn)品的人性化。

     

    永遠(yuǎn)沒有完美的產(chǎn)品,特別是當(dāng)一個(gè)產(chǎn)品的用戶量到達(dá)上百萬上千萬的時(shí)候。用戶的喜好千差萬別。如何讓用戶能喜歡產(chǎn)品的優(yōu)點(diǎn)的同時(shí)能容忍產(chǎn)品的缺點(diǎn)?

     

    大家看選美大賽獲勝的美女,經(jīng)常會(huì)有感嘆,為什么這么丑還能得前三啊!是因?yàn)樵u(píng)委的口味太特別?當(dāng)然有一部分評(píng)委原因,但更多原因在于,大家每個(gè)人的審美觀不一樣。大家是把選美冠軍作為一個(gè)完美的人來評(píng)判。

     

    實(shí)際上,無論選出誰是冠軍,都會(huì)有人覺得難看。任何一個(gè)產(chǎn)品,無論產(chǎn)品經(jīng)理推出多么好用的功能,都會(huì)有人不喜歡!

     

    然而,大家對(duì)待周圍的朋友,就不會(huì)用選美的標(biāo)準(zhǔn)要求他們,他們有明顯的缺點(diǎn),但也有很多值得欣賞的地方。大家訂閱鬼腳七的微信,絕大部分人不會(huì)期望,鬼腳七每天的文章都會(huì)符合自己的口味。有人不看文章,只看看【7哥閑談】也會(huì)覺得很有意思。為什么?因?yàn)榇蠹也粫?huì)期待鬼腳七這個(gè)賬號(hào)是個(gè)完美的賬號(hào),把鬼腳七作為一個(gè)朋友在看待。鬼腳七有缺點(diǎn),也有優(yōu)點(diǎn)。

     

    如果能讓用戶把我們的產(chǎn)品當(dāng)成周圍的朋友來看待呢?感覺會(huì)完全不一樣。

     

    淘寶有個(gè)做運(yùn)營的同事有一天跟我感嘆說:我忽然覺得攻城獅們離我好近,每個(gè)攻城獅內(nèi)心都住著個(gè)詩人!我問為什么會(huì)忽然有這種感覺?她說有一天晚上,發(fā)現(xiàn)在淘寶內(nèi)部一個(gè)TMS系統(tǒng)的標(biāo)題欄上忽然多了一句話:

    每個(gè)人的壓力,少部分來自生存,大部分來自攀比。

     

    就這一句話,讓用戶感覺到了產(chǎn)品背后的那位工程師。還記得微信有個(gè)版本的歡迎頁面上的文字嗎:

    少發(fā)微信,多和朋友見見面!

     

    就這一句話,讓我感覺到產(chǎn)品背后的那群人的心理活動(dòng)。微信的一些小瑕疵,我也能容忍。

     

    就是這句話,我喜歡上了微信。

     

    人性化,是不是讓產(chǎn)品開始具有了靈魂?

     

    如何讓產(chǎn)品更加人性化?如何讓淘寶搜索更加人性化?是我最近一直在思考的問題。我定義2013年搜索的關(guān)鍵詞:專業(yè)和有趣。希望2013年能讓更多的人把淘寶搜索當(dāng)成一個(gè)朋友,而不是一個(gè)工具。

     

    寫了這么多,回頭看看我這篇文章,好像沒有什么產(chǎn)品設(shè)計(jì)方法,只是一些思考,僅此而已。

     

    作者介紹:

    鬼腳七,一個(gè)簡單的人,分享電商資訊、搜索變化、淘寶動(dòng)態(tài)、產(chǎn)品設(shè)計(jì)、管理心得、生活感悟;偶爾文藝,偶爾深沉。做一個(gè)有思想的人!微信賬號(hào): taobaoguijiaoqi 加為好友后回復(fù) m 可以看到作者之前的所有文章。

    posted @ 2013-03-22 11:16 brock| 編輯 收藏

    1、匿名函數(shù)

    函數(shù)是JavaScript中最靈活的一種對(duì)象,這里只是講解其匿名函數(shù)的用途。匿名函數(shù):就是沒有函數(shù)名的函數(shù)。

    1.1 函數(shù)的定義,首先簡單介紹一下函數(shù)的定義,大致可分為三種方式

    第一種:這也是最常規(guī)的一種

    function double(x){     return 2 * x;    } 

    第二種:這種方法使用了Function構(gòu)造函數(shù),把參數(shù)列表和函數(shù)體都作為字符串,很不方便,不建議使用。

    var double = new Function('x', 'return 2 * x;'); 

    第三種:

    var double = function(x) {
    return 2* x;
    }

    注意“=”右邊的函數(shù)就是一個(gè)匿名函數(shù),創(chuàng)造完畢函數(shù)后,又將該函數(shù)賦給了變量square。

    1.2 匿名函數(shù)的創(chuàng)建

    第一種方式:就是上面所講的定義square函數(shù),這也是最常用的方式之一。

    第二種方式:

    (function(x, y){
    alert(x + y);
    })(2, 3);

    這里創(chuàng)建了一個(gè)匿名函數(shù)(在第一個(gè)括號(hào)內(nèi)),第二個(gè)括號(hào)用于調(diào)用該匿名函數(shù),并傳入?yún)?shù)。

    2、閉包

    閉包的英文單詞是closure,這是JavaScript中非常重要的一部分知識(shí),因?yàn)槭褂瞄]包可以大大減少我們的代碼量,使我們的代碼看上去更加清晰等等,總之功能十分強(qiáng)大。

    閉包的含義:閉包說白了就是函數(shù)的嵌套,內(nèi)層的函數(shù)可以使用外層函數(shù)的所有變量,即使外層函數(shù)已經(jīng)執(zhí)行完畢(這點(diǎn)涉及JavaScript作用域鏈)。

    示例一

    function checkClosure(){     var str = 'rain-man';     setTimeout(         function(){ alert(str); } //這是一個(gè)匿名函數(shù)     , 2000); } checkClosure(); 

    這個(gè)例子看上去十分的簡單,仔細(xì)分析下它的執(zhí)行過程還是有許多知識(shí)點(diǎn)的:checkClosure函數(shù)的執(zhí)行是瞬間的(也許用時(shí)只是0.00001毫秒),在checkClosure的函數(shù)體內(nèi)創(chuàng)建了一個(gè)變量str,在checkClosure執(zhí)行完畢之后str并沒有被釋放,這是因?yàn)閟etTimeout內(nèi)的匿名函數(shù)存在這對(duì)str的引用。待到2秒后函數(shù)體內(nèi)的匿名函數(shù)被執(zhí)行完畢,str才被釋放。

    示例二,優(yōu)化代碼

    function forTimeout(x, y){
    alert(x + y); } function delay(x , y , time){
    setTimeout('forTimeout(' + x + ',' + y + ')' , time);
    } /** * 上面的delay函數(shù)十分難以閱讀,也不容易編寫,但如果使用閉包就可以讓代碼更加清晰 *
    function delay(x , y , time){ *
    setTimeout( *
    function(){ *
    forTimeout(x , y) *
    } * , time);
    * }
    */

    3、舉例

    匿名函數(shù)最大的用途是創(chuàng)建閉包(這是JavaScript語言的特性之一),并且還可以構(gòu)建命名空間,以減少全局變量的使用。

    示例三:

    var oEvent = {}; (function(){      var addEvent = function(){ /*代碼的實(shí)現(xiàn)省略了*/ };     function removeEvent(){}      oEvent.addEvent = addEvent;     oEvent.removeEvent = removeEvent; })(); 

    在這段代碼中函數(shù)addEvent和removeEvent都是局部變量,但我們可以通過全局變量oEvent使用它,這就大大減少了全局變量的使用,增強(qiáng)了網(wǎng)頁的安全性。 我們要想使用此段代碼:oEvent.addEvent(document.getElementById('box') , 'click' , function(){});

    示例四:

    var rainman = (function(x , y){     return x + y; })(2 , 3); /**  * 也可以寫成下面的形式,因?yàn)榈谝粋€(gè)括號(hào)只是幫助我們閱讀,但是不推薦使用下面這種書寫格式。  * var rainman = function(x , y){  *    return x + y;  * }(2 , 3);  */ 

    在這里我們創(chuàng)建了一個(gè)變量rainman,并通過直接調(diào)用匿名函數(shù)初始化為5,這種小技巧有時(shí)十分實(shí)用。

    示例五:

    var outer = null;  (function(){     var one = 1;     function inner (){         one += 1;         alert(one);     }     outer = inner; })();  outer();    //2 outer();    //3 outer();    //4 

    這段代碼中的變量one是一個(gè)局部變量(因?yàn)樗欢x在一個(gè)函數(shù)之內(nèi)),因此外部是不可以訪問的。但是這里我們創(chuàng)建了inner函數(shù),inner函數(shù)是可以訪問變量one的;又將全局變量outer引用了inner,所以三次調(diào)用outer會(huì)彈出遞增的結(jié)果。

    4、注意

    4.1 閉包允許內(nèi)層函數(shù)引用父函數(shù)中的變量,但是該變量是最終值

    示例六:

    /**  * <body>  * <ul>  *     <li>one</li>  *     <li>two</li>  *     <li>three</li>  *     <li>one</li>  * </ul>  */  var lists = document.getElementsByTagName('li'); for(var i = 0 , len = lists.length ; i < len ; i++){     lists[ i ].onmouseover = function(){         alert(i);         }; } 

    你會(huì)發(fā)現(xiàn)當(dāng)鼠標(biāo)移過每一個(gè)<li&rt;元素時(shí),總是彈出4,而不是我們期待的元素下標(biāo)。這是為什么呢?注意事項(xiàng)里已經(jīng)講了(最終值)。顯然這種解釋過于簡單,當(dāng)mouseover事件調(diào)用監(jiān)聽函數(shù)時(shí),首先在匿名函數(shù)( function(){ alert(i); })內(nèi)部查找是否定義了 i,結(jié)果是沒有定義;因此它會(huì)向上查找,查找結(jié)果是已經(jīng)定義了,并且i的值是4(循環(huán)后的i值);所以,最終每次彈出的都是4。

    解決方法一:

    var lists = document.getElementsByTagName('li'); for(var i = 0 , len = lists.length ; i < len ; i++){     (function(index){         lists[ index ].onmouseover = function(){             alert(index);             };                         })(i); } 

    解決方法二:

    var lists = document.getElementsByTagName('li'); for(var i = 0, len = lists.length; i < len; i++){     lists[ i ].$$index = i;    //通過在Dom元素上綁定$$index屬性記錄下標(biāo)     lists[ i ].onmouseover = function(){         alert(this.$$index);         }; } 

    解決方法三:

    function eventListener(list, index){     list.onmouseover = function(){         alert(index);     }; } var lists = document.getElementsByTagName('li'); for(var i = 0 , len = lists.length ; i < len ; i++){     eventListener(lists[ i ] , i); } 

    4.2 內(nèi)存泄露

    使用閉包十分容易造成瀏覽器的內(nèi)存泄露,嚴(yán)重情況下會(huì)是瀏覽器掛死,感興趣的的話可以參考:http://www.cnblogs.com/rainman/archive/2009/03/07/1405624.html

    http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html

    posted @ 2013-03-20 10:00 brock 閱讀(225) | 評(píng)論 (0)編輯 收藏

    基本規(guī)范

    語義

    使用符合語義的標(biāo)簽書寫 HTML 文檔, 選擇恰當(dāng)?shù)脑乇磉_(dá)所需的含義;

    <!-- 不推薦 --> <div onclick="goToRecommendations();">All recommendations</div> 
    <!-- 推薦 --> <a href="recommendations/">All recommendations</a> 

    大小寫

    元素的標(biāo)簽和屬性名必須小寫, 屬性值必須加雙引號(hào); 例如

    <!-- 不推薦 --> <A HREF='/'>Home</A> 
    <!-- 推薦 --> <a href="/">Home</a> 

    縮進(jìn)

    • 使用四個(gè)空格來表示縮進(jìn),不要使用 tab 鍵;
    • 在塊狀元素,列表,表格元素后面使用新行,并且對(duì)它的子元素進(jìn)行縮進(jìn).

    例如

    <ul>     <li>         1     </li> </ul> 

    空格

    去除比不必要的空格; 例如

    <!-- 不推薦 --> <p>test                  </p> 
    <!-- 推薦 --> <p>test</p> 

    嵌套

    • 元素嵌套遵循 (X)HTML Strict 嵌套規(guī)則, 推薦使用Firefox插件 HTML Validator 進(jìn)行檢查;
    • 正確區(qū)分自閉合元素和非自閉合元素. 非法閉合包括:<br>..</br>、<script />、<iframe />, 非法閉合會(huì)導(dǎo)致頁面嵌套錯(cuò)誤問題;
    <!-- 不推薦 --> <title>Test</title> <article>This is only a test. 
    <!-- 推薦 --> <!DOCTYPE html> <meta charset="utf-8"> <title>Test</title> <article>This is only a test.</article> 

    引號(hào)

    使用雙引號(hào)來標(biāo)識(shí) html 的屬性; 例如

    <!-- 不推薦 --> <a class='maia-button maia-button-secondary'>Sign in</a> 
    <!-- 推薦 --> <a class="maia-button maia-button-secondary">Sign in</a> 

    自定義屬性

    通過給元素設(shè)置自定義屬性來存放與 JavaScript 交互的數(shù)據(jù), 屬性名格式為 data-xx (例如:data-lazyload-url)

    DOCTYPE

    頁面文檔類型統(tǒng)一使用HTML5 DOCTYPE. 代碼如下:

    <!doctype html> 

    編碼

    聲明方法遵循HTML5的規(guī)范.推薦使用 utf-8 編碼.

    <meta charset="utf-8" /> 

    注釋

    建議對(duì)超過10行的頁面模塊進(jìn)行注釋, 以降低開發(fā)人員的嵌套成本和后期的維護(hù)成本. 例如:

    <div id="sample">     ... </div> <!-- #sample END --> 
    <div class="sample">     ... </div> <!-- .sample END --> 

    協(xié)議

    如果鏈接和當(dāng)前頁面一致則忽略鏈接的協(xié)議部分,例如

    <!-- 不推薦 --> <script src="http://www.taobao.com/fp.js"></script> 
    <!-- 推薦 --> <script src="http://www.taobao.com/fp.js"></script> 
    /* 不推薦 */ .example {   background: url(http://www.taobao.com/fp.css); } 
    /* 推薦 */ .example {   background: url(//www.taobao.com/fp.css); } 

    TODO

    • 使用 TODO 來標(biāo)記待做事情,便于后期搜索.
    • 在 TODO 后添加 (姓名或郵件) 來表示分類.

    例如

    <!-- TODO(yiminghe): remove duplicate tag --> <p><span>2</span></p> 

    焦點(diǎn)分離

    • 將表現(xiàn),行為和結(jié)構(gòu)分離:不要在 html 和模板中加入除了結(jié)構(gòu)以外的東西.
    • 在文檔中引入盡可能少的樣式和腳本
    <!-- 不推薦 --> <!DOCTYPE html> <title>HTML sucks</title> <link rel="stylesheet" href="base.css" media="screen"> <link rel="stylesheet" href="grid.css" media="screen"> <link rel="stylesheet" href="print.css" media="print"> <h1 style="font-size: 1em;">HTML sucks</h1> <p>I’ve read about this on a few sites but now I’m sure:   <u>HTML is stupid!!1</u> <center>I can’t believe there’s no way to control the styling of   my website without doing everything all over again!</center> 
    <!-- 推薦 --> <!DOCTYPE html> <title>My first CSS-only redesign</title> <link rel="stylesheet" href="default.css"> <h1>My first CSS-only redesign</h1> <p>I’ve read about this on a few sites but today I’m actually   doing it: separating concerns and avoiding anything in the HTML of   my website that is presentational. <p>It’s awesome! 

    元素

    結(jié)構(gòu)性元素

    • p 表示段落. 只能包含內(nèi)聯(lián)元素, 不能包含塊級(jí)元素;
    • div 本身無特殊含義, 可用于布局. 幾乎可以包含任何元素;
    • br 表示換行符;
    • hr 表示水平分割線;
    • h1-h6 表示標(biāo)題. 其中 h1 用于表示當(dāng)前頁面最重要的內(nèi)容的標(biāo)題;
    • blockquote 表示引用, 可以包含多個(gè)段落. 請(qǐng)勿純粹為了縮進(jìn)而使用 blockquote, 大部分瀏覽器默認(rèn)將 blockquote 渲染為帶有左右縮進(jìn);
    • pre 表示一段格式化好的文本;

    頭部元素

    • title 每個(gè)頁面必須有且僅有一個(gè) title 元素;
    • base 可用場景:首頁、頻道等大部分鏈接都為新窗口打開的頁面;
    • link link 用于引入 css 資源時(shí), 可省去 media(默認(rèn)為all) 和 type(默認(rèn)為text/css) 屬性;
    • style type 默認(rèn)為 text/css, 可以省去;
    • script type 屬性可以省去; 不贊成使用lang屬性; 不要使用古老的<!– //–>這種hack腳本, 它用于阻止第一代瀏覽器(Netscape 1和Mosaic)將腳本顯示成文字;
    <!-- 不推薦 --> <link rel="stylesheet" href="http://www.google.com/css/maia.css"   type="text/css">  <!-- 不推薦 --> <script src="http://www.google.com/js/gweb/analytics/autotrack.js"   type="text/javascript"></script> 
    <!-- 推薦 --> <link rel="stylesheet" href="http://www.google.com/css/maia.css">  <!-- 推薦 --> <script src="http://www.google.com/js/gweb/analytics/autotrack.js"></script> 
    • noscript 在用戶代理不支持 JavaScript 的情況下提供說明;

    文本元素

    • a a 存在 href 屬性時(shí)表示鏈接, 無 href 屬性但有 name 屬性表示錨點(diǎn);
    • em,strong em 表示句意強(qiáng)調(diào), 加與不加會(huì)引起語義變化, 可用于表示不同的心情或語調(diào); strong 表示重要性強(qiáng)調(diào), 可用于局部或全局, strong強(qiáng)調(diào)的是重要性, 不會(huì)改變句意;
    • abbr 表示縮寫;
    • sub,sup 主要用于數(shù)學(xué)和化學(xué)公式, sup還可用于腳注;
    • span 本身無特殊含義;
    • ins,del 分別表示從文檔中增加(插入)和刪除

    媒體元素

    • img 請(qǐng)勿將img元素作為定位布局的工具, 不要用他顯示空白圖片; 給img元素增加alt屬性;例如
    <!-- 不推薦 --> <img src="spreadsheet.png"> 
    <!-- 推薦 --> <img src="spreadsheet.png" alt="Spreadsheet screenshot."> 
    • object 可以用來插入Flash;

    列表元素

    • dl 表示關(guān)聯(lián)列表, dd是對(duì)dt的解釋; dt和dd的對(duì)應(yīng)關(guān)系比較隨意: 一個(gè)dt對(duì)應(yīng)多個(gè)dd、多個(gè)dt對(duì)應(yīng)一個(gè)dd、多個(gè)dt對(duì)應(yīng)多個(gè)dd, 都合法; 可用于名詞/單詞解釋、日程列表、站點(diǎn)目錄;
    • ul 表示無序列表;
    • ol 表示有序列表, 可用于排行榜等;
    • li 表示列表項(xiàng), 必須是ul/ol的子元素;

    表單元素

    • 推薦使用 button 代替 input, 但必須聲明 type;
    • 推薦使用 fieldset, legend 組織表單
    • 表單元素的 name 不能設(shè)定為 action, enctype, method, novalidate, target, submit 會(huì)導(dǎo)致表單提交混亂

    文檔模板

    <!doctype html> <html>     <head>         <meta charset="utf-8" />         <title>Sample page</title>         <link rel="stylesheet" href="css_example_url" />     </head>     <body>         <div id="page">             <div id="header">                 頁頭             </div>             <div id="content">                 主體             </div>             <div id="footer">                 頁尾             </div>         </div>         <script src="js_example_url"></script>         <script>         // 你的代碼         </script>     </body> </html> 
    posted @ 2013-03-11 17:31 brock 閱讀(2448) | 評(píng)論 (0)編輯 收藏

         摘要: Google JavaScript 編碼規(guī)范指南修訂版: 2.9Aaron WhyteBob JervisDan PupiusEric ArvidssonFritz SchneiderRobby Walker每個(gè)條目都有概述信息, 點(diǎn)擊 ▽ 查看詳細(xì)的內(nèi)容. 你也可以點(diǎn)擊下面的按鈕▽ 展開全部目錄JavaScript 語言規(guī)范變量 常...  閱讀全文
    posted @ 2013-03-11 15:24 brock 閱讀(3060) | 評(píng)論 (0)編輯 收藏

    http://service.bbs.163.com/bbs/tyro/290302532.html
    無意中看到張子陽的博客中的這篇文章,個(gè)人覺得挺好的就轉(zhuǎn)載過來跟大家分享了,就擅自轉(zhuǎn)載過來跟大家分享了。——靳建通

    收入是由什么決定的?
    這位員工辭職的原因主要有兩個(gè):
    • 公司的薪水無法達(dá)到他的預(yù)期,未來一年在公司的收入前景也不是很明確。
    • 想要去做更底層的開發(fā),方向是使用C/C++開發(fā)3D圖形圖像。而我們公司主要是.NET開發(fā)。
    既然其中的一個(gè)原因是薪水無法符合預(yù)期,那么首先要搞清楚的就是收入是由什么決定的。
    1.積累首先要說的一點(diǎn)就是:積累。積累就是你在這家公司所創(chuàng)造的價(jià)值的積累。
    你今天所領(lǐng)的薪水,并不是由你現(xiàn)在所創(chuàng)造的價(jià)值所決定的,而是包含了以前一段時(shí)期內(nèi)其他同事所創(chuàng)造的價(jià)值。舉個(gè)例子來說,公司目前排名前三的大客戶:客戶A、客戶B、客戶C。
    • 客戶A是2008年接下來的,現(xiàn)在每年為公司貢獻(xiàn)600萬。
    • 客戶B是2009年接下來的,現(xiàn)在每年為公司貢獻(xiàn)500萬。
    • 客戶C是2010年接下來的,現(xiàn)在每年為公司貢獻(xiàn)350萬。
    我的年薪是你的兩倍還多。可我也承認(rèn),我現(xiàn)在所能創(chuàng)造的價(jià)值,靳建通和我的能力絕對(duì)不可能是你的兩倍。可問題是:2008年、2009年、2010年這些年份我都在公司,上面的每一個(gè)大客戶,都有我的貢獻(xiàn)。靳建通而你2012年才新進(jìn)公司,你并沒有之前的積累。所以,新員工入職后,工資相較老員工會(huì)低一些是正常的。很多新員工總是認(rèn)為自己的收入低了,吃虧了,實(shí)際上,很多情況下,新員工在加入公司的頭一年,公司僅能維持平衡,即新員工創(chuàng)造的價(jià)值全當(dāng)工資發(fā)給他了。靳建通直到第二年,有了上一年的積累之后,公司才有所盈余。而加入半年就離職的員工,對(duì)公司來說基本上是虧本的。靳建通這也就解釋了為什么人員流動(dòng)特別快的公司活不長,因?yàn)槿肆Τ杀咎摺?/span>
    關(guān)于積累,我可以再舉幾個(gè)例子說明一下:
    洪小蓮,李嘉誠的秘書,幾十年來一直追隨李嘉誠,她從幾千元的工薪族,做到身家上億的工薪族,享受的是公司成長的回報(bào)。這種回報(bào)并非是她個(gè)人的學(xué)識(shí)和能力有了大幅的提高而得到的等價(jià)交換,很大程度上僅僅是因?yàn)樗艺\地待在這趟車上。
    楊元慶,聯(lián)想現(xiàn)在的CEO,研究生畢業(yè)后就一直追隨柳傳志,盡管一開始從事的是他并不很樂意的銷售工作,但最終還是堅(jiān)持了下來。上一次注意到他,是看到一則新聞,標(biāo)題是“楊元慶自掏2000萬獎(jiǎng)勵(lì)一線員工”。
    上面只是正面的例子,也有反面的例子:
    吳士宏,曾寫了一本書叫做《逆風(fēng)飛揚(yáng)》,可謂是紅極一時(shí)。1986年進(jìn)入IBM,1998年離開IBM,進(jìn)入微軟,擔(dān)任微軟中國公司總經(jīng)理,1999年進(jìn)入TCL,2002年離開TCL。之后就離開了公眾的視線。我特意去百度搜索靳建通“吳士宏現(xiàn)在在哪里”,沒有任何的消息。我想如果她很成功的話,一定還屬于“公眾人物”,不至于連度娘都不知去向。
    跳槽的話顯然就要放棄先前的積累。比方說,當(dāng)你跳槽到另一家公司以后,你曾經(jīng)做過的系統(tǒng)、曾經(jīng)服務(wù)過的客戶仍然在為先前的公司創(chuàng)造著利潤,可是跟你已經(jīng)一毛錢關(guān)系都沒有了(極少數(shù)公司有股票,另當(dāng)別論)。所以跳槽之前要慎重考慮,跳得不好,有可能越跳越低。
    既然新員工相對(duì)于老員工來說,收入低一些是正常的,那么老員工工資高也是合情合理的。但是有一些公司,我將其歸為“無良公司”,它們會(huì)在老員工的收入高到一定程度的時(shí)候,將老員工砍掉,然后再招募低廉的新人來承擔(dān)之前老員工的工作,以賺取更高的利潤。我覺得這些都是小聰明,最后的結(jié)果就是,聰明能干一些的人,在看出公司的這些伎倆之后果斷離職;能力一般的員工,也會(huì)把你這里當(dāng)成培訓(xùn)基地,翅膀硬了就飛了,受損的最后還是公司,實(shí)在是得不償失。還不如厚待老員工,也讓新進(jìn)的員工對(duì)未來有一個(gè)更好的預(yù)期。也有一些人向我抱怨說:“老員工待得久了,干勁都被磨光了,每天都是混日子,還不如新員工,不開他開誰?”。然后我反問他:“激勵(lì)員工難道不正是你工作的一部分嗎?”。這種情況的出現(xiàn),更多時(shí)候,是管理者的責(zé)任,而非員工。
    最后補(bǔ)充一點(diǎn):我并不認(rèn)為老員工工資比新員工高就一定是合理的。當(dāng)公司對(duì)一個(gè)新員工開出很高的工資時(shí),其實(shí)是出于這樣一種期望:他能推動(dòng)公司進(jìn)步的更快。而如果他真的這樣做到了,公司進(jìn)步的更快了、收益更高了,可以反哺老員工,從而公司的整體待遇水平都提高了,不是皆大歡喜嗎?可能一些老員工并不能明白這些,所以,靳建通當(dāng)招一個(gè)新員工工資水平遠(yuǎn)高于現(xiàn)有的老員工時(shí),為什么要這樣做,最好能讓老員工知曉。
    2.老板這個(gè)“老板”是寬泛的老板,不一定是公司最大的老板。有的時(shí)候,公司比較大,你的職位又比較低,大老板連有沒有你這個(gè)人都不知道,此時(shí)的老板就是你的頂頭上司。很多時(shí)候,你的收入與他也有著莫大的關(guān)系。靳建通
    對(duì)于我來說,我的原則是:在我的能力范圍內(nèi),我會(huì)為我的員工爭取更好的待遇。表面上看,這樣做很蠢,花6000塊就能雇到一個(gè)人,為什么要花8000塊?我不是這樣認(rèn)為的,我期望能和我的員工形成這樣一種互動(dòng):我盡我的能力為你爭取好的待遇,你也盡你的努力做好工作。
    我不能要求員工“你先把工作做好,我自然會(huì)給你好的待遇”。總是要有人先邁出一步,總是要有一方先信任另一方,所以在你什么還沒有做的時(shí)候,我就先信任你,并且給你盡可能好的待遇,那么我該做的事情都做了,我問心無愧,剩下的,就看你的表現(xiàn)了。
    可能有人會(huì)想,都這樣了怎么還會(huì)有人提出辭職?實(shí)際上,提出辭職的是一個(gè)畢業(yè)剛一年的小伙子,1989年生,畢業(yè)1年多,我給他的待遇是試用期9000,轉(zhuǎn)正后9500。在給他這個(gè)待遇之前,我是進(jìn)行過一些調(diào)研的,我打電話給我的一個(gè)表妹,她是西安電子科技大學(xué)的研究生(陜西省排名第三的學(xué)校,211院校),她和她的同學(xué)在今年畢業(yè)找工作的時(shí)候,多得是6000到8000的工資。所以從這方面來說,我并沒有虧待你,而你要求12K的工資,我并不是不愿意給這么多,你的表現(xiàn)也說明了你是個(gè)很有潛力的人才。只是受經(jīng)濟(jì)環(huán)境的影響,今年公司的效益不及往年,要在一定程度上節(jié)省開支。其次,你讓其他的老員工情何以堪?所以,綜合起來,你的要求超出了我的能力范圍之外,我無法開口向公司申請(qǐng)?zhí)岣吣愕男剿?/span>
    3.門檻除了積累和頂頭上司兩個(gè)決定因素以外,靳建通第三個(gè)決定因素就是你從事工作的門檻。為什么餐廳服務(wù)員的收入很低?為什么坐在前臺(tái)收發(fā)快遞的文員收入很低?因?yàn)檫@些工作的門檻很低,門檻低就意味著你不做有的是人能做,你不做有大批的“后備隊(duì)伍”在等著做。靳建通由于龐大的后備隊(duì)伍的競爭,你就無法提高自己的要價(jià)。而提升自己所從事工作的門檻,實(shí)際上就縮減了競爭者的規(guī)模。
    程序開發(fā)也是一樣。如果你想收入高,你就做一些別人做不了,又有市場的。
    .NET在程序開發(fā)中就屬于門檻比較低的一類。個(gè)中原因我想大家都懂的,就不在這里贅述了。做.NET不需要你科班出身,或許一點(diǎn)興趣再加上一點(diǎn)時(shí)間,或許一個(gè)類似北大青鳥的培訓(xùn),都可以讓你開始從事.NET開發(fā)了。你可以不懂指針、不懂?dāng)?shù)據(jù)結(jié)構(gòu)、不懂算法、不懂匯編、不懂很多東西,但照樣可以做出一個(gè).NET程序來。而這些人往往又是對(duì)薪資的要求沒那么高的,這樣無形中就拉低了.NET程序員的“身價(jià)”。.NET的易學(xué)易會(huì),很大程度上是由于它的封裝性比較好。底層的東西都屏蔽掉了,你只要知道學(xué)習(xí)一下命名空間,然后尋找相關(guān)的API去調(diào)用就好了。記得我們公司曾經(jīng)開發(fā)過一個(gè)基于C語言的手持設(shè)備程序,沒有任何的類庫支持,連排序、鏈表這樣.NET中的基本功能,都要自己來實(shí)現(xiàn),更別提內(nèi)存管理和程序邏輯了,和.NET比起來,門檻就相對(duì)高一些了。
    所以,如果想收入高一些,那么就去做更高難度的技術(shù)工作,這里隨便想了幾個(gè)例子:
    • 百度、谷歌的搜索引擎算法。
    • 微軟、谷歌、蘋果的操作系統(tǒng)。
    • 網(wǎng)絡(luò)游戲,例如《征途》的游戲引擎。
    • 大型企業(yè)的ERP,比方說SAP。
    • 軟硬結(jié)合,比如單片機(jī),電氣自動(dòng)化。
    • 以及我這位即將離職的同事說的,3D圖形圖像。
    所以,從這個(gè)角度來看,這位同事的辭職是明智的,他很年輕,靳建通有的是機(jī)會(huì)重新選擇自己的道路,所以我也祝愿他能有更好的發(fā)展。而這些好賺的錢,就留給我們來做了:-)。
    4.平臺(tái)接下來要說的一個(gè)決定因素是平臺(tái)。很多程序員覺得30歲就瓶頸了,30歲寫程序就到頭了,實(shí)際上,這只是你的平臺(tái)比較小罷了。就拿我自己的公司來說,平臺(tái)就不大,只要是踏踏實(shí)實(shí)工作過5年的程序員,基本上就能夠勝任公司90%的技術(shù)工作了,剩下的10%,請(qǐng)教一下其他同事,進(jìn)行一下技術(shù)交流,也完全能夠解決。這樣就存在一個(gè)問題:隨著你年齡的增長,你的生活壓力越來越大,要求越來越高,可是公司只要5年經(jīng)驗(yàn)的程序員就夠用了。假設(shè)市場上5年經(jīng)驗(yàn)的程序員的平均要求是10K,憑什么要給你15K?你的優(yōu)勢(shì)在哪里?如果你沒有突破,就會(huì)有“30歲寫程序就到頭了”的感覺。
    而如果平臺(tái)大一些情況就會(huì)不一樣,比方說,你去了IBM,可能5年的經(jīng)驗(yàn)不過剛剛?cè)腴T而已。IBM有一個(gè)工程院,其中有5位院士(IBM Fellow)獲得過諾貝爾獎(jiǎng),很多人鉆研技術(shù)都超過20年或者更久。如果你對(duì)技術(shù)感興趣,并執(zhí)著去鉆研的話,你可以不斷地去挑戰(zhàn)和攀登。
    當(dāng)然,你可能沒那么好的運(yùn)氣和實(shí)力進(jìn)入IBM,那么其他一些中型的平臺(tái)也是不錯(cuò)的,比方說阿里巴巴、金蝶、百度、騰訊等等。在這里,至少你有足夠的理由和需要再去進(jìn)行深入學(xué)習(xí)。因?yàn)樵谶@些地方,5年的經(jīng)驗(yàn)是遠(yuǎn)遠(yuǎn)不夠的,還需要進(jìn)一步地學(xué)習(xí)和努力。
    如果你和我一樣,不巧沒有那么大的平臺(tái),此時(shí)的選擇大概有這么幾種:
    1. 你可以憑借你在公司的積累(第一節(jié)講過的),過比較安逸的日子。如果比較幸運(yùn),押對(duì)了寶,公司發(fā)展得比較好,收入一樣會(huì)變得非常可觀;如果比較不幸,公司經(jīng)營的狀況不好,那就要承擔(dān)比較大的風(fēng)險(xiǎn)了。說得難聽一點(diǎn),公司倒閉了你去哪里?你過去的積累已經(jīng)一文不值,靳建通而你的年齡已經(jīng)35,水平卻相當(dāng)于只有5年經(jīng)驗(yàn)。你的競爭力在哪里?
    2. 你可以憑自己的努力將現(xiàn)在所在的平臺(tái)做大,換言之,把自己的小公司做大。這當(dāng)然是比較積極的做法,也是我一直努力的方向。現(xiàn)在你看到的大公司,不也是從小公司一步一步做起的嗎?不過這里還有兩個(gè)問題:1、有的時(shí)候,你的力量在公司中的占比沒那么大,你再怎么努力推進(jìn)的速度也還是有限;2、你缺乏慧眼,選中的公司本身就缺乏長大的資質(zhì)。我們往往只看到成功了的公司,卻忽視了更多在競爭中倒下的公司。
    3. 主動(dòng)選擇更大的平臺(tái),也就是跳槽了。但是跳槽也是有風(fēng)險(xiǎn)的,尤其是過了30歲的程序員,你在這家公司的收入高,是因?yàn)橛兄暗姆e累,換一家就沒有積累了,等于從新人開始,而大多數(shù)的公司,5年經(jīng)驗(yàn)的程序員就夠用了。如果跳得不好,收入還可能越跳越低,如果還有老婆、孩子、房貸,那將面臨更大的壓力。所以當(dāng)你想要從一個(gè)低的平臺(tái)向更高的平臺(tái)跳躍的時(shí)候,平時(shí)就要做足功夫,認(rèn)真積累自己的實(shí)力。對(duì)于我來說,我缺乏大型項(xiàng)目的管理經(jīng)驗(yàn),但是沒關(guān)系,我努力學(xué)習(xí)考一個(gè)PMP沒什么問題吧?我缺乏大型軟件的架構(gòu)經(jīng)驗(yàn),但是沒關(guān)系,我把.NET的基礎(chǔ)知識(shí)和各種設(shè)計(jì)模式掰開了揉碎了沒什么問題吧?我缺乏大型團(tuán)隊(duì)的管理經(jīng)驗(yàn),但是沒關(guān)系,每次遇到管理方面的問題我都認(rèn)真思考仔細(xì)總結(jié)沒什么問題吧?有些人總是抱怨沒有機(jī)會(huì),運(yùn)氣不好,我想機(jī)會(huì)總是有的,但只屬于有準(zhǔn)備的人。
    5.行業(yè)我想說的最后一點(diǎn)就是行業(yè)。有時(shí)候你覺得已經(jīng)萬事俱備了,可是你所處的這個(gè)行業(yè)本身就屬于極低利潤率的,你再怎么努力也很難有很高的收入。很多情況下,可能公司也想提高你的待遇,但是由于缺乏利潤的支撐,公司也是有心無力。所以,在選擇公司,尤其是小公司的時(shí)候,要重點(diǎn)考察一下公司所處的行業(yè)如何?是不是前景比較好、利潤比較高的行業(yè)?如果是大公司的話,靳建通這方面的問題就會(huì)少一些,因?yàn)槿绻较蛴袉栴},它就無法做成大公司。
    行業(yè)是有周期性的,可能在一段時(shí)期內(nèi)這個(gè)行業(yè)好,下一段時(shí)期這個(gè)行業(yè)就不行了。最典型的一個(gè)例子就是軟盤,我現(xiàn)在的老板在成立這家公司之前是做銷售的,他有一個(gè)客戶,做索尼軟盤的,這種軟盤我想很多80后都見過。當(dāng)時(shí)生意做得很大,可是當(dāng)光盤出來以后,軟盤的市場是會(huì)急劇萎縮的,可是這家公司的領(lǐng)導(dǎo)層居然沒有看到,或者是看到了但不愿意轉(zhuǎn)變,像鴕鳥一樣在危機(jī)來臨時(shí)把頭埋在土里,繼續(xù)做它的軟盤。幾年以后,這家公司就倒掉了。
    選擇行業(yè)也不是選擇暴利行業(yè)就一定好,比方說房地產(chǎn)。資本都是逐利的,當(dāng)一個(gè)行業(yè)屬于暴利,同時(shí)所有人都知道它是暴利的時(shí)候,危機(jī)就來了。這個(gè)危機(jī)就是會(huì)有大量的社會(huì)資源、人力物力投入到這個(gè)行業(yè)中企圖分一杯羹。而全局上又沒有一個(gè)統(tǒng)一的把控,這個(gè)行業(yè)究竟需要多少公司才是合適的?最后的結(jié)果就是過剩。就好像股票在崩盤時(shí),也許跌到3000點(diǎn)是比較合理也比較正常的位置,靳建通但是由于人們的恐慌,它就跌到1600點(diǎn)了。
    感謝閱讀,希望這篇文章能給你帶來收獲。
    不是所有一年工作經(jīng)驗(yàn)的畢業(yè)生都有這樣的待遇,我主要是看能力,而不是年齡、學(xué)歷等。特別說明一下,以免誤導(dǎo)。
    posted @ 2013-03-07 18:27 brock 閱讀(215) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題
    共15頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
    主站蜘蛛池模板: 在线观看肉片AV网站免费| 亚洲啪啪免费视频| 麻豆视频免费观看| 亚洲福利视频一区二区| 亚洲色av性色在线观无码| 久久精品亚洲日本波多野结衣 | 国产亚洲综合精品一区二区三区| 男女一进一出抽搐免费视频| 99久久国产热无码精品免费| MM131亚洲国产美女久久| 亚洲人成人网毛片在线播放| 精品国产污污免费网站入口在线| 嫖丰满老熟妇AAAA片免费看| 国产福利电影一区二区三区,亚洲国模精品一区| 亚洲自偷自拍另类12p| 免费激情网站国产高清第一页| 亚洲黄色免费观看| 国产专区一va亚洲v天堂| 亚洲乱亚洲乱妇24p| 无码人妻AV免费一区二区三区| 国产成人午夜精品免费视频| 亚洲伊人久久大香线蕉影院| 亚洲国产欧美日韩精品一区二区三区 | 国产精品亚洲片在线| 蜜芽亚洲av无码一区二区三区| 一级毛片在线免费观看| 亚洲国产a级视频| 亚洲午夜电影一区二区三区| 两性色午夜视频免费网| 蜜桃精品免费久久久久影院| 亚洲av福利无码无一区二区| 一级做a爱过程免费视频高清| 色婷婷7777免费视频在线观看| 亚洲国产精品SSS在线观看AV| 麻豆va在线精品免费播放| 国产香蕉九九久久精品免费| 亚洲人成电影亚洲人成9999网| 一本久久免费视频| 国产福利免费在线观看| 亚洲一区精彩视频| 最近中文字幕无免费|