自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 PHP 实现抽象工厂模式

设计模式-使用php实现抽象工厂模式【概要】创建型模式抽象工厂模式提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类【GOF95】【特点】抽象工厂模式(Abstact Factory)是一种常见的软件设计模式。该模式为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以为此系列的产品族创建一个具体的工厂类。【结构图】【主要角色】抽象工厂(Abstract Factory)角色:它声明一个创建抽象产品对象的接口。通常以接口或抽象类实现,所...

2020-09-30 12:13:25 289

原创 2020年PHP最新面试题(含答案)

1. 数据库设计经验,为什么进行分表?分库?一般多少数据量开始分表?分库?分库分表的目的?什么是数据库垂直拆分?水平拆分?分区等等一:为什么要分表当一张表的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就

2020-09-29 18:57:18 1057 1

原创 PHP单例模式及应用实例

首先我们要知道明确单例模式这个概念,那么什么是单例模式呢?单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类我们称之为单例类。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。下面我们讨论下为什么要使用PHP单例模式?多数 人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种”计划生育”.

2020-09-29 16:17:26 209

原创 ElasticSearch - 聚合 aggs 详解

聚合概念 ElasticSearch除了致力于搜索之外,也提供了聚合实时分析数据的功能 如果把搜索比喻为大海捞针(从海量的文档中找出符合条件的那一个),那麽聚合就是去分析大海中的针们的特性,像是 在大海里有多少针? 针的平均长度是多少? 按照针的製造商来划分,针的长度中位值是多少? 每月加入到海中的针有多少? 这里面有异常的针麽? 因此透过聚合,我们可以得到一个数据的

2020-09-29 12:02:46 6137 1

原创 elasticsearch面试必考

es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?面试官心理分析问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是......对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢?es 写数据过程 客户端选择一个

2020-09-28 18:17:19 233 1

转载 PHP 实现多服务器共享 SESSION 数据

一、问题起源稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名、密码在整个网站的各个模块中都是可以登录使用的。各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可。但还存在一个问题,就是用户在这个服务器登录之后,进入另一个服务器的别的模块时,仍然需要重新登录,这就是一次登录,全部通行的问题,映射到技术上,其实就是各个服务器之间如何实现共享SESSI.

2020-09-28 16:10:24 225 1

原创 XSS攻击过滤【包括数据库、页面方面】

/* * XSS攻击过滤 * 调用此方法字段 展示时需要用stripslashes() 清理从数据库或 HTML 表单中取回的数据 */public static function clearXss($string = ''){ if (empty($string)) return ""; if (!get_magic_quotes_gpc()) { //不对magic_quotes_gpc转义过的字符使用addslashes(),避免双重转义。 //这个是数据库层..

2020-09-28 11:11:00 599

转载 设计一个高质量的API接口

在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性、接口的稳定性、接口的跨域性、接口的协议规则、接口的路径规则、接口单一原则、接口过滤和接口组合等诸多因素,本篇文章将简要分析这些因素。一、规范性建议1、职责原则在设计接口时,必须明确接口的职责,即接口类型,接口应解决什么业务问题等。2、单一性原则在明确接口职责的条件下,尽量做到接口单一,即一个接口只做一件事,而非两件以上。很多非资深接口设计者,在设计接口时,总认为接口所做的事越多,越牛叉,这是非常严重的错误认识

2020-09-28 10:13:02 489

转载 大型网站处理高并发要点

核心技术点前端优化前端优化主要包括动态内容静态化,增加前端缓存。页面静态化是指将指含有大量动态元素的动态网页,如jsp、php等,转换为html静态页 面,静态页面由于不用加载动态元素,其访问速度要比动态页面快得多,可以增加访问速度,减小数据库压力;前端页面缓存在系统前端对Web服务器上的页面进 行缓存。 CDN技术CDN即内容分发网络,其 基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互 联网基础...

2020-09-28 07:15:40 118

转载 如何设计一个安全的对外接口?

前言最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易订单有关,所以安全性很重要;这里整理了一下常用的一些安全措施以及具体如何去实现。安全措施个人觉得安全措施大体来看主要在两个方面,一方面就是如何保证数据在传输过程中的安全性,另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。1.数据加密我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常

2020-09-27 17:05:13 607 1

转载 nginx proxy_cache 缓存配置[转]

前言:由于本人工作原因,涉及到网络直播领域,其中视频的回放下载,涉及到了一些视频下载方面的技术。针对于一个完整视频的下载,目前市面上的主流做法是,先将整个视频流切片,存储到文件服务器中,在用户需要观看回放视频时。通过一个视频回源服务器,去文件服务器中逐个请求切片,返回给用户播放。今天着重探讨的是关于回源服务器缓存的配置以及合理的缓存策略。通过给回源服务器配置缓存的案例,详细讲解一整套缓存配置机制,并且可沿用到其他任何缓存配置场景中。今天的讲解分为四点:回源服务器的工作是啥 为啥需.

2020-09-24 11:49:19 686

原创 使用缓存注意事项

1、浏览器、redis、nginx缓存同时使用的时候应该注意事项2、redis缓存10分钟、nginx缓存1小时,这时候有个时间差,怎样消除这个时间差呢,还是只能等

2020-09-24 10:40:17 20

原创 PHP工厂模式的使用场景,使用方法

<?phpinterface transport{ public function go();}class bike implements transport{ public function go(){ echo "bike跑的慢";}}class car implements transport{ public function go(){ echo "car开的快";}}class bus implem...

2020-09-24 07:34:56 486

原创 PHP 单例模式应用

<?php/** * Created by PhpStorm. * User: 17839 * Date: 2020/3/23 * Time: 10:54 */final class Db{ // 保存对象 private static $instance = null; // 数据库配置信息 private $db_host; // 主机名 private $db_user; // 用户名 private $db_pass; .

2020-09-23 17:39:14 64

转载 彻底理解浏览器的缓存机制(http缓存机制)

一、概述浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种:同步sau交流学习社区(首发):https://www.mwcxs.top/page/565.html1、HTTP请求(Request)报文,报文格式为:请求行 – HTTP头(通用信息头,请求头,实体头) – 请求报文主体(只有POST才有报文主体),如下图HTTP响应(Respon..

2020-09-22 10:45:12 396

转载 【Mysql优化】聚簇索引与非聚簇索引概念

必须为主键字段创建一个索引,这个索引就是所谓的"主索引"。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。首先明白两句话:  innodb的次索引指向对主键的引用 (聚簇索引)  myisam的次索引和主索引 都指向物理行(非聚簇索引)  聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引(理由:数...

2020-09-22 08:06:00 116

转载 MySQL优化:如何避免回表查询?什么是索引覆盖?

数据库表结构: 1 2 3 4 5 6 createtableuser( idintprimarykey, namevarchar(20), sexvarchar(5), index(name) )engine=innodb; 1 2 3 selectid,namewherename='...

2020-09-21 18:28:43 112

转载 数据库索引原理及优化

一、摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。二、常见的查询算法及数据结构为什么这里要讲查询算法和数据结构呢?因为之所以要建立索引,其实就是为了构建一种数据结构,可以在上面应用一种高

2020-09-21 16:38:37 270

原创 linux系统的常用命令

1、lsof -i :端口号 查看这个端口号是否在监听2、netstat -ltn 查看所有被监听的端口号

2020-09-21 11:08:03 68

转载 Mysql索引

文章目录 一、索引概述 1. 简介 2. 索引的原理 3. 索引的优点 4. 索引的缺点 二、索引的使用场景 三、索引的分类和创建和修改删除等命令 1. 基本索引类型 2. 创建的语句 3. 索引的创建、查询和删除 索引的创建 ① 普通索引(单列索引) ② 复合索引(组合索引) ③ 唯一索引 ④ 主键索引 ⑤ 全文索引 索引的查询和删除 四、简单实例演示

2020-09-21 09:06:49 205

原创 约瑟夫环的算法问题

1、一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号这是著名的约瑟夫环的问题function fn($n ,$m) { $arr = range(1,$n); $i = 0 ; //设置数组指针 while(count(...

2020-09-20 14:24:03 99

原创 面试高级php工程师,一般会问到哪些问题?

找工作就像找媳妇一样,必须要双方都看对眼才行。PHP面试首先面试官肯定对你过往的项目感兴趣,如果过往的项目和现在公司正开发的项目有重合,那么就会着重问你项目中的所用到的技术,解决方案,最优解,还会问你处理这些项目的时间和配合有关的问题。项目方面,没有什么固定的套路,需要面试者根据.

2020-09-20 09:51:01 29

原创 nginx缓存机制 (浏览器缓存及nginx缓存的原理及应用)

什么是缓存?Web缓存是可以自动保存常见文档副本的HTTP设备。当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地设备而不是服务器中提取这个文 档。为什么使用缓存?缓存减少了冗余的数据传输,节约了网络费用 缓存缓解了网络瓶颈的问题,对于带宽的要求 缓存降低了对原始服务器的要求,降低服务器压力 缓存加速了页面的展示缓存的分类:缓存分为服务端侧(比如Nginx,redis,memcached)和客户端侧(比如web browser)。服务端缓存又分为 代理服务器缓...

2020-09-18 12:15:13 2913 2

转载 nginx缓存配置及开启gzip压缩

nginx缓存配置及开启gzip压缩2019-05-09 21:42龙恩0707 阅读(9760) 评论(1)编辑收藏阅读目录一:nginx缓存配置 二:nginx开启gzip回到顶部一:nginx缓存配置在前一篇文章,我们理解过http缓存相关的知识点, 请看这篇文章. 今天我们来学习下使用nginx服务来配置缓存的相关的知识。nginx配置缓存的优点:可以在一定程度上,减少服务器的处理请求压力。比如对一些图片,css或js做一些缓存,那么在每次刷新浏览器的...

2020-09-18 11:49:20 173

转载 浏览器缓存详解:expires,cache-control,last-modified,etag详细说明

最近在对CDN进行优化,对浏览器缓存深入研究了一下,记录一下,方便后来者画了一个草图:每个状态的详细说明如下:1、Last-Modified在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记(HttpReponse Header)此文件在服务期端最后被修改的时间,格式类似这样:Last-Modified:Tue, 24 Feb 2009 08:01:04 GMT客户端第二次请求此URL时,..

2020-09-18 09:04:10 501

转载 PHP中9大缓存技术总结

1、全页面静态化缓存也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。此种方式,在CMS系统中比较常见,比如dedecms;一种比较常用的实现方式是用输出缓存:Ob_start()******要运行的代码*******$content = Ob_get_contents();****将缓存内容写入html文件*****Ob_end_clean();2、页面部分缓存该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,

2020-09-18 07:16:41 122

原创 高并发之缓存

缓存是高并发中比不可少要应用的技术缓存分:程序缓存、redis|memcache缓存、cnd缓存、服务器缓存(nginx)等

2020-09-18 07:14:43 61

原创 Websocket简单运用

是什么:全双工通信协议。 能做什么:服务端可以主动的发送数据给客户端 golang应用到的包go get github.com/gorilla/websocketserver.gopackage mainimport ( "fmt" "github.com/gorilla/websocket" "log" "net/http")//设置合适读取字节var upgrader = websocket.Upgrader{ ReadBufferSize: 10

2020-09-14 10:01:24 129

原创 Go项目经验 关于依赖更新问题

如果本地项目有新的依赖更新,不需要提交github里的代码,只需要提交go.mod就可以了,线上代码在编译的时候就有自动更新新的依赖

2020-09-14 09:48:23 1533

原创 go-websocket后台聊天室框架

在go中使用websocket实现一个简单的信息通信的框架,可以是聊天,也可以是其他用途,只要是通信的就可以。因为好多资料都不详细,这里贴上详细完整的代码和相关的解释。首先,需要先获取websocket的包 ,go get github.com/gorilla/websocket,然后看代码。 代码分为两个文件,主函数入口启动文件和server文件(包含一些定义的方法)。代码介绍完毕后,最下面会介绍怎么快速的使用该方法(代码)。websocket 聊天室数据结构分析.首先要做一个聊天室我们需要

2020-09-13 18:32:32 1374

转载 Linux lsof命令

lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通.

2020-09-11 11:47:30 178

转载 Centrifugo(实时消息服务器)介绍+demo

Centrifugo是一个实时消息服务器, 它与语言无关,可以与任何语言编写的应用程序后端(Python,Ruby,Perl,PHP,Javascript,Java,Objective-C等)结合使用。Centrifugo作为单独的服务运行,并保持从应用程序客户端(从Web浏览器或其他环境,如iOS或Android应用程序)持续的WebSocket或SockJS连接。当发生某些事件时,您可以使用Centrifugo API将其广播给所有感兴趣的客户。demo:https://github.com/.

2020-09-11 07:42:08 1715

转载 Socket原理详解

1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有:消息(message)、共享存储区(shared memory)和信号量(semaphore)等.他们都仅限于用在本机进程之间通信。网间进程通信要解决的是不同主机进程间的相互

2020-09-10 11:38:16 2158

转载 TCP和SOCKET关系

socket是TCP/IP协议的APITCP是数据的介质,Socket是TCP的介质.查了一下RFC文档,Socket是RFC147,更新时间是1971年.TCP是RFC793,更新时间是1981年.Socket在ARPA网就出现了.应该说TCP是socket上的一种通信协议.http://bbs.csdn.net/topics/320251688http://www.cnblogs.com/riacool/archive/2010/12/14/1905404.html...

2020-09-10 08:51:01 426

转载 Mysql 功能大全

本文是转载,原文地址:https://blog.csdn.net/qq_38490457/article/details/107640904?utm_medium=distribute.pc_feed.none-task-blog-personrec_hot-31.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_hot-31.nonecase&request_id=5f28e66c2405af..

2020-09-08 18:36:12 270

原创 Golang reflect反射的简单应该

func (c *Course) Test(ctx *gin.Context) { var name string = "咖啡色的羊驼" //todo::TypeOf会返回目标数据的类型, 比如int/float/struct/指针等 reflectType := reflect.TypeOf(name) //todo:: valueOf返回目标数据的值,比如上文的 "咖啡色的羊驼" reflectValue := reflect.ValueOf(name) f.

2020-09-08 18:26:54 197

原创 Golang ... 可变参数——参数数量不固定的函数形式

例1:func test(args ...string) { for _, v := range args { fmt.Println(v) }}调用var strs = []string{ "a", "b", "c",}test(strs...)例2:在多个可变参数函数中传递参数func rawPrint(list ...interface{}) { for _, s := range list { switc

2020-09-08 16:26:54 643

原创 Golang interface赋值与取值的实例

bs := make(map[string]string)bs["name"] = "张三"bs["age"] = "12"var student interface{}student = bsa := student.(map[string]string) //将interface转换为map类型,如果不确定数据类型的时候可以使用类型断言,确定其类型之后再转换为相对应的类型,然后取值fmt.Printf("学生的姓名是: \n %v", a["name"]) //结果: 张三.

2020-09-08 08:52:40 8620

原创 Mysql Group By时查询多个字段报错问题解决

1、SELECT pk_class ,COUNT(tc.fk_course) AS num FROM t_course_class AS tc WHERE deleted=0 AND GROUP BY tc.fk_course报错:[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the r...

2020-09-07 18:52:29 2101

原创 Mysql 嵌套查询 IN的用法

表一:CREATE TABLE `t_course_user` ( `pk_course_user` int(11) NOT NULL AUTO_INCREMENT COMMENT '报名信息ID', `fk_course` int(11) NOT NULL DEFAULT '0' COMMENT '课程ID报名的课程', `fk_user` int(11) NOT NULL DEFAULT '0' COMMENT '报名人', `fk_user_owner` int(11) NOT N...

2020-09-07 18:43:23 1525

空空如也

空空如也

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

TA关注的人

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