JAVA
文章平均质量分 76
darkness0604
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法小记-SegmentTree
线段树(区间修改树)内部结构是一个数组。对外提供三个接口:add(L,R,V):在LR范围上的位置上的所有的数都加上某个V值update(L,R,V):在LR范围上的位置上的所有的数都更新成某个V值getsum(L,R):获取LR范围上的所有的数的累加和如何比较快的实现上述方法?假设数据规模是N,使其每个方法的操作时间复杂度都达到O(logN)的级别。暴力常规实现public static class Right { public int[] arr; public Righ原创 2022-01-27 10:01:02 · 750 阅读 · 0 评论 -
算法小记-IndexTree
前言在对一个数据集进行一些例如区间【L,R】求和的问题的时候,想通过一个比较快的数据结构来完成,可以使用indexTree,它可以达到O(logN)的时间复杂度。时间复杂度O(logN)算法思想构建一个help数组作为一个help数组,有如下特点:1、help数组的有效位置从1位置开始2、采用“配对”的方式在位置上存放值,因此以图上为例,我们来描述一个这个过程:1:1位置上只有自己,因此只存放1位置的值2:之前有一个1位置,所以与2位置配对,组成一对,所以此位置存放1,2位置的值3:原创 2022-01-11 16:45:02 · 548 阅读 · 0 评论 -
java中的lambda可以序列化吗?
java中的lambda可以序列化吗?这个问题之前一直也没想过,其实主要也是之前从来没有遇到过需要序列化它的情景,直到。。。我在开发flink作业的时候,因为一些需求,需要传入一个自定义的过滤器,而自然而然就直接使用这种lambda写一通函数式编程又爽又好用,但启动后确是:直接一手序列化报错给我整懵逼了, 恩? 原来lambda是不能序列化的吗,一般来说,一个普通的实体类,只需要给类实现一个Serializable的接口标明,就可以参与序列化了,但这种lambda怎么给接口呀?但是我脑海中突然闪原创 2021-11-11 17:25:07 · 1857 阅读 · 2 评论 -
设计模式之代理模式静态代理,动态代理以及源码分析,CGLIB
最近在系统的啃一啃设计模式相关的东西, 其中对代理模式尤为感兴趣(主要也觉得它很神奇),而且代理模式的用途实在是太广泛了说代理之前,从一个需求入手:有一个tank类,作为一个坦克,肯定可以移动,也就是肯定会有一个移动的方法,我想记录一下它的move方法的执行时间,该怎么做?interface Movable { void move();}public class Tank implements Movable { /** * 模拟坦克移动了一段儿时间 */原创 2021-10-26 10:55:46 · 156 阅读 · 0 评论 -
KAFKA那些事-04-KAFKA的元数据细节、消息存放机制、零拷贝发送、分布式集群副本同步
KAFKA的元数据与zookeeperkafka的元数据是交给zookeeper来管理的。假设我们有topic :ooxx, 副本数为2,主副本在id为3的broker上,另一个副本在id为1的上面。 此时,只有主副本有读写能力,从副本只能备着。前面我们说过,kafka集群会选出一个broker作为controller,这个选举是借助zookeeper来完成的,zookeeper本质是通过让它们抢占一个临时节点,谁抢到谁就是controller。如图下:通过zookeeper的kafka路径中原创 2021-06-15 10:19:21 · 1170 阅读 · 0 评论 -
KAFKA那些事-03-JAVA API实操(生产者、消费者属性配置,偏移量提交方式)
Producerproducer是面向broker的,然后向指定的toopic进行发送数据,相同key去到同一分区。初始化配置String topic = "msb-items";Properties p = new Properties();p.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "node02:9092,node03:9092,node01:9092");//kafka 持久化数据的MQ 数据-> byte[],原创 2021-06-15 10:11:50 · 263 阅读 · 0 评论 -
KAFKA那些事-02-KAFKA搭建、消息拉取和offset更新策略
1、准备zookeeper环境2、搭建KAFKA环境编辑server.properties,注意填写zk地址的时候,比较好的做法是在zookeeper地址后加上一个路径:zookeeper.connect=node02:2181, node02:2181, node03:2181/kafka以及要保证每个broker.id保证不同。3、启动kafka/opt/bigdata/kafka_2.11-2.2.0/bin//kafka-server-start.sh -daemon /opt/原创 2021-06-01 10:53:02 · 576 阅读 · 1 评论 -
KAFKA那些事-01-概述
消息队列的缘由kafka是一种消息队列。在说kafka之前,我们先来聊一下消息队列的出现缘由。两个服务之间想要进行数据通信,如果直接点对点传输,会在数据的可靠性、一致性等方面让人头疼,因此为了解耦,人们的常用做法是在中间加一层东西进行服务之间解耦,而这个东西,就是消息队列。分布式消息队列与KAFKA的诞生但作为一个单机版的消息队列应用,势必存在单点问题和性能问题,因此必然需要发展成为一个分布式应用。按照分布式的老三样AKF原则,在X轴(可靠性横向副本扩展),Y轴(业务切分),Z轴(数据分区)上原创 2021-06-01 10:44:47 · 280 阅读 · 2 评论 -
IO那些事10-手写简易版Reactor-IO实现
主线程代码实现:public class MainThread { public static void main(String[] args) { SelectorThreadGroup boss = new SelectorThreadGroup(1); SelectorThreadGroup worker = new SelectorThreadGroup(3); boss.setWorkerGroup(worker); bos原创 2021-03-01 15:09:37 · 350 阅读 · 0 评论 -
IO那些事08-JAVA API层面的IO历程01
selector前面大篇幅的描述了IO的发展史,并谈到了多路复用的级别模型IO,当描述的这一切,都只是内核级别的调用,或者说是C级别的调用,而作为一个java程序员来说,更多的应该是API层面的使用。作为java api来说,无论是哪种模型,都统一抽象成了selector。来看一段java代码来了解:import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import jav原创 2021-01-12 15:19:24 · 217 阅读 · 0 评论 -
IO那些事07-多路复用IO之select,poll,epoll
多路复用器下的实现所有的多路复用器都是基于POSIX的规范进行实现的。SELECT最通用的多路复用器,也就是基本所有操作系统都有的,就是selectman 2 selectselect的参数可以发现是传入若干个文件描述符(读的和写的),但是一次调用可以操作的文件描述符FD_SETSIZE最大不能超过1024个。nfds:操作多少个文件描述符readfds:读的文件描述符集合writefds:写的文件描述符集合timeout:等待的时间,超过时间后,直接返回当前的文件描述符的状态。.原创 2021-01-04 11:17:25 · 255 阅读 · 0 评论 -
JAVA程序员需要知道的计算机底层基础05-进程、线程、纤程(协程)
每一个程序都可以启动多个进程。而每一个进程中会有若干个线程。进程和线程有什么区别?简单说:进程就是一个程序运行起来的状态,线程是一个进程中的不同的执行路径。专业一点:进程是OS分配资源的基本单位,线程是执行调度的基本单位。分配资源最重要的是:会为每一个进程分配独立的内存地址空间。当进程被启动时,内存中会有一个main主线程启动,而其中可能会有多个线程,一旦程序执行时当CPU发生计算时,此时会由内存中某一个线程调度执行,因此说是线程是执行调度的基本单元。一个进程内的所有线程共享进程的内存空间.原创 2020-09-28 14:10:44 · 317 阅读 · 0 评论 -
JAVA程序员需要知道的计算机底层基础04-操作系统
操作系统其实也是一个软件,既管理着硬件,又开放一些软件接口提供给用户。操作系统基本分为内核kernel和外围, 内核主要和硬件打交道,外围就是和用户打交道。内核的分类宏内核就是将所有的功能都放在一块内存空间中,想要哪块功能就直接在内部找就行。使用对象:PC phone微内核内核主要只负责进程调度一块,其他每一块都是分开的, 当请求某一块功能时如果没有,内核会通过定位寻找(可能通过网络)来找到对应的位置。微服务的设计理念,万物互联。 好处:可插拔,弹性部署。 缺点:相比宏内核,...原创 2020-09-18 15:44:43 · 424 阅读 · 0 评论 -
JAVA程序员需要知道的计算机底层基础03-计算机启动过程
BIOS(BASIC IN OUT SYSTEM)intel扩展了BIOS,出现了UEFI(BIOS升级版),BIOS只能展示黑白界面,UEFI可以显示彩色界面。1、通电,某个芯片得到通知,开始进行启动界面。2、进行加电自检各个硬件的连接情况3、记载bootloader到内存,bootloader是啥?引导控制器,一个计算机可能有多个操作系统,它来指引选择使用哪个操作系统。bootloader在哪?在硬盘上,那如何找到它的位置?一定写死在了硬件上: 硬盘第一个扇区(如果是软盘就是前512个byte.原创 2020-08-29 15:57:51 · 288 阅读 · 0 评论 -
JAVA程序员需要知道的计算机底层基础02-CPU组成原理
CPU的基本组成Program Counter 程序计数器 (记录当前指令地址)可以理解为我们的指令在内存中相当于一个字节数组,程序计数器记录的就是当前指令的内存地址,便于每次根据当前操作指令的占用大小进行向后移动。Registers 寄存器cpu中有许多不同的寄存器。因为数据每次都从内存去取太慢了,所以把从内存取来的数据暂时存储在寄存器,便于CPU计算快速拿到需要用到的数据。现在说的64位计算机,它的每一个寄存器就是可以存储64位的数据。JVM中的栈帧中的本地局部变量表其实就相当于“寄存器”的原创 2020-08-29 15:54:18 · 494 阅读 · 0 评论 -
JAVA程序员需要知道的计算机底层基础01-计算机硬件组成基本概述
CPU原理Intel cpu的制作过程https://haokan.baidu.com/v?vid=11928468945249380709&pd=bjh&fr=bjhauthor&type=videoCPU是如何制作的(文字描述)https://www.sohu.com/a/255397866_468626晶体管是如何工作的:https://haokan.baidu.com/v?vid=16026741635006191272&pd=bjh&fr=原创 2020-08-29 15:47:13 · 503 阅读 · 0 评论 -
关于for循环对lambda表达式的优化
故事的起源,是一段代码:public static void main(String[] args) { I i = C::n; I i2 = C::n; I i3 = C::n; System.out.println(i.getClass()); System.out.println(i2.getClass()); System.out.p...原创 2020-03-23 19:16:36 · 1035 阅读 · 0 评论 -
hashmap为什么长度要是2的n次幂
1、使用位运算(&)来实现取模运算(%)在jdk1.7源码中,hashmap中有一方法,叫做indexFor(),该方法其实主要是将hash生成的整型转换成链表数组中的下标。我们理所应当的应该认为会使用key的hash值对着数组总长度取模得到所引下标,但它的代码是这样的:return h & (length-1)那这段代码是什么意思呢?其实,他就是取模。Java之所有使用位...原创 2020-03-21 23:42:47 · 4314 阅读 · 2 评论 -
多线程与高并发-AQS源码解读
实际上,juc里的各种同步容器(如Semaphore,ReentrantLock,CyclicBarrier等)内部都是使用AQS进行的完成阻塞。AQS是啥?AbstractQueuedSynchronizer。它内部维护了一个Node类型元素的双向链表。每个Node类型元素内部存放着一个线程,也就是那个等待获得锁的线程。这个链表是干啥用的呢?首先还要聊另外一个东西:private ...原创 2020-03-20 21:30:55 · 218 阅读 · 1 评论 -
MapReduce学习02-环境搭建
MapReduce学习02-环境搭建在hadoop2.x中,mapreduce使用的yarn模型,也就是mapreduce on yarn来实现了计算系统的解耦。本次搭建的节点如下所示,除了HDFS的节点外,我们分别在2,3,4搭建NodeManager,在3,4搭建ResourceManager 架构: RM NM 搭建: NN NN JN ZKFC ZK DN R...原创 2019-07-07 21:00:28 · 312 阅读 · 0 评论 -
MapReduce学习01-理论入门笔记
MapperReduce入门笔记小记小记MapReduce可以拆分为:Map和Reduce,其中Map以一行为单位,Reduce以一组为单位。当一个文件通过HDFS进行拆分后,会被分为多个block块。块是一种物理切割单位,而split是一种逻辑切割单位。其中split的数量可以一个split对应1个块,,可以一个split对应多个块,也可以多个split对应多个块。每一个spil...原创 2019-06-26 21:30:34 · 275 阅读 · 0 评论 -
HDFS学习02-HDFS HA版搭建
HADOOP HA版搭建前言1.环境搭建前言本文仅用来记录个人搭建HADOOP高可用版本1.环境搭建在已搭建好4台虚拟机节点的基础上,进行环境搭建。在高可用版本中,namenode升级为两台节点主备模式部署,啊...原创 2019-06-24 20:38:54 · 216 阅读 · 1 评论 -
HDFS学习03-HDFS之权限
Permission Owner Group Size Replication Block Size Namedrwxr-xr-x root supergroup 0 B 0 0 B user-rw-r--r-- root supergroup 8.61 KB 2 128 MB install.loghdfs是一个文件系统 类unix、linux 有用户概念 hdfs...原创 2019-06-28 15:23:12 · 215 阅读 · 0 评论 -
HDFS学习01-HDFS单机及集群搭建(非HA)
HDFS HA版搭建伪分布式(单机)完全分布式伪分布式(单机)伪分布式: 在一个节点启动所有的角色: NN,DN,SNNhadoop 安装:centos 6.5jdk 1.8hadoop 2.6.51基础设施: 设置网络: 设置IP * 看看自己的vm的编辑->虚拟网络编辑器->观察 NAT模式的地址 vi /etc/sysconfig/network...原创 2019-06-28 15:33:34 · 159 阅读 · 0 评论 -
MapReduce学习03-client端开发
MapReduce学习03-client端开发POM准备配置文件准备代码实现任务的提交方式本节的目标是通过java的client端完成需求:对一段目标文本里统计每个单词出现的次数。POM准备<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" ...原创 2019-07-07 20:34:00 · 221 阅读 · 0 评论
分享