面试题6

一.sort  asort ksort 有什么区别, 分别在什么情况下使用?

https://blog.csdn.net/junming4/article/details/53292122

都是对PHP中的数组进行排序,如果成功返回true , 失败返回false

sort:用于对数组的值从低到高进行排序, 下标重新编号,从0开始

  ----下标无关紧要时使用

asort:用于对数组的值从低到高进行排序并保持索引关系,下标不变

  -----下标重要

ksort:对数组的索引进行排序,对应的值不变

    ------数组顺序按key排序

 

二.传值和传引用的区别

传值: 只是把值赋给变量

    对变量发生更改,值不会变

 

传引用: 把变量地址传给变量(共享)

    对变量的值发生更改,值会发生变化

三.Smarty优缺点

1. 相对于其他模板,速度快

2. 缓存技术:cache

3. 插件

4. 实现前后端分离,便于代码维护,二次开发

 

四.常见端口号

3306: MySQL

8080: Apache

11211: memcache

6379: redis

27017: mongodb

 

五.get post 区别

post比get传输量大,且相对安全

1、get是从服务器上获取数据,post是向服务器传送数据。
2、在客户端, get方式在通过URL提交数据,数据在URL中可以看到;post方式,数据放置在HTML HEADER内提交
4、get方式提交的数据最多只能有1024字节,而post则没有此限制
5、安全性问题。正如在2中提到,使用get的时候,参数会显示在地址栏上,而 post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get ;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好

GET产生一个TCP数据包;POST产生两个TCP数据包。

GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)

GET能被缓存,POST不能缓存 。

GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。

GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。

GET和POST本质上就是TCP链接,并无差别。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

六.session  cookie 区别

session: 存在服务器上

cookie: 存在客户端

关闭cookie后, session 能正常使用吗>

如何修改session的生存时间

 

七.事务

一组有序的数据库操作

1.四大特征

原子性

隔离性

一致性

持久性

 

2.面向对象的特征

封装,继承,多态,抽象

 

八.打印昨天的时间

date('Y-m-d H:i:s' , time()-60*60*24)

date('Y-m-d H:i:s' ,strtotime("-1 day"))

 

九. echo print print_t 区别

 

echo 输出一个或者多个字符串 

echo 不是一个函数

echo 没有返回值

 

print 输出字符串 不是函数, 返回值总是1 

print_r 打印关于变量的易于理解的信息 , 返回值是布尔

 

printf 输出格式化字符串 返回输出字符串的长度

 

十. HTML PHP 分离模板

Smarty, Dwoo, tinyButStrong Templete Lite Savant, phemplate XTemplate

 

十一.版本控制工具

VSS适合团队whends           CVS 适合小团队            SVN CVS升级版, 

 

十二. 优化数据库

1.创建索引

2.hash表分区存储

3.尽量不写子查询

分割表

4.建立合理数据库,合理运用 Enum

5.不要在数据库里发生运算

6.my.cnf设置, 最大连接数,查询缓存

7.选择合适的储存引擎

8.避免使用长连接

 MySQL均衡负载

利用mysql主从复制 实现 更新操作和查询操作分流, 主要的实现是一台主服务器实现更新操作, 多台服务器实现查询操作 , 主从之间通过复制实现数据同步

出现的问题是 主数据库 更新频繁及网络问题 ,导致主从之间可能导致数据差异

 

mysql读写分离,异步复制

实时性要求不能太高

 

分布式数据库架构

分布式储存引擎只有innodb引擎支持 , 具体实现的时候,可以使用mysql的Cluster功能(NDB引擎)

作用:实现高负载, 多台服务器均衡负载, 

 

12、apache+mysql+php实现最大负载的方法

1) 问的太笼统,生成静态html页面,squid反向代理,apache,mysql的负载均衡。

 

2) 可以采取数据缓存的方法,我们通常在统计数据的时候,需要在原始数据的基础上经过计算等一系列操作,才会得到最终的结果,如果每做一个查询都需要这样一系列操作,当数据量大时,势必会带来很多问题。可以建立一个结果表,写一个脚本,用crontab定时触发脚本去原始表取数据,计算,写入到结果表,前端查询从结果表取数据,这也是比较常用的一种做法。

 

3) 采用分布式,多个apache,多个mysql,其实就是dns负载均衡,dns根据当前用户解析几个ip的ping值,将用户转移到某一台最快的服务器,或者平均分配。

十三. 建立索引

 

创建索引:

create index 索引名称 on 表名(字段列表)            普通索引  ->什么字段都可以

create index 索引名称 on 表名(字段列表)

create unique index 索引名称 on 表名(字段列表)     创建唯一索引  ->字段必须唯一

alter table 表名 add primary key(字段名)        创建主键索引

 联合主键:

 

alter table 表名 add fulltext index               创建全文索引(不支持中文)

sphinx corseek 中文分词索引  

 

查看索引 show index from 表名

删除索引 drop index 索引名 on 表名

使用索引场景

匹配全值,范围查询,匹配最左前缀,仅对索引进行查询,匹配列前缀,索引部分等值匹配部分范围匹配,列名是索引

 

索引存在但不能使用索引的场景

以%开头的like查询

2、数据类型出现隐式转化,不会使用索引

3、组合索引,不满足最左原则,不使用符合索引

4、估计使用索引比全表扫描还慢,则不要使用索引

5、用or分割条件,若or前后只要有一个列没有索引,就都不会用索引

  

十四. 解释PHP

基于服务端来创建动态网站的脚本语言

 

十五 .MySQL获取当前时间 select now();

 

十六.解决高并发 

首先查看是否被盗链, 谷歌有相关统计网站

如果流量可以承受的话, 节约成本可以用技术实现,

高并发会带来用户体验不好, 一个重要原因是CPU和内存负载过高,  这这块用专业原因来解释就是在网络没有问题的前提下 频繁的数据读写, 这点可以用 页面静态化 , memcache缓存, mysql优化 这几个方面着手

 

接着控制大文件的下载速度, 或者配置专门的服务器

如果预计流量过大的话, 可以投入资金的话 , 使用多台主机分流, 也是根治

控制大文件的下载速度, 或者配置专门服务器, 

 

 

十七.PHP 实现  显示客户端IP 与服务器 IP 的代码

$_SERVER['remote_ADDR']

$_SERVER['SERVER_ADDR']

 

posted @ 2018-07-23 20:50  super久违  阅读(133)  评论(0编辑  收藏  举报