Day019

本文详细阐述了JSP中动态include与静态include的区别,解释了数据库连接池的工作原理及重要性,并对比了HashMap与Hashtable的特点与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSP 简答题
JSP 中动态 include 与静态 include 的区别?
在静态引入中,子页面是原封不动的把页面的信息放到了父页面中,父页面把所有页面的页面信息都收集完成后,统一的进行解析,完成页面的输出。这样,如果在不同的页面中定义了相同名称的变量,那么就会产生冲突。

但是在动态引入中,由于每一个页面都是单独的进行解析的。再交给父页面合成生成一个 HTML 页面,每个子页面和父页面中定义的 Scriptlet 是不会产生冲突的。

在实际的开发中,我们一般都是用动态的引入。

Java 简答题
什么是数据库连接池?
官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
个人理解:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。

Java 简答题
HashMap 和 Hashtable 的区别?

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,
主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

package com.main; import org.junit.jupiter.api.*; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvFileSource; import org.mockito.InjectMocks; import org.mockito.Mock; import java.util.function.Predicate; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.when; class NextDate019Test { @BeforeEach void setUp() { } @AfterEach void tearDown() { } @Mock private IParamVerify iParamVerify; @InjectMocks NextDate019 nextDateMock019; @ParameterizedTest @CsvFileSource(resources = "/com/main/nextDay.csv", numLinesToSkip = 1) @DisplayName("参数化测试&Mockito-@CsvFileSource-Csv格式文件提供数据") void nextDateVerifyParaWithMockitoAndParameter(String year, String month, String day) { // 定义一个 Predicate,根据是否抛出异常返回 true/false Predicate<String> intCheck = s -> { try { // 可能抛出异常的操作(例如校验逻辑) //转换为整数 Integer.parseInt(s); return true; // 无异常返回 true } catch (Exception e) { return false; // 捕获异常返回 false } }; //年是否为整数 if (intCheck.test(year)) { when(iParamVerify.IsInt(year)).thenReturn(true); //正式开始测试自己的东西 assertEquals("201", nextDateMock019.NextDateVerifyPara(year, month, day)); } else { when(iParamVerify.IsInt(year)).thenReturn(false); //正式开始测试自己的东西 assertEquals("201", nextDateMock019.NextDateVerifyPara(year, month, day)); } //月是否为整数 if (intCheck.test(month)) { when(iParamVerify.IsInt(month)).thenReturn(true); //正式开始测试自己的东西 assertEquals("201", nextDateMock019.NextDateVerifyPara(year, month, day)); } else { when(iParamVerify.IsInt(year)).thenReturn(false); //正式开始测试自己的东西 assertEquals("201", nextDateMock019.NextDateVerifyPara(year, month, day)); } //日是否为整数 if (intCheck.test(day)) { when(iParamVerify.IsInt(month)).thenReturn(true); //正式开始测试自己的东西 assertEquals("203", nextDateMock019.NextDateVerifyPara(year, month, day)); } else { when(iParamVerify.IsInt(day)).thenReturn(false); //正式开始测试自己的东西 assertEquals("203", nextDateMock019.NextDateVerifyPara(year, month, day)); } } }
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值