我去个地方

本博客已废弃,欢迎访问新家:https://sunweiguo.github.io/

7.安全防护--图形验证码及恶意防刷

1. 秒杀接口地址隐藏 思路:秒杀开始之前,先去请求接口获取秒杀地址。 接口改造,带上PathVariable参数 添加生成地址的接口 秒杀收到请求,先验证PathVariable 对于秒杀接口,不是直接去请求do_miaosha这个接口了,而是先去后端获取一个path: func...

2018-05-27 17:15:50

阅读数 1053

评论数 0

6.服务级高并发秒杀优化(RabbitMQ+接口优化)

1. 安装RabbitMQ linux下的安装没什么可说的,因为本机懒得重装虚拟机了,所以就下载了windows版本进行安装。 erlang下载地址:http://www.erlang.org/download.html rabbitMQ下载:http://www.rabbitmq.com/...

2018-05-27 17:15:26

阅读数 7310

评论数 2

5.页面级高并发秒杀优化(Redis缓存+静态化分离)

1. 页面缓存 这里以商品列表页面为例。 原来的商品列表页面是这样写的: @RequestMapping("to_list") public String toList(Model model,MiaoshaUser user){ if(use...

2018-05-27 17:14:48

阅读数 1473

评论数 0

4.JMeter压测

1. JMeter入门 官网:https://jmeter.apache.org/ 使用:点击bat文件即可用运行 步骤:添加线程组、添加监听器(聚合报告)、线程组右键->添加sampler-》http请求 在本地对/goods/to_list这个简单的压力测试,其实...

2018-05-27 17:14:21

阅读数 239

评论数 0

3.秒杀功能实现

1. 表设计 商品表: CREATE TABLE `goods`( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID', `goods_name` VARCHAR(16) DEFAULT NULL COMMENT '...

2018-05-27 17:13:54

阅读数 362

评论数 0

2.整合redis

目标:整合redis实现分布式session存储 1. 添加依赖 <!--fastJson--> <dependency> <groupId>co...

2018-05-27 17:13:23

阅读数 315

评论数 0

1. 登录功能

目标:初步实现用户登录功能 1. user表结构 CREATE TABLE `NewTable` ( `id` bigint NOT NULL COMMENT '手机号码' , `nickname` varchar(255) NOT NULL COMMENT '登录名' , `pa...

2018-05-27 17:12:17

阅读数 536

评论数 0

10.线程池

1. 初步认识线程池 1.1 new thread弊端 从学习java多线程开始,我们就学习了用new thread来创建线程。但是他有一定的弊端: 每次new Thread新建对象,性能差 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或OOM 缺少...

2018-05-20 17:59:20

阅读数 96

评论数 0

9.JUC组件拓展-BlockingQueue

在Java中,BlockingQueue是一个接口,它的实现类有ArrayBlockingQueue、DelayQueue、 LinkedBlockingDeque、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等,它们的区别主...

2018-05-20 17:58:52

阅读数 52

评论数 0

8.JUC组件拓展-ForkJoin

ForkJoin 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一...

2018-05-20 17:58:23

阅读数 56

评论数 0

7.JUC组件拓展-Callable、Future和FutureTask

Callable、Future和FutureTask 创建线程有2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比...

2018-05-20 17:57:53

阅读数 54

评论数 0

6.AQS以及同步组件

1. AQS介绍 AQS是JUC的核心。而JUC大大提高了JAVA并发性能。 底层数据结构是一个FIFO队列。 使用Node实现FIFO队列,可以用于构建锁或者其他同步装置的基础框架。 利用了一个int类型表示状态。 使用方法是继承:子类通过继承并通过实现它的方法管理其状态。 可以同时实现排...

2018-05-20 17:57:23

阅读数 133

评论数 0

5.线程安全策略

1. 不可变对象 1.1 如何Immutable(不可变)的类 将类声明为final,这样就不能被继承了 将所有成员声明为private,这样就不能直接访问成员 对变量不提供set方法,所有可变成员变量声明为final,只有只能赋值一次 通过构造器初始化所有成员,进行深度拷贝,在get方...

2018-05-20 17:56:57

阅读数 99

评论数 0

4.安全发布对象

1. 不安全的行为 发布对象:使一个对象能够被当前范围之外的代码所使用 @Slf4j @NotThreadSafe public class UnSafePublish { private String[] states = {"a",&am...

2018-05-20 17:56:30

阅读数 55

评论数 0

3.线程安全性-synchronized

1. synchronized介绍 修饰代码块:大括号括起来的代码,作用于调用的对象 //输出结果是:两个分别都是0-9,顺序执行 public class SyncTest1 { public void add1(int j){ synchronized (...

2018-05-20 17:56:04

阅读数 39

评论数 0

2.线程安全性-Atomic包

1. 线程安全性定义 当多个线程访问某个类时,不管运行时环境采用++何种调度方式++或者这些进程将如何交替执行,并且在主调代码中++不需要任何额外的同步或协同++,这个类都能表现出++正确的行为++,那么就称这个类是线程安全的。 2. 线程安全三个特性 原子性 提供了互斥访问...

2018-05-20 17:55:36

阅读数 105

评论数 0

1.基础介绍和线程安全性问题展示

基础的概念 并发 多个线程操作相同的资源,保证线程安全,合理使用资源。 高并发 服务能够同时处理很多请求,提高程序性能。 CPU多级缓存 cpu速度太快,主内存速度跟不上,cpu常常需要等待主内存,浪费cou资源。所以cache出现了,缓解了cpu和主内存之间...

2018-05-20 17:54:56

阅读数 43

评论数 0

8.redis cluster实践--淘淘商城的某一节

1.redis安装 首先是针对虚拟机可以ping通ip但是不能Ping通域名的情况解决。 首先关闭防火墙。然后cat /etc/resolv.conf这个文件。看是不是 nameServer 8.8.8,8 nameServer 8.8.4.4 如果不是改过来,但是不要进行网络重启:se...

2018-05-18 22:03:31

阅读数 48

评论数 0

7.redis cluster理论详解

上一篇我们学习了redis sentinel,知道了它是redis高可用的一种实现方案。但是面对要求很高的场景,一台master是一定不能解决问题的,redis 3.0给我们带来了服务端集群方案,解决了这个问题。 1. 数据分区 集群,那么就会涉及到数据是如何分片的。有两种方式:顺序分区和...

2018-05-18 22:03:11

阅读数 517

评论数 0

6.redis sentinel实现高可用读写分离

1. redis sentinel 故障转移的基本原理: 多个sentinel发现并确认master有问题 选举出一个sentinel作为领导 选出一个slave称为新的master的slave 通知其他的slave称为新的master的slave 通知客户端主从变化 等待老的maste...

2018-05-18 22:02:54

阅读数 62

评论数 0

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