03 2020 档案

摘要:1. 面向对象概念 把要研究的事物抽象成对象处理。一个对象内部含有:数据值描述其状态、操作方法即对象的行为用于改变对象的状态。面向对象具有对象唯一性、分类型、继承性、多态性。自己的理解就是将一项活动抽象成一个个角色对象,通过内部的属性和方法彼此连接,构成整个活动。 2. 面向对象三特性 继承 封装: 阅读全文
posted @ 2020-03-31 22:59 Qmillet 阅读(247) 评论(0) 推荐(0)
摘要:一、概述 同步代码块/同步方法具有的功能Lock都具有,另外ReetranttLock具有其他功能。例如公平锁、响应中断、获取锁时限时等待、结合Condition实现等待机制。 ReetranttLock是可重入锁的独占锁。比起synchronized功能更加丰富,实现公平锁实现、支持中断响应以及实 阅读全文
posted @ 2020-03-31 15:06 Qmillet 阅读(229) 评论(0) 推荐(0)
摘要:生产者消费者模式通过一个阻塞队列来解决两者之间的强耦合问题。阻塞队列相当于一个缓冲区,平衡消费者和生产者的处理能力。 阻塞队列有数据——生产者不生产,阻塞队列没数据——消费者不消费 一、synchronized+wait+notifyAll 生产 package com.ProductCusrome 阅读全文
posted @ 2020-03-30 21:49 Qmillet 阅读(2884) 评论(0) 推荐(0)
摘要:本章主要介绍SQL中简单编写——参考W3school 一、查询Select 1. distinst--截然不同的,查询结果中中不存在相同的列 CompanyOrderNumber IBM 3532 W3School 2356 Apple 4698 W3School 6953 select disti 阅读全文
posted @ 2020-03-30 17:29 Qmillet 阅读(893) 评论(0) 推荐(0)
摘要:【场景】客户端大量连接,如果采用多线程方式的话,线程上下文切换导致性能不佳。因此采用io多路复用。 一、上下文切换 对于单核CPU来说(对于多核CPU,此处就理解为一个核),CPU在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫做线程上下文切换(对于进程也是类似)。 阅读全文
posted @ 2020-03-28 15:49 Qmillet 阅读(307) 评论(0) 推荐(0)
摘要:生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。 其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数 阅读全文
posted @ 2020-03-28 15:19 Qmillet 阅读(310) 评论(0) 推荐(0)
摘要:一、线程状态转换图 public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; } ★ 调用obj.wait()的线程需要先获取obj的monitor,wait()会释放obj的monitor并进入等 阅读全文
posted @ 2020-03-28 13:13 Qmillet 阅读(346) 评论(0) 推荐(0)
摘要:(转载) 一、什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。 相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更 阅读全文
posted @ 2020-03-26 21:40 Qmillet 阅读(170) 评论(0) 推荐(0)
摘要:1. 数据库自增id 单独使用一个数据库表(无意义,主要用于获取id)获取自增id,再将此id导入到需要的表中。 2. UUID 太长了,作为主键性能太差。 3. 系统当前时间 并发高容易重复。 4. SnowFlake(雪花)算法 snowflake 算法是 twitter 开源的分布式 id 生 阅读全文
posted @ 2020-03-26 20:16 Qmillet 阅读(298) 评论(0) 推荐(0)
摘要:一、系统拆分 将一个系统拆分为多个子系统,用 dubbo 来搞。然后每个系统连一个数据库,这样本来就一个库,现在多个数据库,不也可以扛高并发么。 二、缓存 缓存,必须得用缓存。大部分的高并发场景,都是读多写少,那你完全可以在数据库和缓存里都写一份,然后读的时候大量走缓存不就得了。毕竟人家 redis 阅读全文
posted @ 2020-03-26 18:59 Qmillet 阅读(599) 评论(1) 推荐(1)
摘要:一、如何实现MySQL读写分离 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。 二、MySQL 主从复制原理的是啥? 主库将变更写入 binlog 日志,然后从库连接到主库之后,从库有一个 IO 线程,将主库的 阅读全文
posted @ 2020-03-26 18:05 Qmillet 阅读(176) 评论(0) 推荐(0)
摘要:一、什么是分库分表 分表 比如你单表都几千万数据了,你确定你能扛住么?绝对不行,单表数据量太大,会极大影响你的 sql 执行的性能,到了后面你的 sql 可能就跑的很慢了。一般来说,就以我的经验来看,单表到几百万的时候,性能就会相对差一些了,你就得分表了。 分表是啥意思?就是把一个表的数据放到多个表 阅读全文
posted @ 2020-03-26 17:36 Qmillet 阅读(363) 评论(0) 推荐(0)
摘要:redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送 阅读全文
posted @ 2020-03-26 15:08 Qmillet 阅读(233) 评论(0) 推荐(0)
摘要:一、redis cluster 介绍 redis的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台redis服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了cluster模式,实现的redis的分布式存储,也就是说每台redis节点上存储不同的内容。 Redis-C 阅读全文
posted @ 2020-03-26 15:07 Qmillet 阅读(178) 评论(0) 推荐(0)
摘要:Redis 哨兵集群实现高可用 一、哨兵的介绍 sentinel,中文名是哨兵。哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis master 和 slave 进程是否正常工作。 消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报 阅读全文
posted @ 2020-03-25 23:56 Qmillet 阅读(445) 评论(0) 推荐(1)
摘要:Redis 主从架构 一、简单介绍 单机的 redis,能够承载的 QPS 大概就在上万到几万不等。对于缓存来说,一般都是用来支撑读高并发的。因此架构做成主从(master-slave)架构,一主多从,主负责写,并且将数据复制到其它的 slave 节点,从节点负责读。所有的读请求全部走从节点。这样也 阅读全文
posted @ 2020-03-25 23:53 Qmillet 阅读(2218) 评论(1) 推荐(1)
摘要:一、前言 持久化主要是做灾难恢复、数据恢复,也可以归类到高可用的一个环节中去,比如你 redis 整个挂了,然后 redis 就不可用了,你要做的事情就是让 redis 变得可用,尽快变得可用。 重启 redis,尽快让它堆外提供服务,如果没做数据备份,这时候 redis 启动了,也不可用啊,数据都 阅读全文
posted @ 2020-03-25 22:35 Qmillet 阅读(193) 评论(0) 推荐(0)
摘要:redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗? 这个也是线上非常常见的一个问题,就是多客户端同时并发写一个 key,可能本来应该先到的数据后到了,导致数据版本错了;或者是多客户端同时获取一个 key,修改值之后再写回去,只要顺序错了,数据就错了。而且 阅读全文
posted @ 2020-03-25 20:55 Qmillet 阅读(310) 评论(0) 推荐(0)
摘要:定期从设置过期时间的键中随机抽取删除—》惰性删除(获取某个键时判断是否过期)—》内存淘汰机制 一、redis 过期策略 redis 过期策略是:定期删除+惰性删除。 所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。 假 阅读全文
posted @ 2020-03-25 20:54 Qmillet 阅读(2120) 评论(0) 推荐(0)
摘要:一、redis 和 memcached 有啥区别? 1. redis 支持复杂的数据结构 redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。 2. redis 原生支持集群模式 在 redis 阅读全文
posted @ 2020-03-25 20:32 Qmillet 阅读(255) 评论(0) 推荐(0)
摘要:https://zhuanlan.zhihu.com/p/59167071 阅读全文
posted @ 2020-03-25 19:42 Qmillet 阅读(208) 评论(0) 推荐(0)
摘要:一、缓存击穿 在高并发下,对一个特定的值进行查询,但是这个时候缓存正好过期了,缓存没有命中,导致大量请求直接落到数据库上,如活动系统里面查询活动信息,但是在活动进行过程中活动缓存突然过期了。 解决方案:在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住 阅读全文
posted @ 2020-03-25 19:17 Qmillet 阅读(172) 评论(0) 推荐(0)
摘要:为什么使用缓存? 用缓存,主要有两个用途:高性能、高并发。 【高性能】 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 mysql,半天查出来一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办? 缓存啊,折腾 6 阅读全文
posted @ 2020-03-25 19:15 Qmillet 阅读(128) 评论(0) 推荐(0)
摘要:分布式事务的实现主要有以下 5 种方案: XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案 CAP定理是指WEB服务无法同时满足一下3个属性: 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效) 可用性(Availability) : 每个 阅读全文
posted @ 2020-03-25 15:38 Qmillet 阅读(197) 评论(0) 推荐(0)
摘要:其实这个问题没啥,如果你确实干过 es,那你肯定了解你们生产 es 集群的实际情况,部署了几台机器?有多少个索引?每个索引有多大数据量?每个索引给了多少个分片?你肯定知道! 但是如果你确实没干过,也别虚,我给你说一个基本的版本,你到时候就简单说一下就好了。 es 生产集群我们部署了 5 台机器,每台 阅读全文
posted @ 2020-03-25 13:39 Qmillet 阅读(1554) 评论(0) 推荐(0)
摘要:一、性能优化的杀手锏——filesystem cache 你往es里写的数据,实际上都写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到 filesystem cache 里面去。 es-search-process es 的搜索引擎严重依赖于底层的 filesystem cac 阅读全文
posted @ 2020-03-25 13:36 Qmillet 阅读(4984) 评论(0) 推荐(1)
摘要:一、ES写入数据 (选择协调节点—>根据文件进行路由转发给对应的节点—>节点的主分片处理请求—>数据同步到副本分片—>返回响应) 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。 coordinating node 对 document 阅读全文
posted @ 2020-03-25 12:39 Qmillet 阅读(4749) 评论(1) 推荐(0)
摘要:ElasticSearch 设计的理念就是分布式搜索引擎,底层其实还是基于 lucene 的。核心思想就是在多台机器上启动多个 es 进程实例,组成了一个 es 集群。 es 中存储数据的基本单位是索引,比如说你现在要在 es 中存储一些订单数据,你就应该在 es 中创建一个索引 order_idx 阅读全文
posted @ 2020-03-25 00:19 Qmillet 阅读(3215) 评论(0) 推荐(1)
摘要:一、什么是ElasticSearch ElasticSearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。ElasticSearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。核心思想就是在多台机器上启动多个 es 进程实例,组成了一个 es 集群 阅读全文
posted @ 2020-03-24 23:20 Qmillet 阅读(656) 评论(0) 推荐(0)
摘要:题目描述 有 20 个数组,每个数组有 500 个元素,并且有序排列。如何在这 20*500 个数中找出前 500 的数? 解答思路 对于 TopK 问题,最常用的方法是使用堆排序。对本题而言,假设数组降序排列,可以采用以下方法: 首先建立大顶堆,堆的大小为数组的个数,即为 20,把每个数组最大的值 阅读全文
posted @ 2020-03-24 21:46 Qmillet 阅读(505) 评论(0) 推荐(0)
摘要:题目描述 有 10 个文件,每个文件大小为 1G,每个文件的每一行存放的都是用户的 query,每个文件的 query 都可能重复。要求按照 query 的频度排序。 解答思路 如果 query 的重复度比较大,可以考虑一次性把所有 query 读入内存中处理;如果 query 的重复率不高,那么可 阅读全文
posted @ 2020-03-24 21:43 Qmillet 阅读(378) 评论(0) 推荐(0)
摘要:题目描述 从 5 亿个数中找出中位数。数据排序后,位置在最中间的数就是中位数。当样本数为奇数时,中位数为 第 (N+1)/2 个数;当样本数为偶数时,中位数为 第 N/2 个数与第 1+N/2 个数的均值。 解答思路 如果这道题没有内存大小限制,则可以把所有数读到内存中排序后找出中位数。但是最好的排 阅读全文
posted @ 2020-03-24 21:42 Qmillet 阅读(490) 评论(0) 推荐(0)
摘要:题目描述 给定 40 亿个不重复的没排过序的 unsigned int 型整数,然后再给定一个数,如何快速判断这个数是否在这 40 亿个整数当中? 解答思路 方法一:分治法 依然可以用分治法解决,方法与前面类似,就不再次赘述了。 方法二:位图法 40 亿个不重复整数,我们用 40 亿个 bit 来表 阅读全文
posted @ 2020-03-24 21:25 Qmillet 阅读(790) 评论(1) 推荐(0)
摘要:题目描述 已知某个文件内包含一些电话号码,每个号码为 8 位数字,统计不同号码的个数。 解答思路 这道题本质还是求解数据重复的问题,对于这类问题,一般首先考虑位图法。 对于本题,8 位电话号码可以表示的号码个数为 108 个,即 1 亿个。我们每个号码用一个 bit 来表示,则总共需要 1 亿个 b 阅读全文
posted @ 2020-03-24 21:05 Qmillet 阅读(1552) 评论(0) 推荐(0)
摘要:题目描述 搜索引擎会通过日志文件把用户每次检索使用的所有查询串都记录下来,每个查询串的长度不超过 255 字节。 假设目前有 1000w 个记录(这些查询串的重复度比较高,虽然总数是 1000w,但如果除去重复后,则不超过 300w 个)。请统计最热门的 10 个查询串,要求使用的内存不能超过 1G 阅读全文
posted @ 2020-03-24 20:50 Qmillet 阅读(395) 评论(0) 推荐(0)
摘要:题目描述 在 2.5 亿个整数中找出不重复的整数。注意:内存不足以容纳这 2.5 亿个整数。 解答思路 方法一:分治法 与前面的题目方法类似,先将 2.5 亿个数划分到多个小文件,用 HashSet/HashMap 找出每个小文件中不重复的整数,再合并每个子结果,即为最终结果。 方法二:位图法 位图 阅读全文
posted @ 2020-03-24 20:43 Qmillet 阅读(730) 评论(0) 推荐(1)
摘要:题目描述 有一个 1GB 大小的文件,文件里每一行是一个词,每个词的大小不超过 16B,内存大小限制是 1MB,要求返回频数最高的 100 个词(Top 100)。 解答思路 由于内存限制,我们依然无法直接将大文件的所有词一次读到内存中。因此,同样可以采用分治策略,把一个大文件分解成多个小文件,保证 阅读全文
posted @ 2020-03-24 20:22 Qmillet 阅读(1463) 评论(1) 推荐(1)
摘要:题目描述 给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。 解答思路 每个 URL 占 64B,那么 50 亿个 URL占用的空间大小约为 320GB。 5,000,000,000 * 64B ≈ 5GB * 阅读全文
posted @ 2020-03-24 17:31 Qmillet 阅读(1338) 评论(0) 推荐(1)
摘要:消息队列常见问题及解决方案 参考链接 前一章节讨论了MQ的优缺点,本章主要针对缺点进行分析解决。 一、如何保证MQ的高可用性 —— (消息丢失) RabbitMQ镜像模式 镜像集群模式是所谓的RabbitMQ的高可用模式,跟普通集群模式不一样的是,你创建的queue,无论元数据还是queue里的消息 阅读全文
posted @ 2020-03-24 16:11 Qmillet 阅读(5243) 评论(0) 推荐(0)
摘要:一、消息队列使用场景 1. 异步处理 传统业务并行处理: 消息队列进行处理: 2. 应用解耦 传统业务调用,耦合性太高。 采用消息队列进行处理, 降低耦合性。 3. 流量削峰 每天0点到11点,A系统风平浪静,每秒并发请求数量就100个。结果每次一到11点~1点,每秒并发请求数量突然会暴增到1万条。 阅读全文
posted @ 2020-03-24 01:17 Qmillet 阅读(7022) 评论(3) 推荐(0)
摘要:一、啥是反射? 通过反射机制加载一个class字节码文件,获得并调用任意一个类的所有属性和方法。 二、反射能干啥? 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法 三、干一干试试看! 1. Animal样本 阅读全文
posted @ 2020-03-23 23:41 Qmillet 阅读(668) 评论(0) 推荐(0)
摘要:一、Tomcat线程模型 1. BIO 同步阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即Java.io包及其子包)。Tomcat7以下版本默认情况下是以bio模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低。启动to 阅读全文
posted @ 2020-03-23 17:07 Qmillet 阅读(3831) 评论(0) 推荐(1)
摘要:一、Tomcat接口 server.xml配置文件讲解 <?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <!--停止端口号 --> <Listener className="org.apa 阅读全文
posted @ 2020-03-23 15:14 Qmillet 阅读(792) 评论(0) 推荐(0)
摘要:Spring AOP 官方文档 一、引述 与OOP(面向对象)相比,传统的的OOP开发的代码逻辑是自上而下的,但是在这些自上而下的过程中会产生横切性的问题(例如日志、权限、事务),而这些横切性的问题由于我们的主业务逻辑关系不大,会散落在代码的各个地方,造成难以维护的问题。 AOP的编程思想就是把这些 阅读全文
posted @ 2020-03-23 00:40 Qmillet 阅读(210) 评论(0) 推荐(0)
摘要:一、什么是IOC DI全称Dependency Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件。j具体有构造器注入、setter注入、静态工厂注入、实例工程注入。 IOC全称 Inverse of Control ,控制反转。就是将系统中创 阅读全文
posted @ 2020-03-22 18:35 Qmillet 阅读(190) 评论(0) 推荐(0)
摘要:一、Spring概述 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring的大小和开销都是轻量级,完整的Spring框架可以在一个只有1M多的JAR文件里发布。 七大模块 二、Spring优点 1.方便解耦,简化开发: Spring就是一个大工厂,专门负 阅读全文
posted @ 2020-03-22 13:37 Qmillet 阅读(372) 评论(0) 推荐(0)
摘要:1. SpringMVC执行流程 ★★★★★ Spring MVC主要由DispatcherServlet、处理器映射【找控制器】、适配器【调用控制器的方法】、控制器【业务】、视图解析器、视图组成。 (1) 客户端请求提交到 DispatcherServlet控制器。 (2) 由 Dispatche 阅读全文
posted @ 2020-03-22 00:43 Qmillet 阅读(182) 评论(0) 推荐(0)
摘要:一、介绍 MyBatis是一个半自动的持久层框架,对JDBC的操作数据库过程进行了封装,使开发者只需要关注SQL本身,而不需要自己实现JDBC(注册驱动、创建Connection、创建Statement、设置参数、结果收集等处理)。Mybatis通过注解或者xml文件对JDBC各种操作进行配置,并将 阅读全文
posted @ 2020-03-21 22:31 Qmillet 阅读(777) 评论(0) 推荐(0)
摘要:1.为什么要使用Elasticsearch? ​ 因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格还有id这些 阅读全文
posted @ 2020-03-19 13:07 Qmillet 阅读(581) 评论(0) 推荐(0)
摘要:1. 最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗? 答:Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中Mapped 阅读全文
posted @ 2020-03-19 13:01 Qmillet 阅读(48299) 评论(2) 推荐(5)
摘要:Spring时使用AOP来代理事务控制,针对接口和类,所以在同一个service类的两个方法的调用,传播机制不生效。 一、Spring事务隔离级别 1. ISOLATION_DEFAULT: 默认的隔离级别,使用数据库默认的事务隔离级别。 2. ISOLATION_READ_UNCOMMITTED: 阅读全文
posted @ 2020-03-19 10:49 Qmillet 阅读(4295) 评论(0) 推荐(1)
摘要:Java包装类缓存 为什么需要包装类? Java是面向对象开发,通过基本数据类型对应的包装类可以获得更多的api操作。并且现在很多数据端采用对象来对接。 本文主要以Integer为主进行解释 1. 示例 public static void main(String[] args) { Integer 阅读全文
posted @ 2020-03-18 14:49 Qmillet 阅读(232) 评论(0) 推荐(0)
摘要:阅读目录(Content) 一、clone()方法 1.1、clone与copy的区别 1.2、Shallow Clone与Deep Clone 1.3、clone方法的保护机制 1.4、clone方法的使用 二、toString()方法 三、getClass()方法 四、finalize()方法 阅读全文
posted @ 2020-03-17 23:38 Qmillet 阅读(695) 评论(0) 推荐(0)
摘要:(转载 -- LanceToBigData ) 阅读目录(Content) 一、String简介 1.1、String(字符串常量)概述 1.2、分析String源码 二、创建字符串对象两种方式的区别 2.1、直接赋值方式创建对象 2.2、通过构造方法创建字符串对象 2.3、两种实例化方式的比较 三 阅读全文
posted @ 2020-03-17 22:32 Qmillet 阅读(1593) 评论(0) 推荐(0)
摘要:1 public class MyMap<K, V> { 2 private Node<K, V>[] nodes;//定义一个Node数组保存键值对 3 private int size;//逻辑长度 4 //内部静态类,用于保存key,value值 5 private static class 阅读全文
posted @ 2020-03-15 23:30 Qmillet 阅读(391) 评论(0) 推荐(0)
摘要:java锁机制 — 偏向锁、轻量级锁、重量级锁 synchronized作用在静态方法时,锁住整个类; synchronized作用在方法上时,锁住整个对象; synchronized作用于某一个对象实例时,所著的便是对应的代码块。 一、Java对象头 对象头包含两部分:Mark Word 和 Cl 阅读全文
posted @ 2020-03-15 22:55 Qmillet 阅读(334) 评论(0) 推荐(0)
摘要:1. List:元素是有序的,可重复,可以根据索引操作数据 1.1 ArrayList 数据结构:数组 线程不安全 1.2 LinkedList 数据结构:双向链表 线程不安全 1.3 Vector 数据结构:数组 线程安全:Synchronized 2. Set:元素无序,不可重复,取出元素只能使 阅读全文
posted @ 2020-03-15 20:40 Qmillet 阅读(454) 评论(0) 推荐(0)
摘要:https://www.cnblogs.com/zerotomax/p/8687425.html#go0 一、数据结构 同HashMap,数组+链表+红黑树,关键属性也和HashMap相同 ConCurrentHashMap支持高并发的访问和更新,它是线程安全的 检索操作不用加锁,get方法是非阻塞 阅读全文
posted @ 2020-03-15 20:00 Qmillet 阅读(540) 评论(0) 推荐(0)
摘要:一、HashMap数据结构 JDK 1.7 采用数组 + 链表实现。 JDK 1.8 采用数组 + 链表 + 红黑树实现。链表采用内部类Node节点实现。红黑树采用内部类TreeNode节点实现。 二、重要参数 // 1. 容量(capacity): 必须是2的幂 & <最大容量(2的30次方),默 阅读全文
posted @ 2020-03-15 17:45 Qmillet 阅读(157) 评论(0) 推荐(0)
摘要:一、数组VS集合 1.长度 数组长度固定;集合长度可变; 2.内容 数组存储的是同一类型元素;集合可以存储不同类型的元素; 3.元素的数据类型 数组可以存储基本数据类型,也可以存储引用类型;集合只能存储引用类型(基本数据类型会自动装箱成对象) 二、Collection体系 Collection基础功 阅读全文
posted @ 2020-03-15 16:12 Qmillet 阅读(215) 评论(0) 推荐(0)
摘要:参考链接 一、简介 Redis的五大数据类型也称五大数据对象;前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject;这个对象系统包含了五大数据对象,字符串对象(string)、列表对象(list)、哈希对象(hash)、 阅读全文
posted @ 2020-03-14 21:28 Qmillet 阅读(12875) 评论(1) 推荐(2)
摘要:转载来源 1、概述 Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-value数据库。 在《Redis设计与实现》这样描述: Redis 数据库里面的每个键值对(key-value) 都是由对象(object 阅读全文
posted @ 2020-03-14 18:55 Qmillet 阅读(780) 评论(0) 推荐(1)
摘要:https://www.cnblogs.com/goodAndyxublog/p/13327412.html 一个用户的 Session 信息如果存储在一个服务器上,那么当负载均衡器把用户的下一个请求转发到另一个服务器,由于服务器没有用户的 Session 信息,那么该用户就需要重新进行登录等操作。 阅读全文
posted @ 2020-03-14 16:38 Qmillet 阅读(270) 评论(0) 推荐(0)
摘要:参考链接1 --分布式系列文章 参考连接2 一、何为分布式一致性 C(一致性)A(高可用)P(分区容错性)理论:在满足CP的基础上尽可能提高可用性。 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效) 可用性(Availability) : 每个操作都必须以可预期的响应 阅读全文
posted @ 2020-03-14 16:02 Qmillet 阅读(2363) 评论(0) 推荐(0)
摘要:参考链接1 参考链接2 参考链接3_推荐 一、概述 ZooKeeper 是一种分布式协调服务,通过简单的架构和API解决在分布式环境中协调和管理服务的问题。它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。可用于统一命名服务、统一配置管理、统一集群管理、服务器动态上下 阅读全文
posted @ 2020-03-13 22:19 Qmillet 阅读(178) 评论(0) 推荐(0)
摘要:相关链接 超卖事故 一、什么是分布式锁 在多线程模型中,可以使用同步机制实现安全访问数据。但是多个服务器访问时,会导致数据最终不一致问题。常见分布式锁可以基于数据库/Redis/Zookeeper实现。 分布式锁应该具备以下条件: 1.一个方法在同一时间只能被一个机器的一个线程执行(互斥)。 2.高 阅读全文
posted @ 2020-03-13 16:40 Qmillet 阅读(247) 评论(0) 推荐(0)
摘要:参考博客 一、什么时候使用线程池 单个任务处理时间比较短,且需要处理的任务数量很大。 二、线程池优势 1.重用存在的线程,减少线程创建、消亡的开销,提高性能。 2.提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行。 3.提高线程的可管理型,可以统一分配、调优和监控。 三、线程池运行 阅读全文
posted @ 2020-03-11 21:54 Qmillet 阅读(269) 评论(0) 推荐(0)
摘要:★Spring生命周期 ★Spring AOP Spring IOC ★Spring的事务实现方式,声明式事务是怎么实现的,spring事务的传播方式 ★ES和MongoDB ★Redis底层数据结构实现1 ★Redis底层数据结构实现2 ★Redis内存淘汰策略 ★ Http报文结构 HTTP报文 阅读全文
posted @ 2020-03-08 19:41 Qmillet 阅读(243) 评论(0) 推荐(0)
摘要:1.HashMap详解 3.synchronized & ReentrantLock 在执行Thread.start()方法后,线程是不是马上运行 进程状态 4.synchronized码源分析 5.ConcurreHashMap 6.Excutor Excutors ExcutorService 阅读全文
posted @ 2020-03-08 19:37 Qmillet 阅读(197) 评论(0) 推荐(0)