面试小札:闪电五连鞭_2
1 请简单描述一下Java中的多线程。
多线程是指在一个程序中可以同时运行多个线程来执行不同的任务。在Java中,通过 java.lang.Thread 类来创建和控制线程。可以通过继承 Thread 类或者实现 Runnable 接口的方式来定义线程的执行逻辑。
线程有多种状态,如新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。多线程可以提高程序的效率,例如在处理多个I/O操作或者大量计算任务时可以并发执行。
2 解释一下Spring框架中的IOC(控制反转)和DI(依赖注入)?
IOC是一种设计思想,它将对象的创建和依赖关系的管理从程序代码中转移到容器(如Spring容器)中。传统的程序是由程序员自己在代码中创建对象并管理对象之间的依赖关系,而在IOC模式下,容器负责创建对象并将对象注入到需要的地方。
DI是IOC的一种实现方式。Spring通过DI来实现对象之间的依赖关系的注入。有三种主要的注入方式:构造函数注入、Setter方法注入和接口注入(接口注入在Spring中不常用)。例如,通过构造函数注入的示例代码如下:
java
class ServiceA {
// ServiceA的逻辑
}
class ServiceB {
private ServiceA serviceA;
public ServiceB(ServiceA serviceA) {
this.serviceA = serviceA;
}
// ServiceB的逻辑,使用了serviceA
}
在Spring配置文件(或使用注解)中可以配置如何创建 ServiceA 和 ServiceB ,并将 ServiceA 注入到 ServiceB 中。
3 什么是数据库事务?在Java中如何实现数据库事务?
数据库事务是一组数据库操作,这些操作要么全部成功执行,要么全部不执行。事务具有ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
在Java中,使用JDBC操作数据库时,可以通过 Connection 对象来控制事务。例如:
java
try (Connection connection = DriverManager.getConnection(url, username, password)) {
connection.setAutoCommit(false); // 开启事务
try (Statement statement = connection.createStatement()) {
statement.executeUpdate("INSERT INTO table1 (column1) VALUES ('value1')");
statement.executeUpdate("INSERT INTO table2 (column2) VALUES ('value2')");
connection.commit(); // 提交事务
} catch (SQLException e) {
connection.rollback(); // 回滚事务
}
} catch (SQLException e) {
// 处理异常
}
当使用Spring框架时,可以使用 @Transactional 注解来标记需要事务管理的方法,Spring会自动处理事务的开启、提交和回滚。
4 谈谈你对Java中接口(interface)和抽象类(abstract class)的理解,它们有什么区别?
接口是一种抽象类型,它只包含方法签名(方法声明)和常量定义。接口中的方法默认是 public 和 abstract 的,常量默认是 public 、 static 和 final 的。一个类可以实现多个接口,实现接口的类必须实现接口中的所有方法。例如:
java
interface MyInterface {
void method1();
int CONSTANT_VALUE = 10;
}
class MyClass implements MyInterface {
@Override
public void method1() {
System.out.println("实现接口的方法");
}
}
抽象类是不能被实例化的类,它可以包含抽象方法(没有方法体的方法)和非抽象方法。抽象方法必须在子类中被实现。一个类只能继承一个抽象类。例如:
java
abstract class MyAbstractClass {
abstract void abstractMethod();
void nonAbstractMethod() {
System.out.println("非抽象方法");
}
}
class MySubClass extends MyAbstractClass {
@Override
void abstractMethod() {
System.out.println("实现抽象方法");
}
}
区别:接口主要用于定义行为规范,它更侧重于“做什么”;抽象类除了定义行为规范外,还可以包含部分实现,更侧重于“是什么”。一个类可以实现多个接口,但只能继承一个抽象类。
5 如何优化Java应用程序的性能?
算法和数据结构优化:选择合适的算法和数据结构,例如,在需要频繁查找元素的场景下,使用 HashMap 比 ArrayList 效率更高。
内存管理优化:避免过度创建对象,及时释放不再使用的资源。例如,对于一些临时变量,如果在方法结束后不再使用,可以让它们及时被垃圾回收。可以通过调整JVM的内存参数,如 -Xmx (最大堆内存)和 -Xms (初始堆内存)来优化内存使用。
多线程优化:合理利用多线程来提高并发性能,但要注意线程安全问题。可以使用线程池来避免频繁创建和销毁线程的开销,例如使用 ExecutorService 接口及其实现类来管理线程池。
数据库优化:优化SQL查询,合理使用索引。减少数据库的频繁访问,例如通过缓存查询结果来减少数据库的负载。在Java中可以使用像Ehcache或Redis这样的缓存工具。
代码优化:减少循环嵌套的层数,避免在循环中进行复杂的操作。对频繁调用的方法可以考虑内联(在某些情况下,JVM会自动内联简单的方法)。同时,避免使用 System.out.println 等输出语句在生产环境代码中进行大量的输出,因为这些操作会消耗性能。
相关文章:
面试小札:闪电五连鞭_2
1 请简单描述一下Java中的多线程。 多线程是指在一个程序中可以同时运行多个线程来执行不同的任务。在Java中,通过 java.lang.Thread 类来创建和控制线程。可以通过继承 Thread 类或者实现 Runnable 接口的方式来定义线程的执行逻辑。 线程有多种状态,…...
Milvus向量数据库06-RAG检索增强
Milvus向量数据库06-RAG检索增强 文章目录 Milvus向量数据库06-RAG检索增强1-学习目标2-参考网址3-执行过程记录1-到底什么是RAGRAG 的基本流程:为什么 RAG 优于传统的基于检索的方法:示例流程: 2-RAG和Elasticsearch对比3-RAG和向量数据库之…...
信创国产化时代:打造安全高效的信创网站解决方案
在全球科技竞争日益激烈的背景下,信创国产化已经成为中国信息技术领域的重要战略选择。信创国产化,即信息技术应用创新与国产化,旨在通过自主研发和创新,推动核心技术的国产化,减少对外部技术的依赖,确保国…...
python编程Day13-异常介绍捕获异常抛出异常
异常 介绍 1, 程序在运行时, 如果Python解释器遇到到一个错误, 则会停 止程序的执行, 并且提示一些错误信息, 这就是异常. 2, 程序停止执行并且提示错误信息这个动作, 通常称之为: 抛出 (raise) 异常 # f open(aaaa.txt) # FileNotFoundError: [Errno 2] No such file or dire…...
【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制
在高并发系统中,限流是一项非常重要的技术手段,用于保护后端服务,防止因流量过大导致系统崩溃。本文将详细介绍如何使用 Redisson 提供的 RRateLimiter 实现分布式限流,以及其原理、使用场景和完整代码示例。 目录 一、什么是限流…...
力扣-图论-8【算法学习day.58】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
Spring 中的验证、数据绑定和类型转换
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
Github----提交人不是自己
账号用户名都设置对的,但是提交人不是自己 解决 发现是用户名和账号都夹了"号导致 git config --global user.name "Your Name" git config --global user.email "your.emailexample.com"不用引号 git config --global user.name Your Name git …...
常用工具软件
前言 之前汇总过一篇嵌入式开发工具,但是掺杂了一些更偏向于日常使用的软件工具,这里单独提出来分享,都是自己在用的。 1.文件对比工具 BeyondCompare 文件对比利器,添加右键快捷键后。选中两个文件,右键可以直接进…...
Oracle报错ORA-01653: 表xx无法通过 8192在表空间中扩展
向Oracle 19g数据库中批量插入数据,当插入近2亿条数据后,报出如下错误: ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展 查看表空间,发现表空间大小已达到32G,表空间无法进行自动扩展了。(初始…...
【C语言】库函数常见的陷阱与缺陷(3):内存分配函数
目录 一、malloc 函数 1.1. 功能与常见用法 1.2. 陷阱与缺陷 1.3. 安全使用建议 1.4. 安全替代和代码示例 二、calloc 函数 2.1. 功能与常见用法 2.2. 陷阱与缺陷 2.3. 安全使用建议 2.4. 安全替代和代码示例 三、realloc 函数 3.1. 功能与常见用法 3.2. 陷阱与缺…...
Vue前端实现预览并打印PDF文档
一. 需求 1. 点击文档列表中的【打印】按钮,获取后台生成的PDF的url,弹窗进行预览: 2. 点击【打印】按钮,进行打印预览和打印: 二. 需求实现 首先后台给的是word文档,研究了一圈后发现暂时无法实现&…...
CSS学习记录07
CSS轮廓 轮廓是在元素周围绘制的一条线,在边框之外,以凸显元素。 CSS拥有如下轮廓属性: outline-styleoutline-coloroutline-widthoutline-offsetoutline 注意:轮廓与边框不同。不同之处在于:轮廓是在元素边框之外…...
喆塔科技携手国家级创新中心,共建高性能集成电路数智化未来
集创新之力成数智之塔 近日,喆塔科技与国家集成电路创新中心携手共建“高性能集成电路数智化联合工程中心”并举行签约揭牌仪式。出席此次活动的领导嘉宾包含:上海市经济和信息化委员会、上海市集成电路行业协会、复旦大学微电子学院、国家集成电路创新中…...
基于单片机的汽车雨刷器装置
摘要 下雨天时道路十分模糊,能见度非常低,司机分散注意力去手动打开雨刷器开关会非常危险。据统计,全世界雨天行车的车祸事故有7%是因为司机手动打开雨刷分心导致的。为了减小司机因为手动打开雨刷发生车祸的概率,所以…...
013-SpringBoot 定义优雅的全局异常处理方式
SpringBoot 定义优雅的全局异常处理方式 一、概述二、定义全局异常接口三、定义全局异常枚举四、定义全局基础异常五、定义全局基础业务异常六、定义全局返回七、定义全局返回工厂八、全局异常处理九、实体类十、Controller十一、效果展示一、概述 在日常项目开发中,异常是常…...
nginx 网页正常访问 F5 404
前端打包部署完,无论pc-web或h5-wap,访问正常,一刷新就会404。 解决方案: 在项目的nginx子配置文件中,加上以下代码 try_files $uri $uri/ /index.html;...
Idea Spring Initializr没有 Java 8选项解决办法
问题描述 在使用IDEA中的Spring Initializr创建新项目时,Java 版本近可选择Java17,21 。不能选择Java8;SpringBoot 版本也只有 3.x 问题原因 Spring 官方( https://start.spring.io/)不再提供旧版本的初始化配置 解决方案 方案 1 使用阿里…...
【Leetcode Top 100】104. 二叉树的最大深度
问题背景 给定一个二叉树 r o o t root root,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 数据约束 树中节点的数量在 [ 0 , 1 0 4 ] [0, 10 ^ 4] [0,104] 区间内。 − 100 ≤ N o d e . v a l ≤ 100 -100 \le Nod…...
C#实现一个HttpClient集成通义千问-开发前准备
集成一个在线大模型(如通义千问),来开发一个chat对话类型的ai应用,我需要先了解OpenAI的API文档,请求和返回的参数都是以相关接口文档的标准进行的 相关文档 OpenAI API文档 https://platform.openai.com/docs/api-…...
使用ssh免密登录实现自动化部署rsync+nfs+lsync(脚本)
单机一键部署sshrsyncnfslsync 执行准备 主机信息 主机角色外网IP内网IP主机名nfs、lsync10.0.0.31176.16.1.31nfs客户端10.0.0.7176.16.1.7web01rsync、nfs10.0.0.41172.16.1.41backup 秘钥信息 #web01可以免密连接nfs和backup [rootweb01 ~]# ssh-keygen [rootweb01 ~]#…...
若依集成更好用的easyexcel
背景 若依使用的是apach poi并在此基础上进行封装apach poi的原生的api是很复杂的,若依简化了了此操作apach poi的上传速率和下载速率都是没有优化的,依赖于文件大小的限制在此前提下,如果没法满足客户的需求(超大型文件的上传&am…...
去除背景 学习笔记
目录 rembg rembg 安装: pip install rembg import os from glob import glob from rembg import remove from argparse import ArgumentParser from PIL import Image if __name__ __main__:parser ArgumentParser()parser.add_argument(--path, typestr, re…...
我们来学mysql -- 隔离级别简介(原理篇)
隔离级别 别记题记隔离级别后记系列文章 别记 烧香拜佛要是有用,还需要我们来过吗…从个人情感角度,巴沙尔阿萨德 辜负了东大对他的期望他可是从正门踏进了灵隐寺 俄乌战争即将进入第三年(此时202412)此时的加沙正成为以色列建国…...
机器学习(4)Kmeans算法
1、简述聚类分析的重要性及其在机器学习中的应用 聚类分析,作为机器学习领域中的一种无监督学习方法,在数据探索与知识发现过程中扮演着举足轻重的角色。它能够在没有先验知识或标签信息的情况下,通过挖掘数据中的内在结构和规律…...
Oracle之表空间迁移
问题背景:一个数据表随着时间的累积,导致所在表空间占用很高,里面历史数据可以清除,保留近2个月数据即可 首先通过delete删除了2个月以前的数据。 按网上的教程进行空间压缩,以下sql在表所在用户执行: -- 允许表重新…...
域渗透入门靶机之HTB-Cicada
easy难度的windows靶机 信息收集 端口探测 nmap -sT --min-rate 10000 -p- 10.10.11.35 -oA ./port 发现开放了53,88,389等端口,推测为域控 进一步信息收集,对爆破的端口进行更加详细的扫描 小tips:对于众多的端口&…...
ue5 motion matching
ue5.5 gameanimationsample 先看动画蓝图 核心两个node 第一个是根据数据选择当前的pose 第二个是缓存一段历史记录,为第一个node选择的时候提供数据。 在animinstance的update方法中 每帧都更新这个函数,每帧更新trajectory的数据 看看第一个node的…...
【从零开始的LeetCode-算法】383. 赎金信
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 输入&#…...
记录模板学习(持续更新)
目的: 学习C模板的编写,使用模板类包装一个可调用对象 可调用对象包括:普通函数, lambda表达式, 类成员函数 可以参考到QtConcurrent::run的实现,可以看到这个函数有非常多重载,其中可以接受类…...
做简单网站怎么做/武汉网络推广广告公司
要处理一批文本类型的日期数据,这些文本日期的格式均为 2008-01-31 00:00:00 这样的格式,目标是通过一个函数转化为 20080131 这样的文本样式,于是乎写了一个转化程序: def btk_datetime2cvh(table, title): datetimes list(tabl…...
艺考有哪些专业/公司的seo是什么意思
饮水思源:蓝叶博客:http://lanye.org/web/136.html新浪的视频播放器很酷,可以进行普通与高清影片质量切换,可以全屏 且无广告,播放很流畅,蓝叶换了点时间,把新浪的播放器代码找了出来 方便把新浪…...
北京海淀建设支行有哪些/网站优化技术
<style media"print">page {size: auto;margin: 0mm;} </style>转载于:https://www.cnblogs.com/rockyan/p/8393917.html...
小程序转换成网页/seo是搜索引擎优化
问题:谋农场饲养的某种动物所能达到的最大年龄为15岁,将其分为三个年龄组:第一组0~5岁;第二组6~10岁;第三组11~15岁。动物从第二个年龄组开始繁殖后代,第二个年龄组的动物…...
常德做网站建设的公司/东莞seo整站优化火速
第一章 Java开发环境的搭建 常用的DOS命令 1、怎么打开DOS命令窗口 win键 r (组合键):可以打开“运行”窗口 在运行窗口文本框中输入: cmd 然后回车 2、什么是DOS命令呢? 在DOS命令窗口中才可以输入并执行DOS命令。 在最…...
少儿美术专业网站做课件/平台推广是做什么
eg: "sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。 希望打印结果:a(1)c(2)..... ---------------------------------------------code--------------------------------------------------------------------- thinking:通过结果发现ÿ…...