10个重要的面试问题 *

最优秀的Magento开发人员和工程师可以回答的基本问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.

现在就聘请一名顶级Magento开发人员
Toptal logo是顶级自由软件开发人员的专属网络吗, designers, finance experts, product managers, 和世界上的项目经理. 顶级公司雇佣Toptal自由职业者来完成他们最重要的项目.

Interview Questions

1.

在Magento 1中,如何改变行为并扩展Magento的核心功能? 如果有多种方法,解释它们的区别和优点/缺点.

View answer

有三种方法可以覆盖核心功能:

  1. Monkey patches:因为Magento以特定的顺序加载模块,所以您可以覆盖位于 core and community 代码池,将它们复制到 local code pool. 在这种情况下,您将重写整个类. 这是最不受欢迎的方法.
  2. Rewrites:您可以通过在配置文件中指定一个类来重写一个函数,以重写现有的类. 在这种情况下,您可以扩展父类并只重写一个函数.
  3. Observers: Magento在特定操作完成时抛出事件. 如果在要与之交互的操作之前或之后抛出了一个事件, 你可以截取并修改它. This is the preferred method.
2.

a中的下列代码有什么问题 .phtml file:

getCollection()
->addFieldToFilter('price' ['>' => 100]);
?>

Our products less than $100:

    ' . $product->getName() . ''; } ?>
View answer

在模板文件中加载模型是不好的做法. 模板应该仅用于表示逻辑. Respect the MVC architecture.

标题应翻译为:

__('Our products less than $100') ?> :

没有选择name属性:

->addAttributeToSelect('name')

The correct model name is catalog/product and not catalog_products.

The correct expression for addFieldToFilter is :

->addFieldToFilter('price', ['lt' => 100]);

以下是更正后的版本:

Block class:

类Toptal_Test_Block_Demo扩展Mage_Catalog_Block_Product_Abstract {
    getProductsLessThan($price){
        返回法师::getModel(目录/产品)
                ->getCollection()
                ->addAttributeToSelect('name')
                ->addFieldToFilter('price', ['lt' => $price]);
    }
}

Template file:


__('Our products less than %s', Mage::helper('core')->currency($price , true, false)) ?> :

    getProductsLessThan($price) as $product) { echo '
  • ' . $product->getName() . '
  • '; } ?>

还有其他与可见性、输出格式、基础货币等相关的问题. 你也应该小心.

3.

When catalog_product_flat_data 是跑步,对商店有什么后果?

View answer

在运行平面目录索引时,通过EAV检索数据. 因此,索引过程和EAV检索带来的开销会降低性能. 产品上的信息还是正确的.

申请加入Toptal的发展网络

并享受可靠、稳定、远程 自由Magento开发工作

Apply as a Freelancer
4.

在Magento 1中,你应该做些什么来改变当前主题的CSS?

View answer

Magento最重要的规则是“不要编辑核心”.因此,您也不应该编辑模板核心文件.

要更改当前的主题CSS,最快的方法是将您的自定义CSS添加到 使用布局更新生成的HTML. Edit the local.xml 位于主题布局文件夹中的文件.

如果您想更改模板文件并能够轻松地重用主题, 你可以创建自己的主题.

5.

在Magento 2中,有哪些不同的部署模式?它们的区别是什么?

View answer

Developer

在这种模式下,所有的文件 pub/static/ 符号链接是否指向原始文件. 抛出异常,并在前端显示错误. 这种模式使页面加载非常缓慢, 但是使调试更容易, 因为它每次都编译和加载静态文件. Cache can still be enabled.

Default

这个默认值是开箱即用的. 它是介于生产和开发之间的一种状态,因为文件是在需要时生成的. I.e. CSS文件是在几个位置使用几个LESS文件生成的. 这些文件只有在前端需要时才会生成, 并且在下次需要时不会再次生成.

Production

此模式应在生产中的所有Magento 2网站启用, 生成所需的所有文件并将其放置在 pub/static folder.

6.

在Magento 2中,什么是依赖注入,它的优点是什么?

View answer

依赖注入是一种设计模式策略,它将注入正确依赖的责任下放给调用模块或框架. 这就是好莱坞原则:“别打电话给我们,我们会打电话给你。.”

调用正确依赖项的责任不再由函数和尊重来处理 the SOLID principle.

它的主要优点是编写代码:

  1. Easier to test
  2. Easier to re-use
  3. Easier to maintain
7.

计算集合中项目的最佳方法是什么? 解释与其他方法的不同之处.

View answer

最好的方法是使用方法 getSize(). 这个函数不会每次加载集合来计数项目,而是存储它. 所以每次你需要这个值的时候你都不需要重新计算它. Moreover, it uses the SQL COUNT() 功能,以加快计数过程. 但是,如果已修改集合,则此值可能变得不一致.

In contrast, the count() 方法将加载集合并在每次调用时对其项进行计数. 这可能会变得非常需要资源.

8.

What does EAV mean? 它的优点和缺点是什么, 以及Magento如何解决与之相关的问题?

View answer

EAV stands for entity-attribute-value. 这是客户、产品和地址数据存储在Magento数据库中的方式. 为了检索关于客户(实体)的信息,您需要查询三个表. For example, 如果您需要获取客户(实体)的出生日期(属性), 您需要通过查询客户的电子邮件地址来检索客户ID customer_entity table, the dob attribute ID in the eav_attribute table, 最后使用实体ID和属性ID来检索日期(值) customer_entity_datetime table.

虽然这使得检索值变得复杂,并且需要多次调用, 它使系统非常灵活,并允许用户更改属性, 无需修改数据库模式即可轻松添加和删除它们.

以使数据检索更快, Magento uses flat tables that are regenerated using indexes; it allows you to retrieve some values querying only this table.

该模型的效率和可用性是有争议的,并且仍然是支持和反对eav阵营之间进行大量讨论的主题.

9.

在Magento 2中,什么是工厂类以及它是如何工作的?

View answer

工厂类是在代码生成时生成的. 它们是为表示数据库实体的模型自动创建的.

类用于创建、获取或更改实体记录,而无需使用 ObjectManager 直接使用,因为Magento不鼓励直接使用. (这是因为它违背了依赖注入的原则.)

这些类不需要手动定义, but they can be, 以防您需要定义特定的行为.

10.

商店和网站的区别是什么?

View answer

有些参数由商店定义,有些参数由网站定义:

ParameterScope
Product settingsDefault, Store View
Product pricesDefault, Website
Product tax classDefault, Website
Base currencyDefault, Website
Display currencyDefault, Store view
系统配置设置默认、网站和商店视图
Root category configurationStore group
OrdersStore view
CustomersDefault, Website
Category settingsDefault, Store view

例如,如果您需要定义不同的基础货币,则需要两个不同的网站.

面试不仅仅是棘手的技术问题, 所以这些只是作为一个指南. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.

Why Toptal

厌倦了面试候选人? 不知道该问什么才能让你得到一份好工作?

让Toptal为你找到最合适的人.

现在就聘请一名顶级Magento开发人员

我们的独家网络Magento开发人员

寻找一份工作,作为一个Magento开发人员?

让Toptal为你找到合适的工作.

Apply as a Magento Developer

工作机会从我们的网络

Submit an interview question

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, 由Toptal全权决定, LLC.

* All fields are required

寻找Magento开发人员?

Looking for Magento Developers? 查看Toptal的Magento开发人员.

Adrian Bruce

Freelance Magento Developer
United KingdomToptal Member Since April 8, 2021

Adrian is a lead and senior developer with over 15 years of experience in all phases of the software development lifecycle (SDLC) and specializing in Magento eCommerce back-end development; he's an Adobe Certified Expert
 Magento Commerce Developer

. Adrian还擅长开发PHP应用程序和各种服务(包括web服务)。, systems integration, agile project delivery, performance optimization, CI/CD, 以及围绕这些技术的DevOps流程.

Show More

Laura Robson

Freelance Magento Developer
United KingdomToptal Member Since July 7, 2021

劳拉是一名网页设计师和开发人员,拥有十多年的设计经验, building, and maintaining websites. 曾在多家伦敦数字机构和软件公司工作, 劳拉擅长WordPress和Shopify,但也使用定制系统. Hardworking and committed, 劳拉非常注重细节,专注于移动优先, 响应式网页设计以及为客户实现UX和CRO结果的热爱.

Show More

François-Xavier Degroot

Freelance Magento Developer
FranceToptal Member Since June 10, 2020

franois - xavier在电子商务行业有十年的软件开发经验. 他在荷兰开始了他的职业生涯,为一家成功的机构工作了几个项目. 在瑞士待了几年之后, franois - xavier来到加拿大,在从事国际规模的电子商务项目的同时,在各机构和一家领先的视频游戏公司担任技术领导职务.

Show More

Toptal Connects the Top 3% 世界各地的自由职业人才.

Join the Toptal community.

Learn more