摘要: 线程之间通信的方式: ① 同步 ② while轮询的方式 ③ wait/notify机制 ④ 管道通信 同步 多个线程通过synchronized关键字持有同一个对象实现线程间的通信。本质上就是“共享内存”式的通信。多个线程需要访问同一个共享变量,谁拿到了锁(获得了访问权限),谁就可以执行。 whi 阅读全文
posted @ 2021-11-30 22:53 残城碎梦 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 为什么要拆分数据库? 取决于数据库的负载和数据量。 单体项目在构建之初,数据库的负载和数据量都不大,所以不需要对数据库做拆分,小型财务系统、文书系统、ERP系统、OA系统,用一个MySQL数据库实例基本就够用了。 就像《淘宝技术这十年》里面说到的,电商业务的数据量增长飞快,所以最开始的PHP+MyS 阅读全文
posted @ 2021-11-30 22:11 残城碎梦 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 联合索引失效的条件 联合索引又叫复合索引或组合索引。两个或更多个列上的索引被称作复合索引。 对于复合索引:MySQL从左到右的使用索引中的字段,一个查询可以只使用索引中的一部分,但只能是最左侧部分。例如索引是key index (a,b,c)。可以支持a | a,b | a,b,c 3种组合进行查找 阅读全文
posted @ 2021-11-30 21:46 残城碎梦 阅读(180) 评论(0) 推荐(0) 编辑
摘要: Redis字符串的实现 Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能,可以看出Redis为了高性能也是煞费苦心。Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS。 SDS 代码结构 阅读全文
posted @ 2021-11-30 21:20 残城碎梦 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表。 本文是基于JDK1.7的源码进行讲解,JDK8会有所不同,大致的变化: 1.7中采用数组+链表,1.8采用的是数组+链表/红黑树,即在1.7中链表长度 阅读全文
posted @ 2021-11-30 16:15 残城碎梦 阅读(46) 评论(0) 推荐(0) 编辑
摘要: HashMap和HashTable的区别? HashMap 不是线程安全的 HashMap 是 map 接口的实现类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap 允许 null key 和 null value,而 HashTable 不允许。 H 阅读全文
posted @ 2021-11-30 16:13 残城碎梦 阅读(67) 评论(0) 推荐(0) 编辑
摘要: Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式 阅读全文
posted @ 2021-11-30 12:42 残城碎梦 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 判断对象是否存活的算法包括: 引用计数算法 可达性分析算法 引用计数算法(Reference Counting) 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器加1;当引用失效时,计数器值减1;任何时刻计数器为0的对象就是不能再被引用的。 例如Object-C,Python语言使用引用计 阅读全文
posted @ 2021-11-30 08:57 残城碎梦 阅读(166) 评论(0) 推荐(0) 编辑
摘要: MySQL查询字段区不区分大小写? 答案:不区分。 如何解决需要区分英文大小写的场景 解决方案一 MySQL默认的字符检索策略:utf8_general_ci,表示不区分大小写。可以使用utf8_general_cs,表示区分大小写,也可以使用utf8_bin,表示二进制比较,同样也区分大小写 。 阅读全文
posted @ 2021-11-30 08:42 残城碎梦 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 单例模式介绍 单例模式(Singleton),是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取, 阅读全文
posted @ 2021-11-30 08:20 残城碎梦 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别? 其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个 阅读全文
posted @ 2021-11-29 22:58 残城碎梦 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 为什么需要消息队列 当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。“ 消息 ”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中,“ 消息队列 ”是在消息的传输过程中 阅读全文
posted @ 2021-11-29 22:12 残城碎梦 阅读(351) 评论(0) 推荐(0) 编辑
摘要: Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现。 如果add进入一个Collection的对象想要Collec 阅读全文
posted @ 2021-11-29 22:01 残城碎梦 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢? jdk1.7中的HashMap 扩容造成死循环 根源在transfer函数。 在对table进行扩容到newTable后,需要将原来数据转移到newTable中,在转移元素的过程中,使用的是头插 阅读全文
posted @ 2021-11-28 12:47 残城碎梦 阅读(143) 评论(0) 推荐(0) 编辑
摘要: Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文 阅读全文
posted @ 2021-11-28 12:25 残城碎梦 阅读(59) 评论(0) 推荐(0) 编辑
摘要: ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口。先对List接口做一个简单的了解: 列表(list)是元素的有序集合,也称为序列。它提供了基于元素位置的操作,有助于快速访问、添加 阅读全文
posted @ 2021-11-28 11:26 残城碎梦 阅读(52) 评论(0) 推荐(0) 编辑
摘要: JDK1.7HashMap采用的是数据结构是:数组 + 链表 JDK1.8则采用的是:数组 + 链表 + 红黑树 在Java 8 之前,HashMap和其他基于map的类都是通过链地址法解决冲突,它们使用单向链表来存储相同索引值的元素。在最坏的情况下,这种方式会将HashMap的get方法的性能从O 阅读全文
posted @ 2021-11-28 10:36 残城碎梦 阅读(715) 评论(0) 推荐(0) 编辑
摘要: 创建线程有几种不同的方式?你喜欢哪一种?为什么? 有四种方式可以用来创建线程: 继承Thread类 实现Runnable接口(实现Callable接口,主要解决返回值问题) 创建线程池(Executor框架或自定义线程池) 实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在 阅读全文
posted @ 2021-11-28 10:00 残城碎梦 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 两者的定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和 阅读全文
posted @ 2021-11-28 09:54 残城碎梦 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 在日常开发中,我们使用 Redis 存储 key 时通常会设置一个过期时间,但是 Redis 是怎么删除过期的 key,而且 Redis 是单线程的,删除 key 会不会造成阻塞。要搞清楚这些,就要了解 Redis 的过期策略和内存淘汰机制。 Redis采用的是定期删除 + 懒惰删除策略。 定期删除 阅读全文
posted @ 2021-11-28 09:07 残城碎梦 阅读(109) 评论(0) 推荐(0) 编辑