周报 2019-06-09 @W23(端午节)

1. 本周事项

序号事项内容
1公益用户投资情况报表制作编写SQL程序,帆软编制界面
2CRM系统Bug修改同一字段名,取消预约时间
3审计数据支持ZF账户资金流水,提还率和服务费收入大表
4聚投诉爬虫列表页解析,模拟登录
5微信读书《明朝那些事儿》这周看的太少了,对付农民军时出场的几个猛人

2. 下周计划

序号事项内容
1工作交接点对点的进行交接,然后邮件
2goablite开发茫然

3. 工作总结

这周的总结,咋说呢,前面都挺好,就是端午节的一个面试电话,打乱了我接下来一星期的计划,还好我留了缓冲期。

这也是一个机会,都是机会是留给有准备的人的,确实,我最近太松懈了,这个让我猝不及防了,把下周的休整和游玩计划取消吧,不管这一周能不能完成,就当是给自己的一个学习目标~~

想想从最开始的题目都读不懂,一周之内要做出来,还是蛮有挑战性的。

一个字,干!

4. 其他

已经不止好几个人,好几次的对我说,有没有兴趣往产品经理方向发展啊,我觉得你hin有这个天赋啊。。。

可能,以后会走上数据产品经理的路也说不定呢,也是数据方向啊~~

5. 每日记录

2019-06-03

一、left join为什么会导致数据重复?

接上上周的报表开发,周末写的sql,感觉数据不对,然后也没继续写,今天上午问阿杏姐,她一眼就看出来了我这个数据重复了,因为用了left join:

	select t1.user_id
		   ,sum(t2.money) 
		   ,sum(t3.score) 
	  from t1
 left join t2
 		on t2.user_id = t1.user_id
 left join t3
 		on t3.user_id = t1.user_id
  group by 1

大概是这样子的代码,这里,t1是主表,里面的user_id唯一,对每个user_id,后面的t2和t3都有多条记录,这样在对user_id进行聚合,然后sum的时候,数据会多出好几倍,就是因为在left join时,右表有多条记录,然后再left join一下,就会产生。。。算了,举个例子吧。

比如 t1 中有4个人,不重复,t2 中每个人有两条记录,t3 中每个人有三条记录,这样的代码下来,每个user_id都会产生 123 = 6 条记录。。。我发现我还是不太明白为啥会重复数据,明天有空我一定要查查看。

但是对数据进行验证是重复的,然后就改了,对每个联接的表先进行 group by 聚合操作,再 left join

	select t1.user_id
		   ,sum(t2.money) 
		   ,sum(t3.score) 
	  from t1
 left join (
 				select t.user_id
 						,sum(t.money) as score
 				  from t2 t
 			  group by 1
 			) t2
 		on t2.user_id = t1.user_id
 left join (
 				select t.user_id
 						,sum(t.score) as score
 				  from t3 t
 			  group by 1
 			) t3
 		on t3.user_id = t1.user_id
  group by 1

二、帆软是真的很难用

写完SQL,就要开始做报表了,时隔很久来做报表,有些生疏了,但是一碰到帆软那不人性化的操作,顿时就觉得熟悉了。。。

有几个地方记录一下

  1. 单元格是字段可以在过滤条件中,与另外一个数据集的字段进行绑定,有点类似两个数据集的 join 再 where 操作;
  2. 参数默认值有几种不同的设置方式;
  3. 如果不想自动分页,就在页面设置中,将纵向长度拉大,页面自适应一定要慎用!
  4. 看别人的cpt源时,单元格的标识要注意,具体的如图

在这里插入图片描述

三、审计取数学会的group_concat()

简直是转置操作的利器啊,具体的应用场景我就先不说啦,周末可以在我另外一篇博客,SQL中的一些区别(持续更新…),简单写一下concat(),concat_ws(),group_concat()的用法。

四、CRM一天增加了三个需求

再这样下去,一期项目可能永远也不能上线。。。。每次完成上一个需求,业务方就提出了一个新的,这谁顶得住啊,今天打算在通话历史界面把默认的时间范围改一下,但是对 javascript 的知识不太熟悉,晚上地铁上看了一下基础知识的博客,是要学一下,不然不知道在哪下手改 js 代码。

五、大威哥对我是真的好

说他这周要请一天假,只有三个工作日,叮嘱我好好准备一下要交接的工作以及注意事项:

  1. 每个工作内容要找好对接人,并跟领导汇报和调节;
  2. 该形成文档的、代码注释的之类的后续工作要做好;
  3. 不仅要沟通好,还要邮件,抄送什么的都要做好;
  4. 一定不能就是点对点的沟通,要统筹兼顾;

这周开始,整理自己的实习内容,下周准备交接!

2019-06-04

一、帆软报表完成

新发现了帆软的几个东西

  1. 单元格使用富文本,可以将参数放在文本中显示
    在这里插入图片描述

  2. 下拉框为空时默认全选的两种方法
    2.1 在模版数据集中写筛选条件时,利用动态查询条件,写上where 1=1 $if(len(param) == 0, "", "and 控件名 = '" + param "'")

    2.2 在报表参数中,设置过滤条件,在使用参数的单元格上,过滤公式:if(len($param == 0, nofilter, $param))

参考官方教程:下拉框参数为空选择全部

相关知识(推广一下自己的博客 嘿嘿嘿):SQL中where 1 = 1的用处

二、制作报表的遗留问题

查询速度太慢,想着优化一下SQL,没经验,不知道从哪下手,随便查了一下相关博客瞄了几眼,现在回忆一下吧

  1. 统一语法规范,大写或者小写,不一样的话都可能会生成不同的执行计划,比如

    select * from tabll
    select * FROM tabll
    
  2. 尽量不要用not like,not in,!=,这种排除的语法,会引起全表扫描,尽量指定范围,也就是说,能用 between 的时候,就别用 in;

  3. exists代替in是不错的效率提升,比如

    select t1.user_name from t1 where ti.user_id in (select t2.user_id from t2)
    
    select t1.user_name from t1 where t1.user_id exists (select 1 from t2 where t2.user_id = t1.user_id)
    

    至于区别和为啥,还是可以参见我的另外一篇博客(哈哈哈):SQL中的一些区别(持续更新…

  4. 至于group by 和 count(distinct xxx)的区别和效率,在上周的周报上有讲;

  5. 多层嵌套,可以考虑使用临时表(with t1 as (select xx from xx)

  6. 太晚了,要熄灯躺下了

三、通勤路上看的一点JavaScript基础

  1. 执行JS脚本的两种方式:<Script>顺序执行,<Script src=“xx.js”>调用JS脚本;
  2. 数组为动态的;
  3. 有点忘了
2019-06-05

一、又给几个同学讲了一遍数仓的架构

自从大威哥给我讲过一次关于大数据方面的分工,以及数据仓库架构的各个部分,从MySQL业务库,到ODS层、数据仓库(DW层)、数据集市(DM层)后,我对整个数据方向的工作有了明显更加清晰的了解。搞笑的是,今天已经是第三次我跟别人讲大威哥传授给我的这些知识了。

嗯,自从研一开始,就已经决定并开始做数据方向了,虽然具体的岗位没有定,也没打算定的太细,但只要我的大方向,是搞数据的,就可以了。人生不也是这样嘛,大方向没有错,小细节的地方就随机应变。

还是那句话,想从数据的存储、处理、分析与挖掘这一整个数据路线都弄清楚。

二、猝不及防的爬虫项目

下午叶总突然交给我们三个实习生一个爬虫任务,爬取某网站的评论列表及详情页,我们三个分了一下,他们两个分别负责爬取列表和详情页,我负责监工,,,,

哈哈哈,开玩笑,我负责模拟登录,因为这个网站是往下拉,动态加载列表,不登录的话,只能拉到第10页,登录的话就可以拉取全部,而且这个url很简单,就是xxx$pageNo=$其它部分不变,所以列表只要改这个参数就可以爬取到了。

模拟登录的话,本来打算就是按照常规的路子

data = {login_name:"myname", password:"xxx"}
res = requests.post(url, data=data,headers=headers)

但是后来发现一点,它登录只有两种方式,一个天翼帐号注册登录,我们这个爬虫任务就是一次性的,不想还搞个手机号注册啥的,另外一种就是微信/qq扫码登录。行,扫码登录进去,再设置自己的账目密码也行,但是吧,登进去发现,没有!没有让你设置帐号密码的地方,就只有一个绑定手机号的操作。

在这里插入图片描述
也就是说,如果不使用天翼手机号注册登录的话,就没有密码这个东西。

凉凉。

那是不可能凉的。

因为这是一次性的任务,我就想,既然不能从python模拟登录,那我就真的登录,再去爬!

我依然是拿微信扫码登录进去了,试了一下,可以访问到11页及以后的数据,OK,那我就把我登录后的cookies给抓下来,直接放到get参数中去!

利用chrome的开发者模式,可以轻松拿到登录后的所有Headers,如下图:
在这里插入图片描述
左边就是我要爬取的url,我标的地方就是刚才说的,每一页的数字不同,其它都是一样的。右边我一堆红圈,是为了表示,这个cookies其实也是形似字典的,为什么这么说呢,因为是开始是把cookies和UA一样的当作header参数,直接把这一串放进去了,后来发现不行,要把这一大串cookies转为字典形似,再作为参数放进去。


def getCookiesDic(cookies):
	cookies_dic = {}
	for line in cookies.split(";"):
		key, value = line.split("=", 1)  # 1是为了只切分一次,得到两个值
		cookies_dic[key] = value
	return cookies_dic

page_num = 1
url = 'https://xxx'+str(page_num)+'xxx'
cookies = '上图中的那一大串'
cookies_dic = getCookiesDic(cookies )
headers = {	'xxx': 'xxx', 'User-Agent':'xxx'}
res = resquests.get(url, headers=headers, cookies=cookies_dic )
res.encode = 'utf-8'
html = res.text

这样就解决了单次的模拟登录问题。

三、好像也有点面试别人的经验了

这几天开始,新来实习生面试叶总都是让我带队,跟陈同学还是天宇先去看看,从最开始的一脸茫然不知道问啥看啥,到现在也能聊点基础的表面问题了。依照外圆内方的思想,我现在处于了解方的境界,还没感觉到阅人无数的那种阅历,只能从可以量化的地方来沟通。

明天下午还有两个面试,好,我争取多看点东西出来。

2019-06-06

一、Flink入门培训

下午马老师给我们开的Flink共同学习,算是导课吧。

  1. 剖析传统的数据库,其实就是 存储计算 两个部分;
  2. 从业务需求出发,暴露传统数据库的缺点,从而引出大数据技术;
  3. 依然是将大数据技术分为存储和计算两个部分介绍;存储部分主要是HDFS;
  4. 计算框架介绍了离线计算(MR),内存计算(Spark),流计算(jstorm,SparkStreaming,Flink/Blink);
  5. 介绍了Flink的定位,特点,API层次(三层),三个时间(event time,ingestion time,processing time)等架构;
  6. 用一个阿里云的营销案例实操展示了如何实现实时流计算;
  7. 结合以前工作内容,讲解流计算和离线计算的结合与应用场景;

简直收获满满啊,这几天一定要趁热把这些东西整理一下。

二、和领导确认工作交接事项

前两天把可能需要交接的工作整理了一下,今天上午和叶总聊了一会儿,没啥问题,叶总说,MZ的BI部门也留下了我浓厚的一笔,也是,至少,CRM和Saiku中我的痕迹都抹不去了。

三、面试经验渐长

现在除了面试一些硬指标(纯技术能力)外,我努力尝试去探索软实力方面,今天看来,好像是有那么点感觉。从这个人说话的逻辑性来看这个人是否靠谱。

四、被小专子暴虐的羽毛球

专神不愧是我专神,打我和禹哥真的是风轻云淡的,不行,我一定要愈挫愈勇,要把他的招数学过来,哈哈哈。

2019-06-07

一、今天端午节

今天,有点…

依然是按照惯例,放假第一天上午,睡个懒觉,洗洗刷刷,收拾寝室。

按照原先的计划,从今天开始,是慢慢休息并调整,做好618入职携程的准备。

端午节去表叔和姐姐家玩一下,然后和三人组聚个餐,把MZJF的实习材料再次整理一番,下周一和下周二交接工作,再然后就和室友一起回舟山玩几天。就哦了。

都说了,那是原先的计划,在下午准备问姐姐啥时候有空,还没问的时候,一个电话打了过来。。。

腾讯云的一面电话。

我惊呆了。

我清楚的记得,在4月初,做了腾讯的笔试题,然后收到了测评邮件,去官网查了一下,发现4月底面试,然后就满心欢喜的等面试机会。
在这里插入图片描述
然后一起做笔试的同学收到了面试,我直接凉凉,机会都没一个的。。。。

直到今天下午,一个广东深圳的私人手机号码打过来,我看了半天,也没显示是广告推销,就接了。。。

再次感叹,惊了,这是啥操作,现在问我面试。

二、端午节来自腾讯云的一面试题。

本以为是关于Hadoop这方面的问题,结果问InfluxDB,说实话,我已经好久没有去动这个东西了。

给我一个题目,给我一周时间学习完成。
在这里插入图片描述

三、关于这个面试机会

早睡,明天起床开始,学golang。

2019-06-08

一、了解了HTTP压力测试和ApacheBench、Nginx基础概念

  1. HTTP压力测试,其实就是字面意思,主要是看高连接数和并发数下,HTTP服务器的性能情况,这个就像工程项目中的安全系数一样,比如在双十一期间,订单量和访问量暴增,那么平时的性能能不能hold住,这个肯定要提前测试的,怎么测呢,就用到压测工具了;

  2. ApacheBench,用C语言编写的一个HTTP压测工具,简单好用,主要命令形式为:

    ab [options] [http://]hostnam[:port]/path
    煮个栗子
    ab -c 5000 -n 600 http://127.0.0.1/index.php
    

    但是这里有一点,根据我的任务,还需要CPU个数作为参数,但是好像ab中没有这个参数,至少粗略看下来没有。

  3. Nginx,这个东西吧,以前就一直处于,好像模糊的看过这个东西,但清楚的知道我不会哈哈哈,今天再次查了一下,主要用于几个场景吧,Web服务器,反向代理,正向代理,负载均衡,再具体一点的,就自己去查咯,网上一大堆,还是要有基础了,再看这些东西看的懂一些,因为印象中以前看过这些东西的,但那时候看了也不知道是啥,就是一个个术语样的概念,现在看就能联想到其实际应用场景了。

二、安装Go环境

本来打算在LInux环境下搞这个的,没办法,电脑又老又破,Windows卡。。。虽然装了双系统,好久没用过Linux,今天打开,弄半天弄不好环境,算了,世上无难事,只要肯放弃。

还是用Windows环境来搞了。

安装好了语言环境,稍微看了一下,挑了 LiteIDE 工具,但是后来装 MinGW 的时候一直报错,谷歌了好久,仍未解决。

三、Golang语法学习

有几个特别的地方

  1. 兼具动态语言(如Python)的开发速度和编译型语言(如C,C++)的性能与安全性,编译形成的二进制可执行文件要比源码大的多,因为二进制文件中必须包含执行程序所包含的一切,这样无需安装依赖程序就可以运行(有点像使用 Pyinstaller 打包Python程序的感觉);
  2. 强类型语言,在函数内一般用:=来初始化声明变量,在全局变量中一般用var s string = “zhou”这种形式来初始化声明并赋值;
  3. 有指针,这可能是我的一个大路障,大一的C语言好像就是学到指针就自暴自弃了,后来再也没接触过指针,这里的指针看起来好像比C要简单很多,没有那么多要注意的地方;
  4. for 不用写括号,而且特有的for pos,char := range []string {}形式。

在这里插入图片描述

效率还是太低,下午几个小时都在装环境,电脑卡死都两次,气的想换,幸好是贫穷阻挡了我的冲动。真好。

具体见系列博客之Go语言实现HTTP压测工具(1)——前期准备

2019-06-09

一、学了一天的Go语言

似乎是学过一门语言以后,学的别的语言也快,今天就随便翻昨天在图书馆借的《Go语言入门经典》,前面都是一些有基础的东西,就在语法,结构体(Struct),协程(Goroutine),通道(Channel)这几个概念上多花了一点时间,稍微具体的记录见系列博客之Go语言实现HTTP压测工具(2)——Golang语言基础学习和使用

二、ApacheBench试运行

想找ab的源码,发现找不到,大部分是在按照Apache的时候,就自带了ab,然后我就尝试着在Windows下安装并测试了一下。

ab -c 100 -n 2 http://www.baidu.com/
abs -c 100 -n 2 https://www.baidu.com/

然后就发现了一个问题,任务是测试Nginx的性能,可是,一是我没有这个待测试对象啊,我今天是把百度域名作为测试对象的,我这个个体户,没有Nginx资源啊。二我拿自己的笔记本跑,很可能会使客户端称为瓶颈吧。。。除非我写的程序根本测不出来瓶颈哈哈哈。

三、先取了个名字-goablite

简单易懂,go开发的模拟ab的lite版~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值