摘要: cpu多级缓存是计算机底层的东西,面试比较少问道。 java内存模型更加重要。相当于java这门语言相对于计算机底层定义了一个上层的模型,代码执行的操作是基于这个模型。 面试时比如问你对java内存模型的理解。 线程安全性这一章考点特别多,应该足够重视。 TreadLocal常问。并发容器更加重要些 阅读全文
posted @ 2018-07-07 23:54 开拖拉机的蜡笔小新 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 简谈从零开始搭建一套业务相关监控报警系统 高可用原则: 阅读全文
posted @ 2018-07-07 23:27 开拖拉机的蜡笔小新 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 切库的基础和实际运用—读写分离: 如何方便进行读写分离,目前有两种方式: 1.动态数据源切换 它是指程序运行时,把数据源动态的织入到程序中,让指定的程序连接主库还是从库 自定义注解完成数据库切库 2.直接定义查数据源和写数据源 直接在项目里定义两个数据库连接,一个是主库连接一个是从库连接,更新数据的 阅读全文
posted @ 2018-07-07 23:16 开拖拉机的蜡笔小新 阅读(1176) 评论(0) 推荐(0) 编辑
摘要: 服务降级: 服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此环节服务器的压力,以保证核心任务的进行。 同时保证部分甚至大部分任务客户能得到正确的相应。也就是当前的请求处理不了了或者出错了,给一个默认的返回。 服务熔断:在股票市场,熔断这个词大家都不陌生,是指当股指波幅达到 阅读全文
posted @ 2018-07-07 22:46 开拖拉机的蜡笔小新 阅读(18882) 评论(0) 推荐(0) 编辑
摘要: 限流就是通过对并发访问/请求进行限速或一个时间窗口内的请求进行限速,从而达到保护系统的目的。一般系统可以通过压测来预估能处理的峰值,一旦达到设定的峰值阀值,则可以拒绝服务(定向错误页或告知资源没有了)、排队或等待(例如:秒杀、评论、下单)、降级(返回默认数据) 限流不能乱用,否则正常流量会出现一些奇 阅读全文
posted @ 2018-07-07 22:23 开拖拉机的蜡笔小新 阅读(1573) 评论(0) 推荐(0) 编辑
摘要: 前面我们已经提到单个服务器再优化,它的处理能力都是有上限的,因此我们选择多扩容以及使用缓存和消息队列等对程序进行优化。 下面介绍另一种方法,随着项目需求完成越来越多,应用自然也会越来越大,架构师将一个应用整体拆分成多个应用。 拆分的原则: 1.业务优先,确定业务边界 2.循序渐进,边拆分边测试 3. 阅读全文
posted @ 2018-07-07 21:37 开拖拉机的蜡笔小新 阅读(1207) 评论(0) 推荐(0) 编辑
摘要: 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。 消息被处理的过程相当于流程A被处理。我们这里以一个实际的模型来讨论下,比如用户下单成功时给用户发短信,如果没有这个消息队列,我们会选择同步调用发短信的接 阅读全文
posted @ 2018-07-07 20:31 开拖拉机的蜡笔小新 阅读(8101) 评论(0) 推荐(0) 编辑
摘要: 应用需要支撑大量并发量,但数据库的性能有限,所以使用缓存来减少数据库压力与提高访问性能。 、 缓存的使用可以出现在1到4的各个环节中,每个环节的方案他们都各有特点。 特征 命中率 = 命中数 / (命中数 + 没有命中数) 最大空间:缓存最大空间一旦缓存中元素数量超过这个值(或者缓存数据所占空间超过 阅读全文
posted @ 2018-07-07 16:43 开拖拉机的蜡笔小新 阅读(2312) 评论(0) 推荐(3) 编辑
摘要: 什么是扩容, 什么时候要扩容? 了解Java 内存结构的伙伴应该都知道 , 每个线程都有自己的工作内存, 占用内存大小取决于工作内存里变量的多少与大小 , 单个线程占用内存通常不会很大, 但是随着并发的线程不断的增加 , 从成百上千, 甚至几十万 , 占用的内存就会越来越多.这时候可能就要考虑给系统 阅读全文
posted @ 2018-07-07 15:06 开拖拉机的蜡笔小新 阅读(1083) 评论(0) 推荐(0) 编辑
摘要: 1.你了解的各种锁? 偏向锁、轻量级锁、重量级锁 简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区; 轻量级锁:多个线程交替进入临界区; 重量级锁:多个线程同时进入临界区。 偏向锁 在没有实际竞争的情况下,还能够针对部分场景继续优化。如果不仅仅没有实际竞争,自 阅读全文
posted @ 2018-07-07 14:34 开拖拉机的蜡笔小新 阅读(403) 评论(0) 推荐(0) 编辑
摘要: (1)HashMap的线程不安全原因一:死循环 原因在于HashMap在多线程情况下,执行resize()进行扩容时容易造成死循环。 扩容思路为它要创建一个大小为原来两倍的数组,保证新的容量仍为2的N次方,从而保证上述寻址方式仍然适用。扩容后将原来的数组从新插入到新的数组中。这个过程称为reHash 阅读全文
posted @ 2018-07-07 12:32 开拖拉机的蜡笔小新 阅读(2797) 评论(0) 推荐(1) 编辑
摘要: Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期。例如,一个scope为sing 阅读全文
posted @ 2018-07-07 11:20 开拖拉机的蜡笔小新 阅读(732) 评论(0) 推荐(1) 编辑
摘要: 1. 使用本地变量 应该总是使用本地变量,而不是创建一个类或实例变量,通常情况下,开发人员使用对象实例作为变量可以节省内存并可以重用,因为他们认为每次在方法中创建本地变量会消耗很多内存。 2.使用不可变类 不可变类比如String Integer等一旦创建,不再改变,不可变类可以降低代码中需要的同步 阅读全文
posted @ 2018-07-07 10:23 开拖拉机的蜡笔小新 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 什么是死锁? 通俗的说,死锁就是两个或者多个线程,相互占用对方需要的资源,而都不进行释放,导致彼此之间都相互等待对方释放资源,产生了无限制等待的现象。死锁一旦发生,如果没有外力介入,这种等待将永远存在,从而对程序产生严重影响。 死锁产生的必要条件 互斥条件:进程对锁分配的资源进行排他性使用 请求和保 阅读全文
posted @ 2018-07-07 10:07 开拖拉机的蜡笔小新 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 继承Thread的弊端 1.每次new Thread的时候都需要新建一个线程,性能差 2.线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM 3.Thread类缺少更多功能,比如更多的执行、定期执行、线程中断。 线程池的好处 1.重用存在的线程,减少对象创建、 阅读全文
posted @ 2018-07-07 09:37 开拖拉机的蜡笔小新 阅读(368) 评论(0) 推荐(0) 编辑