来了一个多月了,这边的实习节奏比我想象中要轻松许多,也许大公司都是类似,除了上次写的shell程序外,之后的一周里,allan让我写了一个接口,因为我们项目组的工作目前正在提测,所以对于我这新来的兵就没有什么好安排的,这个接口是由我们组提供给测试部门的,而内部实现我们组已经完成,只需要封装一下就可以了,我认为这个很简单,所以一口答应下来(不答应难道我说不行啊!!!@!!)。看了一些内部实现,然后又看了我们组之前写的一些接口的例子,然后听了allan的建议,我就动手开始写了。事实上我完全没有用C++在linux下写接口的经验,以前顶多就是写写一般的程序,所以对接口的一些要求并不知道,不过即使这样我也在第二天下午把代码写完了,不过就像那句老话,写代码只是任务的10%,我还要开始测试,改bug的循环。。。

我自认为这个接口写的很挫,前前后后改了好几遍,allan也说了我好多次,可没办法,我就是那么个性格,认为代码就应该反复修改,但他的意见是让我测试好了,一定没有问题了再提交,我还记得倒数第二次提交了,接口都给测试部门的人了,我回来发现一个bug,然后又通知allan需要修改,这个时候我自己都不好意思了,确实,写这么一个接口,就四五百行代码,前前后后反复改动,可见我没有一个完整的编程思想,不熟悉C++是一个原因,没写过接口是一个原因,最后一个原因就是我的态度了,我从一开始就认为这件事情非常的简单,这是我的错。就像所有的新人一样,都认为自己很牛X,什么都能做,反应速度快,学习能力强,可真正到了任务面前,往往就毛手毛脚,呵呵!!青春啊~~~热血啊~~~

这个接口里有一个部分需要检查ipv4地址的格式是否正确,我首先想到的是用正则表达式检查,可我仔细看了网上关于这部分的讲解,确实不太简单,主要问题是我无法确定是否正确,而且使用正则表达式在我们的代码里允不允许还不好说,所以我就自己手动进行检查了,我的方法很土也很复杂,我认为简单的才是好的,才是美的,所以我希望有朋友能提供简单点的办法,当然是非郑泽表达式的,对了,在boost里确实有这么个检查ipv4地址的方法,但我们的包已经封装好了,不允许添加其他的库,所以我也没有办法使用,才导致了这么挫的代码。

 
  
  1. bool XXX::IsAddress(const char *ipstr)  
  2. {  
  3.         int n;  
  4.         char a[4][5];              
  5.  
  6.         if (3 != count_char(ipstr, '.'))  
  7.         {  
  8.                 return FALSE;  
  9.         } 
  10.  
  11.         n = sscanf(ipstr, "%[^.].%[^.].%[^.].%[^.]", &a[0], &a[1], &a[2], &a[3]);  
  12.         if (n < 4)  
  13.         {  
  14.                 return FALSE;  
  15.         } 
  16.  
  17.         int i = 0;  
  18.         int len;  
  19.         while (i &lt; 4)  
  20.         {  
  21.                 if(check_digit(a[i]))  
  22.                 {  
  23.                         return FALSE;  
  24.                 }  
  25.                 len = strlen(a[i]);  
  26.                 if (('0' == a[i][0]) && (len > 1))  
  27.                 {  
  28.                         return FALSE;  
  29.                 }  
  30.                 ++i;  
  31.         } 
  32.  
  33.         if ((atoi(a[0]) < 0) || (atoi(a[0]) > 255) ||  
  34.                 (atoi(a[1]) < 0) || (atoi(a[1]) > 255) ||  
  35.                 (atoi(a[2]) < 0) || (atoi(a[2]) > 255) ||  
  36.                 (atoi(a[3]) < 0) || (atoi(a[3]) > 255))  
  37.         {  
  38.                 return FALSE;  
  39.         }  
  40.         else  
  41.         {  
  42.                 return TRUE;  
  43.         }  
  44. int XXX::count_char(const char *buf, char chr)  
  45. {  
  46.         char *ptr = new char[strlen(buf)+1];  
  47.         strcpy(ptr, buf); 
  48.  
  49.         int n = 0; 
  50.  
  51.         do {  
  52.                 ptr = strchr(ptr, chr);  
  53.                 if (NULL == ptr)  
  54.                 {  
  55.                         break;  
  56.                 }  
  57.                 else  
  58.                 {  
  59.                         ++n;  
  60.                         ++ptr;  
  61.                 }     
  62.         }while(1); 
  63.  
  64.         if (NULL != ptr)  
  65.         {  
  66.                 delete ptr;  
  67.         }  
  68.         return (n);  
  69. bool XXX::check_digit(const char *p)  
  70. {  
  71.         if (NULL == p)  
  72.         {  
  73.                 return FALSE;  
  74.         }  
  75.         else  
  76.         {  
  77.                 while (*p != '\0')  
  78.                 {  
  79.                         if (!isdigit(*p))  
  80.                         {  
  81.                                 return FALSE;  
  82.                         }  
  83.                         ++p;  
  84.                 }  
  85.                 return TRUE;  
  86.         }  

判断中有明显的漏洞,使用sscanf函数时,我的数组长度是定下来的,但传入的参数有多长谁也不知道,虽然我完全可以在赋值之前进行一个限定,但这明显太搓了,代码经过了我一定的修改,不会体现出任何和公司有关的内容,所以才敢贴出来,如果有朋友有更好的办法,一定要告诉我啊。。。我这里先谢过了。。

写完这个接口后又写了一个demo例子给测试部门,甚至写了份关于接口的文档,可到最后测试部门还是过来找我面对面解释,所以我还是一直以来的观点,文档什么的都是浮云,有毛线的作用啊!除了向上级汇报,显得自己好像做了很多事情。。。。(文档帝不要喷我哦。。。。)

干完上面那一票之后就闲了下来,之间举行部门篮球赛,我们组一路过关斩将,直杀决赛,我打了两场,上场不到40min,不过我还是挺努力的,照这个势头,我们组必须拿下今年的冠军了。

闲着的这段时间,allan也和我聊过,让我学习unix编程,看些书,熟悉文件系统,网络那部分,我们组的主要工作就集中在网络那部分。这些我都明白,已经买了300多元的书,晒一下书单,如果有朋友也想学下,推荐这些书,非常经典,当然最好看英文版,只要你英文够好,我是不行的。。。翻译那些英文耽误了我好多时间。

p_w_picpath

还提一点,我遇到了以前在学校同一个团队并且是我的学院的高一级的学长,虽然我一直知道他在这个公司,但没想到会在电梯里遇到他。。还聊了几句,非常的开心。上周我们组新来了个实习生,名字非常的霸气,叫cloud,为人随和,易于沟通,要是早点来就好了。

虽然实习还没有结束,但我还是想发表下自己的感受。

首先能来这样一家大的企业实习,对于我人生的积累又了增加了好多,这次是我第一次出远门,跨越半个中国来到这个城市,我非常的平静,因为我知道,我天生就有一颗流浪的心,我将来是要环球旅行的,所以有这样的态度是基本要求。

然后对于大企业内部的工作情况我有了较深的了解,知道了那些被称为白领的人是怎么样的一群人,以及他们的工作和生活情况我也有了体验,这对于我日后的自我审视非常重要。

接着我认识了一个同来实习的朋友,虽然不是一个组,但我们基本都在一起,每到周末我们就会出去腐败或者堕落一下 ,这段时间是这几个月来最快乐的了。比如这周末我们决定去海边看MM,多么美好的愿望啊。。。

出于对这家公司好,我个人有一些建议,这里就先不说,等最后下一篇实习流水账再谈,暑假就快结束了,相信大家的暑假一定都非常的精彩,我非常想了解,有朋友写了的可以留下地址,我果断去踩啊~~