- 博客(20)
- 收藏
- 关注
原创 Struts 升级为 Spring MVC的过程
Struts 升级为 Spring MVC的过程1.修改action层代码(1)类的名字全都更换为controller,例如userController(2)Controller层每个类之上加@Controller注解(3)在类和方法之上加入注解@RequestMapping(“”)2.修改pom文件(1)删除struts的相关依赖(2)加入spring-webmvc的相关依赖注意version与引入的依赖版本相同3.修改web.xml文件(1)删除struts的filter和filt
2021-05-14 16:17:37
1853
原创 静态资源文件访问报红问题的解决
静态资源文件访问报红问题的解决location后面的路径报红原因:lib需要在webapp根目录下。其它子目录下就会报红
2021-05-14 15:54:41
1885
原创 使用Mybaties逆向工程生成springboot项目时, “http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd“>报红问题的解决。
使用Mybaties逆向工程生成springboot项目时, “http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd”>报红问题的解决。没有引入mybaties-generator-maven-plugin jar包。引入jar包后,报红消失。如下所示。
2021-04-28 16:57:01
386
原创 <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId>报红问
使用idea创建springboot项目时 org.springframework.bootspring-boot-maven-plugin报红问题的解决在后面加上与org.springframework.bootspring-boot-starter-parent2.4.5 相同的版本号,如下所示:报红消失,问题解决。...
2021-04-28 16:50:31
11962
2
原创 Kafka(二)——Kafka设计原理详解
Kafka核心总控制器Controller在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。当使用kafka-topics.sh脚本为某个topic增加分区数量时,同样还是由控制器负责分区的重新分配。Cont.
2020-06-20 21:10:54
235
原创 Kafka(一)——Kafka集群的搭建与使用
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。Kafka的使用场景日志收集:一个公司可以用Kaf
2020-06-17 23:00:31
997
原创 Redis缓存设计与性能优化
一:缓存设计1.缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。造成缓存穿透的基本原因有两个:第一, 自身业务代码或者数据出现问题。第二, 一些恶意攻击、 爬虫等造成大量空命中。缓存穿透问题解决方案:1、缓存空对象2、布隆过滤器对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过
2020-06-15 23:12:14
303
原创 Redis缓存高可用集群
1、Redis集群方案比较在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率高可用集群模式redis集群是一个由多个主从节点群
2020-06-14 22:18:03
326
原创 Redis持久化,主从与哨兵架构详解
Redis持久化RDB快照(snapshot)在默认情况下, Redis 将内存数据库快照保存在名字为dump.rdb 的二进制文件中。你可以对 Redis 进行设置, 让它在“N 秒内数据集至少有M 个改动”这一条件被满足时, 自动保存一次数据集。比如说, 以下设置会让 Redis 在满足“60 秒内有至少有1000 个键被改动”这一条件时, 自动保存一次数据集:#save 60 1000关闭RDB只需要将所有的save保存策略注释掉即可还可以手动执行命令生成RDB快照,进入redis客户端执行
2020-06-11 22:56:50
202
原创 Redis核心原理与数据结构
一:Redis的单线程和高性能Redis单线程为什么还能这么快?因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。Redis 单线程如何处理那么多的并发客户端连接?Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将
2020-06-05 22:17:37
183
原创 深入理解MySQL锁与事务隔离级别
1、锁定义锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。2、锁分类从性能上分为乐观锁(用版本对比来实现)和悲观锁从对数据库操作的类型分,分为读锁和写锁(都属于悲观锁)读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响写锁(排它锁):当前写操作没有完成前,它会阻
2020-06-04 23:00:22
182
原创 MySQL调优(四)
常见sql深入优化分页查询优化很多时候我们业务系统实现分页功能可能会用如下sql实现表示从表 employees 中取出从 10001 行开始的 10 行记录。看似只查询了 10 条记录,实际这条 SQL 是先读取 10010条记录,然后抛弃前 10000 条记录,然后读到后面 10 条想要的数据。因此要查询一张大表比较靠后的数据,执行效率是非常低的常见的分页场景优化技巧1、根据自增且连续的主键排序的分页查询首先来看一个根据自增且连续主键排序的分页查询的例子mysql> select
2020-06-02 22:53:24
145
原创 MySQL调优(三)
示例表:Mysql如何选择合适的索引mysql> EXPLAIN select * from employees where name > ‘a’;如果用name索引需要遍历name字段联合索引树,然后还需要根据遍历出来的主键值去主键索引树里再去查出最终数据,成本比全表扫描还高,可以用覆盖索引优化,这样只需要遍历name字段的联合索引树就能拿到所有结果,如下:mysql> EXPLAIN select name,age,position from employees where
2020-06-02 22:29:31
141
原创 MySQL调优(二)——索引最佳实践
1.全值匹配EXPLAIN SELECT * FROM employees WHERE name= ‘LiLei’;EXPLAIN SELECT * FROM employees WHERE name= ‘LiLei’ AND age = 22;EXPLAIN SELECT * FROM employees WHERE name= ‘LiLei’ AND age = 22 ANDposition =‘manager’;2.最左前缀法则如果索引了多列,要遵守最左前缀法则。指的是查询从索引..
2020-05-31 22:25:05
184
原创 MySQL调优(一)——Explain详解与索引最佳实践
Explain工具介绍使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中Explain分析示例在查询中的每个表会输出一行,如果有两个表通过 join 连接查询,那么会输出两行explain 两个变种1)explain extended:会在
2020-05-28 22:06:32
341
原创 通俗易懂理解JAVA虚拟机(四)—垃圾收集器
1.垃圾收集器如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。虽然我们对各个收集器进行比较,但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做的就是根据具体应用场景选择适合自己的垃圾收集器。试想一下:如果有一种四海之内、任何场景下都适用的完美收集器存在,那么我们的Java虚拟机就不会实现那么多不同的垃圾收集...
2020-05-07 21:30:52
168
原创 通俗易懂理解JAVA虚拟机(三)—垃圾收集机制与算法详解
1.JVM内存分配与回收1.1 对象优先在Eden区分配大多数情况下,对象在新生代中 Eden 区分配。当 Eden 区没有足够空间进行分配时,虚拟机将发起一次Minor GC。我们来进行实际测试一下。在测试之前我们先来看看Minor GC和Full GC 有什么不同呢?Minor GC/Young GC:指发生新生代的的垃圾收集动作,MinorGC非常频繁,回收速度一般也比较快。Majo...
2020-05-07 18:25:19
297
原创 通俗易懂理解JAVA虚拟机(二)——JVM整体结构深度解析
通俗易懂理解JAVA虚拟机(二)——JVM整体结构深度解析一 . JVM整体结构及内存模型
2020-05-06 11:47:55
431
1
原创 通俗易懂理解JAVA虚拟机(一)——类加载详解
通俗易懂理解JAVA虚拟机(一)相信想要了解Java虚拟机的朋友们都阅读过《深入理解Java虚拟机一书》,然而要想理解这本书,需要花费大量的时间去理解,需要较强的理论基础。并不适合小白在校大学生或者刚开始接触Java虚拟机的朋友,本文将通俗易懂地介绍Java虚拟机工作原理,以及在一线大厂中常用的调优手法,确保可以在一周或者更短的时间内快速攻克Java虚拟机这一难题。本文也包括了一线互联网大厂中对...
2020-04-26 17:40:55
535
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人