摘要:
单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点! 懒汉, 线程安全 在方法上添加synchronized。在多线程下可以很好的工作,也延迟加载了,但是效率很低,99%情况下不需要同步。 饿汉, 线程安全 定义一个static变量,直接创建单例对象,线程安全,无延迟加载。 这种方 阅读全文
摘要:
单一职责原则——SRP 开闭原则——OCP 里式替换原则——LSP 依赖倒置原则——DIP 接口隔离原则——ISP 迪米特原则——LOD 单一职责原则 单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因。也就是说一个类应该只负责一件事情(单例模式其实是违背该原则的)。如果一个类负责了方法 阅读全文
摘要:
基础概念简述 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 锁 数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资 阅读全文
摘要:
Java中创建线程主要有三种方式 继承Thread类创建线程类 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 创建Thread子类的实例,即创建了线程对象。 调用线程对象的start()方法来启动该线程。 Threa 阅读全文
摘要:
线程池的好处 线程池的重用 线程的创建和销毁的开销是巨大的,而通过线程池的重用大大减少了这些不必要的开销,当然既然少了这么多消费内存的开销,其线程执行速度也是突飞猛进的提升。 控制线程池的并发数 并发:在某个时间段内,多个程序都处在执行和执行完毕之间;但在一个时间点上只有一个程序在运行。头脑风暴:老 阅读全文
摘要:
新手常犯的错误 可能很多新手(包括当年的我)第一时间想到的写法是下面这样的: public static void main(String[] args) { List<String> platformList = new ArrayList<>(); platformList.add("博客园") 阅读全文
摘要:
知识回顾 线程与进程 一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。 线程类Thread的几个重要方法 start()方法,调用该方法开始执行该线程; join方法,调用该 阅读全文
摘要:
为什么使用线程池 每个请求对应一个线程方法的不足是:为每个请求创建一个新线程的开销很大;为每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。容易引起资源不足,造成浪费。为解决单个任务处理时间很短而请求的数目巨大的问题,引出线程池: 通过 阅读全文
摘要:
volatile的作用 通常情况下我们可以通过Synchronized关键字来解决可见性、有序性及原子性问题,不过synchronized是一个比较重量级的操作(但是jdk1.6以后做了优化),对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用synchronized来解决问题 阅读全文
摘要:
线程的状态 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。 New:新建状态,当线程创建完成时为新建状态,即new Thread(…),还没有调用start方法时,线程处于新建状态。 R 阅读全文
摘要:
Synchronized的基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。 Synchronized的作用主要有三个: 确保线程互斥的访问同步代码 保证共享变量的修改能够及时可见 有效解决重排序问题 从语法上讲,Synchronized总共有三种用 阅读全文
摘要:
阅读全文
摘要:
对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定! 问题复现 线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,接着就是各种报警:例如接口超时报警等。此时急需快速线上排查问题。 问题排查 不管什么问题, 阅读全文
摘要:
存储引擎的比较 注:上面提到的B树索引并没有指出是B-Tree和B+Tree索引,但是B-树和B+树的定义是有区别的。 在 MySQL 中,主要有四种类型的索引,分别为:B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。 B-Tree 索引是 MySQL 数据库中 阅读全文
摘要:
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 INNER JOIN(内连接) 在表中存在至少一个匹配时,INNER JOIN 关键字返回行(并集)。 注意:INNER JOIN 与 JOIN 是相同的。 SELECT <sel 阅读全文
摘要:
MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,而InnoDB支持行锁和表锁。 如何加锁? MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给 阅读全文