- 博客(20)
- 资源 (2)
- 收藏
- 关注
原创 JUC阻塞队列实战
阻塞:必须要阻塞/不得不阻塞阻塞队列是一个队列,在数据结构中起的作用如下图:上图中: 线程1往阻塞队列里添加元素,线程2从阻塞队列里移除元素当队列是空的,从队列中获取元素的操作将会被阻塞当队列是满的,从队列中添加元素的操作将会被阻塞试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,使队列变得空闲起来并后续新增阻塞队列的用处:在多线程领域:所谓阻塞,在某些情况下会挂
2020-06-05 16:37:21
249
原创 Java并发包中的三个强大辅助类的实测代码(CountDownLatch,CyclicBarrier,Semaphore)
手敲了一下并发包中三个辅助类的使用,加深了理解。1.CountDownLatch(减少计数)CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。测试代码:秦灭六国,一个个灭掉,最终统一package com.ran.juc;import java.util.concurrent.Co
2020-06-05 16:20:33
201
原创 Java Memory Model(JMM)关于同步的规定
JMM是一种抽象的概念,它描述的是一组规范,通过这组规范定义了程序中各个变量(实例字段,静态字段,构成数组对象的元素)的访问方式。JMM关于同步的规定:1.线程解锁前,必须把共享变量的值刷新到主内存2.线程加锁前,必须读取主内存的最新的值到工作内存3.加锁解锁是同一把锁由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有的成为栈空间),工作内存是每个线程的私有数据区域,而java内存模型中规定所有变量都存储在主内存,主内存是共享的内存区域,所有线程都可以访问,但线程对
2020-06-05 11:32:14
438
原创 volatile保证可见性,不保证原子性、禁止指令重排
volatile是Java虚拟机提供的轻量级的同步机制,保证可见性,不保证原子性、禁止指令重排1.保证可见性当多个线程访问同一个变量的时候,一个线程修改了这个变量的值,其他线程能够立刻看到修改的值package com.jian8.juc;import java.util.concurrent.TimeUnit;/*** 1验证volatile的可见性* 1.1 如果int num = 0,number变量没有添加volatile关键字修饰* 1.2 添加了volatile,可以解决可见
2020-06-05 10:52:31
292
原创 MySQL 之 join 连接查询看这篇就够了
这可能是最清晰的连接查询讲解了吧常见通用的连接查询:建表语句 CREATE TABLE `tbl_dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `locAdd` VARCHAR(40) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; CREA
2020-06-05 09:48:07
214
原创 UML类图与类图中的关系
类图中关系(relation)在UML类图中,常见的有以下几种关系: 泛化(继承)(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)泛化(Generalization)【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。【箭头指向】:带三角箭头的实线,箭头指向
2020-05-13 11:40:51
167
原创 redis一共包含5种数据类型
①字符串 String (最基本的类型,可包含任意数据)②哈希 Hash (String类型的field、value映射表)③列表 List (字符串列表,有序不唯一)④集合 set (字符串集合,无序唯一)⑤集合排序 zset (字符串集合,可以通过设置分数score进行排序)...
2020-05-13 11:38:27
168
原创 Java中常见的位运算操作符
& | ^ ~ << >> >>>其中<< 表示左移右侧补0;>> 表示右移左侧补符号位;>>>表示右移左侧补0; >>>表示不带符号向右移动二进制数,移动后前面统统补0;两个箭头>>表示带符号移动,没有<<<这种运算符,因为左移都是补零,没...
2019-08-15 17:03:30
209
原创 Hbase集群掉电后,重启出错,但是进程都已经启动成功
如下图所示,这个奇葩错误就是在实验室停电后我重启Hadoop和hbase集群后出现的,Hbase启动后有个自检的过程,过了一段时间才正常启动成功。Hbase报错的原因还是因为,Hadoop一直处于安全模式下,手动退出安全模式:hadoop dfsadmin -safemode leave后又显示数据块丢失(都是与hbase相关的),执行命令hdfs fsck / -delete将丢失的块...
2019-08-06 16:58:44
280
原创 基于hadoop的Hbase集群丢失块信息后,清除Hbase数据,格式化hdfs文件系统
可以看到在hdfs文件系统中Hbase的元数据块丢失,这是非常严重的,因本人初学,所以采用格式化的方式来重建。启动Hbase集群后显示如下错误:1.清除数据之前先把Hbase和Hadoop及zookeeper(Hbase 依赖于zookeeper)的相关的进程都停掉stop-hbase.sh(停Hbase进程) stop-all.sh(停Hadoop进程) zkServer.sh s...
2019-07-25 22:25:47
2416
原创 Zookeeper启动查看状态时报错Error contacting service. It is probably not running.
**之前格式化了我的Hadoop文件系统。在关闭集群后,我又重启zookeeper集群,发现启动时显示正常,但是在查看状态时,显示异常,网上查阅资料都不可行。**[centos@r201 /home/centos]$zkServer.sh start ZooKeeper JMX enabled by defaultUsing config: /soft/zookeeper/bin/../c...
2019-07-11 09:41:48
2382
原创 centos搭建的Spark或者Hadoop集群中使用ntpdate同步更新时间
1.所有节点安装NTP:yum install ntp2.配置开机启动:chkconfig ntpd on3.检查是否设置成功:chkconfig --list ntpd (2-5为on状态则成功)4.设置同步:ntpdate -u ntp.sjtu.edu.cn(时钟服务器根据实际环境设置、本文采用210.72.145.44-国家授时中心服务器IP地址)5.在crontab工作表...
2019-07-02 09:56:34
179
原创 IntelliJ IDEA快速添加和去除注释常用的快捷键
1、一次性添加多行注释的快捷键首先选中要注释区域,然后ctrl+/ 这个是多行代码分行注释,每行一个注释符号ctrl+shift+/ 这个是多行代码注释在一个块里,只在开头和结尾有注释符号2、取消多行注释快捷键怎样添加快捷键的,用相同方法取消,如 ctrl+/ 添加注释,则ctrl+/取消注释ctrl+shift+/添加注释,则ctrl+shift+/取消注释...
2019-05-23 20:29:25
5446
原创 自动递增和递减
递增和递减操作符不仅改变了变量,而且以变量的值作为生成的结果public class AutoInc { public static void main(String[] args) { int i = 1; System.out.println("i: "+i); System.out.println("++i: "+ ++i);//前缀...
2019-04-03 15:07:04
450
原创 为什么需要内部类
使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。下面的例子:如果拥有的是抽象的类或者是具体的类,而不是接口,那就只能使用内部类才能实现多重继承。package com.ran.unit8;class D{}abstract class E{}class Z extends D{ ...
2019-03-26 17:01:15
170
原创 Java内部类链接到外部类
内部类拥有外围类的所有元素的访问权package com.ran.unit8;interface Selector{ boolean end(); Object current(); void next();}public class Sequence { private Object[] items; private int next = 0;...
2019-03-26 15:11:51
350
原创 多态中的向上转型和向下转型
直接看下面的例子就明白了package com.ran.unit8;class Useful{ public void f(){}; public void g(){};}class MoreUseful extends Useful{ public void f(){}; public void g(){}; public void v(){};...
2019-03-21 21:11:11
217
原创 构造器内部的多态方法的行为(在构造器内调用正在构造的对象的某个动态绑定方法)
初始化的实际过程:1.在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。2.先调用基类的构造器。此时,调用被覆盖后的draw()方法(注意这一步是在调用子类RoundGlyph的构造器之前调用的)。由于步骤1,所有此时的radius的值是0。3.按照声明的顺序调用成员的初始化方法。4.调用子类的构造器主体。package com.ran.unit8;class Glyp...
2019-03-21 20:33:55
180
原创 Java编程思想学习之多态的坑
“覆盖”私有方法 和 域与静态方法1.“覆盖”私有方法给出下面的例子:package com.ran.unit8;public class PrivateOverride { //private方法被自动认为是final方法,对子类是屏蔽的。所以Derived中的方法是一个全新的方法 private void f(){ System.out.println...
2019-03-21 18:51:38
176
原创 Java编程思想学习之多态动态绑定
动态绑定也叫后期绑定。就是在运行时根据对象的类型进行绑定。Java中除了static方法和final方法(private属于final方法)之外,其它所有的方法都是动态绑定。下面是书中“几何形状”的例子:package com.ran.unit8;import java.util.Random;/** * 动态绑定 */class Shape{ public void d...
2019-03-21 18:26:09
186
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人