study--java需要知道的事

实现幂等过滤过多的重复请求

在实际的开发项目中,一个对外暴露的接口往往会面临,瞬间大量的重复的请求提交,如果想过滤掉重复请求造成对业务的伤害,那就需要实现幂等

定义

任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。

保证其幂等性的方式

1、数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据
2、token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除token,下次请求再次判断token
3、悲观锁或者乐观锁,悲观锁可以保证每次for update的时候其他sql无法update数据(在数据库引擎是innodb的时候,select的条件必须是唯一索引,防止锁全表)
4、先查询后判断,首先通过查询数据库是否存在数据,如果存在证明已经请求过了,直接拒绝该请求,如果没有存在,就证明是第一次进来,直接放行。

阅读更多
一些测试和运维软件的使用

Jmeter

安装

1、下载地址:https://link.juejin.im/?target=http%3A%2F%2Fjmeter.apache.org%2Fdownload_jmeter.cgi

2、修改 /bin 下的 jmeter.properties 文件, 修改 language为:zh_CN。然后在运行 jemter.bat

使用

1、添加 -> 线程(用户) -> 线程组
2、线程组 -> 添加 -> 测试元件 -> http请求默认值
3、线程组 -> 添加 -> 测试元件 -> HTTP信息头管理器
4、线程组 -> 添加 -> 取样器 -> HTTP请求
5、线程组 -> 添加 -> 监听器 -> XXXXXXXXX

Arthas–开源java诊断工具

项目地址:https://github.com/alibaba/arthas

安装: 执行 ./install.sh
启动: 执行 ./as.sh pid

阅读更多
Dubbo实战

基本概念

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,以及SOA服务治理方案。

(1)主要核心部件:
Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能.(Hessian协议)
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

1.SOA(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在与操作系统进程中。各个服务之间 通过网络调用。如:dubbo

2.微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。如:Spring Cloud

阅读更多
weChat-微信公众号
受武汉新型冠状病毒的影响,闲来无事在家,写点东西。顺便研究下微信公众号和小程序的相关技术问题,为后期微信改版和App建设提供技术保障。 问题一正常分享状态显示:异常分享状态显示: 在微信公众号后台自定义菜单,但是出现分享异常的状态,虽然页面能够打开,但是显示的描述信息和图标都不正常。出现这种情况 ...
阅读更多
weChat-微信小程序
问题一 :云开发报错:Error: Cannot find module ‘wx-server-sdk’ at Function.因为在进行云函数开发的时候,首先就回引用 const cloud = require(‘wx-server-sdk’)。云环境肯定是有这个模块的,问题是我们的本地调试环境 ...
阅读更多
study--秒杀系统

秒杀系统介绍

秒杀系统相信网上已经介绍了很多了,我也不想黏贴很多定义过来了。

废话少说,秒杀系统主要应用在商品抢购的场景,比如:

  • 电商抢购限量商品
  • 卖周董演唱会的门票
  • 火车票抢座

秒杀系统抽象来说就是以下几个步骤:

  • 用户选定商品下单
  • 校验库存
  • 扣库存
  • 创建用户订单
  • 用户支付等后续步骤…

听起来就是个用户买商品的流程而已嘛,确实,所以我们为啥要说他是个专门的系统呢。。

为什么要做所谓的“系统”

如果你的项目流量非常小,完全不用担心有并发的购买请求,那么做这样一个系统意义不大。

但如果你的系统要像12306那样,接受高并发访问和下单的考验,那么你就需要一套完整的流程保护措施,来保证你系统在用户流量高峰期不会被搞挂了。(就像12306刚开始网络售票那几年一样)

这些措施有什么呢:

  • 严格防止超卖:库存100件你卖了120件,等着辞职吧
  • 防止黑产:防止不怀好意的人群通过各种技术手段把你本该下发给群众的利益全收入了囊中。
  • 保证用户体验:高并发下,别网页打不开了,支付不成功了,购物车进不去了,地址改不了了。这个问题非常之大,涉及到各种技术,也不是一下子就能讲完的,甚至根本就没法讲完。
阅读更多
study--java面试试题汇总
Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 一. ...
阅读更多
k8s-持续继承环境搭建(待更新)
前言 docker等容器技术解决的是单机部署、应用和依赖环境打包的可移植问题,集群中自动部署镜像需要解决 k8s天然适合微服务的部署 支持通过简单命令构建镜像部署集群,将Bare Metal或VPC抽象成资源消耗,资源告急时,仅需运行简单命令即可加入集群 镜像自动部署到集群中无需人工干预,k8s自动 ...
阅读更多
go、python语言尝试
安装go1、下载地址:https://golang.google.cn/dl/,windows下直接下.msi完成安装。新建环境变量:GOPATH=c:\mygo 安装python
阅读更多
springCloud--持续集成K8S
参见:https://blog.csdn.net/weixin_34337265/article/details/86364237
阅读更多