自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

坚持写博客,大家的关注是我前进的动力!

java后端、面试题、技术案例等

  • 博客(80)
  • 收藏
  • 关注

原创 java如何处理网络延时问题,并保证数据安全?

• 优化网络配置:调整网络参数(如Socket选项、TCP窗口大小等)和优化网络拓扑,可以提高网络传输的效率,减少网络延迟。• 数据备份和恢复:定期对重要数据进行备份,并制定数据恢复计划,以便在数据丢失或损坏时能够及时恢复数据,保证数据的可用性。• 使用合适的网络协议:选择合适的网络协议,如TCP或UDP,并根据具体应用场景进行优化,可以有效减少网络延迟。• 优化数据传输:通过压缩数据、减少数据传输量等方法优化数据传输,可以提高网络传输的效率,减少网络延迟。

2025-04-05 00:31:02 137

原创 java如何实现一个秒杀系统(原理)

• 动静分离:将静态资源(如HTML、CSS、JavaScript)分离到CDN或独立服务器,减少动态请求的负载。• 异步处理:通过消息队列(如RabbitMQ或Kafka)异步处理订单请求,削峰填谷,平滑系统负载。• 令牌桶算法:通过固定时间间隔向桶中添加令牌,只有获取到令牌的请求才能被处理,控制流量速率。• 漏桶算法:通过固定容量的桶控制流量,桶满时丢弃多余请求,保证流量平稳。• 读写分离:采用主从复制架构,实现数据库的读写分离,提升查询效率。• 验证码:防止恶意抢购和机器人攻击。

2025-04-05 00:28:45 151

原创 java锁机制有哪些?

StampedLock是Java 8引入的一种锁,提供了读写锁的功能,同时支持乐观读和悲观读。• 轻量级锁:当偏向锁被另一个线程竞争时,升级为轻量级锁,使用CAS操作实现。• 重量级锁:当轻量级锁竞争激烈时,升级为重量级锁,使用操作系统的互斥量实现。乐观锁和悲观锁是两种锁的设计思想,Java中可以通过Atomic类实现乐观锁。• 偏向锁:偏向锁是为了优化同一线程多次获取锁的场景,减少锁的开销。• 锁消除:JVM通过分析代码,发现无需加锁的场景,自动移除锁。

2025-04-04 00:17:46 408

原创 ThreadLocalMap的作用和特点

• 垃圾回收:由于ThreadLocalMap中的键是弱引用,当ThreadLocal实例不再被应用程序代码引用时,垃圾回收器可以回收这些实例,从而避免内存泄漏。• 自定义的哈希表:ThreadLocalMap是一个定制的哈希表,它不实现Java标准的Map接口,而是使用独立的方式实现了Map的功能。• 线程隔离:每个线程都有自己的ThreadLocalMap实例,确保每个线程的ThreadLocal实例是隔离的,不会互相干扰。• 性能优化:通过减少同步操作和锁的使用,提高多线程程序的性能。

2025-04-04 00:15:40 257

原创 Cursor的主要好处

• 深入理解代码:能够理解代码的含义和上下文,对选中的代码进行逐行分析,详细解释代码的功能、变量含义以及执行流程,无论是新手学习还是资深开发者快速剖析陌生代码都很有帮助。”等,Cursor会给出相应的回答和建议。• 快速生成代码:根据简短描述或部分代码片段,Cursor能快速生成完整代码模块,还能智能预测下一步操作,将光标放在合适位置,让开发者一路Tab键顺滑编写代码。• 代码引用便捷:使用@符号可以快速引用代码中的文件、函数、组件等,自动补全文件和符号名,支持跨文件引用,方便代码的组织和复用。

2025-04-03 23:17:28 255

原创 AI辅助开发插件

• 特点:从需求分析到代码生成的全流程智能引导,支持Maven、Gradle等主流工具,一键生成完整工程代码,包括配置文件、源代码和测试资源。• 特点:基于OpenAI Codex模型,支持多语言代码补全、生成和注释,深度集成IntelliJ IDEA。• 优势:支持Java、Python、Go等30+语言,语义级补全功能强大,适合日常开发。• 特点:Spring官方推出的AI框架,简化AI功能集成,支持多种大模型服务。• 特点:基于机器学习的代码补全工具,支持本地或云端模型,隐私性较好。

2025-04-03 23:15:50 478

原创 AI | 大模型入门介绍

• 定义:模型蒸馏是一种将大型复杂模型(教师模型)的知识转移到小型简单模型(学生模型)的技术,使学生模型在保持较高性能的同时,显著减少计算资源和存储需求。• 软标签学习:教师模型对输入样本给出概率分布的预测结果(软标签),学生模型通过模仿这些软标签来学习更细粒度的知识。• 定义:将模型参数的表示从高精度(如32位浮点数)转换为低精度(如8位整数),以减小模型的存储和计算开销。• 定义:MoE是一种通过动态选择子模型(专家)处理输入数据的深度学习架构,旨在提升模型性能与效率。

2025-04-02 18:24:25 873

原创 maven如何使用

Maven 的核心是 pom.xml 文件,通过配置依赖和插件,可以实现项目的自动化构建和管理。Maven 是一个强大的项目管理和构建工具,主要用于 Java 项目的构建、依赖管理和项目信息管理。• 访问 Maven 官方网站 https://maven.apache.org/download.cgi,下载最新版本的 Maven。• 解压下载的文件到指定目录(如 /usr/local/apache-maven)。pom.xml 是 Maven 项目的配置文件,包含项目的依赖、插件、构建配置等信息。

2025-04-02 17:12:15 707

原创 HashMap 在 JDK 1.7 和 JDK 1.8 有什么区别

• JDK 1.8:扩容时利用容量为 2 的幂的特性,通过位运算判断元素在新数组中的位置,避免了完整的哈希重新计算,大幅提升了扩容效率。• JDK 1.8:链表插入使用尾插法,便于统计链表元素个数,同时避免了头插法可能导致的链表反转问题。• JDK 1.8:改为尾插法迁移链表,同时优化了红黑树的引入,解决了多线程环境下的问题。• JDK 1.8:哈希算法进行了简化,利用红黑树的引入弥补了散列性降低的问题。• JDK 1.7:链表插入使用头插法,即新元素插入到链表的头部。2. 链表插入方式的变化。

2025-04-01 23:37:27 576

原创 redis的入门级使用

如果需要更深入的使用,可以参考 Redis 官方文档 https://redis.io/documentation。1. 下载 Redis 的 Windows 版本(非官方,但可用):Redis 下载 https://github.com/MSOpenTech/redis/releases。Redis 是一个开源的、高性能的键值存储(Key-Value Store),常用于缓存、消息队列、会话存储等场景。SADD set1 "a" "b" "c" # 添加元素。

2025-04-01 23:36:24 269

原创 Java中如何保证高并发的数据安全

Java提供了多种并发容器,如ConcurrentHashMap、ConcurrentLinkedQueue等,它们内部实现了线程安全的数据访问控制,避免了传统容器在并发修改时可能引发的异常。通过自定义线程池,可以有效管理线程的创建和销毁,避免线程过多导致的系统资源耗尽问题。合理设置线程池的参数,如核心线程数、最大线程数、队列大小等,可以提升系统的吞吐量和响应速度。可以使用乐观锁和悲观锁来保证数据的一致性。• 合理设计线程模型:根据应用的需求,选择合适的线程模型,如生产者-消费者模型、主从复制模型等。

2025-03-31 23:17:20 542

原创 MyBatisPlus不等于如何使用

queryWrapper.ne("username", "张三").notIn("username", Arrays.asList("李四", "王五"));// 返回受影响的行数。updateWrapper.ne("username", "张三").set("status", "active");queryWrapper.ne("username", "张三").like("email", "gmail");queryWrapper.ne("username", "张三").gt("age", 20);

2025-03-31 23:14:01 392

原创 Vue 2 和 Vue 3 有什么区别

• Vue 3 使用了 Proxy 替代 Vue 2 中的 Object.defineProperty,这让响应式系统更加高效,支持动态添加属性和更广泛的对象类型(如 Map、Set 等)。• Vue 3 的包体积比 Vue 2 更小,因为 Vue 3 使用了 Tree-shaking 技术,只包含实际使用的代码。• Vue 2 的生态系统(如 Vue Router 3、Vuex 3)仍然被广泛使用,但逐渐被 Vue 3 的新版本取代。

2025-03-31 23:12:12 490

原创 GET 和 POST 有什么区别

GET 和 POST 是 HTTP 协议中两种最常见的请求方法,它们在用途、安全性、数据传递方式等方面有显著的区别。• 是幂等的(idempotent),即多次发送相同的请求不会产生不同的结果。• 不适合传递敏感数据(如密码、信用卡信息),因为数据会暴露在 URL 中。• 不是幂等的,多次发送相同的请求可能会导致不同的结果(如多次提交订单)。• GET:适合获取数据,数据通过 URL 传递,简单快速,但安全性较低。• POST:适合提交数据,数据通过请求体传递,安全性较高,适合复杂操作。

2025-03-30 23:49:52 337

原创 axios使用

它支持拦截请求和响应、转换请求和响应数据、取消请求等功能。你可以根据需要配置请求、处理响应、添加拦截器、取消请求等。axios 的错误对象包含很多有用的信息,例如 error.message、error.response 等。你可以创建一个自定义的 axios 实例,以便在多个地方复用相同的配置。axios 提供了拦截器功能,可以在请求发送前或响应返回后进行处理。// 请求发送了,但没有收到响应。// 或者使用 axios 直接发送请求。// 使用 axios.get 方法。// 使用自定义实例发送请求。

2025-03-30 23:47:49 469

原创 @Slf4j注解

Slf4j注解是Lombok库提供的一个注解,用于简化日志记录器的创建。SLF4J定义了8个日志级别,从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL。如果需要将日志输出到文件或控制台,还需要配置日志框架(如Logback)的相关配置文件。3. 使用日志记录器:在类中直接使用log对象来打印日志。-- 控制台输出 -->-- 根日志配置 -->-- Lombok依赖 -->-- 文件输出 -->-- SLF4J依赖 -->

2025-03-29 22:38:31 514

原创 Promise使用

/ 如果所有 Promise 都成功,输出:["第一个 Promise", "第二个 Promise", "第三个 Promise"]const promise2 = new Promise((resolve) => setTimeout(() => resolve("第二个 Promise"), 1000));const promise2 = new Promise((resolve) => setTimeout(() => resolve("第二个 Promise"), 500));

2025-03-29 22:36:53 353

原创 MyBatisPlus 中,模糊查询

notLikeRight` 不右模糊匹配,即 `NOT LIKE 值%` `name NOT LIKE 'J%'``notLikeLeft` 不左模糊匹配,即 `NOT LIKE %值` `name NOT LIKE '%J'``notLike` 不模糊匹配,即 `NOT LIKE %值%` `name NOT LIKE '%J%'`// SQL: name LIKE '%佳%'`like` 前后模糊匹配,即 `%值%` `name LIKE '%J%'`

2025-03-28 22:22:29 313

原创 检查指定的IP地址和端口号是否可以连接

System.err.println("无法连接到 IP地址 " + ipAddress + " 的端口 " + port + ":" + e.getMessage());System.out.println("IP地址 " + ipAddress + " 的端口 " + port + " 可以连接!是的,Socket 类可以直接用来检查指定的IP地址和端口号是否可以连接。在 main 方法中,替换 ipAddress 和 port 为你想要测试的IP地址和端口号,然后运行程序即可。

2025-03-28 22:21:28 347

原创 Spring Boot 实现定时任务的案例

1. 任务线程池:默认情况下,Spring Boot 的定时任务使用单线程顺序执行。通过以上案例,你可以快速实现 Spring Boot 中的定时任务功能,并根据实际需求进行扩展和优化。以下是一个使用 Spring Boot 实现定时任务的案例,涵盖了定时任务的基本配置和实现。System.out.println("动态定时任务执行中...");3. 任务异常处理:在任务中添加异常处理逻辑,避免任务因异常而停止执行。4. 任务日志:记录任务的执行日志,方便后续的排查和分析。

2025-03-27 22:43:21 494

原创 Python 爬虫案例

print(f"仓库: {name}, 描述: {description}, 星数: {stars}")1. 遵守网站规则:在爬取之前,查看目标网站的 robots.txt 文件,了解哪些页面允许爬取。这些案例可以帮助你快速上手 Python 爬虫开发,根据实际需求选择合适的技术和工具。print(f"商品: {name}, 价格: {price}")writer.writerow(['标题', '评分', '导演'])案例:使用 Selenium 爬取动态加载的网页。案例:爬取网页标题和简介。

2025-03-27 22:37:11 942

原创 SVN常用命令

• 使用svn checkout命令从SVN服务器检出代码到本地,开始使用SVN进行版本控制。• 提交代码(Commit):将本地修改的代码提交到SVN服务器。• 检出代码(Checkout):从SVN服务器获取代码到本地。• 更新代码(Update):将服务器端的最新修改更新到本地。• 查看状态(Status):查看工作目录中文件的修改状态。• 查看差异(Diff):比较文件的不同版本之间的差异。• 添加文件(Add):将新增的文件加入版本控制。

2025-03-26 00:03:27 425

原创 Tomcat相关的面试题

以下是150道Tomcat相关的面试题,涵盖了Tomcat的基础概念、配置管理、部署运行、性能调优、安全机制、日志管理、集群与负载均衡、与其他技术的结合等方面,希望对你有所帮助。Tomcat基础概念1. 什么是Tomcat?它的主要功能和特点是什么?Tomcat是Apache软件基金会开发的一款开源的Servlet容器,它实现了Java Servlet和JavaServer Pages (JSP) 技术规范,能够运行Java Web应用程序。主要特点包括轻量级、高性能、高可扩展性、支持热部署等。2

2025-03-26 00:03:10 1138 1

原创 java -jar命令的一些常用操作参数

• 依赖管理:如果JAR文件依赖其他库或JAR包,需要在MANIFEST.MF文件中使用Class-Path属性指定这些依赖的路径,或者在运行时通过-cp或-classpath参数指定。• -cp <classpath> 或 -classpath <classpath>:指定类路径,用于指定JAR文件依赖的其他类或库的位置。在使用java -jar命令时,还可以在JAR文件名后面直接跟上参数,这些参数会被传递给JAR文件内主类的main方法。• -Xmx<size>:设置Java堆的最大大小。

2025-03-25 00:17:35 750

原创 NSSM,一个Java服务的多个实例在不同端口运行并在挂掉后自动重启

• Arguments:输入 -jar 服务名.jar -Dserver.port=端口号,例如,对于第一个服务输入 -jar myapp.jar -Dserver.port=8081,第二个服务输入 -jar myapp.jar -Dserver.port=8082。在服务列表中找到创建的服务,右键点击它,选择 “启动” 来启动服务。通过以上步骤,你就可以使用 NSSM 在 Windows 系统下为每个 Java 服务实例创建独立的服务,并实现它们在挂掉后自动重启,同时每个实例运行在不同的端口上。

2025-03-25 00:17:12 372

原创 Oracle相关的面试题

Oracle的SQL语句分为数据查询语言(DQL,如SELECT)、数据定义语言(DDL,如CREATE、ALTER、DROP)、数据操纵语言(DML,如INSERT、UPDATE、DELETE)、事务控制语言(TCL,如COMMIT、ROLLBACK)、数据控制语言(DCL,如GRANT、REVOKE)。Oracle的后台进程包括数据库写入进程(DBWn)、重做日志写入进程(LGWR)、归档进程(ARCn)、系统监控进程(SMON)、进程监控进程(PMON)等,它们协同工作以保证数据库的正常运行。

2025-03-24 00:55:39 582

原创 Git常用命令

git remote add origin https://github.com/user/repo.git # 添加远程仓库地址。git clone https://github.com/user/repo.git # 克隆远程仓库到本地。git rebase <branch_name> # 变基操作,将当前分支的提交应用到指定分支上。git push origin <branch_name> # 将本地指定分支推送到远程仓库。git branch <branch_name> # 创建新分支。

2025-03-24 00:46:42 833

原创 Langchain4J框架相关面试题

Langchain4J是一个用于构建语言模型应用的Java框架,它为开发者提供了一套简洁高效的API,使得在Java环境中调用和管理各种语言模型变得更加容易。其核心功能包括与多个LLM提供商集成,如OpenAI、Anthropic等,支持多种模型的调用;

2025-03-23 00:32:59 681

原创 Spring AI相关的面试题

通过Spring Cloud的配置中心,如Spring Cloud Config,可以实现AI服务配置的集中管理和动态刷新,方便在不同环境和集群中统一管理AI模型的参数和API密钥等配置信息。此外,还可以对服务层进行单元测试,模拟AI客户端的响应,验证业务逻辑的正确性,确保在不同的AI回答情况下应用能够正确处理。此外,对于非关系型数据库,如MongoDB,Spring Data也提供了相应的支持,开发者可以根据实际需求选择合适的数据库类型和Spring Data模块,实现AI应用数据的高效存储和检索。

2025-03-23 00:24:29 610

原创 服务器虚拟化相关的面试题

Hypervisor将物理CPU的核心视为可调度的资源,根据虚拟机的配置和优先级,将虚拟机的vCPU映射到物理CPU的核心上执行。• 部署和管理虚拟机:通过OpenStack的仪表板(Horizon)或命令行工具(如Nova、Neutron等),用户可以创建、启动、停止、删除虚拟机,以及对虚拟机的网络、存储、安全组等进行配置和管理。• 原理:基于虚拟化管理程序的资源管理功能,通过监测虚拟机的资源使用情况(如CPU、内存、存储等),当资源使用率达到预设的阈值时,自动或手动触发资源的动态调整。

2025-03-22 00:46:35 388

原创 HDFS相关的面试题

评估HDFS的数据一致性和可靠性可以通过以下指标和方法:数据块的丢失率和恢复时间,统计在一定时间内数据块的丢失数量和恢复所需的时间;同时,优化数据的存储格式和分区策略,使用高效的特征工程和数据预处理方法,也可以提高数据挖掘和机器学习的效率。在数据使用阶段,监控数据的访问频率和使用情况,优化数据的存储和访问性能;- 在多存储系统环境下,进行统一的数据管理和访问可以通过以下技术和工具:使用数据虚拟化技术,如Apache Drill、Kinetica等,提供统一的数据访问接口,屏蔽底层存储系统的差异;

2025-03-22 00:23:56 539

原创 Flink相关面试题

事件时间是数据实际生成的时间,处理时间是数据到达Flink的时间,摄入时间是数据进入Flink的时间。事件时间是数据实际生成的时间,处理时间是数据到达Flink的时间,摄入时间是数据进入Flink的时间。事件时间是数据实际生成的时间,处理时间是数据到达Flink的时间,摄入时间是数据进入Flink的时间。事件时间是数据实际生成的时间,处理时间是数据到达Flink的时间,摄入时间是数据进入Flink的时间。事件时间是数据实际生成的时间,处理时间是数据到达Flink的时间,摄入时间是数据进入Flink的时间。

2025-03-21 00:53:19 507

原创 Spark相关面试题

scala class CustomSerializable extends Serializable { private def writeObject(out: ObjectOutputStream): Unit = { // 自定义序列化逻辑 } private def readObject(in: ObjectInputStream): Unit = { // 自定义反序列化逻辑 } }Spark的懒加载是指在RDD的转换操作中,不会立即执行计算,而是等到动作操作时才触发计算。

2025-03-21 00:39:20 511

原创 Kubernetes相关面试题

它根据预设的指标(如CPU利用率、内存利用率等)监控Pod的负载情况,当指标超过设定的阈值时,自动增加或减少Pod的副本数量,以适应工作负载的变化。它根据预设的指标(如CPU利用率、内存利用率等)监控Pod的负载情况,当指标超过设定的阈值时,自动增加或减少Pod的副本数量,以适应工作负载的变化。为了实现与容器镜像仓库的集成,需要确保Kubernetes集群中的节点能够访问镜像仓库,并配置适当的认证信息(如Docker配置文件、Secret等)。不同的StorageClass可以对应不同的存储后端和配置。

2025-03-20 00:59:58 733

原创 数据结构相关的高频面试题-解析步骤

另一种方法是使用一个栈,压入节点时先压入根节点,然后压入右子节点,再压入左子节点,但每个节点压入栈时附带一个标记,表示是否已经处理过子节点。在enqueue元素时,将新元素与双端队列尾部的元素对应的值比较,如果新元素更大,则将尾部元素弹出,直到双端队列为空或者尾部元素对应的值大于等于新元素,然后将新元素的索引入队。从根节点开始,如果根节点是其中一个目标节点,则返回根节点;如果尾节点相同,说明相交,然后通过调整较长链表的起始位置,使其与较短链表的长度相同,再同时遍历两个链表,直到找到相同的节点,即为相交点。

2025-03-20 00:47:50 593

原创 Hadoop相关面试题

例如,使用sqoop export --connect jdbc:mysql://localhost/mydb --table mytable --username user --password pass --export-dir /user/hadoop/data导出数据。例如,在HBase Shell中使用create 'mytable', 'cf'创建表,使用put 'mytable', 'row1', 'cf:col1', 'value1'插入数据。可以使用Hadoop提供的脚本启动和停止集群。

2025-03-19 12:53:49 840

原创 React相关面试题

虚拟DOM在内存中维护一个轻量级的DOM树副本,通过比较虚拟DOM与真实DOM的差异,高效地更新浏览器中的DOM。通过Provider组件包裹应用,并在组件中使用connect函数或useSelector、useDispatch Hooks,可以在React组件中访问和更新Redux store中的状态。通过Provider组件包裹应用,并在组件中使用connect函数或useSelector、useDispatch Hooks,可以在React组件中访问和更新Redux store中的状态。

2025-03-19 12:46:06 645

原创 Elasticsearch面试题

配置监控指标可以通过使用Elasticsearch的X-Pack监控功能,或者第三方监控工具(如Prometheus、Grafana)收集和展示Elasticsearch的性能指标,如节点健康状况、索引状态、查询性能等。将Elasticsearch与大数据平台(如Hadoop、Spark)集成可以通过使用Elasticsearch的Hadoop插件或Spark的Elasticsearch连接器,实现数据的双向同步和分析。需要注意兼容性问题,特别是与旧版本的数据格式和API的兼容性。

2025-03-18 00:21:28 631

原创 Nginx面试题

例如,创建/etc/nginx/sites-available/vhost1配置文件,配置该虚拟主机的server块,然后执行ln -s /etc/nginx/sites-available/vhost1 /etc/nginx/sites-enabled/启用该配置文件。在Nginx模块中访问请求的数据可以通过使用Nginx提供的API函数,如ngx_http_read_client_request_body读取客户端请求体,ngx_http_get_uri获取请求的URI等。

2025-03-18 00:08:30 595

原创 Java锁相关的面试题

它通过JVM的monitor机制实现,每个对象都有一个monitor,当线程进入同步代码块时,会尝试获取对象的monitor,获取成功则执行代码,执行完或发生异常时释放monitor,其他线程才能获取锁。线程每次获取锁时计数器递增,释放锁时计数器递减,计数器为零时锁被释放。线程每次获取锁时计数器递增,释放锁时计数器递减,计数器为零时锁被释放。线程每次获取锁时计数器递增,释放锁时计数器递减,计数器为零时锁被释放。线程每次获取锁时计数器递增,释放锁时计数器递减,计数器为零时锁被释放。

2025-03-17 00:49:24 413 1

空空如也

空空如也

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

TA关注的人

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