- 博客(65)
- 收藏
- 关注
转载 Mysql高手系列 - 第14篇:详解事务
这是Mysql系列第14篇。环境:mysql5.7.25,cmd命令中进行演示。开发过程中,会经常用到数据库事务,所以本章非常重要。本篇内容什么是事务,它有什么用?事务的几个特性事务常见操作指令详解事务的隔离级别详解脏读、不可重复读、可重复读、幻读详解演示各种隔离级别产生的现象关于隔离级别的选择什么是事务?数据库中的事务是指对数据库执行一批操作,这些操作最终要...
2019-09-27 10:00:00 198
转载 Mysql高手系列 - 第13篇:细说NULL导致的神坑,让人防不胜防
这是Mysql系列第13篇。环境:mysql5.7.25,cmd命令中进行演示。当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免?比较运算符中使用NULL认真看下面的效果mysql> select 1>NULL;+--------+| 1>NULL |+--------+| NUL...
2019-09-25 09:57:00 227
转载 Mysql高手系列 - 第12篇:子查询详解
这是Mysql系列第12篇。环境:mysql5.7.25,cmd命令中进行演示。本章节非常重要。子查询出现在select语句中的select语句,称为子查询或内查询。外部的select查询语句,称为主查询或外查询。子查询分类按结果集的行列数不同分为4种标量子查询(结果集只有一行一列)列子查询(结果集只有一列多行)行子查询(结果集有一行多列)表子查询(结果集一般为多...
2019-09-24 13:23:00 264
转载 Mysql高手系列 - 第10篇:常用的几十个函数详解,收藏慢慢看
这是Mysql系列第10篇。环境:mysql5.7.25,cmd命令中进行演示。MySQL 数值型函数函数名称作 用abs求绝对值sqrt求二次方根mod求余数ceil 和 ceiling两个函数功能相同,都是返回不小于参数的最小整数,即向上取整floor向下取整,返回值转化为一个BIGINTrand生成一个0~1之间的随...
2019-09-20 14:56:00 304
转载 Mysql高手系列 - 第11篇:深入了解连接查询及原理
这是Mysql系列第11篇。环境:mysql5.7.25,cmd命令中进行演示。当我们查询的数据来源于多张表的时候,我们需要用到连接查询,连接查询使用率非常高,希望大家都务必掌握。本文内容笛卡尔积内连接外连接左连接右连接表连接的原理使用java实现连接查询,加深理解准备数据2张表:t_team:组表。t_employee:员工表,内部有个team_id引...
2019-09-19 16:28:00 284
转载 Mysql高手系列 - 第9篇:详解分组查询,mysql分组有大坑!
这是Mysql系列第9篇。环境:mysql5.7.25,cmd命令中进行演示。本篇内容分组查询语法聚合函数单字段分组多字段分组分组前筛选数据分组后筛选数据where和having的区别分组后排序where & group by & having & order by & limit 一起协作mysql分组中的坑in多列查询的使用...
2019-09-16 16:37:00 255
转载 Mysql高手系列 - 第8篇:详解排序和分页(order by & limit),及存在的坑
这是Mysql系列第8篇。环境:mysql5.7.25,cmd命令中进行演示。代码中被[]包含的表示可选,|符号分开的表示可选其一。本章内容详解排序查询详解limitlimit存在的坑分页查询中的坑排序查询(order by)电商中:我们想查看今天所有成交的订单,按照交易额从高到低排序,此时我们可以使用数据库中的排序功能来完成。排序语法:select 字段名 f...
2019-09-12 16:18:00 212
转载 Mysql高手系列 - 第7篇:玩转select条件查询,避免踩坑
这是Mysql系列第7篇。环境:mysql5.7.25,cmd命令中进行演示。电商中:我们想查看某个用户所有的订单,或者想查看某个用户在某个时间段内所有的订单,此时我们需要对订单表数据进行筛选,按照用户、时间进行过滤,得到我们期望的结果。此时我们需要使用条件查询来对指定表进行操作,我们需要了解sql中的条件查询常见的玩法。本篇内容条件查询语法条件查询运算符详解(=、<...
2019-09-10 16:37:00 311
转载 Mysql高手系列 - 第5天:DML操作汇总,确定你都会?
这是Mysql系列第5篇。环境:mysql5.7.25,cmd命令中进行演示。DML(Data Manipulation Language)数据操作语言,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除,是必须要掌握的指令,DML和SQL中的select熟称CRUD(增删改查)。文中涉及到的语法用[]包含的内容属于可选项,下面做详细说明。插入操作...
2019-09-06 16:15:00 129
转载 Mysql高手系列 - 第4天:DDL常见操作汇总
这是Mysql系列第4篇。环境:mysql5.7.25,cmd命令中进行演示。DDL:Data Define Language数据定义语言,主要用来对数据库、表进行一些管理操作。如:建库、删库、建表、修改表、删除表、对列的增删改等等。文中涉及到的语法用[]包含的内容属于可选项,下面做详细说明。库的管理创建库create database [if not exists] 库名...
2019-09-04 17:24:00 138
转载 Mysql系列 - 第3天:管理员必备技能(必须掌握)
这是mysql系列第3篇文章。环境:mysql5.7.25,cmd命令中进行演示。在玩mysql的过程中,经常遇到有很多朋友在云上面玩mysql的时候,说我创建了一个用户为什么不能登录?为什么没有权限?等等各种问题,本文看完之后,这些都不是问题了。本文主要内容介绍Mysql权限工作原理查看所有用户创建用户修改密码给用户授权查看用户权限撤销用户权限删除用户授权原则...
2019-09-02 15:59:00 116
转载 java高并发系列 - 第32天:高并发中计数器的实现方式有哪些?
这是java高并发系列第32篇文章。java环境:jdk1.8。本文主要内容4种方式实现计数器功能,对比其性能介绍LongAdder介绍LongAccumulator需求:一个jvm中实现一个计数器功能,需保证多线程情况下数据正确性。我们来模拟50个线程,每个线程对计数器递增100万次,最终结果应该是5000万。我们使用4种方式实现,看一下其性能,然后引出为什么需要使...
2019-08-28 15:43:00 271
转载 java高并发系列 - 第31天:获取线程执行结果,这6种方法你都知道?
这是java高并发系列第31篇。环境:jdk1.8。java高并发系列已经学了不少东西了,本篇文章,我们用前面学的知识来实现一个需求:在一个线程中需要获取其他线程的执行结果,能想到几种方式?各有什么优缺点?结合这个需求,我们使用6种方式,来对之前学过的知识点做一个回顾,加深记忆。方式1:Thread的join()方法实现代码:package com.itsoku.chat3...
2019-08-26 15:25:00 181
转载 java并发系列 - 第29天:高并发中常见的限流方式
这是java高并发系列第29篇。环境:jdk1.8。本文内容介绍常见的限流算法通过控制最大并发数来进行限流通过漏桶算法来进行限流通过令牌桶算法来进行限流限流工具类RateLimiter常见的限流的场景秒杀活动,数量有限,访问量巨大,为了防止系统宕机,需要做限流处理国庆期间,一般的旅游景点人口太多,采用排队方式做限流处理医院看病通过发放排队号的方式来做限流处理。...
2019-08-20 16:23:00 195
转载 java并发系列 - 第28天:实战篇,微服务日志的伤痛,一并帮你解决掉
这是java高并发系列第28篇文章。环境:jdk1.8。本文内容日志有什么用?日志存在的痛点?构建日志系统日志有什么用?系统出现故障的时候,可以通过日志信息快速定位问题,修复bug,恢复业务提取有用数据,做数据分析使用本文主要讨论通过日志来快速定位并解决问题。日志存在的痛点先介绍一下多数公司采用的方式:目前比较流行的是采用springcloud(或者dubb...
2019-08-19 16:07:00 236
转载 java高并发系列 - 第26篇:学会使用JUC中常见的集合,常看看!
这是java高并发系列第26篇文章。环境:jdk1.8。本文内容了解JUC常见集合,学会使用ConcurrentHashMapConcurrentSkipListMapConcurrentSkipListSetCopyOnWriteArraySet介绍Queue接口ConcurrentLinkedQueueCopyOnWriteArrayList介绍Deque接口...
2019-08-16 15:10:00 169
转载 java高并发系列 - 第27天:实战篇,接口性能成倍提升,让同事刮目相看,现学现用...
这是java高并发系列第27篇文章。开发环境:jdk1.8。案例讲解电商app都有用过吧,商品详情页,需要给他们提供一个接口获取商品相关信息:商品基本信息(名称、价格、库存、会员价格等)商品图片列表商品描述信息(描述信息一般是由富文本编辑的大文本信息)数据库中我们用了3张表存储上面的信息:商品基本信息表:t_goods(字段:id【商品id】、名称、价格、库存、会员...
2019-08-16 15:09:00 139
转载 java高并发系列 - 第25天:掌握JUC中的阻塞队列
这是java高并发系列第25篇文章。环境:jdk1.8。本文内容掌握Queue、BlockingQueue接口中常用的方法介绍6中阻塞队列,及相关场景示例重点掌握4种常用的阻塞队列Queue接口队列是一种先进先出(FIFO)的数据结构,java中用Queue接口来表示队列。Queue接口中定义了6个方法:public interface Queue<E>...
2019-08-15 16:26:00 123
转载 java高并发系列 - 第24天:ThreadLocal、InheritableThreadLocal(通俗易懂)
java高并发系列第24篇文章。环境:jdk1.8。本文内容需要解决的问题介绍ThreadLocal介绍InheritableThreadLocal需要解决的问题我们还是以解决问题的方式来引出ThreadLocal、InheritableThreadLocal,这样印象会深刻一些。目前java开发web系统一般有3层,controller、service、dao,...
2019-08-13 14:49:00 138
转载 java高并发系列 - 第23天:JUC中原子类,一篇就够了
这是java高并发系列第23篇文章,环境:jdk1.8。本文主要内容JUC中的原子类介绍介绍基本类型原子类介绍数组类型原子类介绍引用类型原子类介绍对象属性修改相关原子类预备知识JUC中的原子类都是都是依靠volatile、CAS、Unsafe类配合来实现的,需要了解的请移步:volatile与Java内存模型java中的CASJUC底层工具类UnsafeJUC...
2019-08-07 15:13:00 908
转载 java高并发系列 - 第22天:java中底层工具类Unsafe,高手必须要了解
这是java高并发系列第22篇文章,文章基于jdk1.8环境。本文主要内容基本介绍通过反射获取Unsafe实例Unsafe中的CAS操作Unsafe中原子操作相关方法介绍Unsafe中线程调度相关方法park和unpark示例Unsafe锁示例Unsafe中保证变量的可见性Unsafe中Class相关方法示例:staticFieldOffset、staticFie...
2019-08-06 14:51:00 366
转载 java高并发系列 - 第21天:java中的CAS操作,java并发的基石
这是java高并发系列第21篇文章。本文主要内容从网站计数器实现中一步步引出CAS操作介绍java中的CAS及CAS可能存在的问题悲观锁和乐观锁的一些介绍及数据库乐观锁的一个常见示例使用java中的原子操作实现网站计数器功能我们需要解决的问题需求:我们开发了一个网站,需要对访问量进行统计,用户每次发一次请求,访问量+1,如何实现呢?下面我们来模仿有100个人同时访问,...
2019-08-05 15:00:00 184
转载 java高并发系列 - 第20天:JUC中的Executor框架详解2之ExecutorCompletionService
这是java高并发系列第20篇文章。本文内容ExecutorCompletionService出现的背景介绍CompletionService接口及常用的方法介绍ExecutorCompletionService类及其原理示例:执行一批任务,然后消费执行结果示例【2种方式】:异步执行一批任务,有一个完成立即返回,其他取消需要解决的问题还是举个例子说明更好理解一些。买...
2019-08-02 09:08:00 201
转载 java高并发系列 - 第19天:JUC中的Executor框架详解1,全面掌握java并发核心技术
这是java高并发系列第19篇文章。本文主要内容介绍Executor框架相关内容介绍Executor介绍ExecutorService介绍线程池ThreadPoolExecutor及案例介绍定时器ScheduledExecutorService及案例介绍Excecutors类的使用介绍Future接口介绍Callable接口介绍FutureTask的使用获取异步任...
2019-08-01 09:17:00 187
转载 java高并发系列 - 第18天:玩转java线程池,这一篇就够了
阿里p7一枚,可以关注公众号:路人甲Java,咱们一起同行!这是java高并发系列第18篇文章。本文主要内容什么是线程池线程池实现原理线程池中常见的各种队列自定义线程创建的工厂常见的饱和策略自定义饱和策略线程池中两种关闭方法有何不同扩展线程池合理地配置线程池线程池中线程数量的配置什么是线程池大家用jdbc操作过数据库应该知道,操作数据库需要和数据库建立连接...
2019-07-29 08:59:00 266
转载 (必备技能)玩转java高并发系列,估计有50篇,已连载17篇
java高并发系列java高并发系列 - 第1天:必须知道的几个概念java高并发系列 - 第2天:并发级别java高并发系列 - 第3天:有关并行的两个重要定律java高并发系列 - 第4天:JMM相关的一些概念java高并发系列 - 第5天:深入理解进程和线程java高并发系列 - 第6天:线程的基本操作java高并发系列 - 第7天:volatile与Java内存模...
2019-07-26 09:32:00 345
转载 java高并发系列 - 第17天:JUC中的循环栅栏CyclicBarrier常见的6种使用场景及代码示例...
这是java高并发系列第17篇。本文主要内容:介绍CyclicBarrier6个示例介绍CyclicBarrier的使用对比CyclicBarrier和CountDownLatchCyclicBarrier简介CyclicBarrier通常称为循环屏障。它和CountDownLatch很相似,都可以使线程先等待然后再执行。不过CountDownLatch是使一批线程等待另...
2019-07-25 09:20:00 269
转载 java高并发系列 - 第16天:JUC中等待多线程完成的工具类CountDownLatch,必备技能...
这是java高并发系列第16篇文章。本篇内容介绍CountDownLatch及使用场景提供几个示例介绍CountDownLatch的使用手写一个并行处理任务的工具类假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要统计解析总耗时。分析一下:解析每个she...
2019-07-22 15:08:00 399
转载 java高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能
这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能允许一个线程访问一个资源,而信号量可以控制有多少个线程可以同时访问特定的资源。Semaphore常用场景:限流举个例子:比如有个停车场,有5个空位,门口有个门卫,手中5把钥匙分别对应...
2019-07-22 09:02:00 123
转载 java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能
这是java高并发系列第14篇文章。本文主要内容:讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例介绍LockSupport主要用法对比3种方式,了解他们之间的区别LockSupport位于java.util.concurrent(简称juc)包中,算是juc中一个基础类,juc中很多地方都会使用LockSupport,非常重要,希望大家一定要掌握。关于线程等待/唤...
2019-07-20 17:17:00 140
转载 java高并发系列 - 第13天:JUC中的Condition对象
本文目标:synchronized中实现线程等待和唤醒Condition简介及常用方法介绍及相关示例使用Condition实现生产者消费者使用Condition实现同步阻塞队列Object对象中的wait(),notify()方法,用于线程等待和唤醒等待中的线程,大家应该比较熟悉,想再次了解的朋友可以移步到线程的基本操作synchronized中等待和唤醒线程示例pac...
2019-07-20 17:14:00 113
转载 java高并发系列 - 第12天JUC:ReentrantLock重入锁
java高并发系列 - 第12天JUC:ReentrantLock重入锁本篇文章开始将juc中常用的一些类,估计会有十来篇。synchronized的局限性synchronized是java内置的关键字,它提供了一种独占的加锁方式。synchronized的获取和释放锁由jvm实现,用户不需要显示的释放锁,非常方便,然而synchronized也有一定的局限性,例如:当线程尝试...
2019-07-17 19:17:00 212
转载 java高并发系列 - 第11天:线程中断的几种方式
java高并发系列第11篇文章。本文主要探讨一下中断线程的几种方式。通过一个变量控制线程中断代码:package com.itsoku.chat05;import java.util.concurrent.TimeUnit;/** * 微信公众号:路人甲Java,专注于java技术分享(带你玩转 爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜欢请关注...
2019-07-17 09:55:00 174
转载 java高并发系列 - 第10天:线程安全和synchronized关键字
这是并发系列第10篇文章。什么是线程安全?当多个线程去访问同一个类(对象或方法)的时候,该类都能表现出正常的行为(与自己预想的结果一致),那我们就可以所这个类是线程安全的。看一段代码:package com.itsoku.chat04;/** * 微信公众号:路人甲Java,专注于java技术分享(带你玩转 爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜...
2019-07-17 09:45:00 143
转载 java高并发系列 - 第9天:用户线程和守护线程
守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程都是守护线程。与之对应的是用户线程,用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作。如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,java虚拟机会自动退出。java线程分为用户线程和守护线程,线程的daemon...
2019-07-15 17:48:00 146
转载 java高并发系列 - 第8天:线程组
线程组我们可以把线程归属到某个线程组中,线程组可以包含多个线程以及线程组,线程和线程组组成了父子关系,是个树形结构,如下图:使用线程组可以方便管理线程,线程组提供了一些方法方便方便我们管理线程。创建线程关联线程组创建线程的时候,可以给线程指定一个线程组,代码如下:package com.itsoku.chat02;import java.util.concurrent.T...
2019-07-15 17:46:00 130
转载 java高并发系列 - 第7天:volatile与Java内存模型
public class Demo09 { public static boolean flag = true; public static class T1 extends Thread { public T1(String name) { super(name); } @Override ...
2019-07-15 17:44:00 118
转载 java高并发系列 - 第6天:线程的基本操作
新建线程新建线程很简单。只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可。Thread thread1 = new Thread1();t1.start();那么线程start()之后,会干什么呢?线程有个run()方法,start()会创建一个新的线程并让这个线程执行run()方法。这里需要注意,下面代码也能通过编译,也能正常执行。但是,却不能新...
2019-07-15 17:38:00 156
转载 java高并发系列 - 第5天:深入理解进程和线程
进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程具有的特征:动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的并发性:任何进程都可以同其他进行一起并发执行独立性:进程是系统进行资源分配和调度的一个独立单位结...
2019-07-15 17:35:00 174
转载 java高并发系列 - 第4天:JMM相关的一些概念
JMM(java内存模型),由于并发程序要比串行程序复杂很多,其中一个重要原因是并发程序中数据访问一致性和安全性将会受到严重挑战。如何保证一个线程可以看到正确的数据呢?这个问题看起来很白痴。对于串行程序来说,根本就是小菜一碟,如果你读取一个变量,这个变量的值是1,那么你读取到的一定是1,就是这么简单的问题在并行程序中居然变得复杂起来。事实上,如果不加控制地任由线程胡乱并行,即使原本是1的...
2019-07-15 17:24:00 101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人