- 博客(141)
- 收藏
- 关注
原创 Kafka集群搭建
Zookeeper 简介ZooKeeper 是一个开源的分布式框架,提供了协调分布式应用的基本服务。它向外部应用 暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度。 它是 Google 的 Chubby 一个开源的实现。它本身可以搭建成一个集群,这个 zk 集群用来对应用程序集群进行管理,监视应用程序集群中各个节点的状态,并根据应用程序
2021-04-09 16:35:08 214
原创 Kafka入门
很少有人用rocketmq,除了阿里系的。。。因为使用成本很高、除了Dubbo其他的bug非常多java并且要支持很多协议,所以要用activemqrabbitmq是一般情况下使用kafka如果数据很庞大,有大数据的需求没有过高的精确的要求,缺点是不能保证消息的可靠性、大并发集群还支持动态扩容,存储在文件中,其他mq无法做到SSD固态硬盘的存储,快的是随机读取如果是同样从内存中随机读取,而磁盘是顺序读取那么速度是更加快的Scala的并发能力很强没有细腻主机依赖z.
2021-04-07 16:23:26 234
原创 消息中间件-RabbitMQ消息可靠性和插件化机制
package com.study.rabbitmq.a132.confirm;import com.rabbitmq.client.*;import java.io.IOException;import java.util.ArrayList;import java.util.concurrent.TimeoutException;// 可靠生产// https://www.rabbitmq.com/confirms.htmlpublic class Producer ...
2021-04-07 14:52:24 268
原创 消息中间件-RabbitMQ集群和高可用
多机多节点集群部署一、 环境准备 准备三台安装好RabbitMQ 的机器,安装方法见 安装步骤 10.10.1.41 10.10.1.42 10.10.1.43 提示:如果使用虚拟机,可以在一台VM上安装好RabbitMQ后,创建快照,从快照创建链接克隆,会节省很多磁盘空间 二、修改配置文件cookie必须相同三、防火墙添加端口四、启动RabbitMQpackage com.study.rabbitmq.a133.cluster;..
2021-04-06 17:11:42 279
原创 消息中间件-RabbitMQ基本使用
1、安装erlang由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlangsudo apt-get install erlang-nox2、安装Rabbitmq更新源sudo apt-get update安装sudo apt-get install rabbitmq-server启动、停止、重启、状态rabbitMq命令sudo rabbitmq-server startsudo rabbitmq-server s...
2021-04-05 10:17:15 207
原创 消息中间件-ActiveMQ高可用集群和持久化机制
1、修改active.mq的xml文件2、延时、调度消息package com.study.mq.b1_message;import org.apache.activemq.ActiveMQConnectionFactory;import org.apache.activemq.ScheduledMessage;import javax.jms.*;// 延时、调度消息 http://activemq.apache.org/delay-and-schedule-messag...
2021-04-01 18:29:56 477
原创 消息中间件-ActiveMQ支持的消息协议
package com.study.mq.a1_example.helloworld.queue;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;/** * 简单生产者 */public class Producer { public static void mai...
2021-03-31 21:43:09 321
原创 Java后端进阶-JVM参数调优
package com.study.performance;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import java.util.Random;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit...
2021-03-27 12:29:47 321
原创 Java后端进阶-网络编程(Netty零拷贝机制)
package com.study.hc.net.netty.demo;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import org.junit.Test;import java.util.Arrays;/** * bytebuf的常规API操作示例 */public class ByteBufDemo { @Test public void apiTest()...
2021-03-23 17:34:37 180
原创 Java后端进阶-网络编程(Netty责任链Pipeline)
设计模式-责任链模式一个责任链模拟demopackage com.study.hc.net.netty.demo;// -----链表形式调用------netty就是类似的这种形式public class PipelineDemo { /** * 初始化的时候造一个head,作为责任链的开始,但是并没有具体的处理 */ public HandlerChainContext head = new HandlerChainContext(new A.
2021-03-23 17:22:23 244
原创 Java后端进阶-网络编程(NIO/BIO)
Socket编程BIO网络编程BIO Serverpackage com.study.hc.net.bio;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public cla.
2021-03-21 22:11:35 185
原创 并发编程-线程池&J.U.C
8. 共享模型之工具8.1 线程池池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可.
2021-01-29 18:38:22 191
原创 并发编程-共享模型之不可变
7.1 日期转换的问题如果一个对象在不能够修改其内部状态(属性),那么它就是线程安全的,因为不存在并发修改啊!这样的对象在 Java 中有很多,例如在 Java 8 后,提供了一个新的日期格式化类DateTimeFormatter可变类内部成员变量是可以改变的就容易出现线程不安全问题‘可以用锁来保证线程安全7.2 不可变设计更多不可变类的知识,可参考这这里 final类的知识,参考这里另一个大家更为熟悉的 String 类也是不可变的,以它为例,说明一下不可变类设计的要素..
2021-01-29 17:25:43 103
原创 并发编程(共享模型之无锁)
管程即monitor是阻塞式的悲观锁实现并发控制,这章我们将通过非阻塞式的乐观锁的来实现并发控制本章内容CAS 与 volatile 原子整数 原子引用 原子累加器 Unsafe6.1 问题提出有如下需求,保证account.withdraw取款方法的线程安全package cn.itcast.test;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.
2021-01-14 20:56:50 275
原创 并发编程(共享模型之内存)
5. 共享模型之内存上一章讲解的 Monitor 主要关注的是访问共享变量时,保证临界区代码的原子性。这一章我们进一步深入学习共享变量在多线程间的【可见性】问题与多条指令执行时的【有序性】问题5.1 Java 内存模型JMM 即 Java Memory Model,它从java层面定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响 可见性 - 保证指令不会受 cpu 缓存的
2021-01-11 21:48:41 236
原创 并发编程(ReentrantLock&&同步模式之顺序控制)
4.13 ReentrantLock相对于 synchronized 它具备如下特点可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量,即对与不满足条件的线程可以放到不同的集合中等待与 synchronized 一样,都支持可重入基本语法// 获取锁reentrantLock.lock();try { // 临界区} finally { // 释放锁 reentrantLock.unlock();}可重入可重入是指同一个线程如果首次获得了这把锁,那么
2021-01-05 11:28:24 224
原创 剑指offer二刷(精刷)
剑指 Offer 03. 数组中重复的数字题目描述在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。Input:{2, 3, 1, 0, 2, 5}Output:2解题思路要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标记数组。对于这种数组元素在 [0, n-1] 范围内的问题,可以将值为 i 的元素调整到
2020-12-19 21:12:52 421 1
原创 Leedcode算法专题训练(位运算)
https://www.cnblogs.com/findbetterme/p/10787118.html看这个就完事了1. 统计两个数的二进制表示有多少位不同461. Hamming Distance (Easy)Leetcode/力扣class Solution { public int hammingDistance(int x, int y) { int z=x^y; int cnt=0; while(z!=0){ ..
2020-12-09 17:24:03 148
原创 Leedcode算法专题训练(数组与矩阵)
1. 把数组中的 0 移到末尾283. Move Zeroes (Easy)Leetcode/力扣class Solution { public void moveZeroes(int[] nums) { int id=0; for(int num:nums){ if(num!=0)nums[id++]=num; } while(id<nums.length){ n..
2020-12-05 22:12:35 138
原创 Leedcode算法专题训练(数学)
204. 计数质数难度简单523统计所有小于非负整数n的质数的数量。class Solution { public int countPrimes(int n) { boolean[] noPrimes=new boolean[n]; int count=0; for(int i=2;i<n;i++){ if(noPrimes[i]) continue; ..
2020-12-03 11:02:26 101
原创 Leedcode算法专题训练(字符串)
4. 两个字符串包含的字符是否完全相同242. Valid Anagram (Easy)Leetcode/力扣可以用 HashMap 来映射字符与出现次数,然后比较两个字符串出现的字符数量是否相同。由于本题的字符串只包含 26 个小写字符,因此可以使用长度为 26 的整型数组对字符串出现的字符进行统计,不再使用 HashMap。class Solution { public boolean isAnagram(String s, String t) { in..
2020-12-03 10:37:12 107
原创 Leedcode算法专题训练(哈希表)
Java 中的HashSet用于存储一个集合,可以查找元素是否在集合中。如果元素有穷,并且范围不大,那么可以用一个布尔数组来存储一个元素是否存在。例如对于只有小写字符的元素,就可以用一个长度为 26 的布尔数组来存储一个字符集合,使得空间复杂度降低为 O(1)。Java 中的HashMap主要用于映射关系,从而把两个元素联系起来。HashMap 也可以用来对元素进行计数统计,此时键为元素,值为计数。和 HashSet 类似,如果元素有穷并且范围不大,可以用整型数组来进行统计。在对一个内容进行压缩...
2020-12-01 11:29:38 185 2
原创 Leedcode算法专题训练(栈和队列)
1. 用栈实现队列232. Implement Queue using Stacks (Easy)Leetcode/力扣class MyQueue { Stack<Integer> stack1=new Stack<>(); Stack<Integer> stack2=new Stack<>(); /** Initialize your data structure here. */ public MyQue..
2020-11-30 19:21:10 131 1
原创 Docker工具的使用
初识 Dockerjdk的版本问题,环境造成的问题很常见,称为代码的水土不服把环境和代码一起传过去软件跨环境迁移的问题就解决了Docker 是一个开源的应用容器引擎 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。 容器是完全使用沙箱机制,相互隔离 容器性能开销极低。 Docker 从 1.
2020-11-25 11:35:42 638
原创 并发编程(共享模型之管程wait notify)
本文主要讲解wait/notify的正确使用姿势、park/unpark、join()的原理、模式之生产者-消费者模式(异步)、保护性暂停模式(同步)、线程状态转换的流程、死锁和活锁以及如何检查死锁等。一、 wait notifyAPI 介绍obj.wait() 让进入 object 监视器的线程到 waitSet 等待 obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒 obj.notifyAll() 让 object 上正在 waitSet.
2020-11-17 20:57:16 329
原创 Leedcode算法专题训练(树)
1. 树的高度104. Maximum Depth of Binary Tree (Easy)Leetcode/力扣class Solution { public int maxDepth(TreeNode root) { if(root==null)return 0; return Math.max(maxDepth(root.left),maxDepth(root.right))+1; }}2. 平衡树110. Balanced..
2020-11-13 10:57:14 273
原创 Leedcode算法专题训练(链表)
1.发现两个链表的交点160.两个链表的交集(容易)Leetcode/力扣public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode curA=headA; ListNode curB=headB; while(curA!=curB){ if(curA==null){.
2020-11-11 11:22:05 364
原创 并发编程(共享模型之管程)
4.1 共享带来的问题线程出现问题的根本原因是因为线程上下文切换,导致线程里的指令没有执行完就切换执行其它线程了,下面举一个例子 Test13.java两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗? static int count = 0; public static void main(String[] args) throws InterruptedException { Thre...
2020-11-10 19:00:00 154
原创 并发编程(进程与线程)
工作用的很少,但是面试必考参考的大佬博客:https://gitee.com/gu_chun_bo/java-construct/blob/master/java%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/java%E5%B9%B6%E5%8F%911.md线程与进程2.1 进程与进程进程程序由指令和数据组成,但是这些指令要运行,数据要读写,就必须将指令加载到cpu,数据加载至内存。在指令运行过程中还需要用到磁盘,网络等设备,进程就是用来加载指令管理内.
2020-11-02 17:24:35 401
原创 Spring Boot 整合Junit和redis
14. Spring Boot整合-Junit目标:在Spring Boot项目中使用Junit进行单元测试UserService的方法分析: 添加启动器依赖spring-boot-starter-test; 编写测试类 ctrl+shift+Tpackage com.itheima.service;import com.itheima.pojo.User;import org.junit.Test;import org.junit.runner.Run...
2020-10-29 21:17:44 383
原创 Spring Boot自动配置原理
使用Spring Boot之后,一个整合了SpringMVC的WEB工程开发,变的无比简单,那些繁杂的配置都消失不见了,这 是如何做到的?一切魔力的开始,都是从我们的main函数来的,所以我们再次来看下启动类:...
2020-10-29 11:27:33 201
原创 Spring Boot入门学习
1. Spring Boot概述1.1.什么是Spring BootSpringBoot是一个可使用Java构建微服务的微框架。是Spring框架及其社区对“约定优先于配置”理念的最佳实践。Sping Boot的设计目的是让你尽可能快地启动和运行,而无需预先配置Spring。Spring Boot以以一种固定的方式来构建可用于生产级别的应用程序。一般把Spring Boot称为搭建程序的脚手架或者说是便捷搭建基于Spring的工程脚手架。其最主要作用就是帮助开发人员快速的构建庞大的spring项目
2020-10-26 11:21:05 241
原创 Leedcode算法专题训练(动态规划)
递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存了子问题的解,避免重复计算。斐波那契数列1. 爬楼梯70. Climbing Stairs (Easy)Leetcode/力扣题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数..
2020-10-25 16:47:28 808
原创 SSM框架整合
SSM框架整合1.1 原始方式整合1.准备工作2.创建Maven工程3.导入Maven坐标参考:素材/配置文件/pom.xml文件4.编写实体类public class Account { private int id; private String name; private double money; //省略getter和setter方法}5.编写Mapper接口public interface AccountMa.
2020-10-24 21:29:25 154
原创 Mybatis的多表操作
1.Mybatis多表查询1.1 一对一查询1.1.1 一对一查询的模型MapperScannerConfigurer用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户1.1.2一对一查询的语句对应的sql语句:select * from orders o,user u where o.uid=u.id;查询的结果如下:1.1.3 创建Order和User实体public cl.
2020-10-21 21:48:18 1269
原创 Mybatis的Dao层实现原理
1.Mybatis的Dao层实现1.1 传统开发方式1.1.1编写UserDao接口public interface UserDao { List<User> findAll() throws IOException;}1.1.2.编写UserDaoImpl实现public class UserDaoImpl implements UserDao { public List<User> findAll() throws IOException
2020-10-19 16:23:59 2151
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人