手动挡车不同于自动挡,离合器、刹车、油门要配合好才可以稳稳当当的开好车,手动挡车驾驶虽然比自动挡繁琐些,但也有自身优点,开常了便会驾轻就熟的。汽车大师提醒,起步最重要,离合器的控制又是关键。离合快踩慢抬,半联动时轻踩油门,起步就会很平稳。 1、起步技巧 开车要穿合适的鞋子,拖鞋、女高跟鞋等都不合适,对新手来说布鞋等底薄的鞋最好。 不同于自动挡车,手动挡车起步时,左脚把离合器踩到底,挂一档,右脚虚空着放到油门上方,慢抬离合的同时松手刹同时轻踩油门,踩油门后踩离合器的左脚慢慢完全抬起,车辆平稳起步。 但遇到高坡起步时,左脚离合器要抬到恰到好处,即车辆处于“半联动”状态,这时即使松了手刹,松了刹车,车辆也不会溜车。然后紧跟上踩油门,慢抬离合器,松手刹,车辆起步。 2、升档注意 紧接着换二档时,离合器要快踩慢抬,否则车辆闯动,很不平稳。换三档时离合器仍要快踩慢抬,到四档以后就无关紧要了。 当车辆快到信号灯前时,要提前判断,如果离信号灯还有二三百米,绿灯闪烁,就可以摘个空挡,滑行到路口,等红灯。这样不仅可以省油,还不用急急忙忙的猛踩刹车。 3、不要空挡滑行 在下长而陡的坡道时,千万不要空挡滑行,别以为能省点油,其实省不了多少。空挡时失去了发动机的制动减速功能,万一遇到紧急情况,光靠刹车很难快速减速,有时甚至能导致刹车失灵。 在雨雪天行车,需要特别注意,不仅要放慢车速,还要提前做好判断,特别是到路口,必须提前减速,否则到跟前会刹不住车。谨记的是,减速时要“点刹”,防止车辆侧滑,虽然很多车都有ABS EBD之类的,遇到紧急情况还是靠驾驶员的提前准备和判断。 当我们通过积水较深的路段时,在不知深浅的情况下最好绕行,如果非走不可,那一定记住,挂上低档,踩住油门不要松,一定要跟上油门,不能换挡,轰着油门一气通过。如果换挡,排气管进水就麻烦了。 4、换挡时速 以1.5升排量的家庭用车在平路上行走为例,最理想的换挡时机大致如下: 1挡起步:约1500rpm 1挡转2挡:20km/h 2挡转3挡:30km/h 3挡转4挡:40km/h 4挡转5挡:50km/h 转入抵挡也是一样,不要等转速过低,车辆几乎没有力气时才减挡,这样会增加引擎负担。要车辆保持一定的驱动力和速度,减少引擎负担,及早减挡是必要的,特别是上坡、车辆慢速行驶和负重行驶的时候。 一般来说,最佳的减挡时间大致如下: 5挡换4挡:55km/h 4挡换3挡:45km/h 3挡换2挡:35km/h 2挡换1挡:25km/h
View Details月球的形成有多种理论支持,比较经典就是撞击假说,大约在46亿年前,一颗称为忒伊亚星球把早期地球狠狠地撞了一下,抛出了一个巨大的深坑,这就是太平洋。之后剥离的物质在轨道上聚集,重新形成了月球。 撞击假说算是比较正统的月球形成理论,不过根据模型推演,由此形成的月球应该有一个比较正常的公转轨道,而不是现在这样。 这意味着月球在形成再次被撞了一下,这个神秘物体的残骸目前仍然留在月球上。 月球环绕地球的轨道是不寻常,这个特点已经被NASA所发现。作为世界航空航天的领军机构,NASA的探测器遍布月球。 从美苏太空争霸以来,向月球发射的飞船不计其数,从早期验证月球是否为岩质表面,但月球背面、内部都翻了个遍。 根据最新的研究显示,倾斜轨道意味着日食偶尔发生,而不是每月发生,这是倾斜自转轴的第一个影响方面,第二个疑问在于月球上遗留了哪些不应该属于这里的物质。 阿波罗计划带回的岩石样本发现,其中有一些金属在地球上很稀有,但月球上的储量却很多。根据撞击形成理论,月球和地球在同一时期形成,也就是被忒伊亚星球撞击后,物质重新进行了分配。 应该说两者的物质成分是基本一致的,那么本不属于这样的金属可能就是第二次不明撞击带来的。 在月球内部,NASA发现了金、铂、铱等贵金属分布,这种物质在地球上数量较少,占了大约1%的地球的质量,但月球却比我们丰富。 NASA根据过去半个世纪的发现认为,月球在第二次撞击中获得了一些地球不存在的金属,有趣的是,自转轴倾斜后更加朝向地球。同时月球也被地球的引力潮汐锁定,只有一面永远朝向地球,背面在地球上是永远看不到的。 天体物理学家Kaveh Pahlevan指出,NASA下一步将依托小行星登陆计划重新返回月球,虽然直接返回方案在星座计划中被取消,目前已经改为秘密返回,利用小行星登陆再次回到月球,寻找第二次撞击遗留的线索,时间会在2020年代中期,与登陆小行星任务一同执行。 不过为何已被美国实现了的“登月工程”,重返月球竟如此之艰难,竟在人力物力充沛的条件下仍需准备数年甚至更长时间,还需借助特殊手段?这其中究竟有何种隐情? 我们都知道著名的阿波罗登月事件,美国政府宣布登上了月球,然而这真的就是像传说中一样神乎其神吗?甚至于整个过程,被传为全是美国政府为了维护其在美苏太空竞赛中的胜利,而精心设下的一个骗局。 最近的民调显示,大约有20%的美国人认为美国从未登上月球。阿波罗任务结束后,我们为什么就再也没回去过?为什么只有在理查德·尼克松任期内人类登陆月球?水门事件后大多数人都不愿意相信这位狡猾的小迪克的糊弄,说什么美国在冷战中名利双收的鬼话。 在下面的内容中,作者列出了一些证据表明登月可能是个骗局。作者试图在考虑了NASA提供的解释的情况下为每一条都提供一个客观的视角。 1、飘动的旗帜 飘动的旗帜 阴谋论者指出,当第一个登月直播在电视上播出时,观众可以清楚地看到尼尔·阿姆斯特朗和巴兹·奥尔德林插在月球上的美国国旗正颤动飘舞着。着陆的照片似乎也显示有微风荡漾,上图中可以清楚地看到国旗的褶皱。但显而易见的问题是,在月球的大气层中没有空气,当然就没有风能使国旗飘动。 无数的解释试图反驳这一现象没有任何稀奇:NASA声称国旗是存放在一个细管内,连锁反应使得它在插好之前就被展开了。其他的解释则说宇航员在接触铝杆时的反作用力产生的干扰使得录像画面出现了波纹。 2、消失的着陆坑 消失的着陆坑 声明如下:如果NASA真的登月了,在登月舱着陆时下面会出现一个着陆坑。但在任何登陆的录像或者照片中都找不到一个坑洞,登月舱更像是被整个放在了那里。同时月球表面覆盖着细小的月球尘埃,但这在影象资料上基本看不到。 同国旗的问题一样,消失的着陆坑有着一大堆的解释。NASA主张的是登月舱在低重力环境下着陆需要的推力要比在地球上小得多。月球的表面本是坚硬的岩层,所以很可能无法观察到一个明显的着陆坑——就像一架飞机在混凝土跑道着陆时也不会留下一个大洞。 3、消失的星星 在所有的照片、影像资料中,没有星星是登月骗局让人信服的理由之一。月球上没有云,所以在月球上看星星远比我们在地球上透过大气层看要清楚明亮得多。 这里的论据是,NASA几乎无法为登月骗局绘制每个星星的确切位置而不被看穿,所以干脆就不画了。而他们给出的理由是照片质量太差所以看不见星星(这真是他们给出理由)。 有些照片是高品质的,但仍看不见星星。而你却能在地球拍摄一张能看见星星的低品质照片。 消失的星星 4、范艾伦辐射带 为了抵达月球,宇航员必须经过一条范艾伦辐射带(范艾伦辐射带是在地球附近的近层宇宙空间中包围着地球的大量带电粒子聚集而成的轮胎状辐射层,由美国物理学家詹姆斯·范·艾伦发现并以他的名字命名。——译者注)。辐射带受地球磁场控制永远保持在同一个位置。 范艾伦辐射带 阿波罗登月标志着有史以来人类第一次将活人送出了这条辐射带。阴谋论者争论说,尽管有飞船内外都有铝涂层,但辐射的强级几乎能把宇航员在前往月球的途中煮熟。 NASA已经反驳了这种说法,强调宇航员在很短的时间内就穿越了辐射带,所以只遭到了轻微辐射。 5、无法解释的东西 登月照片公布后,理论家们很快就注意到一个神秘的东西(如上图所示)——在阿波罗12号任务中宇航员头盔上的反射。这似乎是完全没理由出现在那的一根挂着的绳子或者电线,让很多人认为这是一个在电影棚中经常见到的聚光灯。 因为图像质量太差,这一猜测仍存在疑问,但谜团依然存在:为什么会有东西悬浮在月球的半空中(几乎没有空气)。从登月舱的其他照片中似乎都没有东西从它上面伸展出来,所以这至今仍完全无法解释。 无法解释的东西 6、慢速行走和隐线 为了论证登月是在一个摄影棚中拍摄的,阴谋论者必须认为低重力环境是被NASA模拟出来的。 慢速行走和隐线 如果你拿到了登月镜头的录影带,并将影片2.5倍的速度播放,宇航员看起来就像在地球重力下行走。 而让人印象深刻的宇航员跳跃高度,不可能在地球重力下实现,但隐藏的电缆可能给了宇航员一些额外的高度。 在一些截图中可以看出隐线的轮廓(据说这些照片只能看出一根非常模糊的线条)。 7、多出来的光源 在月球上只存在一个强光源:太阳。这表明所有的影子都应该是互相平行的。但在登月时却不是这样:视频和照片都清楚地显示出影子的方向是不同的。阴谋论者认为,多出来的光源有力地证明了这些登月照片是拍摄于一个类似电影片场的地方。 NASA一直试图把这些奇怪的影子归咎于月球表面上不同寻常的隆起和丘陵。这一解释让一些理论家哭笑不得;丘陵怎么可能造成如此巨大的角度误差?图像中登月舱与前景中岩石的影子几乎成45度角。 多出来的光源 from:http://news.gmw.cn/2016-04/21/content_19802349.htm
View Details《JavaScript 权威指南》这本书从第四版开始,一直到第六版,每个版本我都逐字逐句读过几遍,然而每一遍下来的感受却完全不一样。上上周的周一,再次翻开了这本犀牛书, 这一次我是带着批判精神和研究精神过来的,所以看的时候也写下了一些感受和笔记,都是些容易被忽略的点,部分内容犀牛书上不一定有提到。 之前都发在 微博 上,稍微整理了一番,放在这里,方便阅读。 一些小点 语句/表达式 换个角度理解语句(statemaents)和表达式(expressions):表达式不会改变程序的运行状态,而语句会。还有一种叫做表达式语句,可以理解为表达式和语句的交集,如 ({a:1})、"use strict;"等,我觉得没必要死扣,意义不大。 字符集 ES3 要求 JS 必须实现 Unicode 2.1 及后续版本,而 ES5 只要求支持 Unicode 3 及后续版本。Unicode 字符 2005 年超过了十万字符,至今仍在不断增修,最新版本是 8.0。 分号 如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:在以 “(“、”[“ 、”/“、”+”、”-“ 开头的语句前面都加上一个分号,如 ;(a + b).toString()。 进制 ES5 严格模式中禁止使用八进制。目前各种引擎对 JS 的实现是存在差异的,部分支持八进制,部分不支持。八进制被禁止的原因:String 和 Number 之间经常被相互转换,而以 0 开头的八进制数据特别容易让人迷惑,也容易让机器迷惑,比如 09 是该被转换成 9 还是直接报错?十六进制不存在这个问题,如 0x98。更多信息参阅 这里。 精度 JS 采用 IEEE-754 浮点数表示法,这是一种二进制表示法,由于精度原因 JS 不能表示所有的实数。它能展示的浮点数个数是有限的,比如它不能准确地表示三分之一的数值字面量。这也导致了它在浮点数的计算上存在误差,如 0.3-0.2 != 0.2-0.1,因为在计算的过程中,存在数据的溢出,丢失了精度。 null/undefined 系统级、出乎意料的或者类似错误的值的空缺使用 undefined,而程序级、正常的或意料之中的值的空缺使用 null。平时编程给变量赋值时,不要使用 undefined 而应该用 null。值得注意的是 ES3 中的 undefined 是可以被重新赋值的,ES5 修复了这个 bug。通常我们使用 void 0 来还原/代替 undefined 的值。 eval eval 是个不好把握的东西,它在 ES3 中更像是 Function,而在 ES5 中更像是一个运算符(严格模式下不允许设置别名,否则报错,且将其作为保留字)。实际上 ES3 中也不允许给 eval 设置别名,然而很多实现却依然允许,并将其作为全局代码来执行,浏览器尤其是 IE 对它实现相当混乱,没有什么规律可循,不过 IE 中提供了一个 […]
View Details1 财富从哪里来的?佛在经论里面给我们说得太多了,财富是从布施得来的。 2 布施是种因,财布施得财富。这个世间发大财的人,你不必羡慕他,他命里有那么多财,是他前世修财布施修得多。 3 财富放在什么地方利息最大?给诸位说,布施一切众生这个利息最大。 4 佛门讲“舍一得万报”,这是真的,可是一般人不相信,这是他的善根不足。信解是善根,信了之后你要肯干,肯干是你有福报。 5 佛在一切经里面都教给我们,你修财布施,你生生世世财用不缺乏,为什么?你种的因好。 6 财用不缺乏,这个好!不缺,这个多自在!不必要占有,不必要积蓄。 7 小乘经上讲“积财丧道”,丧什么道?六度是菩萨道,积财,菩萨道失掉了。 8 佛不叫我们积财,有财就布施掉,你这里布施掉,到你需要的时候决定有,不会缺乏。 9 世间人学佛,不信佛!对佛讲的这个不敢相信,怕布施掉,明天要用没有了怎么办?这就是对于佛不相信。 10 财布施,这只是布施,不能成为功德,这里面没有功夫;没功夫,就是不能断悭贪。吝财,得贫穷的果报! 11 有一些好心人,没有智慧,听到一点佛法,要喜舍,把他的钱财都舍了,都送给别人;别人干的是什么事,都不晓得! 12 如果那个人是个邪门歪道,换句话说,你这个“舍财”帮助他造恶。 13 他没有财,他造恶有限,他财多了,造的业更重,将来他是祸首,你是从犯。这个舍就舍坏了,就舍错了。 14 正法没有了,邪法外道逐渐兴旺,信徒多,财力雄厚,他有钱可以包电视台宣传他的法门,所以修福没有真正智慧,你修不到福。 15 “财色名食睡”这些东西在眼前,你如果还动心,你离不了欲界,三界里头欲界不能超越。 16 在娑婆世界苦!不管你是什么样的地位,你有多大的财富,穷人有穷人的苦处,富人有富人的苦处。做了国王他也不自在,他还有他的苦处。 17 经上说“财色名食睡”,这是五盖,五种烦恼,本性里头没有的。“盖”是比喻,把你自性里面的智慧、德能盖住了;“盖”就是“障”的意思。 18 对于外面境界(财色名食睡、名闻利养),只要你能看得破、放得下,你在一切境界里面得大自在。 19 财色名食睡、名闻利养,我们要放下,我们不求这些东西。这些东西纵然得到,应当立刻舍弃,为什么?我们心才清净。你要不舍弃,名利能染污你的自性。 20 佛在经上常说:财色名食睡,地狱五条根;你只要有一条,轮回就出不去。 21 印光大师是菩萨再来,对于现代人的毛病了解得最清楚、最透彻。他老人家曾说,“业海茫茫,难断无如色欲”我们这个社会,最容易犯的是邪淫。 22 邪淫不仅仅是指男女之欲,凡是衣食住行、物质生活过于奢侈,超越了你的本分,都叫做邪淫。当然邪淫正指是男女淫欲,不是夫妻正常配偶,这都是邪淫。 23 电视节目里头有黄色的、有灰色的,网络里面比电视还要严重。这些东西在教什么?教邪淫、教贪财、教争名逐利,天天在教你,多少人乐此不疲!这个社会哪有安定的日子? 24 《因果经》云:男子邪淫,娶多妻妾或买春,命终即堕铁磨狱。生前左拥右抱,享齐人之福,死后磨成肉酱,贪图色欲之报,真是奇惨无比! 25 佛法讲修行,修行是第一桩大事。修正我们贪恋的习气,修正我们淫逸的行为,你能够得健康长寿之道。健康长寿第一个因素是心地清净,如何得清净?寡欲就清净了。 26 世间人贪图名利,世间名利得到,这是一生的,你能享受的时间非常短暂。 27 享受当中,要造无量的罪业;所造的业,将来一定要偿还,绝对没有侥幸的。欠债要还钱,欠命要还命,没有一个人能幸免。 28 名利能染污你的自性,名利害死人,名和利都不可以贪着。 29 “财色名食睡”越淡薄,你的身心就越健康。“财色名食睡”,菩萨都舍弃了;“苦乐忧喜舍”这五种受,也舍掉了。他心得清净! 30 “苦乐忧喜舍”是六道众生的五种受:身有苦乐,心有忧喜,苦乐忧喜暂时停止的时候叫舍受。舍受虽好,但是它时间不长,所以苦乐忧喜舍是不正常的受,不是正受。 31 一般人,财可以舍,男女色欲可以舍,名也可以舍。但睡舍不了,吃也舍不了,一天还要吃三餐,三餐之外,还吃点心! 32 “财色名食睡”这五种障碍里头,“睡”和“吃”这两种你舍不掉,那是你自己工夫不够。工夫够了的时候,行! 33 世尊教诫初学远离“五荤”;“五荤”是韭菜、大蒜、葱、小蒜、兴渠(洋葱)。 34 为什么佛要我们戒除这五种?《楞严经》上讲得好,这五种蔬菜,熟吃会引起性冲动,生吃会引起肝火,发脾气。 35 世间人以什么为乐?总是以财、色、名、食、睡为乐。而这个里头最容易起贪心的,一个是色欲,一个是食欲。 36 好吃,就免不了杀生;杀众生的命,这是欠他命,欠命要还命!你吃这些众生的肉,当时觉得很乐,你有没有想到将来要还债? 37 佛在经典上讲的是真话:人死为羊,羊死为人,互相吞啖,冤冤相报。 38 睡眠当然很重要,你睡得好,你精神饱满;但是不能贪睡,睡得太多就昏沉了,所以这也是个烦恼。 39 一个人贪睡的时候,精神萎靡不振。不能振作,大好光阴虚过了,这都是罪过。 40 释迦牟尼佛对我们这个世界,这些人道的众生,了解得太清楚:四个小时睡眠足够了。四个小时以上是贪睡,那就变成障碍。 41 佛规定的这是正常的:晚上十点钟睡觉,早晨两点钟起床,就赶紧起来要用功。我们用功的方法,念佛是最好。 42 布袋和尚的旁边,常常画几个小孩围绕他,小孩一定是五个或者六个,五个的比较多。 43 五个代表五欲,财色名食睡;六个就代表六尘,色声香味触法。画几个小孩围绕他,代表五欲六尘一天到晚围绕着他,他不动心,他不受干扰,取这个意思。 44 你爱财、爱名、爱色、爱吃、爱睡,五欲六尘没有一样不是你所爱的,那你就是天天在那里想什么?想六道轮回。 […]
View Details很多在 Mac 上安装 Virtual Box 虚拟机的小伙伴,在安装完成系统以后,发现显示效果不好,很小,也不能全屏。其实这是因为在虚拟机系统里没有安装 Virtual Box 的增强驱动造成的。这里简单介绍下怎么在 Virtual Box 里安装增强驱动的操作方法。 工具/原料 Virtualbox 方法/步骤 首先请在 Virtual Box 里启动安装好的 Windows 虚拟机,如图所示 当虚拟机启动并进入系统以后,请保持这个虚拟机的窗口在最前端,然后点击屏幕顶部的 Devices 菜单栏。 接着请点击菜单栏中的 Insert Guest Additions CD image 一栏,如图所示 随后我们在返回虚拟机中的系统,一般情况下系统会弹出它的安装界面。如果没有弹出来的话,请打开我的电脑,找到它的盘符,双击也可以运行安装。 接着在 Virtual Box 增强工具的安装界面里,根据提示操作一步一步点击安装即可。 安装完成以后,需要重新启动虚拟机系统,之后就可以调整虚拟机的分辨率,也可以实现全屏状态了。 from:http://jingyan.baidu.com/article/6525d4b13b7d0fac7d2e94ef.html
View Details在这篇文章中,我们将讨论成为一个成功的软件工程师需要注意哪些要点,以便于鞭策自己也成为一个成功的软件工程师。 背景 上周,我参加了印度德里最值得期待的会议——C# Corner annual conference。如果你需要了解更多,那么请点这里。当我知道我有机会聆听大师级谈话的时候,真的非常惊喜。我学到了很多。下面我会把我听到的来自于Mr. Glenn Block的关于“如何成为一个成功的软件工程师”的要点分享给大家。这些内容激励了所有的与会者。Mr. Glenn Block是一位前微软员工,他曾在微软工作了近10年,并且他一直是Azure、WCF、.NET等的一部分,目前,他正担任着Splunk的首席产品经理。 我在写这篇文章前得到了Mr. Glenn Block的允许。 如何成为一个成功的软件工程师? 我发现Mr. Glenn Block提出的所有建议都非常有意义,并且我们每个人都应该好好学习。 不要害怕失败 我们是开发人员和程序员。我们也是人,我们也会犯错。你是不是没有任何错误就创建好了软件无关紧要。反倒是如果你这么说了,那么你可能需要确定你的软件是否能够正常工作。记住爱因斯坦有一句名言:“不要害怕失败。” 不要害怕失败,失败是你最好的老师。我们都曾犯过一些导致我们失败的错误,但更重要的是要从错误中学习。如果你这样做了,那么也许你的下一次尝试就成功了。 如果你从来没有失败过,那么说明你畏头畏尾,从来没有尝试过任何新的东西。 不要害怕寻求帮助 我们都工作在一个会犯错会失败的环境中。所以,你不应该害怕寻求别人的帮助。这样可以减少你的工作压力,并让你能够按时交付产品!而这正是你的经理对你的要求。有时候,你的后辈也能指引你走向正确的道路。所以,不要害怕寻求帮助。让你的自负随风而去吧。 做一个持续的学习者 这个时代每时每刻都有新事物被发明被创造。这在IT行业也是如此。每一天都有新的东西需要学习。在一天结束时,你学到了什么才是最重要的。你应该尝试所有与开发相关的技术。同时,重要的要掌握其中一些技术。 你不能掌握所有内容 在看完以上几点之后,你的脑海中可能会出现这样一个念头:“我怎么才能学习所有的内容呢?”当我说要成为一个持续的学习者时,其实这受你真正能学到什么的限制。你只需要去尝试你认为对你的编程生涯有帮助的技术。当然,正如我在上面所说,你必须掌握其中的一些技术。 重视你的代码 在你写代码的时候,只要确保代码确实能用一种清晰和易于阅读的方式如愿实现目标即可。我的朋友,Mr. Dhananjay Kumar说Mr. Glenn Block写代码就像是诗人在写诗歌一样,非常值得我们借鉴。此外,代码的可维护性也非常重要,否则维护这些代码的人搞不好在几天/月/年之后就得经历一场求生不得求死不能的痛苦。 找导师,成为导师 老师能够传业授道解惑,能帮助我们理解学习的内容。因此,找到一个能指点正确方向的导师尤为重要。向你的导师学习,因为导师可以教你许多他/她从他/她的生活中总结出来的内容。正如大家都知道的,“经验让人完美”!一旦你学会了,那不妨也成为别人的导师,分享你从你的导师那里学到的知识。当然,在做导师的时候,请确保不要误人子弟。 不要拖后腿 不可否认我们周围有不少拖后腿的人。虽然没有强制要求说所有人都必须优秀。但是有时你可能会不得不和一个消极被动的人一起工作。但是重要的是,你得保持住自己的乐观和主动性。 不要过度承诺 我们的项目都有时间期限,这是我们都知道的。你在时间框架中能做什么是有限制的。要去理解那些。当你接受需求列表时,你应该清楚你需要付出什么样的努力以及多少时间才能完成工作。如果不能满足你的经理/客户给出的时间框架,那就随时告知报告人。发布如他们期望那样而非满是bug的产品很重要。所以,千万不要过度承诺。如果你这样做了的话,那就准备好再找一份工作吧。因为你可能会被炒鱿鱼。 永远不要在你想说“No”的时候违心地说“Yes”。 正确的想法不必是你的想法 这一点还需要我解释吗? 我们都在工作,我们都有脑子,我们都有自己的想法。有时候你的后辈也可以教你很多,有时候他解决问题的速度快于你。承认这一点,并赞同他们给出的解决方案。集思广益将有助于按时交付项目。重要的是,这能帮助你做到不以自我为中心。 做一个良好的倾听者 做一个良好的倾听者,意味着你可以通过他人的角度来看事情。这将丰富你的阅历提高你的声誉。如果他们错了,你就向他们解释他们错了以及为什么。 测试,测试,还是测试 测试是软件开发周期中最重要的角色之一。没有经过适当测试之前永远不要发布你的产品,因为测试是捕获bug的阶段,而bug是为客户和管理者所不喜的。如果你认为你已经做完测测试了,那么再做一次。 问:开发人员说的最多的谎言是什么? 答:我已经做过单元测试了。 模式 始终追求适合你项目的最相关的模式。如果你根据自己的要求选择模式的话,它可能会在最后的周期使你功亏一篑。 问:软件开发中最重要的阶段是什么? 答:需求收集或需求理解。 成为社区的一部分 这一点也非常重要。你需要成为一些社区的一份子,因为这些都能给我们提供帮助。推荐一些很不错的社区: C# Corner MSDN ASP.NET Stack Overflow Code Project 这种方式可以让你在网络世界中被大家所关注。分享你的所有知识,并尽可能地从各种资源获取知识。 致力于OSS(Open Source) 如果你得到一个机会可以致力于开源项目,那么一定不要错过,一定要勇往直前。这将增加你的声誉,因为开源项目正在被数十亿用户使用。 结论 最后但并非最不重要的一点,如果有任何遗漏的地方,欢迎给出你的建议和反馈。 稿源:码农网
View DetailsWhat are attributes and why do we need it? How can we create custom Attributes? Is it possible to restrict a custom attribute to a method only? Other than information what more can we do? Do attributes get inherited ? What if we want some attributes to be prevented from inheriting? If I want an attribute to be used only once in a program? What are attributes and why do we need it? “Attribute is nothing but a piece of information”. This information can be attached to your […]
View Details最近国内外都在流行一个词叫Full Stack,中文翻译过来叫全栈工程师,也叫全端工程师。微博上很多专业人士都在讨论全端工程师,有赞有毁的。我对全端工程师的定义是:掌握多种技能,并能利用多种技能独立完成产品的人。打外比方,全栈工程师就是一个能独立盖一幢10层小洋楼的人,而普通工程师,则是可以和一群人盖一幢摩天大楼的人。 至于要掌握哪些技能,我觉得这个要跟从事的行业与技术方向有关,做互联网的和做软件的是不一样的,即使是做互联网的,后端也可以分为很多种技术流派。 8/2定律在哪都适用,全栈工程师就是掌握20%常用技能的人,但这20%的技能会有80%的几率被用到,剩下那80%不常用的,让我们Google吧。 有人说,全栈工程师在中国已经很多年了,他们叫站长。这个说话有点靠谱但又不那么靠谱,我自己也做过站长,深知作为一名站长需要掌握很多种技术。不靠谱的是,很多站长其实并没有真正写过多少代码,而是熟练利用一些建站软件来建站。 全栈工程师的价值 有人说了,你再牛逼,你懂五种技术,你能干五个人的活吗?全栈工程师并不是说一个人能干几个人的活,而是要从多个方面来看这个问题。 全局性思维 现代项目的开发,很少说只用到一两种技术的,特别是移动互联网大潮下。随便一个互联网项目中用到的技术,就会需要用到后端开发、前端开发、界面设计、产品设计、数据库、各种移动客户端、三屏兼容、restFul API设计和OAuth等等,一些比较前卫的项目,可能会用到Single Page Application、Web Socket、HTML5/CSS3这些技术,还有像第三方开发像微信公众号微博应用等等。 Web前端也远远不是从前的切个图用个jQuery上个AJAX兼容各种浏览器那么简单了。现代的Web前端,你需要用到模块化开发、多屏兼容、MVC,各种复杂的交互与优化,甚至你需要用到Node.js来协助前端的开发。 所以说一个现代化的项目,是一个非常复杂的构成,我们需要一个人来掌控全局,他不需要是各种技术的资深专家,但他需要熟悉到各种技术。对于一个团队特别是互联网企业来说,有一个全局性思维的人非常非常重要。 像如果是我经手的项目,我肯定会注意到网页优化,也会考虑到API来兼容各种客户端,更会考虑到三屏兼容的问题。不会说项目中完全使用AJAX而不顾SEO,也不会为了功能性而忽略访问速度,我会很好的把握这个平衡,因为我知道它们的权重与实现成本。 沟通成本 项目越大,沟通成本越高,做过项目管理的人都知道,项目中的人力是1+1<2的,人越多效率越低。因为沟通是需要成本的,不同技术的人各说各话,前端和后端是一定会掐架的。每个人都会为自己的利益而战,毫不为已的人是不存在的。< p=""> 而全栈工程师的成本几乎为零,因为各种技术都懂,胸有成竹,一不小心自己就全做了。即使是在团队协作中,与不同技术人员的沟通也会容易得多,你让一个后端和一个前端去沟通,那完全是鸡同鸭讲,更不用说设计师与后端了。但如果有一个人懂产品懂设计懂前端懂后端,那沟通的结果显然不一样,因为他们讲的,彼此都能听得懂。 创业公司 对于创业公司来说,全端工程师的价值是非常大的,创业公司不可能像大公司一样,各方面的人才都有。所以我们需要一个多面手,各种活都能一肩挑,独挡多面的万金油。对于创业公司,不可能说DBA前端后端客户端各种人才全都备齐了,很多工作请人又不饱和,不请人又没法做,外包又不放心质量,所以全端工程师是省钱的一妙招。虽然说全端工程师工资会比一般的工程师会高很多,但综合下来,成本会低很多。 全栈工程师的困境 我讲技术有两个发展方向,一种是纵向一种是横向的,横向的是瑞士军刀,纵向的是削铁如泥的干将莫邪。这两个方向都没有对与错,发展到一定程序都会相互溶合,就好比中国佛家禅修的南顿北渐,其实到了最后,渐悟与顿悟是一样的,顿由渐中来。 如果一个公司不太懂全栈工程师的价值,那么全栈工程师的地位将会很尴尬,说得不好听一点,全栈工程师就是什么都会,都么都不会。曾经有一次面试,对方问我很基础的问题,我答不上来,我能做出产品,也知道什么是怎么一回事,我也不会犯那些错误,但我就是答不上概念,要考倒我非常容易。所以在应聘面试的时候,有些时候会吃亏,你可能会不如哪些在某一方面钻得很深的人工资拿得高。 由于经常在各种技术穿梭,我会经常忘记代码的语法和一些API,所以我经常需要去查API甚至查语法,我觉得没有Google我几乎没法工作。这在某些人的眼里,是技术不够的表现。我记的只是一个Key,一个如何找寻答案的索引,而不是全部,人脑不是电脑,我不可能要求我能记下所有的东西。 有一次面试官问我一个问题,我说我不知道,但我猜大概是如此这般,对方问我,你为什么这么猜,我说凭直觉,对方笑了笑没说话。面试完后我一查,果然和我猜的差不多。没错,我就是凭直觉,但这种直觉和女人的直觉不一样,这种直觉是技术上的直觉,是你过去技术经验累积的一个反射。 我不是一个非常专业的Web前端,也不是一个非常专业的Node.js开发工程师,更不是一个非常专业的iOS开发工程师。用人单位会问我,你到底是专业做哪一个方面的,我为什么要给你这么高的工资? 有什么资格来谈全栈工程师 我应该算是一个全栈型工程师了,行业经验已经超过10年。独立做过不少产品,也带过不少项目,经过的产品包括桌面端、Web产品、移动端产品,Web端涵盖前端与后端,移动端主要做iOS和混合开发。 熟悉Web前端,对MVC/模块化开发有实战经验,熟悉CoffeeScript、Grunt、RequireJS、Handlebars等等,自己写过小型的Javascript框架,一个项目中的JS代码超过一万行。熟知网页优化,知道如何让网页变得更加快速。也略懂SEO,知道什么样的URL和代码会更讨好Spider。 熟悉Node.js,有几个项目都是基于Node.js的,目前发布有开源的Blog程序Purelog,在NPM上有多个模块发布。熟悉混合开发,过去我曾经有超过一年的时间是在研究Hybrid技术,多个App基于混合开发技术,也有开发类似于PhoneGap的解决方案。对HTML5在手机上的表现颇为熟悉,挖过很多的技术坑,如白屏问题,Sqlite问题,滚动条问题,硬件动画加速、点击延时问题等等。 会做设计,熟悉Photoshop,所有的产品不管是Logo还是界面全都是自己做的设计,虽然在资深的设计师眼里不值一提,但在工程师队伍中算是比较另类了。 熟悉Objective-C,有两年以上的iOS开发经验,在App Store上有约十款App。熟悉服务器的一般性操作,自己有VPS并运行多个网站,虽然配置服务器经常要去Google。 早年曾经做过一年的Delphi,也曾做过几年的ASP.net,虽然这些技术我目前已经放弃,完全转向*nix平台,但累积下的经验是在的。多年的项目管理经验,曾在三个公司担任过项目经理,累计项目管理经验超过4年。在多个科技门户发表过技术和评论文章。 为什么我会成为全栈工程师 我相信很多全栈型工程师会和我一样,是因为要创业才成为全栈型工程师的。我有一颗创业和做产品的心,而且我又是一个不愿意麻烦别人的人,有些人擅长整合资源,空手套白狼,但我显然不是这种人,所以我只好自己做了。 在经历过两次孤独的创业之后,我发现我并不是一个适合独立创业的人,所以,我成为了一个全端工程师。我最初是做ASP,后来自己创业写客户端用Delphi,然后写了三年的ASP.Net,2010年的时候因为公司需要开始做iOS开发。Web前端是一直自己在做,项目中的的Javascript基本都是我自己在做。 我热爱写代码,热爱重复发明轮子,热爱新技术,我想这也是我成为一个全栈工程师的重要原因。 于我自己来说,我觉得全端工程师的乐趣要比一般工程师来得多,因为你知道一个产品的形态,你可以去设计一个产品,你是从全局的视野来做事情,你得到的成就感会更多一些。 from:http://digi.163.com/14/0116/10/9IN26JNS00162OUT.html
View DetailsMemcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度. Memcached基于一个存储键/值对的hashmap。 Redis是一个key-value存储系统,和Memcached类似。但是它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都 是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期 性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便. 下面主要介绍一下Redis与Memcached的不同。 1.网络IO模型 Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。 Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只 有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影 响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。 2.内存管理方面 Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能 减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除,原因可以参考Timyang的文 章:http://timyang.net/data/Memcached-lru-evictions/ Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命 令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临 时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。 3.数据一致性问题 Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。 4.存储方式及其它方面 Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能 Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS 进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。 5.关于不同语言的客户端支持 在不同语言的客户端方面,Memcached和Redis都有丰富的第三方客户端可供选择,不过因为Memcached发展的时间更久一些,目前看在 客户端支持方面,Memcached的很多客户端更加成熟稳定,而Redis由于其协议本身就比Memcached复杂,加上作者不断增加新的功能等,对 应第三方客户端跟进速度可能会赶不上,有时可能需要自己在第三方客户端基础上做些修改才能更好的使用。 根据以上比较不难看出,当我们不希望数据被踢出,或者需要除key/value之外的更多数据类型时,或者需要落地功能时,使用Redis比使用Memcached更合适。 关于Redis的一些周边功能 Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原理,清楚地了解到它的局限 性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和 scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。 总的来说Redis作者是一位非常勤奋的开发者,可以经常看到作者在尝试着各种不同的新鲜想法和思路,针对这些方面的功能就要求我们需要深入了解后再使用。 总结: 1.Redis使用最佳方式是全部数据in-memory。 2.Redis更多场景是作为Memcached的替代者来使用。 3.当需要除key/value之外的更多数据类型支持时,使用Redis更合适。 4.当存储的数据不能被剔除时,使用Redis更合适。 from:http://bluenemo.iteye.com/blog/2157736
View Details如何在ASP.NET中用C#将XML转换成JSON 本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用。或许你可以直接利用JavaScript代码通过Ajax的方式来读取XML,然后直接对其中的内容进行解析,这样或许更直接一些。但本文中给出的代码旨在说明如何通过原生的C#代码来完成这一转换。除此之外,你仍然可以借用一些第三方类库或者更高级一些的.NET库对象来实施转换。我们来看看这里介绍的一些较为简单的方法,但前提是你必须拥有可支持的类库和对象以备使用。 使用Json.NET类库 前提是需要首先下载和安装Json.NET类库,在这里可以找到http://json.codeplex.com/ 下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using Newtonsoft.Json; namespace JSonConverter { class Program { static void Main(string[] args) { string xml = "<Test><Name>Test class</Name><X>100</X><Y>200</Y></Test>"; XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc); Console.WriteLine("XML -> JSON: {0}", json); Console.ReadLine(); } } } |
使用.NET Framework中的JavaScriptSerializer类 首先需要确保你的工程或服务器支持.NET 4.0或以上版本的Framework,否则无法找到该类。 下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System; using System.Linq; using System.Web.Script.Serialization; using System.Xml.Linq; class Program { static void Main() { var xml = @"<Columns> <Column Name=""key1"" DataType=""Boolean"">True</Column> <Column Name=""key2"" DataType=""String"">Hello World</Column> <Column Name=""key3"" DataType=""Integer"">999</Column> </Columns>"; var dic = XDocument .Parse(xml) .Descendants("Column") .ToDictionary( c => c.Attribute("Name").Value, c => c.Value ); var json = new JavaScriptSerializer().Serialize(dic); Console.WriteLine(json); } } |
其输出结果为:{"key1":"True","key2":"Hello World","key3":"999"} 可能还会有更多的方法,这里不一一列出了。那么如何使用原生的C#代码将XML转换成JSON格式字符串呢?或者说该C#代码在较低版本的.NET Framework中也可以运行呢?来看看下面的介绍吧。 Introduction JSON是一个轻量级的数据交换格式,它可以非常容易地被页面的JavaScript编码为对象的形式,从而方便数据操作。 基于AJAX的页面使用XmlHttpRequest对象从服务端接收数据来响应用户的请求,当返回的数据是XML格式时,它可以被转换为JSON格式的字符串从而通过JavaScript更加容易地对数据进行处理。 许多应用程序都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理。要实现这一点,它们必须将XML格式转换为JSON格式。下面的ASP.NET C#代码实现了这一过程。 Code Description 代码中提供了一个方法XmlToJSON,可以用来将XmlDocument对象转换为JSON字符串。代码通过迭代每一个XML节点、属性以及子节点,来创建对应的JSON对象。 代码不会生成数字和布尔类型的值 Xml DocumentElement对象始终会被转换为JSON对象的member:object,它遵循下面这些规则。 节点的属性会被对应地转换为JSON对象的成员"attr_name":"attr_value"。如: XML JSON <xx yy=’nn'></xx> { "xx" : { "yy" : "nn" } } <xx yy="></xx> { "xx" : { "yy" : "" } } 没有子节点、属性和内容的节点被转换为成员"child_name":null XML JSON <xx/> { "xx" : null } 没有子节点和属性,但是有内容的节点被转换为成员"child_name":"child_text" XML JSON <xx>yyy</xx> { "xx" : "yyy" } 其它节点和属性会被适当地转换为"child_name":对象或者"child_name":[elements]对象数组,节点的值会被转换为对象成员的"value",如: XML JSON <xx yy=’nn'><mm>zzz</mm></xx> { "xx" : { "yy" : "nn", "mm" : "zzz" […]
View Details