博主是三线省会城市的苦逼技术开发,主攻PHP方向,平时前后端语言也都有涉及,因为都是自学,上手就是框架,工作五年来基础补的不稳,换工作的时候苦不堪言,感觉一上来就问Ngnix的运行机制,php的被编译过程这类的问题,都很懵逼,在跳槽的过程中,整理一些面试过的问题,尽量回忆,答案时候来自己总结的,有不对的地方请大家指正。

基础篇:
1.请简单描述一下PHP?
PHP是一种服务器端脚本语言,最常用于Web应用程序。PHP附带了各种框架和CMS,可以帮助创建网站。面向对象,PHP类似于Java和C#等语言,这使得它易于学习和实现。一些基于PHP的流行应用程序是WordPress等。

2.PHP页面中包含文件的方式是什么?他们有什么不同?
包含文件函数有include(),require()两个函数
其中require()包含的文件如果不存在,则会返回一个致命的错误,并终止代码运行
而include()包含的文件如果不存在,则会返回一个错误,但是代码可以继续执行

3.PHP中GET,和POST方法的基本区别在哪?
GET方法中,最大只能传送1024个字节,但是POST方法可以传输大量的数据,而且GET方法比POST方法的安全性方面低很多

4.PHP中如何区别会话和Cookie?
会话就是SESSION,一般是存储在服务器上面的,而cookie是以文本的形式存储在用户的计算机上面的;
SESSION能够存储多个变量,并且可以持续保持活动状态。

5.header()函数在PHP中的作用?
该header() 函数的目的 是将原始HTTP标头发送到客户端浏览器。请记住,在发送实际输出之前必须调用此函数。例如,确保在使用此功能之前不打印任何HTML元素。

6.php如何通过头文件设置编码类型?

header( 'Content-Type:text/html;charset=utf-8 ');

7.php正则匹配(email,HTML,JS)?

代码示例:过滤所有JS

echo preg_replace(“/<script[^>]*?>.*?<\/script>/si”, “”, $script);

进阶篇:

1.简述一下php-fpm。

php-fpm即php-Fastcgi Process Manager.

php-fpm是 FastCGI 的实现,并提供了进程管理的功能。进程包含 master 进程和 worker 进程两种进程。master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。

2.Nginx与php-fpm如何结合运行?

Nginx与php-fpm的结合流程如下:

1.浏览器端输入网址链接;

2.浏览器发送请求到Nginx服务器端;

3.Nginx通过路由访问设置好的根目录下面的xxx.php文件;

4.同时加载Nginx的fast-cgi模式;

5.fast-cgi监听127.0.0.1:9000地址;

6.整个请求到达127.0.0.1:9000;

7.php-fpm监听9000端口,接收到请求,启用worker进程处理请求(php解释器);

8.phpfpm处理完成,返回给Nginx;

9.Nginx将处理结果返回给浏览器。

3.memcached、redis、mongodb的区别联系

这是3个场景完全不同的东西,但是又统称为Nosql技术。

1.memcached:单一键值对内存缓存的,做对象缓存无可替代的分布式缓存;

2.redis:是算法和数据结构的集合,快速的数据结构操作是他最大的特点,支持数据持久化;3.mongodb是bson结构、介于rdb和nosql之间的,更松散更灵活的,但是不支持事务,只用作非重要数据存储

4.简述一下Mysql的优化方向

这个问题很笼统,因为大部分的mysql优化要看业务逻辑,有的能水平分表,有的不能,有的能做索引,有的不能,所以回答这类问题,我们一般也选择比较笼统的回答如:

1.可以送mysql的类型上面优化,有些使用MyISAM作为数据表类型,便于快速读取;

2.mysql在创建表和字段的时候尽量根据业务逻辑选择合适的类型(int,smallint,varchar等);

3.对mysql的慢查询日志进行分析,看看那些表的查询速度较慢,这时候可以采用分表的方式,分表有多种办法,水平和垂直,一般的业务逻辑(账户流水,记录用户行为习惯等)都是垂直分表,也就是一个大表拆分成多个小表,可以按照用户ID求余分表,可以按照流水业务按年度、月度分表等

4.建立索引,对经常查询的字段建立对应的索引,可以明显提高查询的效率(顺便介绍下索引的原理回家很多印象分),优化查询语句,已添加索引的字段不能使用sql函数,会使索引无效。

5.读写分离

5.简述一下PHP的自动加载原理

说到自动加载,如果一直使用框架的同学可能有点懵逼,内心当中澎湃这,实例化?继承?等等等等,但是从基本的概念分析,我们说的是类的自动加载,也就是你在new的时候后面的引入文件。

在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件。 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件)。

这时候首先想到的可能是魔术方法__autoload()方法

function __autoload($class)
{
// 根据类名确定文件名
$file = $class . '.php'; if (file_exists($file)) {
include $file; // 引入PHP文件
}
}

使用的时候new一下就OK啦,但是在引入命名空间的时候这种方法过于简单,不利于程序的维护,这时候引入spl_autoload_register()函数,spl_autoload_register 函数的功能就是把传入的函数(参数可以为回调函数或函数名称形式)注册到 SPL __autoload 函数队列中,并移除系统默认的 __autoload() 函数,类似一个双向队列。

简单描述一下TP5中的自动加载实现

首先创建一个Index.php,加入位置在\app\index\controller\hello中

namespace app\index\controller\hello;

class Index
{
function __construct()
{
echo '<h1> Welcome To Home </h1>';
}
}

接着我们在创建一个加载类(不需要命名空间),它处于根目录\中:

class Loader
{
/* 路径映射 */
public static $vendorMap = array(
'app' => __DIR__ . DIRECTORY_SEPARATOR . 'app',
); /**
* 自动加载器
*/
public static function autoload($class)
{
$file = self::findFile($class);
if (file_exists($file)) {
self::includeFile($file);
}
} /**
* 解析文件路径
*/
private static function findFile($class)
{
$vendor = substr($class, 0, strpos($class, '\\')); // 顶级命名空间
$vendorDir = self::$vendorMap[$vendor]; // 文件基目录
$filePath = substr($class, strlen($vendor)) . '.php'; // 文件相对路径
return strtr($vendorDir . $filePath, '\\', DIRECTORY_SEPARATOR); // 文件标准路径
} /**
* 引入文件
*/
private static function includeFile($file)
{
if (is_file($file)) {
include $file;
}
}
}

最后,将 Loader 类中的 autoload 注册到 spl_autoload_register 函数中:

include 'Loader.php'; // 引入加载器
spl_autoload_register('Loader::autoload'); // 注册自动加载 new app\index\controller\hello\Index(); // 实例化未引用的类

2019-中小型公司PHP面试题目记录(附带答案)的更多相关文章

  1. 【转】asp.net c# 网上搜集面试题目大全(附答案)

    asp.net c# 网上搜集面试题目大全(附答案) http://www.cnblogs.com/hndy/articles/2234188.html

  2. iOS技能 - 最新美团、百度、腾讯、头条、阿里 面试题目记录

    关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教.主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧. 美团 一面 1.简历上写的项目问了一遍,然 ...

  3. 一些公司的面试题目 U3D

    #include <iostream> using namespace std; int main() { int N; while (cin>>N&&N> ...

  4. asp.net c# 网上搜集面试题目大全(附答案)

    1.String str=new String("a")和String str = "a"有什么区别? String str = "a"; ...

  5. Java基础概念性问题整理,面试题型整理,附带答案详解供参考,首次整理!

    题目目录 Java基础 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建对象的几种方式 7. ...

  6. java常见面试题目(一)

    在大四实习阶段,秋招的时候,面试了很多家公司,总结常见的java面试题目:(答案可以自己百度) 1.你所用oracle的版本号是多少? 2.tomcat修改8080端口号的配置文件是哪个? 3.myb ...

  7. 网上找的hadoop面试题目及答案

    1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式全分布式模式2. 单机(本地)模式中的注意点? 在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM ...

  8. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

  9. C语言经典面试题目(转的,不过写的的确好!)

    第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...

随机推荐

  1. JAVA WEB项目中生成验证码及验证实例(附源码及目录结构)

    [我是一个初学者,自己总结和网上搜索资料,代码是自己敲了一遍,亲测有效,现将所有的目录结构和代码贴出来分享给像我一样的初学者] 作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计 ...

  2. instrument(2)

    学习了instrument之后试着自己写点东西,上一篇的例子中使用的是asm,毕竟是面向字节码的,api还是比较复杂的.其实有时候的需求很简单,无非就是看下类里的方法啊之类的.javassist是基于 ...

  3. bzoj3811 玛里苟斯

    分三种情况讨论 k=1时,对于每一位而言,只要有一个数这一位是1,那么这个就有0.5的概率是1,选他就是1,不选就是0,有第二个的话,在第一个选或不选的前提下,也各有0.5的几率选或不选,0和1的概率 ...

  4. 深度学习与自动驾驶领域的数据集(KITTI,Oxford,Cityscape,Comma.ai,BDDV,TORCS,Udacity,GTA,CARLA,Carcraft)

    http://blog.csdn.net/solomon1558/article/details/70173223 Torontocity HCI middlebury caltech 行人检测数据集 ...

  5. 从一亿个ip找出出现次数最多的IP(分治法)

    /* 1,hash散列 2,找到每个块出现次数最多的(默认出现均匀)—–>可以用字典树 3,在每个块出现最多的数据中挑选出最大的为结果 */ 问题一: 怎么在海量数据中找出重复次数最多的一个 算 ...

  6. 使用jdbc拼接条件查询语句时如何防止sql注入

    本人微信公众号,欢迎扫码关注! 使用jdbc拼接条件查询语句时如何防止sql注入 最近公司的项目在上线时需要进行安全扫描,但是有几个项目中含有部分老代码,操作数据库时使用的是jdbc,并且竟然好多都是 ...

  7. 解决tomcat部署项目中碰到的几个问题

    在tomcat上部署项目并进行测试,经常会碰到各种问题.在不同的操作系统上部署,对问题的解决也会有一些差异. 1 发现问题 1.1 项目部署 先将项目达成war包,放到tomcat的webapps目录 ...

  8. Mybatis框架的简单运用

    一.配置流程 1.流程示意图(通过XML映射文件实现): 2.流程: 2.1 导入包: 2.1.1 下载包 数据库驱动包(本文以MySQL为例):https://mvnrepository.com/a ...

  9. 深入浅出—Redis集群的相关详解

    前言: 这篇文章主要介绍了Redis集群的相关,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 注意!要求使用的都是redis3.0以上的版本,因为3.0以上增加了red ...

  10. flex 布局实现固定头部和底部,中间滚动布局

    关键词:display: flex,flex: 1,  overflow-y: scroll; 实现:head 和footer 固定,中间body多了滚动,少了撑满: head和footer宽度根据内 ...