- 博客(29)
- 资源 (10)
- 收藏
- 关注
原创 chatGPT大大提高了编程效率
可以肯定的说,未来善于利用类似chatGPT的程序员,和不会用的一定是两个世界的。未来的码农,更多的是思考需求,体力活交给chatGPT吧。这段程序工作的非常完美,而且我们注意到,它还贴心的写了注释。坦白来讲,这段程序已经超出了我的水平,里面有几处地方是日常不太用到的语法,当然,我写shell确实太少了。可以预见的是,未来对初级程序员的需求大大减少了。chatGPT的编程能力已经非常高,程序员一定要善于在工作中使用它,绝对是提高生产力的利器。还贴心的给出了load语句。我不由得表达出深深的敬意!
2023-03-27 11:35:21
710
原创 记Flink开发中的两次OOM
记Flink开发中的两次OOM在开发Flink程序中,遇到了两次OOM的处理,挺有代表性的,其中第二次的难度很高,需要对Java虚拟机有很深入的理解。1 第一次第一次问题不是很复杂,我们业务使用RabblitMQ作为数据源,当数据积压时,任务在启动就会导致TaskManager出现OOM的错误。错误现象:An exception occurred processing Appender DefaultConsole-3 org.apache.logging.log4j.core.appender.
2022-04-19 23:31:54
2789
1
原创 如何选择Spark Streaming、Kafka Streaming和Flink
这里写自定义目录标题记录一次流处理引擎选择的过程1、Spark Streaming2、Kafka Streaming3、Flink最后记录一次流处理引擎选择的过程先描述下项目需求,要处理的消息来源为RabbitMQ的队列A,队列A的数据是10万个点位(物联网采集点)数据每秒一次推送产生的,现在的需求是:要新增一些虚拟计算点位,点位建立规则是已有物理点位的计算表达式,比如V001为P001+2*P002。每个计算点位的计算间隔不一样。需要计算的点位数大概有上万个。为了快速的计算这些计算点位,推送到客户端
2022-03-23 14:11:23
2801
1
原创 深入理解Spark SQL原理
1、前言 本文是对自己阅读Spark SQL源码过程的一个记录,主线是对尚硅谷Spark SQL最后练习中建立的表的一个简单SQL编写的源码实现流程的跟读。通过自问自答的方式,学习完了整个Spark SQL的执行过程。 Spark SQL最终是通过Spark Core的RDD进行计算。所以在阅读Spark SQL源码之前,一定要深刻掌握Spark Core原理,而主线就是如何生成与Spark Core里同样类型的RDD,进一步如何转换为Job。 本文从物理计划开始,描述各个结点的实际转换过程,如
2022-02-28 23:54:21
3433
原创 Spark ShuffleRDD生成的两种Task
Spark Core里的ShuffleRDD是对上游RDD的宽依赖,在阶段划分时会生成两个Stage,以下面的WordCount为例,这两个Stage的任务类型分别为ShuffleMapTask和ResultTask:// 创建 Spark 运行配置对象val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")// 创建 Spark 上下文环境对象(连接对象)val sc = new SparkCon
2022-02-28 15:54:53
1016
原创 无符号整数的文法
为了学ANTLR,去看B站哈工大的编译原理(以前竟然没有学过编译原理,汗!),里面有一个习题,写出无符号整数的文法,网上看了一些,都不对,自己写了一个:S -> DT | D | 0T -> TD | T0 | D | 0D -> 1 | 2 | ... | 9一种更紧凑的表达:S -> 0 | D(D∪0)*D -> 1|2|3...|9其中:∪和*都是集合运算符。...
2022-02-13 23:46:21
1196
5
原创 理解spark中rpc框架
写起来比较麻烦,列个大致学习路线。一般的介绍很少涉及为什么,大致就是把怎么做的讲述了一下,这其实忽略很多深层次的内容,浪费了更进一步学习的机会。实际上spark rpc和hadoop 1.0时代(现在的估计差不多)差别很大,主要体现在netty的使用和简化的actor模型,带来高性能的同时,也提高了可维护性。1、首先学习netty,这个没什么好说的。本身netty也是java网络编程世界的基石。2、学完netty后看spark rpc,会对rpcenv,endpoint、messageloop和in
2022-01-04 23:35:19
365
原创 windows下spark standalone集群模式及集成hive metastore
要开始研究spark的源码了,首先要准备好环境,搭建时的考虑如下:1、开发windows还是首选,所以运行环境限制在windows下2、既然看源码,集群模式绕不过去,使用spark standalone集群已经能说明绝大部分问题,不采用yarn是因为在windows下面搭建太麻烦了3、生产环境肯定是集成hive的metastore,这里使用独立的metastore服务方式,hive已经沦落到元数据管理的作用了,当然即便是元数据管理这一项,也是非常重要的,这里使用mysql作为metastore的
2021-12-08 17:14:48
887
1
原创 Volcano模型和代码生成的简单代码演示
package test;import org.apache.commons.lang.StringUtils;import java.util.Arrays;import java.util.Iterator;abstract class VolcanoNode { protected VolcanoNode child; public VolcanoNode() { } public VolcanoNode(VolcanoNode child) { .
2021-12-08 00:55:10
722
原创 理解【Scala编程】书中的PrefixMap
此书中最难理解的应该就是PrefixMap这个例子了,我大概花了一个晚上才明白这个例子的写法。使用下面的程序调用这个例子: def main(args: Array[String]): Unit = { val p = PrefixMap("abc" -> 1, "ad" -> 3, "da" -> 5) val wp = p.withPrefix("a") val iter = wp.iterator while (iter.has...
2021-11-05 00:15:28
137
转载 【转】30张图带你彻底理解红黑树
原文:30张图带你彻底理解红黑树 - 简书正在按照这篇文件用scala实现一遍红黑树,现在把插入实现了,删除进行中。。。
2021-10-28 00:22:13
178
原创 理解`(ds|hr)?+.+`
在hive/spark sql可以支持对列名进行正则匹配,其中给出这样一个例子: SELECT `(ds|hr)?+.+` FROM sales 这个查询会查找除了ds和hr之外的所有列。这个正则实在是太过少见,查阅了很多资料才理解了。首先要正确拆分(ds|hr)?+.+,(ds|hr)?+是一段,后面.+是第二段。这里面难点在于(ds|hr)?+的意义,子匹配(也就是括号)后面跟了两个量词?+,这是特殊用法,按照一般的量词意义是无法理解的,这个用法就是占有优先量词。正则的量词包括
2021-10-12 01:42:55
2446
原创 idea配置tomcat启动web应用
现状都是spring走天下,今天碰到了要给老项目,需要idea配置tomcat启动。网上的教程不在赘述,这里在启动中遇到一个问题,默认的启动路径为下划线连接符,比如hello-world项目在启动时会变成hello_world,碰巧老项目里面的路径是带项目名称的,所以里面的链接打不开,这时候,要修改的是tomcat配置页面Deployment的Application context项目,修改成项目名称就好了。我使用的版本是idea2021.3,不注意还看不出来,在这个位置:...
2021-10-08 15:11:10
611
原创 一次闹心的U盘安装centos6经历
家里的一台旧电脑准备装个centos6系统,加入自己主电脑的虚拟机集群,本以为一件简单不过的事情,毕竟在virtualbox里面转centos6已经几十遍了。下好centos6.4的镜像,拿出U盘,下好ultraiso,开始写入镜像。坑接踵而至的来了:坑1:ultraiso烧录提升:磁盘或映像文件过小U盘是32G的,镜像才300多M(mini版),不可能装不上,网上说是ultraiso重装,好吧,重装解决。坑2:缺少iso9660开始看到这个错误,以为是mini版的问题,去下了个dvd版
2021-10-03 14:17:51
455
原创 order by的执行时机
假设有这么一个需求,要根据用户点击表,统计每个用户从多到少的点击链接、点击链接次数和依据次数的排序序号。表数据如下:id user_id uri1 1 /2 1 /index3 2 /4 1 /5 2 /6 2 /index7 1 /index8 3 /index9 2 /get10 1 /get...
2021-09-22 17:10:41
514
原创 正则表达式的匹配理解
这样一个^.+apis/{2}(.*)$,匹配的是什么?关键在于中间{2}的理解,{2}表示出现2次,那么是对于api/来说还是只是/,可以通过https://c.runoob.com/front-end/854/来测试:所以是针对前面一个字符,那么要匹配api/呢?将其括起就好了。^.+(apis/){2}(.*)$,测试结果如下:...
2021-09-09 16:15:02
85
原创 CDH5和6的区别
flink为延时或者乱序数据提供了一系列的解决手段,包括lateness、watermark和sideOutput。其中比较难以理解的是watermark。理解的关键在于明白watermark提供了其他手段不能提供的什么功能?如果只是乱序,用lateness就可以解决,很多地方讲解watermark时也是说提供了一个延时容忍度,但是这个理解过于笼统。watermark的关键在于给批量延时提供了一种保护机制,如果大量数据批量延时,lateness的时间肯定会超过,...
2021-09-09 09:20:43
385
原创 Scala里*.map { case => ...}结构的理解
https://blog.csdn.net/lyzx_in_csdn/article/details/82930300中对于省略()的解释实际上是错误的,见下面例子 def main(args: Array[String]): Unit = { def call(method : Int => Int): Unit = { method(1) } call x => x+1 //error call(x => x+1) //ok
2021-08-18 22:25:56
1810
1
原创 Flink中KeySelector理解及方法引用的三种形式
泛型编程是框架的基础,Flink中可以传递POJO对象的get方法,来作为获取key的途径,这样给开发者足够大的灵活性。理解这个过程,对于加强对泛型编程的理解有很大的帮助。此外,对于传递方法,还用到了@FunctionInterface,注意这个注解并不是强制性的,但它减少了一些错误发生的可能。KeySelector本身就是一个函数接口,它提供了两个泛化参数:T代表当前处理数据的类型,K代表Key的类型。KeySelector在Flink中用于获取处理数据内的键值。想象一下这样的一个问题:你要对输入的数
2021-08-06 18:36:34
3901
原创 Flink重复注册定时器会发生什么
对于一些应用场景,需要定时器来告诉我们什么时候结束并输出结果,我们可能会在KeyedProcessFunction的实现类中写下如下的代码: @Override public void processElement(ItemViewCount value, Context ctx, Collector<String> out) throws Exception { // 每来一条数据,存入List中,并注册定时器
2021-08-05 15:44:05
1046
2
原创 lucence fst初探
我们知道FST能够节约大量的内存,但是很少由文章讨论其内部的存储结构,本文以一个构建好的FST数据为例,分析内部是如何存储,以及如何使用该存储结构查找对应的值。分析程序:package com.example;import org.apache.lucene.util.BytesRef;import org.apache.lucene.util.BytesRefBuilder;import org.apache.lucene.util.IntsRefBuilder;import org.
2021-08-03 16:40:59
258
原创 记录一次ant design pro问题解决的过程
学习教程到openapi时发现示例程序登录不能成功,对比之前发现是src/services下的文件内容发生了变化,而这正式openapi的核心所在。不同之处在于新生成的api.ts多了params参数,实际登录调用是并没有传入。那么问题就在openapi了,但是理解openapi的生成并不是一件容易的事,所先如何调试是一个问题,解决方法见博客。第二个问题是,openapi是如何生成这些文件的,流程理解见博客。剩下的问题在于做好了这些准备后,如何解决params参数的问题。 ...
2021-06-24 15:53:24
1267
原创 Umi开发插件补遗
umi插件开发目前找到有效地资料只有在官网上有限的一点内容,这个内容实际上是不完整的,本文将完善这部分内容,后面假设插件名为plugin-my。官方教程主要的问题在于resetMainPath函数的缺失,resetMainPath函数的类型很容易判断,如下:function(routes:any[],mainPath:string),这个函数的作用就是将routes中"/"对应的页面改为mainPath设置的页面。 但问题在于routes的结构并不是很清晰,不知道如...
2021-06-24 00:26:00
790
原创 ant-design-pro v5 安装
用npm会有依赖问题,create-umi版本0.26.0,折腾了半天后实在不想折腾,换成yarn后解决。参考链接如下:https://blog.csdn.net/ren365880/article/details/108967683
2021-06-21 15:33:10
432
原创 我对云计算的总结
首先看云计算的分类,比较流行的一种分法是美国NSTI提出的三层服务:IaaS,PaaS,SaaS。现在google apps,以及微软的在线软件都属于IaaS。比较有名的还有salesforce。而在平台方面,互联网应用的有百度app engine和sina app engine
2011-07-23 01:14:05
1347
原创 linux下tomcat的catalina.out文件过大的正确处理方法!
背景知识不多说,不知道的自己去搜搜。网上流传用log4j进行分割的方法一般不正确。类似方法如下:通过安装log4j,配置log4j.properties来分隔catalina.out,配置文件如下:01.log4j.rootLogger=INFO,CATALINA 02.log4j.logger.com.danga.MemCached.MemCachedClient=WARN,CATALINA 03.#log4j.appender.CONSOLE = org.apache.log4j.Consol
2011-05-06 00:31:00
5934
1
developing windows applications c#.pdf
2019-09-26
3G Evolution HSPA and LTE for Mobile Broadband second edition
2010-03-10
大教堂与集市中英文对照版
2009-09-20
Advanced programming in the unix environment (2nd edition).chm
2009-07-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人