自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

PHPerJiang

努力努力再努力!

  • 博客(99)
  • 收藏
  • 关注

原创 GO goroutine暴涨与response.Body.Close()的关联

背景项目接口压测过程中发现goroutine暴涨头脑风暴看到暴涨我第一时间想的不是网络问题,而是代码层面的问题,因为我知道我代码里没有写.Body.Close(),没有手动关闭链接,导致协程无法正常关闭,从而goroutine暴涨代码review我看了下generate_url中使用http包的地方,发现咱们用的框架的http被二次封装过,看框架源码, 代码层面已经有一个Body.Close(),所以外层调用默认参数下,都是会关闭请求资源的所以理论上讲,我外层并不需要..

2020-09-07 09:58:20 1258

原创 linux查看程序输出

背景go-link挂了,我想看下日志,但是无从下手, 从梁架构那学来了一个命令 journalctl动态的查看某个程序的输出日志journalctl -n 1000 -f -u go-link.service查看某一个某一时刻的输出日志journalctl -S "2020-07-13 15:37:00"这里记录一下简单用法,我们可以通过journalctl -h命令来深入了解一下具体参数,为了方便我学习,我留下一个传送门https://man.linuxde.net..

2020-09-07 09:56:53 1802

原创 Golang & PHP 正则大小写差异

背景app_url_handle重构过程中,我们采取尽量避开正则操作,但是事与愿违,还是有场景用正则,结果就踩了个大小写的坑PHP版正则/(https|http):\/\/(item|item.m)\.(jd)\.(com|hk)(\/product)?\/(\d+)\.html/iPHP版正则提取了多个地方的数据,但是只用了其中的id, 并且忽略大小写,如果你把正则原封不动的甩到golang正则编译器里,绝对报错,原因是两种语言的大小写语法不通GO版正则(?i)(...

2020-09-07 09:55:06 543

原创 Kafka 三种分区策略分析

背景年初的时候用搭建过一个数据处理系统,mq用的kafka,当时对kafka的分区策略不明确,用的默认策略,即RangeAssigor,但我并不知道具体的分区消费逻辑。这几天趁着架构组向下推广kafka, 我研究了具体的分区原理。我有个疑问最新的kafka有三种分区策略,分别是RangeAssigor、RoundRobinAssignor、StickyAssignor,默认的策略是RangeAssigor,客户端可以指定使用某种策略,那这三种策略的原理、应用场景是什么?主题及分区例子.

2020-09-07 09:54:22 941 3

原创 Golang & PHP 针对base64的差异

背景在重构app_url_handle的时候,有一段逻辑的数据是需要使用base64处理的,身为老鸡贼的我,本能的去看了下golang的文档,果然,用起来没有我想象的那么容易,两种语言还是有差异的,接下来我给大家举例并分析一波,以便理解。概念这里需要先普及一个概念和一个索引表 base64双向的编码/解码协议,根据一个64字符的字符集定义,RFC 4648标准化了两种字符集。默认字符集用于MIME(RFC 2045)和PEM(RFC 1421)编码;另一种用于URL和文件名,用'-'和'_

2020-09-07 09:53:25 1226

原创 Golang 指针nil问题、结构体判空 踩坑-1

背景 1有两个方法A 、B 以及一个结构体 P , AB中传递的是P的指针问题1 代码如下此代码看着没有明显报错,当你编译的时候不会报错,能打包,但是你运行的时候会报错,panic: runtime error: invalid memory address or nil pointer dereference , 提示是个空指针。分析为什么会这样呢,我们首先是初始化了一个结构体指针p,此时它的值是nil,但是我们并没有进行数据存储操作,所以p的指向不变,仍然是ni...

2020-09-07 09:49:47 8295 1

原创 vscode配置go环境

前提是本地配置好了go环境如果想省事,可以直接下载goland,这个是专门用来写golang的,支持的很完美,传送门https://www.jetbrains.com/go/promo/?gclid=EAIaIQobChMIrY7pxbvB6gIVQteWCh1QLw-YEAAYASAAEgI5UfD_BwE如果你想用vscode撸代码,那么你需要做下面的事情1.打开vscode,在应用商店中搜索Go, 安装go插件,如下图2.打开一个终端 1) 输入命令e...

2020-09-03 15:56:04 6718

原创 Kafka Ack应答机制理解

背景最近李哥做了kafka的调研,我看了他做的kafka与rabbitmq的对比与性能分析,打算深入了解一下kafka的ack应答机制1.kafka基础大家可自行学习2.这里我直接分析下ack应答机制,李哥的压测全部都是用的默认配置,ack应答用的all (-1) 即等leader与isr里的follower里都落盘后再给producer回应,我们来盘点一下这种机制的优缺点。什么是ack应答机制?简单点理解就是:producer发送消息到leader收到消息之后发送ack .

2020-09-03 14:59:48 4695 1

原创 Golang 原子操作的应用及踩坑

背景gener_url常驻内存获取配置优化常驻内存的相关请见博文Golang 常驻内存学习并使用优化原因由于需要将3个redis-key改为常驻内存,一开始我是逐个key获取并判断err,有问题则终止本次操作,虽然常驻内存的启动仅在项目启动时、每分钟一次更新,但我希望尽量不写冗余操作,所以做了如下优化:使用pipeline处理key 将之前为了处理map类型与unsafe指针转换而额外引入的结构体指针给清除掉。原子操作golang中会出现并发读取变量,那么为了防止数...

2020-09-03 14:57:24 1282

原创 Golang 常驻内存学习并使用

背景 link重构过程中,发现一个问题,存在2个大key(很大那种),在PHP版代码下,是通过构造函数读取redis拿到,众所周知,PHP每次请求结束后都会销毁, 那么就意味着PHP版会反复读取这个大key,虽然现在线上没问题,但是却是一颗毒瘤。思考既然我们用golang重构项目,那么我们是不是需要发挥go的语言特性来优化掉这个地方呢?同事建议使用常驻内存在做这块,充分发挥go的特性,项目初始化的时候我们读一次放到内存里,然后使用go的定时器,每分钟获取一次配置更新内存中的配置,这...

2020-09-03 14:52:11 1518

原创 Golang json解析踩坑

背景众所周知,PHP是弱类型,Go是强类型,所以Go的json解析注定曲折。有一段json如下:{"name":"Gopher","age":23,"marray":false}PHP使用:json_decode函数解析,解出的数据类型并不重要Go解析: 使用json.Unmarshal函数,此函数如果使用原生函数 ,目标结构体字段数字类型定义为字符串类型,那么解析结果中会丢失数字类型,即原生解析,无法把数字类型解析为字符创类型解决方案如果场景中确实需要将数字类型的数据.

2020-09-03 14:50:54 4509

原创 记一次onbeforeunloadbody的页面关闭/卸载触发处理

需求背景: 同一个后台编辑页面,A编辑的时候B访问此页面,给出提示“A正在编辑”。思路: 结合操作人、操作文章做一个键值对存进redis做标识位,过期时间为半小时,文章第一个操作的会被记录,后续操作的会提示,当第一个操作的人关闭页面时,释放redis标识。实施: 后台加载编辑页时获取当前操作人,若是第一个则记录,前端js使用window.onbeforeunloadbody方法监听编辑页关闭/卸载,触发释放redis标识的ajax问题: 运营、开发、产品...

2020-09-03 14:45:52 453

原创 json引发的浮点数入舍失效问题

背景两个浮点型数字做运算时,可能会会出现下面的情况39.9-10 = 29.99999999999981并且使用round保留指定位数后api对外无效原因json问题引发,据说php7以上就好用解决php7之下版本的那就用下面这个方式吧,也能实现想要的效果$frequent_price =strpos($frequent_price,'.') !== FALSE ? rtrim(rtrim(sprintf("%01.2f", $frequent_price),"0"...

2020-09-03 14:44:46 359

原创 ES.ingest

需求再多也不能忘记学习。。es的ingest节点,实际上就是对es的文档索引之前做预处理 ingest节点默认时在每个节点都开启的,所以可以在每个节点生效,也可以设置单独的节点 ingest会拦截index、bluk请求,对请求内容做预处理,将处理完毕后的数据再转发给es,然后进行index或者bluk 下面举个栗子我们先自定义一个pipelinePUT _ingest/pipe...

2019-12-03 17:21:23 1195

原创 ES. _update_by_query

场景: 给es里某个字段增加一个子类型,要求之前的数据也能被查询到如上场景,我们可以使用es里的_update_by_query 例如 POST class/_update_by_query 直接对加完类型的索引使用即可。 下面是一个例子 PUT class{ "mappings" : { "properties" : { "stud...

2019-11-27 17:26:48 6205

原创 ElasticSearch7.x 【深度分页】

各位老爷好,最近太忙了以至于没有更新给大家道歉了。问题1. 深度分页相关优化背景是脚本循环取es20条数据,平常时间段内,es里符合条件的数据不会超过1w, 而大促期间,则会超越1w,与es里的索引配置起重读而导致报错。尝试一:尝试:尝试使用scroll的方式查询,毕竟是个脚本嘛,实时性要求不高,编码很简单,大家对着api写即可。结果是,我查询1w条之后的10条,没有引发报...

2019-11-26 15:35:00 1746

原创 ES7.X 自定义分词+scroll查询

11月拉!自定义分词 PUT user{ "settings": { "analysis": { "analyzer": { "pinyin_analyzer":{ "tokenizer":"my_piniyin" } }, "tokenizer": { "my_piniy...

2019-11-01 17:40:24 1111

原创 Es7.x记录【相关性打分,2019-10-31更】

es5.x之前默认使用TF-IDF算法打分,5.x之后默认使用BM-25算法打分TF-IDF算法TF : term frequency ,检索词在文档中出现的频率 => 检索词 / 文档词总数 DF : document frequency ,检索词在所有文档中出现的频率 IDF : inverse document frequency , 即 log(全部文档数/检索词出现过的...

2019-11-01 16:22:59 657

原创 ES7.x 聚合相关【聚合&索引迁移、重建、别名】

聚合聚合有以下四个种类 Bucket Aggregation 一些列满足特定条件的文档的集合,给字段分桶,比如给性别分类,一个user文档属于哪个性别。 GET movies/_search{ "size": 0, "aggs": { "year": { "terms": { "field": "year" } } ...

2019-10-21 15:03:37 2056

原创 ES7.x 摘要【搜索相关要点,完】

2019-10-12更URI Search GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s{ "profile": "true"} 上面是一个请求uri search请求例子 q : 指的是查询语句,使用query stri...

2019-10-12 18:24:13 383

原创 ES7.x,相关摘要【更新完毕,更新至分词器】

前言:现在是2019.10.11,最近工作比较忙,小灶时间比较少,现在工作结束,可以继续学习了,敲开心!index与create的区别: index的功能比create强一点,也是为什么广泛使用的原因,他的作用是如果文档不存在,则索引新的文档,如果文档已经存在,则会删除现有文档,新的文档会被索引,并且版本号verson会被+1。这点和update还是有区别的。 index与update...

2019-10-11 17:59:51 644

原创 Es6.x语法探索【结束】

2019-09-21script使用表达式expression进行打分 /** * 使用打分函数来进行排序 * @Author: jiangyu * @Time: 2019/9/20 18:00 */ function search_func_score(){ $params = [ 'index' => 'func_score', 'type' ...

2019-09-21 15:59:14 322

原创 php-elasticsearch使用时的踩坑【完结】

2019.09.17 16:30:00创建索引/修改配置 //创建索引 public function create_index(){ $params = [ 'index' => 'my_index', 'body' => [ 'settings' => [ 'number_of_shards' => 2, ...

2019-09-17 16:38:24 1641

原创 es安装下载与踩坑

由于在公司里接触es的业务,所以我们来温习一下es相关的知识下载生产环境为lnmp,这里我是在wamp环境下搭建的zip下载es并解压https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-windows-x86_64.zip 此方式解压后直接在bin目录下找elasticsearch.bat...

2019-09-17 14:45:11 498

原创 go中值引用与指针引用

值接受者与指针接受者的一个小坑:1.值接收者:(variabletype)func()值接受者可以给接收值、也可以接收指针,因为go会对接收的指针进行解引用。但是!variable传递进函数的只是副本,他们都是在variable的副本上进行操作,并不影响variable的原本的值。2.指针接受者:(variable *type)func()指针接收者接收的是var...

2019-08-22 15:22:58 1085

原创 ElasticSearch配置相关

由于公司业务需要接入es,在此记录下es的由0到0.5之旅。1.es的配置文件时elasticsearch.yml,你可以在里面进行es的基础配置。2.es默认启动的集群名称时elasticsearch,生产环境需换个名,避免某人的文档加入集群造成以为,换个名称能减少你很多次心痛的经历。cluster.name:你的集群名3.节点名称也需要更改,如果不自定义名称时,es在启动节点的时候...

2019-08-13 09:51:47 135

原创 基于ci框架的phpexcel导入导出excel文件

导入public function import_excel($file, $option = []){ $result = ['error_code'=> 0, 'error_msg'=>'success', 'data'=> []]; if (!file_exists($file['tmp_name'])){ $result['error_code'] =...

2019-06-03 13:19:50 1379

原创 归并排序算法【PHP实现】

排序算法:冒泡排序 选择排序 直插入排序 希尔排序 堆排序 归并排序 快速排序归并排序:稳定,时间复杂度为O(nlogn) ~O(nlogn) ,空间复杂度为O(n),是比快排稳定的排序算法function mergeSort($arr){ $size = sizeof($arr); if ($size <= 1){ return $arr; } $...

2019-05-20 15:29:45 184

原创 关于冒泡排序算法优化

最普通的冒泡排序算法function bubbleSort($arr){ $size = count($arr)-1; for ($i = 0;$i <= $size ; $i++){ for ($j = $size-1;$j >= $i;$j--){ if ($arr[$j] > $arr[$j+1]){ $tmp = $arr[$j]; $...

2019-05-18 16:48:42 143

原创 Goland常用快捷键

快捷键 作用 备注ctrl + n 导航到类名ctrl + shift + n 导航到文件ctrl + e/ctrl + shift + e 打开到最近的文件/打开最近修改的文件ctrl + shift + i 简短地查看源定义ctrl + alt + m 重构表达式为函数 光标在表达式的末尾ctrl + space 快速返回实现 return 字段后使用ctrl+ shift+ a...

2019-04-30 22:50:35 648

转载 Goland下载安装破解

下载安装破解https://blog.youkuaiyun.com/u014044812/article/details/87621168

2019-04-27 09:07:56 2380

原创 mogodb

下载安装window:傻瓜式安装。配置环境变量。启动时和redis一样 启动一个服务端 然后再开一个客户端端口。数据库路径设置1.可以使用命令 mogod --dbpath url --port 270172.可以在任意位置创建一个配置文件 内容为 dbpath = url ,文件名为xxx.cfg,使用命令mogod -config url/xxx.cfgmongo...

2019-04-24 21:05:25 170

原创 systemctl [1]:Failed to start IPv4 firewall with ip tables

启动iptables防火墙的时候出现以下问题Job for iptables.service failed because the control process exited with error code. See "systemctl status iptables.service" and "journalctl -xe" for details.使用systemctl stat...

2019-04-22 17:58:30 878

原创 Mysql8.0的一个坑

环境:Mysql8.0 、PHP 7.3报错如下:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client原因如下:mysql8.0使用了新的密码验证插件,caching_sha2_password,而PHP7.3上并不支持,所以要么我们换个支持的PHP版本,要...

2019-04-18 11:22:15 1196

原创 SVN

服务器安装svn服务并配置下载安装svn #下载安装svnyum install subversion#寻找二进制文件which svnserve 创建svn版本库 #创建svn根目录mkdir -p /usr/local/svn#创建版本库svnadmin create /usr/local/svn/app 修改服务配置文件...

2019-04-11 13:16:56 185

原创 Linux下安装Linux并给PHP安装php-redis插件

安装Redis服务源码下载redis #下载wget -c http://download.redis.io/releases/redis-4.0.10.tar.gz#解压tar -zxvf redis-4.0.10.tar.gz#安装依赖yum -y install gcc gcc-c++ kernel kernel-devel#切目录并编译cd redis-4...

2019-04-10 17:10:05 442

原创 LNMP的安装配置

更换yum源为阿里源#!/bin/bash#备份本地yum源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak#获取阿里的yum源配置wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Ce...

2019-04-10 15:41:44 376

原创 js导出table为csv文件

html<a onclick="exportTableToCSV(this, $('#tb'), 'Lanmu_feed_count.csv')"><input type="submit" value="导出"></a>//xportTableToCSV(当前按钮对象, table表格id, 文件名)javascriptfunction e...

2019-04-08 16:05:24 1639 1

转载 CentOS使用yum安装mysql8.0【传送门】

大神写的教程,mark一下https://blog.youkuaiyun.com/ManagementAndJava/article/details/80039650

2019-04-04 15:34:36 359

原创 3月技术总结--下拉搜索框等

前言时间是2019.3-2019.4最近这个月忙到头炸,趁各方面都结束了来进行一波总结。搜索下拉框要求显示sug这个是我在公司里接到的一个后台需求,我一个写接口的让我去写后台界面。。其中有个搜索下拉框实现实时搜索并显示sug,这个我就。。。不能说:不会! 要说:我TM的虽然不会,但是我能做出来!实现方式:使用jquery-ui插件 ,其中有个autocom...

2019-04-03 16:06:47 433

空空如也

空空如也

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

TA关注的人

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