- 博客(31)
- 资源 (1)
- 收藏
- 关注

原创 秒杀如何设计
高并发的系统架构都会采用分布式集群部署,服务上层有着层层负载均衡,并提供各种容灾手段(双火机房、节点容错、服务器灾备等)保证系统的高可用,流量也会根据不同的负载能力和配置策略均衡到不同的服务器上。下边是一个简单的示意图:负载均衡简介上图中描述了用户请求到服务器经历了三层的负载均衡,下边分别简单介绍一下这三种负载均衡:OSPF(Open Shortest Path First 开放式最短链路优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP)。OSPF通过路由器之
2021-10-13 16:43:46
181
原创 双数据源-->自定义注解
双数据源##################################################################################################################################spring:datasource:hikmall:name: hikmalltype: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.jdbc.
2022-03-14 15:20:18
450
原创 JDK8 Function用法详解最全
入口 Function<T,R>function是传一个参数返回一个参数 这个可以用场景总结一。集合遍历对于对象的处理等等一.原生的用法 实现接口public class FunctionObj implements Function { @Override public Object apply(Object t) { return "原生的用法实现接口"+t; }} public class Test { // p
2021-10-14 15:31:19
3930
原创 spring
@SpringBootApplicationSpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就会运行这个类的main方法来启动SpringBoot项目。########################################################################那@SpringBootApplication注解到底是什么呢,点进去看看:@Target({ElementType.TYPE})@Retention(
2021-02-20 18:18:50
89
原创 延迟队列发布
1、利用延迟队列延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到……应用场景比较多,比如延时1分钟发短信,延时1分钟再次执行等,下面先看看延时队列demo之后再看延时队列在项目中的使用:/** *延迟队列消息体 *消息体定义 实现Delayed接口就是实现两个方法即compareTo 和 getDelay最重要的就是getDelay 方法, 这个方法用来判断是否到期……
2021-02-20 18:17:41
137
原创 锁
import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.hikvision.common.constant.RedisCacheKeysConstants;import com.hikvision.common.enums.DefaultErrorCodeEnums;import com.hikvision.common.exception.CommonException;imp
2021-01-12 16:40:15
114
原创 lambda表达式
jdk8 lambda表达式https://blog.youkuaiyun.com/SilenceViking/article/details/102777398集合比较https://blog.youkuaiyun.com/qq_43437465/article/details/89437637
2020-12-07 17:51:08
96
原创 慎用ArrayList的contains方法,使用HashSet的contains方法代替
ArrayList的contains方法的源码,发现其最终会调用他本身的indexOf方法public int indexOf(Object elem) {if (elem == null) {for (int i = 0; i < size; i++)if (elementData[i]==null)return i;} else {for (int i = 0; i < size; i++)if (elem.equals(elementData[i]))return i;
2020-11-30 19:57:32
137
原创 使用wm_concat导致的性能问题及解决 wm_concat去重及字符超过4000太长 解决
sql类似如下selecta.ID as id,a.STUDENT as student,WM_CONCAT(SOURCE_ID) as sourceIdfrom ML_LEARN_SITU a left join ML_LEARN_SITU_REL_SOURCE b on a.ID=b.SITU_IDwhereLESSON_CODE=#{lessonCode,jdbcType=VARCHAR}group by a.id,a.STUDENT这里要按名称分组将其他三个值都拼接起来,返回的都是
2020-11-30 18:02:37
2883
原创 组合索引最左侧原则原理
https://blog.youkuaiyun.com/weixin_43268933/article/details/108505662?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduend~default-1-108505662.nonecase&utm_term=%E8%81%94%E5%90%88%E7%B4%A2%E5%BC%95%E7%9A%84%E6%9C%80%E5%B7%A6%E5%8E%9F%
2020-10-12 19:26:05
320
原创 定义队列
package com.wasu.iads.service.task;import com.wasu.iads.domain.QueueBean;import org.apache.log4j.Logger;import java.util.concurrent.LinkedBlockingQueue;/**@author : luchong@Description : 视频接口后台队列@CreateDate : 2018-08-07 Tue 20:01:41*/public
2020-09-24 23:06:42
141
原创 队列取数据
队列取数据package com.wasu.iads.service.task;import com.wasu.iads.domain.QueueBean;import com.wasu.iads.util.StringUtil;import org.apache.log4j.Logger;import org.springframework.stereotype.Service;import java.util.concurrent.LinkedBlockingQueue;import ja
2020-09-24 23:06:06
377
原创 SQL中IN和EXISTS用法的区别
结论in()适合B表比A表数据小的情况exists()适合B表比A表数据大的情况当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用.select * from Awhere id in(select id from B)以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录.它的查询过程类似于以下过程List resultSe
2020-09-11 15:22:25
97
原创 大批量数据高效插入数据库表
大批量数据高效插入数据库表 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。经过对MySQL InnoDB的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。1、一条SQL语句插入多条数据常用的插入语句如:INSERT INTO insert_table (datetime, uid, content, type) VALU
2020-09-11 14:06:46
591
原创 堆排序
上图,序列R{3,8,15,31,25}是个典型的小根堆。堆中的两个父结点3和8.元素3在数组中以R[0]表示,它的左孩子结点是R[1],右孩子结点是R[2]。元素8在数组中以R[1]表示,它的左孩子结点是R[3], 右孩子结点是R[4],父结点是R[0]。他们满足一下规律设当前元素在数组中以R[i]表示,那么(1) 它的左孩子是R[2*i+1](2) 它的右孩子是R[2*i+2](3)它的父结点是R[(i-1)/2]重要的点:首先,按堆的定义将数组R[0…n]调整为堆(这个过程称为创建
2020-09-10 18:07:08
108
原创 冒泡排序
原理:比较两个相邻的元素,将值大的元素交换至右端。思路:依次比较相邻的两个数,将小数放在前面,大数放在后面public class BubbleSort {public static void main(String[] args) { int[] arr={10,36,59,45,15,16,24,78,59,3}; bubbleSort(arr); System.out.println(Arrays.toString(arr));}public static void
2020-09-10 17:25:11
76
原创 选择排序
,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。import java.util.Arrays;public class SelectSort {public static void main(String[] args) {int [] arr = {49,38,6,97,76,13,27,49};selectSort(arr,arr.length);}public static void selectSort(int
2020-09-10 16:14:18
248
原创 插入法排序算法
package com.hikversion.controller.sort;public class Insert{public static void main(String[] args){int[] ins = {12,23,45,1,23,6,78,34};int[] ins2 = sort2(ins);for(int in: ins2){System.out.println(in);}}public static int[] sort(int[] ins){ for(
2020-09-10 15:28:03
299
原创 spring
5、BeanFactory和ApplicationContext有什么区别? BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。(1)BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。ApplicationContext接
2020-09-09 17:36:57
71
原创 通过实现类手写动态代理
package com.hikversion.controller;import org.springframework.cglib.proxy.Enhancer;import org.springframework.cglib.proxy.MethodInterceptor;import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class TestMethodInterc
2020-09-09 16:06:11
111
原创 通过接口手写动态代理
package com.hikversion.controller;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import org.springframework.aop.framework.ProxyFactory;public class TestMethodInterceptor {public static void main(S
2020-09-09 16:01:15
106
原创 springboot
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?1.configuration 告诉我们这个类是个配置类2.enableautoConfiguration 告诉SpringBoot开启自动配置功能;这样自动配置才能生效@AutoConfigurationPackage:自动配置包@Import: 导入自动配置的组件@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplica
2020-09-08 18:05:44
85
原创 事物的传播行为
1.在外围方法未开启事务的情况下Propagation.REQUIRED修饰的内部方法会新开启自己的事务,且开启的事务相互独立,互不干扰。2.在外围方法开启事务的情况下Propagation.REQUIRED修饰的内部方法会加入到外围方法的事务中,所有Propagation.REQUIRED修饰的内部方法和外围方法均属于同一事务,只要一个方法回滚,整个事务均回滚.抛出异常或者异常捕获到都回滚3.在外围方法未开启事务的情况下Propagation.REQUIRES_NEW修饰的内部方法会新开启自己的事务,
2020-09-07 16:10:34
305
原创 redis
怎么保证redis里面的数据都是热点数据?1.当redis内存到设置最大内存的时候,会触发redis的key淘汰机制redis 的淘汰机制大概有哪些呢?a.不删除直接报错b.随机删除keyc.从数据集中删除一些不常用的keyd.在设置了超时时间的key中随机删除e.在设置了超时时间的key中删除一些不常用的keyf.在设置了超时时间额key中删除快到期的key数据库中有1000w的数据,而redis中只有50w数据,如何保证redis中10w数据都是热点数据?1.在所有key中优先删除最
2020-09-07 15:09:45
67
原创 springcloud
1.REST和RPC的区别RPC1.服务消费者和服务提供者耦合性太高,我们要为每个微服务进行接口定义。服务提供者和调用者要严格控制版本才能避免发生冲突错误2.rpc需要一个注册中心3.比如 user是一个客户端,如果想要远程调用的时候,实际上是调用本地的user-stub,user-stub的作用就是将负责调用的接口,方法,参数.通过约定的协议按照规范进行编码通过调用本地的RPCRuntime实例传输到远程实例,远程的RPCRuntime实例收到请求后交给Server-stub后进行解码,最后发起本
2020-09-07 14:58:07
80
原创 Oracle(常用函数一)
新的博客欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全...
2020-09-04 16:36:15
196
原创 导出02
/*** 导出房屋*/@Overridepublic void downloadHouses(List baseHouses, HttpServletResponse response)throws BusinessException {ExportExcelByBean exportExcelByBean = new ExportExcelByBean<>();List...
2019-12-05 21:25:15
88
原创 导出01
/**Copyright 2017-2025 Evergrande Group.*/package com.eg.egsc.scp.mdm.component.util;import com.eg.egsc.scp.mdm.component.exception.BusinessException;import org.apache.poi.hssf.usermodel.HSSFCe...
2019-12-05 21:22:56
111
原创 导出文档
/*** 导出房屋*/@Overridepublic void downloadHouses(List baseHouses, HttpServletResponse response)throws BusinessException {ExportExcelByBean exportExcelByBean = new ExportExcelByBean<>();List...
2019-12-05 21:18:26
266
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人