java
文章平均质量分 91
渣渣→_→
这个作者很懒,什么都没留下…
展开
-
聊聊redis、epoll和多路IO复用之间的总总关系
这种文章真难写, 都大脑里出来的不知道是不是正确的, 当做一篇纯讨论文章吧。原创 2023-06-06 10:53:30 · 594 阅读 · 1 评论 -
spring-cloud整合dubbo使用nacos做注册中心
前面的入门篇已经讲过了,nacos配置中心的名字必须怎样,回到入门篇去看。这个项目主要是给服务的提供方和消费方提供一个公共的接口协议(接口参数)会占用配置中心了,所以另外新建一个,这个文件主要给后期将我们的。也会在配置中心记录一些数据。项目需要准备的就这些了。服务的提供方步骤结束。.........原创 2022-07-17 23:30:11 · 1490 阅读 · 1 评论 -
rocketmq快速入门
在docker中安装创建文件mkdir -p /root/rocketmq/data/namesrv/logs /root/rocketmq/data/namesrv/store /root/rocketmq/conf /root/rocketmq/data/broker/logs /root/rocketmq/data/broker/store创建配置cd /root/rocketmq/conftouch broker.confvi broker.conf加入以上配置brokerClu原创 2020-08-08 02:01:44 · 370 阅读 · 0 评论 -
docker配置Portainer可视化
docker volume create portainer_datadocker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer可以打开网页http://你的ip:9000需要输入下admin的密码, 初次登入, 自己创建下密码, 密原创 2020-08-07 17:27:26 · 459 阅读 · 0 评论 -
rabbitmq快速入门学习
rabbitmq是什么?它是一个高级的消息队列, 下层基于AMQP协议实现的类似这种结构publisher发布消息给交换器(exchange)然后交换机把消息发送给它以某种方式绑定的队列, 我们的消费者监控着这个队列, 如果有消息过来则使用消息这种方式我们会发现, 如果发布者发布消息, 只要丢给交换机他就能给你发送到消费者借助队列, 所以我们可以这样上面这种方式所实现的方式, 一个消息发送给exchange时, 他会借助queue队列发送给两个消费者中的一个, 而且好像默认时轮训, 一个消息只能原创 2020-08-03 16:59:40 · 208 阅读 · 0 评论 -
CentOS6.5 mini安装到VirtualBox虚拟机中
下载Oracle VM VirtualBox下载下来安装下载镜像http://archive.kernel.org/centos-vault/6.5/isos/i386/CentOS-6.5-i386-minimal.iso安装虚拟机这里我安装的是32bit的centOS6.5 mini版本我选了1G的内存8G的硬盘空间启动和配置设置分配, 选择下你的ISO系统镜像会看到一个蓝色背景图片框框和两个按钮, 选择Skip按钮默认都是next直到弹出这个框框原创 2020-07-25 19:47:21 · 188 阅读 · 0 评论 -
我心目中的volatile关键字
前言volatile是jvm用于保证变量的可见性和防止代码重排序而推出的解决方案, 但其如何实现的这两项功能一直不是特别的清楚, 各种书籍博客干燥的知识点无法上下联系清楚, 无法联系清楚知识点那么又很容易忘记它, 这篇文章将自底向上的分析怎么实现的volatile本文假设一个cpu一个核心吧前置知识你事先得了解的知识点, 如果你已经了解了, 可以选择跳过一部分cpu缓存结构是什么?cpu实现的一、二级私有缓存, 三级跨cpu共享缓存结构(一般情况, 有些cpu存在四级缓存等情况)从原创 2020-07-25 16:50:48 · 184 阅读 · 0 评论 -
docker配置redis6.0.5集群
docker配置redis6.0集群方案docker安装请直接挂载课程配套的Centos7.x镜像, docker官方建议使用CentOS7(1)yum 包更新到最新sudo yum update(2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的sudo yum install -y yum-utils device-mapper-persistent-data lvm2(3)设置yum源为阿里云sudo y原创 2020-07-13 12:36:07 · 840 阅读 · 0 评论 -
安装docker和搭建数据库高可用方案PXC
前言本方案主要目的是学习, 该方案不太合适于企业项目是什么?白话点, 是个提供了必要环境的虚拟机(类似于java的导入部分包一样和c++的头文件差不多), 所以它比普通的VMWare或者VirtualBox安装的虚拟机要轻总体来说类似于jvm那样的存在, 只不过jvm运行的是java编译的字节码, docker运行的是各种组件, 比如mysql, redis, zookeeper或者我们的项目有哪些关键的概念镜像docker镜像类似于系统安装包ISO, 或者我们对某个程序的备份, 将这个备原创 2020-07-13 10:53:11 · 601 阅读 · 0 评论 -
我通过调试ConcurrentLinkedQueue发现一个IDEA的小虫子(bug), vscode复现, eclipse毫无问题
前言: 本渣渣想分析分析Doug Lea大佬对高并发代码编写思路, 于是找到了我们今天的小主角ConcurrentLinkedQueue进行鞭打, 说实话草稿我都打好了, 就差临门一脚, 给踢折了直接看问题, idea在Debug和非Debug模式下运行结果不同, vscode复现, eclipse毫无鸭梨怎么发现的问题?从这段代码开始public static void main(String[] args) throws InterruptedException, NoSuchFieldE.原创 2020-06-29 12:14:02 · 429 阅读 · 0 评论 -
ThreadLocal底层原理分析并探索内存泄漏
1. 是什么?首先ThreadLocal类是一个线程数据绑定类, 有点类似于HashMap<Thread, 你的数据> (但实际上并非如此), 它所有线程共享, 但读取其中数据时又只能是获取线程自己的数据, 写入也只能给线程自己的数据2. 怎么用?public class ThreadLocalDemo { private static final ThreadLocal<String> threadLocal = new ThreadLocal<>();原创 2020-06-28 20:39:14 · 3003 阅读 · 0 评论 -
第九章 - 高并发测试
高并发模拟测试工具postmanapache bench(AB)JMeter(1) 使用postman创建并发模拟测试据说这种方式的并发测试看看就行了, 没用, 使用的是串行不是并发填入并发和延迟, 基本完成了(2) apache bench(ab)需要安装apache通过上面的方法可以基本入门ab的使用方法, 但是还是不太合适推荐使用这个方法(3) JMeter下载之后直接进入bin目录下找到这个bat直接双击运行, 在选项中可选择中文简体...原创 2020-06-26 18:19:07 · 356 阅读 · 0 评论 -
第八章 - JUC
J.U.CAQS 原理全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架特点:用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - cas 机制设置 state 状态独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问资源提供了基于原创 2020-06-26 18:18:20 · 960 阅读 · 0 评论 -
第七章 - 线程池应用
线程池自定义线程池import java.util.ArrayDeque;import java.util.Deque;import java.util.HashSet;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;import lombok.extern.slf4j.Slf4j;原创 2020-06-26 18:17:19 · 301 阅读 · 0 评论 -
第六章 - 线程安全
线程安全当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的 — Brian Goetz多线程安全问题是什么?问题: 多线程在修改共享资源的时候, 会出现主存和线程工作内存之间的交流是有延迟性的, 不能够即时的更新数据, 也不能够实时监控主存的数据是否被修改, 所以线程经常得到了旧的值, 或者线程已经算好了值, 但是没能即时更新到主存解决方案:原创 2020-06-26 18:16:02 · 318 阅读 · 0 评论 -
第五章 - 乐观锁 无锁方案
无锁 — 乐观锁(非阻塞)共享模式之无锁CAS 与 volatile原子整数原子引用原子累加器UnsafeCAS无锁方案CAS无锁主要看重三个变量: 预估值 + 修改值 + 主存值预估值: 主要用来判断是否等于主存值, 是则将修改值修改到主存值中修改值: 即将需要修改的新值, 修改到主存中主存值: 实际值class AccountSafe implements Account { // 主存值, 其内部的 value 使用的就是 volatile private原创 2020-06-26 18:14:49 · 284 阅读 · 0 评论 -
第四章 - 管程-悲观锁和锁优化
管程 — 悲观锁(阻塞)临界区一段代码块对共享资源存在多个线程的读写操作, 我们就叫它临界区临界区存在多个线程竞争共享资源的问题, 由于分时系统, 我们的cpu不能一直负责一条线程的执行, 所以在cpu切换的时候需要保存当时的场景, 之后cpu回来后需要恢复场景再次执行代码, 我们简称这个过程为线程上下文切换而线程竞争共享资源的这个过程中, 由于执行序列不同而导致的结果无法预测, 我们称之为竞态条件synchronized(重量级锁)synchronized重量级锁我们称之为**(对象锁)**方原创 2020-06-26 18:13:32 · 444 阅读 · 0 评论 -
第二章 - Java与协程
Java与协程内核线程的局限通过一个具体场景来解释目前Java线程面临的困境。今天对Web应用的服务要求,不论是在请求数量上还是在复杂度上,与十多年前相比已不可同日而语,这一方面是源于业务量的增长,另一方面来自于为了应对业务复杂化而不断进行的服务细分。现代B/S系统中一次对外部业务请求的响应,往往需要分布在不同机器上的大量服务共同协作来实现,这种服务细分的架构在减少单个服务复杂度、增加复用性的同时,也不可避免地增加了服务的数量,缩短了留给每个服务的响应时间。这要求每一个服务都必须在极短的时间内完成计算,原创 2020-06-26 18:08:49 · 225 阅读 · 0 评论 -
hsdis反汇编java源码工具的使用方法
下载地址:hsdislinux下将hsdis.so拷贝到 /usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64/lib/server 目录下(相对应于你的jdk目录lib/server下)window好像也差不多可以先测试下是否成功java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version如果成功你会看到汇编指令, 如果失败可能会出现很多类似Immutable的字符接着就原创 2020-06-26 18:05:37 · 429 阅读 · 0 评论 -
第三章 - CPU缓存结构和java内存模型
CPU 缓存结构原理CPU 缓存结构查看 cpu 缓存速度比较查看 cpu 缓存行cpu 拿到的内存地址格式是这样的CPU 缓存读根据低位,计算在缓存中的索引判断是否有效0 去内存读取新数据更新缓存行1 再对比高位组标记是否一致一致,根据偏移量返回缓存数据不一致,去内存读取新数据更新缓存行CPU 缓存一致性MESI 协议M(修改,Modified):本地处理器已经修改缓存行,即是脏行,它的内容与内存中的内容不一样,并且此 cache 只有本地一个拷贝原创 2020-06-26 18:11:00 · 502 阅读 · 0 评论 -
使用AtomicInteger完成多线程售票
使用AtomicInteger完成多线程售票```javapackage com.zhazha.juc;import org.junit.Test;import java.util.concurrent.CountDownLatch;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurren...原创 2019-10-19 10:08:52 · 299 阅读 · 0 评论 -
第五章 -- 类的修饰符和内部类
1:形式参数和返回值的问题(理解)(1)形式参数:类名:需要该类的对象抽象类名:需要该类的子类对象接口名:需要该接口的实现类对象(2)返回值类型:类名:返回的是该类的对象抽象类名:返回的是该类的子类对象接口名:返回的是该接口的实现类的对象(3)链式编程对象.方法1().方法2().......方法n();这种用法:其实在方法1()调用完毕后,应该一个转载 2017-08-23 17:04:17 · 326 阅读 · 0 评论 -
第四章 -- 多态的概念
多态的概念一个对象的一个方法在同一个类族中穿梭时所表现的不同功能, 叫多态多态成立的三要素(1) 继承(2) 函数重写(3) 赋值兼容性原则 . 多态中的成员访问特点:--------------------------------------------------------------------------------package com.bangia转载 2017-08-23 17:02:29 · 342 阅读 · 0 评论 -
第三章 -- 继承的概念
一丶继承的概念(1) 多个类中存在相同属性和行为时, 将这些内容抽取到单独一个类中, 那么多个类无需再定义这些属性和行为, 只要继承那个类即可(2) 和构造代码块区分, 构造代码块针对的是对象的相同属性进行初始化, 继承这是针对多个类相同的行为和属性提取到同一个类中的行为二丶继承的好处和坏处1.好处(1) 提高了代码的复用性(最大的好处)(2) 提高了代码的维护性(3)转载 2017-08-23 17:01:27 · 244 阅读 · 0 评论 -
第二章 -- 面向对象基础知识
Day011丶成员变量和局部变量的区别(1)在类中的位置不同成员变量:类中方法外局部变量:方法定义中或者方法声明上(2)在内存中的位置不同成员变量:在堆中局部变量:在栈中(3)生命周期不同成员变量:随着对象的创建而存在,随着对象的消失而消失局部变量:随着方法的调用而存在,随着方法的调用完毕而消失(4)初始化值不同成员变量:有默认值局部变量:没有默转载 2017-08-23 16:58:14 · 574 阅读 · 0 评论 -
第一章 –– Java基础语法
一丶运算的前提是数据类型必须一致(掌握)(1) 观点一:(掌握)// A: byte short char-int-long-float-double 默认大小转化时向最大的数据类型靠近, (除了 下面的观点的数据类型外)// B: byte short char 在运算时默认转化成int 类型进行运算// A: byte short char-int-long-float-dou转载 2017-08-23 16:59:53 · 253 阅读 · 0 评论 -
第六章 –– 常见类之Object和System
Object1. object 所有的类都是直接过着间接的继承了 object 对象2. hashCode 是通过对象的实际地址转换出来的数值(可能是物理地址, 也可能是虚拟地址或者说是线性地址), 他可以理解为内存的地址课后总结1:Eclipse的概述使用(掌握) 请参照ppt和课堂练习.txt 2:API的概述(了解) (1)应用程序编程接口。转载 2017-08-23 17:05:11 · 234 阅读 · 0 评论 -
第七章 –– 常见类之 String 和 StringBuffer和StringBuilder
1. String 类的使用/* * 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。 * 通过查看API,我们可以知道 * A:字符串字面值"abc"也可以看成是一个字符串对象。 * B:字符串是常量,一旦被赋值,就不能被改变。 * * 构造方法: * public String():空构造 * public String(byte[] b转载 2017-08-23 17:07:23 · 262 阅读 · 0 评论 -
第八章 –– 常见类大数据BigInteger和BigDecimal
1. 为什么需要BigIntegerimport java.math.BigInteger; public class BigIntegerDemo{ public static void main(String[] args) { Integer i = new Integer(100);// System.out.printl转载 2017-08-23 17:08:45 · 322 阅读 · 0 评论 -
第九章 –– 常见类之Date、DateFormat和Calender
1. Date (1)构造方法 import java.util.Date; /** 构造函数* * Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。* * Date(long date) * 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,* 即 1970 年 1转载 2017-08-23 17:10:19 · 215 阅读 · 0 评论 -
Win10操作系统下,java环境安装、配置和测试环境是否配置成功
一:首先要下载并安装JDK (官方下载网址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html)二:配置环境变量及class,path的值 找到单击右键->属性,进入下图页面: 点击”高级”,进入下图页面, 点击”环境变量”,如下图: 点击“新建原创 2017-09-24 02:05:17 · 1718 阅读 · 0 评论 -
关于String的面试题
/* * 字符串如果是变量相加的话, 先开空间, 在拼接 * 字符串如果是常亮相加的话, 是先加然后在常量池里面找相同如果,没有这创建一个出来 * */// 第一题 简单package com.String.面试题;public class Test1{ public static void main(String[] args) { String原创 2017-07-18 15:01:53 · 249 阅读 · 0 评论