![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
gaishi_hero
精通cop
展开
-
如何体现AQS的价值,通过这些并发工具类
这篇文章主要通过并发包中的几个高级工具类来展示AQS的价值,具体AQS的详细解析,看另外一篇文章。文章目录ReentrantLockCountDownLatchSemaphoreReentrantReadWriteLock除了ReentrantLock之外,还有另外一下同步组件用到了AQS,例如java.util.concurrent.locks.ReentrantReadWriteLoc...原创 2019-09-02 13:00:28 · 348 阅读 · 0 评论 -
leetcode131. 分割回文串 Java (看得懂的详细分解)
题目:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]...原创 2019-06-29 11:04:22 · 1547 阅读 · 0 评论 -
RocketMQ官方教程(翻译加扩充)——定时消息
本翻译教程来自RocketMQ官方网站,中间会加上自己的理解,有错误或者不妥之处请及时指正。我在示例代码中加了详细的注释,如果读者想要方便的下载这些代码,包括后面所有博客中有关RocketMQ教程中用到的代码,请到我的GitHub仓库进行下载。什么是定时消息?定时消息不同于正常的消息。它们会等到定时时间过后才会被投递出去,供消费者消费。定时消息满足了延时发送的需求。但是需要注意的是延...原创 2019-06-08 17:28:25 · 347 阅读 · 0 评论 -
RocketMQ官方教程(翻译加扩充)——广播模式
本翻译教程来自RocketMQ官方网站,中间会加上自己的理解,有错误或者不妥之处请及时指正。我在示例代码中加了详细的注释,如果读者想要方便的下载这些代码,包括后面所有博客中有关RocketMQ教程中用到的代码,请到我的GitHub仓库进行下载。什么是广播模式?广播模式是将同一个消息发送给所有的订阅者。如果你想要实现所有的订阅者都收到相同的消息,那么广播模式将会是你的不二之选。与广播...原创 2019-06-07 20:56:25 · 782 阅读 · 0 评论 -
RocketMQ官方教程(翻译加扩充)——有序消息
本翻译教程来自RocketMQ官方网站,中间会加上自己的理解,有错误或者不妥之处请及时指正。本“有序消息”教程与原官方示例有所不同,但是更加突出了重点。另外,最开始写RocketMQ官方教程的时候,觉得官方示例还可以,有注释,可以辅助理解。到后来官方教程越来越差,所以本文也是在原来的基础上扩充了很多内容以辅助读者理解。我在示例代码中加了详细的注释,如果读者想要方便的下载这些代码,包括后面所...原创 2019-06-07 16:39:26 · 273 阅读 · 0 评论 -
通过Spring注解注册Bean的四种方式
文章目录包扫描+组件标注注解@Bean注解@Import注解使用FactoryBean(工厂Bean)给spring容器中注册bean有四种通过注解的方式:包扫描+组件标注注解@Bean@Import使用FactoryBean(工厂Bean)下面逐个介绍他们的用法:包扫描+组件标注注解这种方式使我们最为常见的一种,通过两类注解配合使用。@ComponentScan注解用来标在...原创 2019-05-28 21:44:26 · 6381 阅读 · 0 评论 -
RocketMQ官方教程(翻译加扩充)——简单的消息示例
文章目录添加依赖同步地发送消息异步消息发送以单向模式发送消息消费消息本翻译教程来自RocketMQ官方网站,中间会加上自己的理解,有错误或者不妥之处请及时指正。另外,本文所基于的版本是4.4.0使用RocketMQ以三种方式来发送消息:可靠同步、可靠异步和单向模式使用RocketMQ来消费消息添加依赖maven: <dependency> &l...原创 2019-05-12 22:03:12 · 345 阅读 · 0 评论 -
一文快速学习Maven核心概念
文章目录Maven核心概念构建过程的几个主要概念Maven坐标常用Maven命令依赖引入依赖依赖的范围依赖的传递性依赖的排除依赖的原则:解决jar包冲突生命周期插件和目标继承聚合Maven 是 Apache 软件基金会组织维护的一款自动化构建工具, 专注服务于 Java 平台的项目构建和依赖管理。Maven核心概念POM约定的目录结构坐标依赖管理仓库管理生命周期插件和目标...原创 2019-05-16 13:47:20 · 172 阅读 · 0 评论 -
RocketMQ官方教程(翻译加扩充)——快速开始
文章目录先决条件下载并构建开启name server开启broker发送和接收消息关闭服务生产者和消费者本翻译教程来自RocketMQ官方网站,中间会加上自己的理解,有错误或者不妥之处请及时指正。另外,本文所基于的版本是4.4.0本快速入门指南是将RocketMQ配置在本地电脑上来发送和接收消息。先决条件假设本地电脑上安装了一下软件:64bit OS, Linux/Unix/Mac...原创 2019-05-04 21:37:32 · 870 阅读 · 0 评论 -
Spring装配Bean
装配BeanXML方式装配Bean装配Bean的方式分为通过XML装配和通过注解装配两种方式。通过xml装配是指在XML文件中添加bean元素,这里不详细讨论,只给出一个简单的例子:&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema...原创 2019-02-19 20:53:52 · 169 阅读 · 0 评论 -
mybatis 映射器select语句传递多个参数
在映射器的xml文件中select语句有一个配置项叫做parameterType,它用来表示这条语句接收的参数类型。当传递的参数只有一个时,非常简单,直接在等号后面写上参数的类型即可。但是实际查询语句可能需要多个条件,也就是多个参数。下面介绍传入多个参数的几种方法。有四种方法可以实现,分别是使用map传参数、使用注解传参数、使用Java Bean传参数和使用混合方式传参数。第一种map的方式不...原创 2019-02-19 15:11:37 · 1122 阅读 · 0 评论 -
mybatis 创建SqlSessionFactory
创建SqlSessionFactory有两种方式:一种是通过XML,另一种是通过Java代码。String resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSess...原创 2019-02-19 15:08:37 · 614 阅读 · 0 评论 -
leetcode 93. 复原IP地址 java(看得懂的详细解析)
题目:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]这一题与上一篇文章leetcode131. 分割回文串题目如出一辙,所以大家可以参考两道题目来进行学习,加深对回溯算法的解题方法的印象。同样,大家跟着我的思路来进行理解,保证透彻。我们要将一个...原创 2019-06-29 16:31:23 · 1669 阅读 · 2 评论 -
leetcode 49. 字母异位词分组 java (看得懂的详细解析)
题目:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。解析:本题要求将所有的字...原创 2019-07-10 23:32:27 · 359 阅读 · 0 评论 -
通过调试来从源码上理解AbstractQueuedSynchronizer(AQS)
AbstractQueuedSynchronizer(AQS)是java并发包中很多并发工具类的基础,比如java.util.concurrent.locks.ReentrantLock重入锁、java.util.concurrent.locks.ReentrantReadWriteLock读写锁、java.util.concurrent.Semaphore信号量、java.util.concur...原创 2019-09-01 21:37:59 · 245 阅读 · 0 评论 -
IDEA多线程断点调试
多线程断点调试,在观察多线程执行过程的时候非常有用。下面是一段多线程代码:import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class AQSDebug { private Lock lock = new ReentrantLock(); ...原创 2019-09-01 19:59:11 · 8338 阅读 · 0 评论 -
线程安全的单例设计模式(java)
单例设计模式中,懒加载方式写法如下:public class UnsafeLazyInitialization { private static Instance instance; public static Instance getInstance() { if (instance == null) { instance = new ...原创 2019-08-31 15:17:41 · 119 阅读 · 0 评论 -
volatile语义深入理解
happens-beforeJSR-133定义了如下happens-before规则程序顺序规则:一个线程中的每个操作,happens-before于该线程中任意后续操作。监视器锁规则:对于一个锁的解锁,happens-before于后续对这个锁的加锁操作。volatile变量规则:对于一个volatile域的写,happens-before于任意后续对这个变量的读。传递性:如果A h...原创 2019-08-31 14:15:15 · 178 阅读 · 0 评论 -
ThreadLocal类的工作机理
ThreadLocal类用来保存线程私有的变量值,其工作机理如下:ThreadLocal内部类ThreadLocalMap,是一个hashmap的实现。但是这个hashmap与Java集合类中的hashmap有所不同,他们都是通过哈希表实现,但是解决哈希冲突的方式有所不同,集合类中的hashmap是通过拉链法解决,而ThreadLocalMap是通过开放定址发中的线性探测法解决。 这一点通过se...原创 2019-08-30 13:09:52 · 98 阅读 · 0 评论 -
leetcode 151. 翻转字符串里的单词 java (看得懂的详细解析)
题目:给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出: ...原创 2019-07-22 23:17:42 · 474 阅读 · 0 评论 -
LeetCode 71. 简化路径 java (看得懂的详细解析)
题目:以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只...原创 2019-07-22 00:06:30 · 579 阅读 · 0 评论 -
面试题:LeetCode 239. 滑动窗口最大值 java
这是一道本人面试时遇到的算法题,在LeetCode中的原题,虽然被列为困难,其实并不难。题目:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。返回滑动窗口最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] ...原创 2019-07-16 17:59:04 · 534 阅读 · 0 评论 -
leetcode 43. 字符串相乘 java (看得懂的详细解析)
题目:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 ...原创 2019-07-07 13:33:21 · 978 阅读 · 0 评论 -
LeetCode 216. 组合总和 III java (看得懂的详细解析)
题目:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]解析:相比于前面两道用回...原创 2019-07-06 20:50:14 · 843 阅读 · 1 评论 -
面试题:查找先非严格递增后非严格递减的数组中的最大值 java
这是一道本人面试时手撕算法环节的真题。给定一个整数数组,这个数组中的数字有这样一个规律:前面部分非严格递增,后面部分非严格递减,写出找到其中最大值的算法。说明:所谓非严格递增是指arr[i]<=arr[i+1],相应的非严格递减是指arr[i]<=arr[i+1]。例如下面的这些例子:int[] arr1 = new int[]{1, 2, 3, 4, 5, 6, 7, 7, 5...原创 2019-07-15 23:32:01 · 1631 阅读 · 0 评论 -
Spring AOP的两种实现
文章目录注解方式实现AOPxml方式实现AOPSpring AOP有两种实现方式,一种是基于注解的,另一种是基于xml的。注解方式实现AOP首先介绍基于注解的实现方式,实现需要有切面类和连接点两个主要的东西。切面类定义了在执行要拦截方法前后执行的方法。而连接点就是指要拦截的方法。连接点printRole(),首先定义一个接口:public interface RoleService ...原创 2019-02-21 22:04:17 · 224 阅读 · 0 评论 -
框架学习——springmvc学习笔记
文章目录入门案例请求乱码基于注解开发封装参数基本参数数组JavaBean对象包装类型参数集合类型参数(list)集合类型参数(map)页面回显转发和重定向@ResponseBody和@RequestBody注解多视图解析ssm整合文件上传页面缓存页面静态化freemarker拦截器入门案例配置web.xml,需要配置一个核心控制器(servlet)<servlet> ...原创 2018-12-15 18:07:17 · 190 阅读 · 0 评论 -
JDBC增删改查示例代码
首先使用如下SQL语句生成一个users表create table users( id int primary key auto_increment, name varchar(40), password varchar(40), email varchar(60), birthday date)character set utf8 collate utf8_general_ci...原创 2018-11-08 19:29:35 · 252 阅读 · 0 评论 -
Java学习笔记--多线程
创建多线程的第一种方式:继承Thread类,并重写其run方法。然后通过创建Thread类的子类对象,并调用start()方法,就开启了一个新线程。Thread类中有关线程名称比较常用的方法:public Thread()//无参构造会给创建的线程默认的名称:Thread-(number)public Thread(String name)//带参构造会给线程指定名称,使用该方法的前提是...原创 2018-09-29 20:43:11 · 147 阅读 · 0 评论 -
Servlet规范的核心类图
原创 2018-10-12 21:52:50 · 384 阅读 · 0 评论 -
Java学习笔记--Java8新特性
文章目录Lambda表达式方法引用Stream新时间日期 APILambda表达式Lambda表达式的作用就是在代替冗长的匿名内部类,使用简洁的方式重写接口中的抽象方法,并创建子类对象。Lambda表达式被"-&gt;"操作符分成两部分,左侧表示参数列表,右侧表示所执行的功能。Lambda表达式需要函数式接口的支持,即只有一个抽象方法的接口。抽象方法的参数以及返回值有不同的类型,所以La...原创 2018-10-04 20:11:30 · 140 阅读 · 0 评论 -
Java学习笔记--Java网络编程
网络编程三要素:IP、端口和协议IP地址的组成IP地址 = 网络号码+主机地址A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码特殊地址:127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 1...原创 2018-10-04 20:08:33 · 124 阅读 · 0 评论 -
Java学习笔记--异常处理、File类、IO流介绍
文章目录异常处理File类IO流Properties类异常处理格式:try { 可能出现问题的代码;}catch(异常类名 变量名) {//catch语句可以有多个,子类异常放前面,父类异常放后面 针对问题的处理;}finally { 释放资源;}jdk7新特性try { 可能出现问题的代码;}catch(异常类名1 | 异常类名2 | ...原创 2018-09-27 13:14:06 · 184 阅读 · 0 评论 -
Java学习笔记--Collection集合与Map的实现类介绍
文章目录Collection集合Collection接口中的iterator方法一探究竟泛型jdk5新特性Map集合Collection集合数组和集合的区别:长度区别:数组长度固定,而集合长度可变。内容不同:数组存储同一种数据类型,而集合可以存储不同类型的元素。元素的数据类型问题:数组可以存储基本数据类型,也可以存储引用数据类型;而集合只能存储引用类型。LinkedList与A...原创 2018-09-27 13:07:53 · 175 阅读 · 0 评论 -
Java学习笔记--常用类及其常用方法、JDK5新特性、正则表达式介绍
文章目录object类String类其他类常用方法StringBuffer类JDK5新特性正则表达式Random类其他类常用方法Calendar类object类直接输出一个对象的名称,其实就是调用了该对象的toString()方法。一般会重写toString()方法,输出成员变量的值。对象名.getClass().getname()会得到类名。equals()方法默认是比较两个对象的地...原创 2018-09-27 13:01:58 · 190 阅读 · 0 评论 -
Java学习笔记--面向对象相关概念介绍
文章目录面向对象private构造方法static代码块继承final多态abstract接口修饰符内部类面向对象java类的定义方式:类名 对象名 = new 类名();对象也是new出来的,所以存在堆中,其中成员变量的初始化方式跟上面new数组时不同数据类型的默认初始化值是一致的(比如int类型初始化值为0,引用类型的默认初始化值为null,引用类型就比如String)。成员变量和局...原创 2018-09-27 12:56:17 · 113 阅读 · 0 评论 -
Java学习笔记--数据类型、运算符、选择语句、循环语句、方法、数组介绍
文章目录Java引入基本数据类型运算符选择语句循环语句方法数组Java动态内存分配Java引入java跨平台靠不同平台下的JVMJRE(Java Runtime Environment)java运行环境,包括Java虚拟机和程序所需核心类库。JDK(Java Development Kit)java开发工具包,包含了java开发工具,例如编译工具javac.exe、打包工具jar.exe...原创 2018-09-27 12:52:29 · 269 阅读 · 0 评论 -
Java学习笔记--设计原则与设计模式、类加载、反射的介绍
文章目录设计原则、设计模式类加载反射JDK动态代理设计原则、设计模式面向对象思想设计原则单一职责原则:每个类应该只有一个职责,对外只能提供一种功能。其实就是”高内聚,低耦合”。开闭原则:对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。里氏替换原则:在任何父类出现的地方都可以用它的子类来替代。依赖注入原则:要依赖于抽象,不要依赖于具体实现。...原创 2018-10-02 13:39:03 · 225 阅读 · 0 评论 -
JavaEE--Cookie和HttpSession的使用小案例
文章目录CookieAPI的使用HttpSessionCookieAPI的使用下面代码展示通过设置cookie存活时间来保存用户名package servlet;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;...原创 2018-11-08 19:35:02 · 222 阅读 · 0 评论 -
JavaEE--HttpServletResponse和HttpServletRequest中常用方法
文章目录HttpServletResponseHttpServletRequestHttpServletResponsePrintWriter getWriter()void setContentType(String type)下面Servlet代码展示了当客户端请求对应的url-pattern时,接收文本,并确保其显示不乱码import java.io.IOException;...原创 2018-11-08 19:37:14 · 419 阅读 · 0 评论