防重复提交

使用Token令牌机制可以有效地防止CSRF攻击和重复提交。在提交表单时,服务器会生成一个Token令牌,并将其存储在Redis中。然后,将这个Token令牌作为表单的一个隐藏字段或URL参数传递给客户端。客户端提交表单时,将这个Token令牌一并提交给服务器。服务器在处理表单时,会检查这个Token令牌是否正确,并在处理完表单后删除这个Token令牌。这种方式可以有效地防止重复提交和CSRF攻击,但是需要注意保护Token令牌的安全性,否则可能会被攻击者利用。 Token令牌机制是一种常用的Web应用程序防止重复提交和CSRF攻击的方法。它的基本思想是在每次提交表单时,服务器会生成一个Token令牌,并将其存储在Redis中。然后,将这个Token令牌作为表单的一个隐藏字段或URL参数传递给客户端。客户端提交表单时,将这个Token令牌一并提交给服务器。服务器在处理表单时,会检查这个Token令牌是否正确,并在处理完表单后删除这个Token令牌。 Token令牌机制的实现步骤如下: 在服务器端生成一个Token令牌,并将其存储在Redis中。Token令牌可以使用随机数、UUI
3 min read

数据结构:栈

栈(Stack)是一种先进后出(LIFO)的数据结构,它只允许在栈顶进行插入和删除操作。栈可以用数组或链表来实现。 在栈中,插入和删除操作通常称为入栈(push)和出栈(pop)。当插入一个元素时,它被放置在栈顶,当删除一个元素时,它是从栈顶删除的。栈顶是栈中最新添加的元素,栈底是栈中最早添加的元素。 栈的应用非常广泛,例如,计算机中的函数调用和递归调用都是通过栈来实现的。当一个函数被调用时,它的参数、返回地址和局部变量等信息被压入栈中,当函数返回时,这些信息又从栈中弹出。 以下是栈的基本操作: push(element):将一个元素压入栈顶。 pop():从栈顶弹出一个元素。 top():返回栈顶元素,但不对栈进行修改。 isEmpty():判断栈是否为空。 size():返回栈中元素的个数。 栈的时间复杂度为O(1),因为所有操作都是在栈顶进行的。但是,栈的空间复杂度为O(n),因为需要存储所有元素。 在计算机中,栈(Stack)被广泛应用于函数调用、
2 min read

线程池核心线程数-计算方式

线程池的工况一般分为三种场景: 1、计算密集型 需要大量的计算,对 CPU 高占用率,CPU Loading 90-100%,除开 CPU需要读/写I/O(硬盘/内存),但这些 I/O 只需要很短的时间就可以完成,更多的是 CPU 需要进行很多数据运算,数学运算,CPU Loading 很高的场景。 例如数据分析,数据流处理,此类程序运行的过程中,CPU占用率一般都很高。 假如在单核CPU情况下,线程池有6个线程,但是由于是单核CPU,所以同一时间只能运行一个线程,考虑到线程之间还有上下文切换的时间消耗,还不如单个线程执行高效。所以,单核 CPU 处理计算密集型程序,就不要使用多线程了。 假如是6个核心的CPU,设置6个线程数,理论上运行速度可以提升6倍(但实际上达不到,多线程之间有并发以及需要优化的地方)。每个线程都有 CPU 来运行,
5 min read

JVM 线程池扩容机制

在 HotSpot VM 的线程模型中,Java 线程被一对一映射为内核线程(JDK19后已经引入携程 UT)。及一个 LWP 线程对应操作系统内核中的 KLT,Java 在使用线程执行程序时,需要调用操作系统内核的 API,创建一个内核线程,操作系统要为线程分配一系列的资源,当该 Java 线程被终止时,这个内核线程也会被回收。 因此 Java 线程的创建与销毁的成本很高,会增加系统的性能开销。并且线程也不能创建太多,因为CPU切换线程去执行指令时需要处理对应上下文信息。大量的线程将会导致CPU的性能存在一定损耗。毕竟我们CPU的核心数是有限的,如果我们无限制地创建线程还可能导致 OOM。 故此我们主要来看 ThreadPoolExecutor 类的参数: int corePoolSize [核心线程数] int maximumPoolSize [最大线程数] long keepAliveTime [存活时间] TimeUnit unit [时间单位] BlockingQueue workQueue
2 min read

HTTP 协议发展史

HTTP 是浏览器与服务端之间最主要的通信协议,HTTP 是应用层协议(7层),应用层产生的数据会通过传输层协议作为载体来传输到互联网上的其他主机中,而其中的载体就是 TCP 协议(3.0使用UDP),基于 TCP 协议进行连接,然后传输对应内容信息。 20 世纪 60 年代,美国国防部高等研究计划署(ARPA)建立了 ARPA 网,这被认为是互联网的起源。70 年代,研究人员基于对 ARPA 网的实践和思考,发明出了著名的 TCP/IP 协议。该协议具有良好的分层结构和稳定的性能,并在 80 年代中期进入了 UNIX 系统内核,促使更多的计算机接入了网络。 1989 年,蒂姆伯纳斯-李博士发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。在篇文章中他确立了三项关键技术:URI、HTML、HTTP。 基于这三项技术,
14 min read

布隆过滤器详解

布隆过滤器(Bloom Filter)是1970年由布隆提出的,它实际上是由一个很长的二进制向量和一系列随意映射函数组成。布隆过滤器使用场景一般是防止redis缓存穿透,使用布隆过滤器可以更好的节省空间,并且快速定位元素是否存在。 布隆过滤器通过 hash key 来定位 位图(Bitmap,其实就是bit数组)中对应的下标,并且在这个数组中每一个位置只有0和1两种状态,每个位置只占用1个字节,其中0表示没有元素存在,1表示有元素存在。 注意:两个不同的key哈希出来所对应的下标位可能存在部分重复,这样可以减少内存的占用,但也有概率会出现哈希碰撞,原本不存在的key哈希之后位图中都为1的情况。 所以通过上面的现象,我们从布隆过滤器的角度可以得出布隆过滤器主要有2大特点: 1、如果布隆过滤器判断一个元素存在,那么这个元素可能存在。 2、如果布隆过滤器判断一个元素不存在,那么这个元素一定不存在。 因为布隆过滤器中总是会存在误判率,因为哈希碰撞是不可能百分百避免的。布隆过滤器对这种误判率称之为假阳性概率,即:False Positive Probability,简称为fpp。
3 min read

隐藏性能杀手之 '伪共享'

随着CPU工艺的发展,目前的高端CPU已经存在几十核心百多个线程,并为CPU设计出了一二三级缓存。CPU的核心有了这些缓存就可以加快数据的处理,从而减少访问内存的频率,这样CPU的计算性能可以进一步得到提高。 CPU的缓存结构以及内存硬盘: 众所周知CPU去访问一次内存所需要的开销是非常之大的,想要获取一次磁盘上的数据更是需要等待较长的时间,虽然目前已经有很多解决方案如 mmap 技术来缓解这样的情况,但总体来说CPU的计算性能是整个计算机结构中的天花板,其他硬件从数据传输速度层面对比起来就显得拖后腿,那么我们来看一下具体CPU访问每个硬件的延迟: 存储器 存储介质 介质成本(美元) 随机访问延迟 L1 cache SRAM 7 1ns L2 cache SRAM 7 4ns Memory DRAM 0.015 100ns Disk SSD(NAND) 0.0004 150us Disk HHD 0.00004 10ms 可以得出外部存储设备容量越大成本越小,存储数据更多,但访问速度更慢,访问速度越快的设备造价更高,
6 min read

Fiddler 安装并抓取HTTPS请求

众所周知 Fiddler 是一个非常实用的抓包工具(主要是对于Http请求)而且有很多的扩展功能可以去官网下载,我们在开发中,难免需要抓包工具来查看接口数据 或者 测试接口的安全性, 如未签名而进行值的修改,下面将介绍它的安装以及配置 证书 来抓取Https加密信息。 Fiddler 官方网址: Fiddler | Web Debugging Proxy and Troubleshooting SolutionsExplore the Fiddler family of web debugging proxy tools and troubleshooting solutions. Easily debug, mock, capture, and modify web and network traffic.Telerik.com [https://www.telerik.com/fiddler]
3 min read

IDEA 常用插件以及开发工具

1、静态代码质量管理工具部署平台 Code Quality and Code Security | SonarQube [https://www.sonarqube.org/] 2、代码质量检查插件 FindBugs 可以直接以插件安装在IDEA IDE中 FindBugs™ - Find Bugs in Java Programs (sourceforge.net) [https://findbugs.sourceforge.net/] 3、翻译插件(英语不好者必备) Translation 可以在代码开发试图中直接翻译 4、代码编码格式约束插件 CheckStyle-IDEA 通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范 5、Java Meven 包冲突检测工具 Maven Helper 可以检测整个项目pom.
2 min read

随心笔记

hi 欢迎留言,共同探讨IT技术~