作为程序员,无论去哪个公司面试都避免不了做面试题,虽然我和大家一样特讨厌做面试题,但是不做就敲不开公司的大门,所以还是得耐着性子认真对待,抱怨解决不了问题的。
1、每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒。10元最多可喝多少瓶啤酒? 答:设一瓶酒里的酒价值x,酒瓶价值y,瓶盖价值z,x+y+z=22y=24z=2解得x=0.5,y=1,z=0.5,10/0.5=20,最多可喝20瓶啤酒。 具体步骤如下: 10元买5瓶酒,5个酒瓶,5个瓶盖 4个酒瓶换2瓶酒,3个酒瓶,7个瓶盖 2个酒瓶换1瓶酒,2个酒瓶,8个瓶盖 2个酒瓶换1瓶酒,8个瓶盖换2瓶酒,3个酒瓶,3个瓶盖 2个酒瓶换1瓶酒,2个酒瓶,4个瓶盖 2个酒瓶换1瓶酒,4个瓶盖换1瓶酒,2个酒瓶,2个瓶盖 2个酒瓶换1瓶酒,1个酒瓶,3个瓶盖 借5瓶酒,6个酒瓶,8个瓶盖 6个酒瓶换3瓶酒,8个瓶盖换2瓶酒,还5瓶酒, 没有欠账,没有剩余。 共喝5+2+1+1+2+1+1+1+1+5=20瓶酒。 Update:想了一下,刚才的步骤实在过于繁琐,更新如下: 10元买5瓶酒,借15瓶酒,20个酒瓶,20个瓶盖20个酒瓶换10瓶酒,20个瓶盖换5瓶酒,还15瓶酒,没有欠账,没有剩余。共喝20瓶酒。 2、写一个函数,能够遍历一个文件夹下的所有文件和子文件夹(几乎每个公司面试都有这个,公司也是网上找题的^_^) function _directory($dir) { $files = array(); if($handle = opendir($dir)) //若没有打开目录句柄会返回一个false; { //readdir($handle) 返回目录文件名 while($file = readdir($handle) !== false){ //明确的指出是否全等,因为任何一个目录值的名为false都会终止程序执行,比如目录"0" if($file != ".." && $file !="."){ if(is_dir($dir. "/". $file)){ $files[$file] = _directory($dir. "/". $file); } else{ $files[] = $file; } } } closedir($handle); //关闭目录句柄 return $files; } } 3、优化mysql数据库的方法。 避免查询时做数据运算。 避免大量数据的吞吐。 创建索引。 查询时缩减查询范围。 主从分离 选择合适的字段属性(创建表时将字段的宽度设置的竟可能小) 尽量将字段设置为not null(这样执行查询时,不会去比较null值) (索引类型:唯一索引,普通索引,全文索引FULLTEXT,组合索引) 4、针对大流量的网站,您采取什么样的方法解决访问量的问题。 确定硬件是否支持此流量 优化数据库 缓存技术 (前端缓存,redis, memcache后端缓存减少mysql请求) 禁止外部盗链 控制大文件下载 使用负载均衡架构服务器 5、多台服务器如何共享session 1、写客户端Cookie的方式 2、服务器之间Session数据同步的方式 3、利用NFS共享Session数据的方式 4、 利用Mysql数据库共享Session数据的方式
6、PHP性能优化方法和技巧 1、利用缓存模块 2、查询缓存区,从缓存区直接读数据给用户。 3、在php.ini中开启opcache性能加速
【写PHP代码需要注意的】 4、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?); 5、多维数组尽量不要循环嵌套赋值; 6、foreach效率更高,尽量用foreach代替while和for循环; 7、用单引号替代双引号引用字符串; 8、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”; 9、对global变量,应该用完就unset()掉; 7、mysql 执行show procedure,发现进程偏多并且80%为sleep状态,请问可能出现的现象和优化方案。 1、持久化链接太多,尽量使用mysql_connect()短链接 2、及时使用mysql_close()关闭链接。 3、查看慢日志对sql进行优化。 4、杀掉sleep的进程。 8、使用PHP实现一个工厂模式类 //要创建对象实例的类 class A{ } class myFactory { public static factory function() { return new A(); } } $instance = myFactory::factory();