- 博客(34)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 深入synchronized底层原理
目录一、java对象头二、synchronized底层原理三、synchronized底层原理进阶3.1轻量级锁3.2锁膨张3.3自旋优化3.4偏向锁四、总结一、java对象头在深入了解synchronized底层原理前我们首先要对Java中的对象有一个大体的了解,因为通过synchronized关键字加锁就是给某个对象加的,所以对对象有个大体的了解我们才能更好的深入理解synchronized。在程序中我们new出来的一个对象在内存中通常来说由两部分组成,一个是对.
2020-05-24 21:05:21
379
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JVM内存模型(JMM)
目录一、概念二、线程间如何交换数据?一、概念JMM——Java Memeory Model,即Java内存模型,也可以说是JVM内存模型。它的主要作用就是用于定义变量的访问规则。这里的变量是指所有线程可以共享的变量,比如成员变量,不能是局部变量。因为局部变量(在方法内)是放在栈中的,而每个线程都有属于自己的栈,所以局部变量不是线程共享的。JMM将内存划分为两个区:主内存区和工作内存区。可能这里你会问内存空间不是分为堆、栈、方法区等这些区域吗?其实都没有错,只是从不同的角度进心的划分而已。
2020-05-19 02:17:38
789
1
原创 java单例模式详解
单例模式的形式有很多种,每种形式都有不同看来一、饿汉式二、懒汉式三、懒汉双重锁四、枚举式五、静态内部类式基金大幅答复你看见及地方看看款式的防空
2020-06-14 01:14:21
351
原创 反射(java)
反射机制就是在程序“运行状态”时:对任意一个类,我们通过反射都能够知道这个类的所有属性和方法;对于任意一个对象,我们同样也都能够调用它的任意一个方法和属性。一、反射的入口想要使用反射,我们必须获取到某一个类的Class对象,java中一共有三种方式可以获取到某个类的Class对象:Class.forName(类的全限定名); 类名.class; 对象.getClass();(getClass()方法是Object类中的一个native方法)下面我们结合代码实例具体的看一下反射的用法。先创建
2020-06-09 22:14:00
454
原创 ReentrantLock入门讲解
一、概述ReentrantLock字面意思就是可重入锁(re表示重新,entrant表示进入,lock表示锁),它其实是属于JUC包(java,util.concurrent)下的一个类。在多线程环境下我们为了避免并发引发的一些问题常常会选择给可能引起并发问题的代码(临界区)加锁,说到加锁大家最熟悉的可能就是synchronized关键字,除此以外的另一个就是ReentrantLock类。ReentrantLock相比于synchronized有如下特点:可中断 可以设置超时时间 可以设置为公平
2020-05-27 21:56:44
672
2
原创 创建线程的三种方式
我们平常接触比较多的创建线程的方式一般有两种,第三种接触的比较少,之前去京东面试被问到过,自己太菜,直接就懵逼了,第三种方式完全不知道,现在统一做个总结。目录一、方式一:继承Thread类二、方式二:实现Runnable接口三、Callable加FutureTask方式一、方式一:继承Thread类这种方式就是我们自己创建一个类然后继承Thread,并覆写Thread中的r...
2020-03-11 22:51:55
312
原创 Java中的四种引用类型
大家对Java中的四种引用类型相信都不陌生,都知道这四种应用类型分别是强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Refrence)和虚引用(Phantom Reference)。但也好像再具体一点就有点模糊了,比如jdk为什么要设计这四种引用类型?既然设计了它肯定就会有对应的引用场景等等。我本人之前对这些的了解也是知道有这么个东西,再...
2020-02-28 19:17:44
344
原创 线程的几种通信方式
目录一、Object的wait()、notify()、notifyAll()方法二、Condition的await()、signal()、signalAll()方法三、CountDownLatch四、CyclicBarrier五、Semaphore线程间的通信方式常用的有如下几种:Object的wait()、notify()、notifyAll()方法;Condi...
2020-02-27 11:57:05
1855
原创 利用cronlog 切割tomcat日志文件(非root用户)
引言:公司项目部署在tomcat上,随着时间的推移,tomcat/logs下的日志文件catalina.out会越来越大。如下图所示,是我们公司的项目日志文件,大家可以看到catalina.out已经有5.2G这么大了。为了避免日志文件不断的增大下去,前段时间利用cronlog对日志文件做了切割,切割以后日志文件就会每天单独生成一个,而不会都堆积到一个catalina.out中。本文适用于to...
2019-12-04 13:42:57
879
原创 RabbitMQ(三)——Spring 整合RibbitMQ
经过前面两节关于RabbitMQ的简单介绍,我们发现不管是消费端还是生产端,每次都需要编写大量重复的代码,这显然不是我们想要,那么本节就介绍spring和RabbitMQ的整合,它可以帮我们减少许多代码的编写,实际项目中也经常用到。一、搭建SpringBoot环境还记得我们在RabbitMQ(一)——入门中的入门程序中介绍的内容吗?当时我们在pom.xml文件中引入的RabbitMQ的依赖...
2019-04-22 13:44:41
452
原创 RabbitMQ(二)——RabbitMQ的工作模式
在RabbitMQ(一)——入门中我们简单的介绍了一下RabbitMQ的入门知识,这节我们针对RabbitMQ的几种常见的工作模式展开来讲解一下。RabbitMQ有以下几种工作模式 :目录一、简单模式二、工作队列模式三、发布/订阅模式四、路由模式五、主题模式六、Header模式七、RPC模式一、简单模式这种模式是RabbitMQ中最简单的一种工作模式,我们在...
2019-04-21 16:28:39
702
原创 RabbitMQ(一)——入门
前言原来公司项目的消息中间件一直在用RabbitMQ,今天抽出时间简单总结梳理一下关于RabbitMQ的相关知识点。我们知道消息队列在分布式系统中应用的的地方有很多,它也有很多种类型,除了今天重点介绍的RabbitMQ,还有像ActiveMQ,阿里的RocketMQ,在大数据场景中经常用到的Kafka,还有一些其他的诸如ZeroMQ,MetaMQ等等。ActiveMQ在之前其实一直很火,许多公...
2019-04-19 16:20:12
368
原创 MySQL(六)——存储过程和存储函数
前言 今天简单的介绍一下“存储函数”和“存储过程”,平时在工作中用到的时间不多,时间长了难免会忘记。在这里简单的做个回忆总结,方便自己以后复习回忆,当然能帮到需要的同学那就更好了。 关于MySQL中的存储过程/函数可以类比我们java中的方法进行理解,它们都是对一些经常要用到的代码打包封装到一个方法中,在需要用到的地方直接调用方法名就可以了,这样就省去了很多重复代码的编...
2019-04-16 02:40:10
834
转载 MySQL(五)——MySQL中的变量
在mysql文档中,mysql变量可分为两大类,即系统变量和用户变量。但根据实际应用又被细化为四种类型,即局部变量、用户变量、会话变量和全局变量。一、局部变量mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块。其作用域仅限于该语句块。-- declare语句专门用于定义局部变量,可以使用default来说明默认值declare ...
2019-04-15 21:30:33
251
原创 MySQL(四)——SQL常见优化手段及如何避免索引失效
在MySQL(三)——SQL执行计划分析这篇文章中具体介绍了一下SQL执行计划中各个字段的含义,今天这篇文章就简单的说一说具体的优化手段吧。一、SQL优化在做具体的总结之前,为了便于理解,先拿一个具体的例子的简单的实际操作一下具体的SQL优化过程。先创建一张book表(有图书编号、书名、作者、出版编号、类型编号四个字段),并随便插入几条数据:create table book(...
2019-03-31 16:33:33
403
原创 MySQL(三)——SQL执行计划分析
目录一、SQL执行计划概述二、explain字段详解 1.id 2.select_type 3.possible_keys 4.key 5.key_len 6.ref 7.rows 8.Extral一、SQL执行计划概述我们在上一节MySQL(二)——MySQL的逻辑分层-存储引擎-SQL优化中的最后...
2019-03-28 01:08:25
2312
原创 Linux下安装JDK
1.查看当前系统是否已经安装了Java 输入 命令:rpm -qa|grep java 发现有两个版本的Java已经安装了2.卸载掉已经安装的Java 输入命令:rpm -e --nodeps 软件名3.上传已经下载好的jdk到Linux中的某个目录 下载地址:https://www.oracle.com/technetwork/java...
2019-03-26 14:04:07
193
原创 MySQL(二)——MySQL的逻辑分层-存储引擎-SQL优化
目录一、MySQL的逻辑分层二、数据引擎三、SQL优化 (一)索引 1.索引的相关概念 2.B-树和B+树 3.索引的优缺点 4.索引的相分类 5.索引的创建 ...
2019-03-24 16:52:45
447
原创 MySQL(一)——在Linux下安装MySQL
一、MySQL在Linux下的安装时常接触Linux的同学可能知道,Linux下的安装包一般包含有三种不同的格式:yum、tar.gz、rmp,这三者的大致区别如下tar.gz:tar.gz就是一个压缩包,类似于win上面的zip等文件rpm:rpm是一种用来打包软件的的文件格式,他是一种特定的专门用来进行软件的安装、卸载等操作的格式yum:yum可以理解为一个专门用来管理软件的体...
2019-03-23 13:30:27
2956
原创 Linux远程连接工具xshell和xftp的使用
目录一、xshell二、xftp一、xshell关于xshell的安装就不都说了,下载好解压后直接双击一路下一步就可以了,注意在安装过程中有一部让选用“商用”还是“免费”,我们选免费的就行了,下面的xftp也是一样的道理。xshell的网盘地址:https://pan.baidu.com/s/1x2vZyHD2TyXHV7EvSEqP_g提取码:s47e1.安装完成后...
2019-03-22 15:36:40
761
原创 MySQL的安装及客户端SQLyog和Navicat的安装
目录一、MySQL的安装二、SQLyog的安装三、Navicat的安装一、MySQ的L安装(一)MySQL的安装1.到这里MySQL下载先把MySQL下载下来,挑选你需要的MySQL Community Server版本及对应的平台这里既可以选择安装包.msi文件也可以选择压缩包.zip文件,我这里选择的是.msi的安装包文件,所以下面的安装步骤都是基于这个进行...
2019-03-22 13:20:33
2679
1
原创 如何在VMware上安装Centos系统
之前转载过一篇如何安装VMware的文章,如果你现在电脑上还没装VMware可以照着VMware的安装这个教程装一下,装好之后就可以按着下面的步骤在上面安装Centos了。主要分两步1.虚拟机的创建;2.centos系统在虚拟机上的安装。一、虚拟机的创建点击创建虚拟机,并选择“典型”:在之后弹出的窗口中学者第三项“稍后安装操作系统”:选择操作系统的类型和版本,这样虚拟机...
2019-03-21 17:41:21
438
原创 Java环境搭建(windows10系统)
最近刚买了新电脑需要重新搭建环境,发现有些东西忘了,在此重新整理一下,方便以后遇到类似的情况从容应对。废话不多说,开始正题。本文主要分以下个部分:目录一、JDK的安装二、IDE的安装(Eclipse&IDEA)三、Maven的安装一、JDK的安装(一)下载JDK首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/tec...
2019-03-21 10:05:13
6388
1
原创 IDEA学习(五)——IDEA中的模板(Live Templates)
一、概述关于IDEA中的Live Templates这个概念,对于大多数刚接触IDEA的同学可能会觉的比较陌生,这里简单的介绍一下:当我们在IDEA中配置了一些常用代码字母的缩写后,那么以后在输入缩写时就可以出现你预先设定的固定模式的代码,使得开发效率大大提高。比如我们在代码编辑区输入psvm,然后按下tab键,主函数main就会自动出现,不需要我们手动去写。二、默认存在的Live T...
2019-03-11 15:05:56
4360
原创 IDEA学习(四)——快捷键总结
目录一、设置代码提示或自动补全的快捷键二、常用快捷键总结三、如何修改快捷键一、设置代码提示或自动补全的快捷键代码提示或自动补全的快捷键 Alt+/ (需要设置,原有的是 Alt+空格 不好使)第1步:搜索 Completion 第2步:移除原来的 Cycle Expand Word 的 Alt+/ 快捷键绑定。 第3步:在 Basic 上点击右键, 去除原来的 ...
2019-03-08 19:06:24
377
原创 IDEA学习(三)——IDEA的常用设置
IntelliJ IDEA 有很多人性化的设置我们单独拿出来讲解一下,以便我们今后更好的根据自己的喜好来设置IDE。大体讲解以下几个方面:目录一、进入设置界面二、Settings窗口目录结构说明三、设置主题四、设置窗体及菜单的字体及字体大小五、设置鼠标滚轮修改字体大小六、设置鼠标悬浮提示七、设置自动导包功能八、设置显示行号和方法间的分隔符九、忽略大小写提示...
2019-03-08 17:55:20
1871
原创 IDEA学习(二)——创建java工程
在IDEA学习(一)中我们学习了怎样安装IDEA,在这一节中我们就学一下如何在IDEA中创建java工程,简单的输出“hello word”。然后再简单介绍一下IDEA界面方面的说明。目录一、创建java普通工程二、IDEA工程界面说明一、创建java普通工程1.创建新工程上图说明Create New Project:创建一个新的工程 Import Project...
2019-03-08 14:38:02
712
原创 IDEA学习(一)——IDEA的安装
最近IDE从Eclipse转到了IDEA,抽时间熟悉了一下IDEA相关的东西,在此记录一下说不定可以帮到有需要的同学。我们就先从IDEA的安装说起吧。需要说明一点的是IDEA是比较吃内存的,所以在安装IDEA之前最好确认的内存不要太小,最好8G以上。一、下载IDEA安装包首先你需要把IDEA的安装包下载下来,到官网下也可以,直接用我提供的网盘链接也可以,我提供的不是最新版,但自己用着感觉还...
2019-03-08 13:02:15
12043
2
原创 NDK开发(四)——JNI中数组、引用和异常的处理
在 NDK开发(三)——C/C++代码如何调用java层代码中介绍了如何在native层调用Java层的代码。这次我们接着上一讲的,继续讲解一下JNI中对数组、引用和异常的处理方式。一、数组的处理1.1传入数组这一部分主要讲述的是我们怎么样给Java层的native函数传一个数组类型的参数,之后在native层利用C/C++对在Java层传入的这个数组进行相应的操作(如排序等)。直接上代码,看...
2018-04-15 15:20:44
1250
3
原创 NDK开发(三)——C/C++代码如何调用java层代码
通过前面两节简单学习,我们知道在进行NDK开发的时候,想要实现Java代码调用C/C++的代码,只要完成下面简单的几步就可以实现: 1.新建Java类,并在其中声明native方法 JNIUtils.java```public class JNIUtils { //声明一个native方法 public static native String sayHelloF...
2018-04-07 10:23:15
3028
4
原创 NDK开发(二)————CMake构建NDK
上期在NDK开发(一)————如何在Android Studio下进行NDK开发中我们提到android.useDeprecatedNdk=true已经不再被支持了,于是我们根据IDE的提示换成了android.deprecatedNdkCompileLease=1515317190556。当然,这其实也紧紧是暂时的解决方案,因为在Android Studio2.2后,AS完善了对C/C++代
2018-01-13 16:29:25
2192
1
原创 NDK开发(一)————如何在Android Studio下进行NDK开发
在AS中进行NDK开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 1. 到底什么是JNI,什么是NDK? 2. 何为“交叉编译”? 先看什么是JNI?JNI的全称就是Java Native Interface,即java本地开发接口。可能大家和我一样,一听到接口什么的就犯懵:“我也知道这是java本地开发接口的意思,但它具体是个什么意思我还是搞
2018-01-07 14:42:36
49066
24
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人