面试
文章平均质量分 74
@航空母舰
这个作者很懒,什么都没留下…
展开
-
消息中间件 -- 如何保证消息的顺序性
主要思路有两种:1、单线程消费来保证消息的顺序性; 2、对消息进行编号,消费者处理时根据编号判断顺序。举个例子,一个mysql binlog同步的系统,压力还是非常大的,日同步数据要达到上亿。mysql→mysql,常见的一点在于数大数据team,就需要同步一个mysql库过来,对公司的业务系统的数据做各种复杂的操作。我们在mysql里增删改一条数据,对应出来增删改3条binlog,接着这三条binlog发送到MQ里面,到消费出来一次执行起码的能保证是按照这个顺序执行的,不然机会错误。r..原创 2021-11-08 15:02:56 · 2371 阅读 · 0 评论 -
redis集群 数据分片 哈希槽
redis的主从和哨兵两种集群方案,redis从3.0版本开始引入了redis-cluster(集群)。从主从-哨兵-集群可以看到redis的不断完善;主从复制是最简单的节点同步方案无法主从自动故障转移。 哨兵可以同时管理多个主从同步方案同时也可以处理主从自动故障转移,通过配置多个哨兵节点可以解决单点网络故障问题,但是单个节点的性能压力问题无法解决。 集群解决了前面两个方案的所有问题。二、Redis的分片机制Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。Redis Cl原创 2021-10-25 14:14:07 · 3957 阅读 · 0 评论 -
Redis的各项功能解决了哪些问题
Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。它还内建了复制,lua脚本,LRU,事务等功能,通过redis sentinel实现高可用,通过...........................原创 2018-11-30 10:15:35 · 878 阅读 · 0 评论 -
Redis异步队列与延时队列
异步消息队列说道消息队列,你肯定会想到Kafka、Rabbitmq等消息中间件,这些专业的消息中间件提供了很多功能特性,当然他的部署使用维护都是比较麻烦的。如果你对消息队列没那么高要求,想要轻量级的,使用Redis就没错啦。Redis通过list数据结构来实现消息队列.主要使用到如下命令: lpush和rpush入队列 lpop和rpop出队列 blpop和brpop阻塞式出队列 废话补不多说上代码:<?php$redis = new Redis()原创 2021-10-22 17:13:14 · 1170 阅读 · 0 评论 -
mysql覆盖索引与回表
什么是索引覆盖MySQL官网,类似的说法出现在explain查询计划优化章节,即explain的输出结果Extra字段为Using index时,能够触发索引覆盖。如何实现索引覆盖?常见的方法是:将被查询的字段,建立到联合索引里去。能够命中name索引,索引叶子节点存储了主键id,通过name的索引树即可获取id和name,无需回表,符合索引覆盖,效率较高。第二个SQL语句:能够命中name索引,索引叶子节点存储了主键id,但sex字段必须回表查询才能获取到,不符合索引覆盖.原创 2021-10-15 17:21:35 · 133 阅读 · 0 评论 -
海量数据的更新/删除策略
1.延迟删除一条数据会被很多数据引用。当被引用的数据删除时,引用的数据也需要删除。这时候可以用延迟删除的方法。例子:用户发表的帖子,可以被转发到很多地方。所有转发过的贴都是对原帖的引用,用户接着把他的原帖删除,所有被转发过的帖子也需要进行清理。我们采用 的是延迟删除的方法,用户操作时,先直接删除原帖,被转发的贴,在点击时,会到原帖加载内容,这时发现原帖已经不存在,此时这条被点击的转发贴也会被删 除。当用户访问引用的数据时,发现被引用的数据不存在,此时删除引用的数据。2.线下删除一条数据关联到很多原创 2011-03-28 10:54:01 · 252 阅读 · 0 评论 -
PHP static:静态变量
静态变量是一个特殊的局部变量,通过前面的学习我们知道,在函数内部定义一个局部变量,函数调用结束之后这个变量就会被销毁,不能继续使用了。而静态变量不同,静态变量在初始化之后,会在程序运行期间会一直存在。和局部变量相比,静态变量具有一下特点:当函数执行完毕后,静态变量不会消失; 静态变量只能在函数内部使用; 静态变量只会被初始化一次; 静态变量初始化的值可以省略,默认值为 null; 静态变量的初始值只能是具体的字符串、数值等,而不能是一个表达式。也就是说,静态变量的初始化只进行一次,而且是在.原创 2021-10-13 18:03:19 · 500 阅读 · 0 评论 -
常见缓存问题及解决方案
缓存无底洞概念:增加节点机器,性能没有提升反而下降了。以用户为例:user-133-age,user-133-name,user-133-height ... N个ke,当服务器增多的时候,133号用户的信息,也被更散落在更多的节点上,所以,同样是访问个人主页,得到相同的个人信息,节点越多,要连接的节点也越多,对于memecached的连接数,并没有随着节点的增多,而降低。于是出现了无底洞现象。Nosql与传统的RDBMS并不是水火不容,两者在某些设计上,是可以相互参考的,对于memcaced...原创 2018-11-30 11:04:30 · 295 阅读 · 0 评论 -
Redis 哨兵选举机制
redis集群选举分析当salve发现自己的master变为FAIL状态时,尝试进行Failover(故障切换)当存在多个slave的时候,就需要竞争成为master,过程如下(1) slave发现自己的master变为FAIL(2) 将自己记录的集群currentEpock加一,并广播FAILOVER_AUTH_REQUEST信息(3) 其他小集群的master会相应slave的广播消息,首先判断请求者的合法性,并发送FAILOVER_AUTH_ACK,对每一个epoch只发送一次ac原创 2021-10-13 10:42:30 · 4837 阅读 · 4 评论 -
PHP 常驻内存泄漏分析定位
在使用常驻内存框架需要注意什么? 内存释放 数据污染 资源释放 静态变量保存的对象不会被释放,需要手动管理 禁止使用exit和die 禁止使用sleep时间长的函数,防止导致Worker进程退出 不同Worker进程创建的对象和连接是不能互通的,创建连接池需要注意 定义公共函数的时候要使用 function_exists 判断函数是否存在,否则会提示重名 类引入文件需要使用 include_once 或者 require_原创 2021-10-13 09:29:06 · 581 阅读 · 0 评论 -
MYSQL Archive存储引擎
archive储存引擎的应用场景就是它的名字的缩影,主要用于归档。archive储存引擎仅支持select和insert,最出众的是插入快,查询快,占用空间小。例如我们有大量的历史数据极少访问又不能删除,需要保存,那么它是非常不错的选择。archive最出名的就是压缩,它的引擎使用zlib无损数据压缩算法,压缩率非常好,这里测试下效果。根据英文的测试结论来看,Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表小大约83%。当数据量非常大的时候Archive的插入性能表现会较M原创 2021-09-30 15:56:36 · 1997 阅读 · 0 评论 -
PHP array_merge,array_merge_recursive和+的区别
$arr1 + $arr2键名出现重复,不管是数字还是字符,统一使用首次出现的,丢弃后面出现的(前面覆盖后面)。array_merge(arr1,arr2)如果是字符,则使用后面出现的,丢弃前面出现的(后面覆盖前面) 如果是数字则全部保留。索引数组$arr1 = [1 => 'one', 3 => 'three'];$arr2 = [1 => 'new one', 6 => 'six'];$result1 = array_merge($arr1, $arr2)原创 2021-09-30 14:24:31 · 212 阅读 · 0 评论 -
PHP运行机制和原理
1.什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode cache的目地是避免重复编译,减少CPU和内存开销。如果动态内容的性能瓶颈不在于CPU和内存,而在于I/O操作,比如数据库查询带来的磁盘I/O开销,那么opcode cache的性能提升是非常有限的。但是既然opcode cache能带来CPU和内存开销的降低,这总归是好事。 现代操作码缓存器(Optimizer+,APC2.0原创 2021-09-26 13:40:25 · 1005 阅读 · 1 评论 -
PHP循环数组的3种方式
PHP遍历数组的方法经常用到的有:for循环遍历 foreach遍历 each结合while、list遍历for循环遍历注意:for循环遍历只针对于索引数组,不能用于关联数组/** * 1.for循环遍历-只能针对索引数组 */$for_arr = [1, 2, 3];$for_arr_len = count($for_arr);for($i = 0; $i < $for_arr_len; $i++) { echo $for_arr[$i] . PHP_E原创 2021-09-26 09:56:09 · 4766 阅读 · 0 评论 -
PHP 可变变量 可变函数 可变参数
_num_args(),"结果:"; //输出参数个数 $total = 0; $varArray = func_get_args(); //使用func_get_args()来获取当前函数的所有实际传递参数,返回值为array类型 foreach ($varArray as $index => $var) { $total += func_get_arg($index); //获取单个参数 //$total原创 2010-12-31 09:38:08 · 267 阅读 · 0 评论 -
php mysql事务详解
事务(Transaction)及其ACID属性事务是由一组SQ语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。 隔离性(Isoation):数据库系统提供.原创 2011-09-02 22:26:26 · 1331 阅读 · 0 评论 -
PHP运算符
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。运算符优先级:递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符( ^ ) > 位运算符( | ) > 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or 递增/递减运算符不影响布尔值 递增NULL值为1,递减NULL值没有效果逻..原创 2021-09-23 14:38:54 · 217 阅读 · 0 评论 -
PHP引用
概念:在PHP中引用意味着用不同的名字访问同一个变量内容; 定义方式:PHP使用 ‘&’定义引用变量; 当不使用引用时,变量采取写时复制机制机制(COW):在写入时会复制一份内存进行修改,例如 //定义一个变量$a = range(0,1000);var_dump(memory_get_usage()); //打印内存使用量//定义一个变量b$b = $a; //此时$b和$a 指向同一个内存空间var_dump(memory_get_usage());//当a或b发生写入时,才原创 2021-09-23 10:27:53 · 580 阅读 · 0 评论 -
PHP 之session cookie
cookie和session有什么用? 常见的用法,比如在有些网站下载东西需要会员先登陆。http协议本身是无状态的,无法得知顾客是否已经登陆,怎么办呢?cookie和session就可以知道。再比如网上购物,用户身份认证,程序状态记录。购物车怎么知道顾客挑选过哪些商品呢?cookie和session也可以记录。总而言之,cookie和session就是能够记录顾客状态的技术,尽管二者属于不同的技术,但只要cookie能做到的,session也能做到!如果session和cookie一样安全的话,二...原创 2011-06-01 11:07:39 · 1052 阅读 · 1 评论 -
精度计算问题
如果用PHP的算术计算浮点数的时候,可能会遇到一些计算结果错误的问题<?php$a = 0.1;$b = 0.7;var_dump(($a + $b) == 0.8); //false$f = 0.58;var_dump(intval($f * 100)); //为啥输出57解决方案:安装bcmath这个扩展bc是Binary Calculator的缩写。bc*函数的...原创 2016-03-09 12:18:07 · 341 阅读 · 0 评论 -
PHP中 new clone __clone区别
<?phpclass Person{ var $name; function __construct() { $this->name = "小aa明" . '<br />'; } function say() { echo $this->name . "在说话"; }}$ne...原创 2017-01-18 18:34:08 · 280 阅读 · 0 评论 -
PHP内存机制 垃圾回收机制
PHP不需要显式的对内存进行管理,这些工作都由PHP解释器进行了。由此PHP内部有一个内存管理体系, 它会自动将不再使用的内存垃圾进行释放,php的默认内存大小是32M,在php.ini中memory_limit = 32M memory_get_usage(),这个函数的作用是获取 目前PHP脚本所用的内存大小。 memory_get_peak_usage(),这个函数的作用...原创 2018-11-28 08:44:47 · 304 阅读 · 0 评论 -
QPS/TPS/并发量/系统吞吐量的概念
原创 2018-11-28 08:44:35 · 116 阅读 · 0 评论 -
Mysql参数优化
原创 2018-11-28 08:45:47 · 115 阅读 · 0 评论 -
Nginx动静分离 负载均衡 反向代理
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中,是通location配置段配合正则匹配实现静态与动态页面的不同处理方式1.前端Nginx收到静态请求,直接从NFS中返回给客户端。2.前端Nginx收到动态请求转交给通过FastCGI交给PHP服务.原创 2018-11-15 09:09:48 · 577 阅读 · 0 评论 -
CentOS系统参数优化-提升MySQL服务器性能
相信大多数MySQL数据库都会部署在Linux系统之中,尤其是生产数据库,我所用到的MySQL数据库都是部署在CentO64位操作系统上的,对操作系统默认参数的一些修改配置,可以让数据库的性能得到进一步的提升。我们最好不要把数据库装好之后马上就运行使用,而是应该将数据库的操作系统,以及数据库本身的一些参数配置好后再使用。1.网络参数配置网络参数配置需要修改配置文件/etc/sysctl.co...原创 2018-12-04 15:05:10 · 341 阅读 · 0 评论 -
PHP 字符串表示总结
在PHP中,字符串的定义可以使用英文单引号' ',也可以使用英文双引号" ",heredoc和nowdoc。一般情况下两者是通用的.但双引号内部变量会解析,单引号则不解析.PHP允许我们在双引号串中直接包含字串变量。而单引号串中的内容总被认为是普通字符,因此单引号中的内容不会被转义效率更高。比如:$str='hello';echo "str is $str"; //运行结果: st...原创 2019-02-25 14:53:41 · 131 阅读 · 0 评论 -
Nginx参数优化
原创 2019-08-02 16:51:17 · 291 阅读 · 0 评论 -
HTTPS和HTTP的区别是什么?
挂在地址栏,那么HTTPS和HTTP的区别是什么呢?一、什么是HTTPSHTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS主要作用是:(1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;(2)对网站服务器进行真实身份认证。二、什么是HTTPHTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP是采用明文形式进行数据原创 2018-11-28 08:44:20 · 152 阅读 · 0 评论 -
MYSQL 字符串类型
MySQL中varbinary、binary、char、varchar异同binary 与 varbinary 类型和char与varchar类型是相似的,只是他们存储的是二进制数据,也就是说他们是包含字节流而不是字符流,他们有二进制字符的集合和顺序,他们的对比,排序是基于字节的数值进行的。binary与varbinary的最大长度和char与varchar是一样的,只不过他们是定义字节长度,而char和varchar对应的是字符长度。存储和取出时对尾部空格的处理 char(N)用来存储非二.原创 2018-06-11 15:22:34 · 366 阅读 · 0 评论 -
php class中self,parent,this的区别,以及实例
一,this1,要用this,你必有是一个对像的形势,不然它会报错的,Fatal error: Using $this when not in object context。2,this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性二,self1,self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。2,用self时,可以不用实例化的三,parent1,parent可以访问父类中的静态属性和静态方法。2,用parent时,可以不用实例化.原创 2011-01-30 16:19:02 · 159 阅读 · 0 评论 -
服务器部分
测试远程主机端口是否打开telnet 110.101.101.101 80 写出10个以上你所知道的常用的Linux命令和它的功能 Ls 列目录 Cp 复制 Rm 删除 Mkdir 建立目录 Cd 切换目录 Ps 查看进程 Top 查看机器使用情况 使用过Vim编辑器吗?如果使用过,如何在vim里切分多个可视化窗口,包括横排和纵排。(本题选作) 横:split(sp) 纵:vsplit(vsp) 说说Linux下的find命令和grep命令的区别(本题选作) Find:按照文件名查找 Gr原创 2011-01-27 19:11:53 · 85 阅读 · 0 评论 -
mysql int(x) 中x的误解
这个问题是很久以前就发现的问题一直没有整理,今天有个朋友又问到这个问题。先看一个mysql表结构Sql代码CREATE TABLE `test`( `TYPEID`int (2) )ENGINE=MyISAMCHARSET=latin1;CREATE TABLE `test` ( `TYPEID` int(2) ) ENGINE=MyISA...原创 2011-01-27 10:12:58 · 112 阅读 · 0 评论 -
mysql 性能优化
客户端会话连接数,当前MySQL服务器执行的慢查询数,当前MySQL执行了多少SELECT语句、执行了多少UPDATE/DELETE/INSERT语句等统计信息,从而便于我们根据当前MySQL服务器的运行状态进行对应的调整或优化工作。在MySQL中,我们可以使用SHOW STATUS指令语句来查看MySQL服务器的状态信息。####mysql 性能监控show status; -- 1、查询连接mysql服务器次数show status like 'Connections';原创 2010-10-14 19:58:04 · 99 阅读 · 0 评论 -
23种 设计模式---面向对象的基本原则
然(Keep it Simple Stupid,KISS原则)所以做到简单的同时,还要做到一目了然。你也可以这样理解,将一个软件做得连白痴都会用。这就是用户体验的最高境界了。如何做到简单且一目了然呢?这要归结到软件开发的可维护性和可理解性原则3:适可而止(You Ain’t Gonna Need It,YAGNI原则) YAGNI原则指的是只需要将应用程序必需的功能包含进来,而不要试图添加任何其他你认为可能需要的功能。 在一个软件项目中,往往80%的时间花费在20%的功能上。当你准备列出一个项目清单原创 2010-10-08 23:44:53 · 115 阅读 · 0 评论 -
千万别让跳槽成为习惯
前比较混乱的IT市场而言 ,这种做法本也无可厚非,而且是一种潜在的事实。国内工资大多是跳出来的,在同一家公司,工资涨幅的确很慢。 然而随着一批行业龙头企业的不断发展壮大,这些企业对候选人的跳槽频率关注得越来越多 也是一个不争的事实。 我为什么非去大公司不可? 没错,确实是,如果你不打算应聘大公司也没有会管你。但是我在这里想要奉劝大家一句,别只看三两年,还是放眼二三十年比较好,我们职业发展的路很长。我国并不是一个崇尚技术的国家,IT行业越来越向服务行业靠拢,就好像一个厨师,大家可以想一想原创 2010-09-30 21:08:08 · 172 阅读 · 0 评论 -
PHP防SQL注入和XSS攻击
随便输入,这时候的合成后的SQL查询语句为“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,等价于select * from users where username='' or 1=1 防止SQL注入<?php$field = explode(',', $data);array_walk($field, array($this, 'add_special_char'));$data = implode(',', $fi原创 2010-07-01 00:53:12 · 111 阅读 · 0 评论 -
mysql 分库分表的方法
为什么要分库分表和读写分离类似淘宝网这样的网站,海量数据的存储和访问成为了系统设计的瓶颈问题,日益增长的业务数据,无疑对数据库造成了相当大的负载,同时对于系统的稳定性和扩展性提出很高的要求。随着时间和业务的发展,数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、网络IO、事务数、连接数)总是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。分表、分库和读写分离可以有效地减小单台数据库的压力原创 2011-02-10 12:39:45 · 128 阅读 · 0 评论 -
MySQL高可用 主从复制
件mysql主从复制用途实时灾备,用于故障切换读写分离,提供查询服务备份,避免影响业务主从部署必要条件:主库开启binlog日志(设置log-bin参数)主从server-id不同从库服务器能连通主库主从原理MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个Mysql数据库(我们称之为Master)复制到另一个Mysql数据库(我们称之为Slave),在Master与Slave之间实现整个主从复制的过程是由三个线程参与完成的。原创 2011-02-10 12:59:11 · 233 阅读 · 1 评论 -
Mysql5 实现交叉表查询
原创 2018-05-17 16:03:59 · 222 阅读 · 0 评论