自定义博客皮肤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)
  • 资源 (2)
  • 收藏
  • 关注

原创 spark入hudi延迟优化

最近在做spark入数据湖(hudi),最开始使用默认的布隆过滤器索引,延迟总是不能达成要求,看了下原理,如果有比较多的更新,那么每次更新是需要读取base文件中的id来确认是真实的更新写入,因此更新较多的情况下,入湖延迟有比较大的波动。后来看到了字节贡献的bucket索引,如果使用常规的用法,面临着分桶数需要提前指定,分桶大小难以估计的困难。...

2022-05-28 01:32:41 631

原创 spark全局排序,数据严重倾斜,一种解决方案

业务需要根据每个用户的访问频次进行排序,但是大量的用户访问次数都集中在很少的频次,根据频次排序会有严重的数据倾斜,这里提供一种方式,比如原始数据如下,两列(用户ID, 频次count)user001,1000user002,1002user003,2user004,1第一步:按照如下规则新增一列Vcount,(假设频次集中在100以内)如果count大于等于100, Vcount = count;如果count小于100,Vcount = -(100-count) * 10000

2020-08-23 22:55:56 584

原创 撸一个java rpc框架

最近打算撸一个java rpc框架,主要涉及:1、netty2、java反射,如何传递一个方法的调用上下文3、protobuf的无proto文件工具4、基于tcp的调用,如何解决分包粘包,即如何在源源不断的tcp数据流中,切出一个完整的消息...

2020-08-08 02:32:25 271

原创 jvm,linux内存相关总结

1、进程看到的内存,平坦,0 -- Max,虚拟地址,进程的每一个字节内存,都需要通过系统调用,来向操作系统申请。2、linux进程为了管理内存,分为各种区域,堆(动态申请malloc,手动申请,手动释放),栈(本质也是要申请的,只是编译器帮咱们做了,因为很容易判定大小,也知道其生命周期,早期的c编译器不支持变长数组,比如如下c代码,c99前编译无法通过,因为要在栈上分配)int n;scanf("%d", &n);int array[n];...

2020-08-08 02:23:23 174

原创 java杂记,jar包实质,zip打jar包

1、jar包就是一个zip包,通过“zip -r my.jar ./*” 可以把当前路径下的类打包到my.jar里,跟mvn package打包出来的一样。2、如何执行两个jar包里完全同名的两个类呢,比如a.jar和b.jar里都有一个cn.java.Think类,可以把两个jar包都加到-cp下,例如:java -cp a.jar:b.jar,然后实现自己的类加载器,遍历找到的Think类,分别加载,就好了。3、...

2020-07-10 00:16:41 848

原创 zip解压缩jar包,像jar包中add文件

1、jar包其实就是一个zip包,可以用unzip解压,而且jar包中解压出来可能路径完全一样的文件,2、如果jar包中有完全一样的文件,zip add会无法使用,会报错:zip error: Zip file structure invalid3、向一个jar包中新增类,比如编译出来的classes中的类,可以前进入到classes目录下,然后使用命令:zip -r your.jar ...

2020-03-29 22:56:04 1865

原创 spark 记录

rdd.repartition(1).mapPartitions(it => { val taskContext = TaskContext.get() val partitionId = taskContext.partitionId() var count = 0 var set = new util.H...

2020-03-15 23:13:38 190

原创 jvm作为一个linux进程

jvm作为一个linux进程,其内存分布,其与linux系统之间的交互。目前我理解的: jvm作为一个进程,其内存分布符合linux经典进程模型,有native堆,栈,代码段,数据段等。。其中jvm把native堆分成两部分,一部分是java堆,一部分作为直接内存,像nio中的directBytebuff就分配在直接内存中,而且如果发生了读写调用,java堆<->直接内...

2019-11-06 00:45:35 330

原创 java强制类型转换

以前总觉得在java中使用强制类型转换,字节码中会生成一个字节码,把一种类型转成另一种类型,后来了解到,字节码中与强制类型转换相关的字节码是checkcast,当时有些不是很理解,为啥叫这个名字呢,‘转换检查’?为什么没有‘转换’(cast)指令呢?慢慢地有些明白了,一个对象,在内存中实际上就是一块内存,把这块内存当作是什么对象,完全看指令的上下文,也就不存在转换的概念,但是呢,如果把一...

2019-11-06 00:28:48 211

原创 修改spark-streaming源码,应对kafka数据倾斜

我们知道,kafka数据分区与spark数据分区一一对应,如果kafka数据倾斜,势必造成spark数据倾斜,在spark-streming源码类DirectKafkaInputDStream中,compute方法中有对每批次数据的任务切分,在这里修改一下源码,限制生成的每个task消费的数据量,也就是说,将kafka中数据量偏多的分区的数据切分成多个task进行消费,实现逻辑如下:主要的改...

2019-08-23 00:07:08 656 4

翻译 C语言中,通过函数指针直接执行一段二进制代码

1、看《揭秘java虚拟机》,其中提到C中用函数指针直接执行二进制代码,如下:#include <stdio.h>char code[] = {0x55,0x48,0x89,0xe5,0x89,0x7d,0xfc,0x48, 0x89,0x75,0xf0,0xb8,0x5a,0x00,0x00,0x00,0xc9,0xc3,0x00};int main(){ in...

2019-07-07 14:35:41 749

原创 linux 编写native方法获取java线程id

在linux系统中进程是一个或多个线程的集合,映射到实现层面即为task_struct的集合,其中每个task_strct中有一个字段pid, 主线程的pid即为这个线程集合即进程的pid。jdk中获取进程的pid比较简单:String name = ManagementFactory.getRuntimeMXBean().getName();System.out.println(nam...

2019-03-17 20:41:18 954

原创 二进制, 2的幂,二进制中1的个数

netty中有个选择器,根据元素个数是不是2的幂次来实现,思路类似于HashMap中默认数组大小为2的幂次。那么如何判断一个数n是2的幂次呢?netty中用的是(n &amp; (-n)) == n原理:如果n是2的幂次:其二进制形式大概是:000...1000... 而-n的二进制为:111...1000...,1后面的0的个数一样,按位与可知与n相等其实还可以这样判断 n...

2019-03-03 15:44:13 595

原创 一些idea快捷键总结mac

1、项目间跳转,即不同窗口的切换:option+command+[]2、弹出最近操作文件窗口:command+e3、弹出类的结构窗口:command+f124、显示类的继承关系:ctrl+h5、显示方法调用逻辑:ctrl+option+h,窗口弹出后记得选择调用方法的前后选项 ...

2019-02-06 01:49:35 153

原创 TCP系统调用数据流过程(BIO)

1、用户空间准备好数据,字节数组2、发起write系统调用3、系统转入内核态,内核将用户空间的字节数据拷贝到自己的内核缓冲区,如果缓冲区不够大,用户进程就会进入阻塞,直到数据复制完成4、同时tcp会根据协议把数据发送出去...

2019-01-25 00:25:25 210

原创 linux相关知识笔记

1、LinuxThreads是采用一对一的线程模型,创建进程的系统调用是fork,创建线程的系统调用是clone,实际上底层创建进程与创建线程是同一个内核api(do_fork),无非是参数不同,即如果创建的是线程则会传入参数,让其共享父进(线)程的相应资源。也因此,linux的线程通常被称为轻量级进程。...

2019-01-24 17:27:27 124

原创 idea双斜线(//)自动注释设置缩进,空格

2019-01-15 01:20:13 6881

原创 java自定义classloader加载classpath下面的类

疑问:如果要重新加载,则需要用新的classloader,不然会报类重复加载,貌似classloader没有暴露出主动卸载类的接口package server;import java.io.*;import java.lang.reflect.Constructor;import java.util.concurrent.TimeUnit;// 自定义classloaderpubl...

2019-01-15 01:16:09 697

原创 http协议,判定请求读取完毕,以及TCP粘包与拆包

我们知道,tcp是流协议,我们发送的消息既可能因为一条消息太大被tcp拆分成多个包发送,多个消息也可能被合并到一个包发送,因此在接收端我们要处理tcp的拆包粘包问题。大致有如下几种思路:消息定长消息之间添加特定分隔符显式长度,比如先发送4个字节表示消息的长度,紧接着发送消息结合上面各种策略http协议采用的策略请求头以特定的符号("\r\n")结束,符合策略2,如果有请求体,则请...

2019-01-10 17:05:38 3677

转载 轮询调度算法(Round-Robin Scheduling)

什么是Round Robin?先来看和他相近的名词,轮询调度算法(Round-Robin Scheduling)轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。轮询调度算法流  假设有一组服务器N台,S = {S1,...

2019-01-05 12:33:16 1561

原创 hadoop中FsAction的实现总结

java中enmu类的ordinal字段记录了各个枚举变量的索引值,FsAction类中的各个变量的利用了上述的索引值的定义,即二进制位:000,001,010,011,100,101,110,111,即FsAction中各个枚举值的顺序是不能乱动的。因此FsAction中的implies方法能够用按位与的方法得以实现。package org.apache.hadoop.fs.permis...

2019-01-03 20:38:22 374

原创 大话存储 阅读笔记

1、目前扇区大小为4kb的硬盘已经发布,不是只有512字节的。而且操作系统的page,文件系统的block一般大小都是4kb,可以大大的提高效率 2、(磁盘中的队列技术)io指令的排队技术,重排序,提高io效率3、无序传输,可能磁头正好在数据的尾部,那就先读取了尾部的数据。 ...

2018-12-17 19:42:50 294

原创 用java实现简单的一致性hash算法

对于一致性hash算法,我的理解是它主要是降低了集群扩缩容时对原有路由信息的影响,下面是根据其思想进行的简单实现(java) 代码主要是借鉴的这个网址:https://www.cnblogs.com/xrq730/p/5186728.html ,感谢作者。主要变动:1、不带虚拟节点的实现中,加了对子map为空的判断2、带虚拟节点的实现中,替换了虚拟节点的生成方式,采用了等距划分...

2018-12-16 01:57:12 428

原创 记录几个hashcode相同的字符串

System.out.println("Aa".hashCode()); // 2112System.out.println("BB".hashCode()); // 2112System.out.println("ABCDEa123abc".hashCode()); // 165374702System.out.println("ABCDFB123abc".hashCode()); /...

2018-11-22 11:40:51 3269

原创 用接口class的method成员,调用实现类的方法。

首先,定义一个接口如下:interface Protocol{ public String getName(String a, int b);}两个实现类:class Impl01 implements Protocol{ @Override public String getName(String a, int b) { return "I'...

2018-11-07 00:43:34 1298

原创 java中byte,short等类型数据向int自动转换的总结

我们知道,在java中,定义两个byte变量:byte b1,b2b1 + b2的返回的结果确为int类型,为什么呢?还有就是很多时候,与short,char,byte相关的操作的返回结果都是int类型,又是为什么呢? 今天看《深入理解java虚拟机》,原来是java的虚拟机操作码只占用一个字节,也就是说最多只能定义256种虚拟机操作码,因此无法给每种数据类型的各种操作都定义单独的...

2018-10-27 01:29:02 1557

原创 BitSet(BitMap)的java简单实现

下面代码简单实现了一个指定存储范围的BitSetpublic class BitSet { private long max; private long min; private int[] arr; public BitSet(long min, long max) { this.max = max; this.min =...

2018-10-23 19:01:35 505

原创 python取得指定日期的前一天或前n天

def get_yesterday(today): import datetime yesterday = datetime.datetime(int(today[:4]), int(today[4:6]), int(today[6:])) + datetime.timedelta(days=-1) yesterday = str(yesterday) return

2017-02-21 15:56:20 2934

计算机专业英语ppt

计算机专业英语ppt,英汉互译!

2017-02-04

空空如也

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

TA关注的人

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