• 普京力挽狂澜,从北高加索平叛到格鲁吉亚兴兵,从克里米亚回归到叙利亚反恐,给了俄罗斯人民新生——这一切都是和中国同志的支持分不开的。 2019-07-19
  • 人民网评:真实才是旅游景点的核心竞争力 2019-07-17
  • 相比停球失误 王燊超的工作态度比工作能力更低端 2019-07-17
  • 美国最新研究:人类在月球上的活动,无意间造成月球暖化 2019-07-16
  • 西方艺术史中那一抹鲜艳的红 2019-07-14
  • 习近平:携手追寻中澳发展梦想 并肩实现地区繁荣稳定 2019-07-13
  • 四季不离茶,受益一辈子 2019-07-08
  • 不管怎么修饰辞藻,只要放弃革命,就是苏联的结果,还用证明吗? 2019-07-08
  • 缅甸国务资政昂山素季会见魏凤和 2019-07-07
  • 汕头一企业埋暗管偷排 4直接责任人被刑事拘留 2019-07-07
  • 李易峰观影两度感动落泪 2019-07-06
  • 老人被困深山六十余小时 2019-07-06
  • 组图:勇士队横扫骑士队夺得NBA总冠军  2019-07-04
  • 【央视快评】让传统文化焕发新时代风采 2019-07-02
  • 炒房炒房,炒了北京炒西安,炒了天堂炒人间,何时休?限价现价叫人害怕。 2019-06-23
  • 六合图库财神 >程序人生

    Google 程序员消灭 Bug 的 5 大法宝!

    2019-03-14 13:49 编辑: Gboy 分类:程序人生 来源:Steve Merritt

    遇到问题怎么办?还能怎么办,解决呗。那到底怎么解决呢?你是有什么惯用的逻辑模式、解决策略,还是全靠直觉手感?

    本文中,一位 Google 程序员将“现场”演示其解决编程问题的始末,看看有套路的问题解决模板,是否能帮到你。

    作者 | Steve Merritt

    译者 | 弯月

    责编 | 仲培艺

    出品 | CSDN(ID:CSDNNews)

    人工智能到底有多惊人?

    https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

    以下为译文:

    我将通过本文向你介绍解决编程问题的策略及始末,我会在 Google 的日常工作中用到这些策略,而且各个级别的程序员(包括参加培训的学生、大学生和实习生等)都会通过这些策略学习以及成长。应用这种结构化流程可以最大限度地减少令人沮丧的调试过程,并在较短的时间内实现清晰正确的代码。

     

    640?wx_fmt=png

    具体步骤

    我将通过如下练习来说明具体的步骤。

    问题:“假设有两个字符串 sourceString 和 searchString,要求你返回 sourceString 中出现的第一个 searchString 的索引。如果 sourceString 中不包含 searchString,则返回 -1?!?/p>

    1)画出来

    坦白来说,立即开始写代码是一个荒谬且偷懒的想法。在动手撰写一篇文章之前,首先你要想清楚论点和论据,还要确保你的论证有意义。否则你就是在浪费时间,过不了多久你就会意识到自己写的内容无法紧密地融合在一起。编程亦是如此,而且编程的情况会更糟,就好象洗发水不慎滴入了眼睛一般,痛苦难耐。

    通常,即使看上去似乎很简单的问题,其解决方案也并非微不足道。在纸上把问题画出来可以帮助你找到解决方案,并通过几种不同的情况验证解决方案,在这之前最好一行代码都不要写。

    不要写代码,连写代码的想法都不能有。你有足够的时间来写那一堆的分号和括号。你需要做的是从一台人类计算机的角度出发思考如何解决这个问题。

    画画、使用箭头、把数字写到小方框中等等,无论是什么形式,只要可以帮助你通过图形的方式将问题表示出来就可以。你的目标是解决问题,你可以自由使用纸和笔,不要让键盘局限你的思维。

    首先画出一些简单的输入。如果你的函数“接受一个字符串”,那么完全可以用 "abc" 做例子,然后想清楚正确的结果是什么。最后,试着考虑“如何”才能解决问题,以及所涉及的步骤有哪些。

    让我们假设有如下字符串:

    sourceString"abcdyesefgh"
    searchString"yes"

    我具体的想法是:

    好的,我在 sourceString 看见了 searchString。但是我是如何看到的?我从头到尾查看了 searchString 中的字符,并检查连续的 3 个字符是否匹配单词 "yes"。例如,"abc","bcd","cde",以此类推。直到我看到第 4 个时,我找到了 "yes",所以我知道这是一个匹配成功的地方,索引从 4 开始。

    在写算法的时候,我们需要确??梢员泶锴宄械哪谌?,还要处理好所有可能出现的情况。如果我们找到了匹配,则返回正确的答案;但是找不到匹配时,我们也需要返回正确的答案。

    我们再来试一试另一对字符串:

    sourceString"abcdyefg"
    searchString"yes"

    对于这一对字符串,我从头到尾查看了一遍 sourceString,检查连续的 3 个字符是否匹配单词 "yes"。当我看到第 4 个时,发现了 "yef",这个单词已经很接近了,但没能匹配成功,因为第三个字符不匹配。所以我继续往下找,一直到字符串末尾,仍然没有找到匹配成功的单词,所以需要返回 -1。

    我们已经确定了解决该问题的一系列步骤(在编程中,我们称之为算法),而且我们已经尝试了几种不同的情况,每次都能得到正确的结果。到此为止,我们可以确信我们的算法可行,所以现在可以写算法了,请看下一步。

    2)用文字表达出来

    在这一步中,我们需要思考步骤1)中确定的算法,并尝试用文字表达出来。这样做可以让我们的实现步骤更加具体化,供我们稍后在写代码的时候参考。

    1. 从字符串开头开始;

    2. 查看每组的  3 个字符(或者说每个 searchString 中包含的所有字符)

    3. 如果找到与 searchString 匹配的单词,则返回当前索引;

    4. 如果已经到达字符串 sourceString 的末尾,却没有任何匹配成功,则返回 -1。

    看起来不错!

    3)写伪代码

    伪代码不是真正的代码,但它可以模仿代码的结构。以下是上述算法的伪代码:

    for each index in sourceString,
        there are N characters in searchString
        let N chars from index onward be called POSSIBLE_MATCH
        if POSSIBLE_MATCH is equal to searchString, return index
    at the endif we haven't found a match yet, return -1.

    以下的伪代码更加接近代码:

    for each index in sourceString,
        N = searchString.length
        POSSIBLE_MATCH = sourceString[index to index+N]
        if POSSIBLE_MATCH === searchString:
            return index
    return -1

    你可以自行决定伪代码与真代码的接近程度,经过一段时间的练习,你就可以找到最适合自己的方式!

    4)翻译成代码

    注意:对于容易解决的问题,你可以在上一步中完成这部分的工作。

    整个过程中,从这一步骤开始我们才需要考虑语法、函数参数和语言规则?;蛐砟阄薹ㄐ闯稣未?,但是没关系,把你知道的都写出来!

    function findFirstMatch(searchString, sourceString) {
        let length = searchString.length;
        for (let index = 0index < sourceString.length; index++) {
            let possibleMatch = index i>
            if (possibleMatch === searchString) {
                return index;
            }
        }
        return -1;
    }

    请注意,有一部分代码我没有写出来,我是故意的!因为我不确定 JavaScript 中切割字符串的语法,所以我需要在下一步中查一查。

    5)不要猜

    编程新手最常见的一个错误就是在互联网上寻找具体的实现方法,遇到“似乎可行”的东西,连测试都不做就放到自己的程序中。你不理解的程序越多,就越不可能找到正确的答案。

    不确定的新代码每增加一处,你的程序出问题的可能性就会加倍。你不确定的地方只有一处?那很好啊,如果你的代码出了问题,那么罪魁祸首也只有一个。

    如果你不确定的地方有两个?那么出问题的可能性就有 3 种:A 出了问题、B 出了问题、A 和 B 同时出了问题!如果你不确定的地方有三处呢?那么情况情况很快就失控了。

    备注:你的程序出问题的可能性呈梅森素数序列:a(n) = (2^n) - 1

    首先测试你的新代码。通过互联网查找代码的实现很好,但在放到程序之前,你需要做一次单独的小测试,确保这些代码的工作方式与你料想的一致。

    在上一步中,我不确定 JavaScript 中选择字符串的部分语法。所以,我去 Google 了一下:

    https://www.google.com/search?q=how+to+select+part+of+a+string+in+javascript

    第一个搜索结果来自 w3schools。虽然有点过时,但一般都很可靠。

    https://www.w3schools.com/jsref/jsref_substr.asp

    根据该网页上的说法,我觉得我应该使用:

    substr(index, searchString.length)

    来每次提取 sourceString 的一部分。但这是一个假设,仅此而已。所以,首先我需要创建一个小例子来验证这行代码的行为:

    >> let testStr = "abcdefghi"
    >> let subStr = testStr.substr(34);  // simple, easy usage
    >> console.log(subStr);
    "defg"
    >> subStr = testStr.substr(85);   // ask for more chars than exist
    "i"

    现在我很确定这个函数的行为。因此,我把它放入到我的程序中,如果我的程序出了问题,那么我知道不是我新加的那段代码的问题。

    加上这行代码,我程序的最后一部分也完成了。

    function findFirstMatch(searchString, sourceString{
        let length = searchString.length;
        for (let index = 0; index < sourceString.length; index++) {
            let possibleMatch = (
                sourceString.substr(index, searchString.length));
            if (possibleMatch === searchString) {
                return index;
            }
        }
        return -1;
    }

    640?wx_fmt=png

    结论

     

    如果你坚持读到了最后,那么我想说:赶快尝试一下这种做法吧?;赝房纯茨阕罱龅降谋喑涛侍?,我敢保证你已经有所提高了。

    祝你好运,快乐编程!

    你的颜值及格没?人工智能测试?

    https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

     

    原文:https://blog.usejournal.com/how-a-googler-solves-coding-problems-ec5d59e73ec5

    作者:Steve Merritt,软件开发@Google。

    本文为 CSDN 翻译,如需转载,请注明来源出处。


    搜索CocoaChina微信公众号:CocoaChina
    微信扫一扫
    订阅每日移动开发及APP推广热点资讯
    公众号:
    CocoaChina
    我要投稿   收藏文章
    上一篇:程序员投稿:祭奠死去的app
    我来说两句
    发表评论
    您还没有登录!请登录注册
    所有评论(0

    综合评论

    相关帖子

    sina weixin mail 回到顶部
  • 普京力挽狂澜,从北高加索平叛到格鲁吉亚兴兵,从克里米亚回归到叙利亚反恐,给了俄罗斯人民新生——这一切都是和中国同志的支持分不开的。 2019-07-19
  • 人民网评:真实才是旅游景点的核心竞争力 2019-07-17
  • 相比停球失误 王燊超的工作态度比工作能力更低端 2019-07-17
  • 美国最新研究:人类在月球上的活动,无意间造成月球暖化 2019-07-16
  • 西方艺术史中那一抹鲜艳的红 2019-07-14
  • 习近平:携手追寻中澳发展梦想 并肩实现地区繁荣稳定 2019-07-13
  • 四季不离茶,受益一辈子 2019-07-08
  • 不管怎么修饰辞藻,只要放弃革命,就是苏联的结果,还用证明吗? 2019-07-08
  • 缅甸国务资政昂山素季会见魏凤和 2019-07-07
  • 汕头一企业埋暗管偷排 4直接责任人被刑事拘留 2019-07-07
  • 李易峰观影两度感动落泪 2019-07-06
  • 老人被困深山六十余小时 2019-07-06
  • 组图:勇士队横扫骑士队夺得NBA总冠军  2019-07-04
  • 【央视快评】让传统文化焕发新时代风采 2019-07-02
  • 炒房炒房,炒了北京炒西安,炒了天堂炒人间,何时休?限价现价叫人害怕。 2019-06-23
  • 新疆十一选五一定牛势图 富勒姆vs阿森纳 巴西森宝客服 男子1亿买彩票输光 反恐精英单机版 法国第戎酒店价格 悉尼fc球队 福彩黑龙江36选7开奖结果 重庆时时彩计划哪个好 街机海龙王捕鱼