自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

suitianshuang

学而时习之

  • 博客(63)
  • 收藏
  • 关注

原创 bug记录---字符串中隐藏换行符\r或\n导致的问题

bug记录—字符串中隐藏换行符\r或\n导致的问题今天遇到了一个莫名其妙的bug在mysql数据库表中看到的数据是 “tgo air purifier (white) - true hepa filter activated carbon - essential oils tray - portable & compact - filter 99.5ander”,可以看出数据是在一行的,但是复制出来发现是 “tgo air purifier (white) - true hepa filte

2021-10-14 23:26:26 499

原创 Java 信号量(semaphore)搭配CountDownLatch 实现多线程处理循环内逻辑并限制创建线程数

Java 信号量(semaphore)搭配CountDownLatch 实现多线程处理循环内逻辑并限制创建线程数使用场景for循环中的处理逻辑较慢,这个时候可以在for循环中创建线程实现多线程处理数据,结合CountDownLatch 可以等待所有线程全部执行结束之后主线程再执行。但是有的时候循环次数比较多,并不适合循环创建,因为线程会创建太多。比如下面这段代码 ExecutorService threadPools = Executors.newFixedThreadPool(20);

2021-10-13 17:09:56 625

原创 线程池简单介绍以及使用线程池的几种问题及解决方案

线程池简单介绍以及使用线程池的几种问题及解决方案线程池任务执行源码public void execute(Runnable command) { if (command == null) throw new NullPointerException(); int c = ctl.get(); //当前线程数小于核心线程数——新建核心线程 if (workerCountOf(c) < corePoolSize

2021-10-03 12:23:38 1005

原创 多线程并发安全问题详细解释

多线程并发安全问题详细解释基础概念简单理解比如:打开任务管理器可以看到QQ.exe,在windows操作系统中,运行在内存中的exe文件就是一个进程(受操作系统管理的基本运行单元);线程就好像是QQ.exe在运行时同时运行的子任务,比如:好友视频线程、下载文件线程、数据传输线程、发送表情线程等。简单理解:任务就好像一件事情,线程就好像找了一个人做这件事情。以此类推:多线程就好像是找了多个人做一件事情,或者多个人做多个事情。串行和并行对比什么是串行:一个时间只找一

2021-10-03 12:13:18 286

原创 CompletableFuture 异步编排介绍,附实际应用demo

异步编排APIAmdahl定律Amdahl加速定律的基本出发点是:1.对于很多科学计算,实时性要求很高,即在此类应用中时间是个关键因素,而计算负载是固定不变的。为此在一定的计算负载下,为达到实时性可利用增加处理器数来提高计算速度;2.因为固定的计算负载是可分布在多个处理器上的,这样增加了处理器就加快了执行速度,从而达到了加速的目的。在此意义下,1967年Amdahl推导出了固定负载的加速公式。 [2]阿姆达尔定律是计算机系统设计的重要定量原理之一,于1967年由IBM360系列机的主要设计者阿姆达尔

2021-10-03 11:57:38 531

原创 ShardingJDBC实战配置

分库分表shardingjdbc的核心功能是数据分片和读写分离,通过ShardingJDBC,应用可以透明的使用JDBC访问已经分库分表、读写分离的多个数据源,而不用关心数据源的数量以及数据如何分布先了解几个概念逻辑表:水平拆分的数据库的相同逻辑和数据结构表的总称真实表:在分片的数据库中真实存在的物理表。数据节点:数据分片的最小单元。由数据源名称和数据表组成绑定表:分片规则一致的主表和子表。广播表:也叫公共表,指素有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中都完全一致

2021-09-25 13:49:37 1122

原创 MYSQL创建索引

查看索引show index from 数据库表名创建索引alter table 数据库add index 索引名称(数据库字段名称)创建主键索引PRIMARY KEY(主键索引)ALTER TABLE table_name ADD PRIMARY KEY ( column )创建唯一索引UNIQUE(唯一索引)ALTER TABLE table_name ADD UNIQUE (column)创建普通索引INDEX(普通索引)mysql>ALTER TABLE tab

2021-04-29 23:02:24 2301

原创 开发问题记录

boolean类型默认为false,即使前端传入的是一个null,该值仍然会转化为默认的false。

2021-04-17 01:43:43 176

原创 实体类属性上的@JsonFormat注解格式化时间不起作用

实体类属性上的@JsonFormat注解格式化时间不起作用解决办法:加上时区:timezone = “GMT+8”@JsonFormat(pattern = “yyyy-MM-dd”, timezone = “GMT+8”)

2021-04-15 16:58:16 2879

原创 git拉取远程仓库以及git合并分支操作

git整理拉取远程仓库并创建本地分支初始化git init自己要与origin master建立连接(下划线为远程仓库链接)git remote add origin git@github.com:XXXX/nothing2.git把远程分支拉到本地git fetch origin dev(dev为远程仓库的分支名)在本地创建分支dev并切换到该分支git checkout -b dev(本地分支名称) origin/dev(远程分支名称)把某个分支上的内容都拉

2021-04-09 02:40:35 804

原创 docker运行redis

docker run -p 6379:6379 -d redis:latest redis-serverdocker exec -ti f0b redis-cli -h 127.0.0.1 -p 6379f0b是容器id,只要打出能区分其他容器id的前几位字母就可以

2021-02-28 16:13:52 280

原创 Mysql ——关于SQL增删改以及创建表的优化

Mysql ——关于SQL增删改的优化①大批量插入数据如果同时执行大量的插入,建议使用多个值的 INSERT 语句(方法二)。这比使用分开 INSERT 语句快(方法一),一般情况下批量插入效率有几倍的差别。方法一:insert into T values(1,2); insert into T values(1,3); insert into T values(1,4);方法二:Insert into T values(1,2),(1,3),(1,4); 选择后一种方法的原因

2021-02-22 19:52:55 461 2

原创 Mysql——关于SQL查询的优化(详细)

SQL优化的具体操作:1、在表中建立索引,优先考虑where、group by使用到的字段。2、尽量避免使用select *,返回无用的字段会降低查询效率。如下:SELECT * FROM t优化方式:使用具体的字段代替*,只返回使用到的字段。3、尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描。如下:SELECT * FROM t WHERE id IN (2,3)SELECT * FROM t1 WHERE username IN (SELECT username F

2021-02-22 14:46:22 295

转载 分布式缓存 — MongoDB

https://www.cnblogs.com/whatarewords/p/10969914.html

2021-02-22 01:34:32 295

转载 23种设计模式(JAVA)

http://c.biancheng.net/view/8385.html

2021-02-21 21:43:57 166

转载 JAVA基础超级详细的总结

https://www.cnblogs.com/schiller-hu/p/10662429.html

2021-02-21 20:51:31 202

原创 mysql——索引;explain参数

Mysql 索引索引的定义Mysql官方对索引的定义为:索引(index)是帮助Mysql进行高效获取数据的数据结构简单理解为:排好序的快速查重数据结构索引会影响order by 和where 的查询索引的目的在于高效的提高查询效率,可以类比字典索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉树)的数据组织的索引,其中聚集索引,次要索引,复合索引,前缀索引,唯一索引,默认都是使用B

2021-02-20 17:06:35 302

原创 mysql优化

mysql高级知识学习(基于Linux)查看是否安装过mysqlrpm -qa|grep -i mysql启动mysql服务[root@suitianshuang /]# service mysql startRedirecting to /bin/systemctl start mysql.service查看mysql是否启动ps -ef|grep -i mysql终止mysql服务service mysql stop...

2021-02-20 11:34:12 212

原创 阿里云部署项目步骤

阿里云部署项目步骤1、rpm下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html2、如果有安装openjdk 则卸载[root@kuangshen ~]# java -versionjava version “1.8.0_121”Java™ SE Runtime Environment (build 1.8.0_121-b13)Java HotSpot™ 64-Bit Server VM (build 25.

2021-02-19 14:27:34 1064

原创 Linux系统常用命令

Linux系统常用命令cd 切换目录命令./ 当前目录cd … 返回上一级目录cd 目录名 (绝对路径都是以 / 开头的)cd /home/suitianshuangls 列出当前目录下的全部文件(一定Linux下是最常用的命令)ls -a 查看全部文件,包括隐藏文件ls -l 列出所有文件,包含文件的属性和权限,没有隐藏文件Linux 下的命令可以组合使用所以Linux -al 包含文件的属性和权限,包含隐藏文件pwd 显示当前所在的目录创建一个目录mkdirmkdir

2021-02-19 00:19:48 220

原创 linux下各文件夹的结构说明及用途介绍

linux下各文件夹的结构说明及用途介绍:/bin:二进制可执行命令。/dev:设备特殊文件。/etc:系统管理和配置文件。/etc/rc.d:启动的配 置文件和脚本。/home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示。/lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件。/sbin:系统管理命令,这 里存放的是系统管理员使用的管理程序。/tmp:公用的临时文件存储 点。/root:系统管理员的主目 录。

2021-02-18 22:23:31 349

原创 解决高并发问题的几点思路

解决高并发的几种思路高并发是什么可以这么理解高并发,在同一时间,有大量用户同时访问同一个URL,容易导致服务器和数据库资源被占满崩溃,数据库的存储和更新结果跟理想不一致,例如出现重复的数据记录,多次添加记录等数据错乱问题。高并发的处理策略服务器服务器可以做负载均衡集群,分摊系统的工作,减少单一服务器的资源负担数据库通过表设计防止并发导致数据错乱表设计成分库分表,分库减少单一数据库的负担,分表防止因数据量增多而降低数据库的性能数据库读写分离将数据存到redis缓存

2021-02-18 13:17:32 771

原创 MyBatis-Plus基础使用手册

MyBatis-PlusMyBatis-plus官网https://baomidou.com/@Mapperpublic interface AdminMapper extends BaseMapper<Admins> {}使用MyBatis-plus 只需要继承BaseMapperT 泛型需要制定要操作的实体类只需要继承了BaseMapper接口就可以使用它提供的方法MyBatis-plus 的BaseMapper接口内声明的方法//// Source co

2020-09-21 21:52:47 1170

原创 MyBatis将查询数据封装成map的写法

MyBatis将查询数据封装成map的写法返回一条记录的mappublic Map<String, Object> getEmployeeById(Integer id);<select id="getEmployeeById" resultMap="map"> select * from employee where id = #{id}</select>多条数据封装一个map//@MapKey注解:告诉MyBatis封装这个map的时候使用哪个属性作

2020-09-21 20:30:41 2670 1

原创 MyBatis中mysql 插入数据并返回自增主键和非自增主键的方式

mysql 插入数据并返回自增主键和非自增主键的方式MyBatis的insert操作,如何在插入数据的同时返回主键呢?分为两种情况,一种情况是该主键是自增主键,另一种情况是该主键非自增,接下来对两种情况详细解释。mysql支持自增主键,而Oracle不支持自增主键,在JDBC中可以使用getGeneratedKeys()方法获得自增主键。获取自增主键的值CompetitionMapper.java中的接口int createCompetition(Competition competition

2020-09-20 22:29:13 3197

原创 SpringBoot对静态资源的映射规则,WebMvcAutoConfiguration类源码分析

SpringBoot对静态资源的映射规则这段源码中配置了默认的静态资源路径@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)public class ResourceProperties { private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/"

2020-09-16 00:31:03 250

原创 SpringBoot日志原理,日志实现

SpringBoot日志原理,日志实现日志门面(日志的抽象层);logging-abstract.jar给项目中导入具体的日志实现就行了;我们之前的日志框架都是实现的抽象层市面上的日志框架日志门面选择:SLF4J(其他两个日志门面一个不适合、一个很久没有更新)日志实现选择:LogbackSpringBoot:底层使用Spring框架,而Spring框架默认使用的是JCL,SpringBoot选用SLF4J和Logback如何在系统中使用SLF4j以后开发的时候,日志

2020-09-15 20:59:16 945

原创 SpringBoot自动化配置的原理精髓

SpringBoot自动化配置的原理精髓SpringBoot启动会加载大量的自动配置类我们看自己需要的功能有没有SpringBoot默认写好的自动配置类我们再来看这个自动配置类中到底配置了哪些组件(只要我们要用的组件有,我们就不需要再来配置了)给容器中自动配置类添加组件的时候,会从properities类中获取某些属性,我们就可以在配置文件中指定这些属性的值xxxAutoConfigurartion:自动配置类;给容器中添加组件xxxProperties:封装配置文件中相关的属性;@Co

2020-09-15 20:11:13 492

原创 SpringBoot中指定使用不同的配置文件的几种方式

SpringBoot中指定使用不同的配置文件的几种方式property文件指定在配置文件中指定 spring.profiles.active = devyaml文件的写法指定在yaml中使用 — 符号,进行文档块分割,上方图片分为三个文档块,如果不指定激活哪一个就使用最上面的文档块作为默认的配置。命令行的方式指定打成jar包之后,在运行的时候指定使用的配置文件也可以虚拟机参数指定固定写法:-Dspring.profiles.active=dev...

2020-09-14 23:58:11 1024

原创 MyBatis接收多个参数,其中一个参数是集合,另一个参数是字符串的解决办法

周报 2020-09-14上周我按照详细设计编写代码,在这个过程中,我碰到了一个关于MyBatis框架的问题。当接口中抽象方法有两个参数,并且其中一个参数是集合,另一个参数是字符串,这种情况下,在xml文件中的parameterType应该如何写才能正确接收到参数。我在互联网上查询了之后又问了前辈,最终解决了问题,那就是将他们封装到HashMap中,在parameterType中接受Map类型的参数,然后使用Map的key来取出数据,使用动态SQL的foreach标签对list进行遍历。接口pub

2020-09-14 00:23:16 2300

原创 Optional类介绍、源码

啊啊啊

2020-09-13 23:43:46 263

原创 初识YAML语法,YAML语法小结 @ConfigurationProperties注解用法

YAML语法1. YAML基本语法:key: 空格value 表示一对键值对(空格必须要有)以空格的缩进来空值层级关系:只要是左对齐的一列数数据都是同一层级的。server: port: 8081 path: /hello属性和值也是大小写敏感的。2. 值的写法字面量:普通的值(数字,字符串,布尔)k: v 字面量直接来写字符串不用加上单引号或者双引号“”:双引号:不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。name:“zhangsan \n list”

2020-09-13 22:52:56 666

原创 MyBatis——使用 resultMap 配置一对一、一对多关系详解

MyBatis——使用resultMap 映射一对一、一对多问题详解 ##### 1. MyBaits简介> MyBatis 是一个优秀的持久层框架,它对 jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需 要花费精力去处理例如注册驱动、创建 connection、创建 statement、手动设 置参数、结果集检索等 jdbc 繁杂的过程代码。Mybatis 通过 xml 或注解的方 式将要执行的各种 statement(statement、preparedStat

2020-09-13 18:17:29 8058 1

原创 Jdk8——Stream API,创建、中间操作、终止操作详细说明

强大的Stream API1. Stream API说明Java8中最重要的两个改变一个是Lambda表达式,一个则是Stream APIStream API(java.util.stream)把真正的函数式编程风格引入Java中,这是目前为止Java类库最好的补充,因为Stream API可以极大的提供Java程序员的生产力,让程序员写出更高效、干净、优美、简洁的代码。Stream 是Java8中处理集合的关键概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数

2020-09-12 18:17:34 1340

原创 Java8新特性——Lembda表达式-> 和方法引用、构造器引用、数组引用 :: 的写法说明

Java8新特性——Lembda表达式package com.ntt.sts;import org.junit.Test;import java.util.Comparator;public class Test20200910 { @Test public void test(){ Runnable runnable = new Runnable() { @Override public void run()

2020-09-12 00:24:38 689

原创 Java中三种代理模式,静待代理、动态代理、Cglib代理

Java中三种代理模式,静待代理、动态代理、Cglib代理代理模式代理(Proxy)是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能.这就符合了设计模式的开闭原则,即在对既有代码不改动的情况下进行功能的扩展。举个例子来说明代理的作用:明星与经纪人之间就是被代理和代理的关系,明星出演活动的时候,明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解

2020-09-10 21:27:16 211

原创 反射的初步应用——静态代理以及动态代理例子

反射的应用:动态代理动态代理,在编译时候不指明代理类,而在运行时确定。静态代理:代理类和被代理类都是在编译期间就确定下来,这样不利于程序的拓展,同时每一个地阿里类只能为一个接口服务,这样一来程序开发必然会产生过多的代理,最好可以通过一个代理类完成全部的代理功能。动态代理和静态代理相比的优点:抽象角色中(接口)声明的所有方法都被转移到调用处理器一个集中的方法中处理,这样我们就可以更加灵活和统一的处理众多方法。静态代理举例:package com.ntt.sts;import

2020-09-10 20:58:37 279

原创 Java基础——对反射机制的初步理解,通过反射调用类的私有结构的方法

JAVA反射Java Reflection反射是被视为动态语言的关键,反射机制允许程序在执行期间借助Reflaction API取得任何类的内部信息,并且能直接操作任意对象的内部属性和方法。动态语言:是一类在运行时可以改变其结构的语言,例如新的函数、对象、甚至代码可以被引进,已有函数可以被删除或是其他结构上的改变,在运行时代码可以根据某些条件改变自身结构。除了静态语言。Object C php 等。静态语言,运行时候不能改变结构的原因,JAVA C++但是JAVA提供了反射机制。反射概

2020-09-08 00:07:05 434

原创 Java基础,基于TCP和UDP协议的Socket的使用方法

TCP的使用 @Test public void client() throws IOException { //创建socket对象,指明服务器的ip和端口号 InetAddress inetAddress = InetAddress.getByName("127.0.0.1"); Socket socket = new Socket(inetAddress,8899); //获取一个输出流,用于输出数据

2020-09-06 19:56:59 363

原创 RandomAccessFile的特性,以及应用场景

RandomAccessFileRandomAccessFile直接继承了Object类,实现了DataInput 和DataOutput接口它既可以作为输入流又可以作为一个输出流package com.ntt.sts;import org.junit.Test;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessF

2020-09-06 15:09:03 438

空空如也

空空如也

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

TA关注的人

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