spring cloud组件之Eureka注册中心:通过自动注册、发现、状态监控来管理服务地址
摘要:Eureka:解决服务地址的管理。自身不提供服务(不注册自己到Eureka中,如果是集群则要注册,因为其他Eureka服务器也要发现这台Eureka)也不消费服务(不来取服务)。默认情况下要注册和拉取的 在刚才的案例中,user-service对外提供服务,需要对外暴露自己的地址。而consumer
阅读全文
posted @
2021-02-27 21:48
周文豪
阅读(1532)
推荐(1) 编辑
高可用的Eureka Server
摘要:Eureka Server即服务的注册中心,在刚才的案例中,我们只有一个EurekaServer(Eureka Server是一个web应用,可以启动多个实例),事实上EurekaServer也可以是一个集群,形成高可用的Eureka中心。eureka-server模块只有一个,配置只有一个,通过在
阅读全文
posted @
2021-02-27 19:12
周文豪
阅读(206)
推荐(0) 编辑
springboot整合通用Mapper/tkMapper(4种主键生成方式)
摘要:一、springboot整合tkMybatis 1、springboot整合tkMybatis (1)、添加依赖:mapper-spring-boot-starter <parent> <groupId>org.springframework.boot</groupId> <artifactId>s
阅读全文
posted @
2021-02-27 12:15
周文豪
阅读(3556)
推荐(0) 编辑
spring cloud微服务项目工程搭建
摘要:一、父工程搭建 1、创建项目类型为maven的父工程 File→new→Module→maven→next→Add as module to:none和Parent:none→GroupId:com.zwhxpp,AritfactId:zwh-springcloud→next→Module Name
阅读全文
posted @
2021-02-27 10:52
周文豪
阅读(400)
推荐(0) 编辑
spring cloud之系统架构演变
摘要:演变过程: 单一应用(单点容错率低且并发能力差)→垂直拆分(解决了并发问题但是有很多重复代码)→分布式服务(提高了代码复用但系统间耦合度变高)→SOA(着重中央管理,松耦合但是应用服务粒度较大)→微服务架构(去除ESB,总是松耦合且服务粒度很小) 集中式单体架构monolithic architec
阅读全文
posted @
2021-02-26 11:51
周文豪
阅读(187)
推荐(0) 编辑
如何在两个线程间共享数据?
摘要:如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。实现Runnable接口或callable接口,适合多个相同或不同的程序代码的线程去共享同一个资源。 多个线程共享数据分两种情况: 1、如果多个线程执行同一个Runnable实现类中的代码,此
阅读全文
posted @
2021-02-25 17:53
周文豪
阅读(4330)
推荐(0) 编辑
使用 volatile 代替 synchronized的条件:volatile变量真正独立于其他变量和自己以前的值
摘要:总结: 1、volatile变量没有真正独立于其他变量和自己以前的值时,volatile无法保证原子性,此时可以使用synchronized和ReentrantLock来解决原子性问题 2、volatile变量真正独立于其他变量和自己以前的值时可以使用 volatile 代替 synchronize
阅读全文
posted @
2021-02-25 15:19
周文豪
阅读(307)
推荐(1) 编辑
重量级锁synchronized的优化----自旋锁、自适应自旋锁、锁消除、锁粗化
摘要:synchronized是重量级锁,效率不高。但在jdk 1.6中对synchronize的实现进行了各种优化,使得它显得不是那么重了。jdk1.6对锁的实现引入了大量的优化,如自旋锁、自适应自旋锁、锁消除、锁粗化等技术来减少锁操作的开销。 锁主要存在四中状态,依次是:无锁状态、偏向锁状态、轻量级锁
阅读全文
posted @
2021-02-25 11:46
周文豪
阅读(724)
推荐(0) 编辑
Java内存模型(JMM)是什么?JMM 通过控制主内存与每个线程的本地内存之间的交互,来提供内存可见性保证
摘要:Java内存模型就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。 Java内存模型是根据英文Java Memory Model(JMM)翻译过来的。其实JMM并不像JVM内存结构一样是真实存在的。他只是一个抽象
阅读全文
posted @
2021-02-25 10:41
周文豪
阅读(796)
推荐(0) 编辑
多线程死锁
摘要:多线程死锁:同步中嵌套同步,导致锁无法释放。 死锁解决办法:不要在同步中嵌套同步 public class Demo06DeadLock { public static void main(String[] args) { //创建线程任务对象 Ticket ticket = new Ticket(
阅读全文
posted @
2021-02-25 09:56
周文豪
阅读(86)
推荐(0) 编辑
线程安全之卖票案例
摘要:线程安全: 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的,反之则是线程不安全的。 卖票案例: public class Demo08 { public static void main(S
阅读全文
posted @
2021-02-24 15:57
周文豪
阅读(131)
推荐(0) 编辑
对Map进行复合操作(读写)且并发执行时,无法保证业务的行为是正确的,对读写操作进行同步则可以解决。
摘要:ConcurrentHashMap通常只被看做并发效率更高的Map,用来替换其他线程安全的Map容器,比如 Hashtable和Collections.synchronizedMap。线程安全的容器,特别是Map,很多情况下一个业务中 涉及容器的操作有多个(读get写put,remove),即复合操
阅读全文
posted @
2021-02-24 11:55
周文豪
阅读(366)
推荐(0) 编辑
ConcurrentHashMap的使用场景
摘要:一、并发容器ConcurrentHashMap HashMap是我们用得非常频繁的一个集合,但是它是线程不安全的。并且在多线程环境下,put操作是有可能产生死循环,不过在JDK1.8的版本中更换了数据插入的顺序,已经解决了这个问题。 为了解决该问题,提供了Hashtable和Collections.
阅读全文
posted @
2021-02-24 11:27
周文豪
阅读(4621)
推荐(0) 编辑
为什么ConcurrentHashMap,HashTable不支持key,value为null?
摘要:ConcurrentHashmap、HashMap和Hashtable都是key-value存储结构,但他们有一个不同点是 ConcurrentHashmap、Hashtable不支持key或者value为null,而HashMap是支持的。 为什么要这么设计? 在网上找到了这样的解答:The ma
阅读全文
posted @
2021-02-22 17:42
周文豪
阅读(463)
推荐(0) 编辑
HashMap扩容后是否需要rehash?
摘要:需要,因为要重新计算旧数组元素在新数组地址。HashMap在JDK1.8中的rehash算法(也就是扩容后重新为里面的键值对寻址的算法)进行优化。hash寻址算法是 index =(n - 1) & hash 在JDK1.7的时候,是将数组扩容为两倍,然后将HashMap中所有的key重新进行has
阅读全文
posted @
2021-02-22 16:51
周文豪
阅读(4670)
推荐(1) 编辑
为什么我们在定义HashMap的时候,就指定它的初始化大小呢
摘要:在当我们对HashMap初始化时没有设置初始化容量,系统会默认创建一个容量为16的大小的集合。当HashMap的容量值超过了临界值(默认16*0.75=12)时,HashMap将会重新扩容到下一个2的指数幂(16->32)。HashMap扩容将要进行resize的操作,频繁resize,会导致降低性
阅读全文
posted @
2021-02-22 16:11
周文豪
阅读(1242)
推荐(0) 编辑
HashMap是如何进行扩容的?
摘要:HashMap通过resize()方法进行扩容。 源码解析: resize()函数有两种使用情况: 一、当table数组为null时初始化hash表。 二、当table数组不为null时进行扩容。 1、如果table数组的容量超过最大容量时,无法扩容,直接返回旧的数组。并将threshold值设置为
阅读全文
posted @
2021-02-22 15:57
周文豪
阅读(5920)
推荐(2) 编辑
HashMap什么时候进行扩容?
摘要:Threshold:table数组元素个数size的大小超过threshold且且Node<K,V>[] table数组长度没有超过64时时table数组扩容。当hashmap中的元素个数size超过数组长度*loadFactor时,就会进行数组扩容,loadFactor的默认值为0.75,也就是说
阅读全文
posted @
2021-02-22 12:13
周文豪
阅读(3204)
推荐(0) 编辑
谈一下HashMap的底层原理是什么?
摘要:底层原理:Map + 无序 + 键唯一 + 哈希表 (数组+Entry)+ 存取值 1、HashMap是Map接口的实现类。实现HashMap对数据的操作,允许有一个null键,多个null值。 ConcurrentHashmap、Hashtable不支持key或者value为null,而HashM
阅读全文
posted @
2021-02-22 11:54
周文豪
阅读(1787)
推荐(0) 编辑
谈一下hashMap中put是如何实现的?
摘要:源码: Hash(key):计算出key的hash值。 put方法详解: 1、如果table数组为null或者table数组的长度为0,则调用resize()方法扩容并返回table数组。数组的长度为n,(put时确保table数组不为空且长度不为0) 2、如果table数组不为null且数组的长度
阅读全文
posted @
2021-02-22 11:47
周文豪
阅读(1017)
推荐(0) 编辑
HashMap源码解析
摘要:数组: 数组存储区间是连续的,占用内存严重,故空间复杂度很大,但数组的二分查找时间复杂度很小,为 o(1),数组的特点:查找速度快、插入和删除效率低 链表: 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,为 o(n),链表的特点:查找速度慢、插入和删除效率高 ArrayLi
阅读全文
posted @
2021-02-21 12:33
周文豪
阅读(515)
推荐(0) 编辑
自关联映射:一个表自己关联自己,此时从同一个表中查询,通过起别名将一张表变成两张表,使用join语句。
摘要:实例1:id自关联。 隐式内连接: 实例二:编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。返回结果 不要求顺序 。 查询结果格式如下例: Weather + + + + | id | recordDate | Temperature | + + + + | 1
阅读全文
posted @
2021-02-10 17:34
周文豪
阅读(2005)
推荐(0) 编辑
Mysql训练:where后不可以进行聚合函数的判断,而having可以进行聚合函数的判断
摘要:力扣题目:查找重复的电子邮箱 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。 + + + | Id | Email | + + + | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | + + + 根据以上输入,你的查询应返回以下结果:
阅读全文
posted @
2021-02-10 11:51
周文豪
阅读(415)
推荐(0) 编辑
DQL:data query language用来查询数据库表中的数据
摘要:对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件。对记录进行过滤。 查询的语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字
阅读全文
posted @
2021-02-10 11:43
周文豪
阅读(114)
推荐(0) 编辑
Mysql训练:两个表中使用 Select 语句会导致产生 笛卡尔乘积 ,两个表的前后顺序决定查询之后的表顺序
摘要:力扣:超过经理收入的员工 Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。 + + + + + | Id | Name | Salary | ManagerId | + + + + + | 1 | Joe | 70000 | 3 |
阅读全文
posted @
2021-02-10 09:35
周文豪
阅读(444)
推荐(0) 编辑
最常用SQL joins:内连接(交集)、左外连接、右外连接、左连接、右连接、全连接(并集),全外连接
摘要:1、内连接。两个表的公共部分用Inner join,Inner join是交集的部分。 Select * from TableA A inner join TableB B on A.key=B.key 2、左外连接。A表和B表的共有,加上A的独有,简称全A。 Select * from Table
阅读全文
posted @
2021-02-09 17:48
周文豪
阅读(2712)
推荐(0) 编辑
Mysql训练:第二高的薪水(IFNULL,OFFSET,LIMIT)
摘要:编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。 + + + | Id | Salary | + + + | 1 | 100 | | 2 | 200 | | 3 | 300 | + + + 例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪
阅读全文
posted @
2021-02-07 16:27
周文豪
阅读(154)
推荐(0) 编辑