自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据抽取工具调研

数据抽取简述数据抽取是从数据源中抽取数据的过程。实际应用中,数据源较多采用的是关系数据库。从数据库中抽取数据一般有以下几种方式。(1)全量抽取全量抽取类似于数据迁移或数据复制,它将数据源中的表或视图的数据原封不动的从数据库中抽取出来,并转换成自己的ETL工具可以识别的格式。全量抽取比较简单。(2)增量抽取增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或修改的数据。在ETL使用过程中...

2019-10-13 18:50:31 1188

原创 Airflow 在 python operator 下如何使用execution_date变量

Airflow 在 python operator 下如何使用execution_date变量呢?不复杂,但是要跳出宏变量的圈,不要老想着用下面这种宏实现就行了thedate = '{{(execution_date - macros.timedelta(days=1)).strftime("%Y-%m-%d")}}'在 python operator 下,用如下代码def example...

2019-09-17 22:46:19 3566

原创 superset nginx 反向代理配置遇到的一个小问题

在用 nginx 配置 superset 反向代理,并且使用 map 通过 cookie 分流的时候,遇到十分诡异的问题,访问主页的时候总是被重定向到 upstream 同名的域名 upstream release { server 127.0.0.1:8088 weight=1 max_fails=1 fail_timeout=30s; } upstre...

2019-09-15 20:58:55 1065

原创 Spring Boot MyBatis 使用 Redis 作为二级缓存遇到的问题

在 Spring Boot MyBatis使用 Redis 作为二级缓存的时候,遇到了一个令人诡异的问题,在 MyBatis 从 Redis 中取出缓存并反序列的时候总是报这个错误org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang...

2019-09-15 20:56:45 773

原创 Intellij idea VisualVM Launcher 插件在 java 11 无法使用的问题

在 idea 中安装了 VisualVM Launcher 插件,简单配置了下然后发现不管我怎么点就是不来那个熟悉的 VisualVM 窗口。初学 java 的我一脸懵逼,以为 idea 出了问题或者 VisualVM Launcher 插件出了问题,然后互联网上的资料清一色教你怎么在 idea 上怎么装插件的。然后我转换思路,搜索 java 11 VisualVM,才找到原因。原来从 ja...

2019-09-15 20:55:56 1118

原创 Golang 使用 sort 对切片排序需要注意的一个点

最近用 sort.Slice 方法对 slice 做排序功能的时候遇到了一个小坑先看一段代码package mainimport ( "fmt" "sort")func main() { people := []struct { Name string Age int }{ {"Alice", 25}, {"Elizabeth", 75}, {"Alic...

2019-07-30 10:28:32 2847

原创 spark 通过 jdbc 写入 clickhouse 需要注意的点

最近在用 spark 通过 jdbc 写入 clickhouse 的时候,遇到一些坑,这里分享下,造福人民群众。一个 WARNWARN JdbcUtils: Requested isolation level 1, but transactions are unsupported这是因为 clickhouse 不支持事务造成的,解决方案,jdbc 加入 isolationLevel 等于 ...

2019-07-30 10:25:10 3083

原创 Go 重构 PHP 项目的一个神器 jsoniter

Go 和 PHP 通信是痛苦的,PHP 这个神奇的 json ,各种奇奇怪怪的 json 都能生成出来,如果一开始就奇怪直接用interface也就算了,最可怕那种是类型会变。在用 Go 重构 PHP 项目的时候,两个项目往往会共享存储,我们在生成缓存的时候,也经常把数据转成 json 去存储。我大 PHP 生成 json 有这么两个另 Go 崩溃的事情,一个是 int 和 string 的不...

2018-11-06 13:29:39 812 1

原创 Go Gin 框架 curl -I 返回 404 的问题

在使用 Go 的 Gin Web 框架的时候,发现一个有趣的问题,curl 一个 router 是正常的,但是加上 -I 参数就 404 了,就像下面这样package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *gin.Contex...

2018-11-01 12:55:56 1747

原创 Go 的 IDE Goland 性能优化

最近在使用 Goland 写代码的时候,感觉 Goland 明显有点卡,快捷键呼出 Package structure 经常半天才响应。这这这……这不应该是我这 i7-7700 + 32G 内存 + 256G SSD 黑苹果该有的状态,一定是幻觉。但是每天都卡好多次,明显不是幻觉。我推测可能是 GOPATH 下的包太多了,而 Goland 每次都会根据 GOPATH 建索引,这么多的文件,肯...

2018-11-01 12:54:26 9230 2

原创 python 实现 jumpserver 自动登录

现在很多团队都在使用 jumpserver(http://www.jumpserver.org/ )作为跳板机,管理服务器权限,一些对安全要求比较高的团队还会加上 Google authenticator (Google 身份验证器)。但是安全和方便就是跷跷板的两端,太安全了,就会不方便。每次登录跳板机还要打开手机输入 Google authenticator 的安全码,有点蛋疼,效率也低。...

2018-10-29 17:27:39 2880

原创 php 日志库获取调用方的代码文件地址和代码行数

在使用其他语言的打印日志的时候,经常能看到打印日志时带上文件地址和代码行数,对于调试和查找问题非常方便,但是 php 日志库里则很少见到这个功能,但这个功能还是可以实现的。关键点就是用 php 的 debug_backtrace 函数先看个例子 test.phpfunction test(){ print_r(debug_backtrace());}test();输出...

2018-10-29 17:26:40 870

原创 推荐一款工具可以把 json 转成 go 的 struct

go 这种强类型语言,在 decode json 的时候,一般需要定义一套数据结构用于映射,常用的就是 struct,在没有发现这个工具以前,我都是手写,遇到一些比较大的 json 时候,第一写起来比较恶心,第二还容易出错。在这里推荐一款工具,可以直接使用 json 生成 struct,十分方便,而且是在线的。https://mholt.github.io/json-to-go/看个效果图...

2018-10-09 13:26:22 2408 1

原创 一次有趣的 php json_decode error 分析

之前同事问了我一个有趣的问题,说为什么这个 json 字符串从缓存里读出来可以解析,但是作为一个 php 变量却解析错误呢?先看一个我已经简化了的例子$str = "\\";$j = json_encode($str);echo $j, PHP_EOL;echo json_decode($j), PHP_EOL;输出"\\"\如果你直接把输出的 json 字符串赋值...

2018-09-28 13:00:30 679

原创 因 php 默认的 url encode 编码标准引发的一个问题

先看常用的校验请求合法性的一个方式function createToken($params) { $secretKey = 'secretKey'; ksort($params); $query = http_build_query($params); $token = md5($query . $secretKey); return $toke...

2018-09-25 13:36:03 3612

原创 教你一招如何使用 php 父子进程坑人

现在项目中大多都会使用MQ(消息队列)用来解耦和提升服务稳定性,然后都会面临一个问题,就是消息积压,解决这个问题除了提升处理消息的速度以外,另外就是多开些消费者进程,并发的消费数据。如果是其他语言可以多开些线程或协程消费数据,但是这些东西,在 php 里并没有很好地支持,所以大家多采用多进程的方式来增加消费者,然后这里又有了两种方式,父子多进程和普通多进程。然后这里就有了一个有趣的坑人方法...

2018-09-17 12:36:43 597

原创 swoole task 踩坑及优化

如果有仔细看过 swoole task 的文档的话,应该都会注意到这句话 task 操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task会塞满缓存区,导致worker进程发生阻塞。worker进程将无法接收新的请求task 如果阻塞会引发 woker 进程阻塞,造成服务无法工作,引发问题。我曾经使用 task 发送服务的链路日志,接收日志的服务出现bug,造...

2018-09-10 08:07:21 6703

原创 golang json.Marshal interface 踩坑

Golang 使用 hprose 调用 php 接口,各种类型不确定,用了好多interface,然后发现了 json.Marshal 在处理map类型的时候,key 不能是 interface,否则就会报错package mainimport ( "encoding/json" "fmt")func main() { m := make(map[inter...

2018-08-31 13:04:46 5680 1

原创 怎样在重构PHP项目时快速梳理代码执行流程

最近在用Go重构一个PHP项目,代码写的有点乱,也没文档,没注释,总之就是功能基本靠猜, 然后我找了个小工具快速理清代码执行流程,帮助自己理解代码逻辑。首先打开xdebug的分析器xdebug.profiler_enable = 1xdebug.profiler_output_dir = /tmp分析器有什么用,有兴趣可以去xdebug官网自己去看。但是xdebug分析器输...

2018-08-28 12:54:34 1153

原创 使用 json-forms 生成你的配置

在使用 json 格式存储配置的时候,总是需要在管理后台写一堆代码,去校验参数是否合法,防止用户乱写。最近发现了一个超级好用的工具,可以把开发人员从这个繁琐的工作中解脱出来。那就是 json-forms,可以使用 json schema 自动生成表单,方便的一塌糊涂。这是它的demo地址http://brutusin.org/json-forms/示例 json sch...

2018-08-27 13:04:43 627

原创 swoole http server 性能优化

上线了一个基于 swoole http server 的服务以后,发现这个服务的请求耗时监控毛刺十分严重,接口耗时波动比较大,经过一段时间的分析,发现这个服务 response 包十分大,有些 response 包高达1 ~ 2M,甚至更大,这样就很清楚了,因为包太多,导致服务相应波动比较大。这里稍微解释下,为什么 response 包会导致相应时间波动,这里主要有两个方面的影响,第一是包大会...

2018-08-21 16:34:49 3122

原创 php require和include 相对路径一个有趣的坑

以前总是被教育,不要使用相对路径,这样性能比较差,但是相对路径的问题不仅仅是性能哦,看下面这里例子这是项目结构.├── main.php├── t│ ├── t1.php│ └── t2.php└── t2.phpmain.php<?phpinclude __DIR__ . "/t1.php";include "t2/t1.php";t1.php...

2018-08-20 17:24:43 2189

原创 怎么样使用CLion调试分析MySQL Server

由于在写MySQL日志订阅服务时候,需要确定在什么event之后保存position,所以就开始研究MySQL的源码,刚开始采用最原始的打印输出的方式去调试,然后每次改完编译运行,效率好低,让我很绝望,然后我花了些时间研究下怎么使用CLion Debug MySQL。获取源码git clone https://github.com/mysql/mysql-server编译安装初始化...

2018-08-17 12:42:40 1792

原创 想要学好Go语言的必须知道的一个小技巧

由于我转Go语言比较早,很多认识我的,转Go或学习Go的同学遇到问题,经常会过来问我,然后,我发现。除了学习Go语言可以看那些资料,这个问题以外,第二个经常被问的问题就是“大佬,这个包下载 go get不下来怎么办啊。”“大哥,cli下怎么设置代理啊”“大神,怎么cli设置了代理还是 go get 不到包。”等等……因此,我决定做一个简单科普。linux、macOS 使...

2018-08-16 13:31:01 1887

原创 慎用php的array_search函数

array_search是phper使用频次非常高的一个数组函数,但是array_search也是经常被滥用的一个函数,比如假设下面这种业务场景,需要把两个大数组内相同的元素统计出来(恩,没错有个array_intersect函数可以完成这个工作,但这并不妨碍我们讲这个例子)。如果使用array_search就是这种写法$arr1 = ['假设他有100万个元素'];$arr2 = ...

2018-08-13 23:38:53 4652

原创 memcached value最大限制只能是1M吗

关于memcached的value最大是1M的限制很多人都知道,但是如果你以为我还要说这个事情,那你就错了。之前的老版本确实是只能是1M,但是根据git记录,其实2009年以后的版本这个value最大值已经是可配置的了,但是目前互联网上大多数资料,调整value最大值的方法还是去改源码。首先看下memcached的启动参数memcached --help | grep max-i...

2018-08-08 18:12:55 2158

原创 小心 php fpm 的超时

一次线上问题,让我意识到,fpm 居然是用这种方式处理超时的,虽然有点震惊,但是想想,这才是我大 PHP 处理问题的方式,简单粗暴而且高效。问题的现象是这样的,某个接口访问量大增,然后接口大量502,接着 fpm 的机器cpu暴涨,最后gg。fpm 处理超时的方式非常简单,那就是,直接退出 worker 子进程。对于超时的处理,fpm 的代码里是这样写的的(我隐去了细节,有兴趣的可以去...

2018-08-08 14:33:59 1715

原创 使用supervisor管理swoole服务踩过的一个坑

在一次发版之后,例行去看监控的时候,我发现某一台服务器的内存使用量不正常,比其他服务的内存使用量高了将近一倍。我登录到服务器上,执行命令ps -ef | grep php | wc -l发现,swoole服务的worker进程数量比我们设置的数量高了一倍。如果你以为我要写一大段迷宫似找坑经验,那你就大错特错了。我凭我对swoole、supervisor的了解,很快就意识到这...

2018-08-07 09:21:49 3120

空空如也

空空如也

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

TA关注的人

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