度娘,谷歌程序员有哪些高效的编程习气?,蝴蝶兰怎么养

导语

在谷歌的日常作业及与各种level的程序员(训练生、大学生、实习生)的协作中都会用到的一些小技巧。

大数据文摘出品

来历:medium

编译:高延、蒋宝尚

谷歌招聘程序员的难度众所周知,不只要求程序员度娘,谷歌程序员有哪些高效的编程习气?,蝴蝶兰怎样养码力超强,还要求有杰出的编程习气。

那么他们在写代码的过程中,有哪些十分可贵值得咱们学习的套路呢。

本文作者是谷歌的软件工程师Steve Merritt,下面他将介绍其在谷歌的日常作业及与各种level的程序员(训练生、大学生、实习生)的协作38中都会用到的一些小技巧。

举个比如来阐明这个流程。

假定有个问题:给定两个字符串sourceString和searchString,假如sourceString中含有searchString,就回来榜首个字符在sourceString中的索引。假如sourceString中没有searchString,就回来-1。

度娘,谷歌程序员有哪些高效的编程习气?,蝴蝶兰怎样养

先画个图

坦率地说,马上就去敲代码是种荒唐且懒散的主意。就比如在你写一篇文章之前,要先弄清楚你的假定及论据,然后确保文章的内容有意义。不这么做的话,你或许会渐仲恺农业工程学院教务办理体系渐认识到你所写内容或许会跑题,不只浪费时刻,还影响心境。写代码也相同,那时你或许像眼睛里进了洗发水相同难过。

一般,处理问题的办法乍一看很简略,但其实不然。先在纸上写写有助于44你找到解大悲古寺今日现场直播决问题的办法,并能证明该办法可用于不同情境,这些都得在敲代码之前完结。

所以不要急于敲代码,乃至想都不要想代码。随后你是有满足的时刻来做加分号、逗号这些事的。

画个图吧,画上箭头,或在框里写上数字,横竖,竭尽一些能够帮你描绘问题的办法。咱们的方针是处理问题,所以不要局限于键盘,请纵情运用你的纸笔。

先规划一些简略输入。假如函数要处理的是一个字符串,那abc便是个很好的比如。试想一下正确的成果是什么,然后整理一下你是怎样处理这个问题的,以及用到了哪些过程。

假定字符串的值如下:

sourceString: "abcdyesefgh"

searchString: "yes"

我的思路:我能看出searchString 包括于sourceString中。但我是怎样做到的呢?对sourceString从左读到最右,每3个字符一组和‘yes’进行比对看是否匹配。

如‘abc’‘bcd’‘cde’等。当读到索引为4的字符时,发现了‘yes’,这样我就确认存在这么一个匹配,且始于索引为4的字符

当咱们在写算法时,咱们需求确保咱们能表达出一切内容并能应对一切或许的场景。在找到匹配的时分理应回来正确的答案,在没找到匹配的时分也要放回正确的答案。

试想一下另一对字符串的情形:

sourceString: "abcdyefg"

searchString: "yes"

咱们把sourceString 这个单词从左往右读,每3个字符一组地比对是否和‘yes’匹配。读到索引为4的字符是,咱们看到‘yef’,这看起来像是相同的,但并不是,由于第三个字符不同。所以,咱们一向读到最右边,得出的结论是没有匹配,所以回来-1。

咱们现已能确认处理该问题需求的一系列过程(在编程范畴,咱们称之为算法),而且咱们现已不同情境中进行都测验并都得到正确的杰理通的波浪理论成果。根据这点,咱们就以为该算法是有用的,接下来咱们桔梗花就该将它算法化。

用文字写出来

认真思考上一步中确认的算法后,咱们就能够试着用文字把它写出来。

这么做能使得过程变得很详细,以便咱们在后续敲代码的绿豆时分进行参阅。

从字符串的首位开端读。

写伪代女性的逼码

伪代码并不是实在的代码,可是它和代码结构相仿。下述是我上文算法的伪代码:

foreach index in sourceString,

there are 女上男下N characters in micsearchString

let N chars from index onward be called POSSIBLE_MATCH

ifPOSSIBLE_MATCH is equal to searchString, returnindex

at the end, ifwe haven't found a match yet, return-1.

这样写就更像实在代码了:

foreach index in sourceString,

N = searchString.length

POSSIBLE_MATCH = sourceString[index to index+N]

ifPOSSIBLE_MATCH === searchString:

returnindex

return-1

伪代码和实在代码的类似度取决于你,经过长期实践你会找到最合适你的一种办法

转化为代码

提示:假如问题比较简略,你也能够同时完结上述过程

这下咱们需求开端考虑语法、函数参数及言语标准了。你或许不能一下就把代码写的很全面,不要紧,先写下你会的。

function findFirstMatch(searchString, sourceString){

let length = searchString.length;

for(let index = 0; index < sourceString.length; index++) {

let possibleMatch = <the LENGTH chars starting at index i>

高长恭容貌复原图

if(possibleMatch === searchString) {

returnindex;

}

}

return-1;

}

你会发现上述代码中我留空了一部分。我是成心的,由于我不确认在Java言语中给字符串切片的语法,所以我会鄙人一步中查询该语法。

不要猜

我发现新手程序员常范这样一个过错,便是在网上找到一些觉得或许有用句子,不经测验便将其加到程序中。你不理解的代码段越多,就越不或许找到合适的处理方案。

跟着你不确认的内容增加,你的程序犯错的办法会呈指数式增加。当你有1处不确认的时分,你程序的确只会由于这1个原因而犯错。

可是假如有2处不确认,犯错就有3种状况(A处出柏林电影节错,B处犯错,或许AB都犯错)。假如有3处不确认,就有7种状况。届时你就很难找到犯错原因了。

附注:程序犯错原因羊蝎子是什么的个数如梅森序列:a(n) = (hand2^n) — 1

先测验一下你的新代码。能在互联网上找有用的内容是很好的,可是请在将其加到程序中之前,用一个独立的环境进行测验,以确保它能以你以为的办法运转。

在上一步中,由于不确认在J度娘,谷歌程序员有哪些高效的编程习气?,蝴蝶兰怎样养ava言语里选取字符串某个部分的办法篱笆墙的影子,所以就上网搜一下。度娘,谷歌程序员有哪些高效的编程习气?,蝴蝶兰怎样养

参阅如下链5xzz2接:

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

榜首个成果便是w3scho度娘,谷歌程序员有哪些高效的编程习气?,蝴蝶兰怎样养ols网站的,尽管内容有点老,可是一般是靠谱。

w3schools:

https://www.w3schoo牧羊犬图片ls.com/jsref/jsref_substr.asp

在这基础上,假定我每次用这段代码

substr(index, searchString.length)

来提取sourceString的一部分。我会先建个小比如来测验。

>> let testStr = "abcdefghi"

>> let subStr = testStr.substr(3, 4); // simple, easy usage

>> console.log(subStr);

"defg"

>> subStr = testStr.substr(8, 5); // ask for more chars than exist

"i"

这时,我就能确认这个函数的履行作用了。所以,当我将它刺进到我的程序中后,我也能知道程序的毛病是否由它导致的。

测验完结后,我就能将这最终一部分代码增加到我的程序里了。

function findFirstMatch(searchString, sourceString){

let length opencv= searchString.length;

for(let index = 0; index <度娘,谷歌程序员有哪些高效的编程习气?,蝴蝶兰怎样养; sourceString.length; index++) {

let poss祖玛ibleMatch = (

sourceString.substr(index, length));

if(possibleMatch === searchString) {

returnindex;

}

}

return-1;

}

总结

最终,我想说的是,带着我的办法回去试试之前让你奔溃的编程问题,我确保会马到成功的。

祝你好运,编码愉快!

相关报导:

https://blog.usejournal.com/how-a-googler-solves-coding-problem度娘,谷歌程序员有哪些高效的编程习气?,蝴蝶兰怎样养s-ec5d59e73ec5?gi=af7ed9a9dff9

修改|阿板 校正|坚果 视觉|牛小伟

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间效劳。