自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 哈夫曼编码

参考原博客:https://www.cnblogs.com/wuyuankun/p/3982216.html哈夫曼编码步骤:一、对给定的n个权值{W1,W2,W3,…,Wi,…,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,…,Ti,…,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。(为方便在计算机上实现算 法,一般还要求以Ti的权值Wi的升序排列。)...

2019-05-27 12:45:51 392

原创 秒杀功能(9)安全优化三

接口限流防刷为了防止恶意用户在短时间(如1秒内)刷网页访问太多次(如几百次),我们做了这个接口限流防刷的优化。初步版本(Redis)思路是:限制用户在若干秒内访问秒杀网站若干次之内。(如限制用户在5秒内只能访问网站5次)代码逻辑:在用户点击“立即秒杀”按钮时,会先访问/miaosha/path路径获取随机秒杀地址,在这之前会进行是否访问次数过多的判断;在某用户首次访问时现在redis...

2019-05-14 13:42:25 387

原创 秒杀功能(8)安全优化二

数学公式验证码这部分主要讲解的是在获取秒杀地址前增加验证码的功能,作用有两点:防止机器恶意刷秒杀按钮分散用户请求,减少服务器并发处理负担代码流程为:前端在渲染页面时,若是可以秒杀的阶段,则要调用后端生成数字验证码;后端生成验证码的图片后,把答案存在了redis中(设置时间是300s),把图片返回到前端;用户需要在页面先填写验证码,才能点击“立即秒杀按钮”。在点击立即秒杀按钮后,...

2019-05-13 13:43:06 219

原创 秒杀功能(7)安全优化一

安全优化从本篇开始讲秒杀系统的安全优化。主要分为三大块:秒杀接口地址隐藏数学公式验证码接口限流防刷秒杀接口地址隐藏每次点击秒杀按钮,才会生成秒杀地址,之前是不知道秒杀地址的。不是写死的,是从服务端获取,动态拼接而成的地址。(Http协议是明文传输,透明的,前端无法控制恶意用户进行攻击)安全校验还是要放在服务端,禁止掉这些恶意服务。该操作:可以为了防止,恶意用户登陆之后,获取tok...

2019-05-13 10:44:33 421

原创 秒杀功能(6)RabbitMQ

这篇讲解的内容较多。先解决业务问题再解决性能问题。业务问题之前的代码中有两类业务问题:超卖;若一个用户用两个平台同时秒杀某一商品,可能会出现该用户秒杀两件商品的情况。这两个问题虽然业务问题很大,但代码改动特别小。超卖这里利用数据库本身的锁来解决,只需要改动dao层代码,修改GoodsDao的代码。//改动前的代码@Update("update miaosha_goods ...

2019-05-12 21:42:57 1740 2

原创 SpringBoot集成RabbitMQ

项目中用到rabbitMQ来削流量峰值,简单记录一下springboot如何集成rabbitMQ的。SpringBoot集成RabbitMQ第一步:先下载erlang和rabbitMQ-server;第二步:SpringBoot的pom中添加依赖;<dependency> <groupId>org.springframework.boot</grou...

2019-05-11 16:34:04 1150

原创 秒杀功能(5)页面静态化

这篇是讲页面优化技术的第二项:页面静态化、前后端分离。之前的代码的请求逻辑是:客户端请求;服务端的servlet或controller接收请求(后端控制路由与渲染页面,整个项目开发的权重大部分在后端);调用service,dao层代码完成业务逻辑;返回页面;页面展现一些动态的代码;前后端分离的新的方式是:浏览器发送请求;直接到达html页面(前端控制路由与渲染页面,整个项目...

2019-05-08 21:23:23 968 5

原创 秒杀功能(4)缓存技术

从这一节开始就是讲如何优化秒杀的功能了。第一步考虑的是页面优化技术。页面优化技术有:页面缓存 + URL缓存 + 对象缓存页面静态化,前后端分离静态资源优化CDN优化这篇文章先讲第一项:页面缓存 + URL + 对象缓存 具体如何实现。页面缓存在controller层的GoodsController中以获取商品列表的list方法举例。将原本springboot自动渲染页面改成手...

2019-05-08 16:06:41 783

原创 Morris遍历

Morris遍历程序流程:假设指针cur指向当前节点,cur从头结点开始。如果cur无左孩子,则cur = cur.right;如果cur右左孩子,则找到cur左子树上最右的节点,记为mostRight,分为以下两种情况:若mostRight的right指针为null,则让其指向cur,且cur = cur.left;若mostRight的right指针指向cur,则让其指回nu...

2019-05-05 22:03:01 585

原创 单调栈

应用:求数组中每个数左边离它最近的比它大的和右边离她最近的比它大的数。暴力解:每个位置两边遍历,时间复杂度O(n^2)。单调栈:时间复杂度O(n)。...

2019-05-05 17:37:30 157

原创 窗口及窗口最小/大值的更新结构(单调双向队列)

窗口窗口的数据结构使用的是单调双向队列。滑动时,加数只能从窗口右端(尾部)加,滑出数时数只能从左边(头部)滑出。注意:队列中存的是数组的下标。以求最大值为例,流程为:窗口进数时有两种情况:新加的数比队列中最后一个数小,则直接在尾部加入队列;新加的数比队列中最后一个数大或等于,则从尾部弹出旧数直到队列尾部的数严格大于新加入的数,再把新数加入队列尾部。注意:队列中的值要严格递减,若碰到...

2019-05-04 16:20:21 212

原创 Manacher算法

马拉车算法主要解决的是找到一个字符串中最长的回文子串。暴力解暴力解的思路是遍历字符串str中的每一个字符str[i],从str[i]开始往两边扩,记录下每个以str[i]为中心的回文长度。这种方式的时间复杂度为O(n*n)。即使是以这种方法,奇回文还能求解,偶回文便不能直接扩,否则会出错。例如“abba”,以str[0]为中心的回文长度为1,以str[1]为中心的回文长度为1,以str[2]...

2019-05-04 11:37:41 95

原创 KMP算法

本小白今天学习了KMP算法(太疲劳了,尽管脑壳疼也要把今天的学习任务记录下来应付秋招~ ),KMP算法名字的由来据说是三个人名,解决的是在字符串str1中匹配str2的问题。如果str1的某一子串为str2,则返回str2字符串的第一个字符在str1中角标,否则返回-1。暴力解这个问题简单粗暴的解法的就是从str1的第一个字符开始比对str2,若出现不符合的情况,则由str1下一个字符开始重新...

2019-05-03 21:42:24 168

空空如也

空空如也

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

TA关注的人

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