自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GIT基本使用

1、git拉去指定分支代码git clone XXX默认拉取的是master分支的代码,如果要拉取指定分支的代码,需要-b参数,若想要拉取dev分支的代码,命令如下:git clone -b develop XXX

2022-03-03 12:49:33 381

原创 %s——字符串中的占位符

%s在字符串中表示占位符public static void main(String[] args) { String s = "姓名:%s,性别:%s"; String name = "fcp"; String sex = "man"; System.out.println(String.format(s, name, sex)); }输出结果为:姓名:fcp,性别:man...

2021-11-03 17:43:49 1440

原创 线程池execute(Runnable command)

线程池的线程是如何做到复用的?线程池是如何做到高效并发的?从线程池的设计中我们能学到什么?为什么要使用线程池?线程在java中是一个对象,也是操作系统的重要资源,线程的创建销毁都需要时间java对象占用堆内存,操作对象线程占用系统内存,根据JVM规定,一个线程默认最大栈大小是1M,这个栈大小内存空间是需要从系统内存中分配的,线程过多会消耗很多内存操作系统需要频繁的上下文切换,影响性能为了控制线程的数量,引入了线程池:降低资源消耗。通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统

2021-04-12 23:12:18 1961

原创 线程池的五种状态

1、RUNNING状态说明:线程池处于RUNNING状态时,能够接收新任务以及对已添加的任务进行处理。状态切换:线程池的初始状态为RUNNING。换句话说线程池一旦被创建,就处于RUNNING状态,且线程池中的任务数为0private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));2、SHUTDOWN状态说明:线程池处于SHUTDOWN状态时,不接收新任务,但能处理已添加的任务状态切换:调用线程池的shutd

2021-04-12 11:38:44 7558

原创 Mybatis批量更新

<update id="updateOrderItem" parameterType="java.util.List"> update order_item <trim prefix="set" suffixOverrides=","> <trim prefix="orderId = case" suffix="end,"> <foreach collection="list" item="item"&g

2021-01-29 13:06:21 140 1

原创 A服务通过HttpClient调用B服务

A服务通过表单格式提交参数,B服务通过HttpServletRequest接收参数A服务@GetMapping("/test") public void test() { List<Params> list = paramsMapper.getList(); //System.out.println(list); for (Params params : list) { Map<String, String

2021-01-11 16:14:25 727

原创 Nacos SpringCloud

实际应用中主要是用Nacos来做分布式环境下的配置管理和服务注册发现的一、服务注册发现通过nacos server和spring-cloud-start-alibaba-nacos-discovery实现服务的注册与发现添加依赖 <!-- nacos实现服务的注册与发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <ar

2020-12-26 16:16:52 96

原创 Docker安装使用

1.更新数据源apt-get update2.安装所需依赖apt-get -y install apt-transport-https ca-certificates curl software-properties-common3.安装GPG证书curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -4.新增数据源add-apt-repository “deb [arch=amd6

2020-12-03 20:44:15 141

原创 lastIndexOf()方法

String fileName = "aaaa";int i = fileName.lastIndexOf("\\");System.out.println(i);上面代码输出结果为-1/*** @return the index of the last occurrence of * the specified substring,or {@code -1} * if there is no such occurrence.* 翻译:指定字符串最后一次出现的索引* 或没有

2020-11-10 15:25:31 665

原创 StringUtils对字符串判空

该工具类使用的是:org.apache.commons.lang3.StringUtilsString类型的变量是否为空,通常有三种情况:1、null2、""3、" "(“空格”)public static void main(String[] args) { String s1 = null; String s2 = ""; String s3 = " "; System.out.println(StringUtils.isBlan

2020-11-09 14:25:35 288

原创 IDEA右边没有Maven选项

1、Ctrl+Shift+A,然后搜索maven,选Add Maven Projects2、选择项目中的pom文件,点击ok后Maven选项就出来了

2020-11-09 14:11:23 232

原创 Redis客户端出现编码格式问题

首先看一下具体问题整合Redis过程中出现的如上图所示的问题分析问题出现的原因:spring封装了RedisTemplate<k, v>来操作Redis在这个封装类中默认的配置是使用JdkSerializationRedisSerializer来进行序列化的,(JDK序列化使用的是ISO-8859-1编码)所以出现了上图中的问题。解决方法:springboot整合redis...

2020-11-04 17:40:17 479

原创 SpringBoot整合Redis流程

1、首先添加redis依赖<!-- 添加redis支持--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>2、RedisConfig配置类/** * @Author: fancp * @Des

2020-11-04 16:48:30 290

原创 解析txt文件

public static void main(String[] args) { try { String encoding = "utf-8"; // 字符编码(可解决中文乱码问题 ) File file = new File("D:\\aaa.txt"); if (file.isFile() && file.exists()) { InputStreamReader r

2020-11-03 10:16:12 423 1

原创 为什么重写hashcode()和equals()方法

自定义实体类/** * @Author: * @Description: 自定义类 * 使用@Data注解会使类自动重写hashcode()和equals()方法 * @Date: *///@Datapublic class Key{ private Integer id; public Key(Integer id) { this.id = id; } /*@Override public bool

2020-10-27 19:17:46 121

原创 Redis一定要知道的三个问题

缓存穿透、缓存击穿和缓存雪崩缓存穿透用户在查询一条数据时,此时缓存和数据库中都没有这条数据的任何记录,在缓存中没有找到数据就会请求数据库,拿不到数据就一直请求,这样会对数据库的访问造成很大的压力。解决方案缓存一个空对象布隆过滤器缓存击穿是指某个key经常被查询,此时key的过期时间失效,突然有大量有关这个key的访问请求,这样会导致大并发请求直接击穿缓存请求数据库,瞬间数据库的访问压力增大。解决方案加锁,对于key过期,当key要查询数据库的时候加锁,这时只让第一个请求进行查询数据库并

2020-09-10 17:00:56 91

原创 阿拉伯数字转换为中文数字

示例:第1课 —》 第一课static char[] cnArr = new char [] {'一','二','三','四','五','六','七','八','九'}; public static String arabicNumToChineseNum(int intInput) { String si = String.valueOf(intInput); String sd = ""; if (si.length() == 1) {

2020-07-13 14:08:57 268

原创 @JsonFormat和@DateTimeFormat的理解

定义一个POJO,属性是一个Date类型的属性@Datapublic class DateDTO { private Date date;}定义一个controller@RestController@RequestMapping("/date")public class DateController { @GetMapping("/test") public DateDTO getDate(DateDTO request) { System.out.

2020-06-28 14:04:01 263

原创 一个HTTP请求经历

先说在浏览器从输入一个url到页面展现的过程:输入Url后,会先进行域名解析。优先查找本地host文件有没有对应的IP地址,没有的话去本地DNS服务器查找,还没有的话,本地DNS服务器会去找根DNS服务器要一个域服务器的地址进行查询,域服务器将要查询的域名的解析服务器返回给本地DNS,本地DNS去这里查询就OK了浏览器拿到服务器的IP地址后,会发送HTTP请求。HTTP请求经过一层层的处理封装发出后,最后由网络达到服务器,建立TCP/IP连接,服务器接收请求并开始处理。服务器构建响应,在由一层层的

2020-06-20 12:40:39 406

转载 windows环境下安装RocketMQ

windows环境下安装RocketMQ

2020-05-18 17:23:08 136

原创 JVM类加载

JVM类加载机制分为五部分:加载、连接(验证,准备,解析)、初始化;加载加载是类加载过程的第一个阶段。在这个阶段JVM将字节码从各个位置(网络磁盘)转换成二进制字节流加载到内存中,接着会为这个类在JVM的方法区创建一个Class对象,是这个类各个数据的访问入口。连接注意:连接阶段和加载阶段是交叉进行的验证:是为了保证class文件的字节流中包含的信息符合虚拟机的要求准备:这个阶段是正式...

2020-04-21 15:11:32 126

原创 Redis

redis的数据结构String(字符串):redis的字符串是动态字符串,是可以修改的,内部结构实现类似于java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。常用的命令:set、get、mset、mget(批量)、expire、setex name 5 codehole#5秒后过期,相当于set+expire、setnx name codehole#如果name不存在...

2020-04-21 14:03:44 129

原创 HashSet和HashMap的区别

1.实现的接口不同HashSet实现的是Set接口,HashMap实现的是Map接口2.存储内容不同HashSet存储的是对象,HashMap存储的是键值对3.添加元素的方法不同HashSet是通过add()方法添加元素HashMap是通过put()方法添加元素4.计算hashCode的方式不同HashMap是通过Key来计算hashCode值HashSet是通过成员变量来计算h...

2020-04-13 14:34:48 3226

原创 HashSet

HashSet数据结构:hash表结构(数据+链表的组合结构)特点:无序:添加顺序和遍历出来的顺序是不一样的。元素不重复:是基于hashmap实现的如何保证元素的唯一性:依赖的是hashCode()和equals()方法先看一下呢HashSet中add()方法的源码 public boolean add(E e) { return map.put(e, PRESENT)==...

2020-04-13 13:49:30 89

原创 MySQL8.0和MySQL5.7的区别

隐藏索引在8.0中,索引可以隐藏。隐藏索引对性能调试非常重要,索引可以被隐藏和显示,当一个索引隐藏时,不会被查询优化器所使用。隐藏一个索引,然后观察数据库性能是否下降,如果下降,说明该索引有效,否则无效,可以删除。隐藏索引语法:ALTER TABLE t ALTER INDEX i INVISIBLE恢复索引语法:ALTER TABLE t ALTER INDEX i VISIBLE...

2020-04-08 14:56:56 8465

原创 SQL优化方法

1.对查询进行优化,尽量避免全表扫描,应该在where和order by涉及的列上加索引2.尽量避免在where子句中对字段进行null判断,这样会放弃使用索引而进行全表扫描。可以将字段的默认值设为03.尽量避免在where子句中使用!=或<>操作符4.尽量避免在where子句中使用or来连接条件。可以使用union all来代替5.慎用in 和 not in6.索引不是越...

2020-04-02 16:27:27 73

原创 深入学习JVM

注释:JVM就是java虚拟机,java虚拟机就是JVM。1 JVM运行时数据区运行时数据区:java代码运行时数据存放的地方。2 解析JVM运行时数据区方法区(非堆)方法区是所有线程共享的内存区域,用于存储被java虚拟机加载的类信息、常量、静态变量、编译器编译后的代码等数据。当方法区无法满足内存分配需求时会抛出OutOfMemoryError异常。java堆1.java堆是JV...

2020-04-02 15:25:07 175

原创 JVM学习前戏

1 java文件的编译过程1.程序猿编写的.java文件2.通过javac将java文件编译成.class文件(因为JVM只认识.class文件)3.JVM将.class文件编译成电脑认识的文件2 为什么说java语言是跨平台的这是由JVM实现的跨平台。JVM从软件层面屏蔽了底层硬件,指令层面的细节,让java可以兼容各种系统。c和c++需要在编译层面去兼容不同系统的不用层面。3 ...

2020-04-01 11:08:13 91

原创 共享锁和排它锁

共享锁(读锁)和排它锁(写锁)首先了解的是共享锁和排它锁都属于悲观锁。是悲观锁的不同实现。共享锁:读锁,是读取操作创建的锁,其他用户可以并发的读取数据,但任何事务都不能对数据进行修改,知道释放了共享锁。如果事务T对数据A加上共享锁以后,其他事务只能对数据A加共享锁,不能加排它锁,获取共享锁的事务只能读取数据,不能修改数据。排它锁:写锁,用于数据修改操作。如果事务T对数据A加上排它锁以后,...

2020-03-31 16:41:42 172

原创 Synchronized和Lock的区别

常见的锁分为synchronized和Lock。Synchronized和Lock的比较①、synchronized是java的关键字,Lock是一个接口②、synchronized发生异常时自动释放锁,而Lock需要手动释放两种锁的实现方式synchronized是通过使用指令码来控制锁的,分别是monitorenter和monitorexit。当线程遇到monitorenter时获取...

2020-03-31 16:25:54 131

原创 springboot主要注解@SpringBootApplication

@Configuration IOC容器的配置类springboot社区推荐使用基于JavaConfig的配置形式,启动类标注@Configuration之后,本身也是一个IOC容器的配置类@ComponentScan 扫描加载组件自动扫描并加载符合条件的组件或者Bean的定义,最终将这些Bean定义加载到IOC容器中可以扫描加载启动类所在包及其子包下的类@EnableAutoC...

2020-02-09 22:00:05 78

原创 spring mvc的执行流程

springmvc是一个基于mvc的web框架,主要作用是用来和浏览器打交道,作用于Controller层执行流程:1.用户发送的请求被拦截器拦截后发送给前端控制器DispatcherServlet处理2.请求查询Handler,处理器映射器(HandlerMapping)— 就是根据url查询controller并将结果返回给DispatcherServlet3.根据2的结果将请求发送...

2020-02-09 21:05:00 106

原创 对Spring IOC、AOP的理解,实现原理是什么?依赖注入是什么?

IOC 控制反转IOC:就是由容器创建和注入依赖对象,实现对象之间的低耦合。程序中最常用的体现就是sevice层使用@Service注解,通过这个注解将该类交给spring容器管理,Controller层调用service方法时就不用new对象,使用@AutoWire注入,就可以使用service类中的方法了。什么是DI机制DI:依赖注入DI和IOC是同一个概念。当某个角色需要另外一...

2020-02-08 18:46:43 358

原创 死锁

1.什么是死锁申请的系统资源被占用,并且保护拥有的资源不释放2.死锁的必要条件互斥条件:资源只能被一个进程占有,此时若有请求该资源的进程,只能等待请求和保持条件:进程已经占有了一个资源,又提出新的请求资源,该资源被别的进程占用,该进程进入阻塞状态,同时保持已拥有的资源不释放。不可剥夺条件:进程获得的资源在未使用完之前不被其他进程剥夺,只能自己释放循环等待条件:多个进程形成封...

2019-12-12 10:54:38 91

原创 配置application.properties完整的属性列表网址

配置application.properties完整的属性列表网址https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#data-properties

2019-12-11 11:00:20 278

空空如也

空空如也

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

TA关注的人

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