每日三个JAVA经典面试题(十九)
1.Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?Java并发API中的Lock接口提供了一种比传统synchronized块或方法更灵活、更强大的线程同步机制。Lock接口允许更细粒度的锁控制,通过它可以实现更复杂的线程同步结构,而不仅仅是同步代码块或方法。
Lock接口的主要特点:
-
显式锁定和解锁:与
synchronized隐式锁的使用不同,使用Lock接口时,你需要显式地获取和释放锁。这提供了更好的控制,但也需要开发者手动管理锁的释放,以避免死锁。 -
尝试非阻塞地获取锁:
Lock接口提供tryLock()方法,允许线程尝试获取锁而不是无限期等待,这可以解决一些死锁问题。 -
可中断的锁获取操作:
lockInterruptibly()方法允许线程在等待锁的过程中响应中断。 -
支持超时:
tryLock(long time, TimeUnit unit)方法允许线程在给定的等待时间内尝试获取锁,如果在指定时间内没有获取到锁,线程可以放弃等待,这增加了更多的灵活性。 -
支持公平锁:一些
Lock实现(如ReentrantLock)提供了构造函数,可以创建一个基于公平策略的锁。公平锁意味着线程将按照请求锁的顺序来获取锁,减少饥饿现象。
与synchronized的对比优势:
- 灵活性:
Lock提供了更多的锁操作功能,如尝试获取锁、设置超时和中断等待锁的线程,使得锁的管理更加灵活。 - 控制精度:
Lock允许在不同的作用域中获取和释放锁,不仅限于同步块的范围内,提供了更细粒度的锁控制。 - 性能:在某些复杂的同步需求和高竞争环境下,
Lock可能提供比synchronized更好的性能。 - 公平性:
Lock可以创建公平锁,而synchronized块是非公平的。
尽管Lock接口提供了比synchronized更强大和灵活的同步控制能力,但它也需要更仔细的锁管理,包括确保在所有路径上锁都被正确释放,以避免死锁或资源泄漏。因此,选择使用Lock还是synchronized应根据具体的使用场景和需求来决定。对于简单同步需求,使用synchronized可能更简洁方便;对于需要高度控制和灵活性的场景,Lock可能是更好的选择。
2.jsp 和 servlet 有什么区别?
JSP (JavaServer Pages) 和 Servlet 是Java EE技术的两个核心组件,用于开发动态Web应用。它们之间的主要区别在于它们的用途、设计和工作方式。
1. 目的和设计哲学
- Servlet:是Java的服务器端程序,用Java编写,主要用于处理客户端的请求并生成动态内容。Servlet是控制层的技术,用于业务逻辑的处理和数据处理。
- JSP:是一种便于创建动态内容的Web页面技术。JSP可以看作是Servlet技术的扩展,它允许将Java代码嵌入到HTML页面中。JSP更侧重于视图,是用于展示层的技术。
2. 工作方式
- Servlet:当请求到达Servlet时,Servlet容器(如Tomcat)会加载并执行Servlet类的
service方法来处理请求,并生成响应。开发者需要在Servlet中通过编写Java代码来生成整个页面。 - JSP:当请求指向JSP页面时,JSP引擎首先将JSP页面转换为一个Servlet源码,然后编译这个Servlet源码,生成对应的类文件,最后执行该Servlet。在JSP页面中,可以直接使用HTML标签,并在其中嵌入Java代码(通常通过特殊标签如
<% %>实现)来生成动态内容。
3. 易用性和维护性
- Servlet:编写和维护需要深入的Java编程知识,所有内容都通过Java代码生成,这对于主要处理业务逻辑和数据的场景更适合。
- JSP:由于支持HTML标签,使得页面开发更为直观和简单。JSP允许Web开发者和设计师更容易地协作开发Web界面。
4. 性能
- Servlet:通常,由于Servlet是预先编译好的,它的执行速度比JSP快。Servlet适用于处理复杂的处理逻辑。
- JSP:虽然JSP页面最终也会被编译成Servlet,但这个转换和编译过程会在第一次请求时进行,可能导致第一次访问的性能稍差。不过,一旦编译完成,性能与Servlet相差无几。
总结
虽然JSP和Servlet在内部实现上有所不同,但它们都用于生成动态Web内容。选择使用JSP还是Servlet,主要取决于开发的需求、项目的结构以及开发团队的偏好。在现代Web应用开发中,经常将二者结合使用,利用Servlet处理复杂的业务逻辑,而使用JSP作为表现层来显示信息,以达到MVC(Model-View-Controller)设计模式的分离。
3.jsp 有哪些内置对象?作用分别是什么?
JSP (JavaServer Pages) 提供了一组内置对象(也称为隐式对象),这些对象在JSP页面中可直接使用,无需显式声明或初始化。这些内置对象提供了与Servlet容器和HTTP请求/响应等相关的功能。以下是一些常用的JSP内置对象及其作用:
1. request
- 类型:
HttpServletRequest - 作用:代表客户端的请求。通过它可以获取到客户端发送的数据、查询字符串、请求参数等。
2. response
- 类型:
HttpServletResponse - 作用:代表对客户端的响应。可以用来设置响应头、发送错误等。
3. out
- 类型:
JspWriter - 作用:用于向客户端发送输出内容。通常用来输出HTML标记或文本数据。
4. session
- 类型:
HttpSession - 作用:代表用户会话,可用于存储跨多个页面或请求的用户特定数据。
5. application
- 类型:
ServletContext - 作用:代表整个Web应用的上下文环境,可用于存储全局共享数据。
6. config
- 类型:
ServletConfig - 作用:提供了对Servlet配置信息的访问,如初始化参数。
7. pageContext
- 类型:
PageContext - 作用:为JSP页面提供了一个存储属性的空间,并提供了对其他内置对象的访问。它是访问其他内置对象的入口。
8. page
- 类型:
Object - 作用:代表JSP页面本身。在JSP页面中,
this关键字就是page对象的一个引用。
9. exception
- 类型:
Throwable - 作用:仅在错误页面中可用,代表原始页面抛出的异常。
这些内置对象使得在JSP页面中处理请求、响应、会话管理和异常处理等变得更加简单直接。它们是JSP规范的一部分,确保了JSP页面的开发效率和便利性。
相关文章:
每日三个JAVA经典面试题(十九)
1.Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?Java并发API中的Lock接口提供了一种比传统synchronized块或方法更灵活、更强大的线程同步机制。Lock接口允许更细粒度的锁控制,通过它可以实现更复杂的线…...
springboot企业级抽奖项目业务一(登录模块)
开发流程 该业务基于rouyi生成好了mapper和service的代码,现在需要在controller层写接口 实际操作流程: 看接口文档一>controller里定义函数一>看给出的工具类一>补全controller里的函数一>运行测试 接口文档 在登录模块有登录和登出方…...
【Python + Django】启动简单的文本页面
前言: 为了应付(bushi)毕业论文,总要自己亲手搞一个像模像样的项目出来吧 ~ ~ 希望自己能在新的连载中学到项目搭建的知识,这也算是为自己的测试经历增添光彩吧!!! 希望、希望大家…...
Docker——问题解决:服务器端和Windows端IP互通
踩了大坑,特此记录!!!!! 我在服务器端部署了服务,但是在本地端Windows机器上无法访问,因此卡了一天。 1. 双向Ping通 防火墙导致只能单向Ping通 首先需要解决双向ping通的问题&…...
HTTP跨域
1. 简介 HTTP跨域是指不同域名下的网页请求资源时,由于浏览器同源策略限制,导致请求被阻止。为解决这一问题,开发者常采用跨域资源共享(CORS)等技术来允许合法跨域请求,确保网站功能正常运行。 同源 协议…...
用Python的turtle库绘制皮卡丘
turtle库的简介 turtle(海龟)库是turtle绘图体系的python实现,turtle库是一种标准库,是python自带的。 turtle(海龟)是一种真实的存在,有一个海龟在窗口的正中心,在画布上游走,走过的轨迹形成了绘制的图形࿰…...
C语言打印当前时间
#include <time.h> void print_current_time(char* func_name) { // 获取当前的时间 time_t current_time; time(¤t_time); // 将时间转换为本地时间格式 struct tm *local_time localtime(¤t_time); // 打印当前的时间 …...
(一)基于IDEA的JAVA基础4
注释文本,注释模版 单行注释://开头放在代码前面,对少部分。 多行注释:快捷方式ctrlshift/,对段落代码注 释。 文档注释:/**……**/,用于声明作者或创作时 间。 文档注释如何设置,首先找到File中…...
【Python】复习12:标准库与第三方库
目录 概念标准库第三方库总结Python 标准库`os` 模块`sys` 模块`json` 模块`re` 模块`datetime` 模块代码示例`os` 模块例子`sys` 模块例子`json` 模块例子`re` 模块例子`datetime` 模块例子第三方库`numpy``pandas``requests`安装第三方库使用第三方库其他一些流行的Python库数…...
CUDA 12介绍
CUDA(Compute Unified Device Architecture)是由 NVIDIA 开发的并行计算平台和应用程序编程接口(API)。CUDA 使开发人员能够使用 NVIDIA GPU 进行通用目的的并行计算。CUDA 通过利用 GPU 的大规模并行计算能力来加速各种类型的计算…...
旅游系统-软件与环境
运行 1.下载软件并进行环境配置 2.导入项目包以及SQL文件 (1)VsCode 管理员运行打开 a.新建terminal 注意: 1.执行 npm config set registry https://registry.npm.taobao.org 2.执行 npm install 3.执行 $env:NODE_OPTIONS“–openssl-legacy-provider” b.输入…...
AI基础知识(2)--决策树,神经网络
1.什么是决策树? 决策树是一类常见的机器学习方法,决策树是基于树的结构来进行决策。决策过程中提出的每一个问题都是对于属性的“测试”,决策的最终结论对应了我们希望的判定结果。一个决策树包含一个根节点,若干个内部节点和若…...
蓝桥杯C++大学B组一个月冲刺记录2024/3/21
蓝桥杯C大学B组一个月冲刺记录2024/3/20 规则:每日三题 今日的题很简单┗|`O′|┛ 嗷~~ 1.奶酪 现有一块大奶酪,它的高度为 h ,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。 我们可以在…...
由浅到深认识C语言(14):枚举
该文章Github地址:https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn…...
速盾cdn:cdn节点缓存内容不一致怎么办?
在使用CDN服务时,有时候可能会遇到CDN节点缓存内容不一致的情况。这种情况会导致用户访问网站时获取到的内容不一致,给用户带来困惑和不良体验。那么当遇到这种情况时,我们应该如何解决呢? 首先,我们需要了解CDN是如何…...
【LAMMPS学习】三、构建LAMMPS(6)在构建中包含软件包
3. 构建 LAMMPS 3.6.在构建中包含软件包 在 LAMMPS 中,包是一组启用一组特定功能的文件。例如,分子系统的力场或刚体约束都在封装中。在 src 目录中,每个包都是一个子目录,包名称为大写字母。 包文档页面上给出了包的概述。每…...
apache commons-dbcp Apache Commons DBCP 软件实现数据库连接池 commons-dbcp2
DBCP组件 许多Apache项目支持与关系型数据库进行交互。为每个用户创建一个新连接可能很耗时(通常需要多秒钟的时钟时间),以执行可能需要毫秒级时间的数据库事务。对于一个公开托管在互联网上的应用程序,在同时在线用户数量可能非…...
8.2K star!史上最强Web应用防火墙
🚩 0x01 介绍 长亭雷池SafeLine是长亭科技耗时近 10 年倾情打造的WAF(Web Application Firewall),一款敢打出口号 “不让黑客越雷池一步” 的 WAF,我愿称之为史上最强的一款Web应用防火墙,足够简单、足够好用、足够强的免费且开源…...
浅谈RPC的理解
浅谈RPC的理解 前言RPC体系Dubbo架构最后 前言 本文中部分知识涉及Dubbo,需要对Dubbo有一定的理解,且对源码有一定了解 如果不了解,可以参考学习我之前的文章: 浅谈Spring整合Dubbo源码(Service和Reference注解部分&am…...
JDK发布信息、历史及未来规划
1.未来规划 发布日期类型版本其它信息2026-01-20CPU25.0.2, 21.0.10, 17.0.18, 11.0.30, 8u4812025-10-21CPU25.0.1, 21.0.9, 17.0.17, 11.0.29, 8u4712025-09-16Feature*25 LTS2025-07-15CPU24.0.2, 21.0.8, 17.0.16, 11.0.28, 8u4612025-04-15CPU24.0.1, 21.0.7, 17.0.15, 1…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
