自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 异步编程之美——CompletableFuture

supplyAsync异步开启一个任务,并返回一个结果;入参为Supply函数式接口;CompletableFuture busA = CompletableFuture.supplyAsync(() -> { SmallTool.printTimeAndThread("A公车发车"); SmallTool.sleepMillis(3000); return "A公车到站";});SmallTool.printTimeAndThread(busA);thenComb

2021-08-22 22:12:50 216

原创 行为型设计模式之命令模式

命令模式描述官方解释将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。个人理解将软件代码划分为三个方面:① 调用者(入口)、② 命令、③ 执行者。整体流程为 调用者与客户做直接交互,将客户的要求转成相应的命令并且要求命令触发执行者的相关操作,可以理解为是一种自顶向下的分析方法。类结构与基础实现Invoker调用者, 负责持有命令对象并触发命令执行,命令模式的交互入口 ;Client实际与命令模式交互的甲方爸爸,负责提需求

2021-07-29 12:09:46 279

原创 sed使用

动作参数动作a在指定 行的后面新增一行写入新内容i在指定 行的前面新增一行写入新内容c以某个字符串替换某个字符串s可以直接进行取代的工作,通常搭配正则d删除p打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行新增内容(增)在目标行的下一行出现sed -E '3,6a\newLine' passwd在目标行的上一行出现sed -E '3,4i\newLine' passwd删除内容(删)

2021-07-12 18:38:20 102

原创 走进AQS体系(二)—— 条件队列

条件队列在 并发编程中是用于对一类事务在处理时机未到的情况下,让负责处理此类事务的线程进行阻塞,当时机成熟的时候,将其唤醒,使其继续往下处理这件事务;条件队列针对阻塞于某类条件的线程进行集中化的队列管理,能保证当该条件成熟了 ,这些线程能够按照有序的方式一个个转换到同步队列中;需要区分两种唤醒,条件队列的唤醒,是每次唤醒后会将其转换到同步队列,最终这些条件队列上的CONDITION节点都是转换到同步队列中的;同步队列的唤醒,是去争夺处理机,真正去执行线程内容;所以,第一个唤醒不考虑

2021-07-09 11:40:11 824

原创 走进AQS体系(一)—— 独占模式下的AQS

1. 尝试获取资源(子类锁需要提供的自定义方法tryAcquire); 2. 获取不到资源,则入队(自旋+CAS直到入队成功); 3. 唤醒入队节点 (也是线程被阻塞的位置); 4. 如果入队节点的上一个节点是头节点,则直接尝试获取锁,如果获取成功就执行,并将其设置为头节点; 5. 如果尝试获取锁不成功或者上一个节点非头节点,则判断其是否应该park(额外的处理: 前一个节点为SIGNAL,应该直接park;前一个节点是CANCELLED节点,则调整节点为非CANCELLED节点的后继;前一个

2021-07-05 15:57:33 180

原创 数据结构之AVL树

定义平衡因子(balance factor)=| Height(leftTree) - Height(rightTree) | = 1处理技巧将其想象成一个天平。比如右边节点多,比较重则会导致右边沉下去了,此时应当想办法让节点往左边靠,使得天平往左边旋转;再比如左边节点较多,则左边会沉下去,此时就应当想办法拿几个节点过来天平右边,使得天平往右边旋转;天平的节点移动操作放到树里面就应当是把中间的这个节点增大或者减小,那何时增大?何时减小?当需要将天平右旋,则对应需要将二叉树根节点减小;当需要将

2021-06-20 23:29:35 185 1

原创 Linux端口转发总结

本地端口转发命令ssh -L [本地ip:]本地端口:目标IP:目标端口 ssh服务原理使用本机通过本地10080端口访问192.168.242.130(远程)本机(localhost)下的3306的mysql注:win10已经内置了ssh命令本地机配置SSH -L 10080:localhost:3306 [email protected]测试远程端口转发命令ssh -R [远程ip:]远程端口:目标主机:目标端口 ssh服务原理使用本地通过(远程)192.

2021-05-17 12:53:37 205

原创 VirtualBox仅主机模式搭建虚拟机集群

仅主机模式拓扑搭建步骤1、管理->主机网络管理器2、新建adapter手动配置网卡ip、dhcp地址注意这里的ip需要与控制面板适配器的IP一致;3、安装linux先配置好内存、硬盘、cpu核心数等,这里省略截图参考;接着配置好语言,密码,硬盘分区等安装系统即可,此处省略截图参考;4、配置网络网络选择刚才创建好的adapter;MAC地址与adapter一致;虚拟机网络配置,进入/etc/sysconfig/network-scripts/ 目录;vi ifcf

2021-05-04 16:07:33 253

原创 jdk Future的使用方式

Future是什么在使用线程的时候,我们会理所当然的想到继承Thread或者实现Runnable,但这两种方式都存在着一个问题,无法返回执行结果。并且,继承Thread也会带来一个破坏面向对象原则的问题,即不符合里氏替换原则。为了解决此类问题,JDK1.5后引入了Future和Callable。Callable和Future首先,我们来观察一个Callable接口,它是一个支持泛型并且函数式编程的接口,在使用时我们仅需要实现它的call()方法。其次,我们再来看一下Future接口,各方法解释已

2020-09-13 14:32:09 454

原创 正则表达式练习

匹配ip素材:101.12.32.555101.12.32.555101.12.32.555101.12.32.555101.12.32.555答案:^\d+(.\d+){3}$2.匹配前后空白素材: 12XxxXxxxx 12x31x1132 asdsad12 asdasd asdasd 答案:^\s*|\s*$ 3.匹配有相同字串的单词素材:asdaskdjasdkaj aaaa ggee toto papa lsls psps答案:(\w+)\14.

2020-07-05 22:27:35 170

原创 jvm的双亲委托机制小结

是什么?我们编写的java代码,最终会被编译为.class文件,再交由JVM去执行。那JVM想要执行程序,就必须要拿到相应的字节码文件。所以这其中,就有了一个类加载的环节。双亲委托机制就是一种java推荐的加载模型,每个加载器都会有相应的职责划分,它们各施其职,互不越界,从而搭起了字节文件和运行时的桥梁。怎么做的?我们编写的每个类可能都会有模块,包名,类名这三个概念,双亲委托机制其实就是根据这些信息来达到相应的加载效果。这也是为什么我们在不同的模块或者不同的包下编写了相同类名或者相同包名和类名的类

2020-06-28 22:10:02 159

原创 AQS底层源码浅析1(Deprecated)

自己学习AQS的一些总结,如果有不同见解的,欢迎评论一起探讨,如果有理解不到位的,希望能够帮我指正。AQS的代码设计真的很精巧,可能一个判断就已经包含了n多种含义。但理解了它,会让自己对并发的理解更上一个层次。state是一个锁标志位,是能否上锁,是否排队等所依托的一个重要属性。不同的锁对于该标志的实现也是有所区别的,例如ReentrantLock和ReentrantReadWriteLock;prev是引用了前一个节点,next是引用了下一个队列节点,简而言之,AQS的同步队列就是利用双向链表构建的一个队

2020-06-09 13:11:17 177

原创 Mysql中order by 的原理

order by 原理1. 利用索引的有序性获取有序数据当查询语句的 order BY 条件和查询的执行计划中所利用的 Index 的索引键(或前面几个索引键)完全一致,且索引访问方式为 rang,ref 或者 index 的时候,MySQL 可以利用索引顺序而直接取得已经排好序的数据。这种方式的 order BY 基本上可以说是最优的排序方式了,因为 MySQL 不需要进行实际的排序操作。需要注意的是使用索引排序也有很多限制。这个在后文中中解释。2. 利用内存/磁盘文件排序获取结果由于没有可以利用

2020-06-06 21:31:08 923

原创 mysql下Sql的执行顺序

sql查找语句整体的执行解析图按关键词进行流程解析from查找语句首先是要拿到数据,这一块会根据存在第1,2个表进行笛卡尔积运算,得到v1;on对v1数据根据on条件进行过滤,得到v2;join这里分为三种情况:inner:基本不需要什么多余操作,此时数据集依旧还是v2;left:会将左表在第2步被过滤掉的数据重新加入到数据集;right:会将右表在第2步被过滤掉的数据重新加入到数据集;这里我们将最终的结果统称为v3;参与查找的是否还有其他表如果存在,则返回第1~

2020-06-06 16:20:07 107

原创 了解一下Mysql的安全模式

预防的问题当进行delete,update操作时如果工程师稍微粗心大意,没有指定相应的条件,则数据库中的所有数据项都会相应受影响。MySQL的设计者也考虑了这一点,所以就产生了安全模式这种概念。如何使用可以通过sql_safe_updates该参数去查看当前数据库的安全模式是否已经开启 ,如果没有的话,可以通过set sql_safe_updates=1打开(0,关闭,1,打开)。mysql> show variables like "sql_safe_updates";+---------

2020-06-06 15:34:04 489

原创 ThreadLocal底层浅析

ThreadLocal结构ThreadLocal操作数据的真相首先,ThreadLocal并非有一个ThreadLocalMap属性,而是通过在调用get()/sety()/remove()方法时会通过Thread.currentThread()获取到当前线程,再通过此线程获取到该线程的threadLocals属性,当该属性为空时则会进行拆创建。如下代码所示:public void set(T value) { Thread t = Thread.currentThread();

2020-06-03 23:23:24 192

原创 java的四种引用类型

java提供的引用类型强引用(Strong):引用存在,则不会被回收。例如直接new出来后被引用的对象。软引用(Soft):在GC进行垃圾回收时,如果内存紧张,不够用的情况下会对这部分内存进行回收。弱引用(Weak):在下一轮GC进行垃圾回收时,该部分内存会被回收。如果存在A a = new A(new WeakReference©) 的时候,则需等待A的强引用消失了才会收集对于C的弱引用,也就是对象不可达才会按照虚引用得规则进行回收。虚引用(Phantom):随时有可能被回收掉。...

2020-06-02 21:26:27 156

转载 内核态和用户态

有一些问题相当基础嘛……应该是初学计算机组成原理和操作系统吧,建议首先先集中力量在计算机组成原理上,不过的确单看计算机组成原理也比较枯燥,可以结合起来稍微讲一下。太长不看的提前总结:内核态,或者说CPU的特权模式,是CPU的一种工作状态,它影响CPU对不同指令的执行结果。操作系统通过跟CPU配合,设置特权模式和用户模式,来防止应用程序进行越权的操作防止应用程序越权访问内存时使用了虚拟地址空间映射的技术,这是操作系统软件配合硬件的MMU共同实现的。在用户模式下,应用程序访问的内存地址是虚拟内存地址,会映

2020-05-25 22:57:02 204

原创 并发编程入门,关于wait()/notify(),sleep()的认识

wait()- 该方法的主要作用是当前线程进入等待状态,但这的前提是,当前线程已经获取了某个对象锁。 - 当线程进入等待状态后,可能会重新唤醒的条件有以下几种: 1、另一个线程调用了当前对象锁的notify()或者notifyAll()方法; 2、该线程的等待时间到达,如果是为零的话,这个条件失效; 3、其他线程调用了该线程的interrupt()方法无参数的wait(),其实这里是调用了wait(long timeout),只不过传入参数的为零,相当于没有超时时间的限制

2020-05-22 01:03:11 200

原创 Java多线程关于interrupt()的理解

interrupt()并不会终止线程,相反有的时候它能唤醒线程,isInterrupt()使用时会遇到的一些问题。

2020-05-21 13:44:53 344

原创 Spring中单例对象引用原型对象

spring中单例对象引用原型对象,setApplicationContext()使用IOC容器注入,@LookUp依赖查找注入多例类

2020-05-15 20:55:12 587

原创 JS常用的数组操作函数

JS常用的数组操作函数splice(),shift(),unshift(),map(),reduce(),sort(),filter(),push(),pop(),reverse()等数组常见函数的使用。

2020-02-28 21:46:44 885

原创 结构型设计模式之外观模式

外观模式在开文之前,我想问一下各位,对于吃饭,您觉得是去下馆子方便还是自己在家里弄方便呢?我个人的话就肯定是觉得下馆子方便,当然毛爷爷允许我这么做的话。如果自己在家里做饭呢,我们要准备锅,准备煤气,还要照顾家里人的口味去针对性准备食材和调味品。而下馆子呢,只要我们跟饭店服务员说一声,我想吃的是什么菜,不一会儿菜品便盛到您面前,饭店帮我们省去了一大串的复杂环节,我们所要做的,就只是跟服务员点个菜...

2020-01-04 00:23:30 184

原创 结构型设计模式之代理模式

代理模式(Proxy Pattern)在现实世界中,很多带有自己产品的工厂都会选择将自己的产品通过代理商的渠道销售到客户手里。它们为什么要这么做呢?个人看来其中一个原因是工厂如果选择直营,客户原先并不知道这个厂的存在,这时工厂就得从建立卖场到推广品牌一整套流程走下来去宣传自己的产品,这其中的投入是非常巨大的,并且前途还未知。另外一个原因是代理商本身就是在某一片地区拥有着属于自己的强大资源,很多客...

2019-12-28 23:57:22 317

原创 结构型设计模式之装饰器模式

装饰器模式逢年过节,或者是遇上心仪的女孩,我们都会以送礼物的方式来让人与人间的关系得到升温。在送礼时,我们首先会先去挑一件合适的礼品,然后再对其进行包装,接着送到我们想送的人手上。那在包装时,有的人会选择一个很好看的礼盒,外面再套上一层礼纸,最后是加一条彩带。也有的人比较简单,直接加个礼盒就完事。当然,也有的人比较环保,直接套个礼纸,再给拧成一个糖果的形状就送人了。但是无论你怎么包装,都不会改变...

2019-12-05 12:23:40 335

原创 结构型设计模式之适配器模式

适配器模式在日常生活中,大到空调,小到手机,都需要电力的支持。众所周知,家庭电源的电压是220V,而运送这些电给千家万户使用的高压线的电压一般是在几千伏的范围内。那么,家庭想用电怎么办?这时候就有了变压器,它承担起了电压的转换,解决高压电和家庭电源之间的矛盾。类似这种场景的还有很多,就比如前文说的,我们日常使用的手机,电脑,它们的用电电压一般也就十几伏,而解决手机用电与家庭电压的矛盾的就是电源适...

2019-12-02 22:29:25 214

原创 创建型设计模式之原型模式

原型模式工厂方法中生成对象,都是经过类似流水线操作的方式对每一个对象进行构造函数调用,可是每个成品却都是十分相似。当然这里是举例结构较为简单的对象工厂。那么,如果能够直接对对象进行复制而生成相似对象,就能省去将产品放到流水线的工序和其他杂七杂八的辅助工序了(赋默认值、赋初始值…)从而提高创建对象的效率。这就是原型模式的由来。Specify the kinds of objects to cr...

2019-12-01 21:47:39 249

原创 创建型设计模式之建造者模式

建造者模式主要用于将产品修饰的这部分内容抽象化,提供给外部一个自由定制的修饰渠道,达到自由切换修饰规则但是不用修改旧代码的效果。带有抽象接口的建造者模式主要涉及的对象有:①引导者(Decorate)、②产品、③抽象建造者接口(Builder)、④定制化的Builder。打个比方,我开着一辆拖拉机去石料场运载建筑用的石料,通过控制石料场的碎石机遥控器,设定石头大小,石头类型等后按启动键,就可...

2019-11-25 16:52:42 215

原创 创建型设计模式之工厂模式

工厂模式工厂在现实生活中给我们的印象就是一个生产者的角色,我们需要什么产品,跟它进行相应的描述后,就由它直接进行生产,我们只需等待它生产完,拿成品去使用就行了。工厂模式可分为简单工厂模式、工厂方法模式、抽象工厂模式。下面将对其进行一一介绍。①简单工厂模式简单工厂没有抽象的工厂接口,侧重于能够根据客户端不同的入参而返回相应的对象,并且获取产品的方法一般是静态的。如下图,SimpleClot...

2019-11-24 16:01:39 230

原创 面向对象设计原则之迪米特法则

迪米特法则(Law of Demeter,LoD)同称 最少知识原则(Low knowledge Principle,LKP)好,按照习惯,从老外的话开始介绍Each unit should have only limited knowledge about other units: onlyunits “closely” related to the current unit.概念...

2019-11-23 14:33:30 199

原创 面向对象设计原则之接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP)Clients should not be forced to depend upon interfaces that they don’tuse.概念1:客户端不应该被迫依赖它们不需要使用的接口。The dependency of one class to another one should ...

2019-11-23 00:47:36 123

原创 面向对象设计原则之单一职责原则

单一职责原则(Single Responsibility Principle,SRP)There should never be more than one reason for a class to change.应当有且仅有一个原因能导致类的改变。单一职责原则要求我们在设计类与接口时要尽可能让其简单化。这么做的原因是往往一个承担了多种职责的类会比承担了一种职责的类的修改可能性大许多。...

2019-11-22 13:28:36 224

原创 面向对象设计原则之里氏替换原则

里氏替换原则(Liskov Substitution Principle,LSP)If for each object o1 of type S there is an object o2 of type T suchthat for all programs P defined in terms of T,the behavior of P isunchanged when o1 is ...

2019-11-21 23:57:56 281

原创 面向对象设计原则之开闭原则

开闭原则(Open Closed Principle,OCP)Software entities like classes,modules and functions should be openfor extension but closed for modifications.指的是一个类,模块,方法需要对扩展打开,对修改关闭。也就是能够保证一个已有的开发成果在维护时,能够不用在修改...

2019-11-21 22:23:28 156

原创 初探设计模式

一、为什么需要有设计模式?我们日常居住的房子,整体的结构从纵向看大概就是地基-楼层-封顶,从平面看,一般就是房间-客厅-阳台。那么,在房子打地基时,施工方会考虑,打桩的深浅,柱子的定位与数量等。而再往深层次看,施工方还要考虑柱子所用到的钢筋尺码、数量和浇筑时所用到的水泥类型等,而打桩的深浅还需要相应考虑土质,楼高等各方面的因素。想到这些,只能说头都大了。可是,我们反观我们所在城市的周围,房屋数...

2019-11-21 21:02:07 211

原创 创建型设计模式之单例模式

单例模式就是在程序的运行过程中有且只有一个实例。单例类的职责是创建实例,并且保证其唯一。单例模式一般分为懒汉式和饿汉式创建方式,以下是这两种创建方式的具体代码。懒汉式:懒汉式创建方式是线程不安全的,但是它不会带来不必要的垃圾。懒汉式创建方式的优化版:原理很简单,即对singleton增加了volatile修饰,保证了其有序性和可见性,在利用synchronized对Single的类对...

2019-11-21 14:27:54 166

空空如也

空空如也

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

TA关注的人

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