<p>为了在红帽企业 Linux (RHEL) 中工作时有效地保护您的系统并规范访问,您需要了解用户和组管理。</p><p>这是一个关键组件,对于单个和复杂的网络环境都很重要,因为它是熟练处理用户帐户和组的关键。</p><p>在本指南中,我们将深入探讨 RHEL 中用户和组管理的基础知识。您将获得必要的知识和技能,以便根据您的特定安全和操作需求自信地创建、修改和优化用户帐户和组。</p><p>您还将了解授予用户权限和实施基于组的访问控制的来龙去脉,并掌握确保强大的系统完整性和规范资源访问的基本工具和行之有效的方法。</p><p>先决条件</p><p>熟悉基本的 Linux 命令。如果你需要复习,你可以阅读我之前关于RHEL命令和关键概念的教程。</p><p>目录</p><p>以下是我们将在本综合指南中介绍的内容:</p><p>用户添加</p><p>什么是sudo?</p><p>用户模组</p><p>什么是 /etc/login.defs?</p><p>什么是 /etc/skel?</p><p>什么是 /etc/shadow?</p><p>组添加</p><p>组模组</p><p>实战练习</p><p>结束语</p><p>命令useradd</p><p>该命令是 RHEL 中用于创建新用户帐户的重要工具。此命令不仅将用户的信息添加到系统文件中,还可以设置其主目录和默认配置。useradd</p><p>命令的语法:useradd</p><p>useradd [options] username</p><p>什么是sudo?</p><p>在 Linux/Unix 的世界里,代表“超级用户做”。从本质上讲,它是一个命令,它授予普通用户运行具有完全管理或 root 权限的命令的能力。这对于由于安全原因可能限制普通用户的命令特别有用。sudo</p><p>例子:</p><p>只是一个快速提醒 - 如果您当前没有以 root 用户身份登录,请务必在使用我们将在本教程中讨论的命令之前使用。考虑作为一个方便的工具,它赋予你一些 root 用户的能力。我们将在以后的教程中更深入地讨论这个主题。sudouseraddsudo</p><p>目前,我以 root 用户身份登录。所以我不会在任何命令之前使用。sudo</p><p>创建用户:</p><p>useradd kedar</p><p>此命令创建一个名为“kedar”的新用户,并默认为他们设置一个主文件夹。稍后,我们将详细了解以及如何更改这些默认值。useradd</p><p>在 RHEL 中,创建用户时已经设置了一些值,但我们将在本教程中进一步探讨它们。</p><p>检查新添加的用户:</p><p>tail -1 /etc/passwd</p><p>/etc/passwd用作包含有关用户帐户的基本信息的集中式存储库。上述命令的输出将按以下方式显示:</p><p>kedar:x:1001:1001:John Doe:/home/john:/bin/bash</p><p>如果用户添加成功,您将看到上面的输出。现在可能会有一些变化,但看起来应该基本相同。</p><p>让我们分解这个输出并尝试理解它:</p><p>框架-1000004542上述输出的细分</p><p>用户名 – 用户帐户的名称。</p><p>密码占位符(已过时) – 从历史上看,此字段包含一个“x”字符,表示用户的加密密码存储在文件中。/etc/shadow</p><p>用户 ID (UID) – 分配给用户的唯一数字标识符。</p><p>组 ID (GID) – 与用户关联的主要组的数字标识符。</p><p>用户信息 (GECOS) – 此字段通常包括其他信息,如用户的全名、联系方式等。</p><p>主目录 – 用户主目录的路径。</p><p>登录 Shell – 用户登录时执行的默认 shell 或程序。</p><p>创建用户后,我们可以为该用户设置密码。这只能从 root 帐户完成。</p><p>为新创建的帐户设置密码</p><p>passwd kedar</p><p>这将要求您键入 kedar 用户的密码。设置密码后,您可以使用 GUI 登录 kedar 用户。如果要通过GUI登录,则设置密码非常重要。</p><p>在创建新用户时为用户设置不同的选项</p><p>现在我们知道在创建用户时有哪些选项可用,我们可以根据需要设置它们。</p><p>用户 ID (-u)</p><p>useradd -u 1234 kedar</p><p>上面带有该选项的命令会在创建用户 kedar 时将用户 ID 设置为 1234。-u</p><p>2. 初级组 (-g)</p><p>useradd -g 1232 kedar</p><p>如果存在现有组,并且您知道组 ID 或组名称,则可以将该组添加为 kedar 用户的主要组。</p><p>3. 中学组 (-G)</p><p>useradd -G developers kedar</p><p>用户 kedar 将被添加到已存在的名为 developers 的辅助组中。我们可以将用户添加到多个辅助组。</p><p>将 Linux 中的辅助组视为用户梦寐以求的俱乐部会员资格。虽然在计算机上工作时,它们会自动包含在主组中,但加入辅助组允许用户扩展其成员身份并访问其他文件和功能。</p><p>从本质上讲,这就像同时成为多个组的一部分,为用户提供额外的权限和探索系统不同部分的能力。</p><p>4. 用户信息</p><p>useradd -c <span style="color: #ce9178;">"2 Month Intern"</span> kedar</p><p>这会将更多信息添加到用户 kedar 作为“2 个月实习生”。这将显示在文件中。/etc/passwd</p><p>5. 主目录</p><p>useradd -d /etc/kedar/home kedar</p><p>现在,这会将主目录设置为 kedar 用户。默认情况下,在 RHEL 中,如果未指定,则主目录为 。/etc/kedar/home/home/kedar</p><p>6. 登录外壳</p><p>useradd -s /bin/shell kedar</p><p>在这里,kedar 用户将可以访问位于 /bin/shell 中的 shell。这将使用户 kedar 能够访问 shell。</p><p>/bin/bash 访问权限与用户登录系统时的默认 shell 有关。</p><p>在 Linux 世界中,/bin/bash shell 通常被称为 Bash shell,是“Bourne Again SHell”的缩写,在大多数 Linux 发行版上都很容易获得。当用户被授予 /bin/bash 访问权限时,这意味着在登录时,他们将看到 Bash shell 的命令行界面。</p><p>这个强大的 shell 使他们能够使用其独特的语法和功能与系统交互、运行命令和执行特定于 Bash 的脚本。</p><p>鉴于其广泛使用、高级功能以及与各种脚本语言和命令行任务的兼容性,/bin/bash shell 是许多用户的首选选项,作为其默认 shell。</p><p>如果要删除特定用户的 shell 访问权限,可以按如下方式设置 shell 访问权限:.这会将此用户的访问限制为登录其帐户,直到 shell 访问权限设置为 。/sbin/nologin/bin/shell</p><p>useradd -s /sbin/nologin kedar</p><p>命令usermod</p><p>usermod 命令在 Linux 中非常重要。它可以帮助管理员在创建用户帐户后轻松更改有关用户帐户的内容。这样可以节省时间,因为您不必删除并重新创建帐户。这是一种轻松管理用户的便捷方式。</p><p>命令的语法:usermod</p><p>usermod [options] username</p><p>例子:</p><p>更改用户名:</p><p>usermod -l newusername oldusername</p><p>此命令将用户名从 更改为 。oldusernamenewusername</p><p>更改用户 ID (UID):</p><p>usermod -u <newUID> username</p><p>此命令将替换为用户所需的新 UID。<newUID></p><p>更改组 ID (GID):</p><p>usermod -g <newGID> username</p><p>此命令将替换为用户所需的新主组 ID。<newGID></p><p>将用户添加到补充组:</p><p>usermod -aG group1,group2 username</p><p>此命令将用户添加到其他补充组(、 等)。group1group2</p><p>更改主目录:</p><p>usermod -d /newhome username</p><p>此命令将用户的主目录更改为 。/newhome</p><p>更改默认 shell:</p><p>usermod -s /bin/bash username</p><p>此命令将用户的默认 shell 更改为 。/bin/bash</p><p>设置帐户的到期日期:</p><p>usermod -e YYYY-MM-DD username</p><p>此命令为用户帐户设置到期日期 ()。YYYY-MM-DD</p><p>您可以使用 来浏览有关此命令的更多信息。使用命令时,您可以使用与 相同的选项来操作用户的信息。man usermoduseraddusermod</p><p>什么?/etc/login.defs</p><p>该文件是一个重要的配置文件,用于设置登录、密码策略和用户帐户创建的默认参数。它可以在通常的位置 /etc/login.defs 中找到,并且在确定用户管理和身份验证的系统范围的默认值方面起着关键作用。/etc/login.defs</p><p>用户 UID 还有一个固定范围,如下表所示:</p><p>框架-1000004563-1UID 范围表 - 特权用户:0-99,系统用户:201-999,普通用户:1000-60000</p><p>目录 /etc/login.defs 包含各种默认配置。通过访问此目录,我们可以根据自己的喜好修改这些设置。</p><p>此文件包含我们可以调整的几个不同选项,下面列出了其中一些选项:</p><p>PASS_MAX_DAYS 90PASS_MIN_DAYS 7PASS_WARN_AGE 14PASS_MIN_LEN 8UID_MIN 1000UID_MAX 60000GID_MIN 1000GID_MAX 60000LOGIN_RETRIES 5LOGIN_TIMEOUT 60CREATE_HOME yesUMASK 077</p><p>ENCRYPT_METHOD SHA512</p><p>CHFN_AUTH yesCHFN_RESTRICT rwh</p><p>DEFAULT_HOME /home</p><p>现在,您知道创建用户时默认设置的来源了。您可以根据需要更改这些设置。</p><p>什么?/etc/skel</p><p>在 Linux 和类似系统中,该文件夹就像新用户的入门包。它被称为“skel”,是“骨架”的缩写,因为它为新用户设置了基础知识。/etc/skel/</p><p>此文件夹包含一组复制到新用户主文件夹中的文件和文件夹。每当有新用户使用时,这些来自 /etc/skel/ 的基本文件都会自动放入他们的主文件夹中,确保它包含他们入门所需的内容。</p><p>这有助于为用户设置一个简单的起点。它为他们提供基本配置、默认设置,有时还提供示例文件。此方法可确保每个新用户都从标准设置和所需文件开始。</p><p>在 /etc/skel/ 文件夹中,您可能会找到 .bashrc、.profile 等常见文件和类似的配置文件。</p><p>什么?/etc/shadow</p><p>该文件是基于 Unix 的操作系统(如 Linux)的关键组件,因为它用作加密用户密码和其他密码相关数据的存储库。这种增强的安全措施超越了以前在 /etc/passwd 文件中存储密码的方法。/etc/shadow</p><p>/etc/shadow 文件包含与用户帐户密码有关的重要信息。文件中的每一行都代表一个特定的用户,并分为多个字段,每个字段用冒号 (:) 分隔。</p><p>这些字段通常包括用户名、加密密码(使用加密算法进行哈希处理,而不是实际密码)、自上次密码更改以来的天数(从 1970 年 1 月 1 日开始)、有关密码过期的信息(如最短和最长期限)以及警告期。它还指定在帐户被锁定之前允许的非活动天数,以及帐户是否有到期日期。</p><p>/etc/shadow 文件的示例条目</p><p>user:$6$PswrdHash$E7KLkQIGo7mxG5vDi7JelC5D8L0qbg38z1/WgNhAZDpCoe2GyGB6JefT9ftb/Rfm3uZOlFkktj/SkJTfSJziO.:18830:0:90:7:::</p><p>哪里:</p><p>user: 用户名</p><p>$6$PswrdHash$E7KLkQIG...:加密的密码哈希</p><p>$1$ 是 MD5</p><p>$2a$ 是河豚</p><p>$2y$ 是河豚</p><p>$5$ 是 SHA-256</p><p>$6$ 是 SHA-512</p><p>$y$ 是 yescrypt</p><p>这些符号有助于识别用于存储在文件中的每个密码哈希的哈希算法。例如,如果您看到以 开头的密码哈希,则表示该特定密码已使用 SHA-512 加密。/etc/shadow$6$</p><p>18830:上次密码更改日期(自 1970 年 1 月 1 日以来的天数)</p><p>0:最短密码期限</p><p>90:密码最长使用期限</p><p>7:密码警告期</p><p>帐户不活动和过期的其他字段</p><p>访问:为了访问和修改文件,您必须授予 root 用户权限或专用权限。/etc/shadow</p><p>修改:为了增强安全性,建议使用指定的命令,例如 ,它处理密码加密并有效地更新 /etc/shadow 文件。passwd</p><p>命令groupadd</p><p>在 RHEL 中,您可以使用该命令在系统上创建新组。它是用于管理用户组的基本命令,允许系统管理员添加组、设置其属性以及定义其成员身份。groupadd</p><p>组的所有默认设置都位于 中。/etc/login.defs 文件包含重要设置,例如 GID_MIN 和GID_MAX,前者用于确定常规组的最小 GID 值,后者用于设置最大 GID 值。此外,SYS_GID_MIN 和 SYS_GID_MAX 确定系统组的最小和最大 GID 值。/etc/login.defs</p><p>这些设置在系统内组的管理中起着至关重要的作用。</p><p>命令的语法:groupadd</p><p>groupadd [options] groupname</p><p>例子:</p><p>创建组:</p><p>groupadd developers</p><p>上面的命令创建一个名为“developers”的新组。</p><p>分配特定的 GID:</p><p>groupadd -g 1001 developers</p><p>此命令创建具有指定 GID(例如,GID 1001)的组。</p><p>您可以使用该命令根据需要探索更多选项。这将为您提供命令的文档。man groupaddgroupadd</p><p>命令groupmod</p><p>RHEL 中的命令对于系统管理员来说是一个有价值的工具,因为它使他们能够毫不费力地修改现有的组属性。groupmod</p><p>使用这个强大的命令,您可以更改组而无需重新创建它们,使其成为系统维护的重要资产。</p><p>命令的语法:groupmod</p><p>groupmod [options] groupname</p><p>例子:</p><p>更改组名称:</p><p>groupmod -n newgroupname oldgroupname</p><p>此命令将组名从 更改为 。oldgroupnamenewgroupname</p><p>更改 GID(组 ID):</p><p>groupmod -g <newGID> groupname</p><p>此命令将组的 GID 更改为 。<newGID></p><p>将组添加到补充组:</p><p>groupmod -aG group1,group2 groupname</p><p>此命令将该组添加到其他补充组(、、 等)。group1group2</p><p>从组中添加用户:</p><p>groupmod -m -m user1,user2 developers</p><p>这会将 user1 和 user2 添加到 developers 组。</p><p>从群组中移除用户:</p><p>groupmod -M user1,user2 developers</p><p>这将从开发人员组中删除 user1 和 user2。</p><p>您可以使用该命令根据需要探索更多选项。这将为您提供命令的文档。man groupmodgroupmod</p><p>实战练习</p><p>练习 1:基本用户和组管理</p><p>创建用户和组</p><p>用于创建名为“testuser”的新用户。useradd</p><p>用于创建名为“testgroup”的组。groupadd</p><p>确保用户“testuser”是组“testgroup”的一部分。</p><p>练习 2:用户修改</p><p>修改用户属性</p><p>用于将 “testuser” 的默认 shell 更改为 。usermod/bin/bash</p><p>使用 将用户的登录名从“testuser”修改为“newuser”。usermod</p><p>通过检查 来确认更改。/etc/passwd</p><p>练习 3:组修改</p><p>组修改</p><p>用于将“testgroup”重命名为“newgroup”。groupmod</p><p>使用 更改“newgroup”的 GID(组 ID)。groupmod</p><p>使用 将 “newuser” 添加到 “newgroup” 中。usermod</p><p>练习 4:高级用户和组管理</p><p>设置用户和组限制</p><p>使用中的参数设置密码策略。/etc/login.defs</p><p>在 中配置组默认设置,例如 GID_MIN 和 GID_MAX。/etc/login.defs</p><p>练习 5:理解和/etc/shadow/etc/skel</p><p>探索密码存储和默认值</p><p>检查文件以了解密码存储格式。/etc/shadow</p><p>创建一个新用户并观察其在 中的输入。/etc/shadow</p><p>通过创建新用户并观察其主目录来探索和了解其用途。/etc/skel</p><p>练习 6:挑战</p><p>管理权限和访问控制</p><p>设置目录权限,以便只有“newgroup”中的“newuser”才能读/写特定文件夹。</p><p>试验和命令以更改所有权和权限。chownchmod</p><p>练习 7:真实场景</p><p>创建具有特定配置的用户</p><p>创建名为“admin”的用户,其中包含自定义的主目录 (/opt/admin) 和特定的默认 shell。</p><p>设置仅适用于“admin”用户的密码策略。</p><p>结束语</p><p>感谢您今天与我一起探索如何在 RHEL 中管理用户和组。您可以更深入地了解 Linux 专业知识领域,并继续关注我未来的教程中更多有见地的内容。</p><p><br/></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 1.5em; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-stretch: inherit; line-height: 1.5em; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.25em; vertical-align: baseline; min-width: 100%; color: rgb(10, 10, 35); text-wrap: wrap; background-color: rgb(255, 255, 255);"><br/></p>
文章列表
<p>在本文中,我们将介绍两个流行的深度学习库——PyTorch 和 TensorFlow,看看它们如何比较。</p><p>如果您刚开始使用深度学习,可用的工具和框架将是压倒性的。行业专家可能会推荐 TensorFlow,而铁杆 ML 工程师可能更喜欢 PyTorch。</p><p>这两个框架都是强大的深度学习工具。虽然 TensorFlow 用于 Google 搜索和 Uber,但 Pytorch 为 OpenAI 的 ChatGPT 和特斯拉的自动驾驶仪提供支持。</p><p>在这两个框架之间进行选择是开发人员面临的共同挑战。如果您处于此位置,在本文中,我们将比较 TensorFlow 和 PyTorch,以帮助您做出明智的选择。</p><p>了解 PyTorch 和 TensorFlow</p><p>让我们从更好地了解我们的竞争者开始。</p><p>PyTorch 由 Facebook 的 AI 研究实验室创建,因其简单性和用户友好性而获得认可。Pytorch 可以有效地处理动态计算图。</p><p>计算图是数学运算及其关系的可视化表示。它就像一个流程图,显示数据如何流经深度学习模型。</p><p>训练神经网络涉及大量计算。因此,计算图可以帮助计算机在训练神经网络时有效地组织和执行计算。</p><p>PyTorch 易于使用,使其成为开发人员和研究人员的首选。对于喜欢简单明了的项目框架的人来说,PyTorch 是一个完美的选择。</p><p>TensorFlow 是 Google 的心血结晶,具有强大的生产能力和对分布式训练的支持。TensorFlow 在实际应用程序中需要大规模机器学习模型的场景中表现出色。</p><p>分布式训练是深度学习中用于训练大型复杂模型的一种技术。通过将训练过程分散到多台机器或设备上,它在处理海量数据集时非常有用。</p><p>Tensorflow 是深度学习模型中需要可扩展性和可靠性的公司的首选。</p><p>因此,正如您可能能够看到的,PyTorch 和 TensorFlow 之间的选择通常取决于项目的特定需求。</p><p>PyTorch 与 TensorFlow – 哪一个适合您?</p><p>易于学习和使用</p><p>当你开始一个新项目时,有一个更容易的学习曲线是很有帮助的。它既有助于构建项目,也有助于为您的项目雇用/培训工程师。</p><p>PyTorch 更简单,并且具有“Pythonic”的做事方式。它是初学者和研究人员的最爱。它的动态计算图意味着你可以即时改变事物,这非常适合实验。</p><p>TensorFlow 提供了一种更加结构化的方法。它的静态计算图需要更多的提前规划。TensorFlow 还具有陡峭的学习曲线。但这可以带来更优化和高性能的模型。</p><p>TensorFlow 2.0 在简单性方面也取得了长足的进步。它通过其 Eager Execution 功能融入了 PyTorch 的更多动态特性。</p><p>但是,在简单性和易学性方面,PyTorch 显然是赢家。</p><p>性能和可扩展性</p><p>在性能和可扩展性方面,TensorFlow 大放异彩。它可以轻松处理大规模的分布式训练。因此,TensorFlow 是生产环境的首选。</p><p>TensorFlow 的集成工具 TensorBoard 也是一个强大的可视化和调试工具。</p><p>PyTorch 正在迎头赶上,最近的更新提高了其可扩展性。</p><p>PyTorch 进行了改进,以支持分布式训练和可扩展性。它提供了一些工具,可帮助您在多个 GPU 甚至跨多台机器训练深度学习模型。</p><p>但 TensorFlow 在生产环境中部署大规模模型方面仍然处于领先地位。</p><p>社区与支持</p><p>框架的强度在一定程度上也由其社区决定。由于这些是开源框架,因此没有客户支持。因此,如果您在使用这些框架构建项目时遇到困难,则必须依靠社区寻求帮助。</p><p>TensorFlow 年纪更大,社区更大。它还拥有大量的教程、课程和书籍。</p><p>PyTorch 虽然更年轻,但其社区发展迅速。PyTorch 是最受欢迎的,尤其是在研究人员中,因为它很容易使用 Pytorch 来试验数据集。</p><p>这两个框架都有强大的支持,但 TensorFlow 的成熟度使其在这一领域略有优势。</p><p>灵活性和创新性</p><p>如果您正在从事前沿研究或需要更大的灵活性,PyTorch 是您的最佳选择。它的动态计算图允许更具创造性和更复杂的模型架构。</p><p>正如我之前所说,这种灵活性使 PyTorch 成为研究界最受欢迎的工具。在快速原型设计和实验是关键的情况下,PyTorch 是您的最佳选择。</p><p>TensorFlow 一直在努力增加灵活性。但这是一场艰难的战斗,因为 PyTorch 从一开始就是为了简单而构建的。</p><p>行业采用</p><p>1*3KA-wtadTjv6H9-LLSu9fwPyTorch(蓝色)与 TensorFlow(红色)</p><p>TensorFlow 在 tpyally 上占了上风,尤其是在大型公司和生产环境中。它的稳健性和可扩展性使其成为企业的安全选择。</p><p>但 PyTorch 正在迅速发展。正如您在趋势图中看到的那样,PyTorch 已经取代了 TensorFlow,成为搜索量最大的深度学习库。您可以在此处找到实时图表。</p><p>由于 PyTorch 的用户友好性和灵活性,多个行业开始采用 PyTorch 进行研究和开发。在 ChatGPT 等模型发布后,Pytorch 也证明了其作为生产级工具的能力。</p><p>以下是使用 TensorFlow 和 PyTorch 的公司列表。</p><p>使用 Tensorflow 的产品</p><p>Google 搜索和推荐:Google 使用 TensorFlow 来增强其搜索引擎和推荐系统。它有助于提高搜索准确性,并根据用户行为和偏好提供个性化推荐。</p><p>NVIDIA 深度学习加速器 (NVDLA):NVDLA 是用于深度学习应用程序的硬件加速器。它使用 TensorFlow 在此硬件上优化和部署模型。</p><p>Uber 的米开朗基罗:Uber 在其米开朗基罗平台中使用 TensorFlow 进行机器学习。它协助完成各种任务,包括 ETA 预测、欺诈检测和动态定价。</p><p>使用 PyTorch 的产品</p><p>Facebook:由于 PyTorch 来自 Facebook,因此 Facebook 将 PyTorch 用于各种内部 AI 研究和应用程序,包括内容推荐和语言翻译。</p><p>特斯拉自动驾驶仪:特斯拉的自动驾驶系统依靠 PyTorch 实现其深度学习组件,例如物体检测和导航。</p><p>OpenAI 的 GPT 模型:OpenAI 的许多语言模型,包括 GPT-2 和 GPT-3,都是使用 PyTorch 构建的。这些模型用于广泛的自然语言处理任务,包括文本生成和语言翻译。</p><p>结论</p><p>在 PyTorch 和 TensorFlow 之间进行选择取决于项目的需求。</p><p>对于那些需要易用性和灵活性的人来说,PyTorch 是一个不错的选择。如果您更喜欢从头开始的可扩展性、生产部署和成熟的生态系统,TensorFlow 可能是您的不二之选。</p><p>这两个框架都在不断发展,因此请密切关注它们的发展。你今天的选择可能不是你明天的选择。请记住,最好的工具是适合您项目需求的工具,而不是流行的工具。</p><p><br/></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 1.5em; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-stretch: inherit; line-height: 1.5em; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.25em; vertical-align: baseline; min-width: 100%; color: rgb(10, 10, 35); text-wrap: wrap; background-color: rgb(255, 255, 255);"><br/></p>
<p>Django 是一个超级有用的工具,用于使用 Python 构建 Web 应用程序。它遵循模型-视图-模板 (MVT) 体系结构,这是一种用于构建 Web 应用的流行设计模式。</p><p>在 MVT 架构中,模型是指存储信息的内部表示,视图负责处理用户请求并返回适当的响应,模板负责呈现从视图接收的数据。</p><p>本指南重点介绍体系结构的“模型”部分,该部分是应用程序的核心组件,也是设计应用程序时通常从该部分开始的地方。该模型负责数据的内部表示,并提供直接与数据库交互的接口。</p><p>在本教程中,您将学习如何使用 Django 的交互式 shell 来创建、读取、更新和删除对象。您还将学习如何在管理界面中注册模型,这对于为您的 Django 项目设计组织良好的数据库非常有用。</p><p>这些技能将使您能够更有效地管理您的项目并确保它们顺利运行。</p><p>先决条件</p><p>为了充分利用本教程,你需要对 Python 和 Django 有基本的了解。</p><p>如何设置项目</p><p>为了帮助您理解本教程中的概念,您将开发一个简单的“待办事项”应用。</p><p>首先,创建一个新目录,您将在其中托管项目,然后将目录更改为该目录。</p><p>进入文件夹后,安装 ,一个用于建立隔离 Python 环境的工具。virtualenv</p><p>pip install virtualenv</p><p>virtualenv venvsource venv/bin/activate</p><p>pip install virtualenv安装必要的工具。 创建一个名为 venv 的虚拟环境。最后,激活虚拟环境,允许在指定环境中进行隔离的 Python 开发。virtualenv venvsource venv/bin/activate</p><p>随意将“venv”替换为您在创建虚拟环境时选择的名称。</p><p>确保已安装 Django。如果没有,请通过命令行安装它,如下所示:</p><p>pip install django</p><p>使用以下命令启动项目:</p><p>django-admin startproject todoproject</p><p>切换到项目目录,然后创建一个新应用。todoproject</p><p>cd todoproject</p><p>python manage.py startapp todoapp</p><p>接下来,将应用的名称包含在 的列表中。在代码编辑器中,导航到文件。INSTALLED_APPSsettings.pysettings.py</p><p> <span style="color: #569cd6;">INSTALLED_APPS</span> = [</p><p> <span style="color: #ce9178;">'django.contrib.admin'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.auth'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.contenttypes'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.sessions'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.messages'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.staticfiles'</span>,</p><p> <span style="color: #ce9178;">'todoapp'</span> <span style="color: #6a9955;"># new app]</span></p><p>Django 模型</p><p>模型就像 Django 中所有数据的首选专家。这就像一个详细的计划,说明您要存储哪些信息、如何存储以及如何检索这些信息。</p><p>待办事项应用程序将存储任务。通过仅存储要完成的任务的标题及其完成状态(即任务是否已完成),您将保持简单。在文本编辑器中打开该文件并添加以下代码:models.py</p><p>from django.db import modelsclass Task(models.Model):</p><p> <span style="color: #569cd6;">title</span> = models.CharField(<span style="color: #569cd6;">max_length</span>=100)</p><p> <span style="color: #569cd6;">completed</span> = models.BooleanField(<span style="color: #569cd6;">default</span>=False)</p><p>在这个超级简单的模型中:</p><p>Task是模型的名称。</p><p>title是最大长度为 100 个字符的类型字段。此字段适用于存储短文本。CharField</p><p>completed是默认值为 的类型字段。此字段是一个布尔值 (True/False)。默认值设置为 ,假设任务在默认情况下以未完成状态开始。BooleanFieldFalseFalse</p><p>模型的主要部分是它存储的事物列表(称为字段)。 和 是字段,属于 和 字段类型。titlecompletedBooleanFieldCharField</p><p>您可以使用的其他字段类型示例包括:</p><p>AutoField:自动递增。IntegerField</p><p>BooleanField:表示 true/false 值。</p><p>CharField:存储基于文本的值。</p><p>DateField:表示使用实例的日期。datetime.date</p><p>DateTimeField:表示使用实例的日期和时间。datetime.datetime</p><p>DecimalField:表示使用实例的固定精度十进制数。Decimal</p><p>EmailField:验证值是否为有效的电子邮件地址。CharField</p><p>ImageField:继承自 ,确保上传的对象是有效的图像。FileField</p><p>IntegerField:将整数值存储在安全范围内。</p><p>SlugField:表示某物的短标签,通常用于 URL。</p><p>TextField:一个大的文本字段。</p><p>TimeField:表示使用实例的时间。datetime.time</p><p>URLField:a 表示 URL。CharField</p><p>其他字段类型解释了表之间的关系:</p><p>ForeignKey:表示多对一关系。</p><p>ManyToManyField:表示多对多关系。</p><p>OneToOneField:表示一对一的关系。从本质上讲,它类似于 with ,但关系的“反向”侧直接产生单个对象。<span style="color: #569cd6;">ForeignKeyunique</span>=True</p><p>若要将数据库与 Django 模型中的最新更改同步,必须运行迁移。请确保您与文件位于同一目录中,然后运行以下命令:manage.py</p><p>python manage.py makemigrations</p><p>python manage.py migrate</p><p>截图-2024-01-12-14-48-39进行迁移</p><p>在文件中注册模型。这使管理员能够通过 Django 管理界面查看、添加、编辑和删除模型的实例。这是在开发和测试期间与数据交互的便捷方式。admin.pyTask</p><p><span style="color: #6a9955;">#admin.pyfrom django.contrib import adminfrom .models import Task# Register your models here.admin.site.register(Task)</span></p><p>你需要创建一个才能访问 Django 管理界面。在终端中,运行以下命令:superuser</p><p>python manage.py createsuperuser</p><p>截图-2024-01-12-14-52-19创建超级用户</p><p>按照提示操作,您应该有一个超级用户帐户来访问管理界面。</p><p>The Django Shell</p><p>你通常会在视图中编写逻辑,但由于我们想做更多的实验,你将使用 Django shell。它是一个功能强大且用途广泛的工具,可增强 Django 项目的开发和测试体验。shell 还提供了一个动态的交互式环境,用于处理代码、数据和模型。</p><p>若要访问 shell,请从项目目录运行以下命令:</p><p>python manage.py shell</p><p>首先导入任务模型。</p><p>截图-来自-2024-01-12-15-15-57将模型导入 Django shell</p><p>对模型执行的基本操作通常是创建、读取、更新和删除,因此得名 CRUD 应用程序。您将在此处学习如何执行所有四个操作。</p><p>创造</p><p>若要创建新任务,请在 shell 中键入以下命令:</p><p>>>> <span style="color: #569cd6;">new_task</span> = Task(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Complete Assignment'</span>, <span style="color: #569cd6;">completed</span>=False)>>> new_task.save()</p><p>或者,您可以使用该函数,如下所示:create</p><p>Task.objects.create(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Another Task'</span>, <span style="color: #569cd6;">completed</span>=False)</p><p>要检查所有任务,请输入以下内容:</p><p>Task.objects.all()</p><p>你应该得到类似于你在下图中看到的东西。请注意,查询集与刚刚创建的任务一起返回:</p><p>截图-2024-01-15-12-32-55在 Django shell 中创建对象</p><p>读</p><p>创建对象后,您应该能够读取它们。为此,Django 提供了 和 方法。get()filter()</p><p>该方法根据指定的条件从数据库中检索单个对象。如果未找到任何对象或多个对象,则会引发异常,使其适用于唯一查询。get()</p><p>该方法检索与指定条件匹配的数据库对象的查询集。如果找到多个对象或未找到对象,它不会引发异常,因此非常适合具有多个可能结果的查询。filter()</p><p>您可以使用该方法检索具有特定标题的任务。get()</p><p><span style="color: #569cd6;">specific_task</span> = Task.objects.get(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Complete Assignment'</span>)print(f<span style="color: #ce9178;">'Title: {specific_task.title}, Completed: {specific_task.completed}'</span>)</p><p>上述代码的输出如下:</p><p>截图-from-2024-01-15-13-59-07在 Django shell 中检索特定对象</p><p>如果任务满足特定条件,您还可以检索该任务。这就是过滤方法的亮点。</p><p>假设您想要获取未完成的任务,即字段设置为 的任务。您可以添加以下代码:completedFalse</p><p><span style="color: #569cd6;">incomplete_tasks</span> = Task.objects.filter(<span style="color: #569cd6;">completed</span>=False)for task in incomplete_tasks:</p><p> print(f<span style="color: #ce9178;">'Title: {task.title}, Completed: {task.completed}'</span>)</p><p>这将返回所有尚未完成的任务。</p><p>截图-2024-01-15-14-02-44-1在 Django shell 中检索满足特定条件的对象</p><p>此方法非常适合根据特定条件检索多个对象。</p><p>更新</p><p>如果要进行更改,则可以使用该方法进行更改。假设您已完成所有任务,现在想要将其标记为已完成。代码如下:update()</p><p><span style="color: #569cd6;">incomplete_tasks</span> = Task.objects.filter(<span style="color: #569cd6;">completed</span>=False)incomplete_tasks.update(<span style="color: #569cd6;">completed</span>=True)<span style="color: #569cd6;">all_tasks</span> = Task.objects.all()for task in all_tasks:</p><p> print(f<span style="color: #ce9178;">'Title: {task.title}, Completed: {task.completed}'</span>)</p><p>以上代码的输出为:</p><p>截图-2024-01-15-14-37-07-1在 Django shell 中更新对象</p><p>这首先将任务的状态更新为 ,然后打印已完成的任务。completed</p><p>删除</p><p>完成所有操作后,您可能希望删除所有任务或特定任务。您可以使用方法执行此操作,如下所示:delete()</p><p><span style="color: #569cd6;">task_to_delete</span> = Task.objects.get(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Another Task'</span>) task_to_delete.delete() <span style="color: #569cd6;">all_tasks_after_deletion</span> = Task.objects.all() for task in all_tasks_after_deletion:</p><p> print(f<span style="color: #ce9178;">'Title: {task.title}, Completed: {task.completed}'</span>)</p><p>上面的代码使用该方法获取标题为“另一个任务”的任务,然后使用该方法将其删除。最后,它会打印所有剩余任务的详细信息,以验证删除是否成功。getdelete</p><p>输出为:</p><p>截图-2024-01-15-14-53-40删除 Django shell 中的对象</p><p>或者,您可以像这样简化上面的代码:</p><p><span style="color: #569cd6;">task_to_delete</span> = Task.objects.get(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Another Task'</span>).delete() <span style="color: #569cd6;">all_tasks_after_deletion</span> = Task.objects.all() for task in all_tasks_after_deletion:</p><p> print(f<span style="color: #ce9178;">'Title: {task.title}, Completed: {task.completed}'</span>)</p><p>你可以访问你在 Django 管理面板中创建的所有任务。在终端中启动服务器,如下所示:</p><p>python manage.py runserver</p><p>然后在浏览器上访问站点 http://127.0.0.1:8000/admin/ 并输入您之前创建的超级用户凭据。在那里,您可以访问您创建的所有任务。</p><p>截图-2024-01-15-14-59-40Django 管理界面</p><p>我们删除了另一个任务,因此剩余的任务是“完成分配”任务,如上所示。</p><p>结论</p><p>在本教程中,你探索了创建、读取、更新和删除对象的实际示例,提高了你对 Django 交互式 shell 的使用熟练程度。</p><p>您还了解了在管理界面中注册模型的重要性,以便在开发过程中轻松管理。</p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 1.5em; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-stretch: inherit; line-height: 1.5em; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.25em; vertical-align: baseline; min-width: 100%; color: rgb(10, 10, 35); text-wrap: wrap; background-color: rgb(255, 255, 255);"><br/></p>
<p>人工智能工具最近变得非常流行。开发人员使用这些工具来帮助生成想法、创建简单的代码示例等。</p><p>2023 年,ChatGPT 和其他大型语言模型进入了我们的许多工具包。我们可以使用它们来提高工作效率并节省重复性任务的时间。</p><p>在本文中,您将发现除了 GitHub Copilot 之外的其他有用工具。</p><p>在我们讨论替代方案之前,让我们先了解一下 GitHub Copilot 是什么以及它的作用。</p><p>什么是 GitHub Copilot?</p><p>GitHub Copilot 可帮助开发人员更快、更高效地编写代码。它是由 GitHub 和 OpenAI 开发的工具,它采用了强大的 AI 和 Codex。</p><p>GitHub Copilot 可与各种代码编辑器配合使用,包括 Visual Studio Code、NeoVim 和 JetBrains。</p><p>GitHub Copilot 使用机器学习。它不会自动完成 - 它会在您在文本编辑器中工作时建议整个代码片段。它还可以帮助您调试和重构旧代码。目标是提高编码效率,减少花在重复性任务上的时间,并提高生产力。</p><p>但 GitHub Copilot 有一个缺点:试用期过后,每月收费 10 美元,一些用户可能会认为这太高了。</p><p>因此,现在让我们看看一些可以免费使用的替代方案。</p><p>Synk (深度代码)</p><p>Synk,以前称为 DeepCode,是一种帮助您确保代码安全的工具。它直接与您的项目文件或存储库一起使用,使团队能够轻松查找和修复其代码、依赖项、容器和基础结构中的任何安全问题。</p><p>Synk (DeepCode) 主页Synk(DeepCode) 主页</p><p>使用案例</p><p>非常适合早期安全审查。</p><p>有效的错误检测和解决。</p><p>Synk 的特点</p><p>在开发早期扫描代码,以帮助其通过安全审查。这有助于避免在开发周期后期进行代价高昂的修复。</p><p>扫描漏洞并显示包含安全问题的结果。</p><p>发现代码中可能存在的错误,帮助您及早发现并修复问题。</p><p>建议如何使代码运行得更好。</p><p>通过从不同的代码示例中学习,变得更加智能。随着时间的推移,它使用算法提供更好的建议。</p><p>Synk 的局限性</p><p>虽然 Snyk 也很强大,但它也有一些局限性。首先,它检查整个代码库,这可能需要大量的计算能力,从而影响性能。</p><p>为了帮助缓解此问题,您可以将大型代码库分解为更小的、可管理的模块。</p><p>此外,开发人员可能需要一些学习曲线来了解如何充分利用该工具。</p><p>但是,您的团队可以提供培训课程或文档,以帮助您和其他开发人员更好地了解如何有效地使用 Synk。此外,鼓励您的团队提供支持资源,例如论坛或文档,以解决常见问题和疑问。</p><p>价格</p><p>在 Visual Studio Code 中使用 Synk 进行单个代码安全测试是完全免费的。这允许在将代码部署到生产环境之前检查代码的安全性。</p><p>要在团队内或出于商业目的进行协作,必须升级计划。您可以在此处找到有关定价计划的更多信息。</p><p>如何在 Visual Studio Code 中设置 Synk</p><p>要设置 Snyk,请在文本中选择“查看”选项以显示下拉菜单。</p><p>在编辑器中查看在编辑器中选择“查看”选项</p><p>然后单击该下拉列表中的“扩展”选项,它将带你进入 Visual Studio Code Marketplace。</p><p>在市场中,键入“Synk Security”并按回车键,然后继续安装它。</p><p>市场市场</p><p>如何在 Snyk 中进行身份验证</p><p>安装 Snyk 后,需要进行身份验证。</p><p>单击编辑器中的 Synk 图标。这将带您进入身份验证页面。</p><p>单击按钮进行身份验证和连接。通过身份验证后,请返回编辑器。就是这样!</p><p>身份验证并连接到,以便它适用于 Visual Studio Code身份验证并连接到,以便它适用于 Visual Studio Code</p><p>完成此步骤后,您现在可以使用 Snyk 在将代码发送到生产环境之前检查、理解和分析您的代码。</p><p>示例用例</p><p>要扫描项目文件中可能存在的漏洞,只需单击左侧面板上的同步图标即可。这将分析代码并突出显示需要注意的任何潜在问题。</p><p>Synk 的实际应用示例Synk 的实际应用示例</p><p>如果你仔细观察,你会看到一些字母,表明编写的代码是多么脆弱。</p><p>“H”表示它真的很高,需要尽快修复。</p><p>“M”表示它处于最大漏洞级别。</p><p>“L”表示它处于低漏洞级别。</p><p>如果您单击某个漏洞,您将获得有关如何修复它的建议,这些建议显示在编辑器的右侧。</p><p>科迪人工智能</p><p>Cody AI 是一款智能编码助手,它使用高级 AI 来理解和分析您的代码。它可以帮助您更快地编写代码,还可以提高您对代码库的理解。它超越了基本功能,可以识别模式并提出改进建议,使您的编码体验更加高效和富有洞察力。</p><p>Cody 主页Cody 主页</p><p>Cody AI 的用例</p><p>促进任务和头脑风暴的创造力。</p><p>解决数字工具的常见问题。</p><p>通过快速的信息共享加强团队合作。</p><p>CodyAI的特点</p><p>对查询提供即时响应。</p><p>允许您上传各种数据类型以构建自定义知识库。</p><p>科迪的回答都有足够的来源引用。</p><p>可以帮助电子邮件创作、文档翻译和营销材料生成。</p><p>协助团队使用数字技术来诊断和解决问题。</p><p>根据以前的遭遇和背景历史,它提出了建议和想法。</p><p>Cody AI 的局限性</p><p>与任何工具一样,也有局限性。首先,人工智能的搜索能力没有那么强大。它使用可用信息分析用户查询。因此,人工智能有时可能会给出缺乏您想要的深度或特异性的答案。</p><p>此外,Cody AI Bots 不能很好地进行数学运算或处理表格。这意味着人工智能在处理数字或复杂数据时可能无法给出准确的答案。</p><p>最后,Cody AI Bots 无法理解文档中的图片、图表或任何视觉内容。它只使用文本来提出响应,因此它不擅长处理视觉元素。</p><p>为了帮助缓解这些问题,请确保在制定查询时尽可能清晰和具体,以帮助 Cody 更好地了解您的意图。</p><p>您还可以将复杂的问题分解为更简单的部分,以提高准确回答的机会。</p><p>价格</p><p>在您的集成开发环境中安装 Cody 可免费供个人使用。但是,对于希望利用 Cody 功能的专业人士或企业来说,需要升级。</p><p>如何在 Visual Studio Code 中设置 Cody</p><p>首先,在文本编辑器中选择“查看”选项以显示下拉菜单,如上所示。</p><p>单击“扩展”,它将带你进入 Visual Studio Code Marketplace。</p><p>在市场中,输入“Cody”并按回车键,然后继续安装它。</p><p>安装 Cody AICody 插件</p><p>现在安装已经完成,您可以开始在编辑器中使用 Cody。</p><p>Cody 提供了不同的命令提示符来帮助您编写代码:</p><p>它可以帮助您为代码生成文档</p><p>如果你正在为一个开源项目做贡献,并发现代码库令人困惑,Cody AI 可以提供解释。</p><p>它可以告诉你一段代码是用哪种编程语言编写的。</p><p>您可以在不离开编码环境的情况下向 Cody 提问。</p><p>Cody 可以根据给定的指令对您的代码进行编辑。</p><p>现在,我将通过一个示例来说明 Cody 如何帮助解释部分代码:</p><p>Cody AI 的一个命令提示符Cody AI 的一个命令提示符</p><p>塔宁</p><p>Tabnine 是一款专为开发人员设计的强大 AI 助手,提供 AI 驱动的代码完成和建议以提高生产力。</p><p>它与多种编程语言和主要的集成开发环境 (IDE) 兼容,使开发人员能够有效地利用其智能代码建议。</p><p>TabNine 主页Tabnine 主页</p><p>使用案例</p><p>加快软件开发:促进更快、更高效的代码编写。</p><p>确保代码一致性:在不同团队成员之间保持一致的编码风格。</p><p>Tabnine的特点</p><p>从您键入的代码中学习并调整其建议以匹配您的编码风格。</p><p>关心您的隐私。它只从开源和宽松的代码中学习,因此您始终拥有自己的代码。</p><p>对于开发人员来说很棒,因为它适用于多种编程语言。它就像一个方便的工具,用于不同的技术的东西!</p><p>通过提供智能建议,使编码更容易,帮助开发人员节省时间。</p><p>它与流行的代码编辑器(如 Visual Studio Code)配合得很好。开发人员可以在他们的编码环境中使用它。</p><p>Tabnine的局限性</p><p>Tabnine 会随着时间的推移从您的编码方式中学习,因此可能需要一些时间才能匹配您的编码风格。如果您积极使用该工具并提供一致的输入以帮助它更快地学习您的编码风格,这将有所帮助。</p><p>Tabnine 还建议代码,但它不会创建整个部分。虽然这似乎是一个限制,但实际上它最适合代码质量。</p><p>最后,它可能会提示不太正确的代码。开发人员应仔细检查建议的准确性。为了帮助 Tabnine 提出更好的代码建议,您可以定期查看并接受/拒绝建议,以微调它对您的偏好的理解。</p><p>在最终确定之前,您还应该始终仔细检查建议的代码的正确性和是否符合编码标准。</p><p>价格</p><p>安装免费,免费。但是,对于大型组织,建议考虑升级。大型组织的升级计划提供无限制的用户访问,同时优先考虑安全和隐私。</p><p>如何在 Visual Studio Code 中设置 Tabnine</p><p>首先,在文本编辑器中选择“查看”选项以显示下拉菜单,如上所示。</p><p>单击“扩展”,它将带您进入 Visual Studio Code Marketplace。</p><p>在市场中,输入“Tabnine”并按回车键,然后继续安装它。</p><p>扩展(IDE 中的市场)扩展(IDE 中的市场)</p><p>现在我们已经安装了它,你可以开始在编辑器中使用 Tabnine。下面是一个示例:</p><p>编辑器中的示例编辑器中的示例</p><p>代码如下:</p><p>const <span style="color: #569cd6;">add</span> = (a, b) => {</p><p> return a + b<span style="color: #6a9955;">;}console.log(add(5,9))// output 14</span></p><p>代码耳语者</p><p>CodeWhisperer 是一个聪明的编码助手。当您在编码环境中工作时,它使用 AI 来建议代码位或整个函数。它由 AWS 制造,通过自动完成和代码重组等功能使编码更容易。</p><p>Code Whisperer 主页Code Whisperer 主页</p><p>Code Whisperer的功能</p><p>Code Whisperer 会在您编写代码时实时建议代码。</p><p>与您的集成开发环境 (IDE) 集成。</p><p>通过协助改进和重组,帮助提高代码的可读性和效率。</p><p>支持多种编程语言。</p><p>在生成和理解代码文档方面提供有价值的帮助。</p><p>Code Whisperer 的局限性</p><p>CodeWhisperer 可能会发现很难处理需要创造力的新编码任务。</p><p>此外,其训练数据/模型中的错误可能会导致不准确的代码建议。</p><p>考虑到这些,您应该主要使用 CodeWhisperer 作为生成例行或重复代码的工具,将更复杂和创造性的任务留给人类专业知识。</p><p>此外,请确保经常查看和验证 CodeWhisperer 的任何建议,不要只看表面信息。</p><p>如何在 Visual Studio Code 中设置 Code Whisperer</p><p>首先,在文本编辑器中选择“查看”选项以显示下拉列表。</p><p>单击“扩展”,它将带你进入 Visual Studio Code Marketplace。</p><p>在市场中,键入“AWS Toolkit”并按回车键,然后继续安装它。</p><p>图片-58扩展(IDE 中的市场)</p><p>现在,扩展已安装完毕,让我们在集成开发环境 (IDE) 中使用它。</p><p>示例代码耳语</p><p>代码如下:</p><p>// create a greet functionfunction greet(name) {</p><p> return <span style="color: #ce9178;">"Hello "</span> + name<span style="color: #6a9955;">;}// export the greet functionmodule.exports = greet;</span></p><p>CodeGeex 人工智能</p><p>CodeGeeX 是一个有用的编码工具,可以创建评论、建议代码并提供 AI 驱动的聊天帮助。它还可以将您的代码翻译成不同的语言,并与许多编程语言和工具配合使用。</p><p>chrome_4C9oZTEpBeCodeGeex 主页</p><p>使用案例</p><p>让编码更快。</p><p>通过自动注释和解释指导新开发人员完成大代码。</p><p>CodeGeex AI的特点</p><p>擅长完成代码。它通过根据现有代码或注释自动完成和生成行来提供帮助。</p><p>为代码中的方法和行创建注释,从而节省时间并使其易于理解不熟悉的代码。</p><p>帮助将代码从一种编程语言更改为另一种编程语言,例如将 Python 转换为 Java。</p><p>开发人员可以提出 CodeGeeX 编码问题并快速获得答案,而无需搜索网络。</p><p>CodeGeeX 所做的不仅仅是建议代码。它可以解释选定的代码、修复错误、总结代码等。</p><p>CodeGeeX AI 的局限性</p><p>当您使用 CodeGeeX 时,请记住它是一个研究原型,因此它可能并不总是为每种情况创建完美的代码。</p><p>它还可能误解某些语言描述或代码片段,从而导致可能的错误。</p><p>与往常一样,请确保仔细验证生成的代码的准确性和是否符合编码标准。</p><p>此外,在提供语言描述或代码片段时,请尽可能清晰和详细。</p><p>价格</p><p>CodeGeex 可在 Visual Studio Code 上免费安装,升级起价为每月 9 美元。</p><p>如何在 Visual Studio Code 中设置 CodeGeeX AI</p><p>在文本编辑器中选择“查看”选项以显示下拉菜单。</p><p>单击文本编辑器中的“扩展”,它将转到 Visual Studio Code Marketplace。</p><p>在市场中,输入“CodeGeex”并按回车键,然后继续安装。</p><p>安装 CodeGeex安装 CodeGeex</p><p>安装后,单击该图标,它将带您返回可以登录或注册的页面。</p><p>CodeGeex 中的登录页面CodeGeex 中的登录页面</p><p>完成此步骤后,您将能够与 IDE 中的 AI 进行交互。</p><p>若要触发它,请导航到 IDE,突出显示所需的代码,然后单击鼠标右键。将出现一个下拉菜单,允许您选择希望 AI 为您执行的特定命令。</p><p>下面是一个示例:</p><p>使用代码GeexCodeGeex使用示例</p><p>GIF 示例展示了 CodeGeex AI 可以做的一件事。</p><p>要了解有关其功能的更多信息,请访问文档:CodeGeeX: AI Code AutoComplete, Chat, Auto Comment.</p><p>法典:</p><p>const <span style="color: #569cd6;">colors</span> = [<span style="color: #ce9178;">'pink'</span>, <span style="color: #ce9178;">'blue'</span>, <span style="color: #ce9178;">'purple'</span>, <span style="color: #ce9178;">'green'</span>]<span style="color: #6a9955;">;colors.forEach(color => {</span></p><p> console.log(color)<span style="color: #6a9955;">;});</span></p><p>Codeium(编码)</p><p>Codeium 是一款免费且功能强大的工具,可使用高级 AI 加快编码速度。它就像一个编码的超级英雄,有一个工具可以帮助你完成 70 多种语言的代码。它速度超快,并提供一流的建议,使编码更加高效。您可以将 Codeium 用作 Google Chrome 扩展程序。</p><p>Codeium 主页Codeium 主页</p><p>请记住,由于其强大的功能,使用 Codeium 很容易过度依赖 AI 生成的建议。如果您不保持警惕并且没有跟上您的技能,这可能会导致您的代码出现错误。因此,请确保您仍然检查/运行您的代码,根据需要学习新主题,并保持自己的代码编写能力敏锐。</p><p>您可以在此处阅读有关 Codeium 的更多信息。</p><p>价格</p><p>AI 最初可以免费安装在您的集成开发环境 (IDE) 中,但可能需要升级,起价为每月 12 美元,团队使用。</p><p>如何在 Visual Studio Code 中设置 Codeium</p><p>首先,请访问 Codeium 的网站并选择登录选项。</p><p>登录用户登录用户</p><p>单击此按钮会将您重定向到登录页面。</p><p>登录页面登录页面</p><p>使用您的电子邮件或 Google 帐户登录。</p><p>图片-68证实</p><p>完成登录后,您将遇到各种集成开发环境 (IDE)。选择符合你偏好的那个 - 例如,我使用 Visual Studio Code。</p><p>选择-IDE-代码选择 IDE</p><p>继续在 Visual Studio Code IDE 中安装它。</p><p>安装后,单击 Visual Studio Code 中的“帐户登录”选项,向网站进行身份验证。</p><p>使用代码身份验证-1证实</p><p>完成后,您现在可以在 IDE 中使用 Codeium。</p><p>现在,让我们看一个实际的例子:</p><p>例Codeium 示例</p><p>结论</p><p>本文讨论了可用于加快开发速度的各种 AI 工具。一些开发人员只考虑 GitHub Copilot。但是还有其他具有不同功能的 AI 工具也可以为您提供帮助。</p><p>如果您在本教程中发现了价值,请考虑与其他开发人员分享,他们也可能从中受益。</p><p><br/></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 1.5em; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-stretch: inherit; line-height: 1.5em; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.25em; vertical-align: baseline; min-width: 100%; color: rgb(10, 10, 35); text-wrap: wrap; background-color: rgb(255, 255, 255);"><br/></p>
<p>在创业环境中工作了近十年,使我有幸接触到创新、探索和快速失败方法的快节奏文化。我遵循了标准的晋升阶梯:实习生、初级、中级、高级,并最终进入了工程管理轨道。随着时间的流逝,许多与我一起成长的人后来转到其他公司工作,成为那里备受尊敬的贡献者。公平地说,他们是优秀的工程师。</p><p>回顾我的同龄人、学员和我自己的旅程,成为一名优秀的工程师似乎比以往任何时候都更难。</p><p>定义一个好的工程师</p><p>成为一名工程师意味着什么?作为软件工程师,我们是:</p><p>负责将复杂问题转化为高效且可扩展的解决方案</p><p>负责分析用户需求、设计软件架构、编写代码以及测试和调试软件</p><p>有望紧跟趋势,寻求新的商机和改进现有产品的方法</p><p>所以不,工程不等于编程。有时,这是最小的部分。随着经验的增加,它确实如此,如下图所示。</p><p>按角色划分的工作分配</p><p>来源:工程领导技能组合重叠</p><p>成为一名优秀的工程师意味着什么?基于多次采访,并支持我的学员的进步,我注意到具有不同专业水平的人可能会给出不同的答案。</p><p>刚起步的人可能会认为这是开发人员知道的语言和框架的数量。更有经验的工程师甚至可能不关心他们使用的语言,而是强调代码质量——遵守所有编码原则并进行 QA,同时迅速行动。</p><p>经验丰富的工程师非常注重创造价值。有时我们会快速编写打破所有规则的一次性代码来证明假设<span style="color: #6a9955;">;有时我们会花几天时间编写几行关键任务代码。但大多数时候,我们都在做出架构决策、讨论关键任务问题、改进流程等。因为通常,这会带来最大的价值。</span></p><p>尽管规则总是有例外,但我们可以说,一个好的工程师是有效地集中精力在实现目标时带来最大价值的工程师。</p><p>不断增长的市场和竞争</p><p>科技市场在不断发展。多年来,我们都看到了巨大的成功:从WhatsApp到Uber,Airbnb和TikTok。虽然这些可能是例外,但这些例子往往为人们设定了北极星——这是他们应该为之奋斗的。这种思维方式给工程师带来了额外的压力。他们感到来自内部的压力,认为自己做错了什么,而从外部来看,人们将他们的公司与许多竞争对手进行比较。</p><p>科技总市值</p><p>资料来源:公共技术市场的健康状况如何?</p><p>为了在这样的环境中取得成功,公司需要“快速行动,打破常规”,正如著名的Facebook座右铭所说。今天,这一点比以往任何时候都更加明显——几乎每家公司都在成为“人工智能公司”。每个人都在整合 ChatGPT,通常没有真正的原因,没有关于它将如何带来价值的策略。</p><p>通过摒弃核心原则——我们如何为客户带来更多价值——并朝着在炒作列车上击败竞争对手的方向发展,我们让工程师构建注定要失败的功能。</p><p>世界是一个令人困惑的地方</p><p>像我这样的爱好者应该怎么做才能成为一名更好的工程师?除了通过改进干净的代码和架构理念来完善编码技能的明显选择外,如今还有很多诱惑潜伏着。学习 TypeScript 和改变一切的最新框架,潜入区块链和加密世界,尝试无数的 AI 产品......选择是无穷无尽的。</p><p>所有 javascript 库</p><p>说实话,在这个行业这么多年,我仍然感到受到 ChatGPT、GitHub Copilot 和其他新兴技术带来的新一轮变革的威胁。我的大脑开始想象我在很多事情上脱节的场景。我是否专注于正确的事情来带来价值?我是否发挥了我的最大潜力?</p><p>一段时间后,很明显我们正处于炒作之中。这也将过去,只剩下创造长期价值的人工智能公司。在过去 5 年中,美国的 AI 公司数量翻了一番,许多初创公司只是在当时新发布的 GPT-3 之上添加了一项功能。他们后来会随着 ChatGPT 或 GPT-4 的发布而消亡,它们可以做同样的事情,但更好。但这并不能阻止Twitter和其他平台的炒作大军宣布新的世界秩序。</p><p>即使我在科技行业工作了这么多年,我还是被卷入了炒作中。菜鸟失误!</p><p>编程语言和新框架的不断发布也加剧了混乱。Tailwind、TypeScript、Haskell 和 Rust 都很棒<span style="color: #6a9955;">;他们每个人都有一个角度,这给他们带来了优势。然而,人们经常误以为学习它们会给他们带来优势。它不会,或者至少不应该。它们只是很高兴知道但不能取代经验的工具。这就是为什么我们从不在职位描述中提出语言/框架要求的原因。如果错过一个有才华的工程师,那将是一个傻瓜,因为他们不懂TypeScript、提示工程或微服务。</span></p><p>我的建议是——不要被新趋势和炒作所困扰,以至于你失去了对带来价值的关注。</p><p>快节奏和高期望</p><p>在寻求新的挑战时,可能很难在避免消极压力的同时争取积极的压力。积极压力是指我们将压力情况视为带来良好结果的机会,而消极压力是一种可能对身心健康产生不利影响的压力,如下图所示。在紧张的时间表上不断交付结果是有压力的,并且出于错误的原因构建功能会倾向于后者。</p><p>Positive stress vs. negative stress</p><p>无论是作为导师还是勤奋工作的人,我都看到压力会导致倦怠。无一例外,让某人经历倦怠会导致比减少工作量、休息和长期优化更少的产出。这就是为什么我们总是试图通过定期的团队更新、一对一和培养文化,使发出危险信号尽可能简单。</p><p>不过,事情还是会出错。当他们这样做时,我们会缩小范围,让可以提供帮助的人参与进来,或者与我们的客户沟通以推迟发布。</p><p>压力比以往任何时候都高,既来自内部,也来自外部。保持专注,并拥有一支长期优化的支持团队。</p><p>我们怎样才能做得更好?</p><p>我们都有落魄的时刻——感觉自己不够称职的工程师、导师或同事。事情永远不会完美或容易,也不应该。没有犯错误和困难,我们就不会学习。但是我发现有些东西可以提高效率。</p><p>Levels of influence</p><p>就个人而言,忠于真正重要的事情。技术会来来去去,但你为世界带来的价值才是最重要的。很难伪造努力工作和经验。</p><p>作为一家公司,在做出决策时要从为什么开始。这是提供能够带来价值的功能的最佳方式。此外,确保员工知道原因。根据我的经验,他们会做出更好的决定,提供有价值的反馈,并且更快乐。</p><p>在文化上,建立支持员工的流程,进行长期优化。与您的同事一起建立信任、支持和关怀的文化。这样,你们都会得到彼此最好的东西。</p><p><br/></p>
<p>今天,我们将讨论如何优化 Kubernetes 中存储机密的流程,并学习授权我们的开发人员查看/修改部署在 Kubernetes 集群中的机密。我们还将根据开发人员所属的 GitHub 团队将访问权限委托给他们。</p><p>因此,让我问你一个基本问题,如何在 K8s 集群中存储密钥?</p><p>如果您回答说您使用的是普通的 base64 编码清单文件并手动管理它们,则:</p><p>当前方法中的问题</p><p>不容易可见 - 没有 GUI 来轻松管理机密</p><p>无版本控制</p><p>如果您想与开发人员共享,则需要将 K8s 凭据公开给他们。(不过,您可以为它们创建和设置适当的 RBAC 权限,但在某些用例中不能使用)</p><p>不支持任何第三方身份验证,例如 - 使用 GitHub Team/Org 授予开发人员预定义的访问级别。</p><p>简单解决方案 - 将 Vault 与外部机密一起使用</p><p>是的,你没听错,一旦设置好了,将访问权限委派给用户将是一件轻而易举的:)</p><p>第1季第3集 GIF by BET Plus</p><p>我们的行动项目</p><p>安装 External Secrets Operator</p><p>安装保管库</p><p>将 Vault 配置为允许使用 GitHub PAT 登录</p><p>为外部密钥配置保管库身份验证</p><p>配置外部密钥以从保管库创建密钥</p><p>在 Vault 中创建一个示例密钥,并查看该密钥是在 K8s 中创建的</p><p>安装 External Secrets Operator</p><p>https://external-secrets.io/latest/introduction/overview/</p><p>它有三个组件 - 外部机密控制器、Webhook 和证书控制器</p><p>您可以使用 Helm 快速安装外部机密!</p><p>https://external-secrets.io/latest/introduction/getting-started/</p><p>values.yaml</p><p><span style="color: #6a9955;">#? count of the controller pods for HA</span></p><p>replicaCount: 3</p><p><span style="color: #6a9955;">#? enable/disable the leader election - at any time, only one active controller is recommended</span></p><p>leaderElect: true</p><p><span style="color: #6a9955;">#? how many secrets to update concurrently</span></p><p>concurrent: 3</p><p><span style="color: #6a9955;">#? PDB configuration - helpful when doing maintenance tasks</span></p><p>podDisruptionBudget:</p><p> enabled: true</p><p> minAvailable: 1</p><p><span style="color: #6a9955;">#? Recommended - Exposes metrics!</span></p><p>serviceMonitor:</p><p> enabled: true</p><p>webhook:</p><p> serviceMonitor:</p><p> enabled: true</p><p>certController:</p><p> serviceMonitor:</p><p> enabled: true</p><p>helm repo add external-secrets https://charts.external-secrets.io</p><p>helm upgrade --install external-secrets external-secrets/external-secrets -f values.yaml -n external-secrets --create-namespace</p><p>部署后,它将如下所示:</p><p>注 - 您可以看到三个部署,但由于我们启用了其中只有一个将处于活动状态并保留租约,其他副本将等待主副本关闭,然后其中一个备用副本将成为领导者。是不是很酷?external-secretsleaderElect</p><p>奖金!- 更多关于K8s领导人选举的信息:https://carlosbecker.com/posts/k8s-leader-election/</p><p>安装保管库</p><p>加工</p><p>Vault的内部工作非常有趣,用几句话总结起来有点复杂,我们需要另一个博客来更详细地解释它。如果您完全一无所知,那么您可以在此处阅读有关此内容的更多信息:</p><p>https://developer.hashicorp.com/vault/docs/what-is-vault<span style="color: #6a9955;">#what-is-vault-1</span></p><p>https://developer.hashicorp.com/vault/docs/internals/architecture</p><p>要安装 Vault,我们将使用 Banzaicloud 的 Vault Operator,又名 Bank Vaults!</p><p>为了在 Kubernetes 环境中部署任何东西并确保其可靠性和可用性,Operator 正在成为事实上的标准。</p><p>您知道吗:Kubernetes Operator 是一个特定于应用程序的控制器,它扩展了 Kubernetes API 的功能,以代表 Kubernetes 用户创建、配置和管理复杂应用程序的实例。</p><p>在这里查看更多: https://operatorframework.io/what/</p><p>使用 Helm 安装 vault-operator</p><p>helm repo add banzaicloud-stable https://kubernetes-charts.banzaicloud.com</p><p>helm repo update</p><p>helm upgrade --install vault-operator banzaicloud-stable/vault-operator -n vault-operator</p><p>设置 RBAC</p><p>rbac.yaml- 需要应用它来为我们的设置提供所需的 RBAC 访问权限。</p><p> kubectl apply -f vault/rbac.yml -n vault-operator</p><p>解释-在这里,我们正在创建一个 Secret vault-sa-token-manual,它将保存名为 vault 的 ServiceAccount 的 Kubernetes 访问令牌(在 Kubernetes v1.24 之前,我们不必手动创建密钥,请参阅 - stackoverflow.com/a/72258300)。此 ServiceAccount 有权读取/更新 Pod 以及对机密的所有访问权限。</p><p>注 - 您还可以通过仅添加必需的谓词/资源名称/命名空间来微调访问。</p><p>另外,您是否注意到我们正在绑定一个名为 ServiceAccount 的默认值?来自官方文档 - 允许委派身份验证和授权检查。ClusterRole 具有调用 Token Review API 的权限。ClusterRolesystem:auth-delegatorVaultsystem:auth-delegator</p><p>Christian Bale GIF by PeacockTV</p><p>使用 CRD 部署 Vault</p><p>现在,由于我们已经使用 Vault Operator 为集群提供支持,因此我们可以使用简单的 YAML 文件部署 Vault。</p><p>vault-deploy.yaml</p><p>身份验证和授权</p><p>在这里,我们使用 GitHub 身份验证后端对用户进行身份验证。他们的访问级别由他们所属的 GitHub 团队定义。</p><p>例如,我的帐户 (k4kratik) 被分配了 admin policy 。同样,我在我的组织中创建了一个 GitHub 团队,该团队将授予其成员在策略中定义的访问权限,并且还为开发人员创建了一个团队,我只想为其配置只读访问权限,该团队将被分配 .vault_adminDEVS_RWrw_access_policyDEVS_ROro_access_policy</p><p>以上可视化如下:</p><p>配置文件说明:</p><p>从 <span style="color: #6a9955;">#1 行到 #102 行,我认为这几乎是不言自明的。让我们从第 #106 行开始。(externalConfig 开始的位置)</span></p><p>externalConfig.policies</p><p>就像任何其他设置一样,我们在这里定义 IAM 策略,这些策略将分配给用户/团队。</p><p>ro_access_policy:仅权限。read</p><p>rw_access_policy:RW 权限。[“读取”, “列表”, “更新”]</p><p>vault_admin:仅使用动词定义并不能授予所有权限。因此,我们已显式定义了所有管理员级别的访问权限。*</p><p>为什么?: 更多信息 : https://discuss.hashicorp.com/t/vault-admin-policy/39803/2</p><p>管理员所需的访问权限:https://developer.hashicorp.com/vault/tutorials/policies/policies<span style="color: #6a9955;">#write-a-policy</span></p><p>externalConfig.auth:kubernetes</p><p>type:当我们将其设置为在 Kubernetes 上运行时,它的值应该是external-secretskubernetes</p><p>path:保管库中此身份验证条目的标识符。</p><p>config</p><p>token_reviewer_jwt:ServiceAccount 的 JWT Token,因为它具有角色,可以帮助我们使用 K8s 的 API 来验证其他 JWT。若要获取其值,请运行以下命令,如博客前面部分所示,我们已经设置了所需的 RBAC。vaultsystem:auth-delegatorTokenReview</p><p>命令(此命令并替换为TOKEN_REVIEWER_JWT_TOKEN_HERE )</p><p> kubectl get secret vault-sa-token-manual -n vault-operator -o <span style="color: #569cd6;">go-template</span>=<span style="color: #ce9178;">'{{.data.token}}'</span> | base64 --decode</p><p>kubernetes_ca_cert:PEM 编码的 CA 证书,供用于与 Kubernetes API 通信的 TLS 客户端使用。</p><p>命令</p><p> kubectl get secret vault-sa-token-manual -n vault-operator -o <span style="color: #569cd6;">go-template</span>=<span style="color: #ce9178;">'{{index .data "ca.crt"}}'</span> | base64 --decode</p><p>kubernetes_host:的端点。确保可从 Vault Pod 访问它。Kubernetes API server</p><p> kubectl config view --minify --output <span style="color: #569cd6;">jsonpath</span>=<span style="color: #ce9178;">"{.clusters[*].cluster.server}"</span></p><p>disable_issuer_verification: - 禁用颁发者验证。true</p><p>roles - 定义附加到此身份验证机制的角色</p><p>name:角色的名称</p><p>bound_service_account_names: - 我们只想允许外部机密 SA,所以只添加它。[<span style="color: #ce9178;">"external-secrets"</span>]</p><p>bound_service_account_namespaces [<span style="color: #ce9178;">"external-secrets"</span>]- 我们只想允许外部机密命名空间,所以只添加它。</p><p>token_policies:-重要!- 要附加的策略的名称,我们的外部密钥只需要读取访问权限即可读取密钥。ro_access_policy</p><p>token_max_ttl:令牌到期时间。</p><p>外部配置.auth:github</p><p>type:由于我们正在通过 GitHub 设置身份验证,因此其值应为github</p><p>path:保管库中此身份验证条目的标识符。</p><p>config</p><p>organization:您的 GitHub 组织的名称。(用这个替换GITHUB_ORGANIZATION_NAME_HERE)</p><p>注意!- 您必须是此组织的一员,否则您将无法登录,并且您将收到以下错误:Configuration is not set!</p><p>token_ttl:生成的令牌的生存期。</p><p>map(GitHub 的映射)</p><p>teams(映射具有保管库策略的 GitHub Teams)</p><p>格式:</p><p>TEAM_NAME : POLICY_NAME</p><p>例如</p><p>DEV_RW:rw_access_policy</p><p>DEV_RO:ro_access_policy</p><p>users(使用 Vault 策略的 GitHub 用户的映射)</p><p>例如:k4kratikvault_admin</p><p>externalConfig.secrets</p><p>path: - Vault 将挂载此秘密引擎的路径。secret</p><p>type: - 秘密引擎类型:键/值kv</p><p>options:</p><p>version: 2 (推荐)</p><p>startupSecrets(启动密钥)</p><p>测试密钥,将在启动时创建。</p><p>审计</p><p>审核设备是保险柜中的组件,它们共同保留对保险柜的所有请求的详细日志。</p><p>文件审计设备将审计日志写入文件。https://developer.hashicorp.com/vault/docs/audit/file<span style="color: #6a9955;">#configuration</span></p><p>部署 Vault</p><p>kubectl apply -f vault/vault-deploy.yml</p><p>它将部署 Pod,如下所示:</p><p>登录到 Vault UI</p><p>让我们公开用于登录的Vault UI</p><p> kubectl port-forward svc/vault -n vault-operator 8200:8200</p><p>您将受到以下屏幕的欢迎:</p><p>使用 GitHub PAT(个人访问令牌)登录</p><p>生成至少具有权限的 GitHub PAT(指南在这里read:org)</p><p>我们将使用该 PAT 登录 Vault</p><p>注意 - 记住我们创建的身份验证策略,根据我们的 GitHub 用户名、组织或团队,我们将获得相关访问权限。</p><p>检查引擎,你会发现我们的测试秘诀:secretTEST_PROJECT_ONE/test</p><p>使用 Root Token 登录 [不推荐]</p><p>获取根令牌</p><p> kubectl get secrets vault-unseal-keys -o <span style="color: #569cd6;">jsonpath</span>={.data.vault-root} | base64 --decode</p><p>使用此令牌登录,如下所示</p><p>检查我们配置的内容:</p><p>检查我们定义的身份验证 - <span style="color: #ce9178;">'github'</span> 和 <span style="color: #ce9178;">'k8s-one'</span></p><p>让我们检查一下 auth 方法,我们的角色是否存在k8s-onek8s-one-external-secrets-role</p><p>这总结了基本的保管库身份验证和授权设置 + 外部机密。</p><p>Jimmy Fallon GIF by The Tonight Show Starring Jimmy Fallon</p><p>但要抱住你的马!我们仍然需要使用外部密钥从 Vault 创建密钥。如果博客看起来太长,我们深表歉意,但相信我,最终这一切都是值得的。</p><p>Season 1 GIF by Showtime</p><p>设置外部机密</p><p>外部机密有两种重要的对象类型</p><p>SecretStore(或) - 它定义如何访问外部 API 密钥提供程序。(例如 Vault、AWS Secrets Manager)ClusterSecretStore</p><p>ExternalSecret(or ) - 它描述了应该获取哪些数据,应该如何转换数据并将其保存为 K8s 。ClusterExternalSecretSecret</p><p>让我们创建一个群集范围的密钥存储,以将其与保管库连接。</p><p> kubectl apply -f external-secrets/secret-store.yml</p><p>它如下所示</p><p>在创建 之前,让我们在 Vault 中创建一些测试密钥ExternalSecret</p><p>现在,让我们创建一个 to use our 并使用它创建一个 k8s 密钥。ExternalSecretClusterSecretStore</p><p>sample-external-secret.yaml (GitHub的)</p><p> k apply -f external-secrets/sample-external-secret.yaml</p><p>让我们通过检查密钥来验证它</p><p>瞧!我们可以看到我们的秘密被创建了,我们也可以看到我们在 Vault 中的值经历了</p><p><br/></p>
<p><span style="white-space: pre; white-space-collapse: collapse;"> </span></p><p>我决定写的大部分内容都是由我认为我想阅读或被告知的内容驱动的。反思和收获是本博客所有内容的共同主题。这篇文章也不例外,也是我一直在考虑的事情。</p><p>挑选一些课程并将它们标记为最重要的课程并不容易,尤其是当您的第一份工作每天都会向您抛出新东西时。尽管如此,这是我试图浓缩所有这些信息,并提供我们在开始第一个软件角色之前不太可能听到的事情的一瞥。</p><p>测试:单元、集成和数以百万计的其他</p><p>编写代码只是冰山一角。还有很多其他的东西伴随着它。在DevOps和越来越多的跨职能角色和团队的世界里,你将花费大量时间(有时是令人讨厌的大量时间)来监控构建、应用程序运行状况以及本节的主题:编写测试。</p><p>并不是说我们中的许多人不知道这个概念,或者我们没想到会这样做<span style="color: #6a9955;">;我们只是没有意识到这是一个多么恒定的过程,以及它有时是多么令人惊讶的混乱。</span></p><p>以下是您应该知道的一些事项</p><p>有许多不同类型的测试,但每个软件开发人员最终可能会编写一些常见的测试,包括单元测试、集成测试和验收测试。在不赘述细节的情况下,每个类分别测试一个类、多个类和完整的端到端应用程序。过度简化:您单独测试应用程序的每个部分,然后将它们放在一起并确保它也能正常工作。</p><p>理想情况下,编写测试本身并不是一项任务<span style="color: #6a9955;">;相反,它是每项任务的关键部分。当你编写一段代码时,你也应该为它编写测试。</span></p><p>代码库质量的一个重要衡量标准是测试“覆盖率”。它表示至少一个测试覆盖了代码库的百分比。如果测试未涵盖您引入的新代码段,则您的拉取请求 (PR) 可能不会合并。或者,如果总体覆盖率低于阈值。这种检查大多是自动化的,例如以声纳门的形式。底线:这不是你通常可以扭动的东西!</p><p>撇开所有笑话不谈,测试在一天结束时确实起到了重要的作用,这解释了对它们的重视。特别是从初学者软件开发人员的角度来看,它让你重新思考你编写的代码,它应该让你评估诸如</p><p>这个功能的核心目的是什么</p><p>有没有更好的方法可以做到这一点</p><p>如何处理和测试边缘情况?</p><p>对于那些在大学里来自非 CS 背景的人,或者没有将其作为课程的一部分,您可能想阅读基础知识。</p><p>Git:不熟悉的部分</p><p>Git 和 VCS(版本控制系统)是不费吹灰之力的。每个人都知道这一点,与编写测试不同,这是我们大多数人在大学或从事个人项目时都接触过的东西。</p><p>不过,本节重点介绍在小型团队中工作时较少使用的 Git 部分,但在作为大型组织的一部分工作时,这些部分会成为日常工作中必不可少的方面。但是,请注意,这些是我的首选,最能帮助您进入第一个角色,并且您可以学到更多。</p><p>藏匿</p><p>当你意识到你需要对另一个分支的 PR 进行一两个快速评论时,你正在对一个分支进行更改。那么,如何在切换分支之前按下暂停键并保存更改呢?到目前为止,提交更改可能不是最佳选择,因为您不希望在提交历史记录中显示半成品代码存根。这很简单:只需隐藏您的更改即可。</p><p>git stash</p><p>当你想把它拿回来时</p><p>git stash pop</p><p>创建/应用修补程序</p><p>这个相当常见,但仍然值得一提。如果您要复制粘贴整个文件以与队友共享最新更改,请不要这样做。有一个概念是为此创建一个 Git 补丁。它会捕获您的更改。</p><p>不要让你对键盘和终端的热爱阻止你使用 IDE 的 UI(尤其是 IntelliJ)提供的快速 Git 操作。有时,这可能是完成某事的最快、最干净的方式。</p><p>cherry-pick</p><p>假设您想有选择地选择不同分支上的提交,并将它们应用于另一个分支。拉取更改并不是 git 提供的全部!</p><p>虽然期望使用和熟悉所有这些功能是不合理的,但至少将 Git 用于一些项目(您与团队的宠物项目,或者更好的是,在黑客马拉松中),并尝试它的许多功能可能会很好。</p><p>历史</p><p>唾手可得的果实,但尝试检查分支上的 git 历史记录/日志,并可能跟踪提交。</p><p>git log</p><p>CI/CD、生命周期和部署工具</p><p>正如我之前提到的,编码只是你最终必须做的事情的一部分。人们非常重视编写代码,大多数人都在DSA上狂热地在编码面试中取得好成绩。虽然这没关系,但我认为了解实际软件开发所需的其他事情也很好:一个主要主题是 CI/CD(持续集成、持续交付和部署)和常用工具。同样,没有必要使用这些来积累经验,但最好阅读一下它们。</p><p>说到实际的开发,没有什么比黑客马拉松更能让我做好准备的了。我鼓励每个有抱负的开发人员,或者任何想从事技术工作的人,在大学期间至少参加一次。(不同帖子的素材?</p><p>建立人脉,寻求帮助</p><p>与我之前谈到的技术部分不同,但我只需要把它放在这里。</p><p>这不仅仅是霍格沃茨,在大多数地方都是如此。大声说出来,不要回避问你可能有的问题——你应该有很多问题。这是学习和融入文化的最简单方法。如果您担心被评判,请不要这样做。大多数人都非常乐于助人,坐着妈妈比问很多问题要多得多。话虽如此,自学和探索内部文档和内容同样重要。</p><p>寻求帮助,但也要求指向文档/有用的存储库/内部网站和内容的方向,这样您就可以继续自己学习,这是一种两全其美的方法。</p><p>网络,你可能已经读过很多遍了。我了解到,有效的网络可以改变你在公司内如何看待自己,以及其他人如何看待你。</p><p>在软件工程这样的角色中,很容易错过 Scrum 团队之外的互动,但通过这些互动可以获得很多好处。</p><p>与来自不同角色、经验水平和地区的不同人谈。</p><p>活动和比赛是一个很好的起点。(此外,它们很有趣<span style="color: #6a9955;">;加上谁不喜欢在:)中奖)</span></p><p>如果有机会进行面对面的互动,请抓住它。我自己就是一个双面性格的人,很多社交互动并不是我一直喜欢的事情,但每隔一段时间就会有很多有趣的对话,错过会很可惜。</p><p><br/></p>
<p><span style="text-wrap: nowrap;">计算机经典编程书籍、大黑书、编程电子书、电子书、编程书籍,包括计算机基础、C/C++、Java、Python、面试题、架构设计、算法系列等经典电子书。</span></p><p><span style="text-wrap: nowrap;">信息时代,网络上充斥着各种资源。给同学们带来选择的同时,也带来了很多干扰。</span></p><p><span style="text-wrap: nowrap;">作为一名互联网/IT从业人员,经常需要搜索一些书籍、资源,在这个过程中踩过很多坑、浪费过很多时间。</span></p><p><span style="text-wrap: nowrap;">为了方便大家,我特意把这些年收集的计算机类书籍共享给大家。</span></p><p><span style="text-wrap: nowrap;">涵盖范围包括但不限于:C/C++、Python、Go、Linux、JavaScript、Rust等等。</span></p><p><br/></p><p><span style="text-wrap: nowrap;">C语言PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">C++PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">PythonPDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">JavaPDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">GOPDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">PHPPDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">vuePDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">cssPDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">QtPDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">JavascripPDF下载t、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">数据库PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">Linux&UnixPDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">数据结构与算法PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">设计模式PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">服务器运维PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">架构师PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">计算机网络PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">操作系统PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">网络安全PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">软件工程PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">软件测试PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">视觉智能PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">人工智能PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">matlabPDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">机器学习PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">游戏编程PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">数学与编程PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">并行&并发PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">嵌入式&硬件PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">组成原理&底层PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;">校招社招面试PDF下载、PDF在线阅读</span></p><p><span style="text-wrap: nowrap;"></span></p><hr/><p>由于pdf书籍数量过于庞大,这里不便一一列出,感兴趣的小伙伴自行在码小课在线阅读,或者下载到本地收藏。<br/><span style="text-wrap: nowrap;"></span></p><p>下面列出了部分PDF书籍的截图,有图有真相。</p><p>全部pdf数量统计:</p><p><img src="/uploads/images/20240108/b668a2fa7c140fd6f8be41503a4ccd4b.png" title="pdf原文件数量统计.png" alt="" width="556" height="353"/></p><p>pdf书籍分类查找页面:</p><p><img src="/uploads/images/20240108/00a9624fca903a615f12b21c0bd37df1.png" title="pdf网站分类页.png" alt="" width="992" height="620"/></p><p><br/></p><p>pdf在线阅读页面:</p><p><img src="/uploads/images/20240108/f4bd93ae977229a3887d89683da8cc61.png" title="pdf网站阅读页.png" alt="" width="1005" height="503"/></p><p><br/></p><p>pdf书籍在线阅读页面:</p><p><img src="/uploads/images/20240108/3c44028381b482b72f8dd36eef291851.png" title="pdf在线阅读目录页.png" alt="" width="812" height="531"/></p><p><br/></p>