日出星辰

          #

          Hibernate學(xué)習(xí)之一對多關(guān)聯(lián)

          注意事項:

          1.單向一對多
             只需在“一”放進(jìn)行配置
          2.雙向一對多
             需要在關(guān)聯(lián)雙方都加以配置,而且需要在一的一方設(shè)置inverse=true

          首先是實體類

          TAddress.java(多的一方)

          public class TAddress implements Serializable {
          
          	private static final long serialVersionUID = 1121137857691229229L;
          	private Integer id;
          	private String address;
          	private String zipcode;
          	private String tel;
          	private String type;
          	private TUser user;    //必須有
          
          	............
          }
          

          TUser.java(一的一方)

          public class TUser implements Serializable {
          
          	private static final long serialVersionUID = 1224691192698621789L;
          	private Integer id;
          	private Integer age;
          	private String name;
          	@SuppressWarnings("rawtypes")
          	private Set address = new HashSet();    //多的一方放在集合中
                     
                       ....................
          }
          

          然后是各個實體類的配置文件

          TAddress.hbm.xml

           

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
          >
          <!-- 一對多 -->
          <hibernate-mapping>
          <class name="com.model.TAddress" table="t_address"
          dynamic-update
          ="false" dynamic-insert="false">

          <id name="id" type="java.lang.Integer" column="id" unsaved-value="0">
          <generator class="native" />
          </id>

          <property name="address" column="address" type="string" />
          <property name="tel" column="tel" type="string" />
          <property name="zipcode" column="zipcode" type="string" />
          <property name="type" column="type" type="string" />

          <!-- 必須有many-to-one 否則關(guān)聯(lián)字段(user_id)為null -->
          <many-to-one name="user"
          class
          ="com.model.TUser"
          cascade
          ="none"
          outer-join
          ="auto"
          update
          ="true"
          insert
          ="true"
          access
          ="property"
          column
          ="user_id"
          not-null
          ="true">
          </many-to-one>
          </class>
          </hibernate-mapping>

           TUser.hbm.xml

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
          >
          <!-- 一對多 外鍵關(guān)聯(lián) -->
          <!-- Select from TUser where id=1 Select from TUser where id=1 to Select
          from TUser where id=1 or id=2
          -->
          <!-- batch-size 批量加載機(jī)制 可以自定義每次批量加載的數(shù)量 -->
          <hibernate-mapping>
          <class name="com.model.TUser" table="t_user" dynamic-update="true"
          >

          <id name="id" type="java.lang.Integer" column="id" unsaved-value="0">
          <generator class="native" />
          </id>

          <property name="name" column="name" />
          <property name="age" column="age" />
          <set name="address" table="t_address" cascade="all" order-by="zipcode asc"
          lazy
          ="true" inverse="true">
          <key column="user_id" /><!-- 確定關(guān)聯(lián)的外鍵列 -->
          <one-to-many class="com.model.TAddress" />
          </set>
          </class>
          </hibernate-mapping>

          其次是hibernate.cfg.xml

          <?xml version='1.0' encoding='utf-8'?>
          <!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 2.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"
          >

          <hibernate-configuration>

          <session-factory>

          <!-- properties -->
          <!-- 數(shù)據(jù)庫URL -->
          <property name="hibernate.connection.url">jdbc:mysql://localhost/onetomany</property>
          <!-- 數(shù)據(jù)庫JDBC驅(qū)動 -->
          <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
          <!-- 數(shù)據(jù)庫用戶名 -->
          <property name="hibernate.connection.username">root</property>
          <!-- 數(shù)據(jù)庫密碼 -->
          <property name="hibernate.connection.password">hello</property>
          <!-- 數(shù)據(jù)庫方言 -->
          <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
          <!-- 是否日志調(diào)試 -->
          <property name="show_sql">true</property>
          <!-- 是否使用數(shù)據(jù)庫外連接 -->
          <property name="use_outer_join">true</property>
          <!-- 事務(wù)管理 使用JDBC Transaction(使用JTA會報錯) -->
          <property name="transaction.factory_class">
          net.sf.hibernate.transaction.JDBCTransactionFactory
          </property>
          <!-- 指定hibernate每次提交的SQL數(shù)量 對批量操作的性能提升幫助很大!!!!!!!!!!!!! -->
          <property name="hibernate.jdbc.batch_size">25</property>
          <!-- 映射文件配置,配置文件名必須包含其相對于根的全路徑 -->
          <mapping resource="com/model/TUser.hbm.xml" />
          <mapping resource="com/model/TAddress.hbm.xml" />

          </session-factory>

          </hibernate-configuration>

          測試代碼(部分)

          增加

          public void testSave(){
          		try {
          			Transaction tx=session.beginTransaction();
          			
          //			TUser user=(TUser) session.load(TUser.class, 1);
          			
          			TUser user=new TUser();
          			user.setName("zhangsan");
          			user.setAge(20);
          			
          			TAddress address=new TAddress();
          			address.setAddress("jingsan");
          			address.setTel("1361380");
          			address.setZipcode("45000");
          			address.setType("java");
          			address.setUser(user); //設(shè)置關(guān)聯(lián)的TUser對象
          			user.getAddress().add(address);
          			
          			session.save(user);   //級聯(lián)更新
          			tx.commit();
          		} catch (HibernateException e) {
          			e.printStackTrace();
          		}
          	}
          

          查詢

          	public void testLoad(){
          		try {
          			Transaction tx=session.beginTransaction();
          			String hql="from TUser where name='zhangsan'";
          			List list=session.createQuery(hql).list();
          			System.out.println("-------------1------------");
          			Iterator iter=list.iterator();
          			while(iter.hasNext()){
          				TUser user=(TUser) iter.next();
          				System.out.println("--------------2------------");
          				System.out.println("user.name="+user.getName());
          				System.out.println("--------------3------------");
          				System.out.println("user.address="+user.getAddress().size());
          				System.out.println("--------------4------------");
          			}
          		} catch (HibernateException e) {
          			e.printStackTrace();
          		}
          		
          	}
          

          批量插入(可以提高性能)

           實現(xiàn)機(jī)制:如果使用了批量加載機(jī)制,hibernate在進(jìn)行數(shù)據(jù)查詢操作前,會自動在當(dāng)前session中尋找是否還存在
           其他同類型待加載的數(shù)據(jù),如果有,則將其查詢條件合并在當(dāng)前的select語句中一并提交,這樣,通過
           一次數(shù)據(jù)庫操作即完成了多個讀取任務(wù)。

          //批量插入操作性能優(yōu)化  通過配置<property name="hibernate.jdbc.batch_size">25</property>
          	public void testBatchInsert(){
          		long start=System.currentTimeMillis();
          		this.importUserList();
          		long end=System.currentTimeMillis();
          		System.out.println("批量插入花費(fèi)時間是"+(end-start));
          	}
          	public void importUserList(){
          		try {
          			Transaction tx=session.beginTransaction();
          			for(int i=0;i<10000;i++){
          				TUser user=new TUser();
          				user.setName("user"+i);
          				session.save(user);
          				if(i%25==0){    //以每25個數(shù)據(jù)作為一個處理單元
          					session.flush();
          					session.clear();
          				}
          			}
          			tx.commit();
          		} catch (HibernateException e) {
          			e.printStackTrace();
          		}
          	}
          


           

           

           

           

           

           

           

          posted @ 2011-08-23 11:02 日出星辰 閱讀(61) | 評論 (0)編輯 收藏

          Hibernate學(xué)習(xí)之初步使用

          package com.test;
          
          import java.util.List;
          import com.model.Tuser;
          import net.sf.hibernate.HibernateException;
          import net.sf.hibernate.Session;
          import net.sf.hibernate.SessionFactory;
          import net.sf.hibernate.Transaction;
          import net.sf.hibernate.cfg.Configuration;
          import junit.framework.Assert;
          import junit.framework.TestCase;
          
          public class HibernateTest extends TestCase {
          
          	Session session = null;
          
          	/**
          	 * setUp方法在TestCase初始化的時候會自動調(diào)用 一般用于初始化公用資源 這個方法中用于初始化Hibernate Seesion
          	 */
          	protected void setUp() {
          		try {
          			/**
          			 * 采用hiberante.properties或者h(yuǎn)ibernate.cfg.xml配置文件初始化代碼的方法
          			 * Configuration cfg = new Configuration();
          			 * cfg.addClass(Tuser.class);
          			 */
          
          			/**
          			 * 采用hibernate.cfg.xml配置文件 注意與上面初始化configuration時代差異:
          			 * 1.Configuration的初始化方式
          			 * 2.xml文件中已經(jīng)定義了Mapping文件,因此無需再編碼導(dǎo)入
          			 */
          			//-------------------------Configuration基礎(chǔ)語義-----------------------------------------
          			//Configuration類負(fù)責(zé)管理Hibernate配置信息。Hibernate運(yùn)行時需要獲取一些底層實現(xiàn)的基本信息,其中關(guān)鍵屬性
          			//數(shù)據(jù)庫url、數(shù)據(jù)庫用戶名、密碼、JDBC驅(qū)動類、dialect(適配器)
          			//Configuration Hibernate會自動在當(dāng)前的classpath中搜尋hibernate.cfg.xml文件并將其加載至內(nèi)存中,作為后續(xù)操作的基礎(chǔ)配置
          			//Configuration類一般只有獲取SessonFacotry時需要涉及,當(dāng)SessionFactory實例創(chuàng)建之后,
          			//由于配置信息已經(jīng)由Hibernate綁定在返回的SessionFactory中,因此一般情況下無需再對Configuration進(jìn)行操作
          			//如果不希望使用默認(rèn)的hibernate.cfg.xml文件作為配置文件,可以指定配置文件名
          			//File file=new File("C:\\sample\\myhibernate.cfg.xml");
          			//Configuration cofing=new Configuration().configure(file);
          			Configuration config = new Configuration().configure();
          			//--------------------------SessionFactory基礎(chǔ)語義-----------------------------
          			//SessionFactory負(fù)責(zé)創(chuàng)建session實例,可以通過Configuration實例構(gòu)建SessionFactory
          			//Configuration實例config會根據(jù)當(dāng)前的數(shù)據(jù)庫配置信息,構(gòu)造SessionFactory實例并返回。
          			//SessionFactory一旦構(gòu)造完畢,即被賦予特定的配置信息!
          			//也就是說,之后的config的任何改變將不會影響到已經(jīng)創(chuàng)建的SessionFacotry實例(factory)
          			//SessionFactory是線程安全,可由多個線程并發(fā)調(diào)用
          			SessionFactory factory = config.buildSessionFactory();
          			//--------------------------Session基礎(chǔ)語義-----------------------------------
          			//Session是Hibernate持久化操作的基礎(chǔ)  session是非線程安全的
          			//也就是說一個session實例只可同時有一個線程調(diào)用,同一個session實例的多線程并發(fā)調(diào)用將導(dǎo)致不可預(yù)知的錯誤
          			session = factory.openSession();
          		} catch (HibernateException e) {
          			// TODO Auto-generated catch block
          			e.printStackTrace();
          		}
          	}
          
          	/**
          	 * 與setUP相對應(yīng),TestCase執(zhí)行完畢時,會自動調(diào)用tearDown方法 一般用于資源釋放
          	 * 此方法中用于關(guān)閉在setUp方法中打開的Hibernate Session
          	 */
          	protected void tearDown() {
          		try {
          			session.close();
          		} catch (HibernateException e) {
          			e.printStackTrace();
          		}
          	}
          
          	/**
          	 * 對象持久化(Insert)方法 Junit中,以“test”作為前綴的方法為測試方法,將被Junit自動添加到測試計劃中
          	 */
          	public void testInsert() {
          		Transaction tran = null;
          		try {
          			tran = session.beginTransaction();
          			Tuser user = new Tuser();
          			user.setName("zhangsan");
          			session.save(user);
          			session.flush();   //把緩存中的數(shù)據(jù)刷新到數(shù)據(jù)庫
          			tran.commit();
          			Assert.assertEquals(user.getId().intValue() > 0, true);
          		} catch (HibernateException e) {
          			e.printStackTrace();
          			Assert.fail(e.getMessage());
          			if (tran != null) {
          				try {
          					tran.rollback();
          				} catch (HibernateException e1) {
          					e1.printStackTrace();
          				}
          			}
          		}
          	}
          
          	/**
          	 * 對象讀取(select)測試
          	 */
          	public void testSelect() {
          		String hql = "from Tuser where name='zhangsan'";
          		try {
          			@SuppressWarnings("rawtypes")
          			List userList = session.createQuery(hql).list();
          			Tuser user = (Tuser) userList.get(0);
          			Assert.assertEquals(user.getName(), "zhangsan");
          		} catch (HibernateException e) {
          			e.printStackTrace();
          			Assert.fail(e.getMessage());
          		}
          	}
          	
          	public void testUserType(){
          		try {
          			Tuser user=(Tuser) session.load(Tuser.class, 5);
          			List list=user.getEmail();
          			list.add("saadsd@163.com");
          			Transaction tx=session.beginTransaction();
          			session.save(user);
          			tx.commit();
          		} catch (HibernateException e) {
          			e.printStackTrace();
          		}
          	}
          }
          

          posted @ 2011-08-23 10:47 日出星辰 閱讀(70) | 評論 (0)編輯 收藏

          Hibernate學(xué)習(xí)之hibernate.cfg.xml配置

          <?xml version='1.0' encoding='utf-8'?>
          <!DOCTYPE hibernate-configuration PUBLIC
                  "-//Hibernate/Hibernate Configuration DTD 2.0//EN"
          
           "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
          
          <hibernate-configuration>
          
          	<session-factory>
          
          		<!-- properties -->
          		<!-- 數(shù)據(jù)庫URL -->
          		<property name="hibernate.connection.url">jdbc:mysql://localhost/tablepersubclass</property>
          		<!-- 數(shù)據(jù)庫JDBC驅(qū)動 -->
          		<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
          		<!-- 數(shù)據(jù)庫用戶名 -->
          		<property name="hibernate.connection.username">root</property>
          		<!-- 數(shù)據(jù)庫密碼 -->
          		<property name="hibernate.connection.password">hello</property>
          		<!-- 數(shù)據(jù)庫方言 -->
          		<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
          		<!-- 是否日志調(diào)試 -->
          		<property name="show_sql">true</property>
          		<!-- 是否使用數(shù)據(jù)庫外連接 -->
          		<property name="use_outer_join">true</property>
          		<!-- 事務(wù)管理 使用JDBC Transaction(使用JTA會報錯) -->
          		<property name="transaction.factory_class">
          			net.sf.hibernate.transaction.JDBCTransactionFactory
                  </property>
          		<!-- 映射文件配置,配置文件名必須包含其相對于根的全路徑 -->
          		<mapping resource="com/model/TItem.hbm.xml" />
          
          	</session-factory>
          
          </hibernate-configuration>
          

          把日志調(diào)試設(shè)置為true,需要log4j.properties配置文件支持

          log4j.properties

          ### direct log messages to stdout ###
          log4j.appender.stdout=org.apache.log4j.ConsoleAppender
          log4j.appender.stdout.Target=System.out
          log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
          log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

          ### direct messages to file hibernate.log ###
          #log4j.appender.file=org.apache.log4j.FileAppender
          #log4j.appender.file.File=hibernate.log
          #log4j.appender.file.layout=org.apache.log4j.PatternLayout
          #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

          ### set log levels - for more verbose logging change 'info' to 'debug' ###

          log4j.rootLogger=warn, stdout

          log4j.logger.net.sf.hibernate=info

          ### log just the SQL
          #log4j.logger.net.sf.hibernate.SQL=debug

          ### log JDBC bind parameters 把這一行改為debug ###
          log4j.logger.net.sf.hibernate.type=debug

          ### log schema export/update ###
          log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

          ### log cache activity ###
          #log4j.logger.net.sf.hibernate.cache=debug

          ### log jdbc resource acquisition
          #log4j.logger.net.sf.hibernate.impl.BatcherImpl=debug

          ### enable the following line if you want to track down connection ###
          ### leakages when using DriverManagerConnectionProvider ###
          #log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trace
           

          posted @ 2011-08-23 09:22 日出星辰 閱讀(93) | 評論 (0)編輯 收藏

          Java讀取XML之ByDom

          xml代碼:

          <?xml version="1.0" encoding="GB2312"?>  
          <RESULT>  
          <VALUE>     
            <NO>A1234</NO>     
            <ADDR>鄭州市金水區(qū)</ADDR>  
          </VALUE>  
          <VALUE>     
            <NO>B1234</NO>     
            <ADDR>鄭州市二七區(qū)</ADDR>  
          </VALUE>  
          </RESULT>
          

          Java代碼:
          package com.util;
          
          import java.io.File;
          import java.io.IOException;
          
          import javax.xml.parsers.DocumentBuilder;
          import javax.xml.parsers.DocumentBuilderFactory;
          import javax.xml.parsers.ParserConfigurationException;
          
          import org.w3c.dom.Document;
          import org.w3c.dom.NodeList;
          import org.xml.sax.SAXException;
          
          public class ReadXmlByDom {
          	public static void main(String args[]) {
          		File f = new File("F:\\car.xml");
          		Dom(f);
          	}
          
          	public static void Dom(File f) {
          		// Document可以看作是XML在內(nèi)存中的一個鏡像,那么一旦獲取這個Document 就意味
                                   //可以通過對內(nèi)存的操作來實現(xiàn)對XML的操作
          		// 首先第一步獲取XML相關(guān)的Document
          		try {
          			// 很明顯該類是一個單例,先獲取產(chǎn)生DocumentBuilder工廠
          			// 的工廠,再通過這個工廠產(chǎn)生一個DocumentBuilder,
          			// DocumentBuilder就是用來產(chǎn)生Document的
          			DocumentBuilderFactory factory = DocumentBuilderFactory
          					.newInstance();
          			DocumentBuilder builder = factory.newDocumentBuilder();
          			Document doc = builder.parse(f);
          			// 根節(jié)點(diǎn)獲得方法
          			// Element root=doc.getDocumentElement();
          			// System.out.println("根節(jié)點(diǎn)是"+root.getTagName());
          			NodeList nl = doc.getElementsByTagName("VALUE");
          			// 父節(jié)點(diǎn)獲得方法
          			// Node fatherNode=nl.item(0);
          			// System.out.println("父節(jié)點(diǎn)是"+fatherNode.getNodeName());
          			// NamedNodeMap attributes=fatherNode.getAttributes();
          			// 遍歷XML
          			for (int i = 0; i < nl.getLength(); i++) {
          				System.out.println("車牌號是"
          				+ doc.getElementsByTagName("NO").item(i)
          				.getFirstChild().getNodeValue());
          				System.out.println("車主地址是"
          				+ doc.getElementsByTagName("ADDR").item(i)
          				.getFirstChild().getNodeValue());
          			}
          		} catch (ParserConfigurationException e) {
          			e.printStackTrace();
          		} catch (SAXException e) {
          			e.printStackTrace();
          		} catch (IOException e) {
          			e.printStackTrace();
          		}
          	}
          }
          

          result:

          車牌號是A1234
          車主地址是鄭州市金水區(qū)
          車牌號是B1234
          車主地址是鄭州市二七區(qū)

          posted @ 2011-08-22 17:00 日出星辰 閱讀(89) | 評論 (0)編輯 收藏

          Linux學(xué)習(xí)【1】

                 一直想學(xué)Linux,在校期間有Linux選修課,看到教員在上課侃侃而談、命令操縱隨心而動……

                 最近項目忙完了,就開始著手學(xué)習(xí)。本人安裝的Redhat AS4,相關(guān)安裝步驟網(wǎng)上有很多,就不再詳細(xì)介紹了。(如有需要再單獨(dú)寫一遍安裝、初步使用等文章)

                 安裝完成后輸入賬戶進(jìn)入系統(tǒng)就開始進(jìn)行Linux命令學(xué)習(xí)。

          創(chuàng)建用戶:

                 useradd chenyang【用戶名】   ---添加用戶

                 passwd  chenyang【用戶名】   ---設(shè)置密碼

                useradd

                useradd2

                 注:新建用戶"chenyang"在/home下面

                 用戶之間切換用:su

                 清屏命令:clear

                 顯示當(dāng)前用戶:whoami

                 userdel chenyang【用戶名】    ---刪除用戶

                userdel1

                 userdel –rf chenyang【用戶名】 ---刪除用戶所在的目錄

                userdel2

          創(chuàng)建組:

               groupadd newgroup【組名】   ---添加組

               注:新建組在/etc下面,用more group查看

               group1

               groupdel newgroup 【組名】   ---刪除組

               TM截圖未命名

          安裝JDK:

          1.

          先查看系統(tǒng)是否有默認(rèn)的jdk    rpm -qa|grep gcj

          如果有可以選擇卸載或繼續(xù)使用 卸載:rpm –e 要卸載的jdk

          2.

          下載jdk for Linux,比如 jdk-6u25-linux-i586-rpm.bin

          3.

          上傳到Linux系統(tǒng)中,使用SSH SecureShellClient,SSH SecureShellClient是非常好用的把window上的文件上傳到Linux上的工具,我用的是從這http://download.csdn.net/source/3525638下載的,網(wǎng)友可以也可以從別的地方下載

          4.

          文件上傳到Linux系統(tǒng)中后,需要改變文件權(quán)限,不然不能安裝 chmod 777 jdk-6u25-linux-i586-rpm.bin

          5.  

          ./jdk-6u25-linux-i586-rpm.bin(中間不能有空格)

          6.

          安裝jdk  rpm -ivh jdk-6u25-linux-i586.rpm

          安裝成功后java目錄在/usr下面

          7.

          配置環(huán)境變量

          需要進(jìn)入/etc目錄下,然后vi profile

          輸入o就可以像在window下的記事本編輯

          export JAVA_HOME=/usr/java/jdk1.6.0_25
          export PATH=$JAVA_HOME/bin:$PATH
          export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

          (至于這樣設(shè)置的原因,可以看這篇文章http://www.cnblogs.com/wangchenyang/archive/2011/08/17/2143620.html

          完成后按"Esc"鍵,然后輸入:w就可以保存,退出時輸入:q,可以簡單些,直接輸入:wq

          輸入:q!是直接退出不保存

          8.測試

          寫個test.java文件(文件名不重要)

          vi test.java

          class test{
                public static void main(String[] args){
                   System.out.println("hello linux");
          }
          }

          javac test.java

          java test

          若顯示hello linux,恭喜你!jdk正確安裝,否則環(huán)境變量等有問題。

          posted @ 2011-08-19 11:19 日出星辰 閱讀(64) | 評論 (0)編輯 收藏

          為什么要設(shè)置Java環(huán)境變量(詳解)

            從大二開始接觸Java,之后是斷斷續(xù)續(xù)的學(xué)習(xí)。大三真正開始Java之旅,估計大部分初學(xué)者在學(xué)Java時被Java的環(huán)境變量搞的暈頭轉(zhuǎn)向,雖然找到了正確設(shè)置環(huán)境變量的方式,但其中的原因一知半解,設(shè)置壓根不知道是何原因。

            今天為止對環(huán)境變量的設(shè)置還不是很懂,而且網(wǎng)上的大部分資料幾乎都是設(shè)置方法,沒有說原因。今天學(xué)Linux,遇到了Java環(huán)境變量的設(shè)置,無意間找到了詳細(xì)透徹講解Java環(huán)境變量的設(shè)置。

            “

            1. PATH環(huán)境變量。作用是指定命令搜索路徑,在shell下面執(zhí)行命令時,它會到PATH變量所指定的路徑中查找看是否能找到相應(yīng)的命令程序。我們需要把 jdk安裝目錄下的bin目錄增加到現(xiàn)有的PATH變量中,bin目錄中包含經(jīng)常要用到的可執(zhí)行文件如javac/java/javadoc等待,設(shè)置好 PATH變量后,就可以在任何目錄下執(zhí)行javac/java等工具了。 

            2. CLASSPATH環(huán)境變量。作用是指定類搜索路徑,要使用已經(jīng)編寫好的類,前提當(dāng)然是能夠找到它們了,JVM就是通過CLASSPTH來尋找類的。我們 需要把jdk安裝目錄下的lib子目錄中的dt.jar和tools.jar設(shè)置到CLASSPATH中,當(dāng)然,當(dāng)前目錄“.”也必須加入到該變量中。 

            3. JAVA_HOME環(huán)境變量。它指向jdk的安裝目錄,Eclipse/NetBeans/Tomcat等軟件就是通過搜索JAVA_HOME變量來找到并使用安裝好的jdk。 

          在此要感謝“SamCN”,謝謝你的這邊文章,不僅解決了Linux中遇到了問題,而且解決了學(xué)Java那么長時間的困惑。謝謝!

          posted @ 2011-08-17 21:40 日出星辰 閱讀(76) | 評論 (0)編輯 收藏

          怎樣招聘出色的產(chǎn)品經(jīng)理【轉(zhuǎn)】

             尋找出色的產(chǎn)品經(jīng)理

            “哪里能找到出色的產(chǎn)品經(jīng)理?”CEO經(jīng)常問我這個問題。

            我總是這樣回答:出色的產(chǎn)品經(jīng)理就在公司里,只不過在其他崗位上,有可能是軟件工程師、用戶體驗設(shè)計師、系統(tǒng)工程師,等著伯樂去發(fā)掘。無論你打算從公司內(nèi)部還是從公司外部招聘產(chǎn)品經(jīng)理,必須清楚合適的人選應(yīng)該具備哪些特質(zhì)。這一章,我將列舉產(chǎn)品經(jīng)理應(yīng)有的特質(zhì)。

            個人素質(zhì)和態(tài)度

            技術(shù)可以學(xué)習(xí),素質(zhì)卻難以培養(yǎng),有些素質(zhì)是成功的產(chǎn)品經(jīng)理必不可少的。

            ~~對產(chǎn)品的熱情

            有這樣一群人,他們對產(chǎn)品有一種本能的熱愛,把自己生活中的一切事物都看成產(chǎn)品,懷揣對優(yōu)秀的產(chǎn)品的熱愛和尊重。這份熱情是產(chǎn)品經(jīng)理必備的素質(zhì),是他們夜以繼日克服困難、完善產(chǎn)品的動力。這份熱情能感染團(tuán)隊成員,激勵所有人。

            辨別這種特質(zhì)很容易,可以讓應(yīng)聘者談?wù)勛约鹤钕矚g的產(chǎn)品及喜歡的原因,聊聊不同領(lǐng)域的產(chǎn)品和他討厭的產(chǎn)品,問問對方,如果有機(jī)會,他打算怎樣完善自己最喜歡的產(chǎn)品。熱情是難以偽裝的,虛偽的做作容易畢露無遺。

            ~~用戶立場

            理想的產(chǎn)品經(jīng)理不一定來自產(chǎn)品的目標(biāo)市場(這種情況有利也有弊),但是他必須融入目標(biāo)市場。這一特質(zhì)對制造大眾產(chǎn)品的高科技企業(yè)尤為難得。我們傾向于從自己的角度去理解用戶和市場。事實上,目標(biāo)用戶的經(jīng)驗、喜好、價值觀、知覺能力、忍受程度、技術(shù)理解很可能與我們的大相徑庭。

            可以就產(chǎn)品的目標(biāo)市場向應(yīng)聘者發(fā)問,讓他談?wù)勅绾螕Q位思考。了解應(yīng)聘者對目標(biāo)市場的感覺,最重要的是看對方是尊重目標(biāo)市場希望融入其中,還是打算一意孤行改變用戶習(xí)慣。

            對國際化的產(chǎn)品和針對特定地域的產(chǎn)品來說,換位思考尤其重要。各種文化雖有共通之處,但也存在許多差異。有些差異對產(chǎn)品無關(guān)緊要,有些則至關(guān)重要。應(yīng)該考察應(yīng)聘者是否足夠了解目標(biāo)市場,能否區(qū)分這兩種差異。

            ~~智力

            人的智力水平是無法替換的。產(chǎn)品管理需要洞察力和判斷力,因此必須具備敏銳的頭腦。勤奮當(dāng)然是必需的,但從事這項工作光有勤奮還遠(yuǎn)遠(yuǎn)不夠。

            招聘聰明人是項知易行難的任務(wù),結(jié)果在很大程度上取決于招聘者的能力和可靠性。常言道,“物以類聚,人以群分”,此言不虛。方法之一是測試應(yīng)聘者解決問題的能力。微軟令人稱道的、深入而有效的面試,即是考察應(yīng)聘者解決問題的能力,通常由一位或多位領(lǐng)域?qū)<揖鸵粋€問題對應(yīng)聘者進(jìn)行深入考察。面試官不關(guān)心應(yīng)聘者是否知道正確答案,而看重應(yīng)聘者解決問題的思路和方法(智力優(yōu)于知識)。如果應(yīng)聘者回答正確,面試官會將問題略作調(diào)整,詢問應(yīng)聘者在新情況下如何應(yīng)付。重復(fù)這個過程,直到應(yīng)聘者被迫處理他不知道答案的情況,說出解決方法。

            ~~職業(yè)操守

            每種團(tuán)隊角色承擔(dān)的義務(wù)和付出的努力都不相同。產(chǎn)品經(jīng)理肩負(fù)著產(chǎn)品的前途和命運(yùn),絕不適合貪圖安逸的人擔(dān)任。即便掌握了時間管理和產(chǎn)品管理的技巧,產(chǎn)品經(jīng)理依然要為產(chǎn)品投入大量精力。成功的產(chǎn)品經(jīng)理能擁有時間享受清閑的家庭生活嗎?只要具備足夠的經(jīng)驗,我相信可以做到。但是,如果你期望的是一周只工作四十個小時,下班后把工作拋諸腦后,那是不現(xiàn)實的。

            成功的產(chǎn)品經(jīng)理需要付出多少努力?在這個問題上,我對應(yīng)聘者向來坦率,產(chǎn)品管理工作絕不能用時間來衡量,付出多少都不為過。緊急情況下臨時找來的“救火隊員”多半不是合適的產(chǎn)品經(jīng)理人選。

            在漫長的項目周期里,產(chǎn)品經(jīng)理需要付出的努力和承擔(dān)的義務(wù)并非一成不變。有的階段比較輕松,有的階段則很緊張。但是稱職的產(chǎn)品經(jīng)理對產(chǎn)品的關(guān)注和憂慮程度,以及愿意為之付出努力的熱情是不會改變的。

            ~~正直

            在所有產(chǎn)品團(tuán)隊成員里,產(chǎn)品經(jīng)理最能體現(xiàn)公司和產(chǎn)品的價值觀。通常產(chǎn)品經(jīng)理不直接管理團(tuán)隊成員,不能要求別人執(zhí)行命令,所以他必須通過行動影響、說服身邊的同事。這種影響基于相互的信任和尊重,要求產(chǎn)品經(jīng)理必須是個正直的人。

            產(chǎn)品經(jīng)理是產(chǎn)品團(tuán)隊、銷售團(tuán)隊、公司高管之間的樞紐,經(jīng)常要協(xié)調(diào)處理各種問題,比如提早供貨、滿足大客戶的特殊要求。產(chǎn)品經(jīng)理如何處理這些難題,同事們都看在眼里。

            信任和尊重需要時間培養(yǎng),產(chǎn)品經(jīng)理唯有通過工作展示自己的素質(zhì)和能力,才能成為真正的團(tuán)隊領(lǐng)導(dǎo)。如果產(chǎn)品經(jīng)理對待同事缺乏誠意,懷有私心,一碗水端不平,那么勢必會影響整體團(tuán)結(jié)和工作效率。產(chǎn)品經(jīng)理雖然不必事事精通,但應(yīng)當(dāng)知道每位成員最擅長做什么,尊重大家發(fā)揮工作特長的意愿,充分信任大家。

            考察一個人是否正直絕不比考察他的智力容易,考察陌生的應(yīng)聘者是否正直就更難了。對那些有工作經(jīng)驗的應(yīng)聘者,可以問問他們?nèi)绾翁幚砉ぷ髦械膲毫Γ嘧穯柟ぷ骷?xì)節(jié)。

            ~~信心

            很多人相信經(jīng)驗可以讓人產(chǎn)生自信。如果僅憑經(jīng)驗可以建立信心,為什么許多工作多年的產(chǎn)品經(jīng)理卻毫無自信?相反,剛剛步入社會的大學(xué)畢業(yè)生卻往往充滿自信(雖然這種自信通常源自對自身狀況的無知)。

            自信是很重要的素質(zhì)。公司高管、產(chǎn)品團(tuán)隊、銷售團(tuán)隊都需要看到產(chǎn)品經(jīng)理的信心,確信他們投入的時間、金錢、努力不會付之東流。自信的人更有說服力,更容易成為人們愿意追隨的領(lǐng)導(dǎo)者。

            ~~態(tài)度

            稱職的產(chǎn)品經(jīng)理把自己當(dāng)成產(chǎn)品的CEO,愿意為產(chǎn)品的最終成敗承擔(dān)全部責(zé)任,絕不找借口。雖然他清楚產(chǎn)品按時成功上市要克服許多困難——開發(fā)難度大、開發(fā)時間長、成本過高、產(chǎn)品復(fù)雜等,但他明白預(yù)見和解決這些問題是他的責(zé)任。

            這并不是說產(chǎn)品經(jīng)理要事必恭親,監(jiān)督每個人的工作,而是指出現(xiàn)問題時他應(yīng)該及時承擔(dān)責(zé)任,進(jìn)展順利時他應(yīng)該及時給大家以鼓勵。稱職的產(chǎn)品經(jīng)理知道,雖然產(chǎn)品的實現(xiàn)離不開大家的協(xié)助,但是他應(yīng)該對自己的產(chǎn)品創(chuàng)意負(fù)責(zé)。

            技能

            掌握一些重要的技能是打造成功產(chǎn)品的關(guān)鍵。我相信,只要具備優(yōu)秀的個人素質(zhì),所有技能都可以習(xí)得。

            ~~運(yùn)用技術(shù)的能力

            很多成功的產(chǎn)品經(jīng)理是工程師出身,因為策劃產(chǎn)品在很大程度上取決于對新技術(shù)的理解,以及如何應(yīng)用技術(shù)解決相關(guān)的問題。

            出色的產(chǎn)品經(jīng)理并不需要自己發(fā)明或?qū)崿F(xiàn)新技術(shù),但必須有能力理解技術(shù)、發(fā)掘技術(shù)的應(yīng)用潛力。

            培養(yǎng)理解技術(shù)的能力有多種途徑,可以參加培訓(xùn)課程,閱讀相關(guān)書籍和文章,向程序員和架構(gòu)師請教,參加開發(fā)團(tuán)隊的頭腦風(fēng)暴也不失為一種途徑。

            ~~注意力

            產(chǎn)品經(jīng)理要優(yōu)先解決重要問題。研發(fā)產(chǎn)品的過程中有很多干擾。能否集中注意力解決關(guān)鍵問題、克制不斷增加功能的沖動、不受關(guān)鍵人物或重要客戶的影響,取決于產(chǎn)品經(jīng)理是否有足夠強(qiáng)的自律性——不但要遵守公司制度,還要嚴(yán)格要求自己。

            幾乎所有產(chǎn)品都有些不那么重要的功能——這些功能對提高銷量和用戶滿意度毫無作用。如果去掉這些功能,產(chǎn)品甚至?xí)驗楹唵巍⒁子毛@得更多用戶的喜愛。我建議過濾多余的功能,縮短研發(fā)時間,降低生產(chǎn)成本,讓產(chǎn)品更早上市。

            ~~時間管理

            電子郵件、即時消息和手機(jī)構(gòu)成的世界充滿了干擾。你可能一大早就來上班,拼命工作一整天,連吃飯喝水都顧不上,深夜回到家卻發(fā)現(xiàn)到頭來沒完成一件重要工作。時間都用來“救火”和處理“緊急”事件了。

            熟練、迅速地區(qū)分重要任務(wù)和緊急任務(wù),合理地規(guī)劃和安排時間是產(chǎn)品經(jīng)理必備的技能。如果產(chǎn)品經(jīng)理無法集中精力完成真正重要的任務(wù),那產(chǎn)品就難免命運(yùn)多舛了。

            我認(rèn)識太多每星期工作七十個小時、累得精疲力竭的產(chǎn)品經(jīng)理。他們把所有的時間和精力都花在工作上,體力透支到了極限。對他們而言,最可怕的事實莫過于做的都是無用功。為此,我有意在培訓(xùn)課程中加入了時間管理和合理安排工作任務(wù)的內(nèi)容。產(chǎn)品經(jīng)理的時間應(yīng)該用來改變現(xiàn)狀,而不是疲于奔命參加大小會議、逐一回復(fù)郵件。有許多事情不值得做。

            ~~溝通技能

            雖然溝通技巧可以學(xué)習(xí),但要做到出類拔萃需要經(jīng)年累月的練習(xí)。溝通(包括口頭表達(dá)和書面表達(dá))能力是產(chǎn)品經(jīng)理必備的技能,如前所述,產(chǎn)品經(jīng)理只能以理服人,絕不能靠職位壓制他人。

            口頭表達(dá)能力可以在面試中測試,測試書面表達(dá)能力則需另尋他法。我常建議應(yīng)聘者隨身攜帶文字材料證明其書面表達(dá)能力,比如,不涉及專利的產(chǎn)品策劃文檔。

            注意,如果應(yīng)聘者使用非母語時帶有口音或有輕微的語法錯誤,不代表其溝通技巧不佳,只要說話口齒清晰、易于理解、具有說服力即可,完美的發(fā)音和語法不是必要條件。

            產(chǎn)品經(jīng)理會花許多時間寫電子郵件、產(chǎn)品說明文檔、策劃書、同類產(chǎn)品分析文檔等。聰明的產(chǎn)品經(jīng)理不會浪費(fèi)時間寫沒人看的東西,一旦決定動筆就要做到最好,言之有物,讓人信服。

            書面表達(dá)務(wù)必條理清晰、言簡意賅,因為同事(特別是公司高管)會根據(jù)這些文字評估產(chǎn)品經(jīng)理的工作。有時文字材料是他們評判的唯一依據(jù)。

            還有一種常見的溝通形式是演講。對許多人來說,面對聽眾演講并非易事,有效地表達(dá)觀點(diǎn)更是困難。盡管如此,演講是產(chǎn)品經(jīng)理的家常便飯。產(chǎn)品經(jīng)理必須用最短的時間向公司高管、大客戶、銷售團(tuán)隊解釋產(chǎn)品的內(nèi)涵和重要性。

            我們都聽過糟糕的演講——幻燈片一張接一張沒完沒了,演講人死板地朗誦條目,聽眾不得不費(fèi)勁地揣摩每張圖表的意義,既抓不住重點(diǎn),也不明白價值何在。

            與此相反,成功的產(chǎn)品經(jīng)理盡可能減少幻燈片的頁數(shù),他們的演講充滿熱情、重點(diǎn)清晰、數(shù)據(jù)充分、引人入勝,絕不超時(甚至提前結(jié)束)。他們更喜歡聽眾提問,即使遇到暫時無法回答的問題,也會努力嘗試向提問者和聽眾闡述自己的理解。杰里·韋斯曼(Jerry Weissman)的《演講制勝:講故事的藝術(shù)》是一本非常好的提高演講水平的指南。

            商業(yè)技能

            作為產(chǎn)品團(tuán)隊的發(fā)言人,產(chǎn)品經(jīng)理要協(xié)調(diào)團(tuán)隊與財務(wù)部門、營銷部門、銷售團(tuán)隊、公司高管之間的工作——必須使用這些人聽得懂的概念和術(shù)語。

            我認(rèn)為產(chǎn)品經(jīng)理應(yīng)該具備雙語技能。這并非指中文和英文,而是指產(chǎn)品經(jīng)理既能與程序員討論技術(shù),又能與管理層和營銷人員討論成本結(jié)構(gòu)、邊際效應(yīng)、市場份額、產(chǎn)品定位和品牌。

            由于上述原因,很多產(chǎn)品經(jīng)理都是商學(xué)院畢業(yè)的。企業(yè)需要懂得商務(wù)的人,所以雇用MBA。雖然MBA也可以成長為出色的產(chǎn)品經(jīng)理,但總的來說商業(yè)技能只是產(chǎn)品經(jīng)理需要具備的多種技能之一,而且完全可以在商學(xué)院以外的地方學(xué)到。比如,技術(shù)人員進(jìn)入產(chǎn)品管理領(lǐng)域后,通過閱讀、培訓(xùn)學(xué)習(xí)商業(yè)技能是很常見的事。

            去哪里招聘產(chǎn)品經(jīng)理?

            具備以上這些素質(zhì)和技能條件的人極少見,和優(yōu)秀的產(chǎn)品一樣稀少。沒有比產(chǎn)品經(jīng)理更重要的職位了,所以必須用嚴(yán)格的標(biāo)準(zhǔn)考察應(yīng)聘者。

            關(guān)于招聘產(chǎn)品經(jīng)理,有許多不同的看法。許多公司認(rèn)為他們需要的只是營銷部門的人或有MBA學(xué)歷的人,就像教科書對產(chǎn)品經(jīng)理的定義一樣。這種看法也許曾經(jīng)是正確的,但如今無疑是一種謬論。

            許多公司喜歡招聘從頂級商學(xué)院畢業(yè)、擁有技術(shù)類學(xué)士文憑、具有行業(yè)經(jīng)驗的MBA。不過別忘了MBA課程幾乎不涉及產(chǎn)品管理。如果你認(rèn)為現(xiàn)在的MBA畢業(yè)生們知道如何管理產(chǎn)品,那就大錯特錯了。

            最有效的招聘途徑是尋找具有上述特質(zhì)潛力的人,通過培訓(xùn)課程和傳幫帶把他們訓(xùn)練成高素質(zhì)的產(chǎn)品經(jīng)理。這些人可能就藏身于公司內(nèi)部。我認(rèn)識許多優(yōu)秀的產(chǎn)品經(jīng)理,他們曾經(jīng)是程序員、用戶體驗設(shè)計師、客服人員、技術(shù)支持人員、營銷人員,甚至曾經(jīng)是目標(biāo)用戶。他們利用各自的經(jīng)驗進(jìn)一步完善產(chǎn)品管理工作。出于同樣的原因,公司高管應(yīng)該聽取不同崗位員工對產(chǎn)品管理的建議。對于高管來說,這是寶貴的經(jīng)驗。

            行業(yè)經(jīng)驗重要嗎?

            最近一位朋友向我了解一位產(chǎn)品經(jīng)理應(yīng)聘者(大衛(wèi))的情況,我曾經(jīng)和大衛(wèi)一起工作過。我的朋友是一家大眾網(wǎng)絡(luò)服務(wù)公司的主管,他非常喜歡大衛(wèi),但他心里有個疑問:“大衛(wèi)是企業(yè)級軟件產(chǎn)品方面的專家,他適合我們這種企業(yè)嗎?”

            我忍不住笑了,告訴他四年前我遇到過類似的問題。當(dāng)時大衛(wèi)現(xiàn)在的主管問我:“這個人對系統(tǒng)軟件十分在行,可他能夠做好企業(yè)級軟件嗎?”

            其實大衛(wèi)所受的教育與系統(tǒng)軟件、企業(yè)級軟件、大眾網(wǎng)絡(luò)服務(wù)都無關(guān),甚至與軟件技術(shù)無關(guān)。他是學(xué)金融出身的,非常聰明,善于快速進(jìn)入新領(lǐng)域,理解新技術(shù)。

            許多產(chǎn)品經(jīng)理是因為他們的行業(yè)經(jīng)驗獲聘的。經(jīng)常有人問我產(chǎn)品經(jīng)理是否必須具備領(lǐng)域和行業(yè)經(jīng)驗,我認(rèn)為對某些產(chǎn)品來說,專業(yè)知識是必要的,比如,研發(fā)心臟除顫器,最好有一位懂得心臟護(hù)理的產(chǎn)品經(jīng)理。但這只是個例,并非原則。

            我甚至認(rèn)為資深行業(yè)經(jīng)驗對產(chǎn)品經(jīng)理的工作可能是不利的,因為長期從事某一行業(yè)的人通常會落入一種常見的心理陷阱:他們以為自己了解目標(biāo)客戶,盲目自信。產(chǎn)品經(jīng)理應(yīng)該習(xí)慣放下自己的成見。擁有資深行業(yè)經(jīng)驗的人也能做到這一點(diǎn),但他們必須付出更多努力,保持開放的心態(tài)。

            我并不是說管理產(chǎn)品不需要行業(yè)知識,相反,我覺得了解產(chǎn)品的領(lǐng)域知識(粗淺的了解不算數(shù))是絕對必要的。我相信通過積極學(xué)習(xí),高素質(zhì)的產(chǎn)品經(jīng)理可以快速熟悉新行業(yè)。以我自己為例,熟悉新行業(yè)達(dá)到自信制定產(chǎn)品策略的程度,只需要兩三個月時間。

            我相信開發(fā)企業(yè)級軟件、系統(tǒng)軟件、大眾網(wǎng)絡(luò)服務(wù)和消費(fèi)類電子產(chǎn)品各自有不同的技能要求。例如,企業(yè)級軟件的用戶是數(shù)目較少的大企業(yè)(而不是數(shù)量上百萬的消費(fèi)者),所以有不同的手段了解需求、定義產(chǎn)品;不同類型產(chǎn)品的銷售渠道各不相同;如果產(chǎn)品涉及硬件設(shè)備,則必須了解它會對流程和進(jìn)度造成哪些影響;如果開發(fā)大眾網(wǎng)絡(luò)服務(wù),必須知道如何展開規(guī)模管理和社區(qū)管理。

            總的來說,我認(rèn)為產(chǎn)品經(jīng)理大約有80%的技能和天分可以用于不同類型的產(chǎn)品。

            我并非要貶低經(jīng)驗的價值,但我發(fā)現(xiàn)最寶貴的經(jīng)驗不是行業(yè)知識或技術(shù)(這些都可能過時),而是打造優(yōu)秀產(chǎn)品的流程、領(lǐng)導(dǎo)產(chǎn)品團(tuán)隊的能力、應(yīng)對產(chǎn)品擴(kuò)張的經(jīng)驗、個人對自己的認(rèn)知,以及自我激勵的能力。

            與行業(yè)知識密切相關(guān)的是技術(shù)專長,業(yè)界一度非常看重兩者的聯(lián)系。有一次,我看到一家企業(yè)級軟件公司招聘產(chǎn)品經(jīng)理,要求應(yīng)聘者具備開發(fā)Linux產(chǎn)品的經(jīng)驗。的確,不同操作系統(tǒng)之間差異很大,但產(chǎn)品經(jīng)理如果連處理不同操作系統(tǒng)對產(chǎn)品影響的能力都不具備,那么等待他的麻煩將遠(yuǎn)比缺乏Linux知識來得多。

            高科技產(chǎn)品行業(yè)雖然要求快速學(xué)習(xí)新技術(shù),但更重要的是預(yù)見如何應(yīng)用技術(shù)合理地解決問題。技術(shù)發(fā)展很快,所以產(chǎn)品經(jīng)理必須善于快速學(xué)習(xí)新技術(shù),解決新問題。我面試應(yīng)聘者時,不關(guān)心他們已掌握的知識,只看重他們的學(xué)習(xí)思路。比如,讓他們回憶研發(fā)產(chǎn)品之前,他們需要學(xué)習(xí)哪些知識,需要多長時間學(xué)習(xí),如何利用這些知識。

            年齡不是問題

            各個年齡段都有出色的產(chǎn)品經(jīng)理。為什么有人二十五歲就脫穎而出?首先,互聯(lián)網(wǎng)真正普及是1995年以后的事情,因此,今天二十五歲左右的人和我們的上網(wǎng)經(jīng)驗一樣多。互聯(lián)網(wǎng)興起時,十幾歲的青少年很快學(xué)會了成年人搞不懂的技術(shù)。其次,經(jīng)驗雖然需要時間積累,但其他素質(zhì),比如智力和對產(chǎn)品的熱情則與年齡無關(guān)。

            當(dāng)年為網(wǎng)景公司年輕的創(chuàng)始人馬克•安德森(Marc Andreessen)工作時,我不得不適應(yīng)給這個二十出頭的年輕人打工的事實。但是當(dāng)我發(fā)現(xiàn)他吸收新技術(shù)和說服他人的能力后,我很快就忘記了他的年齡。未曾與他謀面的人會認(rèn)為,擁有這種商業(yè)能力的人至少得年過四十。

            尋找出色的產(chǎn)品經(jīng)理不能以年齡、性別或種族作為判斷標(biāo)準(zhǔn)。我知道行業(yè)中仍然存在不少偏見。例如,由于重視溝通技巧,我們盡量招聘母語是英語的應(yīng)聘者。

            我指出這一點(diǎn)并不是想譴責(zé)誰,只是想提醒大家,無意的偏見可能會讓我們錯過出色的產(chǎn)品經(jīng)理。下次某個大學(xué)畢業(yè)生帶著他的產(chǎn)品創(chuàng)意來找你時,你或許應(yīng)該聽一聽,他的創(chuàng)意很可能是下一個Facebook。

          出自:http://www.yixieshi.com/zhichang/8810.html

          posted @ 2011-08-17 19:52 日出星辰 閱讀(67) | 評論 (0)編輯 收藏

          管理者最高境界:看不見,聽不見,做不了

          看不見
              漢朝有個故事,說盡了管理者的特點(diǎn)。宰相丙吉,有一天在都城內(nèi)走,忽然前面出現(xiàn)了兩個打架的人,頭破血流,還在繼續(xù)斗毆。他沒有出面處理打架的事情,而是繞道走了。走了不遠(yuǎn),發(fā)現(xiàn)路邊的牛在不停地喘氣,于是停下來看牛為什么喘氣。隨從很奇怪,就問宰相,為什么不管人的事,而關(guān)心牛,難道牛比人更重要嗎?丙吉說人打架的事情,我也看見了,但那是都城將軍的事情,他會處理好的,如果他處理不好,我就撤他的職,這也是考驗?zāi)莻€人是否稱職的機(jī)會。而牛喘氣,可能是天氣出現(xiàn)了問題,可能有災(zāi)害,事關(guān)天 下的收成,這是我的職責(zé),所以分外關(guān)心。
              也就是說老板在完善了管理體系以后,要真正把工作落實在每個人身上,不要隨便干涉下屬的權(quán)限,否則就會出現(xiàn)老板干活,員工看的現(xiàn)象,這樣的公司也沒有太大的發(fā)展。所以對于企業(yè)里的很多事情,老板知道就好了,要假裝看不見,讓下面的人處理為好,這是考察下面人能力的好機(jī)會。即便是下面的人失誤了,給公司造成了損失,老板也要把這個損失當(dāng)做是選人的成本。不要怪別人做錯了,而要怪自己當(dāng)初為什么把這個人放在那個崗位上,如果老板此時耐不住寂寞,出手挽回?fù)p失,那員工會形成依賴感,總盼望著“上帝之手”為他解憂,進(jìn)而降低企業(yè)的效率,這比那些損失更可怕。
          聽不見
              如果老板聽覺靈敏的話,小道消息很容易傳到他耳朵中,那他是聽還是不聽呢,如果他聽的話,公司的小道消息會更多,讓正式的信息渠道出現(xiàn)癱瘓。
              可悲的是,有的老板對小道消息樂此不疲,幾天聽不到,就感覺不舒服。甚至有的老板還挑撥,發(fā)動群眾互相監(jiān)督,他把一個員工叫進(jìn)來聽完工作匯報以后,問:“你的那個上司,最近怎么樣?你覺得他怎么樣?”這讓這個做員工的如何來回答?做經(jīng)理的總有些地方做得不好,如果照實說了,怕給經(jīng)理造成負(fù)面的影響。如果只說好的,那就不全面,有說謊的嫌疑,真是左右為難。今后不管怎樣,這個員工對經(jīng)理的心態(tài)會不同,他會想:“原來在我們面前神氣的經(jīng)理,老板對他不信任,有看法。”那經(jīng)理如何做管理呢?
              還有就是上班時間聽得見,下了班盡量不要和下屬單獨(dú)相處,要聽不見才好。以前萬科的王石有個故事,王石有一天晚上九點(diǎn)左右,聽到有人按他家的門鈴,他在上面問:誰呀?下面的人說:我是某某,來和您匯報一下工作。王石說:現(xiàn)在是下班時間,你要爬山,可以來找我,你要匯報工作,請明天到我的辦公室找我。
              如果王石同意了這個經(jīng)理來匯報工作,別的經(jīng)理會怎么想呢?于是大家紛紛在下班以后找王老板匯報工作,那他們上班做什么呢?上班就只好在辦公室玩耍,想著如何在晚上匯報工作。企業(yè)哪里還有什么未來。所以王石的觀點(diǎn)是對的,下班讓工作走開!聽不到才好,除非出了公司要倒閉的大事,否則不要找老板,經(jīng)理們自己來處理,這才是考驗經(jīng)理們水平的時候。
          做不了
              老板還要想不到,做不到。這樣才能讓下面的人多想,才能開啟下面人的智慧,讓下面的人多做,培養(yǎng)做事情的能力。才是在培養(yǎng)人才,即便老板想到了,也要說不知道,而要讓下面拿出觀點(diǎn)來。即便老板自己能做到,也要讓下面的人來做,老板做更重要的事情。說起來這些道理都懂,但做到就難了。大多數(shù)老板是行業(yè)里的專家,大多數(shù)老板是外向的,他能看到很多問題,看到了更愿意動手搞定。讓他袖手,讓別人來完成,他覺得別人做得沒有他好,覺得別人的效率太低了。突破自己是最難的!
              其實老板是公司最貴的資源,一個企業(yè)年利潤1000萬,也就是說老板一年掙1000萬,老板平均3萬一天。如果老板整天做下屬的事,是不是有點(diǎn)太貴了?本來你養(yǎng)了條狗,就是用來看家護(hù)院的,來了事情,是要那條狗叫的,不是要老板你叫的,否則還不如把狗吃了狗肉為好。
              老板只有超脫才能客觀、只有客觀才能專注、只有專注才能超越。做老板是孤單的長跑,比賽馬拉松。那些連個培訓(xùn)都不放心,要親自和講師談,要全部聽完課程,監(jiān)督講師,監(jiān)督學(xué)員的老板,不是好老板。沒有盡到做老板的責(zé)任。
              老板要修煉到孔子說的“仁”的境界:非禮勿言、非禮勿動、非禮勿聽。看不見、聽不到、做不到的老板才是好的大老板,否則就是小老板!

          posted @ 2011-08-16 20:34 日出星辰 閱讀(59) | 評論 (0)編輯 收藏

          Java回調(diào)函數(shù)使用

               正常情況下開發(fā)人員使用已經(jīng)定義好的API,這個過程叫Call。但是有時這樣不能滿足需求,就需要程序員注冊自己的程序,然后讓事先定義好多API在合適的時候調(diào)用注冊的方法,這叫CallBack。

          “當(dāng)通常大家說的回調(diào)函數(shù)一般就是按照別人的定好的接口規(guī)范寫的,等待別人調(diào)用的函數(shù),在C語言中,回調(diào)函數(shù)通常通過函數(shù)指針來傳遞;在Java中,通常就是編寫另外一個類或類庫的人規(guī)定一個接口,然后你來實現(xiàn)這個接口,然后把這個實現(xiàn)類的一個對象作為參數(shù)傳給別人的程序,別人的程序必要時就會通過那個接口來調(diào)用你編寫的函數(shù)。

              使用技巧:定一個接口,在接口中聲明我們想調(diào)用的方法。

                              在另一個方法中注冊剛定義的回調(diào)接口

          package com.call;
          
          public interface Callback {
          
          	public void executeMethod();
          }
          

          -----------------------------------------------------

          package com.call;
          
          public class Tools {
          
          
          	public void getTime(Callback call) {
          		long start = System.currentTimeMillis();
          		call.executeMethod();
          		long end = System.currentTimeMillis();
          		System.out.println("cost time=" + (end - start));
          	}
          }
          

          ---------------------------------------------

          package com.call;
          //測試執(zhí)行方法消耗時間
          public class Main {
          
          	public static void main(String[] args) {
          
          		Tools tool = new Tools();
          		tool.getTime(new Callback() {
          			public void executeMethod() {
          				new Main().testMethod();
          			}
          		});
          
          	}
          
          	public void testMethod() {
          		for (int i = 0; i < 10000; i++) {
          			System.out.print("");
          		}
          	}
          
          }
          

          posted @ 2011-08-16 16:14 日出星辰 閱讀(2100) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共4頁: 上一頁 1 2 3 4 
          主站蜘蛛池模板: 资源县| 浠水县| 平陆县| 墨玉县| 赞皇县| 习水县| 太仓市| 方城县| 色达县| 涿鹿县| 祁东县| 广元市| 额敏县| 库车县| 英超| 东丽区| 依安县| 忻州市| 乌兰浩特市| 博客| 永靖县| 从化市| 婺源县| 阿拉善左旗| 沽源县| 芒康县| 繁昌县| 新乐市| 桂平市| 东乌珠穆沁旗| 玉屏| 祁阳县| 绥德县| 法库县| 商城县| 筠连县| 五峰| 建平县| 长汀县| 永城市| 昭通市|