
思路
思路
小熊123~
优秀是一种习惯
展开
-
钉钉群消息提醒
钉钉群消息提醒原创 2024-08-27 11:13:15 · 429 阅读 · 0 评论 -
雪花算法生成出库单号
/** * 用来生成平台设备出库单号 * 因服务器Ip为192.168.0.101-192.168.0.106,故后俩位在101-106之间,10位机器位从0-2^10(1024) * 当机器ID占10位,数据中心占0位,初始时间为2012-02-02,可以保证从2020年7月30日一直用到2080年7月30日,且生成的id均为19位正整数 */@DubboService(interfaceName = "snowFlakeIDGenService", group = "sys-erp"..原创 2020-08-13 11:43:54 · 331 阅读 · 0 评论 -
微信支付(PC扫码支付和H5公众号支付)
最近在做微信支付,微信支付比较坑,官方居然只有.NET、C#、PHP的demo居然没有java的demo。然后微信支付是不提供测试账号的需要直接用正式的公众号。首先来介绍下微信扫码支付吧,微信扫码有两种方式,这里采用第二种方式统一下单(JSAPI)。需要提前在微信公众号后台申请微信支付开通,具体的开通规则详细文档见点击打开链接其实微信支付挺简单的无非就是拼装参数给微信发送请求,要注意的几点就是支付的金额是分,微信没有同步回调地址,只有异步回调的地址。这样的话就不能实时反馈支付结果到PC端页面。网上大多数原创 2021-01-20 17:48:03 · 1034 阅读 · 0 评论 -
设计模式在外卖营销业务中的实践
原文链接策略模式//定义一个策略接口public interface Strategy { void strategyImplementation();}//具体的策略实现(可以定义多个具体的策略实现)public class StrategyA implements Strategy{ @Override public void strategyImplementation() { System.out.println("正在执行策略A");转载 2021-01-19 15:09:39 · 88 阅读 · 0 评论 -
HttpClient工具类
原文链接文章目录 1. 什么是HttpClient 2. 功能介绍 3. 版本比较 4. HttpClient不能做的事情 5. HttpClient使用流程 6. HttpClient工具类 6.1 添加依赖 6.2 编写spring-boot启动类 6.3 编写get和post请求测试controller 6.4 创建httpClient响应结果对象 6.5 重点,编写httpclient工具类 6.6 启动spring-boot,测转载 2021-01-21 09:50:09 · 3700 阅读 · 0 评论 -
shiro限制单用户并发访问数
https://blog.youkuaiyun.com/qq_33556185/article/details/51744004原创 2021-05-19 17:46:16 · 253 阅读 · 0 评论 -
shiro漏洞处理
自动生成“记住我”的加密秘钥 <!-- rememberMe管理器 如需要记住功能 可删掉相关配置 --> <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager"> <!-- rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)--> <!--<.原创 2021-05-19 16:59:52 · 504 阅读 · 0 评论 -
前后端参数加解密方案
前后端参数加解密方案简介HTTP信息传输总会遇到参数被劫持进行二次传输的尴尬境地,为了避免这种情况,建议在前端请求的时候对上行参数进行加密传输,后端再进行解密,防止信息被盗取知识点前端: 框架采用VUE.JS,加密可以选用方案较为完善的CryptoJS本文采用CryptoJS其中的aes加密方案为例 后端: 也采用对应的aes加密进行参数解析准备前端用npm进行安装npm install crypto-js这时项目的package.json中就会引入crypto-js.转载 2020-12-10 17:05:26 · 2635 阅读 · 1 评论 -
RSA(加密解密、签名验签)
加密解密(公钥加密,私钥解密)签名验签(私钥加签,公钥验签)//生成公钥私钥KeyPairs key = RSAEncryption.initKey();String publicKey = key.getPublicKey();String privateKey = key.getPrivateKey();System.out.println("公钥:"+publicKey);System.out.println("私钥:"+privateKey);System.out.pri原创 2021-01-26 17:29:07 · 370 阅读 · 0 评论 -
Jackson自定义序列化器(针对null,针对指定name的属性)
public class JsonObjectMapper extends ObjectMapper { /** * */ private static final long serialVersionUID = 8034942567620323925L; public JsonObjectMapper() { super(); this.setSerializerFactory(this.getSerializerFactory().withSerializerMod...原创 2021-01-26 15:33:13 · 768 阅读 · 0 评论 -
发邮件(excel附件)
@Autowiredprivate JavaMailSender mailSender;#根据数据创建excelInputStream inputStream = builtExcel(voList);private InputStream builtExcel(List<MonthlyKeywordEmailVO> voList) { //创建工作簿 XSSFWorkbook xssfWorkbook = new XSSFWorkbook(); //创建工作表 XSSFSh.原创 2022-02-22 16:11:07 · 684 阅读 · 0 评论 -
分环境加参数
分环境参数#resource/dev/config/proxy.propertiesproxy.enabled=falseproxy.hostName=192.168.0.117proxy.port=1080#resource/test/config/proxy.propertiesproxy.enabled=trueproxy.hostName=172.17.75.90proxy.port=3128PropertyUtil类(Properties类加载properties参原创 2021-05-19 17:06:47 · 174 阅读 · 0 评论 -
日志链路追踪
LogInterceptorpackage cn.com.autoax.config;import com.sun.istack.internal.Nullable;import org.slf4j.MDC;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.ht.原创 2021-08-24 16:31:22 · 218 阅读 · 0 评论 -
解决sql注入和xss漏洞
WebMvcConfig.javaregistry.addInterceptor(new SqlInjectInterceptor()).addPathPatterns("/**");SqlInjectInterceptor.java@Componentpublic class SqlInjectInterceptor implements HandlerInterceptor{ @Override public void afterCompletion(HttpSer.原创 2021-05-17 22:00:12 · 657 阅读 · 0 评论 -
jackson适配fastjson写法的代码
public class JSON { private static ObjectMapper mapper; static { mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.原创 2021-01-24 13:10:10 · 336 阅读 · 0 评论 -
设计一个高并发系统
系统拆分 一个系统拆成多个子系统,用dubbo。每个系统连一个库。缓存 读多写少的场景用缓存MQ 削峰读写分离分库分表ES原创 2020-12-23 16:48:03 · 115 阅读 · 1 评论 -
防重设计
如何做一个防重设计前言在业务设计中防重设计是一个关键点,以接口设计为例,防重就是防止接口被多次调用而产生脏数据,比如支付订单出现重复支付,所以说防重至关重要,在如何防重之前我们首先看一下是如何出现重复请求的。何时出现多次调用多次调用接口的出现有主观原因比如:人为的重复请求攻击,用户的误操作等;也有客观原因比如:为了健壮性进行超时重试;重复请求攻击对于这种恶意攻击,其实已经属于安全范畴了,我们可以通过黑名单+限流来处理,下一步再考虑防重处理;用户的误操作比如用户在界面点击提交按钮,转载 2020-12-10 17:59:43 · 584 阅读 · 1 评论 -
利用反射调用方法_原创工具类
/** * 通过全限定类名调用静态方法 * * @param clazzPath * @param clazzName * @param methodName * @param parameterTypes * @param parameters * @return java.lang.Object * @author xx * @date 2020/8/13 10:38 */private static Object invokeStaticMethod(String claz..原创 2020-08-13 10:58:43 · 674 阅读 · 0 评论 -
利用gson将PageInfo<Bean>转为PageInfo<OutputBean>
//pageInfo转outputPageInfo PageInfo<AdvertPageListOutputBean> outputPageInfo = new GsonBuilder().registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { public Date deserialize(JsonEleme...原创 2020-08-13 11:32:50 · 578 阅读 · 0 评论 -
CPU100%解决思路
jps 列出了当前系统中存在的java进程top -p 3618 这里的3618是上一行返回的进程idjstat -gcutil 18862 2000 20 输出进程ID为3618的内存使用情况(每2000毫秒输出一次,一共输出20次)jstack 6400 > stack.out 导出线程栈...原创 2020-08-21 17:30:54 · 741 阅读 · 0 评论 -
分批执行大批量数据
List dataList = new ArrayList();for(int i=0;i<999;i++) dataList.add(4);int splitSize = 500;int arryLength = dataList.size();int result = 0;int group = 0;if (arryLength % splitSize != 0) { group = 1;}result = arryLength / splitSize;result.原创 2021-01-20 17:44:13 · 581 阅读 · 0 评论 -
批量生成连续的n个满足000000~ZZZZZZ(不包含4)的号
/** * SN号生成器 */public class RescueSnUtil { /** 救助牌号正则 */ private final static String SN_REGEX = "^[012356789A-Z]{6}$"; /** 救助牌号组成 */ private final static String[] SN_ARR = new String[]{"0","1","2","3","5","6","7","8","9","A","B","C","D".原创 2020-12-31 10:10:19 · 897 阅读 · 0 评论 -
Websocket推送实时工单报警
/** * @ClassName WebsocketDemo * @Description 给所用户所有终端推送消息 * @Author xx * @Date 2019/8/6 15:47 * @Version 1.0 *///websocket连接URL地址和可被调用配置@ServerEndpoint(value = "/websocketDemo/{userId}", configurator = SpringConfigurator.class)public class Webso.原创 2020-12-22 14:02:18 · 297 阅读 · 0 评论 -
自定义分页
/** * 自定义分页 * * @param list * @param pageNum * @param pageSize * @return com.github.pagehelper.PageInfo<T> * @author xx * @date 2019/12/30 12:42 */public <T> PageInfo<T> customPaging(List<T> list,int pageNum,int pageSize).原创 2020-10-22 10:33:16 · 253 阅读 · 0 评论 -
分布式全局ID生成策略
方案一(UUID):import java.util.UUID;public class UuidUtil { public static String getUUid() { UUID uuid = UUID.randomUUID(); return String.valueOf(uuid).replace("-",""); }}方案二(雪花算法):/** * 雪花算法ID生成 */public class SnowIdWorker原创 2020-10-20 15:23:10 · 178 阅读 · 0 评论 -
redis中key过期监听
/** * redis中key过期监听(床垫不在床时间 channelRedisService的2号database) */// @Component@Transactional(rollbackFor = RuntimeException.class)public class RedisKeyExpiredNotOnBedMinutesListener { private final Logger LOGGER = LoggerFactory.getLogger(RedisKeyEx.原创 2020-08-13 11:38:22 · 533 阅读 · 0 评论 -
10亿级订单系统分库分表设计思路!
10亿级订单系统分库分表设计思路!一、背景随着公司业务增长,如果每天1000多万笔订单的话,3个月将有约10亿的订单量,之前数据库采用单库单表的形式已经不满足于业务需求,数据库改造迫在眉睫。二、订单数据如何划分我们可以将订单数据划分成两大类型:分别是热数据和冷数据。 热数据:3个月内的订单数据,查询实时性较高; 冷数据A:3个月 ~ 12个月前的订单数据,查询频率不高; 冷数据B:1年前的订单数据,几乎不会查询,只有偶尔的查询需求; 可能这里有个疑惑为什么要将冷原创 2020-12-15 11:05:04 · 830 阅读 · 1 评论 -
json全局序列化(包含各种类型null自定义序列化器)
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value.原创 2020-08-13 11:52:54 · 1010 阅读 · 1 评论 -
第三方接口(http协议)
String requestUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";requestUrl = requestUrl.replace("ACCESS_TOKEN", wechatUser.getAccessToken());requestUrl = requestUrl.replace("OPENID", wechatUser.getWechatOpenId()..原创 2020-08-28 10:51:23 · 393 阅读 · 0 评论 -
使用ScheduledExecutorService实现异步几分钟后执行且只执行一次
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());executorService.schedule(new Runnable() { @Override public void.原创 2020-09-08 11:30:56 · 3032 阅读 · 2 评论 -
json,bean互转工具类(fastjson的体验,达到Jackson的效果)
public class JacksonUtils { private static ObjectMapper mapper; static { mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.configure(SerializationFeature.FAIL_ON_EMPTY.原创 2020-08-13 12:04:26 · 257 阅读 · 0 评论 -
properties文件获取工具类
/*** properties文件获取工具类*/public class PropertyUtil { private static Properties props; static { loadProps(); } synchronized static private void loadProps(){ System.out.println("开始加载proxy.properties文件内容......."); ...原创 2020-08-13 12:00:08 · 217 阅读 · 0 评论 -
红包随机算法思路
入参: 最小红包min 最大红包max 红包总额total 红包数量count思路: 先预留count份min 其余的做随机原创 2020-09-08 14:15:36 · 317 阅读 · 0 评论 -
生成一定范围内随机数
/** * 随机俩位小数 * * @param minBigDecimal 最小俩位小数 * @param maxBigDecimal 最大俩位小数 * @return java.math.BigDecimal * @author xx * @date 2020/9/2 14:30 */private static BigDecimal getRandomBigDecimalTwoScale(String minBigDecimal,String maxBigDecimal){ int.原创 2020-09-03 16:57:29 · 214 阅读 · 0 评论 -
日志log4j2.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE xml><configuration status="ALL" monitorInterval="30"> <properties> <property name="LOG_HOME">${sys:catalina.home}/logs</property> <property name="LOG_INFO_FILE_.原创 2020-08-15 08:49:09 · 223 阅读 · 0 评论 -
秒杀场景
秒杀基本逻辑: 用户点击下单按钮,然后会进过一次查询商品,生成订单,锁定指定商品,支付回调,扣减库存,更新订单状态,秒杀业务完成。幂等: 支付回调要做幂等。限流: 点击按钮一次之后,按钮置灰,需要等待个三四秒之后才能再次请求,这一部分由前端的js来控制。 对于一些恶意攻击的黑客而言,可能会从js中看到按钮请求的url,因此url也需要做拦截,我当时给出的方案是在url上边加一个和用户绑定关系的校验参数(类似于token),每次请求的时候会在redis中存储对应的.原创 2020-08-27 14:21:10 · 141 阅读 · 0 评论 -
冷热数据分离
分表: 订单表日活订单表每日的增加数目为5万条数据左右,一个月左右订单的数据量就会增加到100万条左右的数据,因此我们通常每个月都会按照月为单位来做分表操作。冷热分离: 近三个月的数据存在同一张表里面专门做优化。 三个月前的数据定时将数据同步到es数据库里面,如果后续需要涉及这块的数据查询,则走es数据库。 用一个job去维护MySQL和ES之间的数据一致性。es和mysql数据一致性: 结合了canal+mysql+rocketmq来进行实现的。 ..原创 2020-08-27 14:01:56 · 760 阅读 · 0 评论 -
打散算法的三种解决方案及其选型场景(转载自“闲鱼技术”)
背景打散是在推荐、广告、搜索系统的结果基础上,提升用户视觉体验的一种处理。主要方法是对结果进行一个呈现顺序上的重排序,令相似品类的对象分散开,避免用户疲劳。算法端传出的推荐结果,往往具有以下几个痛点: 相似品类的商品易扎堆。显然的,如果商品的各特征相似,其获得的推荐分数也容易相近,而满目的同款肯定不是用户期望的结果。 对用户的偏好捕捉太强。用户心理层面,对于隐私或者偏好被完美捕捉这件事是敏感的,过于精准的结果不但容易导致用户的反感,也容易限制用户潜力的转化。 产生的错误容易被放转载 2020-08-25 11:15:37 · 582 阅读 · 0 评论