首页
学习
活动
专区
工具
TVP
发布

大数据那些事

专栏作者
223
文章
184959
阅读量
28
订阅数
使用Unsafe获取数组某个特定下标的内容
看ForkJoin源码的时候,发现了一个有趣的用法,在每一个WorkQueue里面都有一个array来存放任务,如果要取一个具体的任务,首先这个array的长度一定是2的次幂,这时候就可以用unsafe里的arrayBaseOffset获取到第一个元素的偏移地址,然后和arrayIndexScale(获取数组里每一个元素的大小)联合使用便可以获得某一个下标的具体位置:
gzq大数据
2022-05-11
8410
liunx内核中的互斥自旋锁和读写自旋锁的实现详解
今天把这两个锁的内核实现源码重新捋了一遍,基于liunx2,6.0,直接粘注释版: 核心文件,x86下实现的spinlock
gzq大数据
2022-05-11
9890
使用线程自己join自己完成线程门栓
public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(new Runnable() { @Override public void run() { try { //这里可以放一个变量看看是否是0,只有1和0两种状态,当为0时,才可以进行后续代码,
gzq大数据
2022-05-11
1880
观察者模式
观察者模式需要如下几个对象构建出整个框架: 1抽象主题角色:提供了一个用于保存观察者对象的聚集类和增加删除观察者对象的方法,以及通知所有观察者的抽象方法 2具体主题:具体目标类,实现抽象主题的类 3抽象观察者:是一个抽象类接口,包含一个更新自己的抽象方法,更改通知时随时被调用 4具体观察者
gzq大数据
2022-05-11
3480
用java程序操作hadoop,intellij IDEA和maven的使用
如果用hadoop直接操作,还要学一些专门的hadoop指令,其实也可以用java代码来操作hadoop 首先电脑上安装intellig IDEA,notepad++,之前开启的hadoop集群(三台linux虚拟机) 首先,在windows下设置hadoop环境:
gzq大数据
2022-05-11
4870
记录java从左上到右下打印二维数组,从左下到右上打印二维数组
左上到右下 public static void main(String[] args) { int[][] matrix = new int[][]{ new int[]{2, 3, 5,10}, new int[]{5, 2, 4, 1}, new int[]{3, 3, 1, 1} }; process(matrix); } pri
gzq大数据
2021-12-31
5870
Symmetric multiprocessing(SMP)下的spinlock
现在的计算机都是多核对称的cpu处理器,本文通过liunx内核2.6.0代码来分析在多核处理器下,如何使用自旋锁和抢占来进行高效的内核运转。 如果正在内核中运行着的任务此时可以抢占另外一个内核执行的任务,比如说有一个优先级很高的任务想去抢占内核中正在运行的任务,在linux2.6之前是没有实现的。 在2.6版本的内核中,加入了抢占相关的信息,在preempt.h头文件里,定义了一个preempt_count如果这个count大于零表示不可以被抢占,如果等于零,表示可以被抢占。
gzq大数据
2021-12-03
6790
fortran的cmakelist的写法
cmake_minimum_required(VERSION 3.19) project(study Fortran) add_compile_options(-O3 -ffree-line-length-none -fdefault-integer-8 -finteger-4-integer-8 -freal-4-real-8 -fallow-argument-mismatch -std=legacy -fdec-format-defaults ) enable_language(Fortran) add
gzq大数据
2021-11-30
7990
多级页表的好处
在32位系统下,物理内存进行了分页,每一页的大小为4kb,如果已经通过分段生成了线性地址空间,然后线性地址空间再去找分页的物理地址,比如说,找到了是第xxx页,在通过线性地址里的后12位的offset进行结合找到具体的物理地址,如果只使用了一个页表,一个表项的大小为4byte,32位系统有4GB的物理空间(一个进程看到是4GB大小的虚拟空间),每一个表项对应着物理空间的第xxx页(4KB大小的页),那么应该有4GB/4KB=1MB个表项,因为每个表项4byte,所以一共有4MB的大小,那么一个进程就会浪费掉4MB的空间。 如果是二级页表,规则就会改变,让二级页表对应到物理内存上的4KB大小的页,一级页表此时变成映射为物理地址的4MB(这样子是无法定位到具体的页(4KB)的,所以二级页表再去找),这样先找到一级页表,一级页表再和二级页表进行结合,二级页表相当于一级页表4MB分成了1024个(1KB个)4KB,找完后二级页表充当了offset的角色,此时定位到具体的4KB的页面,再用一级页表的offset一结合定位到具体物理地址。这样一个进程浪费掉的空间是一级页表占用的:(4GB/4MB)*4byte=4KB,二级页表浪费掉的是1kb(1个一级页表占用这么多)*1kb(此时有1kb(4GB/4MB)个一级页表)=4MB,加起来是4MB+4KB,比光用一级页表要多4KB,但是2级页表是可以不存在的,比如此时程序只用了%20的页,那么4MB就需要乘以%20,这样一下子就比只有一级页表时少了。
gzq大数据
2021-11-29
1.6K0
0-1背包问题暴力递归
给你一系列物品的价值数组和所占背包容量的数组,给你一个有限容量的背包,求能背的背包的最大值,并返回这个最大值。 这里是不能多拿背包的,也就是这里的背包都有且只有一个。 实现如下,首先递归函数的逻辑就是:选择拿不拿当前遍历到的背包,如果拿就要选择加上当前背包的价值,并且把当前背包的所占容量也加上去,在遍历到下一个index,这里index就推动了递归的进行,并且两个终止条件分别代表的意思是如果当前情况下背包已经占有的容量大于了背包的容量,这时候返回一个不成功,此时这个背包在当前情形下是不能有的,返回一个-1,在比大小的时候就自然不会要这条分支,顺水推舟,这个已经占有的容量应该伴随递归函数。process可以理解为index及以后的所有情况的最大值。
gzq大数据
2021-11-24
5830
字符串所有排列组合暴力递归
给你一个字符串"acb",可以打印出六种排列组合,这里又是一种index推动的递归,但是这里有一些小trick,就是从第一个开始,在后面的字符串的每一个字符进行交换,这样就可以省很多空间,在数组内原地交换,遍历到每一个字符上也有很多细节,将后面的每一个字符和当前字符进行交换,并且每次遍历完一个,这个字符就不要在动了,随后再还原现场。
gzq大数据
2021-11-24
5690
二叉树最大宽度与leetcode662的二叉树最大宽度
首先先实现二叉树的最大宽度,也就是某一层最多的节点个数,使用了两种方法,第一种是使用一个map数组盛放当前节点以及当前节点的层数。
gzq大数据
2021-11-24
4070
汉诺塔问题实现
其实就是三大步: 第一步:1-N-1个盘子从最左边的柱子放到中间 第二步:第N个盘子从最左边放到右边 第三步:1-N-1个盘子从中间放到左边 那肯定递归的入参里面必定有A,B,C和每一次要移动几个盘子
gzq大数据
2021-11-19
2150
将vue部署在nginx上
在前面已经讲了如何利用docker安装nginx,现在就将项目部署到上面: 首先通过npm run build打包成dist目录 可以先看一下devServer是如何写的:
gzq大数据
2021-11-10
1.4K0
使用docker开启nginx
先开启一个容器复制出/etc/nginx下的内容 随后删除之前起的容器执行以下命令:
gzq大数据
2021-11-10
4070
mac m1下安装kubenetes的dashboard
在docker界面开启kubernetes功能: 📷 接下来下载: wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml 下载好后修改port为nodeport: 📷 保存退出执行: kubectl apply -f recommand.yaml 使用如下命令查看service: 📷 端口为32322 使用https协议打开,获取token: ku
gzq大数据
2021-11-02
1.3K2
mac m1上运行jenkins
首先在docker官网上下载好支持m1版本的desktop客户端,随后打开jenkins.io查看安装命令:
gzq大数据
2021-10-26
2.3K0
寻找最大数的递归
除了使用传统的给定一个变量每次进行对比找到最大数以外,可以将其改成递归形式用来开拓思路:
gzq大数据
2021-10-26
2600
解决在linux跑连接sql server老版本会报错的问题
先贴链接:https://aws.amazon.com/cn/blogs/opensource/tls-1-0-1-1-changes-in-openjdk-and-amazon-corretto/ 网上搜索的大部分方法无法帮助我。 报错如下: The server selected protocol version TLS10 is not accepted by client preferences [TLS12] 在java的根目录下(我的是1.8),在jdk11会在conf下找安全性文件,在jre/lib/security下有一个java.security文件,这个文件里的配置的jdk.tls.disabledAlgorithms配置向里面会禁用掉TLS1.0版本的传输协议,这时候我们需要关闭该协议,删除TLS1.0,当然在这个文件下删除是没有任何用处的,网上的大部分帖子也都是说改这个文件,我试了是不可以的,所以使用的是如下方法,新建一个空文件,粘贴如下:
gzq大数据
2021-10-19
1.5K1
mac m1下golang连接mysql极速入门
首先配置好golang环境,我此时使用的是1.17版本 m1已经支持docker了,下载好docker使用如下命令安装mysql:
gzq大数据
2021-10-18
7200
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档