自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(149)
  • 资源 (1)
  • 收藏
  • 关注

原创 jvm(四)从设计者角度分析堆内存划分结构

还记得运行时数据区的区域划分吗?再来回顾一下。我们现在知道了方法区和堆是所有线程共享的区域,并且它们的生命周期跟jvm相同。存储结构我们现在懂了,那么不禁会想一个问题:万一数据存满了怎么办?一些垃圾数据怎么清理的?这就是通常我们所了解到的垃圾回收了。因为大部分对象都是存储在堆中的,所以我们通常了解的垃圾回收也都是指的堆内存。我们现在可以将方法区和堆单独拎出来,然后站在设计者的角度来分析堆内...

2020-01-07 22:15:15 200

原创 并发学习(五)从ReentrantLock走进AQS

通过前面几章的学习,我的脑海里回顾最多的一句话就是:多个线程争抢一把锁,抢到锁的线程执行下面的逻辑,没抢到锁的线程则阻塞。下面来看一段ReentrantLock的简单代码:private Lock lock = new ReentrantLock();private void sayHello() { lock.lock(); System.out.println("hell...

2019-12-22 21:53:50 137

原创 线程间的可见性

概念层面的可见性什么是线程间的可见性? 一个线程对共享变量值的修改,能够及时的被其他线程看到。什么是共享变量? 如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。什么是java内存模型?(Java Memory Model,简称JMM) JMM描述了java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取出变...

2018-04-02 21:06:50 9602 3

原创 设计模式之观察者模式(主题对象发生变化,通知各个观察者)

当涉及到电商场景时,观察者模式可以用于处理多种情况,比如订单状态更新、库存变化、用户积分变化等。下面是一个简化的订单状态更新的观察者模式案例。5.接下来,创建两个具体的观察者类,分别处理订单状态的更新。6.最后,在主应用程序中使用这些类。4.然后,实现具体的订单主题类。2.然后,定义一个观察者接口。3.接下来,定义订单状态枚举。1.首先,定义一个主题接口。

2023-12-06 15:11:24 292

原创 VM centos7不能ping通百度

【代码】VM centos7不能ping通百度。

2023-06-12 18:20:04 1087

原创 (八)hystrix-服务熔断和降级

微服务调用链微服务很多的情况下,调用链也会特别长。其中某个服务出现问题,很可能会导致整个微服务不可用。这种情况下,就需要将出现问题的服务隔离开来,就好比现在发现哪里有新冠疫情,就得赶紧隔离,防止传播给其他人。上图中,日志服务调用分析服务,当分析服务不可用时,采取熔断。分析服务可以提供一个备用的机制如返回一个空对象,这就是服务的降级。hystrix提供容错机制,避免微服务系统雪崩。一、手动模拟服务异常还是采用前面几章节的案例,假设用户服务调用订单服务出现异常,这里我手动模拟一个空指针异常,然后使

2022-02-08 23:00:41 2320 1

原创 (七)feign-简化服务调用

前面的章节虽然完成了服务的注册以及相互间的调用,但是调用方发起调用时,还是硬编码的形式,如果服务比较多,代码不好管理。如,用户服务调用订单服务: @PostMapping("/findOrderList") public JSONArray findOrderList() throws Exception { String serviceId = "ORDER"; String url = "http://" + serviceId + "/order/fin

2022-02-07 20:24:24 1930

原创 (六)ribbon-客户端负载均衡器的使用

ribbon介绍我们熟悉的nginx它是服务端的负载均衡,而ribbon则是客户端负载均衡。再来看看之前的CloudConfig.java,RestTemplate +@LoadBalanced等价于ribbon。package com.ft.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;im

2022-01-24 23:12:13 895

原创 (五)注册中心-eureka的自我保护功能

eureka的自我保护功能进入eureka自我保护功能在上一章已经把用户服务(2个节点)和订单服务(2个节点)注册到了eureka集群中。如下效果图:此时,我如果将用户服务其中一个节点8011断开,过一会看eureka控制台会出现如下图的红色字样,也就是说明eureka进入到了自我保护状态。百度翻译:突发事件EUREKA可能错误地声称实例在未启动时已启动。续订小于阈值,因此实例不会为了安全而过期。我的理解:eureka一旦进入自我保护状态,原来注册的服务节点信息不会被轻易删除,因此用户服务801

2022-01-23 23:10:36 532

原创 (四)注册中心-eureka集群部署(集群注册用户服务和订单服务)

前面第三章主要是搭建了eureka的集群部署,还是基于高可用原则,用户服务和订单服务也应该需要集群部署。用户服务的集群部署用户服务的集群部署跟eureka的差不多,只需要将application.yml的port设置为动态参数即可。############################################################## 用户微服务# web访问端口号 约定:8001###########################################

2022-01-20 23:46:19 611

原创 (三)注册中心-eureka集群部署(单机注册用户服务和订单服务)

前面第二章提到了eureka的单机模式,为了保证高可用,这张来测试eureka的集群部署,并且还是单机注册用户服务和订单服务。eureka集群部署ApplicationEurekaCluster.java启动类@SpringBootApplication@EnableEurekaServer // 开启注册中心public class ApplicationEurekaCluster { public static void main(String[] args) {

2022-01-20 22:45:45 751

原创 (二)注册中心-eureka(单机注册用户服务和订单服务)

部署eureka注册中心ApplicationEureka.java启动类@SpringBootApplication@EnableEurekaServer // 开启注册中心public class ApplicationEureka { public static void main(String[] args) { SpringApplication.run(ApplicationEureka.class, args); }}applicatio

2022-01-18 22:05:35 447

原创 (一)注册中心-eureka

生活上的案例我们每个人的身份信息都会在派出所登记。派出所就是一个注册中心,用来记录所有人的身份信息。如果张三需要去拜访李四,那么他需要去派出所拿到李四的家庭地址,然后才能去李四家里。注册中心模型用户服务和订单服务都注册在了注册中心,用户需要去查询他的订单信息,则用户服务会去注册中心获取订单服务地址,然后发起调用。注册中心和订单服务为了保证高可用,都可以设置为集群。订单服务是被调用方,因此属于服务提供方,用户服务是调用方,所以是服务消费方。简单配置1.父工程eureka-parent的pom.x

2022-01-16 20:53:43 203

原创 java.util.ConcurrentModificationException

这类错误一般出现在list集合遍历过程中,长度被打破。网上很多说法都是说调用了remove导致,其实add也是会存在这个问题的。public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4);

2021-03-24 09:01:27 101

原创 IDEA热部署license过期怎么办?

步骤1打开地址:https://github.com/ilanyu/ReverseProxy/releases/tag/v1.4下载ReverseProxy_windows_amd64.exe,这个是兼容win10 64的。步骤2直接打开下载好的文件,会弹出窗口,这个窗口不要关闭。步骤3进入网址:https://www.guidgen.com/ 获取新的GUID码。步骤4idea:Help-JRebel-Activationurl用新的GUID替换旧的GUID,切记之前的exe窗口不能关

2021-01-18 16:49:47 1535

原创 读取clob字段返回map后转String

/** * Clob转String * * @param resultList * @return */ public static void clob4String(List<Map> resultList) { for (Map map : resultList) { ClobProxyImpl clob = (ClobProxyImpl) map.get("text");

2020-07-27 14:04:46 760

原创 mybatis:Error querying database. Cause: java.lang.NullPointerException

mybatis配置没问题,但是报错这是我第二次踩这个坑了,因此有必要记下。朋友:如果你也是用的weblogic10.3的话,如果你也是发现mybatis明明sql没配错,那么,你可能需要看下weblogic的ojdbc6.jar是否需要替换了。目录:weblogic安装目录\wlserver_10.3\server\lib\ojdbc6.jar将这个文件替换为以下的就解决问题了。链...

2020-05-05 18:29:43 7415

原创 ./startWebLogic.sh: line 186: 20270 Killed ${JAVA_HOME}/bin/java ${JAVA_VM}

报错原因weblogic启动好了后,中途做性能测试,在100并发下报错,服务自动停掉了。报错提示如下:./startWebLogic.sh: line 186: 20270 Killed ${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} -\Dweblogic.Name=${SERVER_NAME} -Djava.security.policy=${...

2020-03-06 11:53:36 2885 2

原创 Windows下安装Oracle 11g

下载地址https://pan.baidu.com/s/1z5wVv46XgFqpBcFLqZ3mUw提取码:nmx1开始安装第1步:找到安装文件“setup.exe”,双击进行安装。第2步:配置安全更新。电子邮件可写可不写,取消下面的“我希望通过My Oracle Support接受安全更新(W)”,如下图所示,单击下一步。第3步:安装选项。直接选择默认的“创建和配置数据库”,如...

2020-02-25 13:26:15 195

原创 maven打包命令-P和-D的用法

-D我们工程里一般有开发环境(dev)、测试环境(test)、现场环境(prod),如何使用maven命令来指定打哪个环境的war包呢?首先,-D是针对配置属性的。pom文件里默认是dev环境,使用命令:mvn package -Denv=prod 就可以直接打成现场环境的war包了。<properties> <spring.version>4.3.3.RELEA...

2020-01-15 14:39:54 9667 1

原创 jvm(七)垃圾收集器

垃圾收集器上一章介绍了垃圾回收算法,但是算法只是理论的一种可行性方案,还需要实际落地才行。于是乎,就有了好几种基于垃圾回收算法而实现的垃圾回收器。从图中可以看出,一些算法收集器适用新生代,另一些算法收集器适用老年代。1.Serial收集器这是一种单线程收集器,不仅仅意味着它只会使用一个CPU或者一个收集线程去完成垃圾收集工作,更重要的是其在进行垃圾收集的时候需要暂停其他线程。优点:简...

2020-01-09 18:32:06 179

原创 jvm(三)方法区、堆和虚拟机栈的指向关系

方法区、堆和虚拟机栈这三块区域都是存在一定联系的,下面来一一分析下。栈指向堆什么情况下,会存在栈指向堆呢?看一个代码:private void A(){ User user=new User(); //todo}线程在执行A方法时,一定是在虚拟机栈中完成,而引用变量user会存放在局部变量表中,真实的user对象存放在堆中,这时候就是典型的栈中元素指向堆中的对象。方法区指向堆什...

2020-01-06 22:35:20 844 2

原创 jvm(一)class文件如何加载到jvm

编译好的class文件如何被加载到jvm中?相信只要去钻研的小伙伴们都会产生这个疑问,下面我就来谈谈我个人的理解。首先,官网上是分为这么几个步骤:加载、链接以及初始化。为了方便理解,我这里采用图解来描述。装载(Load)这个装载我们并不陌生,因为spring初始化bean之前也会存在这个过程。在装载里面其实主要完成以下三件事情:通过一个类的全限定名获取定义此类的二进制字节流。说白...

2020-01-06 20:20:42 1090

原创 Semaphore用法

Semaphore的用法能够实现CountDownLatch和CyclicBarrier的功能,与这两者不同的是,Semaphore的计数器是累加的,当它的值等于acquire(n);要求的n时线程才能被唤醒。Semaphore实现CountDownLatch的功能public class SemaphoreTest { // 初始化信号量计数器为0 private stati...

2019-12-27 16:49:27 252

原创 CyclicBarrier用法

CountDownLatch和CyclicBarrierCyclicBarrier在用法上其实跟CountDownLatch十分相似,但是前者功能更加强大。CountDownLatch举例:CountDownLatch countDownLatch=new CountDownLatch(n); 当程序多次执行countDownLatch.countDown();导致计数器n=0时,阻塞的...

2019-12-27 15:11:51 12670 2

原创 并发学习(六)Condition的使用及原理

wait和notify实现生产者消费者模式讲Condition之前,有必要再熟悉下wait和notify结合synchronized实现线程的通信,比如实现生产者和消费者模式。案例代码如下。public class ProductConsumer { private int queueSize = 10; private PriorityQueue<Integer>...

2019-12-26 22:18:08 313

原创 并发学习(四)ReentrantReadWriteLock读写锁

诞生背景前面提到的synchronized加锁基本都是排他锁,也就是说只要是多线程竞争情况下,就只能有一个线程获得锁,其余线程阻塞。虽然已经对synchronized进行性能优化了,但是这是从技术层面的优化,它的本质还是排他锁。我们也可以从业务的角度出发,比如存在这种情况:多线程访问同步代码块时,大部分情况下都是读操作,少部分才是写操作。这样的话,如果还是将没获得锁的线程都阻塞起来,太影响性能...

2019-12-19 20:16:02 130

原创 并发学习(三)ReentrantLock可重入锁

前面提到了Lock,但它只是一个接口,真正的实现代表类是ReentrantLock。什么是ReentrantLock字面意思就很容易理解:可重入锁。例如有一个线程A调用了lock方法获得锁后,再次调用lock,也能直接获得锁而不需要去阻塞,只需要增加重入次数即可。synchronized和ReentrantLock都是属于可重入锁,下面来看一个经典案例。public class Reentr...

2019-12-18 21:32:58 129

原创 并发学习(二)Lock简介

有了synchronized怎么还需要Lock并发书上是这么介绍的锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与...

2019-12-17 21:07:19 132

原创 并发学习(一)终于明白了synchronized的实现原理

前提大家应该都了解synchronized是能够保证线程间的可见性以及原子性的吧,如果不了解,赶紧去看下我之前的文章。线程间的可见性synchronized的几种用法再来总结下synchronized的几种用法,无外乎加锁。...

2019-12-15 19:29:47 191

原创 【内存溢出了怎么办?】分析定位,解决问题

导出内存映射文件1、内存溢出自动导出参数配置:#当发生内存溢出,导出heap-XX:+HeapDumpOnOutOfMemoryError #导出到当前路径下-XX:HeapDumpPath=./ 还是以上章节堆内存溢出为例,先在IDEA里修改jvm参数。执行heap方法后,堆内存溢出暴露出来,并且heap也被导出。进入项目所在目录,可以找到该文件。2、使用jm...

2019-12-08 14:54:03 429

原创 jvm(五)方法区、堆和虚拟机栈内存溢出

先问下大家,你们写代码碰到内存溢出的情况多吗?应该不多吧,反正我是碰到的少。但是呢,万一真碰到了,然后刚好需要由你来解决,这个时候你的心里肯定慌了,啥玩意,得从哪下手。下面就来假设出现了内存溢出,然后一步一步找到解决办法。jvm内存模型构造堆内存溢出这个其实很好构建,写个死循环代码,然后不停的产生对象,把堆撑爆了,不就堆内存溢出了。核心方法 /** * 为了让堆内存溢出快速...

2019-12-07 23:22:05 722

原创 线程池:任务延时执行

需求我在做一个导入功能,导入的逻辑都是调用的页面接口。接口执行逻辑:将数据保存到数据库,然后再调用job任务加工历史数据。用户在页面上操作是OK的,毕竟每操作一下,接口最多调用一次。但是导入就不一样了,相当于用户一直在对着页面点点点~这会导致后面历史任务的加工出现问题。解决在导入的时候,我需要先让基本数据保存到数据库就OK,等所有导入都完成后,我再一并去加工历史任务。所以,设定一个延...

2019-11-14 11:04:50 2628

原创 CentOS7 安装 Mysql5.5

安装步骤第1步: 检查本地是否安装过其他版本的mysql命令:rpm -qa|grep -i mysql第2步: 有些版本会自带mariadb,需要先卸载命令:yum -y remove maria*第3步: 下载mysql 5.5的服务器和客户端的安装包下载服务器包:wget https://dev.mysql.com/get/Downloads/MySQL-5.5/MySQL-se...

2019-11-02 17:28:25 328 1

原创 通俗理解maven的加SNAPSHOT和不加SNAPSHOT

疑惑我们在开发中经常会看到maven的pom文件里有如下两种版本形式:<version>xxx-SNAPSHOT</version>和<version>xxx</version>这其实分别描述的是快照版和正式版。为什么要这么区分因为maven的远程仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快...

2019-10-25 13:27:11 3933

原创 eclipse web项目转idea项目

步骤导入Eclipse项目,选择File-New-Projec from Existing Sources…项目结构如下:打开项目结构配置,如图:默认情况下,Project中的Project compiler output目录是项目根目录下的out目录所谓Project compiler output是指classes文件夹所在目录。正常情况下,应只将src目录标记为Source...

2019-10-10 19:39:38 270

原创 Idea导入jar包的两种方法

方法1:File –> Project Structure导入方法进入:File –> Project Structure找到Modules->Dependencies,点击最右侧的绿色+号如图:选择1或者2都可以。然后选择自己jar所在目录。方法2:右键添加Jar包在你需要导入的Jar包上,点击右键,选择Add as Library…点击OK就行了。...

2019-10-10 19:13:17 891

原创 固定线程数newFixedThreadPool线程池用法

假设有10个任务,需要指定5个线程去执行它们,代码如下:public class Test { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(5); try { for(...

2019-09-17 18:53:27 1940

原创 weblogic.kernel.Default (self-tuning)解决

吐槽我使用weblogic启动服务后,系统可以正常运行,但是mybatis查询时会报错,经历了几次排查错误,最终定位在了我的weblogic有问题,然后就是上面这个错误了。针对上面的错误我百度了好多,基本都是说进入weblogic后台调优啥的,然后一篇帖子被无数人转发,所以都是同一个答案。我在想,难道weblogic默认的参数都不能保证正常使用项目吗,一定要通过调优解决?于是我跟着调优之后错误...

2019-09-07 10:18:28 4599 1

原创 kafka的通俗理解

消息中间件是基于什么需求设计的?既然是消息中间件,那么一定会有发送消息和接收消息应用程序往消息中间件发送消息,那么一定会通过网络请求,为了保证中间件的性能,网络请求应该需要用到NIO牛逼一点的中间件,应该会支持跨语言,不应该只为Java而设计消息是通过什么形式发送的呢,目前比较流行的应该还是序列化和反序列化吧生产者发送完消息后如何知道自己是否发送成功了,消费者消费完消息后,中间件如何知...

2019-08-29 20:10:59 1098 1

jdk1.6.0_35.rar

jdk1.6,查了很久才找到一个。有时候老项目就需要用到这个版本的jdk,这个版本现在网上比较难找,所以上传一个记录下。欢迎下载。

2019-11-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除