- 博客(46)
- 资源 (33)
- 收藏
- 关注
原创 面试-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 571 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 1521 1
原创 面试-PHP篇-依赖注入和控制反转
什么是依赖注入?IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection,简称DI)。当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。举个简单的例子:(1)原始社会里,几乎没有社会分工。需要斧子的人(调
2020-05-13 17:24:15 665
原创 面试-PHP篇-workman和swoole区别和异同
workerman和swoole在现阶段很受争议,有时间你得认识认识,不然你就不是混php圈子的。swoole是使用C语言实现的socket通信框架,workerman则是使用纯php实现的socket框架,二者进程模型上也存在很多的不同。先说下swoole的进程模型,看一下以下解析图。master进程这个进程比较复杂,也是我认为最核心的进程,这是一个包含多线程的进程,分别是一个主线程和n个reactor线程(数量可以配置)。其中,主线程用于accept新的连接,然后评估一下每个re.
2020-05-13 17:23:40 3964 1
原创 面试-Redis篇-Redis雪崩、穿透、击穿
面试官:关于Redis雪崩,穿透,击穿你是怎么理解的?Redis 雪崩:雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。解决办法:将缓存失效时间分散开,比如每个key的过期时间是随机,防止同一时间大量数据过期现象发生,这样不会出现同一时间全部请求都落在数据库层,如果缓存数据库是分布式部署,将热点数据均匀分布在不同Redis和数据库中,有效分担压力,别一个人扛。
2020-05-13 16:13:41 2744 3
原创 面试-PHP篇-Nginx实现高并发和常见的优化手段
面试题:Nginx 是如何实现并发的?为什么 Nginx 不使用多线程?Nginx常见的优化手段有哪些?502错误可能原因有哪些?面试官心理分析主要是看应聘人员的对NGINX的基本原理是否熟悉,因为大多数运维人员多多少少都懂点NGINX,但是真正其明白原理的可能少之又少。明白其原理,才能做优化,否则只能照样搬样,出了问题也无从下手。懂皮毛的人,一般会做个 Web Server,搭建一个 Web 站点;初级运维可能搞个 HTTPS 、配置一个反向代理; 中级运维定义个 upstream、写个正
2020-05-13 13:48:53 848
原创 面试-mysql篇-分区分表
首先采用Mysql存储千亿级的数据,确实是一项非常大的挑战。Mysql单表确实可以存储10亿级的数据,只是这个时候性能非常差,项目中大量的实验证明,Mysql单表容量在500万左右,性能处于最佳状态。针对大表的优化,主要是通过数据库分库分表来解决,目前比较普遍的方案有三个:分区,分库分表,NoSql/NewSql。实际项目中,这三种方案是结合的,目前绝大部分系统的核心数据都是以RDBMS存储为主,NoSql/NewSql存储为辅。分区首先来了解一下分区方案。分区表是由多个相关的底层表实现的。
2020-05-13 09:50:58 850
原创 面试-mysql篇-SQL优化
有时候我们会遇到:在查询sql的时候,假如有100w条数据,会出现慢sql告警,这个时候你就应该到处sql日志来查找原因了。这里很有可能的主要原因就是没有命中索引和没有分页处理(原因有很多种,主要分析你的日志)。那接下来我们就得去优化sql了。如何优化呢?下面我们来谈谈有关的问题。一、从sql优化入手谈到sql性能优化,那我们就离不开谈到大数据量和并发数,MySQL没有限制单表的最大记录数,它只是取决于操作系统对文件大小的限制。看表:从表中我们可以看出,如果单表行数超过500万行或.
2020-05-13 09:40:11 578 1
原创 面试-mysql篇-慢查询优化
这一篇mysql优化是注重于查询优化,根据mysql的执行情况,判断mysql什么时候需要优化,关于数据库开始阶段的数据库逻辑、物理结构的设计结构优化不是本文重点,下次再谈查看mysql语句的执行情况,判断是否需要进行优化当感觉操作数据库查询语句速度变慢,不符合生产效率要求时,可按照以下步骤进行查看1、 慢查询的开启与捕获,查看可能是哪些SQL语句造成的查询速度慢2、 explain+SQL语句3、 show profile分析SQL语句在服务器内执行细节和生命周期情况4、 通过以上三个步
2020-05-13 09:30:49 2014
原创 面试-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 221
原创 面试-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 554
原创 面试-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 660 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 172
原创 面试-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 164
原创 面试-PHP篇-trait
自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。traits 与 interfaces 区别 及 traits 解决了什么痛点?知乎一个有趣的比喻:你可以把trait当作是多继承的一种变种,是一种加强型的接口,比如当你需要定义一个car的class,此时你需要实现vehicle定义的接口,比如必须有引擎,有外壳这些,但你这时会发现每个都自己去实现是不是太复杂了?比如对你而言引擎的实现你并不关心,你只要买一个用就好了,你比较在意汽车的外形,那么这时候就用到了trait,
2020-05-11 17:22:29 380
原创 面试-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 491
原创 面试-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 534
原创 面试-PHP篇-构造函数和析构函数
PHP5可以在类中使用__construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。class Car { function __construct() { print "构造函数被调用\n"; }}$car = new Car(); //实例化的时候 会自动调用构造函数__construct,这里会输出一个字符串在子类中如果定义了__construct则不会调用父类的__construc
2020-05-11 15:19:21 164
原创 面试-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 200
原创 面试-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 333
原创 面试-算法篇-PHP快速排序
function quickSort($arr){ $count = count($arr); //统计出数组的长度 if ($count <= 1) { // 如果个数为空或者1,则原样返回数组 return $arr; } $index = $arr[0]; // 把第一个元素作为标记 $left = []; //定义一...
2020-05-08 16:54:54 144
原创 面试-算法篇-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 143
原创 面试-网络篇-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 448
原创 面试-网络篇-一次完整的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 647
原创 [Linux] du-查看文件夹大小-并按大小进行排序
某天,我想检查一下电脑硬盘的的使用情况,作为一个命令控,废话少说,开始吧:使用df 命令查看当前磁盘使用情况: 1 2 3 4 5 6 7 8 9 jack@jiaobuchong:~$df-lh Filesystem Size Used Avail Use% Mounte...
2020-01-06 13:15:09 872
原创 MAC下安装使用RabbitMQ以及配置PHP扩展
我们在开发项目的时候,经常会遇到“群发短信”,“订单系统有大量的日志”,“秒杀设计”等等,服务器没法处理这种瞬间迸发的压力,这种情况要保证系统正常有效的使用,就需要“消息队列”的帮助,而我们熟知的消息队列场景有1、解耦(订单+配送系统)2、流量削峰(秒杀)3、RabbitMQ(更专业的消息系统实现)今天我们着重讲一下RabbitMQ的按照使用。一、安装RabbitMQbrew i...
2020-01-03 11:36:37 624
原创 Kafka server 部署配置优化
Kafka配置优化其实都是修改server.properties文件中参数值1、网络和io操作线程配置优化# broker处理消息的最大线程数 num.network.threads=xxx # broker处理磁盘IO的线程数 num.io.threads=xxx建议配置:一般num.network.threads主要处理网络io,读...
2020-01-02 10:25:13 360
原创 Kafka主要参数详解
一、相关参数配置############################ System ##############################唯一标识在集群中的ID,要求是正数。broker.id=0#服务端口,默认9092port=9092#监听地址,不设为所有地址host.name=debugo01# 处理网络请求的最大线程数num.networ...
2020-01-02 10:16:58 215
原创 Kafka : php 安装 Kafka 扩展
准备工作安装librdkafka库git clone https://github.com/edenhill/librdkafka.git./configuremakesudo make install安装php-rdkafka 扩展$ git clone https://github.com/arnaud-lb/php-rdkafka.git #生成confi...
2019-12-25 11:08:33 132
原创 Kafka 安装与使用
安装安装 Kafka 需要 Java 环境和 Zookeeper 环境(新版不需要 Zookeeper 环境,因为已经内置类Zookeeper 环境)Windows 和 Linux 安装都是一样的,从 官网 下载 Kafka 最新版本,下载后不需要安装,解压即可使用。这里主要说一下 Linux 下的下载与解压,切换到 /usr/local/ 目录cd /usr/local/复制...
2019-12-25 09:33:24 211
原创 PHP获取汉字首字母并分组排序
<?php/** * @author Tech */class Character{ /** * 二维数组根据首字母分组排序 * @param array $data 二维数组 * @param string $targetKey 首字母的键名 * @return array 根据首字母关联...
2019-12-19 10:14:24 181
转载 centos7 源码安装mysql5.7.22
https://blog.csdn.net/harryxxxxx/article/details/81135222
2019-08-01 14:40:54 47
转载 PHP之static静态变量详解(二)
在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料。static用法如下:1.static 放在函数内部修饰变量2.static放在类里修饰属性,或方法3.static放在类的方法里修饰变量4.static修饰在全局作用域的变量所表示的不同含义如下:1.在函数执行完后
2017-09-15 00:08:28 172
转载 PHP之static静态变量详解(一)
什么是static静态变量?(以下为在C语言中的理解)静态变量 类型说明符是static。静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而 auto自动变量,即动态局部变量,属于动态存储类别,占
2017-09-12 23:30:04 400
原创 h5打电话
如果需要在移动浏览器中实现拨打电话,发送email,调用sns等功能,jquery mobile提供的接口是一个好办法。采用url链接的方式,实现在safari ios,android 浏览器,webos 浏览器,塞班浏览器,ie,operamini等主流浏览器,进行拨打电话功能。最常用的方式js实现一键拨号的电话拨打功能:报警!最常用的方式js实现一键发送短信功能
2017-09-08 13:56:32 822
原创 Git常用命令
查看、添加、提交、删除、找回,重置修改文件git help # 显示command的helpgit show # 显示某次提交的内容 git show $idgit co -- # 抛弃工作区修改git co . # 抛弃工作区修改git add # 将工作文件修改提交到本地暂存区git add . # 将所有修改过的工作文件提交暂存区
2017-09-06 00:19:40 134
原创 PHP 面向对象
PHP尽管只被设计于运行在服务器软件上,但仍然包含很多面向对象的要素,比如类和方法,本文就带初学者来简单理解PHP的面向对象编程方式.与大多数可以面向对象的编程语言不一样, PHP 是同时支持面向过程和面向对象的编程方式, PHP 开发者可以在面向过程和面向对象二者中自由选择其一或是混合使用,不过由于在 PHP5 之前的版本中, PHP 主要还是面向过程的编程语言,因此大多时候 PHP 开
2017-09-03 22:40:21 159
mysql源码安装包mysql-boost-5.7.22.zip
2019-08-01
postgresql-9.6.12.tar.gz
2019-07-31
php-7.0.27.tar.gz
2019-07-30
cphalcon-3.4.4.zip
2019-07-30
cphalcon-3.1.2.tar.gz
2019-07-30
swoole-2 版本.zip
2019-07-23
mysql源码安装包.zip
2019-07-23
php-5.6.29.tar.gz
2019-07-23
php-7.1.29.tar.gz
2019-07-23
php-7.2.20.tar.gz
2019-07-23
php-7.3.7.tar.gz
2019-07-22
postgresql-11.5.tar.bz2
2019-10-25
apache安装包及其依赖.zip
2019-10-11
rabbitmq及php扩展.zip
2019-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人