- 博客(130)
- 收藏
- 关注
原创 Samaphore
23:12:44.310 [Thread-12] INFO com.bxp.threadtest.samaphoretest.SemaphoreTest - 小汽车Thread-12进入停车场。23:12:45.315 [Thread-12] ERROR com.bxp.threadtest.samaphoretest.SemaphoreTest - 小汽车Thread-12停留1秒。
2024-02-28 23:18:54
1152
转载 SpringBoot整合Log4j2
一、去除Springboot自带的日志依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion>
2022-03-09 11:10:04
460
转载 SpringBoot——事务管理
一、Spring事物概念事务是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败。使用银行转账举例,假如张三和李四各有2000元,张三要给李四转账1000元,转账操作只会出现,张三成功扣除1000元,李四成功增加1000元,或者张三没有扣除1000元,李四也没有增加1000元;绝对不会出现张三成功扣除1000元,而李四没有增加1000元。事务的四个特性:原子性:原子性是指事务是一个不可分割的单位,事务中的操作要么都发生,要么都不发生。一致性:一致性是指事务前后数据的完整性必须保持一.
2021-11-30 14:56:59
2713
原创 Java 基础 —— 集合框架
一、集合框架介绍二、集合框架的主要接口1、Iterable接口实现该接口允许对象成为“foreach”语句的目标,即该集合对象允许迭代。 类集接口Collection是Iterable的子接口,所以所有类集对象可以迭代访问,而Map不行。 方法: Iterator<T> iterator() 功能:返回一个在一组T类型的元素上进行迭代的迭代器。2、迭代器是实现了Iterator/ListIterator接口的类的对象,可以通过遍历...
2021-07-14 21:51:47
277
1
转载 多对多关系需要建立中间表_【数据库基础】为什么需要三张表之多对多表结构设计...
了解完一对一和一对多表结构设计,接下来一起了解一下多对多的表结构设计。同样,咱们先来想一般什么场景需要用到多对多。假如说咱们有一个叫订单和一个叫商品的这两张表,这两张表的关系,它其实就是一个多对多的关系。怎么理解?假如我双11产生了一个订单,这个订单里边有一本书,然后还有一个笔记本电脑,这就说明我这一个订单里边可以包含多个商品,另外,,不管是书还是笔记本电脑,它也有可能被其他的订单所购买?比如,张三他双11买了一本书,赵四他双11也产生了一个订单,他也可以买这本书,这就是一个多对多的关系,一个订单里边可
2021-05-31 21:53:37
2218
转载 Git —— gitlab You are not allowed to push code to protected branches on this project.
gitlab You are not allowed to push code to protected branches on this project.提交是报这个是因为没有权限。解决方案一:把帐号设置为admin管理员。解决方法二: 到目标仓库 Settings -> Repository -> 展开Protected Branches ,修改Allowed to merge Allowed to push这两栏权限(之前默认只有维护人员有权限,而我刚好赋予的是开发人员,所有没权限),
2021-05-13 17:29:30
8718
转载 Java ——Java8 四大核心函数式接口
简单了解了函数式接口,接着我们就来看看Java8 的四大核心函数式接口吧!一、消费型接口: 基本格式Consumer<T>接受一个输入参数并且无返回值。方法调用:void accept(T t);使用示例:@Testpublic void testConsumer() { handle(6, (x) -> System.out.println(x + 2));}public void handle(int value, Consumer&
2021-05-12 22:49:30
338
原创 Java —— 函数式接口与Lambda表达式、方法引用
一、函数式接口函数式接口就是只定义一个抽象方法的接口(不包含默认方法和静态方法),如下:public interface EatInterface { void eat();}上面接口添加默认方法和静态方法后还是函数式接口:public interface EatInterface { void eat(); default void eatApple(){ System.out.println("吃苹果"); } stat.
2021-05-08 23:01:22
234
1
转载 Java —— 接口的静态方法和默认方法
在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。由于这些修饰符都是默认的,所以在JDK8之前,下面的写法都是等价的。public interface JDK8BeforeInterface { public static final int field1 = 0; int field2 = 0; public abstract void method1(int a)
2021-05-08 16:28:15
280
转载 Java IO —— 对象序列化之transient 关键字
上一篇中我们讲述了对象的序列化与对象的输入输出流,这一篇章我们讲述对象序列化的transient 关键字。一、transient关键字transient关键字可以使被修饰的属性,将不会被Java默认的方式序列化和反序列化,如果要对transient关键字修饰的属性进行序列化和反序列化,需要在类中实现writeObject方法和readObject方法。package com.bxp.serializer;import java.io.Serializable;public class.
2021-04-26 10:51:12
188
转载 Java IO——对象的序列化与反序列化
一、对象的序列化概念与作用 - 把对象转换为字节序列的过程称为对象的序列化。 - 把字节序列恢复为对象的过程称为对象的反序列化。对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。二、对象序列化的实现1、要序列化的类必须实现 Serializable 接口。实现 Serializable 接口后,如果用户没有自己声明一个serialVersionUID,接口会默认生成一个serial...
2021-04-25 20:57:42
212
转载 Java IO——PrintWriter类详解
1.java.io.PrintWriter是java中很常见的一个类,该类可用来创建一个文件并向文本文件写入数据。可以理解为java中的文件输出,java中的文件输入则是java.io.File。2.常用的构造方法:提供了很多构造方法,包括直接对文件写操作的PrintWriter(String fileName)PrintWriter(File file)以上两种构造方法都是按照系统默认字符集对指定文件进行写操作的PrintWriter(String fileName,String c
2021-04-25 13:51:42
4819
转载 Java IO——flush()方法
首先先看一段代码:out.flush();out.close()这在我以前的代码里有所体现,但是只知道这是清空缓冲区的作用,但是不知道具体什么是缓冲区,以及为什么要清空他,所以今天学习了一下,我简单举个例子你们就知道了:首先,咱们设想要给鱼缸换水,所以需要一个水泵,水泵是连接鱼缸和下水道的,咱们的任务就是将鱼缸里面水全抽干,这时,我们就可以把水管当做缓冲区。如果咱们一见鱼缸里面水抽干了就立马关了水泵,这时会发现水管里还有来不及通过水泵流向下水道的残留水,我们可以把抽水当做读数据,排水当做写
2021-04-22 14:03:16
294
原创 Java IO——BufferedInputStream 和 BufferedOutputStream
输入输出一个数值型的数据,和输出一个数值型的字符串是完全不一样的,输出数值型是,将数值的字节码完全输出,输出数值型的字符串时是以字符串的方式输出(取决于输出的编码方式)...
2021-04-22 13:55:11
299
原创 Java IO——DataInputStream和DataOutputStream
DataInputStream和DataOutputStream是Java提供的数据输入、输出流。两个类的构造方法如下:public DataInputStream(InputStream in);public DataOutputStream(OutputStream out)从上面的构造方法我们可以看出,创建对象时,需要传入字节流对象,之所以这样是因为DataInputStream和DataOutputStream的实现使用的是装饰模式。装饰模式:https://blog.csd
2021-04-21 22:47:21
977
原创 Java IO——FileInputStream和FileOutputStream
注意:写代码是不要忘记加close() 和 flush()方法。一、FileInputStream输入方法详解FileInputStream输入流一共有3个读方法:int read()从该输入流读取一个字节的数据。该方法读取的是字节但返回int型,这是为了方便直观查看。如果没有读取到任何内容,即读到了文件末尾,那么该方法会返回 -1。int read(byte[] b)从该输入流读取最多 b.length个字节的数据到字节数组中返回读入缓冲区(字节数组)的总字节数,若到达文件末尾,则
2021-04-21 16:28:15
309
原创 Java 基础——赋值语句的返回值
赋值表达式的“返回值”就是左侧的值,即右侧的结果,。示例1:int a = 0;System.out.println(a = 9); // 输出结果是9示例2: int a = 0; if((a = 9) == 9){ System.out.println("复制表达式返回结果等于9"); } else { System.out.println("复制表达式返回结果不等于9");
2021-04-21 10:33:35
2214
转载 装饰模式
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式想必生成子类更为灵活。装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式中的角色有:抽象构件角色(Component):给出一个抽象接口,以规范准备接受附加责任的对象。具体构件角色(ConcreteComponent):定义一个将要接收附加责任的类。装饰角色(Decorator):持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。具体装
2021-04-20 17:23:08
87
转载 建造者模式
欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/builder/建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括下几个角色:builder(抽象建造者):给出一个抽象结论,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体的对象部件的创建。ConcreteBuilder(具体建造者):实现Builder接口,针对不同的商业逻辑,具体化复.
2021-04-20 11:26:58
88
转载 Java IO——RandomAccessFile类详解
一、RandomAccessFile介绍RandomAccessFile支持对文件的读取和写入随机访问(其他的输入流或者输出流只能进行一种操作,要么输入,要么输出)。RandomAccessFile把随机访问的文件对象看作存储在文件系统中的一个大型 byte 数组,然后通过指向该 byte 数组的光标或索引(即:文件指针 FilePointer)在该数组任意位置读取或写入任意数据。输入操作从文件指针开始读取字节(以字节为单位进行读取),并随着对字节的读取而前移此文件指针。如果RandomAccessFi
2021-04-14 20:51:15
18885
转载 Java IO —— File的详解
File类用来表示文件或者目录,可以获取或者操作文件的相关属性(文件名、文件大小、文件权限等),但是File类不能读取(或者写入)文件内容。文件分隔符:不同的操作系统,文件的分隔符也不一样,有的是'/',有的是‘\’或者‘\\’,但是写程序的时候不能把所有情况都写上,所以我们使用File.separator就能解决这个问题,File.separator会根据系统的情况,选择相应的文件分隔符。本篇文章为了方便阅读,未使用File.separator,直接使用普通字符串。File类封装...
2021-04-12 23:32:02
233
转载 switch语句使用枚举类型
枚举类如下/** * 保证金操作原因类型 */public enum ReasonEnum { REASON1(1,"保证金-缴存"), REASON2(2,"保证金-解冻"), REASON3(3,"保证金-解冻(退款锁定)"), REASON4(4,"保证金-缴存(退款锁定)"), REASON5(5,"保证金-解冻(维权锁定)"), REASON6(6,"保证金-缴存(维权锁定)"), REASON7(7,"保证金-扣除补缴"),
2021-04-12 17:21:40
1795
转载 Springboot——自动装配原理
问题:为什么我们在使用springboot的时候几乎零配置,会有很多的spring、spring-mvc的配置全部都忽略掉了。答案:一切都是基于spring-boot的自动装配。
2021-04-12 14:38:27
115
转载 Java迭代器(iterator详解以及和for循环的区别)
前言:迭代器是一种模式、详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部。Iterable:实现这个接口的集合对象支持迭代,是可以迭代的。实现了这个可以配合foreach使用~Iterator:迭代器,提供迭代机制的对象,具体如何迭代是这个Iterator接口规范的。//Iterable JDK源码//可以通过成员内部类,方法内部类,甚至匿名内部类去实现Itera.
2021-04-10 00:07:07
596
转载 设计模式之迭代器模式
前言 :为什么要引入这种Iterator这种模式?数组直接用for循环不就好了吗~重要的理由就是可以将遍历与实现分离开来。目的:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。这里的顺序访问即迭代器的种类,可以从后往前遍历,也可以跳跃式遍历。不要只使用具体类来编程、要优先使用抽象类和接口来编程迭代器模式中的角色:迭代器角色(Iterator): 负责定义访问和遍历元素的接口。 具体迭代器角色(Concrete Ite...
2021-04-09 17:06:24
116
转载 Java的Arrays类详解
简介Arrays 是在java.util包下的一个工具类,里面定义了对数组的一些操作方法。包含用来操作数组(比如排序和搜索)的各种方法。 包含一个允许将数组作为列表来查看的静态工厂。
2021-04-09 10:54:20
1589
原创 Java IO——文件编码
当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要这种编码方式,否则会出现乱码。文本文件,就是字节序列,可以是人一遍码的字节序列,如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ANSI编码。...
2021-04-07 20:46:07
345
原创 Linux——crontab 详解
一、CronTab介绍cronTab就是一个定时任务的工具,比如你有一个脚本,这个脚本是对日志进行切割的,如果我们想要每天0点对日志执行一次切割,人为执行脚本太过麻烦,毕竟每天都得执行一次;CronTab工具就是为我们解决这个麻烦的,他会按照指定的时间为我们启动指定的任务脚本。案例应用:每分钟需要执行一个脚本进行系统健康检查 每天凌晨对过去一天的系统数据进行统计 每周对系统日志进行备份切割 每个月对系统关键数据进行备份二、安装yum install -y cronie cronta
2021-04-06 15:31:03
617
原创 Java——程序控制台输出时中文乱码
问题:程序运行时,控制台输出中文乱码(当前项目中并不是所有的Java文件输出都乱码,只有部分文件输出乱码)原因:出现这个问题的原因是文件的编码格式和项目的编码格式不一样导致的,只要把乱码的文件(只在运行输出时乱码,代码编写时是正常的)。解决方案:1、方案1以idea工具为例file -> settings -> Editor -> File Encodings找到乱码文件后,将乱码文件的编码格式改为和项目的编码格式一样的。2、方案2file -&g.
2021-03-31 15:32:10
6867
转载 Spring中读取配置的方式,@Value、@PropertySource、@ConfigurationProperties使用详解
前言Spring (Boot)获取参数的方式有很多,其中最被我们熟知的为@Value了,它不可谓不强大。今天就针对我们平时最长使用的@Value,以及可能很少人使用的@PropertySource、@ConfigurationProperties等相关注解进行一个详细的扫盲,希望能够帮助到到家,使用起来更加顺畅一、@Value@Value注解的注入非常强大,可以借助配置文件的注入、也可以直接注入注入普通字符串 @Value("normal") private Strin
2021-03-29 10:58:36
2324
原创 RabbitMQ——集群搭建
背景:搭建三个Rabbitmq节点的集群一、在3台服务器上安装分别RabbitmqRabbitmq的安装教程:https://blog.youkuaiyun.com/b15735105314/article/details/114557416二、集群配置1、确保3台服务器都有自己的机器名称主机名相关配置在:/etc/hostname,/etc/hosts。我这里三台机器的IP和机器名如下:IP地址 机器名 192.168.40.110 rabbit01 192.168.40.
2021-03-26 00:30:30
312
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人