PHP是支持创建动态交互web应用程序的服务器端脚本语言。
1.PHP语言的优势?
(1)开源。可免费下载(2)扩平台,PHP支持多个操作系统(3)PHP包含许多内置函数已创建动态网站。使用户能快速执行任务,并减少手工编码。(3)支持许多数据库(4)支持文档(5)支持扩展(6)高性能:速度快,减少代码执行时间,优化并改进代码质量。
2.PHP应用领域:社交网络、项目管理、电子商务、内容管理系统、博客或在线社区
3. 写出 php 的 public、protected、private 三种访问控制模式的区别(新浪网技术部)
public:公有,任何地方都可以访问
protected:继承,只能在本类或子类中访问,在其它地方不允许访问
private:私有,只能在本类中访问,在其他地方不允许访问
访问修饰符:
修饰符 当前类 同包 子类 其他包
public ok ok ok ok
protected ok ok ok no
default ok ok no no
private ok no no no
4.面向对象编程四大基本特性:
面向对象, 概括地说, 就是把问题抽象为对象, 设置属性(数据) , 指定事件或处理方式(代码) 来达到目的, 强调从问题域的概念到软件程序和界面的直接映射。
抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类。对类进行实例化得到对象。
封装:封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等)
继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。
多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。
5.面向对象编程优势
(1)易于理解,维护:万事万物皆对象,所有的对象被赋予属性和方法,使人们的编程与实际的世界更加接近,结果编程就更加富有人性化。对象有良好的封装性,无需知道内部细节。
(2)代码重用,开发效率提高。类是作为一个独立实体而存在的,可以方便提供给其他程序使用。
(3)可扩展性:由于继承、多态等特性,使得很容易在原先的功能上做扩展和改造。这些特性为我们设计出高内聚、低耦合的系统结构提供了便捷。
6.面向对象编程缺点
(1)整体代码量增大
(2)性能损耗:面向对象编程的程序通常会比面向过程编程慢,因为有许多多余数据结构和指令需要执行。
(3)时间成本:在面向对象编程之前需要花很大的经历去规划和设计类。
(4)并不能解决所有场景问题:面向对象编程并不能解决所有问题,那些比较适合用面向过程编程解决的场景,例如关注的是事件和行为比较适合。
7. 接口和抽象类的区别是什么?
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类是通过关键字abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();
接口是通过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法可以不写关键字 public,接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用 extends,子类实现接口使用 implements。
8.PHP设计模式:工厂模式,单元素模式,观察者模式,命令链模式,策略模式
工厂模式:
- When:当你发现你需要搜集很多信息来创建对象时使用工厂模式
- Why:工厂帮助我们把对象创建的逻辑放在同一个地方。同样也可以打破依赖,促进松散耦合和依赖注入,让测试更方便。
9.final finally finalize区别
1.final:如果一个类被final修饰,意味着该类不能派生出新的子类,不能作为父类被继承。因此一个类不能被声明为abstract,又被声明为final。将变量或方法声明为final。可以保证他们在使用的时候不被改变。其初始化可以在两个地方:一是其定义的地方,也就是在final变量在定义的时候就对其赋值;二是在构造函数中。这两个地方只能选其中的一个,要么在定义的时候给值,要么在构造函数中给值。被声明为final的方法也只能使用,不能重写。
2.finally:在异常处理的时候,提供finally块来执行任何的清除操作。如果抛出一个异常,那么相匹配的catch字句就会执行,然后控制就会进入finally块,前提是有finally块。
3.finalize:finalize是方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是在垃圾收集器确认一个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此,所有的类都继承了它。子类覆盖finalize()方法已整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
10、描述cookie跟session的区别
cookie 和session 的区别:
(1)、cookie数据存放在客户的浏览器上,session数据放在服务器上。
(2)、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
(3)、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
(4)、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
(5)、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
11.echo、print_r、print、var_dump之间的区别* echo、print是php语句,var_dump和print_r是函数
* echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用
* print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如int,string),如果字符串显示成功则返回true,否则返回false
* print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r输出布尔值和NULL的结果没有意义,因为都是打印"\n",因此var_dump()函数更适合调试
* var_dump() 判断一个变量的类型和长度,并输出变量的数值
12.方法的重载和重写
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了,而且如果子类的方法名和参数类型和个数都和父类相同,那么子类的返回值类型必须和父类的相同;
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载。Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回值类型可以相同也可以不同。
13.静态的成员变量与非静态的成员变量的区别:
1. 作用上的区别:
1. 静态的成员变量的作用共享一个 数据给所有的对象使用。
2. 非 静态的成员变量的作用是描述一类事物的公共属性。
2. 数量与存储位置上的区别:
1. 静态成员变量是存储方法 区内存中,而且只会存在一份数据。
2. 非静态的成员变量是存储在堆内存中,有n个对象就有n份数据。
3. 生命周期的区别:
1. 静态的成员变量数据是随着类的加载而存在,随着类文件的消失而消失。
2.非静态的成员数据是随着对象的创建而存在,随着 对象被垃圾回收器回收而消失
14.什么方法来加快页面的加载速度
1,用到服务器资源时在打开,不用时,立即关闭服务器资源。
2,数据库添加索引
3,页面可生成静态
4,图片等大文件单独放在一个服务器
5,能不查询数据库的尽量不去数据取数据,可以放在缓存中。
15.魔术常量
答案:
__LINE__文件中的当前行号。
__FILE__文件的完整路径和文件名。
__FUNCTION__函数名称
__CLASS__类的名称
__METHOD__类的方法名
16.对于大流量网站,采用什么方法解决访问量问题?1,确认服务器的硬件是否足够支持当前的流量
2,优化数据库的访问
3,禁止外部的盗链
4,控制大文件的下载
5,使用不同主机分流主要流量
6,使用流量分析统计软件