学习
一新一意
这个作者很懒,什么都没留下…
展开
-
常用的设计模式
单例模式简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象。单例模式实现起来也很容易,直接看demo吧public class Singleton {private sta...原创 2019-10-17 11:02:34 · 93 阅读 · 0 评论 -
ArrayList 是线程不安全的,怎么保证它的线程安全性呢?或者有什么替代方案?
1、用Vector,这种目前已经不怎么用了2、SynchronizedListjava.util.Collections.SynchronizedList它能把所有 List 接口的实现类转换成线程安全的List,比 Vector 有更好的扩展性和兼容性,很可惜,它所有方法都是带同步对象锁的,和 Vector 一样,它不是性能最优的SynchronizedList的构造方法如下:final...原创 2019-09-26 10:05:35 · 1472 阅读 · 0 评论 -
我们为什么做分布式使用Redis?
一、为什么使用 Redis在项目中使用 Redis,主要考虑两个角度:性能和并发。如果只是为了分布式锁这些其他功能,还有其他中间件 Zookpeer 等代替,并非一定要使用 Redis。性能:如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的 SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。特别是在秒杀系统,在同一时间,几乎所有人都在点...原创 2019-03-21 14:46:12 · 141 阅读 · 0 评论 -
Java 读写锁是如何实现的
为什么需要读写锁?与传统锁不同的是读写锁的规则是可以共享读,但只能一个写,总结起来为:读读不互斥,读写互斥,写写互斥,而一般的独占锁是:读读互斥,读写互斥,写写互斥,而场景中往往读远远大于写,读写锁就是为了这种优化而创建出来的一种机制。注意是读远远大于写,一般情况下独占锁的效率低来源于高并发下对临界区的激烈竞争导致线程上下文切换。因此当并发不是很高的情况下,读写锁由于需要额外维护读锁的状态,可...翻译 2019-03-08 11:53:25 · 618 阅读 · 0 评论 -
Spring Boot 集成 Swagger
1、添加依赖Maven依赖示例:io.springfoxspringfox-swagger2io.springfoxspringfox-swagger-ui2、在 Spring Boot 配置文件中添加配置参数。swagger:title: API标题description: API描述version: 1.0terms-of-service-url: http://...原创 2019-03-19 15:13:30 · 84 阅读 · 0 评论 -
Mysql的索引原理分析
数据库中最常见的慢查询优化方式是什么?加索引。为什么加索引能优化慢查询?因为索引其实就是一种优化查询的数据结构,比如Mysql中的索引是用B+树实现的,而B+树就是一种数据结构,可以优化查询速度,可以利用索引快速查找数据,所以能优化查询。你知道哪些数据结构可以提高查询速度?哈希表、完全平衡二叉树、B树、B+树等等。SHOW INDEX FROM employees.titles;有...原创 2019-03-09 10:52:38 · 404 阅读 · 0 评论 -
注册中心的问题
同样是注册中心,你觉得 Zookeeper 和 Eureka 哪个更好?CAP 理论什么叫 CAP 理论呢?CAP 理论是由 Eric Brewer 教授提出,是分布式系统中的一个重要的概念。CAP 具体如下:C(Consistency):数据一致性。大家都知道,分布式系统中,数据会有副本。由于网络或者机器故障等因素,可能有些副本数据写入正确,有些却写入错误或者失败,这样就导致了数据的不一致...原创 2019-03-09 10:42:22 · 325 阅读 · 0 评论 -
transient 关键字
transient 关键字总结1)transient修饰的变量不能被序列化;2)transient只作用于实现 Serializable 接口;3)transient只能用来修饰普通成员变量字段;4)不管有没有 transient 修饰,静态变量都不能被序列化;什么是序列化我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java...原创 2019-03-06 13:13:52 · 253 阅读 · 0 评论 -
消息队列3个面试题
1.在何种场景下使用了消息中间件?2.为什么要在系统里引入消息中间件?3.如何实现幂等?链式调用是我们在写程序时候的一般流程,为了完成一个整体功能,会将其拆分成多个函数(或子模块),比如模块A调用模块B,模块B调用模块C,模块C调用模块D。但在大型分布式应用中,系统间的RPC交互繁杂,一个功能背后要调用上百个接口并非不可能,这种架构有如下几个劣势:1、 这些接口之间耦合比较严重,每新增一个...翻译 2019-03-05 18:01:11 · 4941 阅读 · 0 评论 -
IntelliJ IDEA 使用技巧
IDEA VS Eclipse 核心术语比较由下图可见:两者最大的转变就在于工作空间概念的转变,并且在IDEA当中,Project和Module是作为两个不同的概念,对项目结构是重要意义的,这也恰恰是许多IDEA初学者觉得困扰的地方。1.1 为什么要取消工作空间?答: 简单来说,IDEA不需要设置工作空间,因为每一个Project都具备一个工作空间!!对于每一个IDEA的项目工程(Pr...原创 2019-03-01 14:34:42 · 165 阅读 · 0 评论 -
线程池相关
你讲讲线程池的实现原理。听到这个问题,小部分同学会很坦白的说,我平时用过线程池,但是没有了解过内部是怎么实现的。偶尔也会有同学反怼,我会用不就行了么,为啥要知道咋实现!碰到这样的同学,我只能说,嗯,你说的对。我希望听到的答案是,把每个参数的作用都说一遍,最好可以在纸上更加直观的描述出来,各个参数在设置的时候需要注意什么问题。有时候,有些同学语言组织的不太好,描述的时候有点含糊不清,为了能够确...翻译 2019-03-01 14:05:59 · 156 阅读 · 0 评论