📌  相关文章
📜  每个开发人员都应该动手实践的 10 个项目

📅  最后修改于: 2021-10-19 06:29:09             🧑  作者: Mango

掌握DSA并了解所有理论是不够的,不能保证你有一份稳定的工作。毫无疑问,雇主会寻找既懂理论又懂实践的程序员,但如果雇主必须在两者之间做出选择,那么他会选择实用的而不是理论的!许多雇主对你的 GitHub“个人资料”和你过去几年建立的项目非常感兴趣。在本文中,我们将研究项目——在许多面试(尤其是系统设计面试)中提出的实现问题,以及每个开发人员都应该动手解决的问题。

每个开发人员都应该动手的 10 个项目

1. 文本编辑器

亚文化文本编辑器在每个编程中都具有相关性,因此位居榜首,因为文本编辑器是每个程序员使用的基本工具,而且他必须熟悉文本编辑器的工作原理。 Flipkart、Microsoft 等公司在他们的面试中不断提出与文本编辑器相关的问题——与双栈模型、撤消-重做操作相关的问题(与记事本不同,它具有无限的堆栈大小,它只允许单个撤消/重做操作),查找和替换文本,使用特里数据结构(用于将文本编辑器缩放为文字处理器)、基于模式的搜索(使用正则表达式)、样式化文本(如在代码编辑器中)等等。因此,文本编辑器项目值得一试。

以下是一些相关文章,您可以查阅以了解如何制作文本编辑器:

  • Java Swing |创建一个简单的文本编辑器
  • 使用 Tkinter 制作记事本

2. 图形计算器

计算器是一个简单的应用程序,但图形计算器很有趣,主要是因为紧凑的用户界面(不是一次显示所有功能)。有很多东西可以扩展到它,例如允许在文本字段中使用复杂的表达式(作为输入 – 可能涉及表达式树),允许用户定义的函数(类似于 GNOME 计算器)等等!不应低估项目的复杂性,必须尽量保持用户界面紧凑。总而言之,即使面试官不会问那么多与表达式树相关的问题,但制作图形计算器可以是一个很好的 GUI 练习,也是每个开发人员都应该动手的项目!

相关文章:

  • 带有 Javascript 的简单计算器
  • Java Swing 简单计算器
  • HTML 科学计算器
  • 使用 Tkinter 的Python简单图形计算器
  • 表达式评估
  • 表达式树

3. 贪吃蛇游戏

贪吃蛇游戏绝对是每个开发者都应该动手的项目!制作贪吃蛇游戏的一个有趣之处在于,有无数种方法可以做到! Snake 中的一些小事情可能会让任何人感到困惑,这就是为什么像 Amazon 等公司会提出与 Snake 游戏设计相关的问题。诸如您如何重新实现游戏这样的问题,而不是在蛇咬自己时重新启动游戏,而是切断蛇的各个部分并将其生命减一?或者如果苹果是在蛇或它的一个节段上产卵的怎么办?你会用什么算法来确保这不会发生?你会如何制作一个动画蛇游戏——一个对蛇的头尾和身体使用不同精灵的游戏? .最后一个问题非常相关,我强烈怀疑面试官会继续问最后一个问题,因为制作一个基于精灵的蛇游戏(类似于谷歌蛇)并不像简单地制作一个蛇游戏那么简单!渲染技术确实是让它变得困难的原因。

相关文章:

  • 设计贪吃蛇游戏
  • 使用 HTML5 Canvas 创建贪吃蛇游戏

4. TicTacToe/Connect 4 with AI

听起来很容易,对吧?我们谈论的是无与伦比的人工智能——一种需要极小极大算法和 alpha-beta 剪枝的人工智能!如何制作棋盘游戏人工智能——这个问题在很多系统设计面试中都会被问到,面试官会继续问这个问题,直到它对每个人来说都是微不足道的!制作一个无与伦比的 TicTacToe AI 非常容易,没有什么值得吹嘘的,但用于其他棋盘游戏(例如 Connect 4,尤其是国际象棋)的 AI 可能非常令人生畏(因为它涉及 alpha-beta 修剪和处理许多极端情况)。

相关文章:

  • 博弈论中的 MiniMax 算法
  • Alpha-Beta 剪枝

5. 终端外壳

Shell 涉及大量字符串处理和双栈模型的巧妙使用,用于存储命令的历史记录并在它们之间移动!制作终端外壳是学习系统编程的一个很好的练习项目,因为它涉及打开/关闭大量必须进入原始模式的位标志。现在很多 GUI 应用程序都有一个图形控制台,它的工作方式与输入、解析和处理 shell 命令的方式相同!古代游戏有一个控制台,这通常是当时唯一的交互方式(基于文本的冒险游戏有它们的窗口)!在某一时刻,终端 shell 还可以包括某种元编程(与其他程序动态对话)!

以下是一些相关文章,您可以查阅以了解有关终端外壳(或控制台)以及如何实现它们的更多信息:

  • 开发基于 Linux 的 shell
  • 用 C 制作你自己的 Linux Shell

6.数独(带AI)

数独是由伟大的瑞士数学家伦纳德·欧拉开发的数学难题。有人说它最初是一个日本逻辑谜题,但我们不会深入研究。我们只关心这个项目——这是关于制作数独生成器和求解器(求解将由人工智能代理完成)数独可能非常复杂,特别是如果谜题必须根据难度生成这将涉及使用拉斯维加斯以及高水平的泛化! AI 部分非常简单,但根据您的实现和您使用的数据结构,它可能很困难
例如,如果您将网格定义为矩阵而不是数组,则可能会很复杂!请注意,我们没有将数独归入上述类别——这是因为数独是一款单人棋盘游戏。玩家自己玩数独,游戏中没有第二个玩家——这意味着每一步都不必产生可能性。有很多方法可以制作人工智能——你可以简单地使用回溯,或者你可以使用高级人工智能方法,例如约束传播,并利用 BST 等数据结构。

相关文章:

  • 数独回溯
  • 数独生成器
  • 检查给定的数独板配置是否有效

7. 节点编辑器

现在很多 GUI 应用程序都有一个叫做node-editor 的东西。现在,每个生产性软件都希望有一个节点编辑器!像 Houdini 和 Blender 这样的 3D 建模软件,像 Unity 和 Unreal 这样的游戏引擎,以及像 Twine 这样的讲故事软件——所有这些都有一个节点编辑器。节点编辑器可以有各种各样的,但基本原则是,有一些称为节点的基本实体,其中有一个引脚,需要连接到其他节点的另一个引脚!节点通过线连接,这些线主要由贝塞尔曲线表示,但也有一些将它们表示为椭圆曲线(Twine)或简单的线(Blender 1.8)。我建议您在项目中使用贝塞尔曲线,因为它们是当今的时尚!以下是一些相关文章,它们将帮助您制作节点编辑器:-

相关文章:

  • HTML5 Canvas 中的贝塞尔曲线
  • SDL/C 中的立方贝塞尔曲线
  • p5.js 中的贝塞尔曲线

如果您使用的是 Javascript,请尝试 Rete.js

8. 网络爬虫

网络爬虫可能很神秘,没有多少人知道制作可扩展网络爬虫的秘诀,这就是面试官选择最佳候选人的方式!谷歌在很多系统设计面试中都会问这个关于实现网络爬虫的问题,如果有人从来没有构建过他的网络爬虫,那就很难回答了!以下是一些相关文章,您可以查看以了解如何制作网络爬虫:

  • 如何在PHP制作蜘蛛机器人?
  • 如何在PHP制作网络爬虫?
  • 如何用PHP检测蜘蛛机器人?
  • 节点 |使用 Cheerio 进行网页抓取
  • Python|抓取网页以获取最常用词的程序
  • Python|使用 Scrapy 在Python实现 Web Scraping
  • Python|网页抓取世界中的工具
  • 使用 BeautifulSoup 在Python实现网页抓取
  • 在 ScrapingHub 上部署 Scrapy spider

9. 克朗代克/蜘蛛纸牌

有数百种不同种类的纸牌,如高尔夫、Tripeaks、Bakers Game、13 等,但最难的可能是 Klondike 和 Spider 纸牌!克朗代克纸牌(许多人简称为纸牌)可以利用从堆栈到张开树的数据结构!纸牌游戏也可以使用 Fisher-Yates Shuffle 算法!

相关文章:

  • 使用 Fisher-Yates Shuffle 算法对给定数组进行混洗
  • 洗一副纸牌

10. 国际象棋游戏

国际象棋游戏永远是每个开发人员都应该动手的项目(至少每个想成为软件工程师的开发人员)!国际象棋游戏有许多活动部件和许多必须考虑的极端情况!它涉及很多图论,甚至到目前为止,为国际象棋制作无与伦比的 AI 也不是儿戏!即使借助极大极小算法,也很难为国际象棋制作出无与伦比的人工智能(因为组合数量非常多),必须应用一些性能优化技术来减少内存开销!国际象棋游戏还可以测试您的设计技能,例如您是否实现了重复行为或您是否使用了继承的概念等?

相关文章:

  • 检查给定的棋盘是否有效
  • 棋盘中国王到达目的地所需的最少步数
  • 设计一个国际象棋游戏
  • N-皇后问题