9.30小记——2023年实习总结

2023-10-09 02:45
文章标签 总结 2023 实习 小记 9.30

本文主要是介绍9.30小记——2023年实习总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 序言

自从6月的暑假到现在,我已经换了第三份实习了,可叹又可悲。可叹的是费劲千辛万苦终于找到了一家满意的实习单位。可悲的是今年的就业行情和我今年的实习经历一样捉摸不定——实习跳了好几家,一家比一家好,但是要么我看不上人家单位,要么就是我看得上的,转正机会却渺茫。秋招虽然有几个offer,但各方面完全满意的并没有。不仅我是这样,周围的小伙伴们也是如此。

        下面我就来讲讲今年的实习经历吧。

1 在航天科技第五研究院503所的实习

毋庸置疑,航天五院是中国顶尖的航天研究院,是伟大的科学家钱学森曾经供职的地方。是历经风霜,有着浓厚的历史感和国防背景的科研院所,也是国有独资的中央企业。它创造出来的产品也是家喻户晓,有东方红一号卫星,有东风导弹、还有长征运载火箭等。我当时在503的卫星通信事业部实习,主要从事军用网管系统和卫星可视化系统的开发,都与国产星链相关。

我先来讲讲自己的实习感受吧。单位有食堂,我们实习生吃饭是免费的,还有员工宿舍也一样免费。只是员工宿舍比较陈旧,宿舍的位置是在友谊路和北清路的交界处,是最老的那一批家属楼。单位负一楼有健身房,8点上班5点下班,是央企。航天院所出差都比较多,工资的话询问了下,转正大概开到18万,提供北京户口但是工资略少。之前在中国资源卫星出差的时候,询问过一起工作的一个501所的同事,他工作两年,工资是一年28万,也没问是总包还是到手。但是问了学历是清华博毕业,这个薪水基本是五院给应届生开的天花板了吧,我们这种硕士应该是拿不到这么多的。总之,和其他研究所比算高的了,和互联网企业比基本是比不过的,但理论上较为稳定,但是base北京,物价房价高企,到底咋样见仁见智。

项目是传统的B/S的前后端开发,军用网管系统基本就是一个上位机系统,用来控制各种通信设备。流程是前端提交->后端计算逻辑->后端发送指令给设备->设备接收到指令并执行->设备反馈执行结果到前端。而卫星可视化系统故名思义就是将卫星状态等可视化展示到前端的项目。

这段实习从2022年的7月上下到今年的6月,大概有10个月左右,接着我回家开始“享受”暑假。

2 在纷享销客的实习

这个公司是做PaaS的,之前就在高铁上见过我司的广告,但一直对PaaS这个概念不甚了解。那什么是PaaS?这是百度百科提供的定义:

        PaaS是(Platform as a Service)的缩写,是指平台即服务。 把服务器平台作为一种服务提供的商业模式,通过网络进行程序提供的服务称之为SaaS(Software as a Service),是云计算三种服务模式之一,而云计算时代相应的服务器平台或者开发环境作为服务进行提供就成为了PaaS。

说到PaaS,不得不提到另外两个相关的概念IaaS和SaaS,这里我援引了这篇博文:IaaS、SaaS和PaaS 的区别理解icon-default.png?t=N7T8https://baijiahao.baidu.com/s?id=1763683356053056296&wfr=spider&for=pc以下是三者的概念和辨析:

IaaS(Infrastructure as a service – 基础设施即服务):用户可以在云服务提供商提供的基础设施上部署和运行任何软件,包括操作系统和应用软件。用户没有权限管理和访问底层的基础设施,如服务器、交换机、硬盘等,但是有权管理操作系统、存储内容,可以安装管理应用程序,甚至是有权管理网络组件。简单的说用户使用IaaS,有权管理操作系统之上的一切功能。我们常见的IaaS服务有虚拟机、虚拟网络、以及存储。

PaaS(Platform as a service – 平台即服务):PaaS给用户提供的能力是使用由云服务提供商支持的编程语言、库、服务以及开发工具来创建、开发应用程序并部署在相关的基础设施上。用户无需管理底层的基础设施,包括网络、服务器,操作系统或者存储。他们只能控制部署在基础设施中操作系统上的应用程序,配置应用程序所托管的环境的可配置参数。常见的PaaS服务有数据库服务、web应用以及容器服务。成熟的PaaS服务会简化开发人员,提供完备的PC端和移动端软件开发套件(SDK),拥有丰富的开发环境(Inteli、Eclipse、VS等),完全可托管的数据库服务,可配置式的应用程序构建,支持多语言的开发,面向应用市场。

SaaS(Software as a Service – 软件即服务):SaaS给用户提供的能力是使用在云基础架构上运行的云服务提供商的应用程序。可以通过轻量的客户端接口(诸如web浏览器(例如,基于web的电子邮件))或程序接口从各种客户端设备访问应用程序。用户无需管理或控制底层云基础架构,包括网络,服务器,操作系统,存储甚至单独的应用程序功能,可能的例外是有限的用户特定应用程序配置设置。类似的服务有:各类的网盘(Dropbox、百度网盘等),JIRA,GitLab等服务。而这些应用的提供者不仅仅是云服务提供商,还有众多的第三方提供商(ISV: independent software provider)。

可以看到,大数据开发基本都属于「IaaS(Infrastructure as a service – 基础设施即服务)」这个范畴。而分享销客的PaaS基本就是提供了一个软件的框架——用户可以更具自己的需要去添加自定义的逻辑,我实习的时候主要做的是Groovy组件和Java组件的开发,实现一些基本的模块的功能。

纷享销客给的还算可以,250一天,一个月还有240的交通补助,也提供转正,而且转正概率很大。但是,这个岗位与我的预期和求职方向还是有出入的,所以最后还是离开了这个公司。

3 在亚信安全的实习(未完)

离开了纷享销客后,下一站就是亚信安全,岗位是大数据运维,主要就是写SQL报表和负责一些已有系统的维护,base依然是上海,实习工资5000一个月。我负责的系统是中国移动4A系统,4A(接着介绍4A系统和工作内容,写的脚本之类的)

4 在莉莉丝游戏的实习(未完)

很开心能在莉莉丝游戏实习,实习薪资300一天也已经是挺高的价格了。莉莉丝游戏位于上海漕河泾开发区的华鑫慧享城,这里还有微软中国上海分公司。第一天到的时候令我吃惊的是莉莉丝在华鑫一共有5栋办公楼,之前对莉莉丝游戏不是很了解,但是入职了一段时间后个人感觉还是挺nice的。每天下午有免费的水果,每个月底还会请大家吃蛋糕,如下图所示

除此之外吧台还有零食饮料不限量供应,这里展示下吧台和我吃小零食的日常:

而且还有公司专用的接驳车!

Q3团建也是吃吃吃!!!这次是吃海鲜!

总而言之,福利待遇都是不错的。讲完了这些我来讲讲工作相关的内容,我的岗位是数据开发,属于数据分析和挖掘组,主要负责数仓以及各大游戏通用报表的的建设和维护。

莉莉丝的数据加工链路分为离线和实时两个部分,具体如下图所示:

实时部分使用到了阿里云的sls日志采集服务器,原本使用的是公有云,现在逐步迁往私有云。使用flink加工数据,然后送至数据仓库。这是一个精简的图,完整的技术架构图如下所示:

实时这里会遇到一些常见的问题排查,就比如其他组的小伙伴反应自己的数据没有出现在数仓中,那我们首先排查的就是实时部分。我们先排查raw_logs层是否从服务器采集到了数据?常见的问题一般如下所示:

  1. 采集进程挂了,表现就是失去心跳信号。
  2. 心跳存在,但是采集路径和用户那边的对不上,也就是路径配置不正确。
  3. 数据消费存在延迟。

以上就是实时部分的介绍,接着是离线部分的介绍。离线部分采用了经典的onedata的数据分层,分为dwd,dws,ads层,用于报表的展示,这一部分也是主要的工作内容。比如说我曾做过一段花费计算的SQL,用于计算游戏的流水,其来源主要是facebook账号登录的用户:

SELECT SUM(ad_cost) money, dt 
FROM (
SELECTad_packages.pkg_id AS pkg,if(media_src.name = 'Facebook', '', campaign.name) as campaign,if(media_src.name = 'Facebook', '', adgroup.name) as adgroup,if(media_src.name = 'Facebook', '', ads.name) as ad,upper(if(country = '', 'undefined', country)) as country,if(channel = '', 'self-lilith-0.7', channel) as channel,CASE WHEN f.store_id = 1 THEN 'ios' WHEN f.store_id = 2 THEN 'android'WHEN f.store_id = 3 THEN 'pc'END AS os,media_src.name AS media_src,date_format(from_unixtime(cost_time), '%Y-%m-%d') AS dt,cost_total as ad_cost
FROMfinance.finance_cost_country fLEFT JOIN dap.ad_spreaders ad_spreader ON f.spreader_id = ad_spreader.idLEFT JOIN dap.ad_media_src media_src ON media_src.id = ad_spreader.media_src_idLEFT JOIN dap.ad_campaigns campaign ON campaign.id = f.campaign_idLEFT JOIN dap.ad_adgroups adgroup ON adgroup.id = f.ad_group_idLEFT JOIN dap.ad_ads ads ON ads.id = f.ad_idLEFT JOIN dap.ad_packages ad_packages ON ad_packages.app_id = f.app_id 
WHEREfrom_unixtime(cost_time) IN (SELECTfrom_unixtime(cost_time)FROMfinance.finance_cost_country costWHEREupdated_at >= UNIX_TIMESTAMP ('2021-01-01')AND cost.game_id = 10057GROUP BY from_unixtime(cost_time))AND f.game_id = 10057AND cost_total > 0--               AND pkg IN ({pkg_list})
group byad_packages.pkg_id,if(media_src.name = 'Facebook', '', campaign.name),if(media_src.name = 'Facebook', '', adgroup.name),if(media_src.name = 'Facebook', '', ads.name),upper(if(country = '', 'undefined', country)),if(channel = '', 'self-lilith-0.7', channel),f.store_id,media_src.name,from_unixtime(cost_time),cost_total
UNION ALL
SELECTad_packages.pkg_id AS pkg,if(media_src.name = 'Facebook', '', campaign.name) as campaign,if(media_src.name = 'Facebook', '', adgroup.name) as adgroup,if(media_src.name = 'Facebook', '', ads.name) as ad,upper(if(country = '', 'undefined', country)) as country,if(channel = '', 'self-lilith-0.7', channel) as channel,CASE WHEN f.store_id = 1 THEN 'ios' WHEN f.store_id = 2 THEN 'android'WHEN f.store_id = 3 THEN 'pc'END AS os,media_src.name AS media_src,date_format(from_unixtime(cost_time), '%Y-%m-%d') AS dt,cost_total as ad_cost
FROMfinance.finance_cost_country fLEFT JOIN dap.ad_spreaders ad_spreader ON f.spreader_id = ad_spreader.idLEFT JOIN dap.ad_media_src media_src ON media_src.id = ad_spreader.media_src_idLEFT JOIN dap.ad_campaigns campaign ON campaign.id = f.campaign_idLEFT JOIN dap.ad_adgroups adgroup ON adgroup.id = f.ad_group_idLEFT JOIN dap.ad_ads ads ON ads.id = f.ad_idLEFT JOIN dap.ad_packages ad_packages ON ad_packages.app_id = f.app_id 
WHEREfrom_unixtime(cost_time) IN (SELECTfrom_unixtime(cost_time)FROMfinance.finance_cost_country costWHEREupdated_at >= UNIX_TIMESTAMP ('2021-01-01')and cost.game_id = 10057)AND f.game_id = 10057AND cost_total > 0--               AND pkg IN ({pkg_list})
)
GROUP BY dt
ORDER BY dt;

他们使用了一个平台来提交SQL代码,而不像亚信安全,还有星环的那一次,是直接通过navicat连接数据库进行操作的。

离线计算部分的数据仓库分为应用层、汇总层、明细层和原始层。分别对应OneData体系中的ads层、dws层、dwd层和ods层。架构关系图如下所示:

应用层分为报表服务、机器学习服务和用户画像服务。我的工作主要的是报表服务这部分,新版通用报表按照分类可以分为四个模块:总览表、留存报表、LTV和ROI指标报表和付费报表。

按照tableau的存放目录分类,又可以得到如下的树状图:

ROI指标是什么?ROI是投入产出比,也叫投资回报率,也就是收入流水和广告买量的花费的比值(个人理解,如有错误可以指出)。根据ROI,能够衡量用户质量。结合渠道来源,则能够衡量渠道质量。

LTV全称是Life Time Value,指用户生命周期的总价值。通俗的说,是获客至流失所得的收益总和,它的作用在于辅助决策,如:计算回报周期、验证盈利模式等。

计算公式如下:

LifeTime Value=ARPU * \frac{1}{Churn}

其中,ARPU(average revenue per user)是“平均每用户收入”,ARPU 值=总收入 / 用户数。Churn是流失用户数

留存则是算30日的。从2-15的留存是连续的,然后跳到30日。有些游戏还要算45、60、90日的留存,但绝大多数是算到30日的。

总览表是一个实时的报表,用的kudu来加速数据的读写。kudu是什么?这里推荐一篇文章。

1、Apache Kudu介绍及架构、工作原理、两种部署方式、使用限制详解 - 知乎Apache Kudu 系列文章 1、Apache Kudu介绍及架构、工作原理、两种部署方式、使用限制详解 2、Apache Kudu-java api操作kudu详细示例以及kudu的三种实现示例 3、Apache Kudu集成impala(shell和java操作)的详细操作…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/640153281总而言之,Apache Kudu是由Cloudera开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力。它是一个融合HDFS和HBase的功能的新组件,具备介于两者之间的新存储组件。 Kudu支持水平扩展,并且与Cloudera Impala和Apache Spark等当前流行的大数据查询和分析工具结合紧密。适用于如下的场景:

  • 适用于那些既有随机访问,也有批量数据扫描的复合场景
  • 高计算量的场景
  • 使用了高性能的存储设备,包括使用更多的内存
  • 支持数据更新,避免数据反复迁移
  • 支持跨地域的实时数据备份和查询

数仓的主题域被划分成5部分:活跃、交易、资产、风控和社交。

我的工作基本只涉及到了活跃和交易两个部分。一致性纬度主要分为三个部分,投放维度、地理纬度和其他维度,这是三个大类。投放纬度有包名、市场(国际、国内)、渠道(Facebook、organic)和团队(东南亚区、多语种区和英语区)。

而地理纬度有洲(大洋洲、美洲、欧洲和亚洲)国家梯度(第一梯队国家,第二梯队国家,第三梯队国家),创号国家和地区。

还有就是其他维度,如操作系统和风控标记。

ODS层中是数仓采集到的所有未经加工过的数据,主要来源有两个:服务器或客户端上报的原始数据和研发服务器cdc的原始数据。cdc的含义可以看这篇博文

CDC(变化数据捕获)同步技术详解_change data capture-CSDN博客一、CDC(ChangeDataCapture)变化数据捕获概念1、变化数据捕获简称CDC,抽取处理需要重点考虑增量抽取,假设一个数据仓库系统,在每天夜里的业务低峰时间从操作型源系统抽取数据,那么增量抽取只需要过去24小时内发生变化的数据。注意:当你能够识别并获得最近发生变化的数据时,抽取及其后面的转换、装载操作显然都会变得更高效,因为这样需要处理的数据量就会少很多。二、CDC(..._change data capturehttps://blog.csdn.net/qq30211478/article/details/100690948DWD层中主要对原始日志进行清洗并形成纬度扩展后的业务明细数据。数据粒度与ODS层是一致的。

DWS层中,对DWD层的数据按照业务需求进行聚合形成新的数据。还按照业务实体设计标签表,用于用户画像的分析。

ADS层中是各类临时数据分报告用的数据,以及各类业务报表的数据。

DIM层存放通用维表,如汇率,商店价格档位映射。还有就是项目组特定的维度表,如礼包信息和装备信息。数据来源有项目组cdc的原始数据,也有手动上传的维表。

(未完待续)

这篇关于9.30小记——2023年实习总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169788

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||