l562544801 on 八月 19th, 2009

unsigned long arg,arg1,arg2;
arg1=cWrbuf[0]=0×5a;
arg2=cWrbuf[1]=0×00;
arg=(arg1<<8)|(arg2&0×00ff);
你猜arg=什么?
很多粗心的人会以为等于0,实则不然。arg=0×5a00|0×0000 不等于0 哦。记住没有说明arg1的具体大小,左移的时候前面的5a不消失。不要形成思维定势哦!

l562544801 on 八月 17th, 2009

        在嵌入式开发的时候,FLASH一共就8M(有的更少6M,32M的太贵),所以要尽力节约空间。前几天有个程序是c和c++都有的,为了节约那500K的空间,也就是不引用C++的库,我们把C++的代码改成C的。其实也就是把类转换成结构体,但是指针的内存分配与释放要注意哦。把程序给大家参考一下:(省略头文件)

C++源码:

1.cpp

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <new.h>

#include “CaptionAdd.h”

#define TEXT_DIRECTION 1       /*排字标志,1为横排,0为竖排*/
#define TEXT_SLANT 0            /*文字倾斜:0不倾斜,1左倾斜,-1右倾斜*/
CaptionAdd::CaptionAdd()
{
 mRowSpace = 2;
 mColSpace = 2;
 
 mStartRow = -1;
 mStartCol = -1;
 
 mTextColor.R = 0;
 mTextColor.G = 0;
 mTextColor.B = 0;
 
 HZK16 = new unsigned char[300000]; //300K
 ASC16 = new unsigned char[4500]; //4K
 
 FILE * fp1, * fp2;
 if((fp1=fopen(”/etc/HZK16″,”rb”)) != NULL) //load 汉字库
 {
  fread(HZK16,sizeof(char),300000,fp1);
  fclose(fp1);
 }
 else
  printf(”open /etc/HZK16 errno:%d\n”, errno);
 
 if((fp2=fopen(”/etc/ASC16″,”rb”)) != NULL) //load 英文库
 {
  fread(ASC16,sizeof(char),4500,fp2);
  fclose(fp2);
 }
 else
  printf(”open /etc/ASC16 errno:%d\n”, errno);
 
}

CaptionAdd::~CaptionAdd()
{
 delete HZK16;
 delete ASC16;
}

void CaptionAdd::SetSpace(int Rspace,int Cspace)
{
 mRowSpace = Rspace;
 mColSpace = Cspace;
}

void CaptionAdd::SetStartRow(int row)
{
 mStartRow = row;
}

void CaptionAdd::SetStartCol(int col)
{
 mStartCol = col;
}

void CaptionAdd::SetTextColor(unsigned char comp1,unsigned char comp2,unsigned char comp3)
{
 mTextColor.R = comp1;
 mTextColor.G = comp2;
 mTextColor.B = comp3;
}

void CaptionAdd::SetImage(unsigned char* pImage,int imageW,int imageH)
{
 mImagePtr = pImage;
 mImageWidth = imageW;
 mImageHeight = imageH;
}

int CaptionAdd::PutText(unsigned char * s)
{
 char text_flag; //是否汉字
 char fix_length=0;
 char th,tw;//字模高度,宽度
 char i,j;
 char canput; //该位是否为1
 char slant;
 long position; //字模库偏移位置
 unsigned char qh,wh; //内码
 
 if(mStartRow == -1)
  mStartRow = mImageHeight-20; //默认为图像高度-20
 if(mStartCol == -1)
  mStartCol = 10; //默认为10
 
 int x=mStartCol;
 int y=mStartRow;
 
 
 while (*s!=0)
 {
  //取字模,存入mat
  if (*s>0xa0&&*(s+1)>0xa0) { //汉字
   tw=16;th=16;
   qh=*s-0xa0;
   wh=*(s+1)-0xa0;
   position=(94*(qh-1)+(wh-1))*2*th;
   memcpy(mat,HZK16+position,th*2);
   text_flag=1;
  }
  else { //英文
   tw=8;th=16;
   memcpy(mat,ASC16+(*s)*th,th);
   text_flag=0;
  }
  
  slant=0;
  //将字模叠加到图像上
  for (j=0;j<th;j++) { //y坐标
   if (!(j%4)) slant+=TEXT_SLANT;
   for (i=0;i<tw;i++) { //x坐标
    if (text_flag) {
     canput=((0×80>>i%8)&mat[2*j+i/8]);
    }
    else {
     canput=((mat[j]>>(7-i))&1);
    }
    if (canput) {
     //     fix_length=(text_flag&&text_h==14);
     if(putpixel(i+x+fix_length+slant,y+j)<0)
      return -1;
    }
   }
  }
  
  //计算下一个字符起始位置
  if (text_flag) {
   s+=2;
   if (TEXT_DIRECTION) {
    x+=16+mColSpace;
   }
   else {
    y+=16+mRowSpace;
   }
  }
  else {
   s++;
   if (TEXT_DIRECTION) x+=8;
  }
  
  if(x>mImageWidth-16-mColSpace) //换行
  {
   x=mStartCol;
   y+=16+mRowSpace;
  }
 }
 
 return 1;
 
}

int CaptionAdd::putpixel(int x,int y)
{
 if(x>mImageWidth || y>mImageHeight)
  return -1;
#ifdef YUV420
 mImagePtr[(y*mImageWidth+x)] = mTextColor.R; //Y
 // mImagePtr[mImageWidth*mImageHeight+(y*mImageWidth/4+x/2)]=mTextColor.G;
 // mImagePtr[mImageWidth*mImageHeight*5/4+(y*mImageWidth/4+x/2)]=mTextColor.B;
#else
 // y=mImageHeight-y;
 mImagePtr[(y*mImageWidth+x)*3]=mTextColor.B;
 mImagePtr[(y*mImageWidth+x)*3+1]=mTextColor.G;
 mImagePtr[(y*mImageWidth+x)*3+2]=mTextColor.R;
#endif
 
 return 1;
 
}
2.cpp:

#include “CaptionAdd.h”
#include “CaptionAddWrapper.h”

extern “C” {
 
 CCaptionAdd *create_CaptionAdd()
 {
  CCaptionAdd *t;
  CaptionAdd *p= new CaptionAdd();
  t = (CCaptionAdd *)p;
  return t;
 }
 void delete_CaptionAdd(CCaptionAdd *p)
 {
  CaptionAdd *t = (CaptionAdd *)p;
  delete t;
  t = 0;
 } 
 void SetImage(CCaptionAdd *p, unsigned char* pImage,int imageW,int imageH)//设置图像的指针,宽度,高度
 {
  CaptionAdd *t = (CaptionAdd *)p;
  t->SetImage(pImage,imageW,imageH); 
 }
 void SetSpace(CCaptionAdd *p, int Rspace,int Cspace)//设置间距
 {
  CaptionAdd *t = (CaptionAdd *)p;
  t->SetSpace(Rspace, Cspace);
 }
 void SetStartRow(CCaptionAdd *p, int row)//设置文字叠加的起始行
 {
  CaptionAdd *t = (CaptionAdd *)p;
  t->SetStartRow(row);
 }
 void SetStartCol(CCaptionAdd *p, int col) //设置文字叠加的起始列
 {
  CaptionAdd *t = (CaptionAdd *)p;
  t->SetStartCol(col);
 }
 void SetTextColor(CCaptionAdd *p, unsigned char R,unsigned char G,unsigned char B)//设置文字的颜色
 {
  CaptionAdd *t = (CaptionAdd *)p;
  t->SetTextColor(R,G,B);
 }
 int PutText(CCaptionAdd *p, unsigned char *s)
 {
  CaptionAdd *t = (CaptionAdd *)p;
  t->PutText(s);
 } 
}

 

C源码:3.c

#include <stdio.h>

#include <string.h>

#include <errno.h>
#include <stdlib.h>

//#include “backward_warning.h”

 

//#include “CaptionAdd.h”

typedef void CCaptionAdd;

#define TEXT_DIRECTION 1       /*排字标志,1为横排,0为竖排*/

#define TEXT_SLANT 0            /*文字倾斜:0不倾斜,1左倾斜,-1右倾斜*/
CCaptionAdd *create_CaptionAdd();
void delete_CaptionAdd(CCaptionAdd *p);

void SetImage(CCaptionAdd *p, unsigned char* pImage,int imageW,int imageH); //设置图像的指针,宽度,高度

void SetSpace(CCaptionAdd *p, int Rspace,int Cspace); //设置间距

void SetStartRow(CCaptionAdd *p, int row); //设置文字叠加的起始行

void SetStartCol(CCaptionAdd *p, int col); //设置文字叠加的起始列

void SetTextColor(CCaptionAdd *p, unsigned char R,unsigned char G,unsigned char B); //设置文字的颜色

int  PutText(CCaptionAdd *p, unsigned char *s);
struct Color

{

 unsigned char R;

 unsigned char B;

 unsigned char G;

};
typedef struct

  //

 

 int mRowSpace; //字的行间距,默认为2

 int mColSpace; //字的列间距,默认为2

 

 int mStartRow; //文字叠加的起始行,默认为图像高度-20

 int mStartCol; //文字叠加的起始列,默认为10

 

 struct Color mTextColor; //叠加文字的颜色,默认为黑色

 

 unsigned char* mImagePtr; //图像的起始地址

 int mImageWidth,mImageHeight;

 

 unsigned char * HZK16; //汉字模库buffer

 unsigned char * ASC16; //ASCII字模库buffer

 unsigned char mat[16*2]; //字模buffer

}CaptionAdd;

 

CCaptionAdd *create_CaptionAdd()

 {

        CCaptionAdd *t;
    t = (CaptionAdd *)malloc(sizeof(CaptionAdd));      
        CaptionAdd *p = (CaptionAdd *)t;

 

      p->mRowSpace = 2;

      p->mColSpace = 2;

 

      p->mStartRow = -1;

      p->mStartCol=-1;

 

      p->mTextColor.R = 0;

      p->mTextColor.G=0;

      p->mTextColor.B=0;

 

      p->HZK16=(char*)malloc(sizeof(char)*300000);

      p->ASC16=(char*)malloc(sizeof(char)*4500);

 

 

      FILE * fp1, * fp2;

      if((fp1=fopen(”/etc/HZK16″,”rb”)) != NULL) //load 汉字库

                 {

        fread(p->HZK16,sizeof(char),300000,fp1);

        fclose(fp1);

                 }

      else

        printf(”open /etc/HZK16 errno:%d\n”, errno);

 

      if((fp2=fopen(”/etc/ASC16″,”rb”)) != NULL) //load 英文库

                 {

        fread(p->ASC16,sizeof(char),4500,fp2);

        fclose(fp2);

                 }

      else

        printf(”open /etc/ASC16 errno:%d\n”, errno);

 

         }

 

void delete_CaptionAdd(CCaptionAdd *p)

        {
        CaptionAdd *t = (CaptionAdd *)p;

      free (t->HZK16);

      free (t->ASC16);

      free (p);
        t=0;

 

        }

 

 

void SetSpace(CCaptionAdd *p,int Rspace,int Cspace)//设置间距

 {

    CaptionAdd *t = (CaptionAdd *)p;

    t->mRowSpace = Rspace;

      t->mColSpace = Cspace;

        }

 

void SetStartRow(CCaptionAdd *p, int row)//设置文字叠加的起始行

 {

    CaptionAdd *t = (CaptionAdd *)p;

    t->mStartRow = row;

 }

void SetStartCol(CCaptionAdd *p, int col) //设置文字叠加的起始列

 {

    CaptionAdd *t = (CaptionAdd *)p;

    t->mStartCol = col;

 }

 

 

void SetTextColor(CCaptionAdd *p, unsigned char R,unsigned char G,unsigned char B)//设置文字的颜色

 {

    CaptionAdd *t = (CaptionAdd *)p;

    t->mTextColor.R = R;

      t->mTextColor.G = G;

        t->mTextColor.B = B;

 }

 

void SetImage(CCaptionAdd *p, unsigned char* pImage,int imageW,int imageH)//设置图像的指针,宽度,高度

 {

    CaptionAdd *t = (CaptionAdd *)p;

    t->mImagePtr = pImage;

      t->mImageWidth = imageW;

      t->mImageHeight = imageH; 

 }

 

int PutText(CCaptionAdd *p, unsigned char *s)

 {

    CaptionAdd *t = (CaptionAdd *)p;
        char text_flag; //是否汉字

      char fix_length=0;

      char th,tw;//字模高度,宽度

      char i,j;

      char canput; //该位是否为1

      char slant;

      long position; //字模库偏移位置

      unsigned char qh,wh; //内码

 

      if(t->mStartRow == -1)

       t->mStartRow = t->mImageHeight-20; //默认为图像高度-20

      if(t->mStartCol == -1)

       t->mStartCol = 10; //默认为10

 

      int x=t->mStartCol;

      int y=t->mStartRow;

 

 

      while (*s!=0)

                  {

                      //取字模,存入mat

         if (*s>0xa0&&*(s+1)>0xa0)
                               { //汉字

       tw=16;th=16;

       qh=*s-0xa0;

       wh=*(s+1)-0xa0;

       position=(94*(qh-1)+(wh-1))*2*th;

       memcpy(t->mat,t->HZK16+position,th*2);

       text_flag=1;

                 }

    else
                              { //英文

       tw=8;th=16;

       memcpy(t->mat,t->ASC16+(*s)*th,th);

       text_flag=0;

                 }

  

    slant=0;

  //将字模叠加到图像上

  for (j=0;j<th;j++)
           { //y坐标

        if (!(j%4)) slant+=TEXT_SLANT;

        for (i=0;i<tw;i++)
                { //x坐标

          if (text_flag)
                                                    {

                canput=((0×80>>i%8)&t->mat[2*j+i/8]);

                         }

          else
                                                    {

                canput=((t->mat[j]>>(7-i))&1);

                        }

      if (canput)
                                            {

     //     fix_length=(text_flag&&text_h==14);

        if(putpixel(i+x+fix_length+slant,y+j)<0)

            
                          return -1;

                }

                   }

                  }

  

  //计算下一个字符起始位置

  if (text_flag) {

   s+=2;

   if (TEXT_DIRECTION) {

    x+=16+t->mColSpace;

   }

   else {

    y+=16+t->mRowSpace;

   }

  }

  else {

   s++;

   if (TEXT_DIRECTION) x+=8;

  }

  

  if(x>t->mImageWidth-16-t->mColSpace) //换行

  {

   x=t->mStartCol;

   y+=16+t->mRowSpace;

  }

 }

 

 return 1;

 } 

 

int putpixel(CCaptionAdd *p,int x,int y)

{
   CaptionAdd *t = (CaptionAdd *)p;

 if(x>t->mImageWidth || y>t->mImageHeight)

  return -1;

//#ifdef YUV420

 t->mImagePtr[(y*t->mImageWidth+x)] =t->mTextColor.R; //Y

 // mImagePtr[mImageWidth*mImageHeight+(y*mImageWidth/4+x/2)]=mTextColor.G;

 // mImagePtr[mImageWidth*mImageHeight*5/4+(y*mImageWidth/4+x/2)]=mTextColor.B;

//#else

 // y=mImageHeight-y;

 t->mImagePtr[(y*t->mImageWidth+x)*3]=t->mTextColor.B;

 t->mImagePtr[(y*t->mImageWidth+x)*3+1]=t->mTextColor.G;

 t->mImagePtr[(y*t->mImageWidth+x)*3+2]=t->mTextColor.R;

//#endif

 

 return 1;

 

}

l562544801 on 八月 5th, 2009

writespecial(I2C_ADDR,((0×300&addr)>>8),(addr&0xff),data&0xff)
这句中,&运算符前后没有顺序之分,也就是说0×300&addr和addr&0×300是一样的。
还要说明的就是(0×300&addr)>>8的意思是0×000100101100和addr中的数据做与运算,其结果再向右移动8位。

&与运算符

| 或运算符 

 >>右移运算

<< 左移运算

Tags: ,

l562544801 on 八月 4th, 2009

同步
同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。
异步
异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。以CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用 Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。这里提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。
阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。
非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
对象的阻塞模式和阻塞函数调用
对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。函数select就是这样的一个例子。

Tags:

l562544801 on 八月 4th, 2009

线程的引入:
例如,有一个Web服务器要进程的方式并发地处理来自不同用户的网页访问请求的话,能够创建父进程和多个子进程的方式来进行处理,但是创建一个进程要花费
较大的系统开销和占用较多的资源。除外,这些不同的用户子进程在执行的时候涉及到进程上下文转换,上下文转换是个复杂的过程。所以,为了减少进程转换和
创建的开销,提高执行效率和节省资源,人们在操作系统中引入了”线程(thread)”的概念。
进程的作用和定义:进程是为了提高CPU的执行效率,减少因为程式等待带来的CPU空转连同其他电脑软件和硬件资源的浪费而提出来的。进程是为了完成用户任务所需要的程式的一次执行过程和为其分配资源的一个基本单位,是个具备单独功能的程式段对某个数据集的一次执行活动。

线程和进程的区别:
1、线程是进程的一部分,所以线程有的时候被称为是轻权进程或轻量级进程。
2、一个没有线程的进程是能够被看作单线程的,假如一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)一起完成的。

3、系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是他所属的进程的资源),线程组只能共享资源。那就是
说,出了CPU之外(线程在运行的时候要占用CPU资源),电脑内部的软件和硬件资源的分配和线程无关,线程只能共享他所属进程的资源。
4、和进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。
5、进程是系统任何资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而单独存在。
进程和程式的区别:

程式是一组指令的集合,他是静态的实体,没有执行的含义。而进程是个动态的实体,有自己的生命周期。一般说来,一个进程肯定和一个程式相对应,并且只有
一个,但是个程式能够有多个进程,或一个进程都没有。除此之外,进程更有并发性和交往性。简单地说,进程是程式的一部分,程式运行的时候会产生进程。
总结:
线程是进程的一部分,进程是程式的一部分

Tags:

l562544801 on 八月 4th, 2009

我是82年,大学毕业3年5个月。现在一家大型市场咨询公司,自己带一个组,月薪16000,未算其他收入与分红。也就是传统意义上的白领打工仔。在北京,有一套房,80平,按揭,有一辆车,丰田RAV4。

说说我的经历吧

我毕业于全国最好的学校(那两所为人耳熟能详的学校之一),学的却是一门偏到除了留校读硕读博几乎没有其他选择的专业。大四将毕业时,我发现考研 对我来说无异于天方夜谭——我在校园里混了整整4年,GPA不足2.5。更关键的是,那时的我早已找不到一颗作为学生的静谧的心。

在经历了500强,四大,国字委的应聘失败后,我决定出国,04年的6月,同学们或是留校,或是拿着新鲜的三方合同步出校园,我拖着行李回到了家乡——长三角的一座大城市,和我一起回去的还有档案关系和曾经妄想留在北京的户口。

那时的我是心灰意冷的,我羞于在任何一个亲朋面前提起我是XX大学毕业,那是一个在4年前让我身披无数光环的名称。

一年的时间,我失业在家,一个XX大学毕业的无业游民,我开始准备出国,GRE,TOEFL,烦琐无比的申请,一趟趟的回学校开材料。成绩单上那一门门红色的挂科和蓝色的重修无疑在嘲笑我混过的4年,也无疑是我4年来星际,CS,WC3,篮球,燕京,小二,旷课,迟到的完美脚注。

赴美的申请是成功的,一所3流大学给我发来了offer,于是,小康的家庭开始为我凑钱——没有奖学金的留学消费是巨大的,尤其是换算成人民币。

然而签证没有通过,05年的美国签证远没有现在这么好拿,3流大学的offer在签证官面前像空气一样被无视。而这时,雪上加霜,与我在一起五年的女友提出了分手。(打到这句话时,恰好看见她的MSN上线,心里竟是一痛)

我同意了,她是北京的孩子,同校,同级,我们大一时便在一起了,那时的我们,都是初恋,她算是全系最漂亮的女生吧,舞蹈出身。毕业后,她去了四大,工作虽然很累,但不限专业的招聘,不菲的基本工资(毕业生,4850/月)和高额的加班费(正常上班8小时以外,3倍),对一个迷茫的毕业生来说,四大就是天堂。

毕业的一年后,她想买房,并有能力支付房款首付,而我无业,分文不名,出国梦断。

她与我坚持了五年,她的父母也早已将我当儿子看待,可我们最终还是分了,当她向我提出分手时,是以商量的口吻建议:我们先分开一段时间吧……我同意了,那时的我,自卑的无以复加。而她身边,围绕着太多成功的男人。

我心灰,于是母亲在家乡为我谋了个银行的差事。我便开始了自己短暂的出纳生涯。一个从来没有接触过金融的人,在银行里跟着柜员们学习本票支票电汇,为他们打起了下手,连自己的办公桌和电脑都没有,更没有人知道我曾就读于XX大学。

05年的我,竟能如此放平心态,这或许是我今天回首那段往事,唯一值得自傲的地方——拿着极其微薄的工资,为银行的柜员们打杂,甚至其中的几个,是比我低了一届的大专生。我没有椅子,每天打游击一般,站在他们身后看他们出票入票,一站就是一天,穿着廉价的白色衬衫,在那些穿着工服打着领带的出纳身后,或许是很碍眼的。而那时的我,最大的梦想竟是有一套那样的工服,很可笑,现在想来。

我或许是已经被挫折完全击垮了,从小学,到高中毕业,我顺利的让人瞠目结舌,小升初的保送,初中升高中的免试,又直接保送到了XX大学,再加上运动能力好,身高186,加入任何一个团体都是篮球队的主力小前,长相也还算不错……那时的我不明白,什么叫福兮祸所依。上天给了我整整22年的,无以复加的优越,该还了。我现在,特别信这个。

一个电话拯救了我,我在毕业前海投的简历中,竟有一份在一年半后被某位世界500强的跨国集团公司的HR拿到了桌面上,并浏览了起来,于是,我得到了这样一个工作的机会,欣喜若狂,欣喜若狂。

我回到了北京,有一份月薪2500(试用期)的工作,在全世界同行业的最牛B的公司,项目执行。

我到公司的第一天,就开始出差,3个月的项目,公司去了一个team,6人,我是其中的项目支持。压抑了1年的浊气在这里似乎得到释放。

500强公司的待遇是无与伦比的,直到现在,虽然我已经换了很多公司,坐过无数不同的办公桌,有过难以记数的出差经历,职位也是一升再升,可单从出差待遇来说,都无法与我在500强公司做项目执行相提并论。那3个月的差,我们辗转了全国17个城市,每人每天都有较高的打车额度与吃饭额度(各200),住四,五星酒店,单人大床,一人一间,航班只坐国航,每天11点才开工。这对一个刚从挫折中爬起来楞头毕业生来说,是怎样的冲击?我瞬间迷失在其中。

现在总是想起母亲对我说的一句话,当时我躺在希尔顿的大床上,接到了家中的电话,母亲得知了我的近况,在我的洋洋自得里,只是对我说,你其实什么都不是,因为你什么都不会。你还没到享受的时候,也没到自得的时候,你现在需要学习。可是,我真的太自得了。这也注定了我第一份正式工作的惨淡收场。

我的性格中总是有那样纵容自己的因子,我现在已经学会了收敛它们,可那时的我不会,在灰暗的一年后,环境的变化在一瞬间天差地别,那是一种爆发户的冲击,我觉得自己终于摆脱了背运,于是我纵容自己吃喝玩乐,在关键问题上与team leader相悖。回想来,那时的我是多么的可怕,没有起码的职业素养,对不起自己拿的薪水,对不起公司提供的优渥待遇,更辜负了这个想要培养我的平台。

毫无意外的,我的第一份工作在我出差回来后,就夭折了——我没有通过试用期,无论我的直接领导怎样向VP争取机会,我还是被直接扫地出门。事实上,我在公司的办公室里一共也没有坐满过一周。

第一份工作,因为玩忽职守而未通过试用期,500强公司,这是我所有挫折中最大的一次,直到现在,我也没有让任何一位认识我的人知道这番经历,我想,我永远也不会向他们透露,这是我25年人生里最为黑暗的一条深隙,深不见底。

我被打回了原形,于是我开始颠沛,像所有北飘一样在北京飘着,档案被fesco扔了出来,我把它放在了北京人才。我不能告诉父母我被解雇的事,我告诉他们我在北京很好,工作条件很优越,每天都能学到很多东西,可事实上,我已经三餐难以为继。我不能去找我在北京的朋友,我的哥们,我的同学,因为我不能露出我窘迫的现状,而工作一年多的他们,早已小有经济基础,出来聚会的灯红酒绿我没有可能消费得起。

我退了原先租的房子,找到了北四环外一处600的两居合租,我住小间,没有暖气。住大间的是一对刚毕业的学生,直到现在我也不愿再想起我的生命中出现过这样两个人,他们就像这段时光一样是我永远不愿放上记忆桌面的东西。

我开始找工作,05年的11月,天已很冷,我像大部分无业游民一样,像大部分2,3流大学失业毕业生一样,涌进人才市场,没有电脑,天天在网吧投递简历,3个月的薪水很快就被我花光了,于是我开始向家里变着法的要钱,理由繁多,如一次要交半年房租,钱不够。

有一些简历得到了回应,而更多的简历如石沉大海,一个非应届的,没有工作经验没有专业特长的毕业生,很难有公司眷顾。而回应我简历的,则基本是一些小公司。

我去面试了,这让我见识到了无数千奇百怪的,窝藏在居民小区里的作坊式小公司,那是我在大学时代所不敢想象的工作。当然,我也见识到了骗子公司,打着招演员,招演艺人员名义行行骗之实的公司。还有保险推销员,我险险踏入那一行,我也直面了一个人的尊严是如何被另一群人踩在脚底的过程,脚下的那张脸上却依然满是倍儿真挚的笑容。

有一家很大的local公关公司对我表示了兴趣,他们想把我培养成一名文案。应聘的程序严格而繁琐,我通过了笔试,英语笔试,英语口试与AD的面试,我意识到,距离爬出深隙只有一步之遥。可这一步最终却没有迈上去。

总经理提出要和我谈谈,她姓韩。我坐在她宽大的办公室里,她只向我提了一个问题,你对于公关行业有什么看法。我茫然,这个问题如果今天再问我一次,我甚至可以不用构思的立刻提笔写下2000字以上的评论,可是,两年前,对这个问题,我的脑袋里只有空洞的空白。韩总留给了我一份作业,让我回去用ppt写一份proposal,关于一个简单的新闻发布会。

我在网吧里奋战了整整一天,按照自己的想法拼凑了一份ppt,那是一份在今天我无法想象的业余的东西,毫无条理的乱七八糟,不存在任何可行的细节逻辑关联。可那时我是那样满意的就把“杰作”发了出去。我想,韩总收到那样一份ppt,大约感受和现在的我一样吧。我的面试又失败了。

我再也抗不住了,卡里只剩下不到300块钱,我绝对不能告诉家里任何自己的真实情况,于是,当有一家小公司答应录用我时,我竟是如此感谢上天给了我一份工作,我在网吧里,泪流满面,至少,这是家在写字楼里办公的公司。按他们副总的说法,XX大学已经算是通过面试的钥匙了,oh my god….

月薪3000,无四险一金,无工资卡,无工资条。我开始了我的第二份工作。

最近80后的话题讨论的太多,我没有看过那部被热炒的《奋斗》,但那种毕业生所面临的迷茫让我不自觉的想把自己的经历写出来,这是我所认识的人中绝无仅有的坎坷,却又似乎映射出每一个大学毕业生的窘况,于是我想写。

这是家做网站的公司,经营着一个高尔夫球网站,主要的赚钱方式就是通过各种渠道向大款高官们出售各个球场的优惠卡,养着一群装扮媚俗却又花枝招展的销售,不用想也大致知道她们是通过怎样的方式将优惠卡推销出去的。而我。就在这个公司担任所谓的“活动频道”的主管。11月的北京,草黄,没有人下场打球,更不存在什么活动。我便每天给网站更新些新闻信息,顺带着看看网页,打打游戏。

我在论坛上总能看到许多80后的朋友抱怨小公司那种混日子的生活,斤斤计较的同事,欺上瞒下的leader。我只想说,千万别慢慢沦陷在这样的公司里,在多年后渐渐发现自己开始习惯那样的生活,成为那样的同事。我痛恨那里。

我是个爱笑的人,即使是现在,作为一个部门里一个小小的头目,也常常被下面的那帮兄弟笑称为阳光男孩。可是,我永远也记不起我在那个网站公司笑过几回,每天与同事相对无言,看着彼此的扑克脸,再把目光移回自己的屏幕上,各干各的,沉默。

那时找工作依然是我生活中最重要的事之一。网站公司是我维持生计的依靠,但决不是长期的泊位。

在那段混迹于小公司的日子里,大学时我的女友找到了我,她从大学同学那里打听到我在500强公司(我被解雇的事无人知晓),我们出现了和好的可能,初恋,迈入结婚的殿堂,五年的风雨分合,何等的浪漫。可现实却残酷,我回绝了她,我像是在一条漆黑的甬道里,前方看不到哪怕一点点光亮,我害怕她找到我,看见我深陷绝境。因为我明白,以她的性格,她绝不会袖手旁观,可那会击碎我最后一点小小的自尊。

我告诉她,我已经有女朋友了,现在就睡在我的身边。(这是当时电话里的原话,虽然有些像粗制连续剧的情节,大概是我也深受那些泡沫剧的影响吧)她不相信,哭,因为不想让大屋里的那一对听到,并引为谈资,我跑到楼下,穿着单衣在寒风里冲她大吼,我已经不喜欢你了!!然后挂上了电话。我那点可悲的自私的自尊。

我在寒风里戳了很久,然后上楼,睡觉。

前不久,她在MSN上对我说,收到你中秋祝福的短信了,我的父母也收到了,谢谢!我爸爸还说,再也没有人陪他喝酒了。我心酸,因为已经无可挽救得伤了两位老人的心。两位一直把我当儿子一样看的老人,两位逢年过节只要我在北京就会把我接到家里全家打边炉的老人。

06年的2月,经过3轮面试,幸运再次眷顾了我,我被一家世界可以排上前十的会展公司录用了。06年是狗年,本命年伊始,有一个完美的开始,对那时的我来说。

大逃亡般的辞职,我走出那家公司的大门,的确有这样的感觉。崭新的一切在等待着我,这是我所能把握住的最后一次机会了,我对自己这样说。我相信上天不会将机会卡无限次的派发给同一个人。

做过会展的朋友应该都知道,虽然十大最累的行业里面没有这一行,但并非因为它不够累,而是因为它比那些行业累得多。会展在中国一直没有受到过重视,只是把它作为市场营销,或是公关的一个附属品对待。而我,就在这样的一个夹缝行业中起步了。

公司的人手奇缺,可项目着实没少接,每个AE身上起码都背着5,6个项目,有发布会,有晚宴,也有展台搭建。

我就在一窍不通中背上了4个项目,那是一段没日没夜的时光,每天忙到深夜2,3点,手机随时待命。

一场最简单的新闻发布会,需要筹划场地斟选,场地租赁,现场摆台,流程,设计,搭建,道具,人员安排,表演,主持人台本,AV灯光音响,软件视频,摄影摄像,网络直播,礼品购买与包装,记者媒体,新闻通稿,媒体车马费用,接送飞机,嘉宾邀请,安排车辆,酒店入住,嘉宾台本,甚至是盒饭,停车证等等等等无比繁琐的事物,一场最简单的新闻发布会,仅仅落在电脑上的各种ppt,excel与word就有数万字之多,更别提前期各方面的沟通与修改,确切的说,只要客户方面有一点点修改,便是牵一发而动全身,需要会展人员做出最及时的各方面协调,而前期哪怕是最不起眼的一根AV数据线在现场没有到位,也足以使整场精心策划好的会议砸锅。而那时,我竟身背4个项目,与不同的客户周旋,与数十家vendor协调。而我甫入行,一窍不通。

刚开始的项目,我几乎做一个便砸一个。我意识到,做会展,需要有惊人的统筹力,规划力,沟通斡旋能力,需要你反应迅速,为人强硬却又进退有度,同时能说善写,当然,绝对要有无穷的精力体力和脑力。而我,似乎除了英文还不错,其他一无是处。

我能不能撑过试用期,这是我当时唯一的想法,那时,GM经常把我叫到他的小屋里,告诉我,XX客户又投诉你了。我低头,不知如何应对这样的诘难。

我被调组了,调到了一个新组,因为公司挖来了一个新的AD,据说是行业内数一数二的牛人,于是,公司决定把其他组里的累赘编进他那一组。至少,同事们都这样说。

我至今感谢那次调组,它让我碰到了一位非常好的leader,以及两位我引为患难知交的兄弟。

AD同学的办事方式绝对的雷厉,他手上有4,5个大客户,同时可以接下他们所有的会议和展位,并参加投标,他的脾气非常暴躁,但决不是对你有偏见,只是因为你跟不上他的节奏。他会将一切工作极有条理的分配给下面的AM与AE,他时常在饭桌上对我们说,我们是一条船上的人,现在全公司都看着我们这个新组能不能完成今年的任务,我们不能先垮了。那时的组里,气氛前所未有的团结,因为leader,他很真。

我们接了个大项目,上万人的晚会,现场的每一位观众都是嘉宾,那是我迄今为止做过的最大的项目,一个月不到的准备时间,我们忙疯了。组里还有另外两个AE,年龄与我相仿,最大的80年生。我们被分配了各自的工作,却需要相互协调,于是我们渐渐熟识了起来,他俩一个在公司已经做了1年,另一个却比我还新。于是,“老”人带着新人,我们被重压压的喘不过气,却每天挣扎着往返于公司,客户,工厂,会场,独独没有回过家,很多天,没有。

我犹记得晚会的前晚,我们搬到会场附近的酒店里,时隔8个月,我又一次住回了五星级酒店,可我那时完全没有了所谓“享受”的快感。脱下数天的臭衣,洗澡,然后直接去了会议现场,那里的搭建还在继续,礼品与兼职不知有没有到位,我得去盯场。还记得前两天,我在外地出差,住香格里拉,碰到MSN上一同学,丫问我,哪爽呢?我回说,福州,香格里拉。他说,爽嘛。我说,爽吊,就TM一睡觉地方,还不知是不是每天都能睡上。如此而已。

我现在信奉一句话,拔苗不能助长,但压苗却绝对可以。那时所面对的压力是无法用语言表述的,举个简单的例子,上万名受邀宾客的名字必须反复确认并打印成桌签,同时,还需要确认外地宾客的航班和入住信息,这已足够让人疯狂,作为邀请来的嘉宾,在桌签上,他们的名字绝对不能有一个字母的错误,当然,客户的嘉宾名单还总在变动,不到晚会开始,谁又知道哪位嘉宾会临时不来,或者临时想来呢?而这,仅仅是属于整场晚会最不起眼的一个小环节——嘉宾邀请所需要承担的工作。幸好,负责这个工作的人不是我,其实,现在我还是这样想。在这样压力下,我学到了如何操办一台真正的晚会的幕后流程,并疯狂的想要将这些存在我的记忆里。absorbingggg…

晚会结束时,我们连抱头痛哭的力气也没有了。客户一一上来向我们道谢,握手,欢笑。然后,我们坐在地上看着搭建工人撤场。我永远也忘不了当时leader同学站在一边发呆的样子。

经过了这场战役,我渐渐入行,慢慢也可以独立做一些小项目,似乎也没再接到什么投诉。在客户面前不再紧张和胆怯,敢和他们大胆的讨论并招待他们吃喝玩乐,也学会了和vendor们讨价还价,吃拿卡要……我渐渐脱离了月光的窘境,开始向家里汇钱,并开始考虑买房买车。

后来3个AE结拜了,分别是80,81和82年人,我是老三,共患难的感情是真的。我们一起做大项目,单独负责的小项目上也毫无保留的提供帮助。至今我都无比庆幸,这份工作带给我的东西,并不只是让我快速的成长,还有在其他任何工作中都不能带给你的,将同事变成你的至交兄弟。直到现在。我在现在公司,有个30多万的小活,发给“大哥”去做,他居然为了让我能向客户交个漂亮差,在成都盯了3周,他现在已经是AM了,顶着公司那边的压力,公司那里认为他放着一两百万的活不管,跑成都去盯一个30多万的项目,简直不可理喻。可他说,因为那是我发给他的活,他一定得给我干好喽……

基本上,我的经历就到这里了,今年年中,有猎头给我打电话,让我去我现在的这家公司,因为有一个event manager的空缺,月薪16000,可以带一个4人的team。其实,在毕业了三年后,接到猎头的电话已经是家常便饭,大部分我都会礼貌的回绝掉。但那个电话不同,因为在展览公司时我曾经与这家公司合作过几次,在同类公司中或许能排在世界的top 1,至少我与我的同事现在还是这样认为的。作为我原来所在会展公司的甲方,我一直想去,甚至成为了我的一个梦想,因为他能让我接触到行业内更上层的建筑,市场部门的决策层面,于是为了实现这个梦想,我跳槽了,尽管我换过很多工作,但真正意义上的,光明正大跳槽,这是唯一的一次。

房子是开春时开始装修的,现在也住进来有两个多月了,还在付着按揭。车子买了快一年了,跑得不多,21000多公里,上月刚做过保养,我喜欢越野车,可又烧不起油(北京油价太贵),于是买了辆小的RAV4,双门,不实用,纯用在周末有空时出去玩。

我有了个新女朋友,在我在会展公司最累的时候,她一直陪在我身边,像个小孩子似的,总让我想要保护她,时间不长,才一年半,将来……不知道……

现在很多人说我跋扈,我想,那是自信,这种自信是经过挫折和压力无情的摧残后重新发芽长成的参天大树,不会再被轻易摧断的东西。有些人说我阳光,阳光是因为我已无所畏惧,即使面对再大的难题,我也敢笑着对客户说,没问题,交给我来解决。实实在在的东西。

我感谢那段不堪回首的时光,尽管现在我还是不愿提起它。

就写到这里吧。写了很多,把这些年从来不敢说的话全码成了字,酣畅。但愿能收到同龄人的回响,谢谢大家看帖。

编后:是的,在人生的路上,没有风雨,没有彩虹,没有昔日的奋斗,不会有成功(真正意义上的)感觉。如今的大学生,当然我也是其中的一员,会在学校是憧憬美好的未来,设计自己的美丽蓝图,可是到了社会上,坎坷遍地,如何从中坚韧的爬出来,走上康庄大道。没有坚强的毅力和耐心确实是不行的。看完了很欣喜,作者的经历不是传奇,只是每个从象牙塔走出来的新人类必须面临的,经历的,也都会得到的,同时享受着的。亲爱的朋友,面包总会有的,爱情也会来的,属于80后的天下固然属于我们——80后

Tags: