
正文
php并发数据库笔试题 php 并发
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
PHP应聘笔试题
题目一:
?php
echo -10%3;
?
答案:-1。
考查:优先级。因为-的优先级比%求余的优先级低,也就是-(10%3)。
题目二:
print (int)pow(2,32);
答案:0
题目三:
//file1.php
?php
$a = '123';
?
//file2.php
?php
echo include('file1.php');
?
答案:1.
考查:返回值。因include()也是一个函数,有返回值。在成功时返回1,失败时返回错误信息。如果被包含的文件有return,则inculde()成功时返回该文件的`返回值。
题目四:
?php
$count = 5;
function get_count() {
static $count = 0;
return $count++;
}
++$count;
get_count();
echo get_count();
?
答案:1.
考查:static和++。因static $count,所以只在第一次调用get_count的时候对$count赋值为0,第二次再进来这个函数,则不会第二次赋值。其次就是return $count++和return ++$count了,前者先返回,后者先++再返回。
题目五:
?php
$arr= array(0 =1,'aa' =2,3,4);
foreach($arr as $key = $val){
print($key == 'aa' ? 5 : $val);
}
?
答案:5534.
考查:类型转换。因遍历数组第一次的时候,$key和aa的比较实际就是0和aa的比较,一个是int一个是string,这个时候会转换类型,将字符串转换为数字再与数字比较。所以0=='aa'就是0==0,所以为true,也就是输出5。虽然PHP是若类型语言,但是人家也有类型的好吗。
题目六:
?php
echo count (false);
$a = count ("567") + count(null)
+ count(false);
echo $a;
?
答案:2.
考查:count的用法。
因count()的官方解释“If the parameter
is not an array or not an object
with implemented Countable
interface, 1 will be returned.”.意思是说,如果不是数组或者对象的其他类型,返回1.那么这个值应该就是1+0+1了(boolen人家也是一个类型,虽然是讨厌的false)。NULL的意思是没有值,难道在计数函数中还能有1?
题目七:
?php
$arr = array(1,2,3);
foreach($arr as $val) {
$val += $val % 2 ? $val++ : $val--;
}
$val = 0;
print(join('',$arr));
?
答案:330。
考查:++和。
因foreach结束后的数组应该是array(3,3,7);最后给第三个元素赋值为0,所以就是330了。其中注意的是,如果有则是对原变量操作,如果没有,则是先生成一个新变量,然后给这个变量复制,最后操作的是这个新变量。
题目八:
?php
echo intval((0.1+0.7)*10);
?
答案:7。
考查:浮点数的概念。
因0.1+0.7=0.8 0.8*10=8 所以转换成整数后还是8?错!因为0.1+0.7=0.8是浮点数,0.8*10在数学计算中是正整数8,可是在计算机中它仍然是浮点数8,什么叫浮点数8?每一个看起来像整数的浮点数,其实都不是整数,比如这个8,它其实只是
7.9999循环,无限接近于8,转换成整数会舍弃小数部分,就是7喽。
题目九:
?php
ini_set('display_errors',0);
$arr = array(1=1,3=3);
$i = 2;
$a = 'test' . isset($arr[$i]) ?
$arr[$i] : $i;
请问$a的值是什么?
A、test B、NULL C、2 D、test2
?
答案:B。
考查:优先级 因“."的优先级高于三元运算符"?:"。所以程序其实报错了。会说$arr的索引2不存在。
题目十:
?php
$a = 3;
$b = 5;
if($a = 5 || $b = 7) {
$a++;
$b++;
}
echo $a . " " . $b;
?
A、6 8 B、6 6 C、2 6 D、1 6 E、4 6
答案:D。
考查:优先级,基础概念,++。因“="的优先级低于“||”,所以先逻辑判断再赋值。也就是($a = (5 || $b = 7))。所以,最后其实给a赋值了,$a等于1.
相关问答
Q1: 一道PHP题,请问谁能给解释一下?
?
function pathconvert($cur,$absp)//当前文件php并发数据库笔试题,目标路径
{
$cur=str_replace('\\','/',$cur);
$absp=str_replace('\\','/',$absp);
$sabsp=explode('/',$absp);
$scur=explode('/',$cur);
$la=count($sabsp)-1;
$lc=count($scur)-1;
$l=max($la,$lb);
for($i=0;$i=$l;$i++){
if($sabsp[$i]!=$scur[$i])
break;
}
$k=$i-1;
$path="";
for($i=1;$i=($lc-$k-1);$i++)
$path.="../";
for($i=$k+1;$i=($la-1);$i++)
$path.=$sabsp[$i]."/";
$path.=$sabsp[$la];
return$path;
}
$path=pathconvert("/home/web/test/a.php","/home/data/d.png");
echo $path;
?
Q2: 面试高级php工程师,一般会问到哪些问题
高并发大访问量的mysql优化,服务器优化?
字段建索引、主从数据库、读写分离、表分区、负载均衡。
linux的慢查询日志会记录mysql的超时查询sql语句,定期察看进行优化。
2.大访问量下秒杀模块程序怎么设计,如果使用mysql会有多卖的情况,就是订单超过库存。
将订单数据缓存到内存,如果用数据库直接崩掉,毫无悬念的。
3.缓存的使用
能用静态的用静态,不能静态的用内存缓存,例如memcache、redis,不能缓存的用数据库。
4.session可不可以跨域?怎么跨域?
将PHP session机制重写(PHP提供),将session存储在memcache或者数据库就可以跨域了。
另外session能以三种方式存储,文件、数据库、缓存。
5.了不了解非关系型数据库?
mongodb
6.会不会写shell脚本以及linux的操作
还会问一下时下流行的东西,比如做没做过微信开发,例如微信支付开发、APP移动开发,等等问题。
问的核心东西都是围绕这些转的,如果有笔试会让你写sql,php功能(例如冒泡排序等排序),还有逻辑题。
我当初面试了很多,这是一个我的面试经验的总结,纯手打忘采纳。
Q3: 急求6道PHP笔试题答案
2:我觉得第二题比较有意思,如果不缓存,用递归100就已经够大了
?php
$cache_ary = array(0=1 , 1=1);
$num = 1200;
function fib_cache($i){
global $cache_ary;
if($i == 1 || $i == 0 ){
return $cache_ary[$i];
}else if(isset($cache_ary[$i])){
return $cache_ary[$i];
}else{
$cache_ary[$i] = fib_cache($i - 1) + fib_cache($i - 2);
return $cache_ary[$i];
}
}
function fib_2($i){
if($i == 0 || $i == 1){
return 1;
}else{
return fib_2($i - 1) + fib_2($i - 2);
}
}
?
Q4: PHP中高级面试题 – 第三天
一、简述一下MongoDB的应用场景
mongodb 支持副本集、索引、自动分片,可以保证较高的性能和可用性。
更高的写入负载
默认情况下,MongoDB 更侧重高数据写入性能,而非事务安全,MongoDB 很适合业务系统中有大量 “低价值” 数据的场景。但是应当避免在高事务安全性的系统中使用 MongoDB,除非能从架构设计上保证事务安全。
高可用性
MongoDB 的复副集 (Master-Slave) 配置非常简洁方便,此外,MongoDB 可以快速响应的处理单节点故障,自动、安全地完成故障转移。这些特性使得 MongoDB 能在一个相对不稳定(如云主机)的环境中,保持高可用性。
数据量很大或者未来会变得很大
依赖数据库 (MySQL) 自身的特性,完成数据的扩展是较困难的事,在 MySQL 中,当一个单达表到 5-10GB 时会出现明显的性能降级,此时需要通过数据的水平和垂直拆分、库的拆分完成扩展,使用 MySQL 通常需要借助驱动层或代理层完成这类需求。而 MongoDB 内建了多种数据分片的特性,可以很好地适应大数据量的需求。
基于位置的数据查询
MongoDB 支持二维空间索引,因此可以快速及精确地从指定位置获取数据。
表结构不明确
在一些传统 RDBMS 中,增加一个字段会锁住整个数据库 / 表,或者在执行一个重负载的请求时会明显造成其它请求的性能降级。通常发生在数据表大于 1G 的时候(当大于 1TB 时更甚)。 因 MongoDB 是文档型数据库,为非结构货的文档增加一个新字段是很快速的操作,并且不会影响到已有数据。另外一个好处当业务数据发生变化时,是将不再需要由 DBA 修改表结构。
二、数据库设计经验,为什么进行分表?分库?一般多少数据量开始分表?分库?分库分表的目的?
1、为什么要分表
当一张表的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。
分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
2、分表的方案
做 mysql 集群,有人会问 mysql 集群,根分表有什么关系吗?虽然它不是实际意义上的分表,但是它启到了分表的作用,做集群的意义是什么呢?为一个数据库减轻负担,说白了就是减少 sql 排队队列中的 sql 的数量,举个例子:有 10 个 sql 请求,如果放在一个数据库服务器的排队队列中,他要等很长时间,如果把这 10 个 sql 请求,分配到 5 个数据库服务器的排队队列中,一个数据库服务器的队列中只有 2 个,这样等待时间是不是大大的缩短了呢?
linux mysql proxy 的安装,配置,以及读写分离
mysql replication 互为主从的安装及配置,以及数据同步
优点:扩展性好,没有多个分表后的复杂操作(php 代码)
缺点:单个表的数据量还是没有变,一次操作所花的时间还是那么多,硬件开销大。
三、简述一下数据库主从复制,读写分离
* 什么是主从复制
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;
* 主从复制的原理:
1.数据库有个bin-log二进制文件,记录了所有的sql语句。
2.只需要把主数据库的bin-log文件中的sql语句复制。
3.让其从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
* 主从复制的作用
1.做数据的热备份,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问频率,提高单机的I/O性能
3.主从复制是读写分离的基础,使数据库能制成更大 的并发。例如子报表中,由于部署报表的sql语句十分慢,导致锁表,影响前台的服务。如果前台服务使用master,报表使用slave,那么报表sql将不会造成前台所,保证了前台的访问速度。
* 主从复制的几种方式:
1.同步复制:所谓的同步复制,意思是master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。
2.异步复制:如同AJAX请求一样。master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。
3.半同步复制:master只保证slaves中的一个操作成功,就返回,其他slave不管。
这个功能,是由google为MYSQL引入的。
* 关于读写分离
在完成主从复制时,由于slave是需要同步master的。所以对于insert/delete/update这些更新数据库的操作,应该在master中完成。而select的查询操作,则落下到slave中。
php并发数据库笔试题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php 并发、php并发数据库笔试题的信息别忘了在本站进行查找喔。








