又是跳槽季,跳槽就有面试,面试难免会问一些理论问题,前面面试了几家,做了一些面试题,记住了一部分,整理了一下:
1.cookie 和session区别
session存在服务器,cookie存在浏览器;session安全性比cookie高;session为会话服务,在使用时需要开启服务,cookie不需要开启,可以直接使用。
2.redis和memcached区别
redis 系统库有个快照,即突然断电,数据还会存在,而memached 就没了
memcached 是简单的键值对,Key-Value, redis 支持的存储方式很多,应用场景很多
redis 性能比memached 要高
3.myisam和innodb区别
MyISAM 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发
innodb是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。
4.require和include区别
报错的时候,include报严重警告,还是会继续执行后面程序,require报致命错误,不会继续执行。
5.优化网站
(1).确认服务器是否能支撑当前访问量。
(2).优化数据库访问。
(3).禁止外部访问链接(盗链), 比如图片盗链。
(4).控制文件下载。
(5).使用不同主机分流。
(6).使用浏览统计软件,了解访问量,有针对性的进行优化。
6.数据库索引
是一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似于生活中书的目录,不需要查询整本书的内容就可以找到想要的数据,索引可以是唯一的,创建索引允许指定单个列或者是多个列,缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
7.什么是构造函数,什么是析构函数,作用是什么?
构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。Php中使用__construct()声明构造方法,并且只能声明一个。析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。
8.说说对SQL语句优化有哪些方法?
(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。
(3) 避免在索引列上使用计算
(4)避免在索引列上使用IS NULL和IS NOT NULL
(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
9.char和varchar的区别?
char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.
(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
10.常见关系型数据库
oracle,sql server,mysql,db2,sybase,access
11.什么是SQL注入?
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。
12.ThinkPHP如何防止SQL注入
(1)查询条件尽量使用数组方式,这是更为安全的方式;
(2)如果不得已必须使用字符串查询条件,使用预处理机制;
(3)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了)
(4)使用自动验证和自动完成机制进行针对应用的自定义过滤;
(5)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入。
13.事务
事务是一系列的操作,是数据库应用的基本逻辑单位,事务的特性:原子性,要么全部被执行,要么全部不被执行;一致性和可串性:事务的执行使数据库从一种正确状态换成另一种正确状态。隔离性:在事务正确提交前,不允许把该事务的任何数据提交给任何其他事务。持久性:事务提交成功后,其结果将永远保存在数据库中。
14.程序开发中,如何提高程序运行效率
优化sql语句,查询中尽量不使用select*,用哪个字段查哪个字段;少用子查询,可以用表连接代替;少用模糊查询;数据表创建索引;对经常用到的数据生成缓存。
15.mvc哪三层,有什么优点
M:模型层,V:视图层,C:控制器
由控制器调用模型处理数据,然后将数据映射到视图层进行显示,优点是可以实现代码重用性,避免代码冗余,M和V实现代码分离,从而使同一个程序可以使用不同的表现形式。
16.print,echo,print_r有什么区别
echo和print都可输出,echo不是函数,没有返回值,而print是一个函数,有返回值,如果只是输出,echo会更快,而print_r通常用于打印变量相关的信息,一般在调试的时候用。
print是打印字符串
prin_r打印复合类型,数组或者对象