常用问题1

1. 常用的端口号?

Redis:6379
Memcache:11211
Mysql:3306
Nginx:80
Apache:80
php-fpm:9000
Smtp:465 or 25
Ftp:文件传输协议 21
ssh:安全外壳协议 22

2. memcache或redis雪崩如何解决?

造成原因:

通常,在一个网站里,mysql数据库处理的请求比较少(20%),负载80%,缓存技术处理大多数请求(80%)
如果memcache或redis挂掉,所有请求都会在mysql处理,数据库的处理能力不足会直接宕机。这时候就算重启缓存和mysql也是无济于事的,因为缓存重启后,数据已经丢失,数据请求还是会走mysql,mysql还是会死掉(死循环)

解决方法:

缓存预热
1:先启动缓存,再启动数据库。(但是此时不提供对外服务)
2:通过一个PHP脚本把常用的key写入缓存中
3:开放对外服务【热点数据已经缓存,请求会被缓存处理,减轻mysql压力】

3. Redis持久化的方式?

1:Aof(append only file)
redis执行命令时,会把我们执行的命令通过日志形式进行追加。安全性高,但是影响性能。;

2:Rdb
按照制定规则进行持久化
save 900 1 (900s内1次redis操作 会做一次持久化)
save 300 10 (300s内10次redis操作 会做一次持久化)
save 60 10000 (60s内10000次redis操作 会做一次持久化)
但是可能会存在数据丢失,比如:12:00做过一次持久化,正常的话,12:15会再做持久化,如果12:14缓存死掉,那么14分钟的数据会丢失。不大安全,但是性能比aof好很多

4. 如何获取客户端ip和服务端ip?

客户端:$_SERVER[‘remote_addr’];

服务端:$_SERVER[‘server_addr’];

5. Redis常见的数据类型?

String key->value
Hash 数组 H
Set 集合 S
Sorted set 有序集合 Z
List 列表 队列 I

集合和有序集合的区别:集合和有序集合都有交集和差集。有序集合可以进行排序

6. Redis中常用的命令?

String

set(‘key’,‘val’) 设置一个key
get(‘key’); 获取制定的key的值
incr(‘key’) 把一个key的值自增
decr(‘key’) 把一个key的值自减

集合

sadd(‘key’,‘val’[‘val1’,‘val2’]) 向一个集合中添加一个或多个值
scard(‘key’) 获取集合中成员的个数
smembers(‘key’) 获取集合中所有的成员

有序集合

zadd(‘key’,‘score’,‘val’[‘val1’,‘val2’]) 向一个有序集合中添加一个或多个值,或更新已有成员的分数
zrange(‘key’,‘min’,‘max’) 返回集合中制定区间的成员,0 ,-1则返回所有成员
zrem(‘key’,‘val’) 移除集合中一个成员
zrangeByScore(‘key’,‘min’,‘max’) 返回指定分数区间的成员 分数从低到高
zRevRangeByScore(‘key’,‘min’,‘max’) 返回指定分数区间的成员 分数从高到低

7. MySQL事物?
>概念:是指作为单个逻辑单元执行的一系列操作,要么完全执行,要么完全不执行

四个特性:

原子性:sql语句要么都成功,要么都不成功。把事物当成一个原子操作,不可再分
一致性:执行事物前,数据库是一致性的,执行后,也是一致性的,不会因为执行事务导致不一致
持久性:事物执行对数据库的影响是永久的
隔离性:多个事物互不影响
---------------------
作者:dandan哥
来源:CSDN
原文:https://blog.csdn.net/php_dandan/article/details/85620207
版权声明:本文为博主原创文章,转载请附上博文链接!

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打印复合类型,数组或者对象
---------------------
作者:dandan哥
来源:CSDN
原文:https://blog.csdn.net/php_dandan/article/details/85752609
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/jianmingyuan/p/10760421.html