通常,此类文章可以完整地回答问题,但是如果您面试一个相当严肃的职位,则简短的摘要显然显然不够,您需要相当深入地理解问题本身,因此我主要插入了有关所描述问题的文档或文章的链接。
的PHP
- PHP 7的新功能*
- 资料类型
- 输入提示+严格模式
- 强对比松
- 使用链接
- 写时复制
- 运行时错误处理
- 关闭
- 数组功能
- List()函数
- 可变范围
- 属性/方法/类常量的范围
- 期末课程和方法
- 后期静态链接
- 魔术方法
- 动态变量
- 发电机
- 反射API
- 自动装带器
- 声压级
- APC / APCu
- OP缓存
- PSR标准
- 作曲家
- XDebug
- REST API
- 测验
面向对象
数据库
Docker
HTTP和其他协议JS
授权和认证
的PHP
PHP 7的新功能*
恩,我记得当我讲第4版和第5版之间的区别时,我从来没有看过第4版,必须遵守旧的传统,这个问题几乎发生在所有采访中,尽管没人希望您从字面上记住哪个版本发生了更改,通常,此信息值得了解:
- PHP 7.0的新功能(HABR /文档)
- PHP 7.1的新功能(HABR /文档)
- PHP 7.2的新功能(HABR /文档)
- PHP 7.3的新功能(HABR /文档)
- PHP 7.4的新功能(HABR /文档)
- 自从我们开始以来,php 8.0 habr中的新功能
资料类型
尽管PHP是一种动态语言,但其中的所有数据都是不同的类型:
标量类型:
- 布尔
- 整型
- 浮动(有时会找到名称double,这对于php并没有影响)
- 串
混合类型:
- 数组
- 目的
- 可召回的
- 可迭代的
特殊类型:
- 资源
- 空值
在文档中阅读有关类型和伪类型的更多信息。
输入提示+严格模式
作为php 7 *中附带的类型和强类型化主题的逻辑上的延续,您需要了解强类型和松散类型之间的区别,有关详细信息,请参阅文档。
强对比松
您需要了解松散比较(不考虑数据类型的值比较)和严格比较(考虑数据类型)之间的区别,此表很好地反映了这一点。我们还应该强调对象的严格和松散的比较。
使用链接
粗略地说,PHP中的引用是一种使用不同名称访问相同变量(内存区域)的方法。
可以通过链接执行的主要操作:
了解传递对象的细节很重要。您可能已经读过,在php中所有对象都是通过引用传递的。
在php5之前是正确的,但是现在仅传递对象标识符(文档)。
简而言之,如果您创建了一个对象,并将其传递给函数,则在其中执行了
$object = null;
这并不意味着原始对象也将被清零,您仍然可以使用它。但是,如果您通过引用显式传递了一个对象,则此操作也将原始对象“置零”。
写时复制
每次将变量传递给函数时,(理论上)应复制其值。对于整数或浮点数据来说这可能不是问题,但是假设您正在将包含一千万个值的数组传递给函数。为了避免这种情况,PHP使用了写时复制范例。因此,实际上,当您传输阵列时,直到您不想更改该阵列中的任何内容时才进行复制。带有更详细说明的文章。
运行时错误处理
在php的第7版中,进行了许多与错误层次结构相关的更改(有关层次结构的更多信息),否则,要求申请人知道如何捕获异常,甚至可以编写自己的error_handler。
关闭
它们也是匿名函数,最可用作回调参数,文档的值。尽管在Habré中有一篇有关处理闭包的老文章,但有一篇不错的文章。
数组功能
通常会要求命名所有用于记忆的数组的函数。而且,尽管我认为这个问题比没有意义的多,但功能列表可以在文档中重复。
List()函数
由于PHP 7.1的更改,该功能变得更加方便使用,因此,它的使用频率更高,所有信息都可以在文档中找到。
可变范围
在大多数情况下,所有变量都只有一个作用域,全局/超全局变量除外,顾名思义,全局/超全局变量以及静态/常量均可用。
属性/方法/类常量的范围
它是使用关键字public(对所有人可见),protected(仅对当前类或其后代可用)或private(仅对当前类可用)定义的,并且可用于属性/方法以及自PHP 7.1起用于类常量。在文档中阅读更多内容。
期末课程和方法
通过将final关键字放在类方法声明的前面,可以防止它们在子类中被覆盖,并且如果类本身被声明为final,则不能继承它。这些类和方法旨在保护敏感代码免受更改,并且代码本身变得更易于维护。
在文档中阅读更多内容。
后期静态链接
表示为调用self ::和static ::之间的差异。“后期绑定”表示静态::将在运行时求值,并且可以在派生类中重新定义。在文档中阅读更多内容。
魔术方法
在PHP中,绝对没有魔咒,因此我们有一些方法可以让我们实现对象的附加功能,覆盖对象的标准行为(例如__serialize()/ __ unserialize())或非典型情况下对象的行为(__toString())和其他。
文档,以及关于habr的一篇不错的文章,尽管有些过时。
动态变量
您可以将一个变量的名称传递给另一个变量,然后“动态”使用该变量。
使用它们时应格外小心,因为它们会使阅读和维护代码都大大复杂化(在不运行代码的情况下,通常无法理解变量中的内容),但是它们在抽象中非常有用。在文档中阅读更多内容。
发电机
生成器(yield关键字)创建简单的迭代器,以在需要迭代大量数据的情况下节省内存。在编写生成器之前,要理解它们可能有些棘手。
描述在文档中,并且有一个相当古老的描述(但是,从那一刻起,生成器的语法就没有改变过),并且在Habré上有一篇不错的文章。
反射API
简而言之,它具有查看您自己(或他人)代码的能力,找出类具有的变量,方法,常量并在需要时将其公开的能力。框架(例如,在自动生成依赖项注入的交响曲中)和库中积极使用此功能。文档中的描述,当然还有有关Habré的文章。
自动装带器
通常,在项目上很少需要自己实现类的自动加载,但是对于自行编写所有解决方案的公司(例如,不想使用开源的大型公司)或某些特殊项目而言,这是相关的。了解其工作原理也可能会有所帮助。
- github.com/codedokode/pasta/blob/master/php/autoload.md
- www.php.net/manual/ru/function.spl-autoload-register.php
- www.php.net/manual/ru/language.oop5.autoload.php
声压级
或Standart PHP库-一组类(数据结构,迭代器,异常,用于处理文件的类),用于解决标准问题的接口和函数。通常,不需要完全了解图书馆,但至少对于个人发展而言,了解图书馆的内容是值得的。文档中有更多详细信息-www.php.net/manual/ru/book.spl.php
APC / APCu
备用PHP缓存(APC)或无操作码的备用缓存(APCu)是一种免费的开源缓存,旨在缓存和优化PHP中间代码。它主要用于保持请求之间的计算。说明文件:
OP缓存
通过将编译后的脚本字节码存储在共享内存中来提高PHP性能,从而消除了PHP在每个请求上加载和解析脚本的需求。官方文档,以及有关如何在Habré上运行的非常好的文章。
PSR标准
PHP Standards Recommendations-编码标准以及常见任务的接口。这些标准用于所有(对我来说都是已知的)框架中,并促进不同库之间的交互。官方文档以及有关Habré的精彩文章。
作曲家
依赖性管理器,以及实现库代码和应用程序本身的自动加载的工具。可能有助于优化和加快您的生产应用程序。
XDebug
大多数开发人员都使用此扩展名,以使其更易于使用代码或对其进行优化,这里的基本知识是如何配置和运行它,以下文章blog.denisbondar.com/post/phpstorm_docker_xdebug将对此提供帮助。
REST API
代表性状态转移是一种体系结构方法,允许您使用HTTP的所有功能来组织应用程序之间的交互。关于这个主题的好文章,以及REST和SOAP之间的区别。
在API的上下文中,您需要了解基本的数据交换格式,最常见的是XML和JSON。
测验
所有单元测试都基于PHPUnit(据我所知),如今,能够并且知道如何编写测试是开发的必不可少的部分。许多框架(例如Symfony)都提供了自己的包装器和测试解决方案。这是一篇有关最佳测试工具的好文章。
面向对象
封装/继承/多态
- . , , , . , . .. . ( ) . , , .
- . , , , .
- 多态性。此属性允许使用一个相同的名称来解决几个技术上不同的问题。简而言之,多态性的概念是``一个接口,很多实现''的想法。这意味着您可以为一组相关操作创建一个公共界面。
抽象类/方法
- 不涉及实例化。
- 它们在实践中实现了OOP的原理之一-多态性。
- 可能包含抽象方法和属性。没有为所描述的类实现抽象方法,但必须为其非抽象后代实现抽象方法。
- 它们代表最通用的抽象,即具有最大的数量和最少的内容。
文档中的 实现细节。
介面
与抽象类不同,接口不能包含具有实现的字段和方法-它仅描述其继承者必须实现的方法签名。与同一个抽象类不同,一个类可以同时实现许多接口。
官方文档,以及有关Habré的精彩文章。
特质
该特征与一个类非常相似,但是它旨在对功能进行分组,并在不能由一个抽象类链接的一组类中进一步复用它。有时也有人说,特征是一种在PHP中实现多重继承的方法。
由于每个类可以实现许多特征,因此,如果在不同的特征和/或类本身中实现相同的方法,则可能会发生冲突。在文档中阅读有关特征的更多信息。
GRASP模板
一般责任分配软件模式-解决常见问题的设计模式。与“四人帮”模式不同,GRAPS模式没有明确的结构,明确的范围和要解决的特定问题,而仅表示系统设计中使用的通用方法/建议/原则。
关于该主题的好文章-habr.com/ru/post/92570
四种模式的帮派
模式的主题很广,已经写了很多文章,要用几句话来描述它根本是不可能的。我喜欢这样的资源- refactoring.guru/ru/design-patterns/catalog,但你可以使用这个链接,如果必要的。
固体
每个人都问他,但是他们问他的方式有所不同。
错误的选择-要求您从内存中读取原理及其定义。
很好-他们告诉您一个原则,并请您解释该原则,描述使用示例,并提出一个实际情况,说明该原则或那个原则在某种程度上会有所帮助。我认为,该选项可以更好地了解候选人的水平以及他对原则的真实理解。
在Habré上,您可以找到许多有关这些原则的非常好的文章,因此,我链接到medium。
吻
保持简单,愚蠢是一个很好的原则,其全部内容已包含在标题中,您可以在此处了解更多信息。
干
不要重复自己-尽可能重用代码的原则。更多细节在这里。
资料库
可以在这里找到有关SQL数据库的好文章。在我的情况下,有关NoSql数据库的问题通常可以在MongoDB的示例中找到。对于ElasticSearch,通常使用包装器库,有关常规信息,请参见Habré上的文章。
通常,在内存存储(那些将值存储在RAM中的存储)和/或Redis(通常)中进行内存缓存和/或Redis操作是通过包装器库进行的,如果您想更详细地了解此问题,那么当然会在Habré上发表文章。
码头工人
一个非常重要的工具已在几乎所有项目中使用(以我为例)。而且,尽管通常每个项目对它进行一次配置,但是您需要了解基本概念和使用它的原理。就个人而言,我喜欢这篇求职面试的文章。
HTTP和其他协议
当然,任何Web开发人员都应该了解并理解数据传输协议(至少是顶级协议)如何工作。该主题很大,很难将其分成几句话,有关此主题的大量文章在Habré上发表。
授权与认证
授权是授予执行某些操作的权限,以及在尝试执行这些操作时验证权限的过程。
身份验证是一种身份验证过程,例如通过比较用户输入的密码来验证用户的身份。
重要的是要了解授权和身份验证之间的区别,如何使用会话和cookie以及JSON Web令牌(JWT)来实现它们。
s
我并不是真的不懂这种语言,所以我从不假装自己是需要了解js框架和全栈的职位,也许这就是为什么所有采访中文章中都描述了足够的知识-habr.com/ru/post/486820