自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 小白系列-----ArrayBlockingQueue

ArrayBlockingQueue基于数组实现了阻塞队列必须指定空间大小,可以设置生产、消费线程等待顺序的公平性、默认非公平使用公平获取资源将会降低吞吐量,但是可以避免饥饿基本属性&方法:/** The queued items */final Object[] items;/** items index for next take, poll, peek or remove */int takeIndex;/** items index for next put, of

2021-05-21 19:52:24 91

原创 小白系列----LinkedBlockingQueue

LinkedBlockingQueue基于链表实现的阻塞队列,默认长度Integer.MAX_VALUE吞吐量通常比基于数组实现的高,但在同步应用的场景下性能更难预测插入元素大致逻辑:成员变量// 存储节点的信息static class Node<E> { E item; Node<E> next; Node(E x) { item = x; }}// 存储元素的空间大小,默认Integer.MAX_VALUE

2021-05-21 19:51:36 94

原创 小白系列----DelayQueue源码剖析

DelayQueue介绍继承关系如下:DelayQueue是一个支持获取元素的无界阻塞队列。队列使用PriorityQueue来实现,关于PriorityQueue的方法见另一篇文章小白学PriorityQueue ,队列中的元素必须实现Delayed接口,实现getDelay方法,该方法返回指定的延迟时间,即该元素存活多久后可以从队列中提取元素举个例子:// 参考最下的链接public class DelayQueueTest1 { private static DelayQ

2021-05-17 22:48:22 128

原创 JDK8 ConcurrentHashMap computeIfAbsent bug分析

前段时间准备研究一波Mybatis,代码下载到IDEA,一路Debug走了一遍,头已经绕晕,准备放弃突然看到一些英文上面写了啥bug 啥的,于是打开链接看了下,大概就是说的computeIfAbsent 方法,如果key存在的情况下也会加锁,会影响性能,后面又百度了下,发现还有其他bug在写本文前,也看了些网上的文章,大概就是说的是在调用computeIfAbsent(key, …)方法时,正好其他线程需要在key对应位置插入结点,因为computeIfAbsent方法将位置设置了Reservati

2021-05-17 22:32:08 1416

原创 小白系列--ReentrantReadWriteLock源码学习

ReentrantReadWriteLock简介在并发编程中,为了确保数据的安全性,我们常常采用synchronized来对代码段进行加锁,防止其他线程同时对数据进行修改,从而导致数据不一致的问题,大多数人都知道synchronized是一个重量级的锁(JDK 6 之前),在线程切换时OS会发生用户态到内核态切换,因此使用他来加锁,在线程数量较多的情况下会严重影响程序的性能,因此后面JDK引入了Java层面加锁的机制,即Java.util.concurrent包下的类ReentrantReadWri

2021-04-21 16:25:56 92

原创 小白系列--ReentrantLock源码学习

ReentrantLock实现Lock接口,Lock接口只是定义了一些加锁,解锁的一些抽象方法有一个静态的抽象类Sync,继承AQS,静态内部类FairSync、NoFairSync 继承Sync , 默认为非公平锁使用比较简单,如下面一样,作为一名有追求的程序员,肯定不能局限于表面,继续研究底层源码public void testLock() { ReentrantLock lock = new ReentrantLock(); lock.lock(); try {

2021-04-21 16:24:46 68

原创 AQS-Condition源码学习

Condition在使用synchronized加锁时,当线程调用wait方法后,会将线程放入等待队列中,其他线程调用notify(或notifyAll)方法后才会将当前线程唤醒,进入同步队列,而notifyAll是将等待队列中的所有线程都放入同步队列中,notify是挑选其中一个线程进入同步队列这种原始的通知方法不能够指定通知某个线程,为了达到精准通知,因此JDK5后引入了AQS,而AQS中包含一个ConditionObject的内部类(我们经常说的Condition)Condition是由

2021-04-21 16:18:36 61

原创 小白学java底层源码-----TreeMap

TreeMap基于红黑树实现,可以参考HashMap中的红黑树实现方式通过实现Comparable接口对key进行自然排序,或则创建对象时提供Comparatorget、remove、put、containsKey方法的时间复杂度都是logN本文只对TreeMap作一个简单的分析,节点的删除、修改、添加、节点调整等具体操作请参考HashMap中源码属性及构造:// TreeMap比较器,如果为null,那么将对key进行自然排序private final Comparator<?

2021-04-11 10:21:31 88

原创 多线程之小白系列

文章参考B站up狂神说JAVA、《Java并发编程》1. 线程实现的三种方式1. 继承Thread自定义类继承Thread重写run()方法调用start()开启线程public class ThreadDemo extends Thread{ @Override public void run() { for (int i = 0; i < 200; i++) { System.out.println("我在学习" + i); } }.

2021-04-08 22:41:06 196 2

原创 小白学java底层源码-----AQS

简介AQS全称AbstractQueueSynchronizer,基于FIFO等待对列实现的一个同步器框架,JUC包中的很多类都基础自AQS,比如:ReentrantLock,ReentrantReadWriteLock、CountDownLatch等,AQS是在Java语言层面实现锁的机制,避免了用户态跟内核态之间的切换,我们知道Synchronized属于操作系统层面,在JDK5之前,使用synchronized对程序进行加锁,对应操作系统的MUTEX实现,在线程竞争激烈的环境下会造成频繁的上下文切换

2021-04-08 22:37:08 73

原创 Linux安装FastDFS

Linux安装FastDFS参考连接:https://blog.csdn.net/weixin_43591980/article/details/110947827安装相关软件这里我采用的是虚拟机安装,系统是centos 7下载依赖包没有这些文件,nginx将不能正常编译yum install gcc-c++ yum install pcre pcre-devel yum install zlib zlib-devel yum install openssl openssl--de

2021-02-16 21:10:12 241 1

原创 小白学java底层源码-----PriorityQueue

Priority QueueJDK5开始引入, 能够根据对象的优先级来进行排序,要求对象实现Comparable或Comparator接口中的比较方法,底层采用堆来实现。基本介绍:根据优先级来排列的队列,存储的对象一定要实现Comparable接口,否则将抛出异常底层实际上也是通过数组来进行存储数据的, 大小无限(官方文档写的,哈哈)实现了Collection和Iterator接口,通过Iterator遍历数据时并不保证有序的,如果要有序输出,可以通过Arrays.sort(pq.toArr

2021-02-01 23:57:35 200 3

原创 Docker、GitLab、Jenkins实现Devops

Docker、GitLab、Jenkins实现DevOps参考:https://blog.csdn.net/DZP_dream/article/details/107004191作为一名java方向的小白,初次学习DevOps,经过几天的研究,终于实现了持续集成部署功能,这里作一个简单的记录,文中如果有某些地方有错误,还请各位指出机器环境:Vmware、Centos 7elasticsearch安装1、安装Docker安装docker相关工具包# $ sudo yum install -

2020-10-10 18:07:09 349

原创 初次使用Thymeleaf

thymeleaf语法:文章参考:原文链接:https://blog.csdn.net/zhangyuliang6430/article/details/90230640​ https://www.cnblogs.com/xuchao0506/p/9896430.html还引用了其他作者的文章,未引用请见谅本文是在SSM中实践得出的一些笔记,引用资源文件是加了static,在springboot中引入静态资源是不需要加static的,因为springboot整合thymeleaf时,默认

2020-07-20 19:23:11 152

原创 jdk8-Stream学习笔记

请使用前将jdk设置为1.8+文章目录Stream流获取流1.根据Collection获取流2.使用of获取流stream流中常用的方法逐一处理:forEach过滤:filter映射:map排序:sort统计个数:count取用前几个:limit跳过前几个:skip组合:concat案例1:集合元素处理(传统方式)案例2:使用stream来实现功能案例3:完成下列功能方法引用方法引用符通过对象名...

2020-04-20 17:46:53 190

原创 jdk8函数式接口学习笔记

务必将jdk切换到1.8文章目录函数式接口lambda表达式:常用函数式接口Comparator接口Supplier接口Consumer接口抽象方法:accept默认方法:andThen案例Predicate接口抽象方法:test**默认方法:or****默认方法:negate**案例Function接口**抽象方法:apply****默认方法:andThen**案例函数式接口1.1 概念...

2020-04-20 17:45:08 113

原创 docker基础命令

介绍docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。如果出现的故障,可以通过镜像,快速恢复服务。docker简单使用查看镜像文件docker images搜索镜像docker search myql下载镜像docker pull mysql制作容器docker run -di...

2020-04-14 21:34:14 100

原创 初识python正则表达式和re模块

正则表达式和re模块介绍:按照一定的规则,从某个字符串中匹配出想要的数据。这个规则就是正则表达式match只能从开始匹配search从全部匹配正则表达式规则:表达式作用.匹配任意的字符,不能匹配到换行符\d匹配任意的数字\D匹配任意的非数字\s匹配空白字符(包括:\n,\t,\r,空格)\w匹配a-z和A-Z以及数字.下划线\W...

2020-04-13 21:11:40 117

原创 初识pythonRequests库

requests库虽然Python的标准库中urlib模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人感觉不太好,而Requests宣传是"HTTP for Humans",说明使用更简洁方便。发送GET请求:1.最简单的发送get请求就是通过requests . get来调用:response=requests. get(“http://www.baidu.com/...

2020-04-12 22:48:38 166

原创 初识python爬虫urllib库

urllib库urllib库是python中一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,并保存服务器返回的数据urlopen函数在Python3 的urllib库中,所有和网络请求相关的方法,都被集到urllib.request 模块下面了,以先来看下urlopen 函数基本的使用:from urllib import requestresp = req...

2020-04-11 17:41:40 162

原创 记录下SSM整合的配置文件

SSM整合时web配置:< url-pattern > / </ url-pattern > :不会匹配到*.jsp,即:*.jsp不会进入spring的 DispatcherServlet类 。< url-pattern > /* </ url-pattern >: 会匹配路径型的和后缀型的url(包括/login,.jsp,.j...

2020-04-09 17:39:58 91

原创 小白学struts2

Struts2据说Struts2已过时,没办法,学校要学,还是偶尔听下1、struts2介绍​ Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新...

2020-04-08 21:34:19 89

原创 小白学Vue.js

初识Vue.js介绍Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。想进行更深入了解请进官网,https://cn....

2020-04-07 21:32:51 140

原创 初识爬虫框架Scrapy

Scrapy笔记安装安装: 通过pip install scrapy 即可安装Scrapy官方文档: https://scrapy.org/en/latest注意:在ubuntu上安装scrapy之前需要安装以下依赖:sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlibig-dev ...

2020-04-06 19:14:44 541 6

原创 小白学注解

看视频跟着写点笔记注解jdk1.5后的特性,主要运用在框架中,替换繁琐的配置文件JDK中预定义的一些注解@Override: 检测被该注解标注的方法是否继承父类(接口)@Deprecated:该注解标注的内容表示已过时@SuppressWarnings:压制警告一般传递参数all @SuppressWarnings("all)表示压制所有警告@SuppressWar...

2020-04-05 17:35:44 96

原创 初学反射笔记

反射初学笔记概念JAVA反射 (reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键案例中的Person类 public class Person { private S...

2020-04-04 18:48:58 117

原创 Linux常用命令粗略总结

文中的命令适合于linux7.X,可能linux6.x会有点偏差文章目录Linux基本命令Linux基本命令yumwget下载文件网络基础设置firewalld配置介绍:配置文件位置:常用命令参数说明修改配置文件方式添加端口其他命令Linux基本命令Linux基本命令1.cd 命令:表示切换目录cd … 切换到上一级cd ~ 切换到用户目录cd / 切换到根目录2....

2020-04-03 21:12:28 210 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除