自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 面向对象编程的五个基本原则

SOLID 是 面向对象编程 和 面试对象设计 的五个基本原则,应用这五个原则能创建一个易于维护和扩展的软件系统。SOLID 可以指导代码重构和在迭代的过程中进行代码清扫,以使得软件源代码清晰可读和具有良好的扩展性。在测试驱动开发中是典型应用场景,并且也是敏捷开发和自适应软件开发基本原则的重要组成部分。单一功能原则对象应该仅具有一种单一功能开闭原则软件应该对扩展开放,但对于修改封闭里氏替换原则程序中的对象应该可以在不改变程序正确性的前提下被他的子类所替换。如果它看上去像一只鸭子,并

2021-07-02 18:18:32 239

原创 Redis知识点

redis是什么redis是有C语言编写的高性能非关系型键值对数据库;官方的说法是读可达到100000次/s,写可达810000次/s,采用IO多路复用模型处理处理网络请求,单进程执行命令保证了原子性。优点读写性能优秀,开源nosql数据库中性能最好支持丰富的数据类型:string、hash、list、set、zset好用的增强功能:bitmap作为布隆过滤器,HyperLogLog估算集合的基数提供数据持久化:RDB、AOF自带cluster和主从复制缺点数据库容量受物理内容

2021-07-01 17:08:38 112

原创 Mysql优化——建表优化和查询优化

建表前选择合适的引擎常见的引擎有MyISAM、Innodb、MEMORY、MERGEE、CSV。一般在MyISAM和InnoDB之间选择。理由:MyISAM和InnoDB使用的最多,社区环境最好,利于以后的维护。区别:MyISAM读快,写慢。不直吹事务、外键,支持全文索引,表锁。InnoDB读慢,写快。支持事务、外键,支持行锁,适合高并发。默认引擎。(r如无特殊需求,强烈建议选择他,万一哪天需要用到事务呢!!!)建表优化为每个数据表建主键尽量把字段设置为NOT NULL,null值很难查

2021-05-21 15:10:49 147

原创 如何降低开发团队之间的沟通成本

如何降低开发团队之间的沟通成本一千个人就有一千个哈姆雷特,每个人对事物的认知是不一样的。但是我们最终要完成的产品只有一个,要怎么做才能让整个团队对产品的认知工具辅助, 如产品原型、接口文档、设计图利用这些工具可以有效的降低理解成本,更高的表达发起者的意图信息确认。这是最关键的我们在产品走查阶段可能会遇到,做出来的产品与产品经理预想中的不太一样。一方面可能是开发没有注意到一些细节有所遗漏,还要一方面则是对产品的认知不一样。如何降低这个问题发生的概率呢?那就需要开发同学们再拿到产品prd后仔

2021-05-10 11:52:53 362

原创 利用postman制作接口文档

利用postman制作接口文档1.利用导入导出功能导出我们用来调试的collection,得到一个json格式的文件,记住重命名文件带上版本号如student-1.0.0.json,再见这个文件共享给其他团队成员,由他们各自导入即可。重点文件上传到共享云盘后,需要邮件通知并口头通知到相关团队成员,确保他们得知API文档已生成2. 利用publish docs功能 ,这个功能生成的接口文档访问次数是受限的,想要大规模使用需要交钱...

2021-05-10 10:01:25 1150

原创 设置git忽略.idea

加.idea添加到ignore清单% echo '.idea' >> .gitignore从git中删除idea% git rm --cached -r .idea将.gitignore文件提交到git% git add .gitignore% git commit -m "忽略.iade"% git push...

2020-02-15 11:13:44 579

原创 数据库水平扩展——分表分库

注意点:无论按哪个纬度分表,订单号需要全局唯一,且需要包含库id和表id,以便定位。或者建一张订单号与分表纬度之间的关联表,并加载到缓存中。此处以餐饮系统为例:按shopid分表水平分表分库的方式一般有三种:按范围分表,比如:shopid在1到1w的放在0表,shopid在1w1到2w的放在表1优点:易于扩展缺点:数据分散不均匀,容易出现单表瓶颈hash分表(硬hash),比如:...

2020-01-13 00:14:04 353

原创 Nginx配置——未完待续

nginx的配置项可以大致分如下几个部分1. 全局配置:包括user user [group] 允许运行nginx的用户|组worker process数这是nginx实现并发处理的关键所在。配置格式如下:worker process number |auto;number 表示启动的worker进程数auto nginx进程自动检测查看运行中的worker process进...

2020-01-12 23:18:00 114

原创 nginx学习(1)——负载均衡策略

负载均衡nginx的负载均衡可以分为两大类内置策略、扩展策略内置策略默认会被编译进内核,使用时只需要在nginx配置中配置相关参数集合。内战策略包括轮询加权轮询IP Hash扩展策略不会编译进内核,需要手动将第三方模块编译进nginx内核。扩展策略主要通过第三方模块实现,种类比较丰富,常见的有url hashfair 等下面重点介绍几种常用策略轮询轮询就是讲每个请...

2020-01-12 18:59:42 128

原创 Swoole实践——RPC

首先我们需要知道RPC的概念和要素RPC (Remote Procedure Call Protocol)远程过程调用协议随着分布式架构微服务的普及,服务之间的数据需要互相调用。以前的本地调用无法满足,RPC随之应运而生。比如服务器A上部署的数订单服务,服务器B部署的事商品管理服务。此时订单服务需要获取商品数据,需要向B获取数据。这就是RPC的场景。RPC的要素在RPC框架中主要有三个角...

2020-01-12 16:53:37 278

原创 phpize安装swoole扩展

下载swoole包地址:https://github.com/swoole/swoole-src/releaseshttp://pecl.php.net/package/swoolehttp://git.oschina.net/swoole/swoole进入你的扩展包目录。比如我这边是安装在MAMP的php7.2.10下面cd /Applications/MAMP/bin/...

2020-01-12 15:07:07 333

原创 mac 上安装多个版本的php 并切换

我们用brew来安装phpbrew search redis 搜索redisbrew install redis 安装redisbrew list 安装的软件brew services list 所有的启动brew services start php 启动phpbrew services stop php 关闭php以下命名%开头的表示输入命令查看本地已有的php版本...

2020-01-11 21:22:56 843

原创 引用(&)与foreach结合使用的一个注意点

$arr = array(1,2,3);foreach($arr as &$v){}//unset($v);foreach($arr as $v){ //print_r($arr);}分析: $v在foreach结束后不会自动释放因此第一个foreach循环结束时$arr[2] = &$v;因此在下一个循环中,每次循环相当于在给$arr[2]赋给当前...

2020-01-10 23:18:22 204

原创 php性能优化必知——生成器yield

迭代器yieldphp5.5之后引入的功能。可以有效的节省内存,进行大文件读取,和大数据计算。对比:function gettime($num) { $data=[]; for($i=0;$i<$num;$i++) { $data[] = time(); } return $data;}foreach (gettime(3) a...

2020-01-10 19:21:26 328

原创 记录工作中的点点滴滴——Redis有序集合的使用

易瞄瞄项目缓存设计多个有序集合 score存发布时间戳两个月内的作品集合用户作品集合 (发布立即压入集合)关注用户的作品集合点赞作品集合活跃用户关注作品集合圈子集合1. 同学校的作品集合2. 同班级的作品集合3. 其他圈子置顶作品集合已读作品集合利用:zunionrangebyscore 求个对成员score重新计算获取交集zrembyscore 删除不符合要求...

2020-01-09 18:07:51 101

原创 Redis列表list实战——简单的消息队列异步处理

为了提升接口的性能,将一些对数据库的操作异步处理list的特性,有序,可以作为队列(先进先出)也可以作为栈(先进后厨)场景:帖子的点赞、打赏、评论等操作需要改变帖子的热度。记录操作完成后,修改帖子热度的操作利用list异步执行。以评论为例:设计好异步执行类class Async{ /** * 压入异步执行任务 * @param $func ...

2020-01-09 16:36:17 658

原创 Redis有序集合——应用场景实战求差集

获取剔除已读的新闻列表已知有序新闻集合z_news;127.0.0.1:6379> zrange news 0 -1 withscores 1) "a" 2) "1" 3) "b" 4) "2" 5) "c" 6) "3" 7) "d" 8) "4" 9) "e"10) "5"11) "f"12) "6"已读历史集合z_news_his;127.0.0.1:...

2020-01-09 15:37:25 780

原创 Redis有序集合zset

Redis 有序集合(sorted set)Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 -...

2020-01-09 14:38:35 120

原创 MySQL之SQL优化——explain

我们用explain检查sql语句的性能,触发索引的实际情况explain显示的内容如下mysql> explain SELECT * from statuses where user_id=1 ;+----+-------------+----------+------------+------+------------------------+-------------------...

2020-01-08 16:00:13 114

原创 PHP面试要点——MQ消息队列

MQ消息队列常见的消息队列有RabbitMQ、kafka、redisRabbitMQRabbitMQ是使用Erlang编写的一个开源消息队列,本身支持很多协议,实现了AMQP协议,重量级的。实现了broker架构,对路由、负载均衡、数据持久化都有很好的支持。绑定一个队列的多个消费者,同一条消息只会分发给一个消费者。Redisredis是个nosql数据库。支持MQ的功能。可以当...

2020-01-07 21:21:07 801

原创 PHP面试要点——mysql

Mysql1.char与varchar的区别mysql 5.0以上数据长度都用字符长度度量。char 定长字符串、速度较快但浪费空间,最多255个字符(与编码无关);varchar 变长字符串、速度较慢但节省空间,行的最大长度65535个字节,长度与编码有关gbk是(65535-1-2-行中其他字段暂用的长度)/2,utf-8是(65535-1-2-行中其他字段占用的长度)/3<=...

2020-01-07 21:19:33 90

原创 PHP面试要点——php

php1. 传值与传引用的区别传值:就是把实参赋值给形参,传递后,两者没有任何关联。所以对形参的修改不会影响到实参传引用:是以地址的方式传递参数,传递后,实参和形参都是同一个对象,只是名字不同,因为他们都指向都一个地址,所以对形参的修改会影响到实参。注意:php变量时存储于zval容器内的,传值时不会重新分配内存空间,只是refcount加一,只有形参的值改变才会分配新的内存;传引用时则...

2020-01-07 21:14:02 131

原创 算法:快速排序 PHP实现

快速排序这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。时间复杂度 O(nlogn) 最坏时间复杂度O(n^2)快速排序采用的思想是分治思想。找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。...

2020-01-07 18:43:30 87

原创 算法:一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就

一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。思路:报数为m的猴子直接出队,报数为m的出队并回到队尾循环步骤1,直到队列中只剩一个function mo...

2020-01-07 18:32:11 1891

原创 Redis的数据类型string、hash、list、set、zset

介绍:redis是一个开源的使用ANSI(American National Standards Institute,美国国家标准学会) C语言编写的、遵循BSD协议、支持网络、可基于内存亦可持久化的日志型、key-value非关系型数据库。Github 源码:https://github.com/antirez/redisRedis 官网:https://redis.io/Redis常...

2020-01-07 12:27:45 126

转载 Redis sentinel哨兵

Redis sentinel 是一个分布式系统中监控redis主从服务器,并在主服务器下线时自动进行故障转移。特性:监控(Montitoring):sentinel会不断检查你的主服务器和从服务器是否正常工作提醒(Notification):当被监控的某个redis服务器出现问题时,sentinel可以通过APi向管理员或其他应用程序发送通知。自动故障迁移(Automatic fail...

2020-01-07 12:05:02 151

原创 Redis的两种数据持久化方式RDB和AOF

#修改为守护模式daemonize yes#设置进程锁文件pidfile /usr/local/redis-3.2.8/redis.pid#端口port 6379#客户端超时时间timeout 300#日志级别loglevel debug#日志文件位置logfile /usr/local/redis-3.2.8/log-redis.log#设置数据库的数量,默认数据库为0,...

2020-01-07 11:01:12 79

原创 Redis的三种过期策略

1. 被动删除。获取键时,检查是否过期(对CPU)友好;2. 主动删除。Server cron事件,防止一些key被读取的概率极低,不会被动删除。定时执行Server cron事件(每秒10次,可以通过hz设置),随机检查清理设置了过期时间的键。对内存友好机测试100个设置了过期时间的key删除所有发现的已过期的key若删除的key超过25个则重复步骤13. 当前已用内存超过ma...

2020-01-07 10:45:08 254

转载 斐波那契数列(兔子繁殖数列)

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在...

2020-01-07 10:21:30 3978

原创 一个HTTP request请求从浏览器发出到渲染出页面的过程

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2020-01-06 11:19:43 915

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除