自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用Lua脚本实现高并发处理方案

我们使用 Lua 脚本可以很轻松构建出百万并发的应用系统。由于 Tomcat 并发处理能力弱,nginx 并发处理能力强,我们可以在 nginx 上结合 Lua 脚本来高效处理业务逻辑,不用经过 Tomcat,就能够通过 Lua 脚本来操作 Redis、Kafka、MySQL 等,比如:在秒杀活动中,我们把针对获取商品详情页的内容使用 Lua 脚本方式,通过 nginx 的 Lua 脚本接收到请求,在 nginx 上完成对应业务处理代码逻辑,避免访问后端应用服务器。但不推荐在程序中大量使用 Lua 脚

2021-07-18 15:36:48 2444

原创 原来这就是JWT

相信兄弟萌也听说过 JWT,但 JWT 这个概念网络上解释得晦涩难懂,我感觉不是特别好理解,这里我尝试着用通俗易懂的话语来解释 JWT!不多 BB,直接进入正题吧 . . .1.什么是 JWT?JWT(JSON Web Token),通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全的传输信息。哈哈,这样说是不是太官方了,说白了,JWT 就是把信息进行安全的封装,以 JSON 的形式进行传递,我们可以使用 JWT 在用户和服务器之间传递安全可靠的信息。2.为什么要使用 JWT?

2021-07-17 19:18:00 378 1

原创 带你看看JDK8新特性:Stream流

相信兄弟萌在学习时碰到过这样的代码吧:List<String> list = new ArrayList();list.stream().forEach(a-> System.out.println(a));我相信大家初次见到这种代码跟我一样,这 TM 是个啥?能看出来有一个 Lamda 表达式,另外这个 stream 是个啥?有没有一点像 Steam,游戏下载平台,可以玩吃鸡、CSGO,扯远了,两者毫无关系。下面我们来揭开 stream 的秘密,Go!1.集合处理数据的弊端

2021-07-06 11:22:19 588 1

原创 探究 | ES倒排索引和分词

兄弟萌,相信大家在学习 Elasticsearch 都听说过倒排索引吧,下面我们尝试用最简单易懂的方式来讲讲 ES 中的倒排索引和分词。倒排索引建立的是单词和文档 id 的关联关系,建立倒排索引时,首先从文档中拆分出词条,这个过程就是 “分词”。1.倒排索引1.1 什么是倒排索引?我们要搞懂倒排索引,首先来看看什么是正排(正向)索引?我们知道通过文章 id 可以快速查找到文章内容,之所以检索比较快是因为文章 id 设置为主键,同时生成了主键索引,然后通过主键索引快速关联到存储信息,这种索引就

2021-07-04 13:59:37 844

原创 探究单表性能优化方案:MySQL分区表

相信在提到对于 MySQL 千万级大表做优化时,兄弟萌脑海中第一个想法就是:分库分表,但除非单表数据未来会一直不断上涨,否则不要一开始就考虑分库分表,拆分会带来逻辑、部署、运维的各种复杂度。事实上很多时候 MySQL 单表的性能依然有不少优化空间。比如:使用 MySQL 分区表。但兄弟萌千万别把分区表和分库分表搞混淆了,分库分表区别于分区的是:分区一般都是放在单机里的,用的比较多的是时间范围分区,方便归档。分库分表和分区并不冲突,可以结合使用。日常开发中,我们经常会遇到大表的情况,所谓大表就是指存储了百

2021-06-22 17:30:02 837

原创 探究注解的底层原理

我相信有些兄弟萌在最开始接触到注解时,都会跟我有一样的疑惑,我先来举个例子来看看大家是否跟我有同样的困惑?如:在 Spring 中有个 @Value 注解,我们可以通过 @Value 将外部的值动态注入到 Bean 中。我们打印 cat 对象可以发现,加了 @Value 注解后就将外部的值赋给属性了,兄弟萌肯定这时候想:这简单,@Value 注解不就是把 “1” 拿出来赋给 id,把 “喵喵” 拿出来赋给 name 吗?确实没错,但我们点开 @Value 源代码,发现它啥也没干,并没有取值和赋值的操作

2021-06-21 15:02:59 311

原创 原来这就是Redis Cluster

兄弟萌,想必大家学习 Redis 时,都听说过 Redis Cluster 吧,有没有想过这样一个问题,做 Redis 集群时,有了哨兵机制就能够实现监控以及自动故障转移,还要 Redis Cluster 干嘛呢?下面,我们就深入聊一下 Redis Cluster,废话不多说,Let’s Go!大家知道,Redis 有三种集群方式:主从复制,哨兵模式和集群 Cluster。对于主从复制来说,如果 master 出现故障,不会自动恢复,需要人为干预来恢复。对于哨兵模式来说,其实它就是主从复制的升级版,

2021-06-12 21:20:04 129

原创 探究Cookie如何实现单点登录?

兄弟萌,单点登录(SSO)这个概念或许大家并不陌生,但我想有些兄弟还是没搞清楚什么叫做单点登录,下面我们先来介绍一下什么是单点登录?单点登录(SSO):用户的一次登录能够得到其它所有系统的信任,便可在其它所有系统中得到授权而无需再次登录。这个概念理解起来似懂非懂,下面直接用几张图来让大家理解:登录京东首页,会看到有登录按钮,我们点击它可以登录,登录成功后会返回发起登录请求的这个页面我先不登录,我直接点击一个商品浏览,上方还是有登录按钮如果我们在商品详情页面登录后,切换到首页发现也已

2021-05-30 15:56:15 1862

原创 你知道MyBatis日志功能吗?

兄弟萌可能对使用日志有疑惑,我为什么要用日志呢?我在想查看一些输出结果的地方使用 System.out.println(xxx)就行了啊,还搞得这么麻烦干嘛,这不多此一举吗?确实是这样,其实我们平时在写一些 demo 时,也没有使用到日志功能,直接使用 System.out.println 输出,但你有没有考虑过实际项目开发中,项目上线我们肯定要把调试过程中写的 System.out.println 删除掉,使用日志我们还可以将日志信息输出到控制台、文件、甚至是数据库中, System.out.print

2021-05-17 21:21:59 399 1

原创 探究事务ACID的实现原理

兄弟萌,MySQL 中事务的四大特性相信很多人都能脱口而出: 原子性、一致性、隔离性、持久性,并且能够吧啦吧啦说一大堆概念,但我相信很多兄弟都不知道它们底层是如何实现的,本文就来介绍一下事务 ACID 四大特性的实现原理。首先,我们还是来介绍一下 ACID 四大特性吧,hhh,我也先来吧啦吧啦一段。原子性(A):一个事务中的所有操作,要么都执行要么都不执行一致性(C):执行事务前后,数据的完整性必须保持一致隔离性(I):一个事务的执行不受其它事务的干扰持久性(D):一个事务一旦提交,则会永久改变数

2021-05-12 23:10:57 140

原创 一文带你轻松读懂IO多路复用机制

兄弟萌,IO 多路复用相信很多人都似懂非懂,看过很多博客,也发现大多数博客中讲得晦涩难懂,本篇博客尝试使用浅显易懂的方式来讲清楚 IO 多路复用机制。不多 BB,进入正题…常见的 IO 模型有 5 种:同步阻塞 IO(BIO)同步非阻塞 IO(NIO)信号驱动 IOIO 多路复用异步 IO(AIO)Tips:本文重点讲述 BIO,NIO,IO 多路复用BIO服务端为了处理客户端的连接和请求的数据,写了如下代码:可以看到,服务器阻塞在了两个地方,一个是 accept 函数,一个是

2021-04-18 16:42:32 235

原创 大白话讲明白什么是分布式事务?

分布式事务?什么东西?分布式我听过,事务我也听说,分布式事务是什么鬼?相信兄弟萌初次听说分布式事务跟我一样,一脸懵逼!不多 BB,进入正题…要想搞懂分布式事务,首先解决两个问题:什么是分布式系统?什么是事务?简单来说,分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的多个计算机节点组成的系统简单来说,事务就是作为单个逻辑单元执行的一组操作,要么全部成功,要么全部失败分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成。假如没有分布式事务会怎么样?我们

2021-04-06 23:15:58 394

原创 反编译探究枚举实现单例原理

兄弟萌,相信大家已经掌握了单例模式的多种实现方式,如:饿汉式、懒汉式、双重检测锁、静态内部类、枚举。前面几种相信大家看到代码很容易能够理解,但看到枚举方式时,相信大家会跟我有一种心情:WTF?这特么是怎么实现单例的?废话少说,先看枚举方式是怎样的。看到这里,先不谈它的底层实现原理,甚至可能还有很多人还不知道它怎么拿到这个单例对象,接着看。我们反编译来研究一下这到底是怎么实现的?javap EnumSingleton.javajavap -c EnumSingleton.class为了追

2021-03-25 17:35:01 135 2

原创 一文带你轻松读懂RPC框架调用流程

兄弟萌,相信很多人只是简单知道 RPC 是远程过程调用,但是并不知道它如何实现远程调用,本文带你解析什么是 RPC 框架,以及 RPC 框架的远程调用过程?开始吧…RPC(Remote Procedure Call,远程过程调用),是一种进程间通信方式,也就是说两台服务器 A、B,一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数/方法,由于不在同一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用参数。如果是本地方法调用,直接压栈即可。RPC 就是要像调用本地的函数一样去

2021-03-15 11:02:44 551

原创 探究Spring和SpringMVC父子容器关系

兄弟萌,相信有很多人想不到 Spring 和 SpringMVC 是父子容器吧,hhh,下面我们来一探究竟。一般做 SSM 框架项目时,扫描 @Controller 注解类的对象是在 SpringMVC 容器中。而扫描 @Service、@Component、@Repository 等注解类的对象都是在 Spring 容器中。有没有兄弟想过这是为什么呢?Spring 和 SpringMVC 是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题。Spring是父容器,SpringMVC 是子容器。

2021-03-12 19:18:02 372

原创 深入剖析JDK动态代理

我们知道 Java 中的代理按照代理类生成时机不同分为静态代理和动态代理。静态代理代理类在运行前就已经写好了,而动态代理代理类是在 Java 运行时动态生成。动态代理又有 JDK 代理和 CGLIB 代理两种。我相信很多人了解 JDK 动态代理都不太深入,只是知道有这么一个概念,我们来深入探讨一下 JDK 动态代理。代理(Proxy)模式分为四种角色:抽象角色:通过接口或抽象类声明目标对象和代理对象实现的业务方法目标角色:实现了接口或抽象类中的具体业务代理角色:提供了与目标对象相同接口,其内部含

2021-03-12 10:31:40 101

原创 索引失效原理你真的懂了吗?

兄弟萌在学习 MySQL 索引机制时,想必都听说过索引失效的几大场景吧。违反最左前缀法则,索引失效范围查询右边的列,不能使用索引以 % 开头的 like 模糊查询,索引失效字符串不加单引号,导致索引失效索引列上进行运算操作,索引将失效用 or 分割开的条件,如果 or 前条件中的列有索引,而后面的列中没有索引,那么前面的列索引失效如果 mysql 评估使用索引比全表慢,则不使用索引但是光背是没有用的,你真的了解了它们为什么会失效吗?下面我们具体分析一下索引失效原理。1. 为什么违反最

2021-03-08 19:59:16 482 2

原创 接口中能定义具体实现方法吗?带你看看JDK8新特性之接口默认方法

在 JDK8 之前,接口中都只能有抽象方法,而不能有具体实现方法。在 JDK8 新特性中引入了接口默认方法。1.什么是接口默认方法呢?答:接口中可以包含带有具体实现的方法,需要使用 default 修饰,此类方法称为默认方法。2.接口默认方法的应用场景?答:在系统稳定运行了很长一段时间,由于新需求的产生,需要在接口中新增方法,如果在 JDK8 之前,所有接口实现类都要重写这个方法,如果接口实现类有几百上千个,非常麻烦。这时,我们就可以利用接口默认方法,直接在接口中把这个方法实现了,在接口实现类中调

2021-02-27 21:33:53 1885

原创 解决哈希冲突的几种方法

解决哈希冲突1、链表式解决2、开放寻址法2.1 线性探测法2.2 平方探测法2.3 双哈希法哈希表是一种根据 key-value 进行访问的数据结构,它通过把 key 值映射到表中的一个位置来访问记录,以加快查找速度,哈希表中寻找一个特定的元素,时间复杂度只需要O(1)。只要两个元素的 key 计算的哈希值相同就会发生哈希碰撞,也叫哈希冲突。遇到哈希冲突怎么办?1、链表式解决我们熟悉的 HashMap 就是采用了这种方式解决哈希冲突当没有发生哈希冲突的时候 HashMap 只有数组。但是当发生

2021-02-24 17:50:32 1185

原创 @Bean+方法参数&有参构造器注入方式

Spring 利用依赖注入(DI),完成对 IOC 容器中中各个组件的依赖关系赋值。@Autowired:自动注入,从容器中获取参数组件的值这里我们首先叉开话题,先讨论一下使用 @Autowired 自动注入时,有可能会遇到以下问题:当一个接口有 2 个不同实现时,使用 @Autowired 注解时会报 org.springframework.beans.factory.NoUniqueBeanDefinitionException 异常信息。解决方式:使用 @Qualifier 注解,选择一个

2021-02-05 23:43:57 4590

原创 【源码分析】SpringBoot中multipartResolver如何添加到容器?

首先,我们先回顾一下 SpringBoot 的自动配置流程:SpringBoot 先加载所有自动配置类 xxxAutoConfiguration每个自动配置类按照条件装配进行生效,默认都会绑定配置文件指定的值生效的配置类就会给容器中装配很多组件,就相当于添加了很多功能现在我们看一下 SpringBoot 中 multipartResolver 如何添加到容器中?我们在将 DispatcherServlet 添加到 Spring 容器时,发现有这样一段代码:@ConditionalOnBea

2021-02-05 10:42:12 390

转载 快速让你理解进程与线程的区别

快速让你理解进程与线程的区别一、一切要从CPU说起二、从 CPU 到操作系统三、从单核到多核,如何充分利用多核四、从进程到线程五、线程与内存六、从多线程到线程池七、总结一、一切要从CPU说起一切要从 CPU 说起,CPU 并不知道线程、进程之类的概念。CPU 只知道两件事:从内存中取指令执行指令,返回1注意:CPU 不是直接从内存中取指令,而是先从内存中读取指令加载到寄存器中,CPU 从寄存器中取指令进行运算,主要是为了解决CPU和内存间操作速度上的差异CPU这家伙执行一条指令大约需要耗

2021-02-03 11:55:01 264

原创 直白解释分库分表与分布式全局唯一性ID

分库分表与分布式全局唯一ID一、为什么要分库分表?二、垂直拆分2.1 垂直分库2.2 垂直分表三、水平拆分3.1 水平分库3.2 水平分表四、什么是分布式全局唯一性ID?五、分布式ID生成方案5.1 UUID5.2 数据库自增ID5.3 数据库多主模式5.4 雪花算法5.5 Redis一、为什么要分库分表?如果单表的数据量达到1000w+后,会极大影响 sql 执行的性能,即使添加或优化索引,做很多操作时性能仍下降严重。如果单库中存放了很多表,如:会员表、订单表、商品表等,那么这个数据库极大可能由于高

2021-01-10 17:35:57 530

原创 同步和阻塞是一码事?同步和非阻塞是否矛盾?

网上看到也有很多讲解关于同步、异步、阻塞、非阻塞,但众说纷纭,也不太好理解,下面我尝试用简单的几句话来解释这几个概念,如果有误,欢迎指出。同步、异步关注的是消息通信机制。阻塞、非阻塞关注的是等待消息时调用者的状态。同步、异步、阻塞、非阻塞它们针对的对象是不一样的。对于调用者来说是阻塞和非阻塞,被调用者是同步和异步。同步:发了消息后,返回的结果由调用方来处理异步:发了消息后,调用方不管了,返回的结果由我们写好程序来自动回调处理阻塞:发了消息,调用方啥也不干,就搁着等着非阻塞:发了消息,调用方

2021-01-08 20:25:53 1593 2

原创 你了解一致性哈希算法吗?

什么是一致性哈希算法?一、使用Hash算法好处二、为什么要有一致性Hash算法?三、什么是一致性Hash算法?四、一致性Hash算法的容错性和可扩展性五、Hash环的数据倾斜一、使用Hash算法好处假设使用Redis缓存图片资源,key值为图片名称,value为该图片所在文件服务器路径,我们需要根据图片名称查找该文件所在文件服务器上的路径,数据量大概有2000W左右,采用随机分配规则,部署8台缓存服务器,每台服务器大概含有500W条数据,并且进行主从复制。实际上,这样也能满足我们的要求,但如果这样做

2020-12-30 20:27:50 192

原创 布隆过滤器如何防止Redis缓存穿透?

布隆过滤器如何防止Redis缓存穿透一、什么是缓存穿透?二、什么是布隆过滤器?三、布隆过滤器原理3.1 存入过程3.2 查询过程3.3 删除过程四、布隆过滤器如何防止Redis缓存穿透?兄弟们在学习缓存穿透时,听说解决缓存穿透传统方案之一就是使用布隆过滤器,那什么是布隆过滤器呢?首先我们看看什么是缓存穿透!一、什么是缓存穿透?用户查询的数据在Redis中未命中,查询数据库也不存在,每次请求直接访问数据库,造成数据库短时间内承受大量请求而崩掉。一般是由于黑客攻击,出现非正常URL访问。二、什么是布隆过

2020-12-30 10:12:29 638 2

原创 大白话讲解Redis分布式锁

什么是分布式锁一、分布式锁应用场景二、分布式锁的实现有哪些?三、如何用Redis实现分布式锁?一、分布式锁应用场景首先思考一个问题,在多线程并发情况下,如何保证一个代码块在同一时间只能由一个线程访问?答:我们很容易能够想到通过 “锁” 机制来保证,如:java的synchronized语法以及Reentrantlock类等。这样可以保证在同一个JVM进程内多个线程同步执行。但如果是在分布式的集群环境中,如何来保证不同节点的线程同步执行呢?答:使用分布式锁。二、分布式锁的实现有哪些?分布式锁

2020-12-28 10:49:59 168 1

原创 读写锁应用到缓存更新策略

读写锁应用到缓存更新一、读取缓存流程二、模拟查询缓存代码三、常见的缓存更新策略四、读写锁应用到缓存更新策略一、读取缓存流程我们知道,Redis是一个Nosql数据库,由于其数据都放在内存中,常常用来做缓存。在读取缓存方面,都是按照下图的流程来进行业务操作。但兄弟们有没有想过如果数据库中数据修改了,那么缓存的更新策略是什么样呢?我们现在就来讨论这个问题。首先我们看看模拟查询缓存代码。二、模拟查询缓存代码定义一个Map集合作为缓存,在实际生产中使用Redis来做缓存,实际上Redis的底层结构也是

2020-12-27 15:13:16 225

原创 Java类实现Serializable、Iterable、比较器接口详解

在Java源码中,看到很多类实现了Serializable接口,但是不知其意,接下来我们来具体分析。首先给出结论:java中的类只有实现了Serializable接口,它的对象才是可序列化的。什么是序列化和反序列化呢?序列化:对象流将Java对象转换成二进制写入磁盘(排好队,切成一块一块的放到硬盘文件中)反序列化: 从磁盘读出完整的 Java 对象(把硬盘文件中一块一块的东西拿到内存中去组成成为一个对象)如何实现序列化和反序列化呢?实现序列化该类必须实现序列化接口 java.io.Seria

2020-12-20 16:11:17 665

原创 CMS垃圾收集器:重新标记和浮动垃圾的思考

CMS垃圾收集器工作原理:初始标记阶段:所有用户线程暂停,标记出GC Roots能直接关联的对象并发标记阶段:从GC Roots直接关联对象开始遍历整个对象图的过程,可以和用户线程并发执行重新标记阶段:所有用户线程暂停,修正并发标记期间,因用户线程继续运作而导致标记产生变动部分对象的标记记录并发清除阶段:清理标记阶段判断为死亡的对象,释放空间内存,可以和用户线程并发执行我们知道,在重新标记阶段会修正由于用户线程运作而导致对象的标记产生变动的记录,那为什么还有浮动垃圾产生?答:由于标记阶段是

2020-11-26 16:26:29 2479 2

原创 Java四大域对象

Java四大域对象一、JSP内置对象1.1 pageContext1.2 request1.3 session1.4 application二、请求转发和重定向2.1 请求转发2.2 重定向一、JSP内置对象1.1 pageContext作用范围:当前 JSP 页面共享数据,还可以获取其它八个内置对象。1.2 request作用范围:在整个请求链中共享数据,常用在请求转发中 Servlet 中处理好的数据交给 JSP 显示。1.3 session作用范围:在一次会话的多次请求间共享数据。

2020-10-19 10:49:35 477 1

原创 你真的了解Servlet工作机制吗?

Servlet一、什么是Servlet?二、Servlet工作机制三、什么是Servlet容器?一、什么是Servlet?1)Servlet 就是对浏览器发出访问请求作出处理的组件,运行于支持 Java 的应用服务器中(如:tomcat)2)Servlet 就是一个接口,接口中定义了一些方法,定义了 Java 类被 tomcat 识别的规则我们随便写个 Java 类 tomcat 就能执行它吗?答:不是的。Java 类有一定规范或规则才能由 tomcat 执行,即创建对象,调用方法。二、Se

2020-10-16 21:39:59 404 2

原创 Restful风格

restful风格一、什么是restful风格?二、传统方式操作资源三、使用restful操作资源四、restful风格规范一、什么是restful风格?restful 风格说白了就一句话:用不同的请求方式来对资源进行操作,使请求的 URL 简单、清爽。可以通过GET、POST、PUT、PATCH、DELETE等方式对服务端的资源进行操作。注意:只是采用下列方式进行资源标识,然后写相应实现的方法,并不是说明 POST 请求就是对应着创建资源,如果你愿意的话,你可以把 GET 方式标识为创建资源,但

2020-10-15 22:17:23 268

原创 Thymeleaf入门,这篇文章就够了!

Inlining(内联)[[…]]对应于th:text - 不会解析特殊字符[(…)]对应于th:utext - 会解析特殊字符直接将表达式写到我们的HTML文本中,如:<p>Hello, [[${session.user.name}]]</p><!-- 用来代替 --><p> Hello, <span th:text="${session.user.name}">Sebastian </span>

2020-10-15 10:19:34 255

原创 URL路径前加“/“和不加“/“的区别?

如:在 jsp 页面引入 css 文件使用以下路径<link href="/css/bootstrap.min.css" rel="stylesheet"><link href="css/bootstrap.min.css" rel="stylesheet">假设当前访问 jsp 页面是:http://localhost:8080/demo/test.jsp加"/“代表 绝对路径,是从站点的根目录开始找,即:http://localhost:8080/css/bootst

2020-10-14 17:08:39 1159

原创 什么是jsp?

JSP一、什么是JSP?二、JSP本质三、JSP内置对象四、JSP指令五、什么是JSTL?一、什么是JSP?JSP(Java Server Pages):Java 服务器端页面,JSP页面可以指定 html 标签,又可以定义 Java 代码应用场景:页面中的部分数据从服务器动态获得,还有部分是静态页面jsp = html + javaJSP 定义 Java 代码的方式:<% 代码 %>,如:二、JSP本质JSP 本质上就是一个 Servlet。index_jsp.java

2020-10-13 10:43:33 425

原创 深入理解JSON对象

JSON一、什么是JSON?二、JSON VS XML?三、JSON语法四、JSON对象和Java对象的相互转换4.1 Java 对象转换为 JSON4.2 JSON 转为 Java 对象五、JSON 和 JS 对象的关系六、在 JavaScript 中使用 JSON6.1 将 JSON 数据赋值给变量6.2 获取数据6.3 JSON对象转换成字符串七、Ajax+json异步传输7.1 什么是Ajax?7.2 Ajax实现异步更新一、什么是JSON?JSON(Java Script Object Not

2020-10-12 21:26:49 607

原创 /、/*、/**区别

/:只会拦截路径,不会拦截页面,指发任何请求都会经过这个Servlet,但不会匹配到模式为*.jsp这样的后缀型url/*:拦截所有的文件夹,不包含子文件夹,会拦截路径和页面/**:拦截所有的文件夹及里面的子文件夹...

2020-10-12 13:54:20 434

原创 什么是JNDI?

JNDI(Java Naming and Directory Interface):Java 命名与目录接口JNDI作用: 1)JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。2)所有与系统外部的资源的引用,都可以通过JNDI定义和引用。没有JNDI的做法:public class JdbcTemplateDemo1 { public static void main(String[] args) { //准备数据源:Spring的内置数据源

2020-10-10 10:24:15 1214

原创 QueryRunner是什么?

它是由DBUtils包提供的一个工具类,需要引入 commons-dbutils 依赖。它与JdbcTemplate功能类似,该类简单化了SQL查询,与ResultSetHandler协同工作将使编码量大为减少。<!--配置QueryRunner: QueryRunner是个单例对象,有多个dao在使都是同一个对象,有可能导致线程安全问题, 配置成多例对象, 保证每次使用这个对象,都是创建新的对象 --> <bean id="runn

2020-10-07 21:37:04 10423 1

空空如也

空空如也

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

TA关注的人

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