ideahub行业新闻

100 天的代码 – 软件开发初学者和经验丰富的完整指南

添加时间:2022-02-27 16:19:53

您想成为一名成功的软件开发人员并梦想进入大型科技公司吗?


您是否已经是一名开发人员,但正在寻找职业生涯中的重大转变?


好吧,如果您是其中之一,那么您肯定会尝试做一些准备,并且您可能会尝试涵盖各种主题。您制定计划,尝试遵循计划,并开始通过各种资源、教程和视频进行准备。你开始学习它,但几天或几个月后,你意识到你哪儿也去不了。你没有取得任何进展,事情对你来说是压倒性的。 


您并不孤单,许多新手程序员和经验丰富的开发人员都在发生这种情况。他们尝试学习编码,并尝试涵盖各种主题,但由于缺乏良好的路线图和指导,事情变得混乱和困惑。在准备过程中,他们错过了很多重要的事情。 


100 天的代码


为了帮助您解决这个问题,我们根据大量研究和在大型科技公司工作的软件开发人员的经验创建了一个实用的“100 天代码”路线图。该路线图将为您提供完整的指南,帮助您养成良好的编码习惯并实现您作为软件开发人员的目标。您只需要一台笔记本电脑、一个正常工作的互联网连接、定期解决问题的决心,在几个月内,您就可以养成编码习惯,学习基本知识并完成面试。 


在这里,我们介绍了:


什么是 100 天代码?

初学者 100 天代码

有经验者的 100 天代码

什么是 100 天代码?

破解大型科技公司面试的合理时间范围是多少?


每个新手和有经验的程序员都会想到这个问题。 


好吧,如果您的目标是一些大型科技公司,那么有很多主题和内容需要涵盖。挑战在于有限的时间框架,根据我们的研究,我们需要说它可能需要将近 14 周或 100 天。我们将完整的主题划分为 100 天,您所要做的就是遵循并坚持 100 天的编码。 


如果您遵循这种方法并坚持编码,那么您不仅会养成良好的编码习惯,而且您将能够破解 60-70% 的科技公司的面试。 


我们将在 100 天内涵盖 5-6 个主要主题,我们将针对 Facebook、Google、Microsoft、Amazon 等大型科技公司的采访。这些主题如下......


数据结构和算法(编码部分和问题解决)

系统设计

操作系统和DBMS(数据库管理系统)

面向对象设计

文化契合

在我们继续制定路线图之前,需要记住几件事……


如果您是初学者,那么请以解决几乎 450-500 个编码问题为目标。

如果你是一个有经验的人,那么将目标定为解决近 300 到 350 个问题。

系统设计回合主要是向有经验的人询问,因此初学者必须少关注这一部分,而有经验的人则必须多关注这一部分。

如果您是初学者,请尝试每天投入至少 4-6 小时的时间。

如果你是一个有经验的人,那么你需要每天投入 2-3 个小时。

理想情况下,解决任何给定问题的时间不应超过 20-30 分钟,但请记住,此规则不适用于所有问题。 

先决条件:我们假设如果您是初学者,那么您已经在大学完成了一些项目,如果您是经验丰富的开发人员,那么您肯定可能正在从事一些项目。


初学者 100 天代码

在你继续之前,请记住,作为一个新手程序员,你会被这么多的问题压得喘不过气来,你在解决问题时会遇到很多困难。如果您花更多时间来解决问题,那没关系,但不要气馁。 


尝试先自己解决问题,即使需要几个小时。如果您没有得到解决方案,则在花费数小时后,您可以伸展自己几天或接受提示。随着您的进步,您会看到自己的进步,并且您将花费更少的时间来解决问题。


第 1 天至第 10 天

选择一种编程语言并学习它的基础知识

您需要选择一种编程语言,并且需要坚持使用它。探索各种编程语言,阅读它们,在您的代码编辑器中尝试,并检查您是否对它感到满意。 


在选择语言时会出现很多问题。Python 比 Java 好吗?C++ 是一种更快的语言,所以我应该选择这种语言,Java 语法更复杂但大公司正在研究它,如果我知道一种以上的语言怎么办? 


所有这些问题都会造成混乱,当您在代码编辑器中尝试语言时,您也会切换到一些不同的语言。探索语言并选择最适合您的语言。不要仅仅因为它在科技行业非常流行而选择一种语言。您需要选择一种您最熟悉的语言。学习一门语言几乎需要 4-5 天。


一旦你选择了一种语言,就会学习它的基础知识,但如果你已经了解了基础知识(你可能已经用那种语言创建了你的项目),那么就重新学习它。已经看到很多人忘记了他们选择的语言的基本内容。所以你需要确保你能很好地掌握你选择的语言。学习基本语法,进行一些在线测试,并记住所选语言的基本内容。学习您的语言基础知识可能需要大约 1 周或 7 天的时间。 


您应该记住的几件事是……


从/向文件读取/写入。

从控制台读取输入。

拆分字符串

二维数组实现以及如何使用它。

非常基础的语言内容,例如在 C/C++ 中处理以空字符结尾的字符串

Lyft 和 Salesforce 等许多公司的招聘程序略有不同。他们希望候选人在笔记本电脑上编写代码并解决问题。您将必须编写完整的程序,并且您的代码应该通过给定的测试用例。您可能必须处理命令行参数,或者您可能必须解析 CSV 或文本文件。 


谷歌、亚马逊或微软等其他公司使用白板。因此,您最好了解您的语言基础知识,以便在面试中处理这两种编码场景。因此,几乎需要 10 天的时间来决定哪种语言最适合您并且您会感到满意。


资源


C 编程语言

C++ 编程语言

Java 编程语言

Python 编程语言

您还可以尝试GeeksforGeeks 免费课程:


叉 Python

分叉 CPP

第 11 天至第 20 天

学习数据结构和算法

现在是时候学习编码中最重要的部分了,即数据结构和算法。这门课主要在本科阶段教授,大多数人忽略了它的重要性。但是这个主题的主题是编码面试中最重要的内容。 


学习各种数据结构和算法的基础知识,包括复杂性部分。主题如下……


时空复杂度分析

数组

堆栈

队列

链表

树木

尝试

图(BFS和DFS)

散列

排序

搜索

涵盖上述所有基础知识并在您的代码编辑器中实现各种 DSA。您还需要涵盖面试中最有可能被问到的字符串部分。


如果您认为您已经了解 DSA 中的所有主题,那么只需进行一些在线测试并测试您的技能。你肯定会发现你仍然需要修改基本概念。 


学习实现数组、链表、栈、队列、树等。基本的基础对解决编码问题有很大帮助,所以不要跳过它,好好掌握它。 


资源


GeeksforGeeks 数据结构

GeeksforGeeks 算法

第 21 天至第 40 天

解决基本问题

一旦你熟悉了基本编码问题的基本数据结构和算法实践。练习基本级别的问题将帮助您扩展思路,并为您解决中等级别的问题做好准备。


不要跳过基础关卡,否则你将难以解决更难的问题,你将不得不再次回到基础关卡。尝试在 10 天内解决近 200 个基本级别的问题。根据时间和速度,您可以增加问题的数量。在 4-6 小时的时间范围内,每天几乎 8-12 个问题将帮助您打下良好的基础。 


示例数组问题


合并两个排序数组

给定总和的子数组

在数组中查找重复项

数组中缺少数字

阵列旋转

示例链表问题


检测链表中的循环

旋转链表

合并两个排序的链表

在链表中搜索

在链表中查找中间元素

示例堆栈和队列问题


对堆栈中的值进行排序

使用一个数组实现两个堆栈

样本树问题


二叉搜索树中的最小值

二叉树的高度

二叉搜索树中的第 k 个最大值

示例图问题


实施广度优先搜索和深度优先搜索

示例堆问题


查找列表中的 k 个最小和最大元素

第 41 天至第 60 天

解决中级问题

现在是时候练习一些中等水平的问题了。中等水平的问题会让你为解决更难的问题做好准备,这些问题很可能在面试中被问到。尝试在 20 天内解决几乎 150-170 个中等水平的问题。根据时间和速度,您可以增加问题的数量。在 4-6 小时的时间范围内,每天几乎 7-8 个问题就足够了。


示例数组问题


数组反转

所有大小为 k 的子数组的最大值

收集雨水

Kadane 算法

示例链表问题


流中的第一个非重复字符

旋转链表

删除链表中的循环

LRU 缓存

克隆一个链表

找到两个链表的交点

示例堆栈和队列问题


从堆栈中获取最小元素

使用两个堆栈进行队列

使用两个队列堆叠

样本树问题


检查 BST

二叉树的垂直遍历

二叉树的边界遍历

从 BST 中删除节点

示例图问题


在有向和无向图中检测循环

找出岛屿的数量

字谜

实施 Dijkstra

第 61 天至第 75 天

解决困难级别的问题

一旦你解决了基础和中等水平的问题,就转向最后的难题。尝试在 15 天内解决几乎 80-90 道难题。根据时间和速度,您可以增加问题的数量。 


示例问题


在流中查找中位数

N皇后问题

数独问题

旅行推销员问题

布尔括号

解决编码问题的最佳资源:GeeksforGeeks 实践门户


第 76 天至第 85 天

系统设计

对于初学者来说,这部分并不重要,但有时面试官也会向没有经验的候选人询问与系统设计相关的问题。所以了解系统设计部分也很好。首先学习系统设计的基本概念,如负载平衡、缓存、代理、CAP 定理、一致性、分片或数据分区等。 


您将被要求设计一个网络规模的服务。因此,一旦您完成了基本概念,请为一些最有可能的系统设计问题做好准备,例如……


URL 缩短服务 (TinyURL)

设计 Facebook 新闻源

设计 Uber 或 Lyft

准备好这些问题将帮助你处理这一轮,你将了解你在这一轮中到底要做什么。您将获得这一轮的所有权,您将描述系统的不同组件。 


面试官检查候选人是否能够建立一个庞大而复杂的系统。正如我们所提到的,这一轮通常不会向初学者提出要求,因此您无需深入了解本节。但是,你应该知道这一轮到底发生了什么,所以如果在面试中被问到,你可以处理它。


必须通过:


面试准备的 5 个通用系统设计概念

如何在面试中破解系统设计回合

十大系统设计面试问题和答案

设计推特

设计 Dropbox

第 86 天至第 92 天

操作系统和数据库管理系统

现在是时候研究两个最重要的计算机科学科目,操作系统和数据库管理系统了。大多数时候,初级工程师都在纠结于操作系统和 DBMS 相关的问题,因此跳过了这一部分。但是准备这两个主题对于面试也很重要。


浏览操作系统的基本概念,例如


流程和流程管理

线程和并发

多线程

进程调度

同步和死锁

CPU调度

分布式文件系统

内存管理

临界区问题

此外,准备一些与数据库相关的问题,例如关系和非关系数据库、分片、缩放、ACID 属性、索引等。 


资源


常见的操作系统面试问题 | 设置 1

亚马逊、微软、Flipkart 中被问到最多的计算机科学科目面试问题

GeeksforGeeks 操作系统

GeeksforGeeks DBMS

第 93 天至第 99 天

面向对象设计

为一个面向对象的设计问题做好 7 天的准备。您应该对软件设计模式、SOLID/DRY 原则和各种 oops 概念有很好的理解。下面给出了一些面向对象的设计问题……


设计自动取款机

设计自动售货机

设计一个停车场

设计一个电影票预订系统

您的主要目标是收集所有需求并将其转换为可理解的类。您需要从问题陈述中识别不同的对象和实体。 


在面试中,您将不得不解释不同的组件及其界面。此外,您将解释不同的组件如何使用接口相互交互。准备好用例图、活动图和类图。  


第 100 天

文化契合

最后一天为文化回合做好准备。公司不会雇用有毒的人,也不会雇用对产品没有热情的候选人。了解公司的文化。例如,在亚马逊文化中根深蒂固,他们进行了提高标准的回合。他们非常关心领导原则。 


在面试中,你必须表现出对产品的兴趣,而且你必须诚实。虚假的人不会被娱乐。因此,请确保牢记所有这些事情,并以正确的态度做好准备。 


有经验者的 100 天代码

在继续之前,请记住,您需要专注于许多事情。你应该在编码轮次、系统设计轮次和其他轮次中表现良好。您可以利用在日常工作中学到的知识。 


有时,对面试官来说重要的不是多年的经验,而是你花在提高编码或技术技能上的时间对他们来说很重要。因此,根据多年的经验来判断您的技能是不好的。跟踪您的知识,进行一些在线测试,并检查您还需要走多远。


第 1 天至第 7 天

选择一种编程语言并学习它的基础知识

作为一名经验丰富的开发人员,您可以轻松选择一种编程语言并学习它的基础知识。您可以尝试一种新语言,也可以选择您在日常工作中使用的语言。一旦你做出决定,请仔细阅读所有基本概念。


不要仅仅因为您在日常工作中使用您的语言就认为您不需要学习基础知识。很多时候,开发人员忘记了基本概念,或者他们错过了一些东西。所以不要跳过这部分,并且要很好地掌握你选择的语言。


您应该记住的几件事是……


从/向文件读取/写入。

从控制台读取输入。

拆分字符串

二维数组实现以及如何使用它。

非常基础的语言内容,例如在 C/C++ 中处理以空字符结尾的字符串

Lyft 和 Salesforce 等许多公司的招聘程序略有不同。他们希望候选人在笔记本电脑上编写代码并解决问题。您将必须编写完整的程序,并且您的代码应该通过给定的测试用例。您可能必须处理命令行参数,或者您可能必须解析 CSV 或文本文件。 


谷歌、亚马逊或微软等其他公司使用白板。因此,您最好了解您的语言基础知识,以便在面试中处理这两种编码场景。覆盖这部分几乎需要7天。


资源


C 编程语言

C++ 编程语言

Java 编程语言

Python 编程语言

您还可以尝试GeeksforGeeks 免费课程:


叉 Python

分叉 CPP

第 8 天至第 14 天

学习数据结构和算法

经验丰富的 开发人员已经 在他们的日常工作中使用数据结构和算法(例如:数组在各种应用程序中使用最广泛)。他们使用具有不同数据结构的编码逻辑,以及根据需求深化的各种算法。 


尽管如此,他们中的很多人还是忘记了基本的实现,他们无法执行简单的任务。所以最好不要跳过这部分,直接跳入编码。


了解数据结构的所有基础知识,例如数组、链表、队列、堆栈、树等,及其实现。复习对这些数据结构执行的基本操作。清除所有复杂性的概念,了解不同的算法及其实现。 


编码的基本基础,即DSA的概念必须强大,以解决不同级别的编码问题。您可以通过进行一些在线测试来检查您的基本技能。 



 算法

第 15 天至第 28 天

解决基本问题

一旦你熟悉了数据结构和算法,就可以练习基本级别的编码问题。对于经验丰富的开发人员,大多数时候基本级别的问题都不会在面试中被问到。即使是这样,这也只是一种热身问题。在电话面试中,你可能会遇到这类问题。所以不要忽视这部分,在你转向复杂的问题之前先解决基本问题。 


给基本级别的问题 14 天时间,并尝试解决几乎 70-80 个问题。根据时间和速度,您可以增加问题的数量。在 2-3 小时的时间范围内,每天几乎 5-6 个问题足以让您为电话面试、热身类问题以及奠定基础做好准备。 


示例数组问题


合并两个排序数组

给定总和的子数组

在数组中查找重复项

数组中缺少数字

阵列旋转

示例链表问题


检测链表中的循环

旋转链表

合并两个排序的链表

在链表中搜索

在链表中查找中间元素

示例堆栈和队列问题


对堆栈中的值进行排序

使用一个数组实现两个堆栈

样本树问题


二叉搜索树中的最小值

二叉树的高度

二叉搜索树中的第 k 个最大值

示例图问题


实施广度优先搜索和深度优先搜索

样本堆问题


查找列表中的 k 个最小和最大元素

第 29 天至第 49 天

解决中级问题

在练习基本级别的编码问题后,转到中级问题并开始解决它。中等水平的问题会让你为解决更难的问题做好准备,这些问题很可能在面试中被问到。Try 必须在 21 天内解决几乎 120-130 个中等水平的问题。根据时间和速度,您可以增加问题的数量。在 2-3 小时的时间内,每天几乎可以解决 5-6 个问题。 


数组反转

所有大小为 k 的子数组的最大值

收集雨水

Kadane 算法

示例链表问题


流中的第一个非重复字符

旋转链表

删除链表中的循环

LRU 缓存

克隆一个链表

找到两个链表的交点

示例堆栈和队列问题


从堆栈中获取最小元素

使用两个堆栈进行队列

使用两个队列堆叠

样本树问题


检查 BST

二叉树的垂直遍历

二叉树的边界遍历

从 BST 中删除节点

示例图问题


在有向和无向图中检测循环

找出岛屿的数量

字谜

实施 Dijkstra

第 50 天至第 70 天

解决困难级别的问题

一旦你解决了基础和中等级别的问题,就转向复杂或困难级别的问题,然后解决它。给它 21 天的时间,尝试解决几乎 100-110 个问题。根据时间和速度,您可以增加问题的数量。 


示例问题


在流中查找中位数

N皇后问题

数独问题

旅行推销员问题

布尔括号

解决编码问题的最佳资源:GeeksforGeeks 实践门户


第 71 天至第 85 天

系统设计

这部分对于有经验的开发人员来说更为重要。系统设计是专门针对高级工程师的面试中最重要的环节。经验丰富的开发人员需要更多地关注这部分,在面试中,他们必须将方法告诉面试官以设计一个高度可扩展的系统。 


首先学习系统设计的所有基本概念,如负载平衡、缓存、代理、CAP 定理、一致性、分片或数据分区等。一旦你完成了基本概念,为一些最可能的系统设计问题做好准备,例如作为…


URL 缩短服务 (TinyURL)

设计 Facebook 新闻源

设计 Netflix/Youtube

设计 Uber 或 Lyft

准备好这些问题将帮助你处理这一轮,你将了解你在这一轮中到底要做什么。您将获得这一轮的所有权,您将描述系统的不同组件。在这一轮中,面试官会检查候选人是否能够建立一个庞大而复杂的系统。 


在准备了大约 5-6 个问题后,您将了解这一轮的情况,您应该做什么以及您需要如何处理它。 


必读:


面试准备的 5 个通用系统设计概念

如何在面试中破解系统设计回合

十大系统设计面试问题和答案

设计推特

设计 Dropbox

第 86 天至第 92 天

操作系统和数据库管理系统

现在是时候研究两个最重要的计算机科学科目,操作系统和数据库管理系统了。当面试中询问这两个主题的概念时,高级工程师应该表现良好,因为他们在日常工作中编写代码时会借助多核和多线程。 


在操作系统中,复习一些你在本科课程中留下很长时间的基本概念……


流程和流程管理

线程和并发

多线程

进程调度

同步和死锁

CPU调度

分布式文件系统

内存管理

临界区问题

此外,准备一些与数据库相关的问题,例如关系和非关系数据库、分片、缩放、ACID 属性、索引等。 


资源


常见的操作系统面试问题 | 设置 1

亚马逊、微软、Flipkart 中被问到最多的计算机科学科目面试问题

GeeksforGeeks 操作系统

GeeksforGeeks DBMS

第 93 天至第 99 天

面向对象设计

为一个面向对象的设计问题做好 7 天的准备。您应该对软件设计模式、SOLID/DRY 原则和各种 oops 概念有很好的理解。下面给出了一些面向对象的设计问题……


设计自动取款机

设计自动售货机

设计一个停车场

设计一个电影票预订系统

您的主要目标是收集所有需求并将其转换为可理解的类。您需要从问题陈述中识别不同的对象和实体。 


在面试中,您将不得不解释不同的组件及其界面。此外,您将解释不同的组件如何使用接口相互交互。准备好用例图、活动图和类图。  


第 100 天

文化契合

最后一天为文化回合做好准备。公司不会雇用有毒的人,也不会雇用对产品没有热情的候选人。了解公司的文化。例如,在亚马逊文化中根深蒂固,他们进行了提高标准的回合。他们非常关心领导原则。 


在面试中,你必须表现出对产品的兴趣,而且你必须诚实。虚假的人不会被娱乐。因此,请确保牢记所有这些事情,并以正确的态度做好准备。 


来源: