11 2018 档案

千万级流量架构设计实现方案
摘要:实现千万级流量架构设计实现原则 1 实现高并发 服务拆分:将整个项目拆分成多个子项目或者模块,分而治之,将项目进行水平扩展 服务化:解决服务调用复杂之后的服务注册和发现问题 消息队列: 解耦,异步处理 缓存:各种缓存带来的高并发 2 实现高可用 集群 限流 降级 3 业务设计 幂等:用户对于同一个操 阅读全文

posted @ 2018-11-23 13:02 anqli_java 阅读(1212) 评论(0) 推荐(0)

Spring Bean生命周期
摘要:概述 Spring的ioc容器功能非常强大,负责Spring的Bean的创建和管理等功能。而Spring 的bean是整个Spring应用中很重要的一部分,了解Spring Bean的生命周期对我们了解整个spring框架会有很大的帮助。 BeanFactory和ApplicationContext 阅读全文

posted @ 2018-11-20 15:49 anqli_java 阅读(251) 评论(0) 推荐(0)

多线程 Thread.yield的作用
摘要:yield 即 "谦让",也是 Thread 类的方法。它让掉当前线程 CPU 的时间片,使正在运行中的线程重新变成就绪状态,并重新竞争 CPU 的调度权。它可能会获取到,也有可能被其他线程获取到。 yield 和 sleep 的异同 1)yield, sleep 都能暂停当前线程,sleep 可以 阅读全文

posted @ 2018-11-20 08:57 anqli_java 阅读(1541) 评论(0) 推荐(0)

git 将本地代码上传到github
摘要:1 初始化: git init 2 指定远程仓库 : git remote add origin 远程仓库位置 3 将本地文件加入:git add . 4 提交: git commit -m "first commit" 5 将远程仓库里面的README.MD 文件下载到本地:git pull -- 阅读全文

posted @ 2018-11-16 15:03 anqli_java 阅读(223) 评论(0) 推荐(0)

缓存穿透与缓存雪崩
摘要:缓存穿透 什么是缓存穿透? 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。 如何避免? 1:对查询结果为空的情况也进行缓存 阅读全文

posted @ 2018-11-15 21:55 anqli_java 阅读(164) 评论(0) 推荐(0)

SpringCloud核心组件在微服务架构中的作用
摘要:Eureka: 各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里。 Ribbon:服务间发起请求的时候,基于Ribbon 做负载均衡,从一个服务的多台机器选择 阅读全文

posted @ 2018-11-12 08:13 anqli_java 阅读(728) 评论(0) 推荐(0)

双十一电商Java开发聊聊秒杀限流的多种实现
摘要:前言 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的。两周前秒杀案例初步成型,分享到了中国最大的同性交友网站-码云。同时也收到了不少小伙伴的建议和投诉。我从不认为分布式、集群、秒杀这些就应该是大厂的专利,在互联网的今天无论什么时候都要时刻武装自己,只有这样,也许你的春天就 阅读全文

posted @ 2018-11-12 07:58 anqli_java 阅读(816) 评论(0) 推荐(0)

localhost 和 127.0.0.1 的区别
摘要:1 localhost也叫local,正确的解释是本地服务器;127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器) 2 localhost(local)是不经过网卡传输的,这点很重要,它不受网络防火墙和网卡相关的限制;127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火 阅读全文

posted @ 2018-11-12 07:54 anqli_java 阅读(1180) 评论(0) 推荐(0)

多线程中的锁
摘要:乐观锁和悲观锁 乐观锁和悲观锁是在数据库中引入的名词,但是在并发包锁里面也引入了类似的思想,所以这里还是有必要讲解一下。 悲观锁指对数据被外界修改持保守的态度,认为数据很容易就会被其他线程修改,所以在数据被处理前就先对数据加锁,并在整个数据处理过程中,使数据处于锁定状态,悲观锁的实现往往依靠数据库提 阅读全文

posted @ 2018-11-11 16:31 anqli_java 阅读(317) 评论(0) 推荐(0)

分布式缓存
摘要:缓存的使用场景 缓存穿透,指缓存没有发挥作用,业务系统虽然去缓存中查询数据,但是缓存中没有数据,业务系统需要再次去存储系统查询数据,通常情况下有两种情况,存储数据不存在,以及生成缓存数据需要大量的时间或资源 缓存雪崩,缓存雪崩指当缓存失效(过期)后引起的系统性能急剧下降的情况,当缓存过期被清除后,业 阅读全文

posted @ 2018-11-11 15:36 anqli_java 阅读(181) 评论(0) 推荐(0)

Redis事物特点和持久化方式
摘要:Redis的事物不支持完整的ACID,Redis虽然提供事物功能,但是Redis的事物和关系数据库事务不可同日而语,Redis的事物只能保证隔离性和一致性(I和C),无法保证原子性和持久性(A和D),具体实现原理如下: 原子性 Redis事物不支持原子性,Redis不支持回滚操作,事物中间一条命令执 阅读全文

posted @ 2018-11-11 15:09 anqli_java 阅读(370) 评论(0) 推荐(0)

数据库分库分表存在的问题及解决方案
摘要:读写分离分散了数据库读写操作的压力,但是没有分散存储压力,当数据库的数据量达到千万甚至上亿条的时候,单台数据库服务器的存储能力就会达到瓶颈,主要体现在以下几个方面: 基于上述原因,单个数据库服务器存储的数据量不能太大,需要控制在一定的范围内,为了满足业务数据存储的需求,需要将存储分散到多台数据库服务 阅读全文

posted @ 2018-11-11 14:54 anqli_java 阅读(5061) 评论(0) 推荐(0)

数据库高性能解决方案
摘要:高性能数据库集群的第一种方式是: 读写分离,其本质是将访问压力分散到集群中的多个节点,但是没有分散 存储压力;第二种方式是:分库分表,既可以分散访问压力,又可以分散存储压力。 一 读写分离 读写分离的基本原来是将数据库读写操作分散到不同的节点上,读写分离的基本实现如下: 注意:这里用的是主从集群,而 阅读全文

posted @ 2018-11-11 13:46 anqli_java 阅读(1012) 评论(0) 推荐(0)

线程之间如何通信和同步
摘要:线程之间的通信方式:共享内存(隐式通信),消息传递(显示通信) 线程之间同步:在共享内存的并发模型中,同步是显示做的;在消息传递的并发模型中,由于消息的发生必须在消息接收之前,所以同步是隐式做的 阅读全文

posted @ 2018-11-09 13:36 anqli_java 阅读(1080) 评论(0) 推荐(0)

lock 和synchronized 的区别
摘要:1 lock是接口实现,synchronized是内置方法native实现 2 lock可以主动释放锁,synchronized只能是加锁的代码块执行完毕或者遇到异常退出被动的释放锁 3 性能方面,如果竞争资源不是很激烈的情况,两者的性能差不太多,如果是在竞争资源激烈的情况下,lock的性能要优于s 阅读全文

posted @ 2018-11-09 13:16 anqli_java 阅读(179) 评论(0) 推荐(0)

JVM热点问题总结
摘要:1、所有线程共享的内存数据区:方法区,堆。而虚拟机栈,本地方法栈和程序计数器都是线程私有的。 2、存放于栈中的东西如下: 2.1 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象)。对象都存放在堆区中。 2.2 每个栈中的数据(基础数据类型和对象引用)都是私有的,其他栈 阅读全文

posted @ 2018-11-08 16:01 anqli_java 阅读(475) 评论(0) 推荐(0)

同步异步,阻塞非阻塞的相关说明
摘要:关于阻塞与非阻塞 同步与异步的区别:一般来说IO分为两个阶段, 第一阶段是等待数据阶段, 第二阶段是内核空间的数据拷贝到用户空间,假设一个线程(或是进程)P准备执行一个IO操作的话它会经历以下过程: 第一阶段: P发出一个IO请求,这时候会有两种情况: 1:立刻返回: 非阻塞 2:一直等待,P调用s 阅读全文

posted @ 2018-11-08 15:49 anqli_java 阅读(189) 评论(0) 推荐(0)

Java 如何实现线程间通信
摘要:正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这个时候就涉及到了线程间的通信 涉及到的内容主要有: 从下面几个例子作为切入点说明Java 有哪些方法实现线程间通信 如何让两个线程依次执行? 假设有两个线程,一个线程 A, 另外一个线程 B,两 阅读全文

posted @ 2018-11-08 15:40 anqli_java 阅读(325) 评论(0) 推荐(0)

HashMap与HashTable的区别
摘要:1 线程安全方面 HashMap是非线程安全的,HashTable是线程安全的 2 初始化容量 HashMap的初始化容量是 16,HashTable的初始化容量是 11,两者的扩容因子都是0.75 3 扩容方式 HashMap扩容时是当前容量翻倍 即 capacity*2,HashTable扩容时 阅读全文

posted @ 2018-11-08 11:42 anqli_java 阅读(166) 评论(0) 推荐(0)

接口和抽象类的区别
摘要:1 接口类和抽象类都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类的对象,接口变量必须指向实现所有接口方法的类对象 2 抽象类要被子类继承,接口要被类实现 3 接口只能做方法声明,抽象类可以做方法申明,也可以被方法实现 4 接口里面定义的变量只能是公共的静态常量,抽象类中的变 阅读全文

posted @ 2018-11-08 11:21 anqli_java 阅读(155) 评论(0) 推荐(0)