Lost:人民搜索研发实习生笔试

2011年5月28日 1 条评论

这个实习其实一直到截止日期的前一天我才投的简历,因为看了他的职位要求,各种搜索的算法,和我做过的项目一点关系没有,差个十万八千里,投了过的概率也微乎其微。但是后来想着不如去试试,见识一下传说中的搜索国家队的笔试题是个神马情况,然后就投了。

然后,我写着各种Twitter的简历居然没有被过滤系统过滤掉,收到了笔试通知,还是比较惊讶的。

笔试地点在CBD国际环球金融中心,一个IT公司,居然开在CBD。。。

到了地方以后,才发现还有更惊讶的。

笔试考场居然直接放在办公区,一个巨大的办公区,工位全是新的、空的,还两层。。。

国家队果然霸气十足。

考生每人发了瓶矿泉水。

2011-05-28_09-35-43_306

考试两个小时,考题分两个部分。第一部分不定项选择题,考的都是C/C++以及操作系统的基础知识,考的很细,也有不少陷阱。包括递归的算法复杂度计算,Linux底层的支持,进程通信的知识,C/C++的各种细节。第二部分是算法题,4个大题,从易到难,最后直接上动态规划了,然后我就不知道怎么动手。。。囧了。

题答的不好,特别是后面的算法,只有一个自己认为肯定是对的,而且效率还可以。还有一个结果应该对了,但是时间复杂度估计得坑爹。

估计就是酱油了。

要大力加大算法的练习啊,算法真的很重要,但是也很讨厌。

考完和其他同学闲聊,大家表示这考题出的很有水平。用张某人一句话,乒乓球打的不错,题也出的不错。

由于考试时都签了考题保密协议,所以这里具体考试内容就不写了,另开一加密日志写好了,反正我也写不出个所以然,因为本来就不会。

分类: 鄙视记录 标签:

Lost:有道运维开发面试

2011年5月27日 评论已被关闭

上周找同学内推的有道运维开发的实习,然后前几天收到面试通知,今天下午四点面试。

怕路上堵车,于是骑自行车去的,3:50到了创业大厦。找到前台,说明是来面试的。还没到点,让再边上一个屋子等着,里面已经有两个同学在等了。

坐那等着,顺便小聊了一会,那俩面的都是研发岗位,有一个是北交的,另一个还没来得及问,他就进去面试了。

然后,一直等,等他俩都进去面试了,还没到我,囧。然后来了一位美女,搭讪后发现居然也是北邮的,是网研交换中心的,面的是词典部门,上午刚面完广移。

都5点了,还木有轮到,于是跑前台在去问问,然后前台发现好像忘记和里面联系了,囧死。

再等了一会,面试官出现,带到一个会议室面试,1v1面试。

面试官翻了一下简历,让介绍一下简历上的项目,然后balabala开始介绍。

说完一个,问在项目中做了那些事,说明是项目负责人,完成项目的大部分工作。然后问为什么要这么设计,有说了一堆。

然后第二个,DM642那玩意。这个东西说实话,不太懂。说明只负责了其中的一部分工作,做了流量控制和丢包处理这一块。然后问了丢包检测怎么做,说了在每个包加序号,包长,偏移量,然后这个系统是单向的,没有反馈,错误的包直接就丢了。然后问了采集,编码,发送三个进程之间的关系,为什么这么做。这个也答的迷迷糊糊的。。。就说了一下消息队列,用这个队列来缓冲编码和发送任务的时间差。

第三个项目,javatweet那个,没问啥。

然后问我,top里头load那三个数字的具体含义。这玩意天天看,但是还真没去关注具体的含义,囧死。说是系统负载,平时只关注它会不会超过1,超过1就是过载了,多核的cpu可以允许超过1小于cpu数目。面试官不太满意,我也知道这答案肯定不靠谱。

下面是回来查到的正确答案。

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:

  • 它没有在等待I/O操作的结果
  • 它没有主动进入等待状态(也就是没有调用’wait’)
  • 没有被停止(例如:等待终止)

load 后面分别是1分钟、5分钟、15分钟的负载情况。数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。如果这个数除以CPU 的数目,结果高于5的时候就表明系统在超负荷运转了。

然后,面试官又看了一眼简历,说,你写个程序吧,把一个字符串转换为浮点数。

想了一下,开始在纸上写的是先用strch函数确定小数点的位置,然后分别对付整数部分和小数部分。写完发现这办法不好,然后又写了个用while循环,直接处理,遇到小数点跳出循环然后处理小数部分(小数部分用了堆栈)。写完发现,是不是可以直接根据float数据类型在内存中的结构有跟好的处理方式,但是死活想不起float在内存中什么结构了,唉,真是准备不足啊。只好把前面的程序交了,然后说了一下后面的想法。

IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f ; 11 位偏置指数 e ;以及 1 位符号 s。这些字段连续存储在两个 32 位字中。

在VC里面,double型数据占据了8个字节,共64位。

最高位是符号位,0表示正,1表示负。

接下来的11位表示指数,用移码表示,关系为:11位数组成的值(无符号)-1023=指数,如上所示5.0的指数部分是2,11位数组成的值应该是1025,即100 0000 0001
余下的52位是小数位,其中1.0……中的1是默认的,没有占据位数。5.0的小数部位是1.01,则它的小数位在内存中应该表示成0100 0000 0000 ……0000(共52位)
所以+5.0在内存中存储的形式应该是0100 0000 0001 0100 0000 …… 0000即0×40140000 00000000。

float型和double型基本一样,只是它用8位表示指数,用23位表示小数,另外它的移码表示不是相差1023(2的10次方-1),而是127(2的7次方-1)。

下面是C代码库中的atof函数源码,看了一下,和我写的程序思想一致,但是没有用堆栈,确实更方便,我当时为啥没有想到呢。而后面那个采用内存结构的方法应该是行不通的。而且这个函数确实考虑特别周到,考虑到了符号和E的问题。

#if HAVE_CONFIG_H
# include <config.h>
#endif

#include <errno.h>
#ifndef errno
extern int errno;
#endif

#include <ctype.h>

#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
# define IN_CTYPE_DOMAIN(c) 1
#else
# define IN_CTYPE_DOMAIN(c) isascii(c)
#endif

#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
#define TOLOWER(c) (IN_CTYPE_DOMAIN (c) ? tolower(c) : (c))

#include <math.h>

#include <float.h>
#include <stdlib.h>
#include <string.h>

/* Convert NPTR to a double.  If ENDPTR is not NULL, a pointer to the
   character after the last one used in the number is put in *ENDPTR.  */
double
strtod (const char *nptr, char **endptr)
{
  register const char *s;
  short int sign;

  /* The number so far.  */
  double num;

  int got_dot;                  /* Found a decimal point.  */
  int got_digit;                /* Seen any digits.  */

  /* The exponent of the number.  */
  long int exponent;

  if (nptr == NULL) /*如果为空串,则结束转换*/
    {
      errno = EINVAL;
      goto noconv; /*转向处理无法转换的代码*/
    }

  s = nptr;

  /* Eat whitespace.  */
  while (ISSPACE (*s))
    ++s;

  /* Get the sign.  */
  sign = *s == ‘-’ ? -1 : 1;
  if (*s == ‘-’ || *s == ‘+’)
    ++s;

  num = 0.0;
  got_dot = 0;
  got_digit = 0;
  exponent = 0;
  for (;; ++s)
    {
      if (ISDIGIT (*s))
        {
          got_digit = 1;

          /* Make sure that multiplication by 10 will not overflow.  */
          if (num > DBL_MAX * 0.1)
            /* The value of the digit doesn’t matter, since we have already
               gotten as many digits as can be represented in a `double’.
               This doesn’t necessarily mean the result will overflow.
               The exponent may reduce it to within range.

               We just need to record that there was another
               digit so that we can multiply by 10 later.  */
            ++exponent;
          else
            num = (num * 10.0) + (*s – ’0′);

          /* Keep track of the number of digits after the decimal point.
             If we just divided by 10 here, we would lose precision.  */
          if (got_dot)
            –exponent;
        }
      else if (!got_dot && *s == ‘.’)
        /* Record that we have found the decimal point.  */
        got_dot = 1;
      else
        /* Any other character terminates the number.  */
        break;
    }

  if (!got_digit)
    goto noconv;

  if (TOLOWER (*s) == ‘e’)
    {
      /* Get the exponent specified after the `e’ or `E’.  */
      int save = errno;
      char *end;
      long int exp;

      errno = 0;
      ++s;
      exp = strtol (s, &end, 10);
      if (errno == ERANGE)
        {
          /* The exponent overflowed a `long int’.  It is probably a safe
             assumption that an exponent that cannot be represented by
             a `long int’ exceeds the limits of a `double’.  */
          if (endptr != NULL)
            *endptr = end;
          if (exp < 0)
            goto underflow;
          else
            goto overflow;
        }
      else if (end == s)
        /* There was no exponent.  Reset END to point to
           the ‘e’ or ‘E’, so *ENDPTR will be set there.  */
        end = (char *) s – 1;
      errno = save;
      s = end;
      exponent += exp;
    }

  if (endptr != NULL)
    *endptr = (char *) s;

  if (num == 0.0)
    return 0.0;

  /* Multiply NUM by 10 to the EXPONENT power,
     checking for overflow and underflow.  */

  if (exponent < 0)
    {
      if (num < DBL_MIN * pow (10.0, (double) -exponent))
        goto underflow;
    }
  else if (exponent > 0)
    {
      if (num > DBL_MAX * pow (10.0, (double) -exponent))
        goto overflow;
    }

  num *= pow (10.0, (double) exponent);

  return num * sign;

overflow:
  /* Return an overflow error.  */
  errno = ERANGE;
  return HUGE_VAL * sign;

underflow:
  /* Return an underflow error.  */
  if (endptr != NULL)
    *endptr = (char *) nptr;
  errno = ERANGE;
  return 0.0;

noconv:
  /* There was no number.  */
  if (endptr != NULL)
    *endptr = (char *) nptr;
  return 0.0;
}

然后问我会不会perl和python,回答会基本的python,不会perl。然后就没有问问题了。

最后问了一个问题,就是如果你写了一个服务程序,那么你怎么通过另一个程序来监控这个服务。首先回答的是服务程序产生日志,然后另个一程序分析日志。面试官表示同意,然后问还有什么方法。我说可以通过进程间定时发送状态消息的方法,面试官继续问还有什么方法。我又说可以通过监视服务器所在进程的进程号。然后问题就来了,问我一个进程起来后怎么获得自己的进程号。我就记得有一个系统调用的干这事的,具体忘了,没答上来。。。。回来查了一下,应该就是getpid()。

然后问我有什么问题,问了一下这个工作具体是偏向运维还是开发。回答,基本不负责维护,主要是开发,开发运维用的工具。然后问了一下时间要求,说是一周3天。

最后,面试官告诉我一周内会有结果,撤!

大概就是这样,处女面,没有经验,表现的很差。。。估计要杯具。

去之前,以为要问算法,要问计算机网络,要问脚本,于是特别看了很多算法,计网,python东西。结果一个算法都没有问,计网的东西也没有问,囧死。看样子还是对职位要求不清楚。。。

总算处女面是有了,以后加油吧,对职位的要求还是要弄清楚,不然杯具会更多的。

分类: 鄙视记录 标签:

大运河森林公园

2011年5月20日 1 条评论

前几篇日志中提到,北京所有的区县,还剩下一个通州没有去过。

那就去走走。

上周日去了一趟通州的“大运河森林公园”。

没错,就是京杭大运河。公园在通州北运河的两侧,面积很大。

早上一不小心把闹钟给按掉了,9点才从学校出发。地铁一直到土桥站,花了一个多小时。

网上查的从土桥去森林公园有个通32路,直接到公园大门口,于是我就坐那等了,结果等了20分钟不见车来。。。囧死。只好坐通13路到创展家居,从南门进了。

公园很大,我从南门一路瞎逛到正门,走了有俩小时吧。当然,也拍了一路照片。

河边种了很多类似水稻的草(不是水稻),然后,还伴着一阵阵蛙鸣,和布谷鸟的叫声,顿时响起小时候家里的景象了。真是“稻花香里说丰年,听取蛙声一片。”

公园里人不多,很清静,散心巨好。

看景的话,推荐自行车来,要走完整个园子太大了,我这只走了四分之一吧。

回程的时候巨囧,正门口只有杯具的同32路。我到的时候,有一拨人等了已经半个多小时了,没车,然后等不住打车走了。我在那吃吃饼干,也坐着等了20多分钟,还是没车,问题是也对面也没见这车,最后和人拼车去地铁站了。这车也太不靠谱了,估计得一个多小时一趟,真是个传说啊。。。

骑车过去比较靠谱,那边还有运河公园,运河文化广场,运河奥体公园,都是连成一片的。有空骑车过去转个遍。不过机会肯定是越来越少了,项目、找实习,没那么多空闲时间了。

到此,走遍北京第一阶段——在北京所有区县留下脚印,已经顺利完成。

下一个阶段,还没有计划好,估计是把路上看见的有趣的地方再去好好看看吧。

上图片吧

先上大门,不过我不是从这里进的,而是从这出的。

nEO_IMG_DSCF8377

nEO_IMG_DSCF8281

nEO_IMG_DSCF8286

nEO_IMG_DSCF8292

nEO_IMG_DSCF8315

下面这个巨象稻田,哈哈。

nEO_IMG_DSCF8334

下面这几张亭子的照片,个人觉得巨喜欢。特别安静的感觉,很好。

nEO_IMG_DSCF8325

nEO_IMG_DSCF8337

nEO_IMG_DSCF8343

nEO_IMG_DSCF8347

nEO_IMG_DSCF8351

>>>Picasa相册<<<

>>>Live相册<<<

分类: 生活杂记 标签: ,

Lost:广移实习生

2011年5月14日 评论已被关闭

大家都在风风火火的找实习,到处也在风风火火的招实习。

在blog上开辟“鄙视记录 Lost Log”分类,看看自己要被多少公司鄙视多少次。

简历准备的比较玩,阿里,腾讯,百度,都错过了。

广移是简历准备好后头的第一个。说实话,准备的简历在这上面还真没用上,他自己弄的一个招聘系统,简历完全不按常理出牌。

然后,就被鄙视了。连笔试通知都没收到,被鄙视的特别彻底。

今天笔试,虽然已经听说广移不给霸笔,但是还是想去看看。结果果然不给,没有考号,那个机读卡就作废了,考了也没用。

不过为了见见试卷,宿舍有个家伙因为时间冲突没来,我就拿他的考号考了一把。

试卷71个题吧,全是行测贴,什么找规律啊,猜数字啊之类的题。考75分钟,完全不够用,最后有十几二十个题都是蒙的。出来一问,全是这情况。

好吧,广移到此为止,鄙视的体无完肤。

只是,没想到,bs来的这么快,刚一出手就被bs,而且被bs的这么彻底。

我那舍友要因此进了面试,我就彻底的囧了。。。。

分类: 鄙视记录 标签:

实验室密云两日游

2011年5月11日 1 条评论

其实每次出去回来传照片,写流水账也是个挺费时间的事情,挺难坚持的也。

上周末实验室组织郊游,敲定目标是密云。但是直到出发前都没有最后具体确定是哪个景点,准备去了再说。

选的地方在远郊,公交不太方便,坐火车过去。但是这个车早上6:15发车,搞的我们4:30就得起床。。。而且还有烧烤的东西保存问题,都很麻烦,放隔壁实验室冰箱里吧,教学楼又没这么早开门,放会宿舍吧,又怕坏了。还好金五星菜市场4:00就开门了,所以羊肉可以早上出发的时候过去取。

火车是传说中的普客,也就是慢车,比普快还低一个等级,逢站必停。晃晃悠悠的开了4个小时,才到目的地石塘路站。一路上打牌三国杀也没觉得时间很长,就是那个困啊,起的实在太早了。。。

本科大四的时候,班里组织来过一次这里。一到石塘路,看见熟悉的车站,熟悉的村子,就是来的人不一样了,唉,物是人非的感觉啊。。。有点酸酸的。

还有更巧的。到了住的地方,一过那个拐角,我就觉得这地方咋这眼熟。进门之后更加觉得一切都很眼熟。经过鉴定,大四那次,住的也是这家。。。这也太过于巧了吧!!!

问了下老板附近的景点,老板推荐黑龙潭和桃源仙谷。大四去的就是黑龙潭,不想去了,所以就杀去桃源仙谷了。

门票有点贵啊,学生票居然都要32。

刚进景点的时候,就是一条没啥水的小溪,一条修好的游步道,一个人工的水潭,感觉有点坑爹,不咋地。不过在拐过一个拐角之后,突然出现了一个很高的瀑布,给人一种惊喜。

DSCF7997

看介绍,这景区的最高峰是808米,不算高,但是这个纵深很深啊,一直都在山谷里走。

后面的景色还是不错的,缺憾就是北京现在太干了,很多瀑布都变成涓涓细流了。

DSCF8023

DSCF8029

DSCF8037

路上看见这么个地方,我们都是干脆叫“麻将台”算了,反正上面也正好有人坐着打牌。

DSCF8038

DSCF8046

人多,速度比较慢。从上午10点开始爬,一直到下午2点差不多才全部登顶。

这就是景区的最高峰,观峰台。站在上面视野比较开阔,风景不错。

DSCF8102

DSCF8110

DSCF8118

SAM_0516

SAM_0522

在山顶拍若干风景照以及ws雷人照,休息片刻后,开始从南山回路下撤。山顶的风实在太大了,而且我们还没吃午饭,得找个阴凉无风的地方解决午饭。

下山的路开始一直在山脊上走,并没有多大的下降。路一直都是这种坡度,给人一种比较绝望的感觉,这坡度下山得下到什么时候去啊。。。。

DSCF8134

路上能看见远处的密云水库,挺漂亮的。

DSCF8129

DSCF8146

在山脊山走了好久,然后就开始急剧下降,很快就从山顶下来了。

最后走出景区的时候,已经快5点了。

晚上活动,就是烧烤了。

羊肉买多了,11个人买了6斤羊肉。。。

DSCF8178

培根卷金针菇,巨好吃。

DSCF8177

还有我们自己腌自己做的纸包鸡翅,味道不错。缺憾就是腌的时间短了点,不够入味。

DSCF8180

P1000597

还有,发现玉米拿锡纸包着烤出来也是很好吃的,特别的香。就是有点不像烤的,更像焖出来的。

P1000602

P1000603

最后吧,土豆基本都没吃,第二天拿来炖鸡了。羊肉串也剩了二十多串,第二天和多的金针菇一块炒了。

晚上烧烤,打牌,喝酒,一直折腾到一点钟才消停。

第二天早上就直接睡过去了。

吃过午饭后,步行前往水库边,不远,走了半个小时不到吧。

沿着铁路往前走,通过三个隧道,白河1,2,3号,在铁路桥下切,就到了。

当天下午的天气有点要下雨的感觉,远处的山云里雾里的,看起来还是很不错的。

DSCF8219

DSCF8227

在来几张火车的照片吧

DSCF8255

DSCF8256

DSCF8264

晚上5点火车回程。比去的时候还慢,开了有5个小时吧。。。

在村里买了方便面,上车以后,经嘻嘻同学亲身体验,发现车上的开水泡不开面,大家顿时囧了。只好把泡面以外的所有东西都线消灭干净了。到怀柔北站之后,发现站台上有卖泡面的,于是花了点钱,把面都泡了,顿时觉得这就是人间美味啊。

破车一路晃悠,在怀柔北,昌平北,沙河,清河,这些个小站,停了都有20分钟左右吧。。。车子等级低,还是单线,没有办法╮(╯_╰)╭

大约晚上10点钟,才到西直门。

over。

>>>Picasa相册<<<

>>>Live相册<<<

分类: 生活杂记 标签: ,

五一

2011年5月3日 评论已被关闭

五一三天假,说长不长,说短不短。。。

本来有人提议杀去华山,虽然有心,可是华山不像泰山这么近,财力已经不足以支撑这个想法,于是放弃。

还是就北京内转转好了。

第一天,沙尘暴。。。新闻报道了甘肃发生了今年最严重的沙尘暴,能见度不足百米。然后这写沙就随着西北风一路吹到了北京。那真是满天黄沙了,在外面都不敢张嘴。中午下了点小雨,雨滴都是脏的,看路边的车上全是泥点子。

下午接到yegle电话,告知晚上有腐败活动。于是晚上和yegle、mwlind等人在小肥羊搓了一顿,并进行了亲切友好的交谈。话题涵盖找工作,研究生生活,房租,iphone,Android,黑莓,VPN,等等等等。。。

第二天,野人帮,去的就是上周去过的京西古道。至于为什么去两次,因为暂时不太想野营了,还有就是野营路线都没有山。我比较喜欢山山水水的。

这次和上周的情况形成了巨大的反差。反差一:交通工具。上次是公交过去的,这次包车。速度那个快啊。。。阜石路的高架修好了,很爽。不过还是在门头沟堵了好久,都是出城郊游的。反差二:天气。上次天气巨好,天很蓝,能见度很好,这次有沙尘,能见度不行。反差三:男女比例,这个一会看照片就知道了。

这里有点小总结,这种活动,如果出队的女生占大多数的话,其实自己不用带太多的腐败物资,带足水足以。因为女生都巨能腐败,都带巨多吃的。。。真的是巨多。。。你能想到神马都有带的,这次甚至还有带鱼干的。包里有空间还能帮忙背东西神马的,是吧。

然后说说小狗之家那只小狗,这次被我们喂的肚子圆滚滚的,走不动路了都。。。

好吧,上点照片。

下面这是京门铁路,1906年由詹天佑修建。为的是将门头沟地区的煤运出来,解决京张铁路的燃料问题。这条铁路由西直门一直到木城涧。现在西直门到五路段已经被拆除,著名的京门小票车也08年永远的停运了,现在只有一些运煤的货运列车在运行。但是据说北京地铁S1线西延线可能会借用这条铁路,让这条百年的老铁路继续发挥作用。

DSCF7865

看着人家这么拍,我也学学好了。

DSCF7871

前方是一个小车站

DSCF7874

看看这天气,沙尘好大,严重影响视野。

DSCF7879

山中的桃花,和公园的里的不一样啊不一样。

DSCF7900

路边的野花,嗯,野花,保护环境,不要乱采。

DSCF7902

还有野果,不过这个对焦对错了,对叶子上去了。

DSCF7953

延绵不绝的山。

DSCF7915

好吧,上合影了

2

在山头上收到这么个短信,令我淡定不能。。。我就是再能走,也不可能走到保定去吧?电信啊,你又穿越了。。。

DSCF7939

下面这个图。。。谁告诉我应该从哪边开始念。

DSCF7967

至于更多的图片就不上了,直接放在了上次的相册里了,链接参照上一篇日志。想看风景的,想看美女的,自己去翻好了。不过照片好多都没收集到,有待补全。

下山以后,接到了高中同学的电话,晚上去汉丽轩腐败,于是果断在航天桥下车,打的前往。感叹一下,真是从来没在这个点见到过这么通畅的路啊,西三环,莲花桥,北京地址,天宁寺桥,西二环,这些个平时堵的水泄不通的路段,没有一个地方堵,特别通畅。人果然是都跑到郊区玩去。爬了一天山下来吃自助,那个爽啊。。。

第三天,沙尘退去,阳光明媚啊。五一哪都是人,可是我就找到这么个清静的地方,哈哈。

延庆的夏都公园,特别特别清静,整个公园就没多少人,吹吹风挺不错的~

2011-05-02_13-43-36_61

2011-05-02_13-44-11_655

这些个吊车貌似有点煞风景,呃。。。

2011-05-02_13-47-07_226

远处的山,应该就是传说中的燕山山脉?话说我还没去过燕山来着,有机会是不是考虑去看看?燕京燕京,来了一趟是不是得去趟燕山~

2011-05-02_13-55-39_906

下面这个。。。为嘛能拍成这么蓝???当时绝对没有这么蓝。。。

2011-05-02_14-07-12_697

园子里看见一如下雕塑,不知何意。。。也没个解释。难道是传说中的六指??? ╮(╯_╰)╭

2011-05-02_14-13-46_515

>>>Picasa相册<<<

>>>Live相册<<<

Over!

PS.昨天下午看到新闻,我们1号爬的那个山2号下午着火了,应是游客在山上吸烟造成的。我特别讨厌吸烟的,吸烟这玩意有百害而无一益,烟味还巨难闻。这个天干物燥的,在山里吸烟。。。真是造孽!烟这个东西什么时候能在世界上消失就好了。