10个重要的面试问题 *
最优秀的Magento开发人员和工程师可以回答的基本问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.
现在就聘请一名顶级Magento开发人员Interview Questions
有三种方法可以覆盖核心功能:
-
Monkey patches:因为Magento以特定的顺序加载模块,所以您可以覆盖位于
core
andcommunity
代码池,将它们复制到local
code pool. 在这种情况下,您将重写整个类. 这是最不受欢迎的方法. - Rewrites:您可以通过在配置文件中指定一个类来重写一个函数,以重写现有的类. 在这种情况下,您可以扩展父类并只重写一个函数.
- Observers: Magento在特定操作完成时抛出事件. 如果在要与之交互的操作之前或之后抛出了一个事件, 你可以截取并修改它. This is the preferred method.
a中的下列代码有什么问题 .phtml
file:
getCollection()
->addFieldToFilter('price' ['>' => 100]);
?>
Our products less than $100:
' . $product->getName() . '';
}
?>
在模板文件中加载模型是不好的做法. 模板应该仅用于表示逻辑. 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]);
Here is a corrected version:
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() . '
';
}
?>
还有其他与可见性、输出格式、基础货币等相关的问题. 你也应该小心.
在运行平面目录索引时,通过EAV检索数据. 因此,索引过程和EAV检索带来的开销会降低性能. 产品上的信息还是正确的.
申请加入Toptal的发展网络
并享受可靠、稳定、远程 自由Magento开发工作
Magento最重要的规则是“不要编辑核心”.因此,您也不应该编辑模板核心文件.
要更改当前的主题CSS,最快的方法是将您的自定义CSS添加到 使用布局更新生成的HTML. Edit the
local.xml
位于主题布局文件夹中的文件.
如果您想更改模板文件并能够轻松地重用主题, 你可以创建自己的主题.
Developer
在这种模式下,所有的文件 pub/static/
符号链接是否指向原始文件. 抛出异常,并在前端显示错误. 这种模式使页面加载非常缓慢, but makes it easier to debug, 因为它每次都编译和加载静态文件. Cache can still be enabled.
Default
这个默认值是开箱即用的. 它是介于生产和开发之间的一种状态,因为文件是在需要时生成的. I.e. CSS文件是在几个位置使用几个LESS文件生成的. 这些文件只有在前端需要时才会生成, 并且在下次需要时不会再次生成.
Production
此模式应在生产中的所有Magento 2网站启用, 生成所需的所有文件并将其放置在 pub/static
folder.
依赖注入是一种设计模式策略,它将注入正确依赖的责任下放给调用模块或框架. 这就是好莱坞原则:“别打电话给我们,我们会打电话给你。.”
调用正确依赖项的责任不再由函数和尊重来处理 the SOLID principle.
它的主要优点是编写代码:
- Easier to test
- Easier to re-use
- Easier to maintain
最好的方法是使用方法 getSize()
. 这个函数不会每次加载集合来计数项目,而是存储它. 所以每次你需要这个值的时候你都不需要重新计算它. Moreover, it uses the SQL COUNT()
功能,以加快计数过程. 但是,如果已修改集合,则此值可能变得不一致.
In contrast, the count()
方法将加载集合并在每次调用时对其项进行计数. 这可能会变得非常需要资源.
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阵营之间进行大量讨论的主题.
工厂类是在代码生成时生成的. 它们是为表示数据库实体的模型自动创建的.
类用于创建、获取或更改实体记录,而无需使用 ObjectManager
直接使用,因为Magento不鼓励直接使用. (这是因为它违背了依赖注入的原则.)
这些类不需要手动定义, but they can be, 以防您需要定义特定的行为.
有些参数由商店定义,有些参数由网站定义:
Parameter | Scope |
---|---|
Product settings | Default, Store View |
Product prices | Default, Website |
Product tax class | Default, Website |
Base currency | Default, Website |
Display currency | Default, Store view |
System configuration settings | 默认、网站和商店视图 |
Root category configuration | Store group |
Orders | Store view |
Customers | Default, Website |
Category settings | Default, Store view |
例如,如果您需要定义不同的基础货币,则需要两个不同的网站.
面试不仅仅是棘手的技术问题, 所以这些只是作为一个指南. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.
Why Toptal
Submit an interview question
提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, 由Toptal全权决定, LLC.
寻找Magento开发人员?
Looking for Magento Developers? 查看Toptal的Magento开发人员.
Adrian Bruce
Freelance Magento Developer
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 MoreLaura Robson
Freelance Magento Developer
劳拉是一名网页设计师和开发人员,拥有十多年的设计经验, building, and maintaining websites. 曾在多家伦敦数字机构和软件公司工作, 劳拉擅长WordPress和Shopify,但也使用定制系统. Hardworking and committed, 劳拉非常注重细节,专注于移动优先, 响应式网页设计以及为客户实现UX和CRO结果的热爱.
Show MoreFrançois-Xavier Degroot
Freelance Magento Developer
franois - xavier在电子商务行业有十年的软件开发经验. 他在荷兰开始了他的职业生涯,为一家成功的机构工作了几个项目. 在瑞士待了几年之后, franois - xavier来到加拿大,在从事国际规模的电子商务项目的同时,在各机构和一家领先的视频游戏公司担任技术领导职务.
Show MoreToptal Connects the Top 3% 世界各地的自由职业人才.
Join the Toptal community.