- 博客(26)
- 资源 (131)
- 收藏
- 关注
转载 【高并发】synchronized原理是什么?这次彻底懂了!!
一、synchronized的基本使用synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码。(2)保证共享变量的修改能够及时可见。(3)有效解决重排序问题。从语法上讲,synchronized总共有三种用法:(1)修饰普通方法。(2)修饰静态方法。(3)修饰代码块。接下...
2020-03-30 16:28:35 1381
转载 【集合框架】JDK 1.8中的HashMap的实现原理,这次彻底懂了
前言HashMap在日常开发中基本是天天见的,而且都知道什么时候需要用HashMap,根据Key存取Value,但是存和取的时候那些操作却是很少去研究。同时在面试中也是面试官们必问的。以下是基于JDK1.8正文先看看HashMap的结构图:1. 先来认识一下HashMap中定义的一些需要了解的成员变量// hashMap数组的初始容量 16static final in...
2020-03-30 15:29:03 1275
原创 【高并发】如何解决可见性和有序性问题?这次彻底懂了!
Java内存模型是一个非常复杂的规范,网上关于Java内存模型的文章很多,但是大多数说的都是理论,理论说多了就成了废话。这里,我不会太多的介绍Java内存模型那些晦涩难懂的理论知识。 其实,作为开发人员,我们可以这样理解Java的内存模型:Java内存模型规范了Java虚拟机(JVM)如何提供按需禁用缓存和编译优化的方法。
2020-03-27 17:31:45 2316 1
原创 【高并发】一文秒懂Happens-Before原则
缓存导致了可见性问题,编译优化导致了有序性问题。也就是说解决可见性和有序性问题的最直接的办法就是禁用缓存和编译优化。但是,如果只是简单的禁用了缓存和编译优化,那我们写的所谓的高并发程序的性能也就高不到哪去了!甚至会和单线程程序的性能没什么两样!
2020-03-26 23:14:32 852
原创 【高并发】解密导致并发问题的第三个幕后黑手——有序性问题
编译器或者解释器为了优化程序的执行性能,有时会改变程序的执行顺序。但是,编译器或者解释器对程序的执行顺序进行修改,可能会导致意想不到的问题!CPU为了对程序进行优化,会对程序的指令进行重排序,此时程序的执行顺序和代码的编写顺序不一定一致,这就可能会引起有序性问题。
2020-03-25 22:07:00 2089
原创 【高并发】解密导致并发问题的第二个幕后黑手——原子性问题(文末有福利)
我们也可以这样理解原子性,就是线程在执行一系列操作时,这些操作会被当做一个不可拆分的整体执行,这些操作要么全部执行,要么全部不执行,不会存在只执行一部分的情况,这就是原子性操作。线程在执行某项操作时,此时如果CPU发生了线程切换,CPU转而去执行其他的任务,中断了当前线程执行的操作,这就会造成原子性问题。
2020-03-25 10:44:04 1010
原创 【高并发】一文解密诡异并发问题的第一个幕后黑手——可见性问题
可见性是一个线程对共享变量的修改,另一个线程能够立刻看到,如果不能立刻看到,就可能会产生可见性问题。在单核CPU上是不存在可见性问题的,可见性问题主要存在于运行在多核CPU上的并发程序。归根结底,可见性问题还是由CPU的缓存导致的,而缓存导致的可见性问题是导致诸多诡异的并发编程问题的“幕后黑手”之一。我们只有深入理解了缓存导致的可见性问题,并在实际工作中时刻注意避免可见性问题,才能更好的编写出高并发程序。
2020-03-24 12:55:30 2266 4
原创 【高并发】导致并发编程频繁出问题的“幕后黑手”
写在前面工作了3年的小菜同学,平时在公司只是做些CRUD的常规工作,这次,出去面试被面试官一顿虐啊!尤其是并发编程的知识简直就是被吊打啊。小菜心有不甘,回来找自己工作经验非常丰富的朋友大冰来帮助自己提升并发编程的知识,于是便有了接下来的一系列小菜学并发的文章。并发编程的难点并发编程一直是很让人头疼的问题,因为多线程环境下不太好定位问题,它不像一般的业务代码那样打个断点,deb...
2020-03-23 21:42:04 993
原创 【高并发】要想学好并发编程,关键是要理解这三个核心问题
写在前面写【高并发专题】有一段时间了,一些读者朋友留言说,并发编程很难,学习了很多的知识,但是在实际工作中却无从下手。对于一个线上产生的并发问题,又不知产生这个问题的原因究竟是什么。对于并发编程,感觉上似乎是掌握了,但是真正用起来却不是那么回事!其实,造成这种现象的本质原因就是没有透彻的理解并发编程的精髓,而学好并发编程的关键是需要弄懂三个核心问题:分工、同步和互斥。分工比较官方的解释为...
2020-03-22 14:47:27 11318 16
原创 高并发之——如何使用Java7提供的Fork/Join框架实现高并发程序?
Fork/Join框架位于J.U.C(java.util.concurrent)中,是Java7中提供的用于执行并行任务的框架,其可以将大任务分割成若干个小任务,最终汇总每个小任务的结果后得到最终结果。基本思想和Hadoop的MapReduce思想类似。主要采用的是工作窃取算法(某个线程从其他队列里窃取任务来执行),并行分治计算中的一种Work-stealing策略为什么需要使用工作窃取...
2020-03-21 11:22:12 1002
原创 高并发之——朋友去面试竟然栽在了Thread类的源码上
前言最近和一个朋友聊天,他跟我说起了他去XXX公司面试的情况,面试官的一个问题把他打懵了!竟然问他:你经常使用Thread创建线程,那你看过Thread类的源码吗?我这个朋友自然是没看过Thread类的源码,然后,就没有然后了!!!所以,我们学习技术不仅需要知其然,更需要知其所以然,今天,我们就一起来简单看看Thread类的源码。注意:本文是基于JDK 1.8来进行分析的。Thread类的...
2020-03-21 09:35:58 7114 22
原创 高并发之——浅谈AQS中的ReentrantLock、ReentrantReadWriteLock、StampedLock与Condition
ReentrantLock概述Java中主要分为两类锁,一类是synchronized修饰的锁,另外一类就是J.U.C中提供的锁。J.U.C中提供的核心锁就是ReentrantLock。ReentrantLock(可重入锁)与synchronized区别:(1)可重入性二者都是同一个线程进入1次,锁的计数器就自增1,需要等到锁的计数器下降为0时,才能释放锁。(2)锁的实现synchr...
2020-03-19 13:07:54 1438
原创 Java之——检测字符串使用的编码格式
不多说,直接上代码吧。package com.taiping.vehicle.version11.utils;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.net.URL;/** * Detect encoding * @author F...
2020-03-18 18:45:57 2342
转载 Redis之——Jedis、jedisCluster的使用
1、Jedis客户端https://redis.io/clients2、Jedis源码包与使用介绍https://github.com/xetorthio/jedis3、项目中使用通过maven引入Jedis的依赖包<dependency> <groupId>redis.clients</groupId> <art...
2020-03-18 18:06:35 7786
原创 高并发之——浅谈AQS中的CountDownLatch、Semaphore与CyclicBarrier
CountDownLatch概述同步辅助类,通过它可以阻塞当前线程。也就是说,能够实现一个线程或者多个线程一直等待,直到其他线程执行的操作完成。使用一个给定的计数器进行初始化,该计数器的操作是原子操作,即同时只能有一个线程操作该计数器。调用该类await()方法的线程会一直阻塞,直到其他线程调用该类的countDown()方法,使当前计数器的值变为0为止。每次调用该类的countDown()...
2020-03-18 17:40:44 1559
原创 Mycat之——Mycat的限制
不支持的SQL语句create table like xxxcreate table select xxxselect for updateselect lock in share modeselect into outfile/into var_name不支持跨库多表关联查询、子查询。不支持多表UPDATE或者UPDATE分片键。不支持跨分片的update/dele...
2020-03-16 23:53:30 1917
原创 Mycat之——Mycat集群优化
Linux优化配置优化/etc/sysctl.conf文件net.ipv4.ip_forward= 0kernel.sysrq = 0kernel.msgmnb = 65536kernel.msgmax = 65536kernel.shmmax = 68719476736kernel.shmall = 4294967296net.ipv4.tcp_syncookies = 1n...
2020-03-16 23:28:13 1086
原创 Mycat之——通过命令行管理Mycat
在《Mycat之——搭建Mycat+Zookeeper+HAProxy+Keepalived+MySQL高可用架构》一文中,我们搭建了Mycat的高可用环境,在高可用环境中,实现了HAProxy的高可用、Mycat的高可用、MySQL的高可用、Zookeeper的高可用和Keepalived的高可用。我们就需要实现Mycat的管理和监控了,不然出了问题,我们是没办法及时发现的。1.Mycat管...
2020-03-16 22:43:18 3168
原创 Mycat之——搭建Mycat+Zookeeper+HAProxy+Keepalived+MySQL高可用架构
前言业界对系统的高可用有着基本的要求,简单的说,这些要求可以总结为如下所示。系统架构中不存在单点问题。可以最大限度的保障服务的可用性。一般情况下系统的高可用可以用几个9来评估。所谓的几个9就是系统可以保证对外提供的服务的时间达到总时间的百分比。例如如果需要达到99.99的高可用,则系统全年发生故障的总时间不能超过52分钟。注意:如下文章是有关Mycat的精选博文,大家可以自行...
2020-03-15 23:15:41 3286 6
原创 Mycat之——SQL防火墙
如果说Mycat提供的SQL拦截器是为了事后审计SQL语句的话,那么,Mycat提供的SQL防火墙就是为了事先的预防。为什么需要使用SQL防火墙?对应熟悉MySQL的童鞋来说,我们可以指定用户只能通过某些IP来访问数据库。但是,一旦我们使用了Mycat,所有访问数据库的认证就交由Mycat来进行。之前我们在Mycat的server.xml文件中所配置的那些用户,在所有能够访问到Mycat的主机...
2020-03-04 20:47:04 1722
原创 Mycat之——SQL拦截
其实,看到这个标题后,我本人也会提出一个疑问:SQL拦截到底有什么用呢?,接下来,就让我们带着这个疑问来阅读本文。为何需要使用Mycat的SQL拦截功能?首先,我们来列举一个真实的案例场景:我们在实际的工作中,经常会遇到这样一种场景:业务人员突然发现业务数据库中的数据被莫名其妙的修改了,但又不知道是如何修改的。于是,就来求助DBA,想要来查询一下修改数据的SQL语句。通常情况下,DBA只能通过...
2020-03-04 20:43:23 1809
原创 Mycat之——实现ER分片
【前言】引出ER分片在《Mycat之——设置全局自增id》一文中,我们为水平分片的数据表设置了全局自增的id值,解决了由于分片后各自数据节点的数据表自增,导致Mycat查询数据时,出现的id值重复的问题。此时,我们继续在Mycat下执行如下SQL语句来关联查询order_master数据表和order_detail数据表的数据。mysql> select * from order_ma...
2020-03-04 00:10:54 1300
原创 Mycat之——设置全局自增id
在《Mycat之——实现MySQL的水平分表》一文中,我们将商城数据库的订单数据库中的order_master数据表,根据customer_id字段进行了水平切分,当我们通过Mycat向order_master数据表中插入数据后,再通过Mycat查询order_master数据表中的数据时,发现通过Mycat查询出来的数据中,order_id字段有很多重复的值。这是由于在orderdb01orde...
2020-03-01 22:50:43 2333
原创 Mycat之——实现MySQL的水平分表
在《Mycat之——实现MySQL垂直分库》一文中,我们将整个商城数据库分成用户库、商品库和订单库。由于订单数据库中的订单表数据会随着业务的不断增长而增长,最终单表难以承载巨大的数据量,此时,我们就需要在垂直分库的基础上对订单表中的数据进行水平切分。而Mycat对数据表的水平切分提供了多种切分规则和算法,后续,我们会深入介绍这些切分规则和算法。这里,我们直接根据order_master表中的cu...
2020-03-01 21:37:29 2063 1
原创 Mycat之——实现MySQL垂直分库
Mycat之——实现MySQL垂直分库数据库架构演化对于一个早期的商城系统来说,由于业务量不太大,数据承载压力不高,我们可以将所有的数据放在一台MySQL服务器上,此时的数据库架构就类似于下图所示。随着业务量的不断增加,数据库的压力越来越大,此时我们可以将MySQL做成主从复制集群,使用Mycat完成MySQL的读写分离,其中,MySQL主库作为写库,MySQL从库作为读库,此时的数据库架...
2020-03-01 15:15:40 2301 2
原创 高并发之——深度解析ScheduledFutureTask类源码
JDK 1.5提供的ScheduledThreadPoolExecutor执行定时任务时,会将任务封装成ScheduledFutureTask对象。那么,ScheduledFutureTask对象有何特殊之处?今天,我们就一起来手撕ScheduledFutureTask类的源码,来深入理解ScheduledFutureTask类的细节。类的层级关系从ScheduledFutureTask类的定...
2020-03-01 00:04:19 4389
Navicat for Premium.rar
2020-07-30
Flume采集Nginx日志到新版Hive.rar
2019-09-20
Flume采集Nginx日志到Hive.rar
2019-08-01
Apache标准Log,Hive测试使用
2019-03-17
glibc-2.14 Hadoop专属glib
2019-03-12
avro-1.8.1
2019-02-28
freefloatftpserver1.0 漏洞重现
2019-02-14
VulnServer
2019-01-16
Easy File Sharing Web Server 7.2
2019-01-15
ImmunityDebugger
2019-01-15
sqoop1.46和1.47
2018-09-12
基于java开发的功能强大、配置灵活的数据库之间的同步工具
2018-05-16
《Spring IOC核心技术》- 冰河原创电子书
2023-01-28
冰河的渗透实战笔记-冰河.pdf
2021-05-18
Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成yaml安装文件
2021-05-12
深入理解高并发编程(冰河原创电子书)
2021-04-28
FastDFS6.06完整安装包
2021-04-13
MySQL8.0.19安装包
2021-04-10
流程引擎(Flowable+Activiti)
2020-07-28
nexus-2.11.2-03-bundle.rar
2020-06-15
Navicat For MongoDB 15.0.6
2020-06-13
linux库:compat-libstdc++-33-3.2.3-61
2020-04-20
MySQL各版本my.cnf配置文件.rar
2020-01-12
MySQL 8.0.18源码安装包.rar
2019-11-23
升级gcc与cmake所需的安装文件.rar
2019-11-23
CentOS6.8 64位安装镜像.rar
2019-11-16
性能测试工具(postman+ab+jmeter).rar
2019-10-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人