每日三个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…...
飞书远程控机:OpenClaw配置全攻略
本文详细介绍如何通过 OpenClaw 工具对接飞书开放平台,配置智能机器人实现 Windows 电脑的远程控制。主要内容涵盖文件管理和程序启动等核心功能的实现方法,并提供完整的配置指南与常见问题解决方案。 一、使用前提说明 1. 系统要求 仅适用于 Windows…...
树莓派工业GPIO接口板:电气隔离与电平转换实战指南
1. 项目概述:为什么需要一块工业级GPIO接口板?如果你用树莓派做过一些硬件项目,尤其是涉及到控制继电器、电机或者连接工业设备(比如PLC、变频器)时,大概率踩过这样的坑:直接用树莓派的GPIO引脚…...
想深耕网络安全行业,这些必备条件缺一不可
网络空间的攻防对抗日益激烈,网络安全已成为企业生存和国家安全的命脉,它负责构筑数字世界的坚固防线,保护核心资产与用户隐私免受侵害。 想要成为一名优秀的网络安全专家,除了敏锐的安全意识和高度的责任感,更需要锤…...
自动加字幕软件推荐:口播视频如何批量加字幕过
口播视频加字幕,为什么越做越累?一位知识类博主连续两周日更3条口播视频,每条12–18分钟,需手动校对字幕、拆分金句切片、补气口停顿、匹配背景音乐——最后一条视频发布时,字幕错漏率达17%,平台审核未过。…...
修复 PowerShell 7 下 conda activate 报错的指南
修复 PowerShell 7 下 conda activate 报错的指南 适用场景:升级到 PowerShell 7.x 后,conda activate 突然报错,但 Windows PowerShell 5.1 正常。 发布日期:2026-05-24 适用版本:conda 23.x PowerShell 7.x 一、问题…...
Windows HEIC缩略图解决方案:让iPhone照片在资源管理器中重获新生
Windows HEIC缩略图解决方案:让iPhone照片在资源管理器中重获新生 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 想…...
Redis Bitmap的隐藏用法:从“优惠券防超领”到“大数据去重”的实战避坑指南
Redis Bitmap的隐藏用法:从“优惠券防超领”到“大数据去重”的实战避坑指南 在数据密集型的现代应用中,如何高效处理海量数据的唯一性校验和状态标记,一直是开发者面临的挑战。Redis的Bitmap数据结构以其极低的内存消耗和O(1)时间复杂度的位…...
Go语言单元测试:testing框架
Go语言单元测试:testing框架 1. 测试基础 func TestAdd(t *testing.T) {if Add(1, 2) ! 3 {t.Error("Add failed")} }2. 总结 单元测试是保证代码质量的基础,Go语言内置testing框架。...
5步掌握AMD锐龙SDT调试工具:从硬件小白到调优高手的实战指南
5步掌握AMD锐龙SDT调试工具:从硬件小白到调优高手的实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...
告别L298N!用TB6612驱动模块给你的STM32循迹小车降功耗提性能
告别L298N!用TB6612驱动模块给你的STM32循迹小车降功耗提性能 在嵌入式开发领域,电机驱动模块的选择往往决定了整个项目的能效表现和稳定性。对于参加电子设计竞赛的学生和硬件爱好者来说,如何在有限的电池容量下实现更长的运行时间和更精准的…...
