知识点
文章平均质量分 86
DY_浅陌初心
从今天起,过好每天一天
展开
-
Java---HashMap工作原理和实现
1.概述http://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/1.1官方介绍Hash table basedimplementation of the Map interface. This implementation provides all of the optional map operations, and permits.原创 2021-06-21 15:31:22 · 176 阅读 · 0 评论 -
Java---String
1.String介绍String 位于java.lang包下,作为Java的核心类提供了很多字符串处理方法,例如,比较,替换,截取等等。以下是部分源码:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private fin...原创 2021-06-17 11:12:07 · 195 阅读 · 0 评论 -
Java---并发容器之ConcurrentLinkedQueue
一.概述ConcurrentLinkedQueue是一个基于连接节点的无界线程安全队列(java并没有提供构造方法来指定队列的大小,因此它是无界的)。该队列的元素遵循先进先出的原则。头是最先加入的,尾是最近加入的,该队列不允许null元素。为了提高并发量,它通过使用更细的锁机制,使得在多线程环境中只对部分数据进行锁定,从而提高运行效率,通常ConcurrentLikedQueue性能好于BlockingQueue。二.结构ConcurrentLinkedQueue内部持有2个节点:head头结点原创 2021-02-23 14:58:44 · 447 阅读 · 2 评论 -
Java---并发容器之BlockingQueue(阻塞队列)
一.概述阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。二.方法 抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offe.原创 2021-02-23 11:26:23 · 172 阅读 · 1 评论 -
Java---并发容器之CopyOnWriteArrayList
一.概述ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制(),会抛出ConcurrentModificationException异常,也就是说ArrayList并不是一个线程安全的容器,当然可以用Vector,或者使用Collections的静态方法将ArrayList包装成一个线程安全的类,但是这些方式都是采用Java关键字synchronzied对方法进行修饰,利用独占式锁来保证线程安全的。但是,由于独占式锁在同一时刻原创 2021-02-22 15:06:00 · 159 阅读 · 0 评论 -
Java---并发容器之ConcurrentHashMap
一.概述HashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都锁住了,全表锁),当多线程并发的情况下,都要竞争同一把锁,导致效率极其低下。而在JDK1.5后为了改进Hashtable的痛点,ConcurrentHashMap应运而生。ConcurrentHashMap不支持null键和null值,当存在null时,会报空指针异常!!!(因原创 2021-02-22 14:10:19 · 194 阅读 · 0 评论 -
Java---Semaphore
一.概念Semaphore(信号量)可以用来控制同时访问特定资源的线程数量,常用于限流场景。Semaphore支持公平锁和非公平锁。Semaphore接收一个int整型值,表示许可证数量,如果许可证剩余数量大于零时,线程则允许访问该共享资源;如果许可证剩余数量为零时,则拒绝线程访问该共享资源。 Semaphore所维护的许可证数量就是允许访问共享资源的最大线程数量。 所以,线程想要访问共享资源必须从Semaphore中获取到许可证。二.原理Semaphore内部主要通过AQS(Abstr..原创 2021-02-20 15:57:09 · 97 阅读 · 0 评论 -
Java---ReentrantReadWriteLock
一.概述ReentrantReadWriteLock是在AQS的基础上实现的一个可重入锁。该锁具备重入锁的可重入性、可中断获取锁等特征,但是与ReentrantLock不一样的是,它的内部维护了一把读锁和一把写锁,读锁是共享锁,写锁是排他锁。这样就保证了写数据时的线程安全性,又保证了读数据时的多线程并发,比较适合读取数据较多而写数据较少的并发场景。写锁是独占的,写时不能有其他线程写也不能读;所有的独锁都释放完之前也不能加写锁。ReentrantReadWriteLock实现了ReadWriteLoc原创 2021-02-20 14:43:06 · 163 阅读 · 0 评论 -
Java---ReentrantLock
一.AQS1.概述AQS(AbstractQueuedSynchronizer),是抽象队列同步器,其实就是一个用来构建锁和同步器的框架。内部实现的关键是:先进先出的队列、state状态。2.核心思想AQS核心思想是:如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,AQS使用一个voliate int成员变量来表示同步状态,通过内置的FIFO队列来完成获取资源线程的排队工作。AQS使用CAS对该同步状态进行原子操原创 2021-02-19 18:01:29 · 122 阅读 · 0 评论 -
Java---Volatile
一.概述volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量,无法修饰方法及代码块等。二.Java内存模型JMM线程之间的共享变量存储在主内存(共享内存)中,主内存中的变量,不能直接进行读取和修改的,因此每个线程都有一个私有的本地内存,用于存储主内存变量的副本,当线程对主内存进行读取和修改时,首先将主内存中的变量拷贝到本地内存中,在本地内存中读取和修改,原创 2021-02-18 16:59:18 · 130 阅读 · 3 评论 -
Java---synchronized
一.概述1、synchronized作用原子性:synchronized保证语句块内操作是原子的 可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现) 有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)2、synchronized的使用修饰实例方法,对当前实例对象加锁 修饰静态方法,多当前类的Class对象加锁 修饰代码块,对synchronized括号内的对象加锁二.原理原创 2021-02-18 11:21:59 · 332 阅读 · 4 评论 -
Java----joda Time日期时间工具类
1.介绍在JDK1.8之前,处理日期和时间的方式比较单一,Java中提供了Calendar来处理日期,但是过程较为繁琐,但是在JDK1.8之后,Java更新了time包提供了LocalDate,LocalTime,LocalDateTime等日期时间类来处理较为复杂的关于日期和时间的业务逻辑的方法。现有的类(例如java.util.Date和SimpleDateFormatter)是非线程安全的,从而导致用户潜在的并发问题,这不是一般开发人员在编写日期处理代码时会期望处理的问题。joda Tim原创 2021-01-05 15:56:41 · 546 阅读 · 0 评论 -
Java---反射机制
1.什么是反射?Java的反射就是在运行状态中:对于任意一个类,可以获取类名,包名,类的所有属性和方法; 对于任何一个对象,可以获取所有属性(并且能改变属性)和方法; 判断任意一个对象所属的类 实例化任意一个类的对象...原创 2020-07-16 17:37:53 · 108 阅读 · 0 评论 -
问题整理---TCP和UDP区别 TCP为什么可靠
原创 2020-06-18 10:07:08 · 546 阅读 · 0 评论 -
问题整理----Mysql分区
1.分区算法1.1.求余算法:(1)key:按照内置的key算法运算结果语法create(.....)partition by key(字段/表达式) partitions 分组数;使用CREATE TABLE t_key(id int not null auto_increment,name VARCHAR(10) not null DEFAULT '',PRIMAR...原创 2020-06-18 10:06:44 · 135 阅读 · 0 评论 -
Zookeeper
1.zookeeper是什么框架是开源的分布式框架,主要是提供分布式锁,是一个为分布式系统提供一致性、分布式同步的框架。2.提供了什么通知机制(分布式更新,早不同节点进行通知更新) 文件系统3.节点类型持久化的节点(PERSISTENT) 临时节点(在临时节点下不能再创建节点) 序号节点(同级别下不容许同名节点,如果创建重名节点的时候会有序号)4.应用场景高可用的分布...原创 2020-06-18 10:06:13 · 91 阅读 · 0 评论 -
秒杀系统---技术总结
1、业务逻辑2、难点短时间高并发,负载压力大; 读多写少的操作; 竞争资源有限,不能多也不能少不能重复3、实现数据库表,主要是更新数量更新语句要设置满足>=0 并发使用栅栏或者countDownLatch()使用,实例化,当计数为0时,同时执行后面的代码,实现高并发; 同步控制:如果用sychronised,悲观锁,速度慢。事务。如果使用乐观锁,可以使用错峰,即休眠...原创 2020-06-18 10:05:21 · 111 阅读 · 0 评论 -
NIO
一 BIO模型1 模型2 缺点(1)阻塞式I/O(2)弹性伸缩能力差----一个客户端一个线程(3)多线程耗资源二 NIO1 模型2 改进(1)非阻塞I/O模型(2)弹性伸缩能力强-----(服务器端线程数与客户端为1:n理论上有多少客户请求都是可以的)(3)单线程节省资源3 编程详解(1)通道Channela.特性:双向性(既可读又...原创 2020-06-18 10:04:47 · 78 阅读 · 0 评论 -
问题整理----数据库
1.设计及模块划分存储(文件系统) 程序实例(对文件系统的管理)存储管理(一次加载多个页) 缓存机制(LRU) SQL解析 日志管理(binlog) 权限划分 容灾机制 索引管理 锁管理2.索引模块(1)为什么使用索引不使用索引采用的全文检索,当数据小的时候是很快的,但是数据很大的时候就会很慢,因此采用索引,提高查询速度(2)索引数据结构B-Treen阶树...原创 2020-06-18 10:03:54 · 121 阅读 · 0 评论 -
问题整理----数据库插入和查询的优化
一.大批量SQL插入性能优化https://blog.csdn.net/qq_22855325/article/details/760871381.一条SQL语句插入多条数据。修改后的插入操作能够提高程序的插入效率。这里第二种SQL执行效率高的主要原因是合并后日志量(MySQL的binlog和innodb的事务让日志)减少了,降低日志刷盘的数据量和频率,从而提高效率。通过合并SQL语...原创 2019-08-16 14:24:11 · 192 阅读 · 0 评论 -
问题整理----Java原子操作类
https://www.cnblogs.com/senlinyang/p/7856339.html1.介绍当多线程同时修改一个变量时,会出现最终结果和期望的结果不同,这就是线程不安全的更新操作,通常我们会使用synchronized来解决这个问题,synchronized能保证多线程不会同时更新变量。从java1.5开始,jdk提供了java.util.concurrent.atomi...原创 2019-08-19 17:23:36 · 153 阅读 · 0 评论 -
设计模式
http://c.biancheng.net/view/1322.html总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态...原创 2019-06-25 21:57:30 · 247 阅读 · 0 评论 -
问题整理---反射
1.反射(1)什么是反射反射就是在运行期间,动态的加载类的信息和调用对象的方法。对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。(2)反射原理反射机制程序在运行的过程中加载一些“只知道相关名字”的类,以下代码,在程序运行时加载 User ...原创 2019-07-07 10:19:05 · 135 阅读 · 0 评论 -
问题整理---Redis事务/分布式锁/主从复制
(1)介绍传统的关系型数据库,如Mysql是指出ACID的,但是由于Redis不支持回滚操作,原子性支持不完整,一致性当然也不会支持了,Redis仅支持隔离性,对于持久性,Redis是支持AOF和RDB两种方式的,但由于会影响性能,默认情况是不支持的。Redis事务的实现需要用到MULTI和EXEC两个命令,事务开始的时候先向Redis服务器发送MULTI命令,然后依次发送需要...原创 2019-07-07 13:46:18 · 226 阅读 · 0 评论 -
SpringBoot
1.简介是微服务框架,基于约定大于配置思想。上手快,整合了开源框架或者第三方开源库,可以依赖很少的配置就可以十分快速的搭建项目。是基于Spring开发的,是Spring的”全家桶“,可以创建独立运行的应用而不依赖与容器,不需要打成WAR包就可以在tomcat中直接运行。提供maven极简配置,只需要写一个配置就能加载所有的依赖,缺点就是可能加载了自己不需要的依赖了,当然也可以根据项目的依赖,配...原创 2019-07-08 15:11:50 · 133 阅读 · 0 评论