PHP面试总结-2

2 篇文章 0 订阅
1 篇文章 0 订阅
本文总结了一次PHP面试经历,包括面试的公司、暴露的问题及提升方案。重点回顾了PHP基础题,如引用、分页计算、日期处理、正则表达式应用、jQuery操作和SQL查询,还涵盖了Linux基础命令和性能优化话题。
摘要由CSDN通过智能技术生成

第二次面试的公司是一家游戏公司,总公司在上海,公司的办公室在酒店里,挺不错的。我对这家公司比较满意,同时也很希望进入这家公司。进入公司后,首先是在人事妹子那拿了份面试题和面试需要填写的资料填了。 面试题都是十分简单的PHP题目,但是由于几乎我半年没碰PHP了,我答得十分不好(作为一个写了两年PHP的我,羞愧捂脸)。

面试的公司

上海邑世游戏公司

面试中体现的问题

  • 基础知识不足

解决和提升的方法

  • 过一下基础知识,同时兼顾刷下常见的面试题目

面试官问的问题

面试我的是一个比较年轻的哥们,比较实在,问的问题都是根据做的面试题来的。

PHP基础题1:

$a = 10;
$b = &a;
++a;
unset($a);
echo $b;
11

这里考到了PHP中的引用,和unset函数对引用操作的问题。首先需要明白,PHP中的引用并不等价与C中的指针 unset 函数对引用的操作仅仅是断开了引用和值之间的联系,这并不意味这变量中的内容被销毁了。所以题 中的变量 a 的内容经过 unset 操作并没有被销毁。所以 $b 的值为 11 。

PHP基础题2:

假设从数据库中读取总共有 $total 条记录, 每一页有 InterviewTwo_3a9d279267d62d5e5472a144f36a86feb31dbed8.png 条记录,请问总共要分多少页?

$pages =

这道题考的是简单的分页计算,答案是:

$pages = $total%$perpage == 0 ? (int)($total/$perpage):(int)($total/$perpage+1);

PHP基础题3:

通过给定的年份和月份,计算出该年该月的最后一天的日期。

function DateofYearMonth($year,$month){
  $date = 
  return $date;
}

这道题主要考的PHP对日期的操作,可以使用 date 和 strtotime 函数来实现,思路是

  • 首先得到该年该月的第一天
  • 然后将上面的结果加上一个月,再减去一天得到该年该月的最后一天的日期
function DateofYearMonth($year,$month) {
  $firstdate = date("Y-m-01",strtotime("$year-$month"));
  return date('Y-m-d',strtotime("$firstdate+1 month - 1 day"));
}

PHP基础题4:

匹配并输出以下字符串中的所有数字, 'Abc_37_jk_3'

该题主要是考了PHP中的正则表达式的知识。可以使用 preg_match 实现

$str = 'Abc_37_Fkj_3';
preg_match('/.*_(\d{2})_.*(\d)$/',$str,$matches);
$matches = array_slice($matches,1);
var_dump($matches);

PHP基础题5:

使用jquery写出一段让一点击相应行的删除按钮就删除相应的行的效果。

<html>
  <table class="example_table">
    <tr> <td class="tb">column 1</td> <td><button class="del"> 删除 </button> </td></tr>
    <tr> <td class="tb">column 2</td> <td><button class="del"> 删除</button> </td></tr>
    <tr> <td class="tb">column 3</td> <td> <button class="del"> 删除 </button> </td></tr>
  </table>
</html>

这里主要是考察了jquery的基本知识点,使用如下代码就能达到这种效果。

<html>

  <table class="example_table">
    <tr> <td class="tb">column 1</td> <td><button class="del"> 删除 </button> </td></tr>
    <tr> <td class="tb">column 2</td> <td><button class="del"> 删除</button> </td></tr>
    <tr> <td class="tb">column 3</td> <td> <button class="del"> 删除 </button> </td></tr>
  </table>
  <script type="text/javascript">
      $(".del").click(function() {
     $(this).parents("tr")[0].remove();
})
  </script>
</html>

这道题其实主要涉及到jquery的选择器的相关和一些基本的dom操作函数,只要了解这两个知识点的话,这道题基本就没什么问题了。

PHP基础试题6:

假设数据库中有两张表,一张users表存储游戏用户的用户信息,一张fees表存储游戏用户在游戏中的付费记录 。两张表的字段为:

InterviewTwo_ef1c1c089228af3eef95e4d8acbe5d666d25550b.png

那么请问如何查出在游戏中消费最多的10个用户的用户名和消费总金额,请写出相应的 SQL 语句。

这道题主要是考察 SQL 的基本知识。由于游戏公司的数据库通常比较大,所以相对来说比较注重于应聘者的数据库基础,以及 数据库优化方面的知识。 可以使用如下的SQL语句达到目的。

select userid,sum(costs) as total_costs from users,fees where users.userid = fees.uid group by uid order by total_costs desc limit 10;

这里也要同时考虑下查询语句的性能问题,尽量避免 join 语句和 SQL 语句中尽量涉及比较少的表字段。

Linux基础题:

写出你常使用的Linux命令,越多越好。

-文件操作
ls    --查看文件夹中的文件
dd    --复制和转换文件
mv    --移动文件
cp    --复制文件
mkdir --创建文件夹
touch --创建文件
find  --查找文件
tree  --查看文件系统的结构
rm    --删除文件
ln    --创建文件链接
cat   --查看文件内容
less  --查看文件的内容
more  --查看文件的内容
pwd   --显示当前的文件路径
vim   --文件编辑
emacs --文件编辑


-磁盘管理
fdisk --磁盘分区
gdisk --磁盘分区
df    --查看磁盘空间和状态
du    --计算文件在磁盘中占用的空间

--进程管理
top   --实时查看系统进程状态
htop  --实时更加强大的系统进程查看器
ps    --查看系统进程信息
jobs  --查看当前会话的进程信息
fg    --将当前会话的后台进程唤醒到前台
bg    --将当前会话的前台进程隐藏到后台执行
kill  --杀死进程

--网络管理
ping     --通常用来测试网络是否联通
netstat  --查看网络连接情况
nmcli    --无线网络管理
pppoe    --拨号上网工具


--帮助工具
man  --查看相关手册
info --查看比较详细的手册

--文本处理工具
grep    --正则表达式匹配
awk     --文本模式搜索和处理工具
sed     --文本过滤和转化的流处理器

--系统管理
crontab --定时化任务

这道题主要考察的是Linux基础知识。这道题是一道很灵活的题,但是面试官可能会根据你写的常用命令,问你一些这些命名的使用场景,或者需要结合多个命令来完成一个任务的场景。所以要在这一块表现的好一些。最好都 好好的准备一下。

性能优化和架构题

公司有个活动页面,现在需要统计页面访问数,请谈一谈你的思路。

  • 我之前的想法是,根据ip来统计页面的访问数,实现方法为:写个脚本读写web服务器的记录,统计记录中的不同ip的总数。但是我没考虑到活动页面是实时性的,如果采用这个方法,会造成磁盘的io很高,所以这个方法不能采取。
  • 合适的方法是: 在前端采用异步的方式请求一个接口,然后后台提供一个相关的计数器接口。同时异步请求不会直接请求web服务器,而是首先请求web服务器的反向代理服务器层。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值