艾莉亚的猫 Time is limited, To be a better man

一个笔试题

对于以下变量定义,以下表达式正确的是:( )

struct node{
  char s[10];
  int k;
}p[4];

A.p->k=2

B.p[0].s=”abc”

C.p[0]->k=2

D.p->s=’a’


这个题里,p是指针,指向p[0]的首地址,p->k=2即*p.k=2,即p[0].k=2

A是正确的。

B错,只有在声明字符数组的时候才能将一个字符串赋给数组。如:char a[5] = “abc”;而char a[5]; a=”abc”;这种写法是错的。

C错,p[0]不是指针,不能用->。

D错,不能将一个 const char 类型的字符 ‘a’ 赋给 数组 s。

每个人的金线

文学的金线

冯唐在《三十六大》里试图说明文学有“金线”。和音乐、美食、普世价值等等一样,尽管标准难以量化,优劣的判断也多半掺杂了人的主观,但文学始终是有一条金线存在的,达到了就是达到了,没达到就是没达到。“文章千古事,得失寸心知”。这条金线和文章的销量没有正相关的关系,在某些时代,甚至负相关。但这条文学的金线,两三千年来香火不绝地流传了下来,掌握在少数人手里。并且,冯唐认为,他就能够明眼看出这一条文学的金线。

手机的金线

王自如在对锤子手机T1的测评末尾,花费占总视频1/5的时间,强调如果抛开一切情怀的包装去看产品,平心而论,这部手机与罗永浩自己宣称的东半球最好用还相差甚远。虽然如此,仍有很多人会把自己想了但没做的情感寄托到这个想了也做了的人身上。如果活在罗永浩的“情怀”之内,那么所有关于产品的技术性的好与坏、对与错都会变得界限模糊。我反感用情怀去包装产品,也反感罗永浩这个人,私以为乔布斯的iPhone在金线之上,罗永浩的锤子在金线之下。但那群活在罗永浩情怀里的人,恐怕不会赞同。

生命的金线

有的人真的达到了,在我认同的金线之上;以同一条金线为准,有的人就是达不到,可对我你而言的达不到,就真的是没有达到吗?我希望我和冯唐的观点一致,但事实上我并不这么认为。云在青天,水在瓶,时光澄澈。如果说真理就在万物的自然常态中,那么人各有态,每个人都有自己笃定的金线,每种人的存在本身就是真理。人类用认知却获得自己看到的那条金线。而认知,却构筑在好奇心、生存环境、教育等诸多因素之上。各式各样的生命形态遍布地球,生命形态的金线,又是否存在?

梁启超对曾国藩的评价颇高,说曾文正公做到了“立德、立功、立言三并不朽”,文森特·梵高希望所有人都能看到他的画并因此感受到他的内心,不惜因此疯掉;阿来在《尘埃落定》里塑造的傻子,因为傻,反而能对大事做出超乎常人的正确决断,加西亚·马尔克斯的《百年孤独》中经历战争而变了个人的年老上校将所有的生命热力用于制作金鱼;痞子在酒肉中嫖赌,高僧鹤形仙眉隐于白云深处,或宏伟、或浪漫、甚至疯狂、不堪,这些生命形态,真的可以用一条金线去分割吗?不然。他们仅仅是以不同的形式存在而已,云在青天水在瓶,野猪在林,家猪在圈,蝼蚁在泥土,它们都在存在的金线之上。

万紫千红,各花入各眼。南北西东,各方自有人。既然存在着,虽不欲划分生命形态的三六九等,人活着的不同阶段也有不同的追求,情怀会变。但我想,每个人在自己老了之后,心里是会有条金线的,或准之以勤,或以诚,或以快乐,或以勇敢,或成就,或物质。回顾一生,达到或者没达到,各位看官,茶余饭后,不妨斟酌斟酌。


作者 @AnyaLin

故事三则

《史记·鹖冠子》

魏文王问曰:“子昆弟三人其孰最善为医?” 扁鹊曰:“长兄最善,中兄次之,扁鹊最为下。” 魏文侯曰:“可得闻邪?” 扁鹊曰:“长兄於病视神,未有形而除之,故名不出於家。中兄治病,其在毫毛,故名不出於闾。若扁鹊者,鑱血脉,投毒药,副肌肤,闲而名出闻於诸侯。”

启发: 研发要做好内测,不要等到出现bug了,充当救火队员而被人夸奖。


《韩非子·内储说上》

齐宣王使人吹竽,必三百人。南郭处士请为王吹竽,宣王说之,廪食以数百人。宣王死,湣王立,好一一听之,处士逃。

启发: 要有真才实学。


邹忌讽齐王纳谏-程序员版

马农毕业八年多,而且手指灵活思维敏捷。有一天早晨他来到公司,穿着体恤,留着胡茬,对他的老板说:“我与清河的徐工程师相比,谁更会写代码呢?”他的老板说:“您太会写了,徐工怎么能比得上您呢!”清河的徐工,是 BAT 的大牛。马农不相信自己会比徐工会写代码,于是又问他的小弟说:“我和徐工相比,谁更会写代码?”小弟说:“徐工怎么能比得上您呢?”第二天,有 PM 从隔壁来拜访,马农和他坐着谈话。马农问 PM 道:“我和徐工相比,谁更会写代码?” PM 说:“徐工不如您会写代码啊。”又过了一天,徐工前来拜访,马农通过和他交流,自己技术觉得不如他;再上 github 一看,更觉得远远比不上人家。晚上,他躺在床上想这件事,说:“我的老板认为我会写代码,是偏爱我;我的小弟认为我会写代码,是惧怕我; PM 认为我会写代码,有求于我。”

启发: 正确认识自己,不要被别人的赞美蒙蔽了双眼。

找出链表中间元素

单链表最大的特点就是“不走回头路”,不能实现随机存取。如果我们想要找一个数组a的中间元素,直接a[len/2]就可以了,但是链表不行,因为只有a[len/2 - 1] 知道a[len/2],其它节点不知道。因此,如果按照数组的做法依样画葫芦,要找到链表的中点,我们需要做两步(1)知道链表有多长(2)从头结点开始顺序遍历到链表长度的一半的位置。这就需要1.5n(n为链表的长度)的时间复杂度了。

有没有更好的办法呢?答案是有的。想法很简单:两个人赛跑,如果A的速度是B的两倍的话,当A到终点的时候,B应该刚到中点。这只需要遍历一遍链表就行了,还不用计算链表的长度。

大小端判断

大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

CPU大小端判断函数,C/C++代码

#include <iostream>
using namespace std;
int judgeLittleEndian()
{
  union{
    int i;
    char c;
  }u;
  u.i = 1;
  return u.c;
}

int main(int argc, char *argv[])
{
  if(judgeLittleEndian())
    cout<<"\tLittle Endian!"<<endl;
  else
    cout<<"\tBig Endian!"<<endl;

  return 0;
}