全栈Web开发人员是能够同时处理应用程序的前端和后端部分的人。前端通常是指用户将看到或与之交互的应用程序部分,后端是处理逻辑,数据库交互,用户身份验证,服务器配置等的应用程序的一部分。

Q1:什么是控制倒置?


主题:设计模式
难度:⭐⭐

控制反转是一个广义的术语,但对于软件开发人员来说,它最常被描述为用于解耦系统中的组件和层的模式。

例如,假设您的应用程序具有文本编辑器组件,并且您希望提供拼写检查。您的标准代码如下所示:

public class TextEditor {

    private SpellChecker checker;

    public TextEditor() {
        this.checker = new SpellChecker();
    }
}

我们在这里所做的是在TextEditor和SpellChecker之间创建一个依赖关系。在IoC场景中,我们会做这样的事情:

public class TextEditor {

    private IocSpellChecker checker;

    public TextEditor(IocSpellChecker checker) {
        this.checker = checker;
    }
}

通过将实例化拼写检查器的责任从TextEditor类交给调用者,您可以实现反向控制

SpellChecker sc = new SpellChecker; // dependency
TextEditor textEditor = new TextEditor(sc);

🔗 来源: stackoverflow.com

Q2:持续集成的成功因素是什么?


主题:DevOps
难度:⭐⭐
  • 维护代码存储库
  • 自动化构建
  • 使构建自我测试
  • 每个人每天承诺到基线
  • 应该构建每个提交(到基线)
  • 保持快速构建
  • 在生产环境的克隆中进行测试
  • 让您轻松获得最新的可交付成果
  • 每个人都可以看到最新版本的结果
  • 自动部署

🔗 来源: edureka.co

Q3:Bridge模式是什么?


主题:设计模式
难度:⭐⭐⭐

当我们需要将抽象与其实现分离时,使用桥模式,以便两者可以独立变化。这种类型的设计模式属于结构模式,因为这种模式通过在它们之间提供桥接结构来分离实现类和抽象类。

当类和它经常变化时,桥模式很有用。类本身可以被认为是抽象,类可以作为实现来做。桥模式也可以被认为是两层抽象。

这种模式涉及一个接口,它充当一个桥梁,使具体类的功能独立于接口实现者类。两种类型的类都可以在结构上进行更改而不会相互影响。

桥模式实现的示例是:

                   ----Shape---
                  /            \
         Rectangle              Circle
        /         \            /      \
BlueRectangle  RedRectangle BlueCircle RedCircle

重构为:

          ----Shape---                        Color
         /            \                       /   \
Rectangle(Color)   Circle(Color)           Blue   Red

或者一般来说:

        A
     /     \
    Aa      Ab
   / \     /  \
 Aa1 Aa2  Ab1 Ab2

重构为:

     A         N
  /     \     / \
Aa(N) Ab(N)  1   2

🔗 来源: tutorialspoint.com

Q4:解释Docker的用例


主题:DevOps
难度:⭐⭐⭐
  • Docker是一种在本地机器或云端运行虚拟机的低开销方式。虽然它们不是严格不同的机器,也不需要启动操作系统,但它们可以为您提供许多好处。
  • Docker可以封装遗留应用程序,允许您将它们部署到服务器,否则这些服务器可能不容易使用旧的软件包和软件版本进行设置。
  • 在部署过程中,Docker可用于构建测试盒,以方便持续集成测试。
  • Docker可用于在云中配置盒子,并且通过swarm,您也可以协调群集。

🔗 来源: dev.to

Q5:解释REST和GraphQL之间的主要区别


主题:GraphQL
难度:⭐⭐⭐

REST和GraphQL之间的主要和最重要的区别是GraphQL不处理专用资源,而是将所有内容视为图形,因此可以连接并查询应用程序的确切需求

🔗 来源: medium.com/codingthesmartway-com-blog

Q6:什么是事件循环?


主题:Node.js
难度:⭐⭐⭐

Node.js是单线程应用程序,但它通过事件和回调的概念支持并发。由于Node js的每个API都是异步的并且是单个线程,因此它使用异步函数调用来维护并发性。节点使用观察者模式。节点线程保持一个事件循环,每当任何任务完成时,它都会触发相应的事件,该事件表示事件监听器函数被执行。

🔗 来源: tutorialspoint.com

问题7:你能用英语解释“git reset”的作用吗?


主题:Git
难度:⭐⭐⭐⭐

通常,git reset函数是获取当前分支并将其重置为指向其他位置,并可能带来索引和工作树。

- A - B - C (HEAD, master)
# after git reset B (--mixed by default)
- A - B (HEAD, master)      # - C is still here (working tree didn't change state), but there's no branch pointing to it anymore

记住你在git中有:

  • HEAD指针,它告诉您正在进行的提交
  • 工作树,表示系统上文件的状态
  • 暂存区域(也称为索引),它“分级”更改,以便以后可以一起提交

所以考虑:

  • git reset --soft 移动HEAD但不触及暂存区域或工作树。
  • git reset --mixed 移动HEAD并更新暂存区域,但不更新工作树。
  • git reset --merge 移动HEAD,重置暂存区域,并尝试将工作树中的所有更改移动到新的工作树中。
  • git reset --hard 移动HEAD并将您的临时区域和工作树调整到新的HEAD,扔掉所有东西。

用例:

  • 使用--soft时要移动到另一个承诺和修补的东西没有“失去你的地方。” 你需要这个很少见。
  • --mixed当您想要查看另一次提交时的内容时,请使用(这是默认设置),但您不希望丢失已有的任何更改。
  • 使用--merge时要移动到一个新的地方,但包括你已经进入了工作树的变化。
  • 使用--hard擦拭的一切,并开始在新的一个新的石板提交。

🔗 来源: stackoverflow.com

Q8:解释JavaScript中的原型继承?


主题:JavaScript
难度:⭐⭐⭐⭐

在实现Java,C#或C ++等经典继承的语言中,您首先要创建一个类 - 对象的蓝图 - 然后您可以从该类创建新对象,或者您可以扩展该类,定义一个新的类来扩充该类。原班。

在JavaScript中,您首先创建一个对象(没有类的概念),然后您可以扩充自己的对象或从中创建新对象。

Javascript中的每个对象都有一个原型。JavaScript的继承系统是典型的,而不是基于类的。当消息到达对象时,JavaScript将首先尝试在该对象中查找属性,如果找不到该属性,则消息将被发送到对象的原型,依此类推。这种行为称为原型链原型继承

构造函数是JavaScript中用于构造原型链的最常用方法。当我们使用时new,JavaScript会以this关键字的形式为正在创建的新对象注入隐式引用。它还在函数末尾隐式返回此引用。

function Foo() {
  this.kind = ‘foo’
}

var foo = new Foo(); 
foo.kind //=> ‘foo’

🔗 来源: sporto.github.io