如何在 LeetCode 竞赛中 Rank 达到 2000 分

首先自我介绍一下,本科非计算机专业,非 985/211。从 2018 年 8 月份开始正式接触算法,从 LeetCode 入的门。当时的 LeetCode 还是只有美服版本,记得国服是在 2018 年底才开始运营起来的。当时的算法水平可谓小白,基本上是零基础。当时,就硬性地按频率顺序刷。频率只有会员才能看到,所以当时花了 800 左右的 RMB 买了美服的会员。磕磕绊绊刷到 2020 年初,也刷了 500 道题目吧。当时的竞赛水平很差,只有在极少数的情况下能够在规定的 1 个半小时内 AC 四道题目。2020 年我开始讲究了一些方法和策略,开始系统性地学习算法。同时,在刷题之后,进行深入的思考。在经过不断地可以练习之后,LeetCode 的竞赛题目可以在不是很难的情况下 AC 四道题目,而且还能剩下一些时间提前完成。胡小旭 LeetCode Ran下面是我 LeetCode 的 rank... Read More

2020 年度回忆与总结

经过不断地、反复地思考与琢磨,把时间分成了两大部分:生活与职业。在这两部分下,都分别设定了一些目标生活Secret 1英语日语职业工作工商管理计算机科学可见,将目标的设定细分到了 6 个小方向中。那么,我将从上面若干小方向逐个回顾总结一下 2020 年。日语 &日语上,就学习了 50 音图,而且也忘得差不多了。汗颜英语上,听力方面,大概从 6 月左右开始坚持听 English Pod 365,目前为止大概也听了 110 期左右。但是,能力未见有多么好地提升。此外,其中有一个量化的目标,就是考一次 TOEFL,由于报考满员,只抢到了 2021 年 3 月份的名额,到时补充下成绩。工作从业务需求上来说,负责和参与了一些重点项目,保持了对于团队业务一定的熟悉敏感度。从技术需求上来说,对 C 系统做了一些重构优化,并粗浅参与了中台系统的改造等。整体上来说,没有值得可圈可点的地方,表现的比... Read More

The advantages of Consistent Hashing

It's one specific hash method. For Linear Hashing, it has to almostly rehash all the keys when triggered rehash. Howerver, the Consistent Hashing would just change the K / n keys. K is for the amount of keys, n is for the amount of slots.Therefore, there are some advantages of consistent hashingStorage BalanceLoad BalanceOversmootReferenc[1]. Consistent Hashing. https://en.wikipedia.org/wiki/C... Read More

想得多,睡得少之生活、工与学习

最近,喜欢胡思乱想。一个人如果想得太多,甚至胡乱地想,可能就是太闲了。如果,想得多,睡得少,那可就是失眠的前兆了。然而,我好像已经失眠了。生活我们想最求一种幸福的、有激情的、多彩的生活状态。但是,这并不现实。因为作为平凡的人来说,我们需要工作。用自己的知识、时间与精力,去为“老板”创造价值。这在很大程度上,是牺牲了我们的生活了的。所以,我们有一些渴望甚至有些幻想。何时能够走出这个怪圈,实现自己的理想的生活状态?因此,我们可能去设定一些目标来达成我们的理想状态。但是,生活还是我们的,不能够无视他。在一次采访中,张朝阳提到大学时因考得“不好”而冬泳来“自虐”。这其中,我更多看到的是不断地对自身极限的挑战,以证明自己是最牛X的。然而,后面他提到现在自己已经和自己“和平”相处,不去和自己对抗。我想,面对平日的生活,也需要保持一颗“平和”的心。和自己的生活“平和”相处,不要对抗。在平淡无趣的生活中,... Read More

软件工程师面试中要注意什么?

最近,有机会作为面试官参与了一些软件工程师的技术一面面试。所以,以面试官的角度来提出面试者的问题,能够更加针对性地帮助到面试者在面试中有更好的表现。所以,今天我来谈谈,作为软件工程师技术面试一面的面试官,面试者需要尤其重视的两点。表达清晰、准确、简洁这个问题往往会在自我介绍和项目介绍的环节中暴露出来。然而,自我介绍和项目介绍往往是面试中的第一个环节,所以这一环节的好坏会直接影响面试官的第一印象。自我介绍最重要的是能够在 2 到 3 分钟的有限时间内,表述出自己的履历,并能够着重地强调出自己的亮点。比如,在现在的工作中做了哪些事情,达到了什么样的效果;平日是否保持积极学习状态,对哪些领域有所深入研究;算法竞赛能够达到的排名等等。然而,会有一些面试者在时间上的把握有些欠缺,并且介绍得过于简单或者没有亮点。甚至,会有些面试者把自我介绍搞成了项目介绍。从头到尾,都是在讲自己的项目。那么,作为面试官... Read More

数据结构与算法,我到底为什么而学?

今天,我想聊聊在数据结构与算法学习路上的一些小感想。2018 年 8 月左右,开始有计划、有目的性地学习这门知识。当然,这期间也会有怠慢的时候。不过,在这断断续续的 21 个月里,对于学习数据结构与算法这件事儿有了一个更新层次的认识与思考。下面,从两个方面聊聊:学到了什么?为什么而学?学到了什么?数据结构与算法。不不不,这只是问题在字面意识上的答案。我想讲的是,通过数据结构与算法这门课程,到底学到了什么,或者说我学会了什么?在之前,买过那些正规传统的教科书似的书籍,比如严蔚敏的《数据结构》。当然,像《算法导论》这样的神书是不会错过的。作为一个初学者来说,这两本书在学习上带来了很大的帮助。不管怎么说,这个阶段是一直在学习那些经典的、成熟的数据结构与算法。然后,会到 LeetCode 上做一些算法题目。我们知道,LeetCode 上的题目是那种面向面试的问题,可以说几乎每个题目都是用一些非常明... Read More

滴滴研发 & 测试岗位内推集锦(持续更新)

最近更新:2020年04月09日为什么加入滴滴?成就感:用技术改变生活,成就感爆棚个人待遇:工资福利待遇优越,发展前景可期用户量:服务于中国以及海外若干国家的一站式出行平台行业地位:互联网独角兽在招岗位有哪些?Go/PHP/Java 后端研发工程师/架构师服务端技术/运营引擎滴滴网约车最核心的后台研发团队,参与网约车公司核心出行、出行中台、智能补贴引擎、广告、内容等公司级核心项目的研发。和顶级工程师一起,提升负责项目的核心指标,团队技术氛围浓厚,成长快。要求对技术充满热情,强悍的代码能力,至少擅长一门语言对新事物保持强烈好奇心,主动性强,有强烈的成长欲望前端研发工程师/架构师前端技术滴滴网约车前端技术团队,负责微信/支付宝滴滴出行 WebAPP 及小程序,各用户产品前端,内部平台的前端以及 Node 服务研发工作。团队技术氛围好,有小程序框架MPX、移动端组件库CubeUI、Better... Read More

写给未来 30 岁的自己,毕业五年之际的职业感悟

作为 2015 届的毕业生,如今已经在互联网行业摸爬滚打五年了。我一直觉得自己是一个后知后觉的人。在小学时,小朋友都有着自己的梦想,而我却没有;在中学时,同学们都有着自己明确的专业选择,而我却模模糊糊;到了大学,同学们都有着自己的目标和梦想,而我没有。一路回想过去,貌似是在一波跌跌撞撞的过程之后才走到现在的。如今,我作为一名软件工程师,已经有五年的时间了。在这期间,我选择了读取在职研究生学历。看似,我有着一些对自己职业的规划与未来的思考。但是,我觉得并没有想得彻底。对自己的要求,从未停止过。但由于种种原因,当然自己的原因是最大的,最终还是远远没有能够达到自己的期望。随着,工作经验的增加,社会阅历的积累,慢慢地思想成熟起来,对自己有着越来越明确的职业目标。写给未来 30 岁的自己“在三十岁之前要不断地去尝试,去做加法,你不知道你有多少种可能[1]”,曾在一刻Talks中白岩松讲到。他说,在3... Read More

我的 MBA 研究生第一学年的总结

在 2018 - 2019 这一学年的研究生学习生活中,我想是我人生中迄今为止最有收获的一年。也许我的感受是有误差的,但这的确是我内心实实在在的感受。此时,我还清楚地记得统招考试时的紧张气氛,新生拉练时的陌生又新鲜的感觉,以及后来入学后穿越整个春夏秋冬的每一个周末。在学习方面,作为一个理工科背景的我来说,无疑是打开了一扇通向全新世界的大门。工商管理中的学科,是我未曾接触过的,更是对于我如今的生活和工作都起着非常重要的作用。在这一年的学习中,我先后学习了《宏观经济与政策》、《会计》、《商法》、《运筹与决策》、《管理沟通》、《人力资源管理》、《公司理财》、《管理统计》与《项目管理》等等。使得我在一些领域上实现了零的突破。同时,通过前期广泛地学习,使得了解了这些学科的基本概念和知识,形成了一个简单的知识模式。更重要的是,让我能够找到自己更加感兴趣和擅长的领域,进而更加深入地研究下去。北航此外,在... Read More

60分钟搞定Tarjan算法求解无向图的割点与桥

本人在学习 Tarjan 算法求解无向图的割点与桥的问题时,很快发现了一篇简洁易懂的文章。很顺利地了解算法的思路,并写出了“高效”的代码,此时内心飘过 —— So Easy。然而,当我翻开《算法竞赛进阶指南》这本书的有关篇章时,我发现其中经过精简优化的代码有几条语句让我不得其所。以至于,花了较多心思和时间来思考🤔这段真正高效的 Tarjan 算法的工作原理以及代码的编写。关于 Tarjan 算法,我将会写若干篇系列文章,来完整系统地介绍 Tarjan 算法的原理以及其主要解决的问题。而在本章我主要讲一个问题 —— 如何使用 Tarjan 算法求解无向图的割点与桥。在讲述问题之前,我们先来简单地了解下什么是 Tarjan 算法?Tarjan 算法Tarjan 算法是基于深度优先搜索的算法,用于求解图的连通性问题。Tarjan 算法可以在线性时间内求出无向图的割点与桥,进一步地可以求解无向图的... Read More

递归

递归递归是什么?递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法 。维基百科简单说,就是自身调用自身。为什么使用递归?往往面对一类问题时,如果它的规模足够小或者说达到既定的边界条件时,我们可以直接获取答案。但是,当这类问题的规模比较大时,却往往无法直接获取答案。那么,这个时候就可以通过“自身调用自身”的方式,来不断地减小问题的规模,直到问题的规模被缩减到足够小时,直接将答案返回上层的调用者,最终获取到原问题的解。如果将求解的过程逆过来,那么就是所谓的递推。通过这种方式,我们可以写出“优雅”的代码去解决规模比较大的问题。进而,避免了通过递推的方式,在每一次递推时产生的复杂的条件判断的问题。上文中提到经过递归调用,会不断地减小问题的规模,有些作者认为这是一种减治法。递归的特性自身调用自身在上文中,已经提到了这个特性,而且也非常好理解,不再赘述。... Read More

到底该如何刷LeetCode?

引言本人非计算机专业出身,本科期间一直觉得数据结构与算法是一项非常基础也重要的知识,但是由于自己可有可无的欲望和糟糕的自律能力,并没有深入地学习这项知识技能。但是,随着时间的流逝,无论在工作中、网络中还是朋友圈中,发现数据结构与算法是无比的重要,以至于任何一位牛人都无不逆天地掌握这项最基本的本领。所以,在2018年8月份,我下定决心通过刷LeetCode来锻炼这一本领——数据结构与算法。从那时起,几乎是从0起步,很多知识都不了解,基本上每刷几道题都会卡到一个完全没有遇到过的知识点,尽管到现在也会时不时地发生。但是,我一直都在坚持,并且从未放弃,累计现在已经刷了421道题目(其实不止)。你也许会问这是为什么,当然,我会在文中的后面讲到。不过,在此之前,我不得不提我是怎么计划并走过这次还未完成的刷题之旅的——到底该如何刷LeetCode?步骤频率优先 —— 因人而异的刷题顺序最开始的前两个月,... Read More

我与我的职业梦想 – 如何成为一名优秀的软件工程师

如果方便,建议边听《只要为你活一天——刘家昌》边阅读无知少年对于计算机的热爱,甚至可以追溯到初中时为了弄明白步步高9188英语词典学习机中的RPG游戏,懵懵懂懂地看着VB的语法书;高中时,在全部人都沉浸在游戏的网吧中,看着是似懂不懂的C语言程序设计教学视频;高考报自愿时,在百度中输入“计算机专业怎么样?”后一脸憧憬的神情。最后,总于“成功”地依从父母的安排学习了自动化专业。甚至在大一十一假期回来后,亲友问道自动化是干什么时,我都无法准确的解释。我想我就是这样,从小没有目标,没有梦想的那种小朋友,以至于混到了大学,自己的专业都是被人规划好的,却毫无感觉。大学期间,由于一部室友推荐的讲述Facebook创业史的电影——《社交网络》让我迷上了互联网技术。从大一下学期开始自学Web技术,大二上学期注册了属于自己的域名并建立了博客。就在这样的环境中,磕磕绊绊地学着计算机相关的杂七杂八的知识。在一个... Read More

后缀数组(Suffix Array)

本文介绍后缀数组的定义与构建的过程。首先,文章介绍什么是后缀数组,随后讲解了最自然的朴素算法。为了引出更高效的算法,文章提及了倍增思想与基数排序的背景基础知识。接着,通过模拟演练的方式一步一步地演示如何创建后缀数组。将构建的抽象过程形象地展示出来,使读者更易理解。定义给定字符串,其所有后缀有。(6为字符串的长度)。如下所示S = "banana"s1 = "banana"s2 = "anana"s3 = "nana"s4 = "ana"s5 = "na"s6 = "a"后缀数组即为由构成的有序的(字典序升序排列的)字符串数组。vector<string> sa{"a", "ana", "anana", "banana", "na", "nana"};构建后缀数组的动态过程演示动画: https://visualgo.net/zh/suffixarra思路如何构建后缀数组?若字符串的长... Read More

树状数组(Binary Indexed Tree)

树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为Fenwick树。其初衷是解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和, 区间和。它可以以的时间得到任意前缀和,并同时支持在时间内支持动态单点值的修改。空间复杂度。摘自维基百科文章先介绍低位运算(lowbit)的基本知识,再提及如何将一个整数划分为个区间的运算过程,进而延展到如何将线性序列以树行结构进行存取,接着介绍了高级数据结构——树状数组的两个基本操作——查询前缀和与单点增加,最后介绍了树状数组的一个应用——求解逆序对数。lowbit(低位)运算定义为非负整数在二进制表示下“最低位的1及其后边所有的0”构成的数值。比如:,其二进制表示为 ,则其低位。公式如何计算一个整数中二进制表示下所有位是1的数值?比如,则其二进制表示下所有位是1的数值有:,。... Read More