ClickHouse常用函数
前言近期项目引入了Clickhouse进行数据计算与展示,今天突然我们的PM同学来问我一个问题,怎么快速获取这十个品牌中GMV各自排名前三的SPU数据。当时想了想,一般情况下这种需求都是使用代码实现的,简直So easy,但是一旦写代码的话就没法快速获取并且以后类似的需求也没法快速响应了。 然后想到了咱们使用的是Clickhouse数据库,它自带很多函数,在经过一段时间的查询以后,发现有一个函数还是比较好用的,正好解决这种典型的分组取TOP的问题,这个函数就是groupArray(x),可以查看以下sql,看它是怎么使用的: 12345678910111213select * from (select b.bid,b.brand as brand, c[1] as top1,c[2] as top2,c[3] as top3,groupArray(3)(b.spu_name) as c,groupArray(10)(b.gmv) as d,d[1]+d[2]+d[3]+d[4]+d[5]+d[6]+d[7]+d[8]+d[9]+d[10] as gmvsum from (...
Github进行fork后如何与原仓库同步
前言 近期使用github给baidu/brcc提交pr,然后发现提完pr以后我如果再次修改并且baidu/brcc有其他人的更新,我的fork仓库无法同步,所以找了一些最佳实践,在此进行总结。 实现方案一般情况下,这种情况有两种做法: 将fork的仓库在你的github上删除掉,然后重新fork 通过git命令将原代码进行同步到你的代码中 实际上在github的操作中都是merge 与 merge的操作,在你只需要和原代码保持一致的情况下,可以采用第二种方案进行同步 实践步骤通过git命令将原代码同步到我fork的代码仓库中,使用merge的方法来进行操作。下面是具体的操作命令,以brcc仓库为例. 1、进入到我的本地仓库中: 1cd ~/github-me/brcc/ 2、执行命令 git remote -v 查看远程仓库的地址初始情况下,执行完命令只会存在如下两条记录 123➜ brcc git:(main) git remote -v origin git@github.com:dislazy/brcc.git...
Github-pr最佳实践
Pull Request在github中的作用 主要是用来做代码reivew 从开发分支合并到环境分支 控制不同级别人员对于分支内容的提交 Pull Request在github中的三种合并分支的方法一、merge 合并1、特点 merge是指将开发分支的代码merge到目标分支 merge会产生一条对应的merge记录 merge会存在代码覆盖情况,如果产生冲突需要手动解决2、适用场景 适用于不同分支向不同目标分支合并代码的所有场景 二、squashing 压缩合并1、特点 squashing 会将开发分支中的代码commit合并为一个综合的commit squashing 会将综合的commit作为一次commitmerge到目标分支中 squashing 如果存在多分支之间切换的情况,会出现多次综合性的commit中出现重复的提交2、适用场景 适用于不同开发分支向同一目标分支合并代码的场景 三、rebase 变基合并1、特点 rebase 变基是将用户的commit插入到目标分支合适的位置 rebase和merge是不同的合并方式,它类似于cherry...
Mac使用Vim快捷键
一、移动光标 移动到行尾”$”,移动到行首”0”(数字),移动到行首第一个字符处”^” 移动到段首”{“,移动到段尾”}” 移动到下一个词”w”,移动到上一个词”b” 移动到文档开始”gg”,移动到文档结束”G” 跳到第n行”ngg” 或 “nG” 或 “:n” 移动光标到屏幕顶端”H”,移动到屏幕中间”M”,移动到底部”L” 二、编辑操作 光标后插入”a”, 行尾插入”A” 后插一行插入”o”,前插一行插入”O” 删除字符插入”s”, 删除正行插入”S” 光标前插入”i”,行首插入”I” 删除一行”dd”,删除后进入插入模式”cc”或者”S” 删除一个单词”dw”,删除一个单词进入插入模式”cw” 删除一个字符”x”或者”dl”,删除一个字符进入插入模式”s”或者”cl” 粘贴”p”,交换两个字符”xp” 交换两行”ddp” 复制”y”,复制一行”yy” 拷贝当前行 “yy”或者”Y” 撤销”u”,重做”ctrl + r” 删除到行尾可以使用”D”或”C” 删除当前字符 “x” “...
HashMap浅谈-基本方法
HashMap的初始化过程HashMap的初始化有两种方法: 直接使用HashMap的无参构造方法,此时初始化的容量为:DEFAULT_LOAD_FACTOR 也就是16 1234567/** * Constructs an empty <tt>HashMap</tt> with the default initial capacity * (16) and the default load factor (0.75). */ public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted } 传入容量参数的有参构造方法,此时的初始化容量需要进行计算 12345678910/** * Constructs an empty <tt>HashMap</tt> with the specified initial * capacity and...
HashMap浅谈-基本原理
HashMap的组成HashMap的内部实现是一个数组,但是它是一个特殊的数组。如下图所示: HashMap的内部结构HashMap是一个特殊的数组实现,它的数据插入并不是按照顺序逐个写入的,而是按照一种特定算法来确定写入的位置, 然后将对象进行写入,它就是散列计算,就是计算出当前key的hash值,然后对hash值做一定的操作,再计算出当前的hash对应的是哪个桶,然后再将对应的输入写入到桶内(栗子:上图中的Node1节点) 当存在同hash值时,同一个桶内的数据会采用拉链法来使桶内的数据形成一个链表结构,这样同hash的值都会保存并且不会覆盖。 当链表长度达到一定的阈值时(阈值:8),为了提高它的性能,此时会将链表转化为红黑树进行存储(栗子:上图中的Node2节点) HashMap的核心概念 HashMap的存储结构 HashMap的底层实现是一个数组,源码如下: 1234567/** * The table, initialized on first use, and resized as * necessary. When allocated,...
nginx配置https和跨域设置
简介为了网站快速响应,经常需要将前端页面放在cdn上,此时就需要后端服务支持跨域访问,所以 记录一下在tengine上的配置,用于集中管理多个服务和支持服务的跨域访问设置。关于nginx的安装可以参照 这里 第一步 将配置文件进行分离使用vi nginx.conf编辑nginx的配置文件,改成如下配置 12345678910111213141516171819202122232425262728293031323334353637#user nobody;worker_processes 1;error_log logs/error.log;error_log logs/error.log notice;error_log logs/error.log info;error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";pid logs/nginx.pid;events { worker_connections 1024;...
线上事故记录-docker与Java的恩怨情仇
起因上周五新建了一个项目,在开发完成后,和运维沟通准备上到生产环境中,套用了现有服务的通用启动命名行: 1java -jar Xms3072m -Xmx8192m app.jar & 2>1 然后一切准备就绪,jenkins打包一切顺利,然后顺利部署到生产环境,由于前端项目暂未部署,k8s使用的内网集群通信,暂时没有办法调用接口进行服务部署成功验证,但是在测试环境进行了充分测试,一切OK...