自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring事务的传播行为

Spring事务的传播行为Spring事务的传播行为在Propagation枚举类中定义了如下几种选择支持当前事务REQUIRED :如果当前存在事务,则加入该事务。如果当前没有事务,则创建一个新的事务SUPPORTS:如果当前存在事务,则加入该事务 。如果当前没有事务, 则以非事务的方式继续运行MANDATORY :如果当前存在事务,则加入该事务 。如果当前没有事务,则抛出异常不支持当前事务REQUIRES_NEW :创建一个新事务,如果当前存在事务,则把当前事务挂起NOT_SUPPOR

2022-03-23 20:03:14 239

原创 死锁的条件和处理方法

必要条件互斥:每个资源要么已经分配给了一个进程,要么就是可用的。占有和等待:已经得到了某个资源的进程可以再请求新的资源。不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。处理方法主要有以下四种方法:鸵鸟策略死锁检测与死锁恢复死锁预防死锁避免鸵鸟策略把头埋在沙子里,假装根本没发生问题。因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施的

2022-03-21 18:06:03 1304

原创 进程通信方式

1. 管道管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写。#include <unistd.h>int pipe(int fd[2]);它具有以下限制:只支持半双工通信(单向交替传输);只能在父子进程或者兄弟进程中使用。2. FIFO也称为命名管道,去除了管道只能在父子进程中使用的限制。#include <sys/stat.h>int mkfifo(const char *path, mode_t mode);int mkf

2022-03-21 16:50:00 197

原创 线程和进程区别

1. 进程进程是资源分配的基本单位。进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。下图显示了 4 个程序创建了 4 个进程,这 4 个进程可以并发地执行。2. 线程线程是独立调度的基本单位。一个进程中可以有多个线程,它们共享进程资源。QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起

2022-03-21 16:43:08 136

原创 4种保证三个线程按顺序致行的方法

package com.nwk.juc;import java.util.UUID;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CountDownLatch;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.Semaphore;import java.util.concurrent.locks

2022-03-18 14:50:33 258

原创 在将近1G的文件里 统计特定类型的数据个数

今天摸鱼的时候接到一个需求有如下数据在一个文件夹里大概800M 需要统计 每一个 NGKM_********* :前的 数量输出问题分析看见这个需求 第一反应是 正则写因为是特定格式吗我写的是这样的 因为正则不会 String rgex = "(((NGKM)|(ngkm))(.*?)(\\:))";这样能在特定的字符串里找出要的内容了但是字符串哪里来? 肯定是在文件里读取了但是文件读取的类那么多用那个?如果都保存在字符串里肯定保存不完保存在lis里? 800M 的数据会

2022-02-25 11:33:29 242

原创 Video标签上面覆盖播放按钮点击播放

直接复制就可以跑<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script><style>.div1{ width:100

2022-02-23 11:49:11 750

原创 MySQL 索引下推(LCP)

Index Condition Pushdown(ICP)是MySQL 5.6中新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式。使用前后的扫描过程在不使用ICP索引扫描的过程:storage层:只将满足index key条件的索引记录对应的整行记录取出,返回给server层server 层:对返回的数据,使用后面的where条件过滤,直至返回最后一行。使用ICP扫描的过程:storage层:首先将index key条件满足的索引记录区间确定,然后在索引上使用index fil

2022-02-15 11:26:21 139

原创 使用覆盖索引解决 LIKE以%开头会导致索引失效问题

1 建立索引CREATE INDEX idx_nameAgePos ON staff(name, age, pos);1.1 测试&Explain分析IndexCase#1:查询IdEXPLAIN SELECT id FROM staff WHERE name LIKE ‘%Alice%’;结果:使用上了索引(因为 name 有索引,同时查询的 Id 是主键肯定也有索引)IndexCase#2:查询nameEXPLAIN SELECT name FROM staff WHERE na

2022-02-10 16:19:04 1477

原创 索引失效的问题

索引失效问题

2022-02-10 15:52:08 370

原创 spring 面试题

1.说说 Spring 里用到了哪些设计模式?单例模式:Spring 中的 Bean 默认情况下都是单例的。无需多说。工厂模式:工厂模式主要是通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象。代理模式:最常见的 AOP 的实现方式就是通过代理来实现,Spring主要是使用 JDK 动态代理和 CGLIB 代理。模板方法模式:主要是一些对数据库操作的类用到,比如 JdbcTemplate、JpaTemplate,因为查询数据库的建立连接、执行查询、关闭连接

2022-01-19 11:22:12 110

转载 策略模式 VS 状态模式

在行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,两个类图非常相似,都是通过Context类封装一个具体的行为,都提供了一个封装的方法,是高扩展性的设计模式。但根据两者的定义,我们发现两者的区别还是很明显的:策略模式封装的是不同的算法,算法之间没有交互,以达到算法可以自由切换的目的;而状态模式封装的是不同的状态,以达到状态切换行为随之发生改变的目的。这两种模式虽然都有变换的行为,但是两者的目标却是不同的。从关注焦点区分策略模式关注的焦点在于具体的某一个行为,准确的说是某一行为的具体执行过程

2022-01-12 11:16:28 684

原创 设计模式之策略模式

一句话总结我有选择恐惧症 你别让我一个一个挑 我给你说需求 你帮我挑好选择恐惧症选择恐惧症选择恐惧症 说明了能选择的不止一个 (对应的策略不止一个)每一个策略对应一个类我给你说需求这个地方我刚开始也不理解 刚开始学习的时候就知道需要那个策略直接NEW 就行了我怎么知道该New 那一个 难道要if else 判断 如果是这样 那还用啥策略模式?这个时候你会想到 就算 判断 是不是有个判断的依据 如 下图 这里的paymentType不就是我要的需求吗 ?我给你个paymen

2022-01-12 11:08:20 339

原创 LintCode-Logo 2460 · 球员身高排名

请编写一个 SQL 语句,获取球员 (players) 表的身高 (height) 排名 (Rank)。如果,两个球员一样高,则两个球员的身高排名相同。名次之间不应该有间隔。表定义: players (球员表)SQLorder by height desc 按从高到底排列order by height 按从低到高排列select height, dense_rank() over(order by height desc) 'Rank'from playersorder by '

2022-01-10 16:50:45 295

原创 设计模式之状态模式

一句话总结设计模式之状态模式

2022-01-10 16:11:50 130

原创 原型模式+备忘录模式实现游戏角色的存档功能

一句话总结你保管好我不定时分出来的分身们 , 方便我的灵魂来回切换你保管说明是保存在对象之外的 (另外找一个类)//创建看管角色对象的类class Caretaker { //维护一个保存游戏角色当前状态的集合 Map<String, GameRole> memento; public Caretaker() { memento = new HashMap<>();//创建时初始化集合 } //添加一个角色

2022-01-10 09:47:23 2178

原创 设计模式之中介模式

一句话理解 :我们交换 名片, 有事 告诉我 找谁,我处理首先是我的名片 你拿着我的名片才能有事告诉我 也就是说你要包含我的引用对吧接下来是你们的名片 你们要把名片给我 是不是太多不好拿 我是不是要有个文件夹你啥时候把名片给我 你可以在创建的时候给我 (在构造方法中) 也可以创建完成后在给我(单独在写个方法)这里我们在构造方法中给- 怎末告诉我找谁类当你想找我是不是要拿我名片打我电话调用我的方法告诉我 找谁 干啥 (至少有两个参数 吧

2022-01-07 10:26:33 564

原创 设计模式之观察者模式

一句话总结我的理解当我发生改变时调用你(或你们)统一的方法通知你(你们)解释:这里的“我”是被观察者 ,“你(你们)” 是观察者为啥是我通知你们我改变了 观察一个东西是否改变有两种方法 **用交作业举例子** 1). 我写完了,告诉你 (只有写完时才触发) 2). 课代表过二分钟问你一下你写完没有(到点就触发) 如果是第二种过不了几分钟你就该骂骂咧咧了 (如果是多个课代表你骂骂咧咧的更快) 程序也一样

2022-01-06 11:15:36 134

原创 设计模式之命令模式

说实话这个模式挺令人纠结的,但从这个模式的定义上来看,有点让人摸不到什么头脑,而且查看资料以后会发现还是有点稀里糊涂的,说懂了吧也很简单,也不懂吧也有不懂的理由,于是查阅手头的各种书籍,在此写下心得体会,算是加深一下印象。命令模式的定义:将请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,以及支持可撤销和恢复的功能。从定义上来看着实令人一脸懵逼,在这里描述一下博主个人的理解:请求:客户端要求系统执行的操作,在java的世界里面就是某个对象的方法。Command:请求封装成的对象,该对象是命

2022-01-04 16:24:37 1361

原创 深入理解Java中四种创建对象的方式

调用new语句创建对象调用对象的clone()方法运用反射手段创建对象运用反序列化手段调用new语句创建对象// 使用java语言的关键字 new 创建对象,初始化对象数据  MyObject mo = new MyObject() ; 调用对象的clone()方法MyObject anotherObject = new MyObject();MyObject object = anotherObject.clone();使用 clone()方法克隆一个对象的步骤:1.被.

2022-01-04 09:56:18 327

原创 Windows10 Docker Mysql容器启动

-d mysql:5.7 docker 安装的MySQL版本-e MYSQL_ROOT_PASSWORD=971030 数据库密码-name mysql5.7 运行的服务名称docker run -p 13306:3306 --name mysql5.7 -v G:/mysql5.7data/conf:/etc/mysql/conf.d -v G:/mysql5.7data/logs:/logs -v G:/mysql5.7data/data:/var/lib/mysql -e MYSQL_ROO

2021-12-31 10:49:43 1114

原创 设计模式之外观模式

定义提供一个高层次的接口,使得子系统更易于使用使用场景当你的程序有很多个模块,或者说子系统。你希望给用户提供一个统一的操作界面类,而不是让用户分别与这些模块交互。一种设计是:给用户提供一套面板方用来法完成一般性的功能,如果面板提供的方法不能满足用户需求,用户还可以直接使用具体模块的功能来达到自己的目的。另一种设计是:用户完全看不到各子模块,所有操作必须通过面板来完成,如果面板没有提供相应的功能,那也就gg了。如何使用1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可

2021-10-20 18:10:32 106

原创 设计模式 组合模式

定义组合模式允许以相同的方式处理单个对象和对象的组合体使用场景当你的程序结构有类似树一样的层级关系时,例如文件系统,视图树,公司组织架构等等当你要以统一的方式操作单个对象和由这些对象组成的组合对象的时候。uml类图从上图可见组合模式共有3组成部分Component抽象类,定义统一的处理操作。Leaf叶子节点,即单个对象Composite组合对象,里面持有一个List。我们使用了组合模式中所谓的透明方式,因为我们将单个对象和组合对象按照完全一样的事物对待了,所以接口对外很透

2021-10-18 17:18:00 111

原创 设计模式 装饰者模式 其在JDK中的应用

定义装饰模式是在不必改变原类和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象使用场景:需要扩展一个类的功能,或给一个类增加附加责任。需要动态地给一个对象增加功能,这些功能可以再动态地撤销。(个人理解 在不改变原来的类的情况下增加)需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。如何实现在上一篇 桥接模式 中提到星巴克咖啡系统项目。使用桥接模式实现了星巴克要求的各种下单功能:大杯原味、大杯加糖、大杯加奶;

2021-10-18 11:48:05 380

原创 设计模式 桥接模式 其在JDK中的应用

桥接模式定义桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle andBody)模式或接口(Interfce)模式。使用场景桥我们大家都熟悉,顾名思义就是用来将河的两岸联系起来的。而此处的桥是用来将两个独立的结构联系起来,而这两个被联系起来的结构可以独立的变化,所有其他的理解只要建立在这个层面上就会比较容易。下面是一些官方的说明,如果一个系统需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,通过

2021-10-14 18:55:04 322

原创 设计模式之适配器模式

概述由于面向对象程序设计本身就是从实际生活中汲取的灵感,将大千世界抽象到程序设计领域,所以所有的设计模式都是可以在日常生活中感受的到的。例如适配器模式,这个在日常生活中就太普遍了。例如我们程序员经常遇到的电脑上提供的端口与要插入的接头匹配不上,而我们则可以通过一个中间的适配器将两边连接起来。定义将一个接口转换为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作适配器模式还有个别名叫:Wrapper(包装器),顾名思义就是将目标类用一个新类包装一下,相当于在客户端与目标类直接加了一层。I

2021-10-12 17:55:26 116

原创 lintCode 领扣1942 · 相距最近的两棵树苗

lintCode 领扣1942 · 相距最近的两棵树苗 领扣链接题目描述某处新种植有一些距离不等的树苗,已知这些树苗和一个大的浇水桶都在一条直线上sapling_distances 表存储了一些树苗到浇水桶的距离 (distance)请编写一个 SQL 语句,找到最近的两棵树苗的距离 (shortest_distance)。表定义: sapling_distances (树苗距离表)我的写法 有好的写法欢迎评论select min(abs(s1.distance-s2.distance))

2021-10-12 10:29:52 101

转载 建造者模式理解

定义定义虽然基本没有屌用,因为大部分人都看不懂,但是还的说出来。。。The intent of the Builder design pattern is to separate theconstruction of a complex object from its representation. By doing sothe same construction process can create different representations.将一个复杂对象的构建与其表示分离,使得同样

2021-10-11 18:09:04 169

原创 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。1. 简单工厂简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。当想增加一个类比如说类C时 需要修改getProduct(string)的方法,不符合开闭原则2.工厂方法工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产

2021-10-09 16:23:47 105

原创 接口和抽象类的区别与使用场景

前言:前几天面试的是面试官问了一个问题接口和抽象类了解吧?说一下 他们的分别用在什么场景下(就是让说一下我该如何选择使用接口还是抽象类)我回答的不忍直视。我事后问了一个同学,你给我来了一句那要看业务我不知道看业务吗,我想知道的是啥业务用接口啥业务用抽象类吐槽完毕开始正题1.基本概念和声明1.2抽象类抽象类是特殊的类,只是不能被实例化,天生就是要被继承的;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必

2021-09-30 11:53:09 1616

原创 java父类和子类的调用顺序

了解java类加载机制的时候,我们有时候会遇到一些谁先谁后的问题,我们当然不能一眼看出来 最直观的方法就是写代码跑一下父类package com.nwk;/** * @author nwk * @version 1.0 * @date 2021/9/28 15:07 */public class Father { private String name; private int age; private nwk s=new nwk("父亲"); priva

2021-09-28 15:52:13 2392

原创 idea Java 集合类的debug方法

前言:今天和一个兄弟讨论关于HashMap初始长度大小的事下面是对话内容他 问:初始化hashmap是,构造函数内默认的hashmap空间是多大(jdk8)我 答:16 链表的默认长度他 :不是 是 0 第一次put才会变成16我:它是插入的时候才创建的 但是第一次创建的长度是16(不赋值的情况下)他问:new hashmap(100000) 构造后还是100000吗我答:不是 是大于100000的一个2^N(131072)他说:不是 那如果是8的话是多少我答:16他说:不是无论是几

2021-09-28 15:01:05 426 2

原创 Java数组插入其他元素向后移动比较快的方法

今天看ArrayList 源码时发现了一个可以快速移动数组的方法System.arraycopy()它一共5个参数原数组 (就是要被复制的数组)从那个位置开始目标数组复制到那个位置复制多少元素这样一看没什么啊但是当目标数组和被数组数组是同一个数组时就会有意想不到的结果可以看一下下面的代码public class ArrayListTest { public static void main(String[] args) { int elementData[] =

2021-09-24 10:58:10 1030

原创 关于jdk1.8中ConcurrentHashMap

1.前言Java JDK升级到1.8后有些集合类的实现有了变化,其中ConcurrentHashMap就有进行结构上的大调整。jdk1.6、1.7实现的我不会想了解去百度吧2. 重要概念想要了解ConcurrentHashMap 你至少要对HashMap有一定的了解吧?HashMap(1.8)和ConcurrentHashMap(1.8) 底层都是hash表+链表+红黑树如果对红黑树不了解的可以查看https://blog.csdn.net/A980719/article/details/12

2021-09-23 18:14:36 1045 2

原创 TreeMap的基本用法和比较器

1. TreeMap概述TreeMap存储K-V键值对,通过红黑树(R-B tree)实现;TreeMap因为是通过红黑树实现,红黑树结构天然支持排序,默认情况下通过Key值的自然顺序进行排序;如果对红黑树不是太了解话可以看看这个博客https://blog.csdn.net/A980719/article/details/1202648122.TreeMap具有如下特点:不允许出现重复的key(不会报错会覆盖);可以插入null值 (但key不能为null 可以为空字符串) ;

2021-09-18 17:04:55 1745

原创 垃圾回收器cms和G1

1.CMS收集器CMS (Concurrent Mark Sweep) 收集器 是一种以获取最短回收停顿时间为目的的收集器 ,基于并发"标记清理" 实现 在标记清理过程中不会导致用户线程无法定位引用对象。仅作用于老年代收集。不会收集年轻代;年轻带只能配合Parallel New或Serial回收器2.CMS回收步骤1.标记清理: 独占CPU stop-the-world仅标记GCroots能直接关联的对象,速度比较快;2.并发标记: 可以和用户线程并发执行 ,通过GCRoots Tr

2021-09-15 11:16:29 226

原创 JMM理解

1.定义Java的并发采用的是共享内存模型 ,JMM是用来定义一个一致的、跨平台的内存模型,是缓存一致性协议,用来定义数据读写的规则。2. JMM结构规范JMM规定了所有的变量都存储在主内存(Main Memory)中。每个线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量(volatile变量仍然有工作内存的拷贝,但是由于它特殊的操作顺序性规定,

2021-09-15 09:46:11 143

原创 Semaphore

1.Semaphore 意思Semaphore 通常我们叫它信号量, 可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。2.Semaphore 常用方法acquire() 获取一个令牌,在获取到令牌、或者被其他线程调用中断之前线程一直处于阻塞状态。​acquire(int permits) 获取permits(多个)个令牌,在获取到令牌、或者被其他线程调用中断、或超时之前线程一直处于阻塞状态。 tryAcquire()尝试获得令牌,返回获取令

2021-09-14 17:21:59 96

原创 CyclicBarrier

1.CyclicBarrier 概念CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点(你设置的等待线程数量)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 栅栏。2. CyclicBarrier 的常用方法CyclicBarrier(int parties);//设置有几个线程相互等待CyclicBarrier(int parti

2021-09-14 16:48:10 107

原创 CountDownLatch

1. countDownLatch 概念CountDownLatch 定义了一个计数器,和一个阻塞队列, 当计数器的值递减为0之前,阻塞队列里面的线程处于挂起状态,当计数器递减到0时会唤醒阻塞队列所有线程,这里的计数器是一个标志,可以表示一个任务一个线程,也可以表示一个倒计时器,CountDownLatch可以解决那些一个或者多个线程在执行之前必须依赖于某些必要的前提业务先执行的场景。2.countDownLatch 的常用方法new CountDownLatch(int count); //构造方法

2021-09-14 16:15:54 113

空空如也

空空如也

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

TA关注的人

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