PHP
程序员面试那点事儿
互联网大厂校招、社招面试官,多年互联网大厂工作经验,分享校招、社招面试题、职场相关内容,互相交流经验
展开
-
Swoole高级一
进程内存:存放数据上下文环境:存放系统资源状态和系统状态ipcs -m查看共享内存php web开发的时候需要依赖nginx这样的web服务器并且依赖于fpm的解析的,fpm也是一个多进程的解释器,当一个请求过来的时候,fpm创建一个进程来处理请求,这样的话很大开销都在创建和销毁进程...原创 2018-04-06 20:35:50 · 442 阅读 · 0 评论 -
抢购的处理逻辑
<?php/** * 抢购的处理逻辑 */include 'init.php';$TEMPLATE['type'] = 'buy';$TEMPLATE['pageTitle'] = '抢购';$active_model = new \model\Active();$goods_model = new \model\Goods();// 参数的处理$active_i...转载 2018-04-11 10:30:42 · 734 阅读 · 0 评论 -
模块、路由与获取请求参数
1 命名空间 可以进入Directories2 多模块 在application可以建立多个模块,模块挺大的,不要一个功能一个模块3 Postman的收藏使用4 三种URL的访问 不够灵活,不够语义化 路由在route.php 路由两种编写方式:配置式和动态注册式 Route::rule('hello','sample/Test/hello');原先pathinfo模式不能用了 ...原创 2018-04-07 10:43:51 · 469 阅读 · 0 评论 -
PHP+Ajax实时表格编辑
第1章 Ajax运用场景分析及课前准备 1.1 Ajax的应用场景 1 异步搜索过滤内容数据 2 表单的异步验证 3 异步加载内容数据 4 低调处理一些数据逻辑 1.2 Ajax的特点及实现思路 主要特点: 1 在不刷新当前页面的前提下,与服务器进行异步交互 2 ...原创 2018-04-06 16:14:13 · 720 阅读 · 0 评论 -
环境、工具与准备工作
项目命名服务器程序Zerg客户端小程序 ProtossCMS TerranPHPStrom常用快捷键https://www.cnblogs.com/xp796/p/5718321.htmlTP5层次结构PHP断点调试自己装Xdebug缺点:太长 URL路径暴露出了服务器文件结构 不够灵活 不能很好的支持URL的语义化...原创 2018-04-06 14:57:03 · 160 阅读 · 0 评论 -
不同的时代,不同的Web
整体架构 服务端向客户端和CMS提供接口,CMS面对管理员的客户端CMS的两个功能:1 基础数据的增删改查,比如添加商品,删除商品类目2 特殊操作,比如我们要实现的发送微信消息三端分离 强调一下CMS也是一个客户端,不要和服务端放一起项目特点通用、适合互联网公司的、又良好结构的产品三端分离基于REST API基于Token令牌管理权限 登陆判断系统权限及分权,作用域一套架构适配IOS、Andr...原创 2018-04-06 12:11:14 · 354 阅读 · 0 评论 -
PHP面试题
问题:请用最简单的语言告诉我PHP是什么?回答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站服务脚本语言问题:什么是MVC?回答:MVC是由Model(模型)、view(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的代码。Model:数据信息存取层。View:view层负责将应用的数据以特定的方式展示在界面上。Contr...原创 2018-03-27 13:14:43 · 376 阅读 · 0 评论 -
原生JS给SELECT添加OPTION选项
var cateList = eval(ajaxResult); cateField.innerHTML = ''; for(var idx in cateList) { var option = document.createElement("option"); option.value = cateList[idx].id; option.innerHTML ...转载 2018-04-05 09:47:05 · 9090 阅读 · 0 评论 -
闭包
什么是闭包?什么是匿名函数?估计很多php程序员对这两个名词傻傻分不清,或者认为闭包就是匿名函数,匿名函数就是闭包。匿名函数:就是没有函数名的函数。闭包: 是指有权访问另一个函数作用域中变量的函数这么说可能大家还是 不明白,也不会真的理解。先看两个其他的概念函数声明函数表达式解析器在向执行环 境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用...转载 2018-04-04 21:21:55 · 183 阅读 · 0 评论 -
跨域
我去面试360的时候,面试官问我了不了解jsonp。我说知道,是用来做跨域的,然后他就问我知不知道跨域有哪些方式。我一个做服务端的,我就直接说,工作中没有用到过。然后回来就恶补一下。跨域问题,首先要知道一个东西就是“同源策略”。域名(主域名,子域名),协议,端口全部相同视为同源!现代浏览器允许跨域引用css,style,script等文件,但是只能读。限制:页面中不能使用ajax请求不同源中的数据...转载 2018-04-04 21:21:10 · 171 阅读 · 0 评论 -
原生ajax
虽然是php程序员,但是面试中还是有很大可能性遇到“用原生的js写一个ajax请求,要求兼容不同的浏览器”这样的问题。如果不提前准备一下,90%以上估计是要挂的。下面来复习一下吧。ajax的核心就是XMLHttpRequest对象,简称XHR。发送ajax请求的步骤第1步就是创建ajax对象IE7+,Firefox,Opera, Chrome, Safari都支持原生的XHR对象var xhr =...原创 2018-04-04 21:20:18 · 207 阅读 · 0 评论 -
2 组件化与模块化
2.1 框架加载和运行流程testdrive/ index.php Web 应用入口脚本文件 index-test.php 功能测试使用的入口脚本文件 assets/ 包含公开的资源文件 css/ 包含 CSS 文件 images/ ...原创 2018-03-20 17:21:02 · 539 阅读 · 0 评论 -
1 引言
1.1 Yii简介 支持特性包括:MVC、DAO/ActiveRecord、l18N/L10N、caching、AJAX支持、用户认证和基于角色的访问控制、脚手架、输入验证、部件、事件、主题化以及Web服务等 1.2 本文内容与结构 组件化与模块化:对Yii的基于组件和事件驱动的编程模式的基础类(CComponent)进行分析;对组件化和模块化的工作原理进行分析;对web...原创 2018-03-20 14:35:17 · 191 阅读 · 0 评论 -
composer.json 中的各个属性字段详解
1、name包的名字。由供应方(vendor)名和项目名组成,用 / 分隔。在发布包的时候需要填。2、description对包的一个简短描述,通常是一行的长度。在发布包的时候需要填。3、version包的版本。格式必须是 X.Y.Z,选择性后缀:-dev、-alphaN、-betaN、-RCN。4、type包的类型,默认为 library。包类型用于定制安装逻辑。如果你的包的安装需要一些特殊的逻...转载 2018-04-28 09:49:16 · 3792 阅读 · 0 评论 -
发送端口25,465,587端口疑问解答
25端口(SMTP):25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。如今绝大多数邮件服务器都使用该协议。当你给别人发送邮件时,你的机器的某个动态端口(大于1024)就会与邮件服务器的25号端口建立一个连接,你发送的邮件就会通过这个连接传送到邮件服务器上,保存起来5种角色分别是:客户端访问服务器角色(CAS)、集线器传...转载 2018-05-03 17:51:16 · 37367 阅读 · 1 评论 -
邮箱smtp服务器及端口收集
网易 163邮箱 POP3:pop.126.com SMTP:smtp.126.com SMTP端口号:25 126邮箱 POP3:pop.126.com SMTP:smtp.126.com SMTP端口号:25新浪 免费邮箱 POP3:pop.sina.com SMTP:smtp.sina.com SMTP端口号:...转载 2018-05-03 17:45:54 · 36623 阅读 · 0 评论 -
PHPStorm IDE 快捷键(MAC)
⌘——Command⌃ ——Control⌥——Option/Alt⇧——Shift⇪——Caps Lockfn——功能键就是fn编辑Command+alt+T 用 (if..else, try..catch, for, etc.)包住Command+/ 注释/取消注释的行注释Command+alt+/ 注释/取消注释与块注释alt+↑ 向上选取代码块alt+↓ 向下选取代码块Command+al...转载 2018-04-28 17:52:59 · 409 阅读 · 0 评论 -
php 删除cookie方法详解
我们先来看下相关cookie的机制。复制代码代码如下:bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )要删除cookie需要确保它的失效期是在过去,才能触发浏览器的删除机制。下面的例子说明了如何删除刚才设置的cookie:复...转载 2018-03-09 17:33:03 · 5949 阅读 · 0 评论 -
数据类型
1. 布尔类型面试题1:php中,哪些值转换为Boolean类型会是false?(请牢记,无论是在面试,还是平时工作都用得到)数字0浮点数0.0空字符串‘’字符串‘0’布尔值false空数组arry()null2. 数组数据需要注意的地方就是超全局数据,尤其是$_SERVER$_SRVER['SERVER_ADDR']; // 当前运行脚本所在的服务器的 IP 地址。$_SRVER['SERVE...转载 2018-04-05 10:08:22 · 103 阅读 · 0 评论 -
php发送请求函数
function https_request($url,$data=null) { //初始化curl $curl = curl_init(); //curlopt_url curl_setopt($curl,CURLOPT_URL,$url); //curlopt_ssl_verifypeer禁止 CURL ...原创 2018-05-02 12:02:50 · 517 阅读 · 0 评论 -
php中判断某个IP地址是否存在范围内
看到网上很多各式可以ip地址的范围的方法,有用正则的,还有字符串截取的。自己试了很多感觉不怎么靠谱,一是有些不舍很准确,二是太伤性能了,又复杂。然后搜了很多资料,才找到个性能比较好的简单的IP地址范围判断的方法,在这里作个笔记记录一下。IP地址库的话,纯真的不错:http://www.cz88.net/也可以使用网上接口来使用,但是有问题。你不能频繁的去用for循环来去访问,不然会被接口屏蔽掉淘宝...转载 2018-04-12 21:51:42 · 561 阅读 · 0 评论 -
自动加载机制
面试题1. (奇虎360) - 谈谈php的自动加载机制都说了,是自动加载,并不是那种古老的方式,每一个需要引入文件的时候都使用include,require。而是我们不需要手动的去引入这个类,而是当我们用到的时候,程序会自己去寻找。一般会从当前文件寻找需要的类,如果当前文件没有这个类的话,就会触发__autoload()函数,可以理解为一个钩子函数。这个函数的内部逻辑使我们自己定义的,我们可以根...转载 2018-04-08 23:54:19 · 321 阅读 · 0 评论 -
面向对象
如果你有过php职位的面试经验,那么你有很大的可能被问过,或者现场写过“单例模式”。这个考点就是php的面向对象。面试题1:接口和抽象类的区别是什么?答:抽象类抽象类是一种不能被实例化的类 ,只能作为其他类的父类来使用 。抽象类是通过关键字abstract 来声明的。抽象类与普通类相似 ,都包含成员变量和成员方法 ,两者的区别在于 ,抽象类中至少要包含一个抽象方法,抽象方法没有方法体,该方法天生就...转载 2018-04-08 23:54:31 · 125 阅读 · 0 评论 -
内置函数
php的内置函数也是php面试常考的考点,主要是想通过内置函数了解面试者对php的使用面广不广,以及熟不熟悉。这一部分,只能靠读者,查阅php手册,并且多联系,记忆。本小节会给出一些常用的php内置函数时间函数data()strtotime()mktime()time()microtime()date_default_timezone_set()ip处理函数ip2long()long2ip()打印...转载 2018-04-08 23:54:42 · 124 阅读 · 0 评论 -
流程控制
面试题:请列出3种PHP数组循环操作的语法,并注明各种循环的区别?for循环for循环要求数组必须是索引数组,不能是关联数组foreach循环每次循环中,当前元素的值被赋给变量$value,并且把数组内部指针向后移动一步。所以下一次循环中会得到数组的下一个元素,直到数组的结尾才停止循环,结束数组的遍历。可以参考reset()函数while,list,each组合 $arr = array(1...转载 2018-04-08 23:55:04 · 104 阅读 · 0 评论 -
引用
引用先看一个面试题:$a = 111;$b = &$a; // 这里不是$b指向了$a,而是$a和$b指向了同一个地方$a = 222;var_dump($a);var_dump($b);1. 引用是什么?在php中,引用意味着用不同的名字访问同一个变量内容。和C语言的指针不一样,因为不能做php的引用不能做指针运算,并不是实际的内存地址。2. 引用传递// 题目1$a ...转载 2018-04-05 10:09:13 · 113 阅读 · 0 评论 -
php json_encode与json_decode详解及实例
一、json_encode()该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:?12$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr); 结果为?1{"a":1,"b":2,"c":3,"d":4,"e":5} &转载 2018-04-27 08:05:20 · 1222 阅读 · 1 评论 -
JSON 数据格式详解
JSON 语法是 JavaScript 语法的子集。JSON 语法规则JSON 语法是 JavaScript 对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JSON 名称/值对JSON 数据的书写格式是:名称/值对。名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"firstName" : "John"这很容易理解,等价于这条 JavaScrip...转载 2018-04-28 08:44:49 · 809 阅读 · 0 评论 -
301永久性重定向和302临时性重定向
什么是重定向?所谓重定向就是将网页自动转向重定向,即:301永久性重定向和302临时性重定向。实施301后,新网址完全继承旧网址,旧网址的排名等完全清零;实施302后,对旧网址没有影响,但新网址不会有排名。页面永久性移走(301重定向)是一种非常重要的“自动转向”技术。301重定向可促进搜索引擎优化效果从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法。当网站的域名发生变更后,搜索...转载 2018-04-28 09:08:34 · 7964 阅读 · 1 评论 -
PHP+Mysql实现读写分离
<?phpclass Db{ private $res; function __construct($sql) { $querystr = strtolower(trim(substr($sql,0,6))); //如果是select,就连接slave服务器 if($querystr == 'select') { $res=$this->slav...转载 2018-03-12 17:54:38 · 1055 阅读 · 0 评论 -
Zebra
美团点评集团统一使用的MySQL数据库访问层的中间件。主要提供对业务开发透明、读写分库、分库分表能力,并提供了端到端SQL监控的集成方案。 介绍 Zebra是一个基于JDBC API协议上开发出的高可用、高性能的数据库访问层解决方案,是美团点评内部使用的数据库访问层中间件。具有以下的功能点:配置集中管理,动态刷新 支持读写分离、分库分表 丰富的监控信息在CAT上...转载 2019-03-21 18:51:15 · 3598 阅读 · 0 评论 -
Spring入门
概述两个基本网址https://spring.io/ https://spring.io/projects/spring-framework1 什么是框架 Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的,但现在已经不止于企业应用 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架 --从大小和开销两方面而言,Sp...原创 2018-09-25 10:45:46 · 132 阅读 · 0 评论 -
java Thread和runnable的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中2. 通过实现Runnable接口,实例化Thread类 在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程。当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看一下...转载 2018-09-17 11:51:12 · 948 阅读 · 1 评论 -
php中数字0和空值的区别分析
作为一个合格的php程序员,一些基础知识是必须要知道的,例如0和空的区别,关于这个区别,下面就通过几个实例进行简单的分析,其中的道理,只可意会,不可言传,读者可以自己去慢慢体会了。 复制代码代码如下:<?php $test=0;if($test==''){ echo '<br />在php中,0即为空'; //被输出}if($test==='')...转载 2018-09-05 10:18:36 · 1435 阅读 · 0 评论 -
PHP中判断变量为空的几种方法小结
1. isset功能:判断变量是否被初始化说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_exists高4倍左右 复制代码代码如下:$a = '';$a['c'] = '';if (!isset($a)) echo '$a 未被初始化' . "";if (!isset...转载 2018-09-05 10:17:55 · 6565 阅读 · 0 评论 -
PHP中跳出循环break,continue,return,exit的区别
1. return 语句的作用 (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。 (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。 (3) return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。2. break ...转载 2018-09-05 10:10:12 · 4605 阅读 · 0 评论 -
用shell统计访问日志里每个ip访问次数
今天,要统计一个系统的每个ip访问次数,于是我找到该系统访问日志,并写脚本实现。访问日志情况:[root@qular ~]# cd /usr/local/nginx/logs/[root@qunlar logs]# head access.log 59.151.44.186 - - [15/Dec/2014:20:19:11 +0800] "POST http://ebws.travelsky.c...转载 2018-04-05 09:34:52 · 928 阅读 · 0 评论 -
php如何实现数组合并但键值相同的数组不互相覆盖?
数组合并array_merge($arr1,$arr2)和数组相加$arr1+$arr2的区别:数字索引数组:array_merge:合并生成的数组的索引统一从0开始,所以不存在覆盖的情况."+"操作符:不改变数字索引,如果索引已经存在,则跳过该元素.字符索引数组:array_merge:如果两个数组存在相同的键,后面的一个会覆盖前面的."+"操作符:如果两个数组存在相同的键,前面的一个会覆盖后面...转载 2018-04-05 09:32:38 · 8469 阅读 · 0 评论 -
第4章 Laravel框架使用的HTTP协议基础
4.1 HTTP发展与相关网络技术 4.1.1 HTTP发展 4.1.2 与HTTP协议相关的网络技术4.2 HTTP协议简介 4.2.1 HTTP协议工作流程 4.2.2 请求报文与相应报文结构简介...原创 2018-03-19 17:15:32 · 333 阅读 · 0 评论 -
第3章 Larevel框架中常用的PHP语法
3.1 组件化开发语法条件 3.1.1 命名空间 3.1.2 文件包含3.2 匿名函数 3.2.1 匿名函数的使用 3.2.2 Laravel框架中的应用3.3 PHP中的特殊语法 3.3.1 魔术方法 3.3.2 魔术常量3.4 反射3.5 后期静态绑定3.6 Laravel中使用的其他新特性 3.6.1 trait 3.6.2 简化的三元运算符...原创 2018-03-19 16:24:54 · 553 阅读 · 0 评论