1. 什么是面向对象?主要特征是什么?
面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。
主要特征:封装、继承、多态。
2. Session和Cookie的区别是什么?请从协议、产生的原因与作用说明。
HTTP是无状态协议,每次请求都是相互独立、毫无关联的,协议不要求客户端或服务器记录相关请求的信息。
Session记录再服务器,Cookie记录再客户端。
Session比较安全,Cookie用某些手段可以修改。
Session是依赖于Cookie来传递。
3. MyISAM与InnoDB的基本区别是什么?索引是什么?
MyISAM不支持事务、表锁;易产生碎片,要经常优化;读写速度快。
InnoDB支持事务、行锁;有崩溃恢复能力;读写速度比MyISAM慢。
索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本。
4. isset()与empty()的区别是什么?
isset是判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回false。
empty是判断变量是否为空、false、0等,是则返回true,否则返回false,只能传入一个变量。
5. 请说明PHP中传值和传引用的区别,分别再什么情况使用比较合适?
传值:函数范围内对值的改变不会影响到函数外的值。
传引用:函数范围内对值的改变会影响到函数外的值。
优缺点:传值需要复制值,对于大型字符串或对象,这将会是一个代价很大的操作,会造成占用过多的内存。传引用则不需要复制值,对性能提高很有好处。
6. PHP如何实现自动加载类?
__autoload() 函数也能自动加载类和接口,但更建议使用spl_autoload_register() 函数。
7. php读取文件内容的几种方法和函数?
fopen();fread();
file_get_contents();//打开读取一次完成
8. 你所知道的设计模式有哪些?挑一两个说明。
工厂模式、策略模式、单例模式。
9. echo(),print(),print_r()的区别?
echo和print是PHP语句, print_r是函数。
echo只能打印简单类型变量的值(如int,string),可以连续打印多个,使用逗号间隔,无返回值。
print只能打印一个简单类型变量的值(如int,string),有返回值1。
print_r()可以打印出复杂类型变量的值(如数组,对象)。
10. 数据库索引有几类,分别是什么?什么时候该用索引?
普通索引、主键索引、唯一索引。
并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。
11. PHP字符串中单引号与双引号的区别?
单引号不能解释变量,而双引号可以解释变量。
单引号不能转义字符,在双引号中可以转义字符。
12. 模板引擎的目的是什么? 你用过哪些模板引擎?
模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
使用过laravel的Blade模版引擎。
13. 如何防止SQL注入?
- 开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置
- 执行sql语句时使用addslashes进行sql语句转换
- Sql语句书写尽量不要省略小引号和单引号
- 过滤掉sql语句中的一些关键字:update、insert、delete、select、*
- 提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
- Php配置文件中设置register_globals为off,关闭全局变量注册
- 控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。