一、Linux
1.查找当前目最文件内容中包含"USD"的所有文件
grep "USD" . -n -R
2.获取/etc/passwd 文件中所有以w开头的用户名,并将结果保存成users 文件(/etc/passwd 文件每行记录了一个用户的用户名)密码)所属组等字段每个字段以“:“分隔)
egrep ”w(.*)?[^:]” /etc/passwd>>users.txt(添加)
egrep ”w(.*)?[^:]” /etc/passwd >users.txt(重写)
3.新接手一台服务器,不确定配置情况怎么找到php.ini文件的位置,修改上传附件大小的设置,并确认生效
find / -name php.ini 或者写phpinfo看输出结果。
max_execution_time = 0
post_max_size = 150M
upload_max_filesize = 100M
4.linux后台运行进程的方法有哪些?
nohup/setsid/&
https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
5.如何判断linux系统的负载和定位高负载
https://www.cnblogs.com/huangxm/p/6278615.html
1) 怀疑CPU存在瓶颈
使用sar -u命令查看;
2) 怀疑内存存在瓶颈
使用sar -r命令查看;
3)怀疑磁盘IO存在瓶颈
使用sar -b命令查看;
二)Redis
1.Redis如何取指定key(List类型)的第3个元素,如何删除指定key的指定值?
LINDEX key index 通过索引获取列表中的元素
HDEL key field2 [field2] 删除一个或多个哈希表字段
2.Redis如何加值,减值?
INCR key 将 key 中储存的数字值增一。
INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
DECR key 将 key 中储存的数字值减一。
DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
3.redis 和memache 缓存的区别
1) Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2)Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3) Redis支持数据的备份,即master-slave模式的数据备份。
4) Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
三、mysql
1.数据库中事务是指什么? 其有什么特性?
是用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。
原子性)一致性)隔离性)持续性
2.mysql引擎中的MyISAM和ImoDB的区别理解
1) 存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
2) 存储空间
MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉))动态表)压缩表。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
3) 可移植性)备份及恢复
MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
InnoDB:免费的方案可以是拷贝数据文件)备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。
4) 事务支持
MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit))回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
5) AUTO_INCREMENT
MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
6) 表锁差异
MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
7) 全文索引
MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
8) 表主键
MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
9) 表的具体行数
MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。
10) CURD操作
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。
11) 外键
MyISAM:不支持
InnoDB:支持
3.请简述MySQL的锁机制。
https://blog.csdn.net/zq602316498/article/details/49428825
4索引
https://www.cnblogs.com/shijianchuzhenzhi/p/6383117.html
四、php
1.echo(),print(),print_r的区别?
1)echo 和 print 的区别
共同点:首先echo不是严格意义上的函数是语言结构;他们都只能输出 字符串,整型跟int型浮点型数据。不能打印复合型和资源型数据;
而区别是:echo 可以连续输出多个变量,而print只能一次输出一个变量。print打印的值能直接复制给一个变量,如 $a = print “123”;
而echo 不可以,它没有像函数的行为,所以不能用于函数的上下文。在使用时,echo() 函数比print()速度稍快。
2).var_dump()和print_r()的区别
共同点:两者都可以打印数组,对象之类的复合型变量。
区别:print_r() 只能打印一些易于理解的信息,且print_r()在打印数组时,会将把数组的指针移到最后边,使用 reset() 可让指针回到开始处。 而var_dump()不但能打印复合类型的数据,还能打印资源类型的变量。且var_dump()输出的信息则比较详细,一般调试时用得多。
2.写一个函数尽可能高效的从一个标准山中取出文件的扩展名
//首先列出需要被操作的url
$url_path = "http://www.sina.com.cn/abc/de/fg.php?id=1";
方法一:
//取出扩展名及参数
$temp = pathinfo($url_path,PATHINFO_EXTENSION);
//找到扩展名
$temp = explode("?",$temp)
echo $temp[0];
//方法二:
//将url路径进行分解,只取出目录之后的信息
$temp = parse_url($url_path);
$path = $temp['path'];
//然后再借用pathinfo直接将扩展名取出
echo pathinfo($path,PATAINFO_EXTENSION);
//方法三:
//直接取出文件名
$temp = pathinfo($url_path,PATHINFO_BASENAME);
//取出扩展名
$temp = explode(".",$temp)
echo $temp[0];
3.PHP如何不使用第三个变量实现交换两个变量的值?
//字符串版本 使用str_replace方法实现
$a="a";
$b="b";
echo '交换前 $a:'.$a.',$b:'.$b.'<br />';
$a.=$b;
$b=str_replace($b, "", $a);
$a=str_replace($b, "", $a);
echo '交换后$a:'.$a.',$b:'.$b.'<br />';
2)
$a='a';
$b='b';
$b=explode('|',$a.'|'.$b);
var_dump($b);
$a=$b[1];
$b=$b[0];
echo $a;
echo $b;
注意最后赋值要先a后b,因为b的值会变
4.写一个函数,求数组有最大值时的子数组。
<?php
//和最大的连续子数组计算
$arr=array(1,2,3,4,-1,5,6,-9,6,1);
$max_sum='';//最大和
$max_i='';//最大和子数组开始下标
$max_j='';//最大和的子数组结束下标
$n=count($arr)-1;//数组最大下标
for ($i=0;$i<=$n;$i++){
$sum=0;
for ($j=$i;$j<=$n;$j++){
$sum+=$arr[$j];
//此时sum值为$i...$j子数组之和
if ($max_sum==='' || $sum>$max_sum){
$max_sum=$sum;
$max_i=$i;
$max_j=$j;
}
}
}
//输出结果
echo "和最大的连续连续子数组和为 $max_sum\n";
echo "是从 $max_i .... $max_j 的子数组\n";
echo "内容是:";
for ($i=$max_i;$i<=$max_j;$i++) echo $arr[$i],", "
?>
5.php整形的存储范围
32位,64位无符号整型最大值:
2^64-1 = 18446744073709551615
2^32-1 = 4294967295
6.number_format() 函数通过千位分组来格式化数字。
7.Php7新特性
http://www.runoob.com/w3cnote/php7-new-features.html
五、其他
1.对于大流量网站,你会采用什么方法来解决访问量了
首先,确认服务器硬件是否足够支持当前的流量。
其次,优化访问。数据库
第三,使用缓存,smarty缓存和redis缓存
第四,控制大文件的下载。
第五,使用不同主机分流主要流量
2.请描正向代理和反向代理的区别与联系。
正向代理,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
3.请描述下你对Nginx 和PHP-FPM 关系的理解。
https://www.cnblogs.com/smallrookie/p/5634054.html
4.当我们在浏览器地址栏输入一个域名(例如: www.anhao.cn) 并敲下回车到看到返回的页面的整个过程中,请简述下此过程都有那些环节,环节的作用是什么?
http://www.cnblogs.com/panxueji/archive/2013/05/12/3073924.html
1.敲域名回车
2.查询本地的DNS缓存,以找到域名对应的主机IP地址(若有,则跳到4)
3.查询远程域名根DNS,找到IP地址
4.向远程IP地址的服务器发送请求(若请求失败且未经过2,则返回2,若再再次失败,返回错误代码)
5.服务器响应请求,向用户发送数据
6.浏览器对返回的数据进行处理(浏览器渲染)
7.显示
5.简述TCPiP HTTP WebSocket协议。
1).TCP协议
1.传输层通信协议
2.面向连接的,可靠的,基于字节流的
3.建立链接需要三次握手
4.TCP可以保证数据无丢失,数据无失序,数据无错误,数据无重复到达。
2).Http协议
1.一个应用层协议
2.Header-Body组成
3.比TCP高级
4.短链接,无状态
5.http请求步骤
①.客户机通过TCP/IP协议建立到服务器的TCP连接。
②.客户端向服务器发送http请求。
③.服务器向客户机发送Http协议应答包。
④.断开链接,客户端渲染html文档。
3).socket协议
1.一个工具,一个接口
2.封装了TCP/IP协议.
3.建立长链接的基础。
4.三个步骤:服务器监听,客户端请求,连接确认。
4).WebSocket协议
1.一个应用层协议。
2.长链接。
3.主流即时通讯技术。
4.比ajax轮询优点多多。
5.header很小,serverpush为服务器有新数据时主动推送到客户端。
socket、fsockopen、curl、stream 区别
https://blog.csdn.net/walxiaosage/article/details/47948019
6.php和nginx有几种连接方式
在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。
7.时间复杂度
https://baike.baidu.com/item/%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6/1894057?fr=aladdin
8.设计模式
https://www.cnblogs.com/leedaily/p/8250158.html