- 博客(166)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 zookeeper的安装
Step1:zookeeper需要Java环境的支持,检验环境:java -versionStep2: 下载解压 zookeeper#下载wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper‐3.5.8/apache‐zookeeper‐3.5.8‐bin.tar.gz #解压tar ‐zxvf apache‐zookeeper‐3.5.8‐bin.tar.gz #进入cd apache‐zookeeper‐3.5.8‐bin
2022-02-08 18:01:59
978
原创 Centos7下 RabbitMQ详细安装
环境:Java1.8Centos7上传软件将下面rpm文件上传到服务器erlang-18.3-1.el7.centos.x86_64.rpm socat-1.7.3.2-5.el7.lux.x86_64.rpm rabbitmq-server-3.6.5-1.noarch.rpm 安装Erlangrpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm安装# 安装rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm
2022-01-27 16:13:31
331
原创 微服务组件Seata
事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity):个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到的。
2021-12-21 21:41:32
1033
1
原创 linux下查看日志命令
Grep:查找文件中指定文本的命令语法:grep “测试” test.log解释:查找test.log所有包含"测试"字符串的行该命令常用参数:-a/-text: 不忽略二进制数据-A:显示匹配的行以及该行后n行-B:显示匹配的行以及该行前n行-C:显示匹配的行以及该行前后n行-c: 显示匹配的行数总和(注意是行数,如果一行匹配到两个也算一行)-H: 显示匹配的行说属文件名-i: 不区分大小写-n: 显示匹配的行并行显示当前行数
2021-12-10 15:38:27
899
原创 对象的共享
Java并发编程实战学习笔记。要编写正确的并发程序,关键问题在于:在访问共享的可变状态时需要进行正确的管理。可见性可见性是一种复杂的属性,可见性的错误总会违背我们的直觉。当写操作和读操作在不同的线程中执行的时候,我们无法确保执行读操作的线程能适时的看到其他线程写入的值,有时甚至是更本是不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须是有同步机制。 程序Novisibility说明了当前线程在没有同步的情况下共享数据时出现的错误。在代码中,主线程和读线程都访问共享ready和numbe
2021-11-25 23:16:54
462
1
原创 为什么HashMap的数组长度是2的幂
为什么HashMap的长度一定是2的次幂呢? 今天和朋友聊天被问到HashMap的数组长度为什么是2的倍数。说实话挺惭愧的,秋招结束了,还不能完整的给出一个完整的答案。我知道了HashMap的数据结构,也知道了什么是Hash冲突,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的eq
2021-11-25 08:52:45
2358
1
原创 db+Nacos的方式部署高可用集群模式
db+Nacos的方式部署高可用集群模式环境:电脑环境:Win10专业版java : jdk1.8.0MySQL: 5.7spring cloud alibaba : 2.2.5.RELEASEspring boot : 2.3.11.RELEASEspring cloud : Hoxton.SR8nacos: 1.4.1seata: 1.3.0下载安装:官方部署指南:https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html
2021-11-18 15:26:22
959
原创 Sentinel持久化模式
Sentinel持久化模式Sentinel规则的推送有下面三种模式:原始模式:如果不做任何修改,Dashboard 的推送规则方式是通过 API 将规则推送至客户端并直接更新到内存中:这种做法的好处是简单,无依赖;坏处是应用重启,规则就会消失,仅用于简单测试,不能用于生产环境。拉模式pull 模式的数据源(如本地文件、RDBMS 等)一般是可写入的。使用时需要在客户端注册数据源:将对应的读数据源注册至对应的 RuleManager,将写数据源注册至 transport 的WritableDat
2021-11-17 01:07:47
750
原创 Sentinel控制台规则配置
1.启动控制台下载链接:https://github.com/alibaba/Sentinel/releases启动控制台java -jar sentinel-dashboard-1.8.0.jar2.Sentinel控制台实时监控监控接口通过的QPS和拒绝的QPS注: QPS(Query Per Second),QPS 其实是衡量吞吐量(Throughput)的一个常用指标,就是说服务器在一秒的时间内处理了多少个请求TPS(Transaction Per Second) 每秒钟系统
2021-11-16 21:30:45
1175
原创 Alibaba微服务组件Sentinel
Alibaba微服务组件Sentinel1.分布式系统遇到的问题服务的可用性问题 提供系统可用性的关键是在相关组件失效情况下,系统能多快恢复并继续正确提供服务。当服务器挂掉的时候首先想到什么原因?1,激增流量打卡 2,被其他服务拖垮 3,异常没有处理说白了:系统缺乏高可用防护/容错机制尤其是针对流量的防护。科补:在系统的高可靠性性里有个衡量可靠性的标准—X个9 (X是代表数字3~5)。X个9表示在系统1年时间的使用过程中,系统可以正常使用时间与总时间(1年)之比3个9:(1-99
2021-11-16 21:17:56
1124
2
原创 Nacos单机伪集群
单机伪集群环境1,阿里云Centos72,jdk1.84,MySQL5.75,nginx 作为负载均衡6,nacos 1.4.1官方文档:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html集群架构图下载安装1,在usr/local文件夹下创建文件夹nacos,并进入该文件夹,下载nacos,解压mkdir nacos cd nacos wget https://github.com/alibaba/nacos/rele
2021-11-14 19:53:32
1188
原创 Spring依赖注入
Spring的依赖注入Spring中有几种依赖注入的方式?从大的范围来说就是:手动注入和自动注入手动注入手动注入是我们最开始学习spring的时候使用的,因为对于初学者来说那更容易理解。set注入<bean name="userService" class="com.qijian.service.UserService"> <property name="orderService" ref="orderService"/></bean>构造方法注入
2021-11-13 15:42:30
805
原创 Spring Bean 生命周期
Bean的生成过程生成BeanDefinition1,首先,通过ResourcePatternResolver获得指定路径下所有的.class文件(Spring 源码中将此文件包装成了Resource对象)2,遍历每个Resource对象3,利用MetadateReaderFactory解析Resource对象得到MetadataReader。4,利用MetadateReader进行excludeFilters和includeFilters,以及条件注解@Conditional的筛选(条件注解并不
2021-11-11 22:44:31
947
原创 微服务负载均衡器LoadBalancer
Spring Cloud LoadBalancer简介Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代Ribbon。刚开始LoadBalancer只提供出了一种负载均衡策略(轮询)。Spring官方提供了两种负载均衡的客户端:RestTemplateRestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。默认情况下,R
2021-11-11 17:23:33
557
原创 微服务负载均衡 Ribbon
微服务负载均衡什么是Ribbon?目前的主流负载方案分为以下两种:1,集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如Nginx)。2,客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超时,重试等。通过Load Balancer获取到服务提供的所有机器实例,
2021-11-11 16:06:08
2278
原创 Spring Cloud Alibaba学习之开幕
微服务的介绍1,系统架构的演变随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构—>垂直应用架构—>分布式架构—>SOA架构—>微服务架构,当然还有悄然兴起的Service Mesh(服务网格化)。1.1单体应用架构优点:项目架构简单,小型项目的话, 开发成本低项目部署在一个节点上, 维护方便缺点:全部功能集成在一个工程中,对于大型项目来讲不易开发和维护项目模块之间紧
2021-11-07 00:10:32
1376
原创 Swagger学习
Swagger简介Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。官网:https://swagger.io/前后端分离会产生一个问题:全后端集成联调,前端人员和后端人员无法做到“即使协商,尽早解决”,最终导致问题集中爆发解决方案:前后端测试接口:postman后端提供接口,需要实时更新最新的消息及改动。Swagger号称世界上1最流行的Api框架RestFul Api 文档在线自动生成工具(APi文档与APIdi定义同步更新)直接运行,可以在线测试A
2021-11-04 23:33:36
201
原创 idea输出中文乱码
A:你会Java吗?B:会的我是Java工程师。A:不,你不会。不信你输出中文 “你好世界!”B:(一顿操作猛如虎后)…哈哈,人傻了。这就是我今天遇到的问题,新装的idea发现代码输出的中文全部乱码。首先想到的就是去设置里面设置一运行还是没有解决。于是在idea查看了各种设置发现都没有解决乱码问题。放弃了百度吧。找到一个大佬的解决方法:找到idea的安装目录,打开如下的文件,在最后添加:-Dfile.encoding=UTF-8.问题解决。然而想想idea官方也他狗了,哈哈,纯属个人对这
2021-11-03 22:37:56
30177
12
原创 JDK1.7与JDK1.8中HashMap的扩容
基础知识注意Java中散列表用链表数组实现,每个链表被称为桶,想要查找表中对象的位置,就要先计算它的散列码,然后与桶的总数取余数,所得到的结果就是保存这个元素桶的索引。hash:翻译为”散列表“,就是把任意长度的输入,通过散列算法,变成固定长度输出,该输出结果是散列值。这种转换是一种压缩映射,散列表的空间通常小于输入的空间,不同的输入可能会散列成相同的输出,所以不能从散列表来唯一的确定输入值。hash冲突:就是根据key即经过一个函数f(key)得到的结果的作为地址去存放当前的key value
2021-10-31 17:31:09
2055
原创 redis-server闪退解决办法
windows 下再次出现redis-server闪退的问题,这里记录一下,以便之后自己的学习。1,redis的根目录下输入cmd,回车进入命令行如下:2,输入redis-server.exe redis.windows.conf查看运行状态如上:连接不成功解决办法:依次输入以下命令即可连接成功1. redis-cli.exe2. shutdown3. exit4. redis-server.exe redis.windows.conf成功后如下:...
2021-10-10 19:10:39
340
原创 servlet注解 @WebListener
Servlet3.0中的监听器相比于2.5的差别在于3.0增加了对注解的支持。作用在JavaWeb中Listener是Servlet规范定义的一种特殊类,主要用于监听3个作用域的创建、销毁,以及其属性变更Servlet中的三个作用域分别为:HttpServletRequest,HttpSession,ServletContext。注意pageContext表示jsp整个页面,不属于Servlet中的作用域应用场景:统计在线人数页面访问量应用启动时做一些初始化工作等等监听器类应该实现下面接
2021-08-31 01:05:18
589
原创 hibernate学习之三(悲观锁与乐观锁)
悲观锁与乐观锁悲观锁悲观锁(pessimistic lock)是指在每次操作数据时,总是悲观地认为会有其他事务操作同一数据,因此,在整个数据处理过程中,会把数据处于锁定状态。悲观锁具有排他性,一般由数据库实现。在锁定时间内,其他事务不能对数据进行存取等操作,这可能导致长时间的等待问题。通常在应用中会设定如下两种锁模式。1)LockMode.UPGRADE该模式不管缓存中是否存在对象,总是通过 select 语句到数据库中加载该对象,如果映射文件中设置了版本元素,则执行版本检查,比较缓存中的对象是
2021-08-29 23:04:55
478
原创 hibernate学习笔记之二(映射关系与懒加载)
hibernate 映射关系关系型数据库中,多表之间存在三种关联关系,分别为一对一,一对多和多对多。主外键的添加:一对一:在任意一方引入对方主键作为外键。一对多:在“多”的一方,添加“一”的一方的主键作为外键。多对多:产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键。一对一的关系就是在本类中定义对方类型的对象,如 A 类中定义 B 类类型的属性 b,B 类中定义 A 类类型的属性 a;一对多的关系,在一个 A 类类型对应多个 B 类类型的情况下,需要在 A 类以 Set 集
2021-08-29 23:03:22
267
原创 hibernate学习笔记之一
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重.
2021-08-29 22:50:00
1061
原创 Maven创建项目时出错
最近创建maven项目时,时不时的出现问题,为此打算记录一下。为之后学习更加便捷。这次报错如下:在自己配置的仓库下创建archetype-catalog.xml,文件内容如下:<?xml version="1.0" encoding="UTF-8"?><archetype-catalog xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0" xmlns:xsi=
2021-08-27 22:23:04
289
原创 Java八大内部排序算法
排序算法的分类时间复杂度以及空间复杂度注:为了进行一定的比较,此处不按照上面的顺序。直接插入排序基本思想在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。场景:正如当我们打牌的时候,需要对扑克牌排序。抽到牌后(假设每次只抽一张),依次从排好序的排中与手中的牌进行比较,插入到合适的位置。/** * 插入排序 * @param a */public static void sort(in
2021-08-26 16:00:48
698
原创 CGLib代理
CGLib代理代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,当它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,我们可以使用CGLib动态代理。动态代理的选用:目标对象要求实现接口,使用jdk动态代理。目标对象不需要实现接口,用CGLib代理。CGLlb整体架构图我们发现,cglib在字节码层面的操作技术主
2021-08-21 23:56:40
259
原创 struts2学习笔记
应项目要求需要使用struts。以下是学习笔记Struts2 框架的优点了解了这几个主要的优点,会促使你考虑使用Struts2 :POJO表单及POJO操作 - Struts2 去除掉了Struts框架中的Action Forms部分。在Struts2框架下,你可以用任何一POJO来接收表单输入,同样的,你可以把任一POJO视为一个Action类。标签支持 - Struts2 改进了标签表单,而新的标签可让开发人员减少代码编写量。AJAX支持 - Struts2 被认可接收进Web 2.0技术,
2021-08-17 23:21:56
417
原创 witch语句中,x可以是哪些类型的数据
jdk1.7之前byte,short ,int ,charjdk1.7之后加入Stringjava8,switch支持10种类型基本类型:byte char short int包装类 :Byte,Short,Character,Integer String enum实际只支持int类型 Java实际只能支持int类型的switch语句,那其他的类型时如何支持的a、基本类型byte char short 原因:这些基本数字类型可自动向上转为int, 实际还是用的int。b、基本类型包装类Byt.
2021-08-17 22:24:44
618
原创 SpringBoot配置文件的优先级
SpringBoot可以配置多个配置文件(properties文件或yml文件)。优先级如下1.file:./config/2.file:./config/*/3.file:./4.classpath:/config/5.classpath:/注:file: 指当前项目根目录;classpath: 指当前项目的类路径,即 resources 目录。以上所有位置的配置文件都会被加载,且它们优先级依次降低,序号越小优先级越高。其次,位于相同位置的 application.properties
2021-08-14 22:05:08
353
原创 RabbitMQ学习
RabbitMQ概念 RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。介绍RabbitMQ 是一个消息代理:它接受和转发消息。您可以将其视为邮局:当您将要投递的邮件放入邮箱时,您可以确定 Mailperson 先生或女士最终会将邮件投递给您的收件人。在这个比喻中,RabbitMQ 是一个邮箱、一个邮局和一个邮递员
2021-08-14 11:37:28
222
原创 Centos7安装redis6.0.7出错:make[1]: *** [server.o] Error 1 make[1]: Leaving directory `/opt/redis-6.0.7/s
出错截图:原因: 由于gcc的版本过低解决:只需要升级一下gcc就可以了。yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutilsscl enable devtoolset-9 bashecho “source /opt/rh/devtoolset-9/enable” >> /etc/profilegcc -v
2021-08-11 11:56:40
946
原创 复制数组的几种方式
遍历复制 通过遍历数组,遍历的过程中把原数组中的数据复制到新的数组中System.arraycopy源码: * @param src the source array. //原数组 * @param srcPos starting position in the source array. //在原数组中开始复制的位置 * @param dest the destination array. //目标数组 * @param de
2021-08-10 19:21:49
1413
原创 Java类Demo中存在方法func1、func2、func3和func4,请问该方法中,哪些是不合法的定义?( )
Java类Demo中存在方法func1、func2、func3和func4,请问该方法中,哪些是不合法的定义?( )public class Demo{ float func1() { int i=1; return; } float func2() { short i=2; return i; } float func3() { long i=3; return i; } float func4() {
2021-08-09 23:14:15
1510
原创 i++与++i分析 (操作数栈)
什么是操作栈? 操作数栈也被称为操作栈,它是一个后入先出栈。操作数栈中的每一个元素都是包括long和double在内的任意java类型。32位数据类型所栈的栈容量为1,64位数据类型所占的栈容量为2.当一个方法刚刚开始执行的时候,这个方法的操作数栈是空的做算术运算的时候是通过将运算涉及的操作数栈压入顶后调用运算指令来进行的,在调用其他的方法的时候是通过操作数栈来进行方法参数来进行值传递的。自增自减对JVM来说是怎样操作的在学习中我们一直被告诫,在Java中任何赋值操作都不是原子操作!并且自
2021-08-07 21:29:50
577
原创 牛客刷题 类加载的顺序
public class Base{ private String baseName = "base"; public Base() { callName(); } public void callName() { System. out. println(baseName); } static class Sub extends Base { private String base
2021-08-06 19:29:25
176
原创 双重检查锁单例与内存屏障分析
单例(双重检查锁)public class DoubleCheckLockSingleton { private static DoubleCheckLockSingleton instance = null; private DoubleCheckLockSingleton(){ } public static DoubleCheckLockSingleton getInstance() { if (instance == null){
2021-08-06 14:38:36
312
原创 volatile关键字再理解
线程、主内存、工作内存文章的之前我们先连接一点JVM的知识。以便后期的理解Java内存模型规定了所有的变量都存储在主内存(Main Memory)中(此处的主内存与介绍物理硬件时提到的主内存名字一样,两者也可以类比,但物理上它仅是虚拟机内存的一部分)。每条线程还有自己的工作内存(Working Memory),可与处理器高速缓存类比,线程的工作内存中保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据。不同的线程之间也无法直接访
2021-08-05 23:52:15
149
转载 如何正确地写出单例模式
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。懒汉式,线程不安全当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。public class Singleton { private static Singleton instance
2021-08-05 19:01:51
281
原创 windows下将jdk1.8切换成jdk1.6
1,首先先将环境变量里的变量值JAVA_HOME,JRE_HOME都改成是1.6的。Win+R cmd 输入java -version发现版本依然是1.82,打开控制面板–>程序–>Java–>Java(Java控制面板中)–>如下3,接着打开注册表进行如下操作4,然后先查看使用java -veison依然不行,查看java的路径5,进入如上目录C:\Program Files (x86)\Common Files\Oracle\Java\javapath6,把
2021-08-03 23:42:39
2440
equals方法的重写.docx
2019-12-06
计算圆面积.cpp
2019-05-19
Tomcat启动慢一直显示初始化协议处理器,怎么解决?
2020-10-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅