简答题

  1. 如何获取客户端的ip(要求取得一个int)和服务器ip的代码

​​客户端:$_SERVER["REMOTE_ADDR"];
服务器端:$_SERVER["SERVER_NAME"];
参考:php获取客户端IP和服务器端IP
2.
参考:
session和cookie的应用场景和区别
理解Cookie和Session的区别及使用
session的运行机制
浏览器在访问服务器时,服务器会自动生成HashTable和Session ID作为唯一标识,并将其通过响应发送至浏览器进行存储。客户端在每次访问的时候会将Session ID放在请求中一并发送到服务器上,服务器会将传过来的Session ID与保存的Session ID进行对比,找到这个用户对应的HashTable,返回Session数据。
什么是cookie
cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案;
session与cookie的区别
SESSION存储在服务器端,用户无法进行修改,相对比较安全,COOKIE存储在客户端,用户通过手段可以进行修改,相对不安全;
多台WEB服务器如何共享session
共享就是每台服务器公用一个,那显然要把这个session专门放到一个地方,比如存数据库,每台服务器都调这个数据库里的session。
3. echo与print,var_dump()和print_r()的区别
echo 可以连续输出多个变量;
print只能一次输出一个变量;
echo 和 print比较:
1)echo 和 print 都不是严格意义上的函数,他们都是 语言结构;
2)echo() 函数比 print()速度稍快;
3)print打印的值能直接复制给一个变量,而echo 不可以,原因是它没有像函数的行为,所以不能用于函数的上下文。
4)两者都不能打印复合型和资源型数据;
print_r() 只能打印一些易于理解的信息,且print_r()在打印数组时,会将把数组的指针移到最后边,使用 reset() 可让指针回到开始处。
var_dump()不但能打印复合类型的数据,还能打印资源类型的变量,且var_dump()输出的信息则比较详细,一般调试时用得多。
var_dump()和print_r()的相同点:两者都可以打印数组,对象之类的复合型变量。
4. 对Json数据格式的理解?json和jsonp的区别
JSON是一种基于文本的数据交换方式(不支持跨域),而JSONP是一种非官方跨域数据交互协议。
参考:
json和jsonp的使用区别
5. 例举一些数据库的优化方案
6. 索引、视图、游标、存储过程和触发器的理解
参考:
索引、视图、游标、存储过程和触发器的理解
触发器与存储过程的区别
7. 常用的php框架具体描述
参考:
php较常用的4种框架简介
8. 前端框架举例,描述一下Bootstrap
Vue、Bootstrap ;
Bootstrap 是 Twitter 推出的一个简单简洁开源的前端框架。 是基于HTML5和CSS3开发的,其中包含丰富的组件,可以快速的搭建网站页面;
9. laravel(Thinkphp)中的MVC分层是什么?(理解)简要描述一下页面表单内容提交后返回结果在框架的流程步骤
10. 线上的故障如何解决?
11. 说说你用过的设计模式?并写出其应用场景?
12. Redis有几种类型以及使用场景
13. 设计一个秒杀系统,需要注意什么?
15. 用什么命令查看当前执行sql语句队列?
17. mysql_num_rows() 和 array_offetcted_rows() 的区别,返回的是什么结果?
18. in_array() 、array_key_exists() 、array_search() 哪个速度快,效率高?为什么?
正解:array_key_exists比另外两者的速度快很多,因为KEY是进行HASH组织的,查询很快;而VALUE是由KEY组织存放,本身没有索引,每次查找都是遍历。
相关文章:对比4个函数 isset in_array array_search array_key_exists 速率对比及初步分析原因
19. echo count(‘abc’); 值是多少?
正解:1
解释:返回 var 中的单元数目,通常是一个 array,任何其它类型都只有一个单元。
20. empty(‘0’); 返回什么?
正解:TRUE
注:empty
21. 下列代码中$a是多少?
正解:

    $a = 6;
    $a = 2 && $a = 3;  //var_dump( $a ); boolean true
    $a = 0 && $a = 3;  //var_dump( $a ); boolean false
    
	//解释: && 的优先级高于 =,所以先进行&&与运算,2 && $a 中因为之前已经对赋值,
	        所以,为真返回 true; 0 && $a 为假返回false;

相关文章:$a && $b = $c
22. Http常用的错误码
正解:

范围常见状态码
1xx(临时响应)
2xx (成功)204已成功处理,但是不包含请求实体;206返回部分请求内容;
3xx (重定向)301永久重定向;302临时重定向;303定向获取;
4xx(请求错误)403服务器拒绝访问,没有访问权限;404客户端无法请求,请求的路径不存在;
5xx(服务器错误)500执行的请求发生错误;503超负载运行,无法响应;

相关文章:常见HTTP错误代码大全
23. TP5的链式操作
24. Mysql添加索引需注意什么?(尽量多)
25. Mysql如何进行优化?
26. ??与?:的区别,使用注意事项。

$z = $x ?? $y;
//等价于下面
$z = isset($x) ? $x : $y;

$z = $x ?: $y;
//等价于下面
$z = $x ? $x : $y;

27.取数组的最后一个元素
end()
28.常用的正则

名称表达式
汉字[\u4e00-\u9fa5]
邮箱/^\w+((\.\w+){0,3})@\w+(\.\w{2,3}){1,3}$/
URL/(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|net|org)(\/[\w-\.\/\?\%\&\=]*)?/i

29.Mysql存储时间有几种字段类型?各有什么优缺点?
timestamp:
占用4个字节
允许为空值,但是不可以自定义值,所以为空值时没有任何意义。
TIMESTAMP值不能早于1970或晚于2037。
结论:timestamp类型适合用来记录数据的最后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。
int:
占用4个字节
建立索引之后,查询速度快
条件范围搜索可以使用使用between
不能使用mysql提供的时间函数
结论:适合需要进行大量时间范围查询的数据表
datetime:
占用8个字节
允许为空值,可以自定义值,系统不会自动修改其值。
与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)
不可以设定默认值;
可以在指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间;
结论:datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。
30.Mysql中事物是什么?如何使用?
事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败;
使用:
1)在执行sql语句之前,我们要开启事务 start transaction;
2)正常执行我们的sql语句
3)当sql语句执行完毕,存在两种情况:
全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ
某些sql语句失败,我们执行rollback(回滚),将对数据库操作赶紧撤销
31.Mysql5.7 sql_model变更会导致哪些sql语法报错?有什么处理方案?

32.Laravel相关概念
依赖注入,控制翻转,反射
33.高并发如何处理?

横向发展
		1、优化SQL语句
			1、慢查询日志(通过慢查询日志找出执行慢的sql语句)
			2、进行具体语句优化或建立索引
				1、字段添加索引
				2、将查询简单化,将多表查询改为单表查询
			3、尽量不要使用like、not in进行查询
			4、尽量不使用嵌套查询
		2、优化Mysql数据库
			1、对表引擎进行优化
			2、对数据表进行优化
				1、垂直分表、水平分表、字段优化、分库分表
			3、创建索引(一般只给查询添加索引,不能过度的添加索引,索引值不能为NULL)
		3、优化程序代码
		4、使用缓存
	纵向发展
		1、增加服务器数量
		2、使用缓存改善网站性能
			1、memcache缓存
				优点:Memcached使用的是多核,在存储100k以上的数据时,效率较高;
				缺点:数据结构单一,仅用来缓存数据;不支持数据持久化,在断电或重启后数据消失;不可以设置密码;
			2、Redis缓存
				优点:单核,在存储较小的文件时效率较高;可以在服务器端直接对数据进行操作;支持数据持久化和数据恢复;可以设置密码;
				搭建时需要6台服务器
		3、负载均衡服务器
		4、数据库读写分离(主从热备份)
		5、CDN和反向代理加速网站响应
		6、分布式数据库

34.找出表A里面num最小的数,分别使用和不使用min函数两种方法

select top 1 * from A ORDER BY num;
select min(field) from A;

35 . 写出复制A->B的SQL语句,包括只复制结构和复制数据两种

1.复制表结构及数据到新表
CREATE TABLE 新表 SELECT * FROM 旧表
2.只复制表结构到新表
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.
方法二:(由tianshibao提供)
CREATE TABLE 新表 LIKE 旧表
3.复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO 新表 SELECT * FROM 旧表
4.复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表

36.有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。
可以采用从小到大排序的方法,根据经验,除非是群发的过节短信,否则字数越少的短信出现重复的几率越高。建议从字数少的短信开始找起,比如一开始搜一个字的短信,找出重复出现的top10并分别记录出现次数,然后搜两个字的,比如开始搜一个字的短信,找出重复出现的top10并分别记录出现次数,然后搜两个字的,一次类推。对于相同字数的比较长的短信的搜索,除了hash之类的算法外,可以选择只抽取头、中和尾等几个位置的字符进行粗判,因为此种判断方式是为了加快查找速度但未必能得到真正期望的top10,因此需要做标记;如此搜索一遍后,可以从各次top10结果中找到备选的top10,如果这top10中有刚才做过标记的,则对其对应的所有短信进行精确搜索以找到真正的top10并在此比较。

37.Redis常见面试题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值