一、z-index是什么
z-index属性决定了一个HTML元素的层叠级别。元素层叠级别是相对于元素在Z轴上(与X轴Y轴相对照)的位置而言。一个更高的Z-index值意味着这个元素在叠层顺序中会更靠近顶部
二,使用函数及数组来获取当月第一天及最后一天,比较实用
function getthemonth($date)
{
$firstday = date('Y-m-01', strtotime($date));
$lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
return array($firstday,$lastday);
}
$today = date("Y-m-d");
$day=getthemonth($today);
echo "当月的第一天: ".$day[0]." 当月的最后一天: ".$day[1];
echo "
";
http://www.laruence.com/2018/07/31/3207.html
https://blog.csdn.net/qq_35461287/article/details/79913987
1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是
-128到127
1.BIT[M]
位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1
2.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4
很小的整数。带符号的范围是-128到127。无符号的范围是0到255。
3. BOOL,BOOLEAN
是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。
4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6
小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
5.MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9
中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
6. INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11
普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
7.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20
大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。
注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。
tinyint(1) 和 tinyint(4) 中的1和4并不表示存储长度,只有字段指定zerofill是有用,
如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。
---------------------
char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.
(在检索操作中那些填补出来的空格字符将被去掉)
在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
在MySQL中用来判断是否需要进行对据列类型转换的规则
1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
例外:长度小于4个字符的char数据列不会被转换为varchar类型
1:硬件方面
普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的。主要影响服务器的速度
有:网络-硬盘读写速度-内存大小-cpu处理速度。
2:软件方面
第一个要说的就是数据库,首先要有一个很好的架构,查询尽量不用* 避免相关子查询 给经常查询的添加索引 用排序来取代非顺序存取,如果条件允许 ,一般MySQL服务器最好安装
在Linux操作系统中 。关于apache和nginx在高并发的情况下推荐使用nginx,ginx是Apache服务器不错的替代品。nginx内存消耗少 官方测试能够支撑5万并发连接,在实际生产环境中跑
到2~3万并发连接数。php方面不需要的模块尽量关闭,使用memcached,Memcached 是一个高性能的分布式内存对象缓存系统,不使用数据库直接从内存当中调数据,这样大大提升了速
度,iiS或Apache启用GZIP压缩优化网站,压缩网站内容大大节省网站流量。
第二,禁止外部的盗链。
外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对
于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗链,Apache自
己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能。当
然,伪造refer也可以通过代码来实现盗链,不过目前蓄意伪造refer盗链的还不多,
可以先不去考虑,或者使用非技术手段来解决,比如在图片上增加水印。
第三,控制大文件的下载。
大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗
CPU,使得网站响应能力下降。因此,尽量不要提供超过2M的大文件下载,如果需要
提供,建议将大文件放在另外一台服务器上。
第四,使用不同主机分流主要流量
将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用
流量大,那么使用FeedBurner或者FeedSky等服务将RSS输出放在其他主机上,这
样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了
第五,使用不同主机分流主要流量
将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服务将RSS输出放在其他主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了。
第六,使用流量分析统计软件。
在网站上安装一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化,因此,解决流量问题还需要进行精确的统计分析才可以。比如:Google Analytics(Google分析)。
高并发和高负载的约束条件:硬件、部署、操作系统、Web 服务器、PHP、MySQL、测试
部署:服务器分离、数据库集群和库表散列、镜像、负载均衡
负载均衡分类: 1)、DNS轮循 2)代理服务器负载均衡 3)地址转换网关负载均衡 4)NAT负载均衡 5)反向代理负载均衡 6)混合型负载均衡
部署方案1:
适用范围:静态内容为主体的网站和应用系统;对系统安全要求较高的网站和应用系统。
Main Server:主服务器
承载程序的主体运行压力,处理网站或应用系统中的动态请求;
将静态页面推送至多个发布服务器;
将附件文件推送至文件服务器;
安全要求较高,以静态为主的网站,可将服务器置于内网屏蔽外网的访问。
DB Server:数据库服务器
承载数据库读写压力;
只与主服务器进行数据量交换,屏蔽外网访问。
File/Video Server:文件/视频服务器
承载系统中占用系统资源和带宽资源较大的数据流;
作为大附件的存储和读写仓库;
作为视频服务器将具备视频自动处理能力。
发布服务器组:
只负责静态页面的发布,承载绝大多数的Web请求;
通过Nginx进行负载均衡部署。
部署方案2:
适用范围:以动态交互内容为主体的网站或应用系统;负载压力较大,且预算比较充足的网站或应用系统;
Web服务器组:
Web服务无主从关系,属平行冗余设计;
通过前端负载均衡设备或Nginx反向代理实现负载均衡;
划分专用文件服务器/视频服务器有效分离轻/重总线;
每台Web服务器可通过DEC可实现连接所有数据库,同时划分主从。
数据库服务器组:
相对均衡的承载数据库读写压力;
通过数据库物理文件的映射实现多数据库的数据同步。
共享磁盘/磁盘阵列
将用于数据物理文件的统一读写
用于大型附件的存储仓库
通过自身物理磁盘的均衡和冗余,确保整体系统的IO效率和数据安全;
方案特性:
通过前端负载均衡,合理分配Web压力;
通过文件/视频服务器与常规Web服务器的分离,合理分配轻重数据流;
通过数据库服务器组,合理分配数据库IO压力;
每台Web服务器通常只连接一台数据库服务器,通过DEC的心跳检测,可在极短时间内自动切换至冗余数据库服务器;
磁盘阵列的引入,大幅提升系统IO效率的同时,极大增强了数据安全性。
Web服务器:
Web服务器很大一部分资源占用来自于处理Web请求,通常情况下这也就是Apache产生的压力,在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx (“engine x”) 是俄罗斯人编写的一款高性能的 HTTP 和反向代理服务器。在国内,已经有新浪、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、 频道使用 Nginx 服务器。
Nginx的优势:
高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
内存消耗少:在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
策略:相对于老牌的Apache,我们选择Lighttpd和Nginx这些具有更小的资源占用率和更高的负载能力的web服务器。
Mysql:
MySQL本身具备了很强的负载能力,MySQL优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解。大家都知道数据库工作就是大量的、 短时的查询和读写,除了程序开发时需要注意建立索引、提高查询效率等软件开发技巧之外,从硬件设施的角度影响MySQL执行效率最主要来自于磁盘搜索、磁盘IO水平、CPU周期、内存带宽。
根据服务器上的硬件和软件条件进行MySQl优化。MySQL优化的核心在于系统资源的分配,这不等于无限制的给MySQL分配更多的资源。在MySQL配置文件中我们介绍几个最值得关注的参数:
改变索引缓冲区长度(key_buffer)
改变表长(read_buffer_size)
设定打开表的数目的最大值(table_cache)
对缓长查询设定一个时间限制(long_query_time)
如果条件允许 ,一般MySQL服务器最好安装在Linux操作系统中,而不是安装在FreeBSD中。
策略: MySQL优化需要根据业务系统的数据库读写特性和服务器硬件配置,制定不同的优化方案,并且可以根据需要部署MySQL的主从结构。
PHP:
1、加载尽可能少的模块;
2、如果是在windows平台下,尽可能使用IIS或者Nginx来替代我们平常用的Apache;
3、安装加速器(都是通过缓存php代码预编译的结果和数据库结果来提高php代码的执行速度)
eAccelerator,eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。
Apc:Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。
memcache:memcache是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。主要机制是通过在内存里维护一个统 一的巨大的hash表,Memcache能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等
Xcache:国人开发的缓存器,
策略: 为PHP安装加速器。
代理服务器(缓存服务器):
Squid Cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理网。Squid主要设计用于在Unix一类系统运行。
策略:安装Squid 反向代理服务器,能够大幅度提高服务器效率。
压力测试:压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。
压力测试工具:webbench,ApacheBench等
漏洞测试:在我们的系统中漏洞主要包括:sql注入漏洞,xss跨站脚本攻击等。安全方面还包括系统软件,如操作系统漏洞,mysql、apache等的漏洞,一般可以通过升级来解决。
漏洞测试工具:Acunetix Web Vulnerability Scanner
No related content found.
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的。信息错误又要重新填写!
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
当用户填写完一条信息后,该信息会自动向服务器提交,然后服务器响应客户端,在此过程中,用户依然在填写表格的信息,即向服务器请求多次,节省了用户的时间,提高了用户的体验。
同步请求:
客户端请求(等待)->服务端处理->响应->页面载入
(缺少对象:XMLhttpRequest)
这时候如果有错误,只能再次发送请求,再次等待
异步请求:
比如当你填写邮箱地址的时候,页面当时就把邮箱地址发送到了服务器(也就是页面发送了一个请求),服务器做处理和响应,得到你的邮箱地址填写重复了,把响应结果发给页面,在这个过程中你仍然可以填写其他内容,这时候服务器会提示你有重复的邮箱地址,在页面上的表现只是邮箱地址旁别加了一行字或者把整个文本框标红,并没有重新刷你的页面,所有的填写错误会实时的显示出来,你也会实时的更正。这个过程中,你会有整个页面的刷新,也不会有整个页面的提交和等待,最后提交,一切都会搞定的
总结:页面上的操作和服务器端的操作互相之间不会造成阻塞
====一道面试题=建立异步请求过程的4个步骤:============
a:new一个XHR对象
b:调用open方法
c:send一些数据
d:对过程进行监听,来知道服务器是不是正确地做出了响应,接着可以做一些事情
https://www.jianshu.com/p/2633fc36b57a
参考链接:http://www.cnblogs.com/liuqd001/p/9401044.html
解决方法:
使用php的内库libbcmath(自 PHP 4.0.4,libbcmath 随同 PHP 一起发布。该扩展不需要任何外部的库)
$a = bcdiv(100, 100, 2); //除法
那么$a = 1.00;
bcadd — 2个任意精度数字的加法计算
bcsub — 2个任意精度数字的减法计算
bcdiv — 2个任意精度的数字除法计算
bcmul — 2个任意精度数字乘法计算
bcmod — 对一个任意精度数字取模
bccomp — 比较两个任意精度的数字
bcpow — 任意精度数字的乘方
bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus
bcscale — 设置所有bc数学函数的默认小数点保留位数
bcsqrt — 任意精度数字的二次方根
十mysql中订单量大发现索引比较慢如何优化索引
https://www.jb51.net/article/136000.htm
https://www.cnblogs.com/victor2302/p/6073821.html
MySQL索引使用:字段为varchar类型时,条件要使用”包起来,才能正常走索引
表user 里的id是BigInt类型,order表里关联到user表的id误建成userId varchar类型了,在ibatis上查询时,直接传入id Long类型,SQL查询非常慢,即使建立了userId索引,于是改成String 类型的userId去查询,SQL立马变的很快了。
通过explain sql可看下SQL是否走了索引,很快对比出来
原因:字段类型不同造成的隐式转换,导致索引失效
http://www.mamicode.com/info-detail-2206023.html
一、写在前面
目前工作中接触到的PHP数组合并方式主要有三种:
1、+操作符
2、array_merge()
3、array_merge_recursive()
它们的区别主要体现在对于相关键名(数字键名、字符串键名)的处理方式,下面本文将以两个实际例子来体现~
二、相同字符串键
$arrFirst = [
"first_key" => 1,
"second_key" => 1,
"third_key" => 1,
];
$arrSecond = [
"first_key" => 2,
"second_key" => 2,
"fourth_key" => 2,
];
//对于重复的字符串键,array_merge后,后面数组的键值会覆盖前面的
echo sprintf("\narray_merge result:\n%s", print_r(array_merge($arrFirst, $arrSecond), true));
//对于重复的字符串键,+操作后,前面数组的键值会覆盖后面的
echo sprintf("\narray + result:\n%s", print_r($arrFirst + $arrSecond, true));
//对于重复的字符串键,array_merge_recursive后,相同键名的键值会被合并到同一数组中(会递归)
echo sprintf("\narray_merge_recursive result:\n%s", print_r(array_merge_recursive($arrFirst, $arrSecond), true));
运行结果:
三、相同数字键
$arrFirst = [
111 => "first",
222 => "first",
"first" //会指定默认的数字键223
];
$arrSecond = [
111 => "second",
333 => "second",
"second" //会指定默认的数字键334
];
//对于重复的数字键,+操作后,前面数组的键值会覆盖后面的,保留之前数字键
echo sprintf("\narray + result:\n%s", print_r($arrFirst + $arrSecond, true));
//对于重复的数字键,array_merge后,重排数字键,不会覆盖
echo sprintf("\narray_merge result:\n%s", print_r(array_merge($arrFirst, $arrSecond), true));
//对于重复的数字键,array_merge_recursive后,重排数字键,不会覆盖
echo sprintf("\narray_merge_recursive result:\n%s", print_r(array_merge_recursive($arrFirst, $arrSecond), true));
运行结果:
四、附:PHP数组基础概述
一、KEY
1、Key只能为Integer或String,可同时存在
2、包含合法整型值的字符串Key会被转化为整型存储,如:’6’的Key会被转化为6存储
3、布尔值Key会被转化为整型存储,true会被转化为1存储,false会被转化为0存储
4、Null会被转化为空串存储
5、如果多个Key值被转化后为相同的值,则只使用最后一个,前面的被覆盖,如:一个数组中依次定义了’1’、true、1的key,则最后只会存储key为1的value,之前的值都被覆盖
6、如果未指定Key,则会被自动设定为之前用过的最大的整型Key+1,最小为0
二、VALUE
1、可以为PHP任意类型(字符串、整形、浮点型、布尔型、对象、数组、NULL、资源类型)
三、其他类型转化为数组类型
1、Integer、String、Float、Boolean、Resource类型转化为数组类型时,会被自动分配Key为0,Value为其原值
2、Object类型转化为数组类型时,成员变量名会作为数组Key,私有属性的Key会加上类名前缀,保护属性的Key会加上’*’前缀
3、Null会被转化为空数组
四、foreach
1、两种形式,foreach(arrasarraskey => value)与foreach(value)与foreach(arr as
value),其中value),其中value是值传递,使用&value是引用传递2、遍历依赖数组内部指针3、遍历结束后,value是引用传递2、遍历依赖数组内部指针3、遍历结束后,value会被保留,为防止在多次foreach时出现问题,可以在一次foreach后unset($value)或使用不同的变量
https://www.cnblogs.com/aiweixiao/p/5766978.html
https://blog.csdn.net/shenpengchao/article/details/52447884
https://www.cnblogs.com/thinksasa/p/3334492.html
https://www.cnblogs.com/zhangweizhong/p/6258797.html
https://blog.csdn.net/weixin_42178492/article/details/81630707
https://blog.csdn.net/lcli2009/article/details/83450502
十九请列举列举php7相比php5新增的特性不少于5条
https://www.cnblogs.com/dong-blog/p/6376907.html
https://www.cnblogs.com/HKUI/p/10051569.html
二十php中假设ide中配置了xdebug调试端口9090,如何配置php.ini中的参数
https://blog.csdn.net/chengjianghao/article/details/80755046https://blog.csdn.net/yinhangbbbbb/article/details/79247331
二十一请列举设计模式不少于5条,并写出原理,和6大设计原则
https://www.cnblogs.com/geek6/p/3951677.html
https://www.cnblogs.com/liliuguang/p/9283384.html
二十二请补全下面单元代码
class Base
Todo//返回绑定类的实例对象
public static function instane(){
//如果不存在实例,则返回实例
if (empty(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
https://www.jb51.net/article/119891.htm
Todo//返回调用对象的类名
public function name1():string{
return get_class($this);
}
二十三请实现一个手写一个完成的php中单链表基类
https://www.cnblogs.com/yulibostu/articles/10144157.html
https://blog.csdn.net/u012658346/article/details/51141288
二十四写一个pdo数据库操作函数,执行条件并返回满足条件的记录总数,以及实现完整的一个操作数据库的增删改查code;
https://blog.csdn.net/wxhzt/article/details/38459879
https://blog.csdn.net/Eyseem/article/details/53941758
二十五yii框架中自带的返回json格式的函数是哪个
$criteria=new CDbCriteria(array( 'order'=>'id asc', )); $count = Grade::model()->count($criteria); $model=Grade::model()->findAll($criteria); //$arr=array(array('id'=>1,'title'=>'高一'),array('id'=>1,'title'=>'高三')); $data2=CJSON::encode($model); $data='{'.'"total":'.$count.','.'"rows":'.$data2.'}'; echo $data;
二十六请写出yii框架中如何实现重定向跳转页面
二十七请写出yii中常用的验证rule()
https://blog.csdn.net/u010010725/article/details/51099326
1.DNS域名解析 2.建立TCP连接 3.发送HTTP请求 4.服务器处理请求 5.返回响应结果 6.关闭TCP连接 7.浏览器解析渲染页面
https://www.cnblogs.com/xsilence/p/6014567.html
https://www.jb51.net/article/78096.htm
https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/83032578
https://blog.csdn.net/zhaoliang831214/article/details/51333831
https://www.cnblogs.com/work115/p/5620272.html
三十二Linux下使用那些命令查找进程,杀死进程,启动进程
https://www.cnblogs.com/lcword/p/6046261.html
三十三,php本身不支持多线程,可以用哪些方式来实现
1. curl_multi多线程请求URL
2. pcntl_fork创建子进程
3. multi-threading pthreads扩展
4. swoole_client的异步模式
https://www.jianshu.com/p/d83d60feb17e
三十四如何实现sso单点登录,实现的方式有哪些
https://www.cnblogs.com/wxj-106/p/8097880.html
三十五
https://www.cnblogs.com/457248499-qq-com/p/7403177.html
1. Include 与 require的区别,require和require_once的效率哪个高?
PHP在遇到include时就解释一次,如果页面中出现10次include,php就解释10次,而php遇到require时只解释一次,即使页面出现多次require也只解释一次,因此require的执行表率比include高。
Php使用require包含文件时将被包含的文件当成当前文件的一个组成部分,如果被包含的文件中有语法错误或者被包含的文件不存在,则php脚本将不再执行,并提示错误。
Php使用include包含文件时相当于指定了这个文件的路径,当被包含的文件有语法错误或者被包含的文件不存在时给出警告,不影响本身脚本的运行。
Include在包含文件时可以判断文件是否包含,而require则不管任何情况都包含进来。
Require的效率比require_once的效率更高,因为require_once在包含文件时要进行判断文件是否已经被包含。
2. Cookie和session的区别,禁止了cookie后session能正常使用吗?session的缺点是什么?session在服务器端是存在哪里的?是共有的还是私有的?
COOKIE保存在客户端,用户通过手段可以进行修改,不安全,单个cookie允许的最大值是3k。而SESSION保存在服务器端,相对比较安全,大小没有限制。禁用了cookie之session不能正常使用。
Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。
Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。
Session文件是公有的。
3. 怎么防止sql注入?
1、过滤掉一些常见的数据库操作关键字:select,insert,update,delete,and,*等
或者通过系统函数:addslashes(需要被过滤的内容)来进行过滤。
2、在PHP配置文件中
Register_globals=off;设置为关闭状态 //作用将注册全局变量关闭。
比如:接收POST表单的值使用$_POST['user'],如果将register_globals=on;直接使用$user可以接收表单的值。
3、SQL语句书写的时候尽量不要省略小引号(tab键上面那个)和单引号
4、提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的
5、对于常用的方法加以封装,避免直接暴漏SQL语句
6、开启PHP安全模式
Safe_mode=on;
7、打开magic_quotes_gpc来防止SQL注入
Magic_quotes_gpc=off;默认是关闭的,它打开后将自动把用户提交的sql语句的查询进行转换,把'转为\',这对防止sql注入有重大作用。
因此开启:magic_quotes_gpc=on;
8、控制错误信息
关闭错误提示信息,将错误信息写到系统日志。
9、使用mysqli或pdo预处理。
4. 数据库索引有几类,分别是什么?什么时候该用索引
普通索引、主键索引、唯一索引
并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。
5. 引用传值和非引用传值的区别,什么时候该用引用传值?什么时候该用非引用传值?
按值传递:函数范围内对值的改变在函数外都会被忽略。
按引用传递:函数范围内对值的任何改变在函数外也将反应出这些修改。
按值传递时,php必须复制值,如果操作的是大型的对象和字符串,这将是一个代价很大的操作。按引用传递不需要复制值,因此对性能的提高有好处。
当需要在函数内改变源变量的值时用引用传递,如果不想改变原变量的值用传值。
6. 写几个魔术方法并说明作用?
__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方法
__get()当获取未定义变量的值时会自动调用的方法
__construct()构造方法,实例化类时自动调用的方法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用unset()时自动调用的方法
__isset()当对一个未定义变量调用isset()方法时自动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法
7. $_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什么?
它们都是PHP预定义变量。
$_REQUEST用来获取post或get方式提交的值
$_POST用来获取post方式提交的值
$_GET用来获取get方式提交的值
$_COOKIE用来获取cookie存储的值
$_SESSION用来获取session存储的值
$_FILE用来获取上传文件表单的值
8. 数组中下标最好是什么类型的,为什么?
数组的下标最好是数字类型的,数字类型的处理速度快。
9. ++i和i++哪一个效率高,为什么?
++i效率比i++的效率更高,因为++i少了一个返回i的过程。
10.magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?
Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在'之前加\
Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。
11.Echo()、print()、print_r()的区别?
Echo() 是PHP语法,可以输出多个值,不能输出数组。
Print() 是php的语言结构,可以输出单个简单类型的变量值。
Print_r() 是php函数,可以打印出复杂类型变量的值,如数组,对象。
12.谈谈你对Mvc的认识
MVC是一种设计模式,强制使输入、处理、输出分开,MVC的三个核心部分:M模型,V视图,C控制器。
视图就是用户看到并与之交互的界面。
模型就是程序的数据业务规则。
控制器接收用户的数组调用模型和视图去完成用户需求。
使用MVC的优点:低耦合、高重用性、较低的生命周期成本、快速开发部署、可维护性、可扩展性,有利于软件工程化管理。
MVC的缺点:没有明确的定义,完全理解并不容易。小型项目不适合用MVC。
13.框架中什么是单一入口和多入口,单一入口的优缺点
多入口就是通过访问不同的文件来完成用户请求。
单一入口只web程序所有的请求都指向一个脚本文件的。
单一入口更容易控制权限,方便对http请求可以进行安全性检查。
缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。
14.打印一个用‘.’链接的字符串时候,还可以用什么代替‘.’链接效率更高些?
可以用,代替.,效率更高。
15.提示类型200、404、502是什么意思?
200是请求成功,404是文件未找到,502是服务器内部错误。
16.编写一个自定义函数提取这段路径的的后缀名。
“Www/hello/test.php.html?a=3&b=4”
Function geturltype($url){
$info=parse_url($url);
Return end(explode('.',$info['path']));
}
17.你对Memcach的理解,优点有哪些?
Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。
Memcache的优点:稳定、配置简单、多机分布式存储、速度快
三十六简述一下svn与git的优缺点
https://www.cnblogs.com/457248499-qq-com/p/7403177.html
$str = file_get_contents('weixinname.txt');//将整个文件内容读入到一个字符串中
$str_encoding = mb_convert_encoding($str, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');//转换字符集(编码)
$arr = explode("\r\n", $str_encoding);//转换成数组
//去除值中的空格
foreach ($arr as &$row) {
$row = trim($row);
}
unset($row);
//得到后的数组
var_dump($arr);
array array_merge ( array array1[,arrayarray1[,array… ] )
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
计算数组的交集
array array_intersect ( array array1,arrayarray1,arrayarray2 [, array $ … ] )
返回两个多多个数组的交集
差集
array array_diff ( array array1,arrayarray1,arrayarray2 [, array $… ] )
对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值。