• php程序猿面试分享


    面试总结

    今天去了北京著名IT公司进行PHP程序猿的面试。这是人生第一次么,怎么不紧张?我是不是有病。不是。这叫自信呵.

    首先是做一些笔试题。
    1.mysql数据库索引使用的数据结构?这样做的优点是?
    能够參考这篇博文:http://blog.csdn.net/ant_ren/article/details/2932068


    2.有两个字符串a和b,推断b字符串是否出如今a中。

    不考虑大写和小写。。

    我的答案是:使用stripos()这个函数来解决的。

    if(stripos($a,$b)>-1)
    	echo "b in a";
    else
    	echo "b not in a";

    拓展:
    可是假设是不考虑顺序的话,问b字符串中的字符是否所有出如今a中。

    。。
    那我们就须要用循环来解决的。

    以下提供解决方式:

    $b_arr = str_split($b);
    for(var $i=0,$len = count($b_arr); $i < $len ;  ++$i){
    	if(stripos($a,$b_arr[$i])==-1)
    		return false;
    	return true;
    }

    3.你知道的开源框架?
    我依照自己的经验写了一些:
    Laravel。PHP。jQuery。。。




    4.简单解释session 和cookie。关闭cookie。session是否可用?
    我写的比較简单:
    session存储在server端,cookie存储在client。

    两者没有直接的联系。


    对于訪问其它的页面。PHP_SESSIONID是作为一个暂时cookie放在浏览器端的。
    每次浏览器发出的请求。都会在http header里 带上 sessionid来标识自己。
    假设禁用cookie,那么会自己主动放在url后面进行传递。


    5.数据库优化方案
    这个自己在网络上找一下。


    6.设计一个Timer类,用来计算程序执行的时间。而且简单的调用它。

    class Timer { 
    	private $StartTime = 0;//程序执行開始时间 
    	private $StopTime = 0;//程序执行结束时间 
    	private $TimeSpent = 0;//程序执行花费时间 
    
    
    	function start(){//程序执行開始 
    		$this->StartTime = microtime(); 
    	} 
    	function stop(){//程序执行结束 
    		$this->StopTime = microtime(); 
    	} 
    	function spent(){//程序执行花费的时间 
    		if ($this->TimeSpent) { 
    			return $this->TimeSpent; 
    		} else { 
    			list($StartMicro, $StartSecond) = explode(" ", $this->StartTime); 
    			list($StopMicro, $StopSecond) = explode(" ", $this->StopTime); 
    			$start = doubleval($StartMicro) + $StartSecond; 
    			$stop = doubleval($StopMicro) + $StopSecond; 
    			$this->TimeSpent = $stop - $start; 
    			return substr($this->TimeSpent,0,8)."秒";//返回获取到的程序执行时间差 
    		} 
    	} 
    } 
    $timer = new Timer(); 
    $timer->start(); 
    //...程序执行的代码 
    $timer->stop(); 
    echo "程序执行时间为:".$timer->spent(); 


    以下是简单版的。

    class Timer{
    	private $t = 0;
    
    
    	public function start(){
    		$this->t = microtime(true);
    	}
    
    
    	public function stop(){
    		return microtime(true)- $this->t;
    	}
    }
    
    
    $time = new Timer();
    $time->start();
    //do somethings...
    $t = $time->stop();


    7.建立复合索引应该注意的事项。
    (1)对一张表来说。假设有一个复合索引 on   (col1,col2)就没有必要同一时候建立一个单索引 on col1。
    (2)假设查询条件须要。能够在已有单索引 on col1的情况下,加入复合索引on   (col1,col2),对于效率有一定的提高。
    (3)同一时候建立多字段(包括5、6个字段)的复合索引没有特别多的优点,相对而言,建立多个窄字段(仅包括一个,或顶多2个字段)的索引能够达到更好的效率和灵活性。


    8.设计一张数据库表。

    该数据表用来存储常常插入和查询的url数据。


    并解释为什么这么设计的原因。

    create table url(
    	`id` int(11) not null primary key auto_increment comment "主键",
    	`url` varchar(255) not null comment "url 内容",
    	`name` varchar(50) comment "url相应的名称"
    )ENGINE=MyISAM


    我是这么建立的。


    常常插入和删除,我觉的数据库存储引擎应该使用MyISAM。
    假设再在url,name字段上建立一个索引就更好了。



    不是我想简单写啊。这么多题目就一张A4纸啊。

    这不是逼着我写简单点吗?只是我还是犯了一些低级的错误。我正在努力改正。

    一点福利,分享给大家。

    Best Wishes.



  • 相关阅读:
    1105 Spiral Matrix (25 分)螺旋矩阵
    1089 Insert or Merge (25 分)
    1044 Shopping in Mars (25 分)二分查找
    1068 Find More Coins (30 分)记忆化搜索
    1133 Splitting A Linked List (25 分)
    1145 Hashing
    1147 Heaps (30 分)
    1098 Insertion or Heap Sort (25 分)
    自测-3 数组元素循环右移问题 (20 分)
    自测-1 打印沙漏 (20 分)
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10749560.html
  • Copyright © 2020-2023  润新知