面试总结

一、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相比一个最大的区别。
2Redis不仅仅支持简单的k/v类型的数据,同时还提供listsethash等数据结构的存储。
3 Redis支持数据的备份,即master-slave模式的数据备份。
4 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

三、mysql
1.数据库中事务是指什么其有什么特性?

是用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。

原子性)一致性)隔离性)持续性

2.mysql引擎中的MyISAMImoDB的区别理解

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:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
InnoDBInnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。

6) 表锁差异

MyISAM:只支持表级锁,用户在操作myisam表时,selectupdatedeleteinsert语句都会给表自动加锁,如果加锁以后的表满足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条件后,myisaminnodb处理的方式都一样。

10) CURD操作

MyISAM:如果执行大量的SELECTMyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERTUPDATE,出于性能方面的考虑,应该使用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;

注意最后赋值要先ab,因为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为服务器有新数据时主动推送到客户端。

socketfsockopencurlstream 区别

https://blog.csdn.net/walxiaosage/article/details/47948019

6.phpnginx有几种连接方式

linux中,nginx服务器和php-fpm可以通过tcp socketunix 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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值