ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php面试题(二)

2021-02-24 22:33:02  阅读:173  来源: 互联网

标签:__ 面试题 调用 对象 使用 抽象类 php 方法


一.PHP语言的一大优势是跨平台,什么是跨平台?

PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以叫跨平台。

二.安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?

  1. 使用验证码防止注册机灌水。
  2. 使用预处理,绑定参数,参数过滤转义 防止sql注入
  3. 使用token防止远程提交,使用token验证登录状态。

三.在程序的开发中,如何提高程序的运行效率?

  1. 优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询。
  2. 数据表中创建索引,不是索引越多越好,因为索引越多,管理索引表越复杂
  3. 对程序中经常用到的数据生成缓存(比如使用redis缓存数据,比如使用ob进行动态页面静态化等等)。
  4. 对mysql做主从复制,读写分离。(提高mysq执行效率和查询速度)
  5. 使用nginx做负载均衡。(将访问压力平均分配到多态服务器)

四.MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

  1. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
  2. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
  3. 做mysql主从复制读写分离。
  4. 对数据表进行分表,减少单表中的数据量提高查询速度。
  5. 添加缓存机制,比如redis,memcached等。
  6. 对不经常改动的页面,生成静态页面(比如做ob缓存)
  7. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

五.对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

  1. 确认服务器是否能支撑当前访问量。
  2. 优化数据库访问。
  3. 禁止外部访问链接(盗链), 比如图片盗链。
  4. 控制文件大小下载。
  5. 做负载均衡,使用不同主机分流。
  6. 使用浏览统计软件,了解访问量,有针对性的进行优化。

六.什么是面向对象?

  1. 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节。
  2. 面向对象有三大特征:封装性、继承性、多态性。
  3. 现在纯正的OO语言主要是 Java 和 C#,PHP、C++也支持OO,C是面向过程的。

七.简述 private、 protected、 public修饰符的访问权限

  1. private : 私有成员, 在类的内部才可以访问。
  2. protected : 保护成员,该类内部和继承类中可以访问。
  3. public : 公共成员,完全公开,没有访问限制。

八.抽象类和接口的概念以及区别?
抽象类:它是一种特殊的,不能被实例化的类,只能作为其他类的父类继承使用。使用abstract关键字声明。
接口:它是一种特殊的抽象类,也是一个特殊的类,使用interface声明。
区别:

  1. 抽象类的操作通过继承关键字extends实现,而接口的使用是通过implements关键字来实现。
  2. 抽象类中可以有成员方法的实现代码,而接口中不可以有成员方法的实现代码。
  3. 抽象类中可以有构造方法,但是接口没有构造方法。
  4. 抽象类的方法可以通过private、protected、public关键字修饰(抽象方法不能是private),而接口中的方法只能使用public关键字修饰。
  5. 一个类只能继承于一个抽象类,而一个类可以同时实现多个接口。

九.什么是构造函数,什么是析构函数,作用是什么?

构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。php中使用__construct()声明构造方法,并且只能声明一个。

析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是php5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。

十.如何重载父类的方法

重载,即覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也叫方法的重写。

覆盖父类方法的关键是在子类中创建于父类中相同的方法包括方法的名称、参数和返回值类型。php中只要求方法的名称相同即可。

十一.常用的魔术方法有哪些?

php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。

__construct() 实例化类时自动调用。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。

十二.$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?

$this  当前对象,在当前类中使用,使用->调用属性和方法。
self   当前类,也在当前类中使用,不过需要使用::调用。
parent 当前类的父类,在类中使用。

十三.类中如何定义常量、如何类中调用常量、如何在类外调用常量。

类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。
定义常量使用关键字const。
例如:const PI = 3.1415326;
无论是类内还是类外,常量不需要实例化对象,访问常量的格式都是类名加作用域操作符号(双冒号)来调用。
例如:类名 :: 类常量名;

十四.__autoload()方法的工作原理是什么?

使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后
就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
使用自动载入的魔术函数可以不必要写很多个include或者require函数。

十五.PHP7 和 PHP5 的区别,具体多了哪些新特性?

  1. 性能提升了两倍
  2. 结合比较运算符
  3. 标量类型声明
  4. 返回类型声明
  5. try…catch 增加多条件判断,更多 Error 错误可以进行异常处理
  6. 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义
    为什么 PHP7 比 PHP5 性能提升了?
    变量存储字节减小,减少内存占用,提升变量操作速度
    改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
    改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率

十六.Laravel

  1. 服务提供者是什么?
    服务提供者是所有 Laravel 应用程序引导启动的中心, Laravel 的核心服务器、注册服务容器绑定、事件监听、中间件、路由注册以及我们的应用程序都是由服务提供者引导启动的。

  2. IOC 容器是什么?

    IOC(Inversion of Control)译为 「控制反转」,也被叫做「依赖注入」。什么是「控制反转」?对象 A 功能依赖于对象 B,但是控制权由对象 A 来控制,控制权被颠倒,所以叫做「控制反转」,而「依赖注入」是实现 IOC的方法,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

    其作用简单来讲就是利用依赖关系注入的方式,把复杂的应用程序分解为互相合作的对象,从而降低解决问题的复杂度,实现应用程序代码的低耦合、高扩展。
    Laravel 中的服务容器是用于管理类的依赖和执行依赖注入的工具。

  3. Facades 是什么?
    Facades(一种设计模式,通常翻译为外观模式)提供了一个”static”(静态)接口去访问注册到 IOC 容器中的类

    提供了简单、易记的语法,而无需记住必须手动注入或配置的长长的类名。此外,由于对 PHP 动态方法的独特用法,也使测试起来非常容易。

  4. Contract 是什么?
    Contract(契约)是 laravel 定义框架提供的核心服务的接口。Contract 和 Facades 并没有本质意义上的区别,其作用就是使接口低耦合、更简单。

标签:__,面试题,调用,对象,使用,抽象类,php,方法
来源: https://blog.csdn.net/weixin_40172337/article/details/114042897

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有