range

If there were you, the world would be just right

char 与 varchar 区别与查询速度比较 ?

varchar 是变长,char 是定长 ,varchar 更节省空间
char 查找效率要 varchar 型快,因为 varchar 是非定长,必须先查找长度,然后进行数据的提取,比 char 定长类型多了一个步骤,所以效率低一些

写出三种以上MySQL数据库存储引擎的名称

MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎

每个单词首字母大写

ucwords 

用什么方法来加快页面的加载速度?

数据库添加索引,
页面可生成静态,
图片等大文件单独服务器。
使用代码优化工具。

网站速度慢原因 与处理?

1 服务器出口带宽不够用。
2 数据库表结构不合理。
3 数据库查询语句不合理
4 程序代码设计与前端的问题
5 PHP程序大量读写磁盘。

6 尽量使用静态页面。
7 网页上存在大量图片或flash。
9 网页上存在大量JS代码。
10 过多的引用了其他网站内容。
11 减少HTTP请求数
12 样式表放在网页Head部分
13 使用CDN
14 压缩网页元素
15 把JS文件放到网页底部
16 把样式表和JS脚本放到外部文件中

HTTP协议中GET、POST的区别?

GET请求提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
网页的表单通常是用POST来传送。
get安全性非常低,post安全性较高

遍历目录文件

public function tree($dir,$filter){
    $dirs = glob($dir . '/*');
    $dirFiles=[];
    foreach ($dirs as $dir){
        if(is_dir($dir)){
            $res=$this->tree($dir,$filter);
            if(is_array($dirFiles)){
                foreach ($res as $v){
                    $dirFiles[]=$v;
                }
            }
        }else{
            //判断是否是控制器
            if(stristr($dir,$filter)){
                $dirFiles[]=$dir;
            }
        }
    }
    return $dirFiles;
}

对于大流量的网站,您采用什么样的方法来解决访问量问题?

确认服务器硬件是否足够支持当前的流量,
数据库读写分离,
优化数据表,
禁止外部的盗链,
控制大文件的下载,
负载均衡,使用不同主机分流主要流量

如何处理负载,高并发?

1、HTML静态化
    效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。

2、图片服务器分离
    把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛等

3、数据库集群及缓存
    可以从读写分离、主从复制,数据库集群方面来着手。另外尽量减少数据库的访问,可以使用缓存数据库如memcache、redis。

4、负载均衡
    多台服务器分流

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

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

静态化如何实现的?伪静态如何实现?

1、 静态化指的是页面静态化,也即生成实实在在的静态文件,也即不需要查询数据库就可以直接从文件中获取数据,指的是真静态。
实现方式主要有两种:一种是我们在添加信息入库的时候就生成的静态文件,也称为模板替换技术。
一种是用户在访问我们的页面时先判断是否有对应的缓存文件存在,如果存在就读缓存,不存在就读数据库,同时生成缓存文件。

2、伪静态不是真正意义上的静态化,之所以使用伪静态,主要是为了SEO推广,搜索引擎对动态的文件获取难度大,不利于网站的推广。实习原理是基于Apache或Nginx的rewrite机智
主要有两种方式:一种是直接在配置虚拟机的位置配置伪静态,这个每次修改完成后需要重启web服务器。
另一种采用分布式的,可以在网站的根目录上创建.htaccess的文件,在里面配置相应的重写规则来实现伪静态,这种每次重写时不需要重启web服务器,且结构上比较清晰。

PHP5权限控制修饰符

public(公共),private(私用),protected(继承)

php5的 构造函数 和 析构函数

__construct , __destruct(析构方法在PHP中并不是很常用,它属类中可选择的一部分,通常用来完成一些在对象销毁前的清理任务)

oop是什么?

oop是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
1、封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。
2、继承性:就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。PHP只支持单继承,也就是说一个子类只能有一个父类。
3、多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。
易维护,易扩展

如何判断文件可写?

如果是文件,可以通过打开文件(fopen),来测试文件是否可写

PHP的垃圾收集机制是怎样的?

PHP可以自动进行内存管理,清除不再需要的对象。

PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。
每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。
当reference离开生存空间或被设为NULL,计数器减1。
当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

PHP7的新特性?

标量类型声明:PHP 7 中的函数的形参类型声明可以是标量了。
    在 PHP 5 中只能是类名、接口、array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用 string、int、float和 bool 了。 

返回值类型声明:增加了对返回类型声明的支持。
    类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同

NULL 合并运算符:由于日常使用中存在大量同时使用三元表达式和 isset()的情况,NULL 合并运算符使得变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。 

use 加强:从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了 

匿名类:现在支持通过new class 来实例化一个匿名类

常见的 PHP 安全性攻击

SQL注入:用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。
防止:使用 mysql_real_escape_string() 过滤数据 手动检查每一数据是否为正确的数据类型 使用预处理语句并绑定变量 参数化SQL:是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,用@或?来表示参数。

XSS攻击 :跨站点脚本攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(通常JavaScript)。如果你没有过滤就输出数据到另一个web页面,这个脚本将被执行。
防止:为了防止XSS攻击,使用PHP的htmlentities()函数过滤再输出到浏览器。

CSRF:跨站点请求伪造,是指一个页面发出的请求,看起来就像是网站的信任用户,但是是伪造的
防止:一般来说,确保用户来自你的表单,并且匹配每一个你发送出去的表单。有两点一定要记住:对用户会话采用适当的安全措施,例如:给每一个会话更新id和用户使用SSL。生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它。如laravel中的 _token

谈谈你对 mysql 引擎中的 MyISAM与InnoDB的区别理解?

1、 存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

2、 可移植性、备份及恢复
MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
InnoDB:拷贝数据文件、备份 binlog,或者用 mysqldump

3、 事务支持
MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

4、 表锁差异
MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的性能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

5、 表的具体行数
MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。

6、 CURD操作
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。

基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。
另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。
如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。

优化MYSQL数据库的方法。

1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL
2、使用连接(JOIN)来代替子查询
3、使用联合 (UNION) 来代替手动创建的临时表
4、事务处理:
5、锁定表,优化事务处理
6、使用外键,优化锁定表

说说对SQL语句优化有哪些方法?

(3)避免在索引列上使用计算
(5)首先应考虑在 where 及 order by 涉及的列上建立索引。
(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

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

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

做秒杀用什么数据库,怎么实现的?

因为秒杀的一瞬间,并发非常大,如果同时请求数据库,会导致数据库的压力非常大,导致数据库的性能急剧下降,更严重的可能会导致数据库服务器宕机。
这时候一般采用内存高速缓存数据库redis来实现的,redis是非关系型数据库,redis是单线程的,通过redis的队列可以完成秒杀过程。

怎么保证促销商品不会超卖?

range8.cn

简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)

索引就相当于对指定的列进行排序,排序有利于对该列的查询,可以大大增加查询效率

建立索引也是要消耗系统资源,所以索引会降低写操作的效率

主键,唯一,联合都属于索引

主键属于唯一索引,且一个表只能有一个主键,主键列不允许空值

唯一索引可以一个表中可以有多个,而且允许为空,列中的值唯一

多个字段的多条件查询多使用联合索引  

解释MySQL外连接、内连接

Mysql外连接分为左连接(left join....on)和右连接(right join.... on),左连接是以左表作为条件查询关联右表数据,无对应数据则补空,右连接则相反

Mysql内连接(inner join.....on)是做关联查询时,内连接的特性是只显示符合连接条件的记录

什么是锁?

数据库是一个多用户使用的共享资源。
当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。
若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。
加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。
基本锁类型:锁包括行级锁和表级锁

如何通俗地理解三个范式?

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。。

主键、外键和索引的区别?

定义:
    主键:唯一标识一条记录,不能有重复的,不允许为空
    外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值
    索引:该字段没有重复值,但可以有一个空值
作用:
    主键:用来保证数据完整性
    外键:用来和其他表建立联系用的
    索引:是提高查询排序的速度
个数:
    主键:主键只能有一个
    外键:一个表可以有多个外键
    索引:一个表可以有多个唯一索引

Mysql 的存储引擎,myisam和innodb的区别。

MyISAM 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;不支持事务。适合小数据,小并发
innodb是支持事务的存储引擎;适合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发

MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。

导致索引失效的原因有哪些?

1.全值匹配
全值匹配意思就是联立的复合索引的顺序和个数要和检索的条件顺序和个数相同。

2.最佳左前缀法则(重要)
最佳左前缀法则是指,如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列

3.不在索引列上做任何操作(计算、函数(自动或手动)类型转换),会使索引失效转为全表扫描

5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致),减少select * 的使用

6.mysql在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描

7.is null,is not null 也无法使用索引

8.like以通配符开头(’%abc…’)mysql索引会失效变成全表扫描的操作,(%写右边则可以避免索引失效,如果业务实在需要'%abc…%'则可以用覆盖索引避免索引失效)

9.字符串不加单引号索引会失效

10.少用or,用它连接时会索引失效

为什么添加索引会提高查询速度

一句话回答:索引可以将无序内容转换为有序的一个集合(相对),就如同新华字典,如果没有目录,那么查询一个汉字就需要很长时间了。
MySQL 使用的是 Btree 索引,那它是怎么加速检索的呢?
检索中主要耗时在于内存与磁盘的IO耗时,所以加速的关键在于减少IO的次数。

索引有哪几种类型?

主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。
唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。

可以通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯一索引
可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯一组合索引

普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。
可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引

可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引
全文索引:是目前搜索引擎使用的一种关键技术。

可以通过ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引

事务的四大特性(ACID)介绍一下?

1.原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
2.一致性:执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
3.隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
4.持久性:一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响

MyISAM和InnoDB存储引擎使用的锁:

MyISAM采用表级锁(table-level locking)。

InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁

行级锁,表级锁和页级锁对比

行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁 和 排他锁。

特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

表级锁 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。

特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。

从锁的类别上来讲,有共享锁和排他锁。

共享锁: 又叫做读锁。当用户要进行数据的读取时,对数据加上共享锁。共享锁可以同时加上多个。

排他锁: 又叫做写锁。当用户要进行数据的写入时,对数据加上排他锁。排他锁只可以加一个,他和其他的排他锁,共享锁都相斥。

用上面的例子来说就是用户的行为有两种,一种是来看房,多个用户一起看房是可以接受的。一种是真正的入住一晚,在这期间,无论是想入住的还是想看房的都不可以。

锁的粒度取决于具体的存储引擎,InnoDB实现了行级锁,页级锁,表级锁。

他们的加锁开销从大到小,并发能力也是从大到小。

什么是死锁?怎么解决?

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。

redis 和 memache 缓存的区别

1.memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小,redis有部份存在硬盘上,这样能保证数据的持久性。
2.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
4.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
我个人认为最本质的不同是Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存

Redis 数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

redis消息队列先进先出需要注意什么?

通常使用一个list来实现队列操作,这样有一个小限制,所有的任务统一都是先进先出,如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念,我们就可以优先处理高级别的任务,实现方式有以下几种方式:
1)单一列表实现:队列正常的操作是 左进右出(lpush,rpop)为了先处理高优先级任务,在遇到高级别任务时,可以直接插队,直接放入队列头部(rpush),这样,从队列头部(右侧)获取任务时,取到的就是高优先级的任务(rpop)
2)使用两个队列,一个普通队列,一个高级队列,针对任务的级别放入不同的队列,获取任务时也很简单,redis的 brpop a命令可以按顺序从多个队列中取值,brpop 会按照给出的 key 顺序查看,并在找到的第一个非空 list 的尾部弹出一个元素,redis> BRPOP list1 list2 0
list1 做为高优先级任务队列
list2 做为普通任务队列

这样就实现了先处理高优先级任务,当没有高优先级任务时,就去获取普通任务
方式1  最简单,但实际应用比较局限,方式3可以实现复杂优先级,但实现比较复杂,不利于维护
方式2  是推荐用法,实际应用最为合适

Redis如何防止高并发?

服务器角度,利用setnx变向实现锁机制。

UNION与UNION ALL的区别?

如果使用 UNION,会过滤掉重复的记录行
如果使用 UNION ALL,会合并重复的记录行

Reids的特点

整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。
因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。

Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

使用redis有哪些好处?

 (1) 速度快,因为数据存在内存中
 (2) 支持丰富数据类型,支持string,list,set,sorted set,hash 
 (3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
 (4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

redis相比memcached有哪些优势?

 (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 
 (2) redis可以持久化其数据

Redis 如何实现持久化?

RDB 持久化,将 Redis 在内存中的的状态保存到硬盘中,相当于备份数据库状态。

AOF 持久化(Append-Only-File),AOF 持久化是通过保存 Redis 服务器锁执行的写状态来记录数据库的。
相当于备份数据库接收到的命令,所有被写入 AOF 的命令都是以 Redis 的协议格式来保存的。

集群,分布式区别?

集群是个物理形态,分布式是个工作方式。
1.分布式:一个业务分拆多个子业务,部署在不同的服务器上
2.集群:同一个业务,部署在多个服务器上

什么是微服务?

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。
系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

如何解决 PHP 内存溢出问题

增大 PHP 脚本的内存分配
变量引用之后及时销毁
将数据分批处理

Cookie 和 Session 的区别和关系

Cookie 在客户端(浏览器),Session 在服务器端。
Session 比 Cookie 安全性更高。
单个 Cookie 保存的数据不能超过 4K。
Session 是基于 Cookie,如果浏览器禁用了 Cookie,Session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 Session ID)。

什么是 SQL 注入?如何防范?

防范措施:
保持对用户数据的过滤
不要使用动态拼装 SQL
增加输入验证,比如验证码
对隐私数据加密,禁止明文存储

Http 和 Https的区别

第一:http是超文本传输协议,信息是明文传输,https是具有安全性的ssl加密传输协议
第二:http和https使用的是完全不同的连接方式,端口也不一样,前者80 或者443
第三:http连接很简单,是无状态的。https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议。

说说下面这些这些协议的全称和中文解释SMTP、POP3、HTTP、FTP、DNS

Smtp简单邮件协议

Pop3邮局协议

http超文本传输协议

ftp文件传送协议

Dns域名解析协议

引用和拷贝有什么区别?

拷贝是将原来的变量内容复制下来,拷贝后的变量与原来的变量使用各自的内存,互不干扰。

引用相当于是变量的别名,其实就是用不同的名字访问同一个变量内容。当改变其中一个变量的值时,另一个也跟着发生变化。

写个函数来解决多线程同时读写一个文件的问题。

flock($hander,LOCK_EX); 这个可是内置函数啊

SESSION与COOKIE的区别?

(1)存储位置:session存储于服务器,cookie存储于浏览器
(2)安全性:session安全性比cookie高
(3)session为‘会话服务’,在使用时需要开启服务,cookie不需要开启,可以直接用

堆和栈的区别?

栈是编译期间就分配好的内存空间

堆是程序运行期间动态分配的内存空间

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

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

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

类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。
定义常量使用关键字const.
例如:const PI = 3.1415326;

无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,
访问常量的格式都是类名加作用域操作符号(双冒号)来调用。
即:类名 :: 类常量名;

redis中的 ttl 命令 ?

-1表示未设置过期时间, 
-2表示不存在
其余的以秒为单位表示剩余过期时间,时间到0之后,自动从缓存清除出去

PHP7比php5快原因总结:?

1、存储变量的结构体变小,尽量使结构体里成员共用内存空间,减少引用,这样内存占用降低,变量的操作速度得到提升。

2、字符串结构体的改变,字符串信息和数据本身原来是分成两个独立内存块存放,php7尽量将它们存入同一块内存,提升了cpu缓存命中率。

3、数组结构的改变,数组元素和hash映射表在php5中会存入多个内存块,php7尽量将它们分配在同一块内存里,降低了内存占用、提升了cpu缓存命中率。

4、改进了函数的调用机制,通过对参数传递环节的优化,减少一些指令操作,提高了执行效率。

添加新评论 »

在这里输入你的评论...