面试
张罗丰
这个作者很懒,什么都没留下…
展开
-
面试-mysql篇-mysql锁解决高并发
利用Mysql的锁来解决高并发的问题,先看没有利用事务的时候并发的后果创建库存管理表CREATE TABLE `storage` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `number` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1创建订单管理表CREATE TABLE `or原创 2020-05-14 14:46:38 · 559 阅读 · 1 评论 -
面试-Redis篇-Redis有序集合实现多字段排序
排行榜需求:根据分数进行排序,分数相同时根据时间并列排序。根据分数排序很容易实现:正序$redis = Yii::$app->redis->zrange($key,$start,$end,true);//倒序$redis = Yii::$app->redis->zrevrange($key,$start,$end,true);分数$value相同时,根据时间先后进行排序:$time = $max - time();将分数与时间相对值进行拼接..原创 2020-05-14 10:58:49 · 1491 阅读 · 1 评论 -
面试-PHP篇-workman和swoole区别和异同
workerman和swoole在现阶段很受争议,有时间你得认识认识,不然你就不是混php圈子的。swoole是使用C语言实现的socket通信框架,workerman则是使用纯php实现的socket框架,二者进程模型上也存在很多的不同。先说下swoole的进程模型,看一下以下解析图。master进程这个进程比较复杂,也是我认为最核心的进程,这是一个包含多线程的进程,分别是一个主线程和n个reactor线程(数量可以配置)。其中,主线程用于accept新的连接,然后评估一下每个re.原创 2020-05-13 17:23:40 · 3816 阅读 · 1 评论 -
面试-PHP篇-Nginx实现高并发和常见的优化手段
面试题:Nginx 是如何实现并发的?为什么 Nginx 不使用多线程?Nginx常见的优化手段有哪些?502错误可能原因有哪些?面试官心理分析主要是看应聘人员的对NGINX的基本原理是否熟悉,因为大多数运维人员多多少少都懂点NGINX,但是真正其明白原理的可能少之又少。明白其原理,才能做优化,否则只能照样搬样,出了问题也无从下手。懂皮毛的人,一般会做个 Web Server,搭建一个 Web 站点;初级运维可能搞个 HTTPS 、配置一个反向代理; 中级运维定义个 upstream、写个正原创 2020-05-13 13:48:53 · 723 阅读 · 0 评论 -
面试-PHP篇-依赖注入和控制反转
什么是依赖注入?IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection,简称DI)。当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。举个简单的例子:(1)原始社会里,几乎没有社会分工。需要斧子的人(调原创 2020-05-13 17:24:15 · 644 阅读 · 0 评论 -
面试-mysql篇-分区分表
首先采用Mysql存储千亿级的数据,确实是一项非常大的挑战。Mysql单表确实可以存储10亿级的数据,只是这个时候性能非常差,项目中大量的实验证明,Mysql单表容量在500万左右,性能处于最佳状态。针对大表的优化,主要是通过数据库分库分表来解决,目前比较普遍的方案有三个:分区,分库分表,NoSql/NewSql。实际项目中,这三种方案是结合的,目前绝大部分系统的核心数据都是以RDBMS存储为主,NoSql/NewSql存储为辅。分区首先来了解一下分区方案。分区表是由多个相关的底层表实现的。原创 2020-05-13 09:50:58 · 826 阅读 · 0 评论 -
面试-mysql篇-SQL优化
有时候我们会遇到:在查询sql的时候,假如有100w条数据,会出现慢sql告警,这个时候你就应该到处sql日志来查找原因了。这里很有可能的主要原因就是没有命中索引和没有分页处理(原因有很多种,主要分析你的日志)。那接下来我们就得去优化sql了。如何优化呢?下面我们来谈谈有关的问题。一、从sql优化入手谈到sql性能优化,那我们就离不开谈到大数据量和并发数,MySQL没有限制单表的最大记录数,它只是取决于操作系统对文件大小的限制。看表:从表中我们可以看出,如果单表行数超过500万行或.原创 2020-05-13 09:40:11 · 566 阅读 · 1 评论 -
面试-mysql篇-慢查询优化
这一篇mysql优化是注重于查询优化,根据mysql的执行情况,判断mysql什么时候需要优化,关于数据库开始阶段的数据库逻辑、物理结构的设计结构优化不是本文重点,下次再谈查看mysql语句的执行情况,判断是否需要进行优化当感觉操作数据库查询语句速度变慢,不符合生产效率要求时,可按照以下步骤进行查看1、 慢查询的开启与捕获,查看可能是哪些SQL语句造成的查询速度慢2、 explain+SQL语句3、 show profile分析SQL语句在服务器内执行细节和生命周期情况4、 通过以上三个步原创 2020-05-13 09:30:49 · 1970 阅读 · 0 评论 -
面试-mysql篇-提高mysql千万级数据SQL查询优化30条
看看你用到了哪些:1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=03.应尽量避免在 where 子句中使用!=或<>操作符原创 2020-05-12 17:18:57 · 205 阅读 · 0 评论 -
面试-PHP篇-php.ini配置文件参数优化
用于生产环境中的PHP需要对其进行优化,让PHP自身发挥更好的性能,除了写好PHP代码,还要配置好php-fpm以及php.ini调优。本文从内存、OPcache、上传、会话以及安全等方面讲解php.ini的配置调优。内存优化运行 PHP 时需要关心每个 PHP 进程要使用多少内存,php.ini 中的memory_limit设置用于设定单个 PHP 进程可以使用的系统内存最大值。这个设置的默认值是 128M,这对于大多数中小型 PHP 应用来说或许合适,不过,如果运行的是微型 PHP 应用,可.原创 2020-05-12 11:30:33 · 528 阅读 · 0 评论 -
面试-PHP篇-nginx搭建及加固
Nginx安装及配置Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务安装我是用的环境是centos 7,系统默认的yum源没有nginx,找到一个使用nginx官方源地址首先建立nginx的yum仓库,执行下面的命令sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarc原创 2020-05-12 10:27:31 · 635 阅读 · 1 评论 -
面试-PHP篇-高精度计算问题
从事金融行业的PHPer,资金运算频繁,稍不留神,用户资金可能损失几十万,甚至更可怕......直接上实例吧:javascript0.1 + 0.2 为啥不等于 0.3 ? (正确结果:0.30000000000000004)0.8 * 7 为啥不等于 5.6 ? (正确结果:5.6000000000000005)PHPvar_dump(intval(0.58 * 100));正确结果是 57,而不是 58浮点运算惹的祸其实这些结果都并非语言的 bug,但和语言的实现原理原创 2020-05-12 09:36:22 · 164 阅读 · 0 评论 -
面试-PHP篇-yield
yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低。yield生成器允许你 在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组。对比:function gettime($num) { $data=[]; for($i=0;$i<$num;$i++) { $data[] = time(); } ret..原创 2020-05-11 17:47:39 · 153 阅读 · 0 评论 -
面试-PHP篇-trait
自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。traits 与 interfaces 区别 及 traits 解决了什么痛点?知乎一个有趣的比喻:你可以把trait当作是多继承的一种变种,是一种加强型的接口,比如当你需要定义一个car的class,此时你需要实现vehicle定义的接口,比如必须有引擎,有外壳这些,但你这时会发现每个都自己去实现是不是太复杂了?比如对你而言引擎的实现你并不关心,你只要买一个用就好了,你比较在意汽车的外形,那么这时候就用到了trait,原创 2020-05-11 17:22:29 · 348 阅读 · 0 评论 -
面试-PHP篇-foreach、while、for性能比较
一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。那么它们在操作和性能上存在什么差别,通常使用那种方法比较好。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间:测试平台:CPU:P-M 725内存:512M硬盘:40G 5400转OS:Windows XP SP2WEB:apache 2.0.54php5.0.4测试代码:<?php/* * @ Author: Lilov * @ Ho..原创 2020-05-11 17:03:52 · 449 阅读 · 0 评论 -
面试-PHP篇-PHP-FPM多进程模型
PHP中的“进程”系列这个系列会分几个部分,从PHP-FPM进程模式起,到Linux进程,最后回到PHP本身谈一谈如何设计一个PHP的进程池。整个系列会氛围大致5个主要部分,分别是:①:PHP-FPM的多进程模型②:Linux进程介绍③:PHP中的多进程④:进程间通讯⑤:PHP的进程池设计此篇为系列第一篇:PHP-FPM的多进程模型。那么,我们谈论PHP-FPM多进程模型的时候,作为PHPer的你,可能需要先看看下面一些关于PHP-FPM的多进程模型,是否都有所了解①:PHP-FPM原创 2020-05-11 16:43:58 · 515 阅读 · 0 评论 -
面试-PHP篇-构造函数和析构函数
PHP5可以在类中使用__construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。class Car { function __construct() { print "构造函数被调用\n"; }}$car = new Car(); //实例化的时候 会自动调用构造函数__construct,这里会输出一个字符串在子类中如果定义了__construct则不会调用父类的__construc原创 2020-05-11 15:19:21 · 153 阅读 · 0 评论 -
面试-PHP篇-传值和传引用
传值:在php中传值的意思相当于复制,我将你的值复制给我,我可以随意改变复制之后的值,对你是不会产生影响的。 function test1() { $a = 1; $b = $a; echo $b.'<br>'; //1 $b = 2; echo $a .'<br>'.$b; //1 2 }// 解释:将a的值赋给b,改变b的值,a的值不受影响。传引用:在php中传引用用‘&’符号,是相当于我不仅将你的值赋给我,还将你的内存地址原创 2020-05-11 15:02:27 · 191 阅读 · 0 评论 -
面试-PHP篇-cookie和session
面试-PHP篇-cookie和session原创 2020-05-11 14:10:57 · 338 阅读 · 0 评论 -
面试-PHP篇-CGI、Fastcgi、PHP-FPM的详细介绍与之间的关系
一:CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的CGI(Common Gateway Interface),公共网关接口,它是Web服务器与外部应用程序(CGI程序)之间传递信息的接口标准。如请求/index.html,那么web server会去指定目录下找到这个文件(如果存在的话)发送给浏览器,这里分发的是静态数据。那么,请求的是/index.php的时候,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给P原创 2020-05-08 17:52:10 · 323 阅读 · 0 评论 -
面试-算法篇-PHP快速排序
function quickSort($arr){ $count = count($arr); //统计出数组的长度 if ($count <= 1) { // 如果个数为空或者1,则原样返回数组 return $arr; } $index = $arr[0]; // 把第一个元素作为标记 $left = []; //定义一...原创 2020-05-08 16:54:54 · 135 阅读 · 0 评论 -
面试-算法篇-PHP冒泡排序
function bubbleSort($arr){ $count = count($arr); //统计出数组的长度 for ($i = 1; $i < $count; $i++) { //控制需要排序的轮数,该例子共需要比较10轮 for ($j = 0; $j < $count - $i; $j++) { //控制每一...原创 2020-05-08 16:44:32 · 132 阅读 · 0 评论 -
面试-网络篇-HTTP常见面试题
Http与Https的区别:HTTP 的URL 以http://开头,而HTTPS 的URL 以https://开头 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 标准端口是80 ,而 HTTPS 的标准端口是443 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层 HTTP 无法加密,而HTTPS 对传输的数据进行加密 HTTP无...原创 2020-05-08 16:23:23 · 380 阅读 · 0 评论 -
面试-网络篇-一次完整的HTTP请求所经历的7个步骤
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:1. 建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有...原创 2020-05-08 15:04:27 · 637 阅读 · 0 评论 -
面试-网络篇-TCP的三次握手与四次挥手理解及面试题
PHP面试原创 2020-05-08 14:19:17 · 272 阅读 · 1 评论