- 博客(374)
- 资源 (2)
- 收藏
- 关注
原创 ThreadLocal与FastThreadLocal
FastThreadLocal 真的一定比 ThreadLocal 快吗?答案是不一定的,只有使用FastThreadLocalThread 类型的线程才会更快,如果是普通线程反而会更慢。FastThreadLocal 会浪费很大的空间吗?虽然 FastThreadLocal 采用的空间换时间的思路,但是在 FastThreadLocal 设计之初就认为不会存在特别多的 FastThreadLocal 对象,而且在数据中没有使用的元素只是存放了同一个缺省对象的引用,并不会占用太多内存空间。
2024-04-11 16:50:43 1224
原创 Netty的基本架构与组件
这些组件是怎么协作的呢?服务端启动初始化 Boss EventLoopGroup 和 Worker EventLoopGroup 两个组件,其中Boss负责监听网络连接事件。当有新的网络事件到达时,则将Channel注册到Worker EventLoopGroup。Worker EventLoopGroup 会被分配到一个EventLoop负责处理Chanel的读写事件。每个 EventLoop 都是单线程 的,通过 Selector 进行事件循环。
2024-04-10 15:29:49 1313 1
原创 Databales的组件TableTools用法
按键:https://datatables.net/extensions/tabletools/button_options#Ajax-button-options。
2024-04-02 16:42:20 390
原创 拒绝服务攻击(Dos)与Tomcat的解决方法
拒绝服务攻击(Denial of Service,DoS)是一种网络攻击,旨在使目标系统无法提供正常的服务,使其无法响应合法用户的请求。这种攻击通过消耗目标系统的资源,例如带宽、处理能力或存储空间,来实现其目的。拒绝服务攻击的主要目标是瘫痪目标系统,使其对合法用户不可用。拒绝服务攻击可以采用多种方式实施,其中一种常见的方法是通过向目标系统发送大量无效的请求,使其资源耗尽。另一种常见的方法是利用系统的漏洞或弱点来使其崩溃或无法正常工作。
2024-04-02 16:39:17 1258
原创 getInputStream流只能读取一次问题
InputStream默认不实现reset的相关方法,而ServletInputStream也没有重写reset的相关方法,这样就无法重复读取流,这就是我们从request对象中获取的输入流就只能读取一次的原因。需要读取request的输入流 ,因为 ServletRequest中getReader()和getInputStream()只能调用一次。正常普通接口请求,request.getParameter()可以获取,能多次读取。如果我们的接口是用@RequestBody来接受数据,那么我们在拦截器中。
2024-04-02 16:36:10 574
原创 浏览器中的Content-Type属性
HTTP的Content-Type是一种标识HTTP请求或响应中包含的实体的媒体类型的头部字段。它指示了数据的类型,使接收方能够正确处理数据。以下是一些常见的Content-Type类型:text/plain:纯文本,没有特定格式。text/html:HTML文档。text/javascript:JavaScript代码。application/json:JSON数据。application/xml:XML数据。application/pdf:Adobe PDF文档。
2024-04-02 16:35:25 1057
原创 操作系统注入漏洞
命令注入漏洞是一种安全漏洞,允许攻击者通过在应用程序中注入恶意命令来执行非法操作。在操作系统中,这种漏洞可能存在于用户输入被不正确处理的情况下。攻击者可能通过恶意构造的输入来执行系统命令,这可能导致未经授权的访问、数据泄露、拒绝服务等安全问题。1、输入验证和过滤: 对于用户输入,确保进行有效的验证和过滤。不信任的输入数据应该被正确地验证、过滤或转义,以防止恶意命令的注入。这可以有效地防止 SQL 注入和命令注入攻击。3、最小权限原则: 应用程序和系统应该以最小权限的方式运行。
2024-04-02 16:33:54 370
原创 XML与Xpath
XML是一种具有某种层次结构的文件,Xpath则是解析这种文件的工具接下来将会解释XML文件的结构和Xpath的基本使用,并且用Java语言进行操作展示。
2024-04-02 16:31:44 837
原创 Trie树
每个节点定义// 假设只包含小写字母可知,如果只包含小写字符串,可以设置子节点为new TrieNode[26];//每次都要从头部开始查//字符串的减去a后的值是数字值,例如a是97,b是98//如果这个值在索引上没有值,那就需要重新开辟一个TrieNode//继续往下迭代//迭代结束设置一个标识,这个地方可以有很多扩展//查找类似上面的新增//迭代的最后一个字符串需要有个结束字符才能代表当前已经有个一样的字符串了//这里就不需要有结束的标识了。
2024-03-21 15:03:54 468
原创 TopK问题
针对海量数据的top k问题,这里实现了一种时间复杂度为O(Nlogk)的有效算法:初始时一次性从文件中读取k个数据,并建立一个有k个数的最大堆,代表目前选出的最小的k个数。然后从文件中一个一个的读取剩余数据,如果读取的数据比堆顶元素小,则把堆顶元素替换成当前的数,然后从堆顶向下重新进行堆调整;否则不进行任何操作,继续读取下一个数据。直到文件中的所有数据读取完毕,堆中的k个数就是海量数据中最小的k个数(如果是找最大的k个数,则使用最小堆)
2024-03-21 14:19:37 353
原创 Java的SPI机制与实例
SPI是一种JDK内置的服务提供发现的机制,能够启动框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql。Driver接口。Java机制的核心思想就是将装配的控制权转移到Java之外,核心思想是解耦。
2024-03-15 16:54:16 399
原创 跨域问题与解决方法
浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。同源策略限制以下几种行为:Cookie、LocalStorage 和 IndexDB 无法读取DOM和JS对象无法获得AJAX 请求不能发送。
2024-03-02 14:46:54 1047
原创 CMS垃圾回收器
CMS GC的官方名称为“Mostly Concurrenct Mark and Sweep Garbage Collector”(最大-并发-标记-清除-垃圾收集器)。作用范围: 老年代算法: 并发标记清除算法。启用参数:-XX:+UseConMarkSweepGC默认回收线程数:(处理器核心数量 + 3)/4Java9之后使用CMS垃圾收集器后,默认年轻代就为ParNew收集器,并且不可更改,同时JDK9之后被标记为不推荐使用,JDK14就被删除了。
2024-02-26 15:43:07 617
原创 RocketMQ安装与基本使用
在RocketMQ中有NameServer、Broker、生产者、消费者四种角色。而生产者和消费者实际上就是业务系统,所以这里不需要搭建,真正要搭建的就是NameServer和Broker。
2024-02-04 11:09:34 613
原创 缓存一致性问题
到底是更新缓存还是删缓存?到底选择先更新数据库,再删除缓存,还是先删除缓存,再更新数据库?为什么要引入消息队列保证一致性?延迟双删会有什么问题?到底要不要用?
2024-02-01 17:24:37 552
原创 Mysql的BufferPool
磁盘太慢,用内存作为缓存很有必要。Buffer Pool本质上是InnoDB向操作系统申请的一段连续的内存空间,可以通过innodb_buffer_pool_size来调整它的大小。Buffer Pool向操作系统申请的连续内存由控制块和缓存页组成,每个控制块和缓存页都是一一对应的,在填充足够多的控制块和缓存页的组合后,Buffer Pool剩余的空间可能产生不够填充一组控制块和缓存页,这部分空间不能被使用,也被称为碎片。InnoDB使用了许多链表来管理Buffer Pool。
2024-02-01 16:31:23 834
原创 SpringCloud引入父项目需要注意的地方
组件依赖关系详细可查看:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E。要引入两个组件,一个是SpringCloud一个是SpringCloudAlibaba。注意:父项目要加 pom,父项目中意味着可以被子项目共享。子项目要加 jar,子项目需要加个来引用父项目的资源。也可以是war,看打包方式。
2024-01-31 17:19:35 281
原创 ThreadLocal作用实例
ThreadLocal表示线程的“局部变量”,它确保每个线程的ThreadLocal变量都是各自独立的,它提供了一种方法来创建只能被当前线程访问的变量。7、探测式清理,其实这也是非常耗时。输出结果如下,正常情况为true,如果两个线程分别修改了数据,那么可能是false,当然,由于还处在中间过程,还会导致异常情况,那么该如何解决这个问题呢,就需要ThreadLocal了。在代码中每个线程都会 对f进行操作,会导致f这个对象发生变化,由于f这个对象是共享变量,各个线程之间互相影响,由此产生了三种情况。
2024-01-31 10:56:04 338
原创 Redis的哨兵模式
能够自动监控master是否发生故障,如果故障了会根据投票数从slave中挑选一个作为master,其他的slave会自动转向同步新的master,实现故障自动转义。
2024-01-30 15:39:28 931
原创 Struts进行文件上传时装饰StrutsRequestWraper导致的问题参数映射失效
在文件都放到request的parameters对象里之后,fileUpload 拦截器会继续调用其他拦截器直到Action等执行完毕,他还要做一个扫尾的工作:把临时文件夹中的文件删除(这些文件是由commons- fileupload组件上传的,供你在自己的Action中将文件copy到指定的目录下,当action执行完了后,这些临时文件当然就没用了)。第二个地方:在上传模板文件时,csrfToken参数无法映射,导致后台校验失败,同时,上传文件。在这个方法中会获得所需的request。
2024-01-25 14:48:34 871
原创 sychnorized积累
锁对象不能为空,因为锁的信息都保存在对象头里作用域不宜过大,影响程序执行的速度,控制范围过大,编写代码也容易出错避免死锁在能选择的情况下,既不要用Lock也不要用synchronized关键字,用java.util.concurrent包中的各种各样的类,如果不用该包下的类,在满足业务的情况下,可以使用synchronized关键,因为代码量少,避免出错。如果这个monitor已经拿到了这个锁的所有权,又重入了这把锁,那锁计数器就会累加,变成2,并且随着重入的次数,会一直累加。
2024-01-23 17:30:15 397
原创 Java 数据结构集合
队列的头部是队列中时间最长的元素。为了降低这部分的开销,在 Java8 中,当链表中的元素达到了 8 个时,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。计算 key 的 hash 值,根据 hash 值找到对应数组下标: hash & (length-1)判断数组该位置处的元素是否刚好就是我们要找的,如果不是,走第三步判断该元素类型是否是 TreeNode,如果是,用红黑树的方法取数据,如果不是,走第四步遍历链表,直到找到相等(==或equals)的 key。
2024-01-23 15:51:54 1264
原创 RocketMQ入门--安装与简单使用
在RocketMQ中有NameServer、Broker、生产者、消费者四种角色。而生产者和消费者实际上就是业务系统,所以这里不需要搭建,真正要搭建的就是NameServer和Broker。
2024-01-18 16:36:28 416
原创 tcpdump抓包
s<数据包大小>:指定抓包显示一行的宽度,-s0表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,但一般ethernet MTU都是1500字节。i<网络界面>:监听主机的该网卡上的数据流,如果没有指定,就会使用最小网卡编号的网卡(在选项-D可知道,但是不包括环路接口),linux 2.2 内核及之后的版本支持 any 网卡,用于指代任意网卡;T<数据包类型>:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议);
2024-01-17 17:24:21 493
原创 CAP与BASE理论
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。C一致性:状态的一致性,缓存,数据库,集群等A可用性:要求系统内的节点们接收到了无论是写请求还是读请求,都要能处理并给回响应结果P分区容错性:在分布式系统中,节点通信出现了问题,那么就出现了分区。:能容忍网络分区,在网络断开的情况下,被分隔的节点仍能正常对外提供服务。
2024-01-13 17:03:02 465
原创 Redis分布式锁--java实现
在单体redis中通过SETNX + EXPIRE方式可以为多个JVM加一个分布式锁,但是由于操作的非原子性会导致并发问题,因此出现了几种原子性解决方法,包括SETNX+时间value、lua脚本和SET扩展命令的方式解决,但是,依然会出现事务还没完成时间就失效,产生了新一轮并发,因此,通过添加一个看门狗线程定期检查能够解决这个问题,对于一个Java开发来说有一个Redisson框架实际上封装了lua脚本来实现。哨兵和主从模式下的分布式redis,介绍了Redlock的原理与其缺陷。
2024-01-13 16:07:43 2684
原创 读书笔记--微服务架构
客户端与微服务直接通信GateWay:API 网关是一个服务器,是系统的单入口点。它类似于面向对象设计模式中的门面(Facade)模式。API 网关封装了内部系统架构,并针对每个客户端提供一个定制 API。它还可用于认证、监控、负载均衡、缓存和静态响应处理。例如nginx,node.jsAPI 网关作为系统的单入口点,并且负责请求路由,组合和协议转换。它为每个应用客户端提供了一个自定义 API。API 网关还可以通过返回缓存或默认数据来掩盖后端服务故障。
2024-01-12 16:49:49 438
原创 Mysql查询与更新语句的执行
FROM:对 FROM 子句中的左表<left_table>和右表<right_table>执行笛卡儿积(Cartesianproduct),产生虚拟表 VT1ON:对虚拟表 VT1 应用 ON 筛选,只有那些符合<join_condition>的行才被插入虚拟表 VT2 中JOIN:如果指定了 OUTER JOIN(如 LEFT OUTER JOIN、RIGHT OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表 VT2 中,产生虚拟表 VT3。
2024-01-12 14:50:49 501
原创 Mysql如何优化慢查询
尽量使用 Join 语句来替代子查询,因为子查询是嵌套查询,而嵌套查询会新创建一张临时表,而临时表的创建与销毁会占用一定的系统资源以及花费一定的时间,同时对于返回结果集比较大的子查询,其对查询性能的影响更大。MySQL 处理 union 的策略是先创建临时表,然后将各个查询结果填充到临时表中最后再来做查询,很多优化策略在 union 查询中都会失效,因为它无法利用索引。慢 SQL 的优化,主要从两个方面考虑,SQL 语句本身的优化,以及数据库设计的优化。使用游标,只能一页一页的翻。
2024-01-12 14:12:18 510
原创 Mysql主从复制
MySQL复制(Replication)是一种用于在多个MySQL服务器之间复制数据的机制。这种机制通过将更改从一个MySQL数据库服务器传递到其他MySQL服务器,从而保持多个服务器上的数据一致性。1、读写分离: 通过在主服务器上执行写操作,然后将这些更改复制到多个从服务器上,可以实现读写分离。主服务器处理写入操作,而从服务器用于处理读取操作,从而提高性能和扩展性。2、数据备份: 复制可以用作数据备份的一种形式。
2024-01-11 18:54:47 1310
原创 Mysql是怎样运行的--下
所以在某个事务提交后,重用这个事务的insert undo链表(这个链表中只有一个页面)时,可以直接把之前事务写入的一组undo日志覆盖掉,从头开始写入新事务的一组undo日志。我们修改了Buffer Pool中某个缓存页的数据,那它就和磁盘上的页不一致了,这样的缓存页也被称为脏页,我们创建一个存储脏页的链表,凡是修改过的缓存页对应的控制块都会作为一个节点加入到一个链表中,因为这个链表节点对应的缓存页都是需要被刷新到磁盘上的,所以也叫flush链表,数据结构与free链表一样。
2024-01-10 17:05:24 1086
原创 JMM内存模型
Java内存模型(Java Memory Model,JMM)JMM主要是为了规定了线程和内存之间的一些关系。对于 Java 来说,你可以把 JMM 看作是 Java 定义的并发编程相关的一组规范,除了抽象了线程和主内存之间的关系之外,其还规定了从 Java 源代码到 CPU 可执行指令的这个转化过程要遵守哪些和并发相关的原则和规范,其主要目的是为了简化多线程编程,增强程序可移植性的。
2024-01-05 15:41:25 975
原创 Mybatis一级缓存
辟谣:Mybatis 一级缓存脏读(数据被另外事务修改并提交后,仍会从缓存中读到旧数据(错误),实际是避免了事务不可重复读问题), Mybatis 一级缓存是在事务的生命周期之内的,在关闭session、执行commit、执行rollback都会清空Mybatis一级缓存。销毁:sqlSession关闭、sqlSession提交、sqlSession回滚、sqlSession执行update(新增、删除、更新)后底层会执行清除、主动清除。条件二:sql上用到的参数要一样。条件四:sql语句的文本要一样。
2024-01-04 23:36:06 516
PIC模拟方法的静电模型来模拟多环形电子注在圆柱系统中的运动轨迹Matlab源码
2023-10-24
基于遗传算法的MATLAB16阵元天线的优化.doc
2020-06-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人