- 博客(107)
- 收藏
- 关注
原创 java-多线程-死锁
线程死锁 一.概念原理 要点: 1.多线程竞争资源 2.占有一个同步资源去请求另外一个同步资源 3.线程争抢资源的顺序不同 二.死锁代码 public class TestDeadLock implements Runnable{ public static void main(String[] args) { TestDeadLock dead = new TestDeadLock(true); TestDeadLock dead2 = new TestDeadLock(false);
2021-01-28 17:50:14
212
原创 java-线程加强-线程的join方法
Join方法 一.概念及作用 join方法四用于在一个线程中,调用其他线程的join方法,则此线程等待其他线程完成任务. 二.特点 1.是Thread类的方法,故只能是线程及其子类调用. 2.底层调用的是object的wait方法. 3.Join()方法会释放锁,但是只能释放它join的对象的锁. 三.代码 功能就是,首先主线程先输出到10;然后等待子线程输出到10;最后主线程再输出剩余的 情况0:主线程或只线程,至少有一方不是同步方法 子线程类 class MyThread extends Threa
2021-01-28 12:01:14
254
原创 104-java数据结构与算法
如图 一.数组 java中数组代表着一块连续的物理存储空间,遍历块,删除慢.其余特性略. 1.稀疏数组 (1)应用场景 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 (2)稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 (3) 代码 略 略,后续再补充 ...
2020-08-06 16:25:10
237
原创 103-java8新特性(3)-新日期API/重复注解
一.原有日期处理 1.SimpleDateFormate线程不安全 (1) 不安全代码 public static void main(String[] args) throws Exception { //1.8 之前使用的线程不安全的转换类 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //1.8之前用的日期转换工具内,线程不安全 Callable<Date> task = (
2020-07-11 11:53:23
257
原创 101-java8新特性(1)-Lambda表达式
java 8 新特性 java 1.8 相对于java 1.7修改了很多地方,增加了很多新特性. Lambda表达式 1.概念及注意事项 Lambda表达式的格式: Interface in = Lambda表达式. 注意: 1.左边一定是一个接口,抽象类也不行,因为Lambda表达式就是设计来实现这个接口的方法的匿名内部类 2.左边的这个接口一定是只有一个抽象方法的函数是接口.因为如果有多个接口,则这个Lambda表达式则不能区分是实现的哪个抽象方法. 3.这个函数式接口可以用注解@Functiona
2020-07-10 10:44:02
309
原创 100-java-springcloud(13)-cloudalibaba(03)-分布式事务-单库事务/分布式事务seata
数据库事务 一.数据库事务的简介 1.什么是事务? 数据库事务就是在进行数据库操作的时候,单条语句是原子操作的,但是多条语句不是原子操作,可能会导致一部分语句执行成功,一部分语句执行失败,但是某些业务场景下我们需要保证多条语句同时执行成功或者执行失败. 2.事务的特性 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。 隔离性(Isolation):事
2020-07-06 18:06:17
293
原创 99-java-springcloud(12)-cloudalibaba(02)-熔断与限流-sentinel
sentinel 一.概述 1.介绍及简介 (1) 官网 官网地址: https://github.com/alibaba/Sentinel 中文文档: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D spring-alibaba-sentinel 地址: https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.ht
2020-07-06 11:34:33
302
原创 96-java-springcloud(09)-配置中心和消息总线-config/bus
springcloud config 一.概述 1.是什么? 参考官网: https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/ 产生原因 由于分布式微服务将大的服务拆分成了一个个小的服务,而且由于微服务的规模小,通常一个项目可能产生及时上百个微服务,而就会有上百个配置文件,怎么样统一管理这些配置文件? springcloud-config是什么? springcloud-c
2020-07-03 17:45:45
284
原创 95-java-springcloud(08)-网关-gateway
gateway 网关是什么,网关是一切外部访问程序的入口,他控制这这个服务架构的出入,鉴权,代理,流控,监控等. 一.简介 1.官网 官网地址: https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.3.RELEASE/reference/html/#gateway-starter 2.是什么? Spring Cloud Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了Net
2020-07-02 18:08:39
411
原创 94-java-springcloud(07)-服务降级-Hystrix/Hystrix Dashboard
Hystrix 一.简介 1.官网 参考官网: https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.2.3.RELEASE/reference/html/#circuit-breaker-spring-cloud-circuit-breaker-with-hystrix 2.分布式微服务面临的问题? 服务雪崩 某个或者某些服务出现故障,导致调用本服务的其他服务调用缓慢,或者调用失败,发生级联反应,从而导致多个服务不能使用,发
2020-07-02 11:42:28
252
原创 93-java-springcloud(06)-服务调用-openFeign
openFeign 一.概述 1.官网 参考官网: https://cloud.spring.io/spring-cloud-static/spring-cloud-openfeign/2.2.3.RELEASE/reference/html/#spring-cloud-feign-overriding-defaults 2.OpenFeign是什么? Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可 3.Feign和OpenFeign两
2020-07-01 18:16:32
209
原创 92-java-springcloud(05)-负载均衡-Ribbon
Ribbon 一.Ribbon的概述 1.官网 参考文档: https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.2.3.RELEASE/reference/html/#spring-cloud-ribbon 2.ribbon是什么? ribbon是一个客户端负载均衡,是调用方得到地址,自己控制访问的算法策略. 3.ribbon和nginx的对比 Ribbon对比Nginx Ribbon Nginx 使用方
2020-07-01 17:12:21
193
原创 91-java-springcloud(04)-注册中心(3)-Consule
Consule 一.Consule简介 1.是什么? https://www.consul.io/intro/index.html 2.能干嘛? 服务发现 健康监测 KV存储 多数据中心 可视化Web界面 3.去哪下? https://www.consul.io/downloads.html 4.怎么玩? https://www.springcloud.cc/spring-cloud-consul.html 二.安装并运行Consule 1.官网安装说明 https://l
2020-07-01 10:46:34
392
原创 90-java-springcloud(03)-注册中心(2)-Zookeeper
Zookeeper 一.zookeeper的搭建 参考文章: https://editor.youkuaiyun.com/md/?articleId=106782730 二.使用zookeeper作为配置中心 1.生产者 1.建module 略 2.改pom <!-- 引入zookeeper依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <ar
2020-06-30 18:15:41
166
原创 89-java-springcloud(02)-注册中心(1)-Eureka
注册中心 1.什么是注册中心? 注册中心,主要包括3个组件要素,第一个就是注册中心,第二个就是消费者,第三个就是生产者. 注册中心 注册中心就是类似于淘宝商城,他的作用有两个. 1.消费者要消费,调用接口,他告诉消费者,调用的服务的ip地址和端口是哪个. 2.为了保证消费者每次访问的接口都正确,不是过期的地址,虽然消费者和生产者注册上来,但中途由于服务器宕机,关机等,他需要保证提供的服务对应的ip地址的实时性. 由于以上原因,注册中心必须保证服务与ip地址的实时对应关系,这就涉及到了一致性协议.CAP理
2020-06-30 17:26:26
219
原创 88-java-springcloud(01)-简介/父项目/公共模块的搭建
本文架构如图 一.概述 1.why?(产生的原因) 由于现在的系统越来越复杂,在微服务的理念提出之后,我们将系统拆分成一个个的独立的模块,所以我们迫切的需要一套技术来协调管理这一套的微服务. 2.what?(是什么) 1.解决分布式系统项目的协调的一整套解决方案,从服务注册,到服务调用,再到负载均衡,服务降级,配置中心等,都有一整套完整的解决方案. 2.springCloud是spring社区在基于springBoot技术架构之上的. 3.how?(怎么做) springCloud是一整套关于微服务分
2020-06-30 12:08:25
508
原创 86-java-rabbitMQ(3)-rabbitMQ的消息可靠性/集群搭建
本文架构 具体可参考文章: https://www.cnblogs.com/linjiqin/p/12683076.html https://blog.youkuaiyun.com/u013256816/article/details/60875666/
2020-06-22 17:20:30
217
原创 85-java-rabbitMQ(2)-rabbitMQ的javaAPI
本文按照两部分来说明 java连接rabbitMQ的工作模式 基础部分 (1) pom依赖 <dependencies> <!-- 这是java连接rabbitMQ的原生api依赖 --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId&
2020-06-22 17:12:41
251
原创 84-java-rabbitMQ(1)-rabbitMQ的概述/下载安装/管理界面
一、概述 1.MQ是什么? (1) 概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。 (2) 消息中间件的组成 2.1 Broker 消息服务器,作为server提供消息核心服务 2.2 Producer 消息生产者,业务的发起方,负责生产消息传输给broker, 2.3
2020-06-22 15:49:45
347
原创 83-java-countDownLatch
本文架构 countDownLatch 1.作用 这是用来做多线程操作的类,和join方法类似 2.构造方法 CountDownLatch countDownLatch = new CountDownLatch(1); #这个表示构造一个值为1的对象,当对象的值为0时,阻塞的方法则可继续执行 3.阻塞当前线程: countDownLatch.await(); #这个方法表示阻塞当前线程,当本对象的值为0时,接着继续执行后面的代码 4.将对象的值减1: countDownLatch.countDo
2020-06-16 18:20:15
126
原创 82-java-zookeeper(2) -集群/curator/监控
一.zookeeper集群 1.集群搭建 1.创建一个文件夹,和复制配置zoo.cfg文件 2.修改cfg配置文件 3.在每一个文件夹中的dataDir下创建myid文件,并且根据配置文件中的信息,设置myid内容为服务器编号 4.参照1.2.3步骤,再配置一个服务器 5.启动三台服务器 sh zkSevver.sh start xxx.cfg #指定以哪个配置文件启动服务器 6.检查服务器状态 sh zkServer.sh status xxx.cfg #检查之地服务器的状态 2.zab协议
2020-06-16 18:08:43
434
原创 81-java-zookeeper(1) -zookeeper单机/原生api/应用场景
本文架构如图 一.简介 1.功能及用途 1.维护配置信息 2.分布式锁 3.集群管理 4.生成分布式唯一id 2.设计目标及优点 优点 1.高性能 内存,存储数据 2.高可用 集群部署 3.严格顺序访问 生成的全局唯一的id,分布式锁 对比redis redis zookeeper 存储类型 内存 内存 数据类型 k-v 树形结构 性能 高 中 高可用 好 好 目标 数据缓存 分布式辅助功能 应用场景 缓存数据库 分布式锁/配置中心 设计目标 由于zooke
2020-06-16 11:55:25
259
原创 80-java-springboot(6)-错误处理/修改默认的web容器
一.异常处理 异常处理分为两类,一类是返回异常的json数据,一类是返回异常的页面. 1、SpringBoot默认的错误处理机制 默认效果: 1)、浏览器,返回一个默认的错误页面 浏览器发送请求的请求头: 2)、如果是其他客户端,默认响应一个json数据 发起的请求: 2、SpringBoot错误机制的原理 可以参照ErrorMvcAutoConfiguration;错误处理的自动配置; 给容器中添加了以下组件: DefaultErrorAttributes: 作用: 错误的属性配置,包括时间
2020-06-12 17:55:38
233
原创 79-java-springboot(5)-国际化
三.国际化 1、编写国际化配置文件,抽取页面需要显示的国际化消息 说明: 1.新建一个文件xxx.properties 2.新建一个文件xxx_en_US.properties 上面两步完成之后,springboot会扫描出我们是要做国际化,会自动生成国际化视图. 3.添加其他语言的properties文件 4.分别给所有的文件,对应的属性设值. 2、SpringBoot自动配置好了管理国际化资源文件的组件; MessageSourceAutoConfiguration #springboot默认注
2020-06-12 17:37:38
311
原创 78-java-springboot(4)-web/Thymeleaf
springboot的web环境 spring官网文档:https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/html/spring-boot-features.html 本文所有配置,均参考WebMvcAuotConfiguration这个类.这个类也是springbootweb模块的主要配置类. WebMvcAuotConfiguration 一.springboot对静态资源的默认规则. 1)、所有 /webjars/** ,都
2020-06-12 17:36:39
204
原创 77-java-springboot(3)-日志
日志基础使用参考文章: https://editor.youkuaiyun.com/md/?articleId=105598438 一.springboot默认日志及配置 1.默认日志框架 springboot默认使用slf4j+logback框架 二.切换springboot的日志框架
2020-06-12 11:32:38
170
原创 76-java-springboot(2)-启动原理分析及自定义starter
本文主要分析springboot启动原理分析及自定义starter 一.springboot原理三问 1.首先我们springBoot加载自己编写的bean是怎么加载的? 思考: 加载bean到容器,无外乎,递归扫描基础包,找到相应的注解修饰的类,然后放入容器.所以我们需要指明基础包. 实现: 通过这个注解@AutoConfigurationPackage 获得当前主启动类的包,并且以这个包为基础包 2.其次我们导入其他starter项目的时候,他怎么帮我注入bean到容器的? 思考1: 上
2020-06-11 18:25:09
255
原创 73.java项目-IO
IO 一.IO是什么? java io是inputstream和outputStream的总称,其实就是java输入和输出的总称. 如果换我们来设计的话,有两个问题需要考虑: 第一从哪里读写. 第二读写出来的结果是什么类型. 所以解决第一个问题,我们定义了统一的接口,从不同地方读取,我们就是这个接口的不同实现; 解决第二个问题,我们设置了不同的接口,如流式读取,我们的顶层接口为inputStream/outputStream,而字符型顶层接口为reader和writer. 二.IO的分类 IO的分类方式
2020-06-01 17:00:27
259
原创 70.java项目--linux
本文的架构如图 一.linux概述 1.linux的历史概述 Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 特点: all is file(一切皆为文件) Linux的基本思想有两点:第一,一切都是文件;第二,每个文件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也
2020-05-19 00:33:23
306
原创 69.java项目--git/github
本文架构 一.git的概述 git是一各分布式的版本管理工具,用于代码的管理. 1.git和SVN的原理区别 svn 代码统一交由代码库管理,我们开发人员编写代码的时候需要从远程库下载,再编写.如果代码库宕机或者出现故障,则我们将丢失代码的版本,修改等等,因为我们本地只有代码,没有这个项目的所有变更的细节----这就是单点故障 git 为了解决svn的单点故障,git在本地同样也有一个本地库,并且代码只有commit到了本地库,在由本地库推送到远程的github仓库,所以如果远程的git如果丢失了,我们
2020-05-18 16:45:45
607
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2