Rising Sun

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            148 隨筆 :: 0 文章 :: 22 評論 :: 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.

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

          一、開發環境準備

          1、安裝JAVA開發環境 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下,目錄中有空格,執行腳本的時候會報錯

           

          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下

           

          二、開發環境配置

          1、設置系統變量

          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(這個變量很重要)

           

          2、服務器認證

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

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

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

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

           

          3、重新編譯JAX-WS

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

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

          運行build.bat

          運行成功會出現會出現

          Generating stubs from wsdl
           
          Compiling stubs.
          ...
          Done
           
          三、運行簡單的客戶端腳本以驗證安裝成功
           
          打開CMD,切換到C:\devprojects\SDK\vsphere-ws\java\JAXWS\
           
          run.bat com.vmware.general.SimpleClient --urlhttps://yourFQDNservername/sdk --username  username --password password,如下輸出表示配置SDK成功
           
           
           
          四、錯誤調試
          1、如果出現找不到類的錯誤,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虛擬機的內存不夠,可以這樣
           
          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 閱讀(895) | 評論 (0)編輯 收藏

          BIND-DLZ實驗:http://bind-dlz.sourceforge.net/
          實驗環境:RHEL4,BIND-9.5.0-P2.tar.gz(9.4.0以上版本都已含DLZ補丁),Mysql-5.0.56.tar.gz
          1、安裝mysql(先安裝gcc等相關軟件包)
             #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 & //在后臺啟動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服務器無查詢后8小時自動重連)
          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 關閉多線程 
             //--disable-openssl-version-check 禁止openssl版本的檢查
             #make
             #make install

          3、創建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、啟動&測試
          [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 閱讀(348) | 評論 (0)編輯 收藏

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

          癥狀:系統運行了一段時間報錯:java.sql.SQLException: ORA-01000: 超出打開游標的最大數

          step 1:
              查看數據庫當前的游標數配置slqplus:show parameter open_cursors;

          step 2:
              查看游標使用情況:
          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代表占用數據庫資源的數據庫用戶名.

          step 3:
              查看游標執行的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:
              根據游標占用情況分析訪問數據庫的程序在資源釋放上是否正常,如果程序釋放資源沒有問題,則加大游標數。
              alter system set open_cursors=2000 scope=both;
              
              補充:在java代碼中,執行conn.createStatement()和conn.prepareStatement()的時候,實際上都是相當與在數據庫中打開了一個cursor。尤其是,如果你的createStatement和prepareStatement是在一個循環里面的話,就會非常容易出現這個問題。因為游標一直在不停的打開,而且沒有關閉。
               一般來說,我們在寫Java代碼的時候,createStatement和prepareStatement都應該要放在循環外面,而且使用了這些Statment后,及時關閉。最好是在執行了一次executeQuery、executeUpdate等之后,如果不需要使用結果集(ResultSet)的數據,就馬上將Statment關閉,調用close()方法。

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

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

          1 做產品經理,而不是功能經理;

          2 做產品需求,而不是用戶需求;

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

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

           

          產品經理是個很奇怪的崗位,好像大多數人都能做,因為每個人對某個產品都有自己的看法,都能提出一些意見和想法,甚至能設計實現原理;也好像大多數人都做不好產品經理,因為互聯網上成千上萬個產品,大部分是垃圾,沒幾個產品是用戶真心覺得很不錯的。

           

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

           

          你問我現在如何看待技術人員?嘿嘿,我現在覺得,技術就是一把刀,讓它殺誰就殺誰!當然,這只是開玩笑。一個好的技術團隊對于產品經理來說,那是相當重要。

           

          對如何做產品經理,我還真的是小學生,自己負責的淘寶搜索最近兩年也沒什么大提升。特別是看了周鴻祎、張小龍關于對產品的一些訪談以后,我更發現自己在這方面的差距。

           

          不過我有個優點,就是善于學習、思考、總結并分享。而且作為一個外行進入到這個領域,觀察的角度也會不一樣。這一年多下來,也找到一些感覺,發現周圍的一些產品經理,容易走入一些誤區,分享給大家。

           

          做產品經理,而不是功能經理。

           

          這句話我最早是聽天貓總裁逍遙子說的,當時沒有感覺,現在發現非常有道理,因為周圍太多的產品經理實際上是在做一名功能經理。

           

          他們只是不停的在接產品功能需求,然后不停實現產品功能。缺登錄,設計一個登錄框;沒有數據,找某個平臺打通一下;管理不方便,設計一個工具來管理;頁面不美觀,重新規劃一下頁面結構……

           

          功能經理,每天都很忙,關注還有多少需求在后面排隊,需求方是否得到滿足。而用戶體驗到底如何,功能是否真的真有價值,是否可以更加完美,功能經理很少關心。當有人抱怨某個功能不爽的時候,他會說:

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

           

          他經常表達的語氣是他也不得已而為之,把責任都推到其他人身上。

           

          然而做一個合格的產品經理,需要關注用戶的體驗,真正關注用戶的反饋,關注數據的質量,關注每一個細節。就像買一雙鞋一樣,不只是能穿,還要考慮是否合腳,是否舒服,款式是否漂亮。

           

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

           

          (大家不用批評淘寶搜索啊,我知道很多地方還不好用。大家再給我點時間,我也認識到這個問題不是......)

           

          實現產品需求,而不是用戶需求。

           

          這個話題很有意思。當你問用戶需要什么的時候,他會回答他需要一匹更快的馬。喬布斯說,永遠不要問用戶想要什么!因為用戶都是傻瓜,不知道自己想要什么。

           

          這其實是產品經理經常把用戶需求當成產品需求。對所有用戶說的,他們沒錯,提的都是自己的期望,不是一個產品需求。前些天有張小龍的采訪,張小龍說他不看用戶的數據。其實張小龍很關心用戶的需求,我和張小龍在一個群里,如果有人在群里提一些微信使用不爽的功能,張小龍會很快給出反饋。

           

          這些產品大神們,背后的意思是,不應該簡單滿足用戶需求,而應該思考把用戶需求提煉成產品需求。當一個產品的用戶有上百萬上千萬的時候,產品需求的理解和提煉,就相當重要。

           

          這個道理比較容易理解,不做多解釋。

           

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

           

          互聯網的發展,讓很多互聯網產品經理有個慣性:做產品迭代要快。快速上線,快速修改。這里也有誤區,對于一些基本功能,確實要快速上線,快速迭代。因為有市場競爭,需要快速切入市場,獲得用戶。然而大部分的產品經理,沒有機會從零開始設計一個新產品,大部分時候在現有的產品上做升級或優化。這時設計的很多功能,都是錦上添花的功能,還真不能太快。

           

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

           

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

           

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

           

          遺憾的是淘寶搜索之前的很多功能添上去的都不是一朵花,上線了太多的畫蛇添足的功能。這些功能一旦上線,就很難下線。因為當你產品的用戶群有上億的時候,再爛的一個功能,每天也會有幾十萬用戶在使用。一旦你下線,會有很多人很不爽。

           

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

          媽的,我現在最想做的事情,就是找把刀殺個淘寶搜索的產品經理來解解恨,我居然死活找不到我最常用的同店購了!

           

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

           

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

           

          很多產品經理,追求完美。這是作為產品經理很好的品質,然而,有一點卻經常被產品經理忽視,產品的人性化。

           

          永遠沒有完美的產品,特別是當一個產品的用戶量到達上百萬上千萬的時候。用戶的喜好千差萬別。如何讓用戶能喜歡產品的優點的同時能容忍產品的缺點?

           

          大家看選美大賽獲勝的美女,經常會有感嘆,為什么這么丑還能得前三啊!是因為評委的口味太特別?當然有一部分評委原因,但更多原因在于,大家每個人的審美觀不一樣。大家是把選美冠軍作為一個完美的人來評判。

           

          實際上,無論選出誰是冠軍,都會有人覺得難看。任何一個產品,無論產品經理推出多么好用的功能,都會有人不喜歡!

           

          然而,大家對待周圍的朋友,就不會用選美的標準要求他們,他們有明顯的缺點,但也有很多值得欣賞的地方。大家訂閱鬼腳七的微信,絕大部分人不會期望,鬼腳七每天的文章都會符合自己的口味。有人不看文章,只看看【7哥閑談】也會覺得很有意思。為什么?因為大家不會期待鬼腳七這個賬號是個完美的賬號,把鬼腳七作為一個朋友在看待。鬼腳七有缺點,也有優點。

           

          如果能讓用戶把我們的產品當成周圍的朋友來看待呢?感覺會完全不一樣。

           

          淘寶有個做運營的同事有一天跟我感嘆說:我忽然覺得攻城獅們離我好近,每個攻城獅內心都住著個詩人!我問為什么會忽然有這種感覺?她說有一天晚上,發現在淘寶內部一個TMS系統的標題欄上忽然多了一句話:

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

           

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

          少發微信,多和朋友見見面!

           

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

           

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

           

          人性化,是不是讓產品開始具有了靈魂?

           

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

           

          寫了這么多,回頭看看我這篇文章,好像沒有什么產品設計方法,只是一些思考,僅此而已。

           

          作者介紹:

          鬼腳七,一個簡單的人,分享電商資訊、搜索變化、淘寶動態、產品設計、管理心得、生活感悟;偶爾文藝,偶爾深沉。做一個有思想的人!微信賬號: taobaoguijiaoqi 加為好友后回復 m 可以看到作者之前的所有文章。

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

          1、匿名函數

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

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

          第一種:這也是最常規的一種

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

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

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

          第三種:

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

          注意“=”右邊的函數就是一個匿名函數,創造完畢函數后,又將該函數賦給了變量square。

          1.2 匿名函數的創建

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

          第二種方式:

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

          這里創建了一個匿名函數(在第一個括號內),第二個括號用于調用該匿名函數,并傳入參數。

          2、閉包

          閉包的英文單詞是closure,這是JavaScript中非常重要的一部分知識,因為使用閉包可以大大減少我們的代碼量,使我們的代碼看上去更加清晰等等,總之功能十分強大。

          閉包的含義:閉包說白了就是函數的嵌套,內層的函數可以使用外層函數的所有變量,即使外層函數已經執行完畢(這點涉及JavaScript作用域鏈)。

          示例一

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

          這個例子看上去十分的簡單,仔細分析下它的執行過程還是有許多知識點的:checkClosure函數的執行是瞬間的(也許用時只是0.00001毫秒),在checkClosure的函數體內創建了一個變量str,在checkClosure執行完畢之后str并沒有被釋放,這是因為setTimeout內的匿名函數存在這對str的引用。待到2秒后函數體內的匿名函數被執行完畢,str才被釋放。

          示例二,優化代碼

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

          3、舉例

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

          示例三:

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

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

          示例四:

          var rainman = (function(x , y){     return x + y; })(2 , 3); /**  * 也可以寫成下面的形式,因為第一個括號只是幫助我們閱讀,但是不推薦使用下面這種書寫格式。  * var rainman = function(x , y){  *    return x + y;  * }(2 , 3);  */ 

          在這里我們創建了一個變量rainman,并通過直接調用匿名函數初始化為5,這種小技巧有時十分實用。

          示例五:

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

          這段代碼中的變量one是一個局部變量(因為它被定義在一個函數之內),因此外部是不可以訪問的。但是這里我們創建了inner函數,inner函數是可以訪問變量one的;又將全局變量outer引用了inner,所以三次調用outer會彈出遞增的結果。

          4、注意

          4.1 閉包允許內層函數引用父函數中的變量,但是該變量是最終值

          示例六:

          /**  * <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);         }; } 

          你會發現當鼠標移過每一個<li&rt;元素時,總是彈出4,而不是我們期待的元素下標。這是為什么呢?注意事項里已經講了(最終值)。顯然這種解釋過于簡單,當mouseover事件調用監聽函數時,首先在匿名函數( function(){ alert(i); })內部查找是否定義了 i,結果是沒有定義;因此它會向上查找,查找結果是已經定義了,并且i的值是4(循環后的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屬性記錄下標     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 內存泄露

          使用閉包十分容易造成瀏覽器的內存泄露,嚴重情況下會是瀏覽器掛死,感興趣的的話可以參考: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 閱讀(228) | 評論 (0)編輯 收藏

          基本規范

          語義

          使用符合語義的標簽書寫 HTML 文檔, 選擇恰當的元素表達所需的含義;

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

          大小寫

          元素的標簽和屬性名必須小寫, 屬性值必須加雙引號; 例如

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

          縮進

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

          例如

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

          空格

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

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

          嵌套

          • 元素嵌套遵循 (X)HTML Strict 嵌套規則, 推薦使用Firefox插件 HTML Validator 進行檢查;
          • 正確區分自閉合元素和非自閉合元素. 非法閉合包括:<br>..</br>、<script />、<iframe />, 非法閉合會導致頁面嵌套錯誤問題;
          <!-- 不推薦 --> <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> 

          引號

          使用雙引號來標識 html 的屬性; 例如

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

          自定義屬性

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

          DOCTYPE

          頁面文檔類型統一使用HTML5 DOCTYPE. 代碼如下:

          <!doctype html> 

          編碼

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

          <meta charset="utf-8" /> 

          注釋

          建議對超過10行的頁面模塊進行注釋, 以降低開發人員的嵌套成本和后期的維護成本. 例如:

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

          協議

          如果鏈接和當前頁面一致則忽略鏈接的協議部分,例如

          <!-- 不推薦 --> <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 來標記待做事情,便于后期搜索.
          • 在 TODO 后添加 (姓名或郵件) 來表示分類.

          例如

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

          焦點分離

          • 將表現,行為和結構分離:不要在 html 和模板中加入除了結構以外的東西.
          • 在文檔中引入盡可能少的樣式和腳本
          <!-- 不推薦 --> <!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! 

          元素

          結構性元素

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

          頭部元素

          • title 每個頁面必須有且僅有一個 title 元素;
          • base 可用場景:首頁、頻道等大部分鏈接都為新窗口打開的頁面;
          • link link 用于引入 css 資源時, 可省去 media(默認為all) 和 type(默認為text/css) 屬性;
          • style type 默認為 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 屬性時表示鏈接, 無 href 屬性但有 name 屬性表示錨點;
          • em,strong em 表示句意強調, 加與不加會引起語義變化, 可用于表示不同的心情或語調; strong 表示重要性強調, 可用于局部或全局, strong強調的是重要性, 不會改變句意;
          • abbr 表示縮寫;
          • sub,sup 主要用于數學和化學公式, sup還可用于腳注;
          • span 本身無特殊含義;
          • ins,del 分別表示從文檔中增加(插入)和刪除

          媒體元素

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

          列表元素

          • dl 表示關聯列表, dd是對dt的解釋; dt和dd的對應關系比較隨意: 一個dt對應多個dd、多個dt對應一個dd、多個dt對應多個dd, 都合法; 可用于名詞/單詞解釋、日程列表、站點目錄;
          • ul 表示無序列表;
          • ol 表示有序列表, 可用于排行榜等;
          • li 表示列表項, 必須是ul/ol的子元素;

          表單元素

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

          文檔模板

          <!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 閱讀(2451) | 評論 (0)編輯 收藏

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

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

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

          僅列出標題
          共15頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 拉萨市| 富锦市| 油尖旺区| 禄丰县| 秦安县| 邳州市| 双辽市| 渭源县| 蛟河市| 治县。| 涪陵区| 乌兰浩特市| 松阳县| 宁陵县| 明溪县| 阳谷县| 九江市| 安丘市| 金门县| 广德县| 马边| 高邮市| 宣武区| 蒲城县| 民权县| 长子县| 遵义市| 集安市| 清丰县| 伊宁市| 醴陵市| 景东| 沭阳县| 安岳县| 深泽县| 义马市| 桃源县| 博罗县| 邛崃市| 秭归县| 彭山县|