面试问题

来源:互联网 发布:strider军刀 淘宝 编辑:程序博客网 时间:2024/03/28 18:15

1.字符串"0"在PHP和js中转换为布尔值是false还是true

   1
   2
   3
php:false;  php 弱语言'0'和0一样;
 
js:true;字符串除了空字符串('')其他都是true(包括' '这种中间有空格的);
复制代码
2.   echoprint_rprint,var_dump 区别                     echo() 实际上不是一个函数,是php语句,而且echo是返回void的,并不返回值,所以不能使用它来赋值。
               不用括号的时候可以用逗号隔开输出多个值,但是没有换行和不能隔开
print:也不是是函数,有返回值但终是1, echo的速度要比print快 print_r:能打印数组,对象 var_dump:能打印对象数组,并且带数据类型
复制代码

3.$_SERVER常量中常用的参数

复制代码
       $res = $_SERVER['REMOTE_ADDR']; //客户端IP地址    $res = $_SERVER['SERVER_ADDR']; //服务端IP地址    $res = $_SERVER['SERVER_NAME']; //服务端信息    $res = $_SERVER['SERVER_SOFTWARE']; //客户端信息    $res = $_SERVER['SCRIPT_FILENAME']; //当前文件的绝对路径 //http://localhost/map/index.php/home/Interview/Index    $res = $_SERVER['REQUEST_URI']; //页面的URL地址 ///map/index.php/home/Interview/Index
复制代码
4.获取服务器IP地址和本地IP地址的方式 $localip = $_SERVER["REMOTE_ADDR"]; 或者:getenv('REMOTE_ADDR'); $serverip = $_SERVER["SERVER_ADDR"]; 或者: gethostbyname('www.baidu.com');
复制代码

 

4.  mysql联合索引index_a_b_c(a,b,c) charset=utf8,a int(10),b varchar(10),c tinyint(1),问条件where a = 5 and c = 1用到的索引长度。

           索引长度:4+1 = 5  (用到a,c)

           where a=5 and b = "hahah"; 

           索引长度:4+10*3+2 = 36 (用到a,b)

5.json和jsonp的区别,什么时候用。

jsonp 跨域请求的方式


6.写出点击一个div出现相应的序号的js

      

7.session和cookie的区别和联系

           如果禁用了cookie,那要怎么实现session?通常会采取一种叫做“URL重写”的方式来实现session,也就是以类似于GET方式,将session_id写在URL的后面,这样服务器也能获取到客户的session_id,通过这个独立的id就能识别特定的用户了。

8.PHP实现遍历出文件夹和他下面子文件的代码

复制代码
1.  <?php2.           $dir = '/Users/zhaoning/Desktop/算法';3.          4.           function getAllFile($dir){5.                   $allFileArr = array();6.                   if (is_dir($dir)) {7.                            $res = opendir($dir);8.                            while ($row = readdir($res)) {9.                                     if ($row == '.' || $row == '..') {10.                                             continue;11.                                    }12.                                    if (is_file($dir.'/'.$row)) {13.                                             $allFileArr[] = $row;14.                                    }else if (is_dir($dir.'/'.$row)) {15.                                             $allFileArr[$row] = getAllFile($dir.'/'.$row);16.                                    }17.                           }18.                           closedir($res);19.                  }20.                  return $allFileArr;21.          }22.          var_dump(getAllFile($dir));23. ?>
复制代码

9.写出匹配html标签的而不匹配div span img的正则表达式

10.写出下面正则表达式的含义

$  ^   [^]  ?    ?:   

11.PHP中this和self的区别

        this:对象

        self:类

12.如何防止SQL注入,XSS攻击和CSRF攻击

        SQL注入:mysqli_real_escape_string()转义关键字符;

                         要严格检测用户输入,比较说如果是纯数字的要检测是否是纯数字 或者用正则判断, 再然后要过滤和转义一些特别字符,可以使用php自带函数 addslashes()或者mysqli的函数 mysqli_real_escape_string()函数过滤那些 # --(空格) 这些在sql语句中是注释的特殊字符   最后 你可以使用预编译的方式去防止sql注入

        XSS攻击:alert把一些cookie信息打印出来;过滤掉<>等关键字符串

        CSRF攻击:跨站攻击。防止:token,验证码

13.Linux的命令:查找出文件名后缀是.txt的,内容包含delete的文件,并删除

1.  find / -name "*.txt" | xargs -n1 -I(这是i) 'xxx' grep -l(这是L)  'delete' 'xxx' | xargs -n1 -I 'zzz' rm -f 'zzz'

14.PHP解决多进程读写一个文件的方法

复制代码
1.  function putFile($file,$mode="w"){2.           $file = fopen($file,$mode);3.           if(flock($file,LOCK_EX)){4.                   fwrite($file,'write a word');5.                   flock($file,LOCK_UN);6.           }else{7.                   echo "无法访问";8.           }9.           fclose($file);10. }
复制代码

15.数据库表的引擎有哪几种?区别和场景

        MyISAM:多用于select

        Innodb:事务

        memory:内存中,存储快

        merge:用于日志和数据仓库

        archive:用于日志,只有select和insert,不支持索引。

16.nginx和PHP的工作原理

17.ES连接PHP的扩展叫什么名字

        elasticsearch 

18.调用接口需要什么,签名怎么生成的,登陆接口的实现

        签名:(  token + 时间戳  )  加密  =  sign  

19.接口返回包含哪几部分。

复制代码
1.  {2.      code:3.      msg:4.      data:{}5.  }
复制代码

1.不知道什么的英文

2.PHP错误种类.

      1. 注意(Notices)
这些都是比较小而且不严重的错误,比如去访问一个未被定义的变量。通常,这类的错误是不提示给用户的,但有时这些错误会影响到运行的结果。

    2. 警告(Warnings)
这就是稍微严重一些的错误了,比如想要包含include()一个本身不存在的文件。这样的错误信息会提示给用户,但不会导致程序终止运行。

    3. 致命错误(Fatal errors)
这些就是严重的错误,比如你想要初始化一个根本不存在的类的对象,或调用一个不存在的函数,这些错误会导致程序停止运行,PHP也会把这些错误展现给用户。     

   屏蔽PHP错误提示

        方法一:在有可能出错的函数前加@,然后or die("") 
         如: 
           @mysql_connect(...) or die("Database Connect Error")

          方法二:编辑php.ini ,查找"display_errors =" ,将“=”后面的值改为"off。

           方法三:在php脚本前加error_reporting(0),屏蔽所有错误提示。
           其中,error_reporting 配置错误信息回报的等级。

3.var_dump(0123==123);var_dump('0123'==123);  false true

4.36个人,6个赛道,没有秒表,比赛多少次能够得出前三名?

5.正方形四个角有四个虫子,虫子沿边走,问:虫子相遇(两个碰头)的概率是多少?

6.A去买水果3.5斤共14元,给老板B  20 元 ,B没零钱,找隔壁C换20元,回来后找A  6元,C发现这个钱是假的,找B,B又给C 20 元。问:B一共亏了多少钱。

7.快排

8.同一个ip,10分钟能只能访问5次

       可以获取到他的ip地址 然后记录他上次登录时间 然后再去判断是否登录间隔时间

9.设计微博粉丝互粉,用户1亿。

问答:

http协议包含几部分。

接口是怎么实现的。

token 是怎么生成的。

你知道哪些加密。

        单项 对称  非对称    MD5()  crypt()   sha1()   url编码加密  base64加密

如何防止http包的数据篡改。比如说转账10块,http包被劫,改成100块了。

              加密

针对有项目经验的面试梳理:

1.自我介绍。

在哪工作,多长时间。做了什么东西,项目背景,用到的技术,负责什么工作。

 

答案:之前在滴滴打车工作,工作半年多。参加的项目有谷雨移动和司机帮。谷雨移动是(移动端)为汽车租赁公司提供管理旗下快车的软件。主要用的PHP+redis+ES。我主要负责服务分和各项报表的查询和汇总。司机帮主要是面向快车司机的,司机能够查看自己的流水和服务分,服务时长等各项数据。我主要负责服务分的排名。


redis和memcache的区别?

      Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。

Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。

     memcache只有key-value单一的数据结构  而redis却支持string set zset hash list

问:redis起什么作用?

减少访问es的次数

懒加载(访问redis没有数据,然后去查ES,把结果导入数据redis里面)有什么弊端?

数据不同步的问题。

怎么解决数据不同步?

1.把懒加载换成定时跑数据。

2.从ES里面读取近期是否有数据变化,如果有从新读取ES。没有的话在还用原来的redis里面的数据。

2.apache和nginx的区别

工作模式:

apache 有两种模式perfork,worker模式

perfork:

worker:

nginx的epoll和select:

epoll:模式单线程异步非阻塞。

select:选择性的

 

3.Innodb和My ISAM的区别

MyISAM:

支持全文索引,

不支持事务。

存储结构:三个文件,一个数据文件,一个索引文件,一个表文件。

表级别的锁。

Innodb:

不支持全文索引,

支持事务。

存储结构:所有表同一个文件。

行级别的锁。

4.hash索引和b+tree索引的区别

原创粉丝点击