自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Git创建分支以及合并

1.拉取主干git pull origin master2.在master上创建分支并切换git checkout -b dev master3.添加提交代码git add .git commit -m "comment"4.合并分支到主干git checkout master //先切换到主分支git merge dev //合并dev分支到master5.更新到远程仓库git push origin master...

2021-01-14 14:06:06 310

原创 java多线程打印问题

题目创建两个线程,一个输出1-52,一个输出A-Z,输出格式:12A 34B 56C 78D…解法使用object超类的wait和notify方法。/** * @author hht * @date 2020/10/15 15:00 */public class thread { public static void main(String[] args) { //创建一个对象,给两个线程共享 Object lock=new Object();

2020-10-15 15:33:48 404

转载 二进制中1的个数

题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。代码public class Solution { public int NumberOf1(int n) { int count = 0; while(n!= 0){ count++; n = n & (n - 1); } return count; }}思想分析一下代码: 这段

2020-10-14 18:35:22 191

原创 不用加减乘除做加法

题目不用加减乘除做加法:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。考点:进制转化思路异或运算时,相同时则为0,不同时则为1,相当于二进制相加,但是如果两个都为1,相当于缺少了进位,得出的是0而不是100^001^011^100^11所以这里需要&按位与运算后,并左移一位,来取得进位,如:1&1=1,左移一位变成10。实现思路为:1.异或运算,未进位相加得到sum1=(a^b)2.与运算并左

2020-10-13 15:17:21 141

原创 SpringSecurity前后端分离登录返回Json字符串

1.SpringSecurity配置类/** * @author hht * @date 2020/9/23 13:17 */@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired IUserService userService; @Override protected void configure(HttpSecurity htt

2020-10-10 22:00:56 1218

原创 阿里云用docker部署tomcat

1.拉取tomcat镜像使用指令docker pull tomcat 直接拉取最新的tomcat镜像,然后docker images查看镜像2.开启tomcat使用指令开启tomcat容器docker run -d -p 8080:8080 --name tomcat -v /root/webapps:/usr/local/tomcat/webapps tomcat-d:后台运行-p:端口映射–name:命名-v:路径映射,这里将本地的root路径下的webapps文件夹映射容器中的we

2020-10-08 15:53:39 448

原创 阿里云服务器使用docker开启tomcat后主页404

在阿里云上直接用docker拉取了最新版本的tomcat后,开启镜像之后,在外网访问主页发现提示404,然后在服务器上输入docker exec -it tomcat bash进入到tomcat容器中的文件夹中,然后又进入到webapps文件夹中,发现里面就只有一个test文件夹,这个test文件夹还是个空的。然后看到tomcat文件夹中有一个webapps.dist的文件夹,进去看了看发现都在这个文件夹里面。然后把这个叫做webapps.dist的文件夹重新命名为webapps后,重启容器

2020-10-08 15:02:29 169

原创 SpringBoot事务管理

文章目录1.Spring中的事务2.事务的传播行为(propagation behavior)3.事务的隔离级别(isolation level)4.SpringBoot中使用事务管理1.Spring中的事务Spring并不直接管理事务,而是通过各种事务管理器来调用特定平台的事务实现,用户在使用事务时不需要关心底层的实现。针对各个持久化场景,Spring提供了各个事务管理器,他们都继承了AbstractPlatformTransactionManager,实现了ResourceTransactionMa

2020-10-06 16:06:22 561

原创 Mybatis多表联查List集合只有一个值

问题描述查询user表的时候,联查role表,role是一个list集合,数据库有两个值,但是查询出来只有一个值。<resultMap id="ItemResult" type="com.hht.csgo.domain.MyUser"> <id property="id" column="id"/> <result property="username" column="username"/> <result pr

2020-09-24 12:00:48 808

原创 折半查找算法

什么是折半查找算法?在一个有序数组中查找某一元素,确定一个中间位置,如果大于该中间数,则在右边查找,如果小于,则在左边查找c++代码:#include "iostream"using namespace std;int search(int arr[],int size,int num){ int l = 0;//初始化头部下标 int h = size-1;//初始化尾部下标 int mid;//数组中间位置 while (l <= h){ mid = (l + h) .

2020-09-03 23:22:54 388

原创 算法设计复习之概念和问答

算法算法是指解决问题的准确方法或步骤。时间复杂度算法的时间复杂度,是用来衡量算法的运行时间,记做O(f(N)),算法执行的时间的增长速度可以用f(N)表示。贪心法贪心法就是在每一步选择中都做最好的选择,从而希望结果是最好的算法。分治法将一个难以解决的大问题,分割成多个较小的相同问题,逐个击破。搜索算法搜索算法是指利用计算机的高性能来有目的地穷举一个问题的部分或全部解决方法,从而求出问题的解。递归递归是指在一个方法函数中直接或者间接的调用自身。算法分析指对一个算法所需要的计算时间和存

2020-09-03 22:53:04 518 4

原创 冒泡排序与快速排序算法代码

冒泡排序#include "iostream"using namespace std;void sort(int arr[], int size){ for (int i = 0; i < size - 1; i++){ for (int j = 0; j < size - i - 1; j++){ if (arr[j]>arr[j + 1]){ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j +

2020-09-03 00:39:39 235

原创 SpringCloud(11)使用Bus消息总线

目录0.什么是Bus?1.安装RabbitMQ消息中间件2.使用Bus广播刷新多个客户端的config配置0.什么是Bus?SpringCloud Bus是讲分布式系统的服务节点和轻量级消息系统连接起来的框架,它整合了java的事件处理机制和消息中间件的功能,目前支持RabbitMQ和kafka两种消息中间件。什么是总线?在微服务系统中,通常会用轻量级的消息系统去构建一个共同的消息主题,并让微服务中的所有服务实例链接上来。由于该主题中的产生的消息会被所有的实例监听和消费,所以叫做消息总线,在总线

2020-08-28 23:40:48 269

原创 SpringCloud(10)使用SpringCloud Config配置中心

目录0.什么是SpringCloud Config1.配置Config的服务端0.什么是SpringCloud Config在微服务架构中,有一堆各种微服务,粒度很细,如果一个一个的进行配置application.yml,那么工程量是非常巨大的,springcloud config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个集中的外部配置1.配置Config的服务端①创建一个github仓库,并创建配置文件上传到仓库首先创建三个yml文件,然后

2020-08-27 01:05:07 256

原创 SpringCloud(9)使用Gateway作为网关

目录0.Gateway与Zuul的区别1.Gateway的核心概念与工作流程2.开始使用Gateway0.Gateway与Zuul的区别Zuul 1.x是基于阻塞I/O的API GatewayZuul 1.x基于servlet 2.5阻塞式架构,它不支持任何长链接(如Websocket)Zuul的设计理念与Nginx相似,每次I/O操作都会从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,Nginx用C++实现,Zuul则使用Java实现,JVM本身第一次加载较慢,所以Zuul的性能要差一些。

2020-08-25 01:09:24 189

原创 解决Hystrix Dashboard出现Unable to connect to Command Metric Stream错误

我用的springboot是2.3.2版本,springcloud为H版SR7最新版在网上查看很多解决方法都说到,在被监控的项目中,注册ServletRegistrationBean到容器中,如下:@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClient@EnableCircuitBreakerpublic class CloudProviderHystrixPayment8011Application { publ

2020-08-19 03:41:37 1485 4

原创 SpringCloud(8)Hystrix的使用

0.什么是HystrixHystrix是一个用于处理分布式系统中的延迟和容错的开源库,在分布式系统中,很多依赖会不可避免的出现调用失败的情况,如超时、异常等,Hystrix可以保证一个依赖出现问题的时候,不会导致整体的服务出错,避免了级联故障,避免出现链式影响,提高分布式系统的弹性“断路器”本身是一个开关装置,当某个服务单元出现故障后,通过断路器的故障监控(类似熔断保险丝),来向调用方返回一个备选的可处理的响应(FallBack),而不是去长时间的等待,或者是返回一个调用方无法处理的异常,这样能够保证调

2020-08-18 02:07:28 342

原创 Hystrix的HystrixCommand配置参数

@HystrixCommand注解是一个包含@HystrixProperty注解的数组,HystrixProperty 由 name 和 value 两个属性,数据类型都是字符串,下面是所有的HystrixProperty解析,参考官方wiki。Execution这些配置决定了,HystrixCommand如何去执行。execution.isolation.strategy指示使用哪种隔离策略,有两种:thread(线程池,默认)并发请求受到线程池最大线程限制,semaphore(信号量)受到信

2020-08-18 01:14:25 1370

原创 SpringCloud(7)OpenFeign服务调用

0.Feign的介绍开发微服务,免不了需要服务间调用。Spring Cloud框架提供了RestTemplate和FeignClient两个方式完成服务间调用,之前一直是使用restTemplate+Ribbon负载均衡进行服务调用。使用Feign之后,可以简化web服务的调用,可以在接口上加入注解,即可使用服务什么是OpenFeign?OpenFeign就是SpringCloud对Feign的基础上添加了对Spring MVC的注解支持1.依赖导入 <!--OpenFeign--&g

2020-08-16 00:07:12 186

原创 SpringCloud(6)使用Ribbon负载均衡

1.依赖导入<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.4.RELEASE</version></dependency>当使用Eureka作为注册中心时,新版的eureka依赖包中是

2020-08-13 02:53:51 97

原创 SpringCloud(5)使用Consul做为注册中心

0.Consul能做什么服务发现-提供HTTP和DNS两种发现方式健康监测-支持多种方式,HTTP、TCP、Docker、Shell脚本定制化KV存储-Key、Value的存储方式多数据中心-Consul支持多数据中心可视化web界面1.Consul的安装官网下载地址下载完成后,直接解压出来,然后cmd转到此目录下直接输入consul.exe,会出现以下情况,代表安装成功:然后输入consul agent -dev即可开启本地服务,默认端口是8500开启后,输入网址localho

2020-08-12 02:21:03 181

原创 SpringCloud(4)使用Zookeeper做为注册中心

1.安装Zookeeper注册中心安装教程2.导入Zookeeper客户端依赖 <!--zookeeper client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId&

2020-08-12 01:27:45 250

原创 SpringCloud(3)Eureka服务集群搭建以及服务发现

1.添加本地域名映射打开host文件,路径如下:添加以下配置,然后保存#eureka ip127.0.0.1 eureka7001.com127.0.0.1 eureka7002.com2.新建第二个eureka服务模块,并修改两个eureka服务的yml配置文件导入的依赖跟第一个eureka服务模块的相同,修改两个模块的yml配置文件,让他们的服务地址互相改为对方的地址,形成互相注册,互相守望的效果,并且修改hostname为刚才设置的本地域名。7001端口的服务yml配置如下:s

2020-08-11 00:00:20 156

原创 SpringCloud(2)使用eureka注册中心

首先,是eureka的工作原理图服务提供者和消费者都相当于是Eureka client,Eureka Server则是充当注册中心的角色1.配置Eureka服务新建一个springboot项目,并导入依赖,要注意,导入的eureka服务依赖一定要是Spring-cloud-starter-netflix-eureka-server <dependency> <groupId>org.springframework.boot</groupId&

2020-08-09 02:20:10 131

原创 SpringCloud(1)创建服务提供者与消费者

11

2020-08-09 01:07:35 123

原创 springboot商品秒杀系统遇到的高并发问题

基于springboot开发的商品秒杀系统所遇到的高并发问题使用jmeter进行测试所遇到的各种高并发带来的问题:原始业务代码:/** * 测试用下单 * @param itemId 商品id * @param userId 用户id * @return true false */ @Override public boolean testKill(Long itemId, Long userId) { SecItem

2020-07-27 02:05:41 533

原创 redis获取到的List对象,出现java.lang.ClassCastException异常

问题描述从redis获取到的List对象,在对这个对象进行遍历的时候,出现类型转换异常ClassCastException,调试后发现,获取到的items对象其实是JSONArray,数组元素都是JSONObject对象。解决方法@Override public SecItem selectItemByItemId(Long itemId) { List<SecItem> items = JSON.parseArray(JSON.toJSON(selectAll

2020-07-26 02:41:24 1223

原创 thymeleaf中onclick方法传值

在springboot2.3.0中,发现下面这种方式不能正常传值:<button class="btn btn-primary" th:onclick="'pay('+${order.orderId}+')'">支付</button>改为使用下面的方式后,正常传值:<button class="btn btn-primary" th:onclick="pay([[${order.orderId}]])">支付</button>...

2020-07-22 01:14:22 690

原创 RabbitMQ使用死信队列解决订单超时

1.什么是死信队列(DLX)?DLX,Dead Letter Exchange 的缩写,又死信邮箱、死信交换机。DLX就是一个普通的交换机,和一般的交换机没有任何区别。当消息在一个队列中变成死信(dead message)时,通过这个交换机将死信发送到死信队列中死信的条件:消息被否定确认,使用 channel.basicNack 或 channel.basicReject ,并且此时requeue 属性被设置为false。消息在队列的存活时间超过设置的TTL时间。消息队列的消息数量已经超过最大

2020-07-18 03:48:12 2103 1

原创 SpringBoot使用配置类映射yml配置文件信息

导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>创建自己的配置映射类使用configurationProperties注解并指明在配置文件中的

2020-07-16 01:15:33 2083

原创 SpringBoot整合RabbitMQ

0.RabbitMq安装不多介绍rabbitmq的安装过程,RabbitMq基于erlang开发,所以安装Rabbitmq之前需要先安装对应版本的erlang。rabbitmq下载地址:https://www.rabbitmq.com/install-windows.htmlerlang下载地址:https://www.erlang-solutions.com/resources/download.html安装完,打开localhost:15672,使用guest,guest可登录rabbitmq,

2020-07-15 02:32:04 588

原创 SpringSecurity踢出指定用户

SpringSecurity中可以使用 SessionRegistry 的实现类 SessionRegistryImpl 来获取session相关信息,可以通过这个实现类来踢出用户。SpringSecurity配置@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired ISysUserService userService; @Overri

2020-07-05 01:03:34 4105

原创 SpringSecurity自定义logoutHandler时无法注入spring容器内的组件

无法注入bean的问题注入redistemplate的时候,发现一直出现空指针异常,调查后发现,springsecurity中addLogoutHandler方法添加自定义的logoutHandler是属于filter,而springmvc的启动顺序如下:web项目启动的时候,优先读取web.xml文件,并且先找到listener和context-param两个节点创建一个ServlextContext上下文,并解析context-param节点,存入上下文中创建listener实例,并执行lis

2020-06-30 02:23:23 2152 1

原创 springboot远程连接docker中使用哨兵集群模式的redis,获取到的主数据库是内网ip的问题

用springboot连接哨兵获取主服务器ip时发现,返回的是内网的ip和端口,在主机和两个从机的配置文件上加上以下配置slave-announce-ip <直接写上服务器外网ip>slave-announce-port <docker映射的本机端口>我的redis主服务器配置slave-announce-ip <外网ip>slave-announce-port 1210从机1slave-announce-ip <外网ip>slave-an

2020-06-29 03:27:08 1493 3

原创 缓存穿透、缓存击穿、缓存雪崩

缓存穿透什么是缓存穿透?缓存穿透是指查询的数据,在redis数据库中没有,也就是缓存未命中,然后去到持久层数据库中查询,数据还是没有,然后当大量查询空数据的情况出现,会给持久层数据库造成巨大的压力,就会造成缓存穿透的情况。(相当于一直查询没有的空数据)如何解决缓存穿透?1.使用布隆过滤器布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。2.缓存空对象

2020-06-27 03:06:37 84

原创 Redis哨兵模式和使用docker来配置

什么是哨兵模式?(Sentinel)       在普通的主从复制模式中,当主服务器宕机了故障了,需要手动将从服务器转换为主机。哨兵模式就是创建一个哨兵进程用来监控各个服务器的状态,通过向服务器发送命令,等待服务器响应,来判断这个服务器是否正常,当master主服务器不正常的时候,会自动选择一个slave从服务器变成主服务器,然后通过订阅模式通知其他服务器,来更换主机。     &n

2020-06-27 02:09:49 149

原创 docker上搭建redis的主从复制环境

使用conf文件启动下面是具体的目录结构,使用一个主机 ,两个从机然后运行redis,使用docker的时候可以只改变本机映射的端口,redis端口可以都是6379#主库docker run -d --name myredis -p 1210:6379 -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data redis /etc/redis/redis.conf#从库1docke

2020-06-26 02:37:48 125 2

原创 Redis中RDB和AOF两种持久化方式区别

1.RDB(Redis DataBase)什么是RDB?在指定的时间间隔内,将内存中的数据写入到磁盘中来实现持久化功能。恢复时,将磁盘中的rdb文件写入到内存中来实现恢复。相当于一个快照的功能RDB的过程会fork一个子进程来执行RDB持久化的过程,在对数据添加修改时,会将数据先写入到一个临时的rdb文件中,当完成持久化过程后,会将这个临时文件替换掉原来的磁盘内的rdb文件。在这个过程中,父进程只负责处理redis的一些操作,不涉及IO操作,只有子进程来进行IO操作RDB的时间间隔和触发机制1

2020-06-26 01:07:08 578 2

原创 docker使用配置文件启动redis

先拉取一个镜像docker pull redis使用配置文件启动redisdocker run -d --name myredis -p 1210:6379 -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data redis /etc/redis/redis.conf其中-d是后台运行-p是端口映射,将本机的指定端口映射到容器的指定端口–name是设置一个名字,便于操作容

2020-06-25 23:24:11 290

原创 Redis事务

Redis事务的本质Redis的事务是一组命令的集合,一个事务中的命令会被序列化,按照顺序去执行,具有一次性,排他性,顺序性的特点去执行一系列命令Redis事务没有隔离级别Redis的单条命令是原子性的,但是事务不是原子性的命令在事务中不会直接执行,只有发起执行命令,才会顺序执行Redis事务的过程开启事务(mutli)命令入队执行事务(exec)放弃事务的指令 Discard事务会有两种异常编译时异常,命令错误的时候,其他命令也不会执行运行时异常,只是语法问题,但是命令

2020-06-24 02:01:35 70

空空如也

空空如也

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

TA关注的人

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