当前位置: 首页 > article >正文

全栈(Java+vue)实习面试题(含答案)

        在广州一个小公司(BOSS标注是0-20人,薪资2-3k),直接面试没有笔试,一开始就直接拿着简历问,也没有自我介绍,问题是结合场景题和八股文、基础。废话不多说,直接分享面试题目个大家做参考。

1、能讲一下IOC吗?

IOC就是控制反转,这是一种设计模式,核心思想是将对象的创建、依赖注入和生命周期管理交给IOC容器负责。在传统的编码方式中,我们一般需要在类中手动创建依赖对象,通过硬编码方式来控制对象的实例化和管理,而在Spring中,Bean以及对象之间的依赖关系都交给IOC容器负责,降低了代码之间的耦合度,也提高了系统的灵活性;

spring中主要通过XML配置和注解配置的两种方式实现。

2、数据库三范式能说一下吗?

数据库的三范式是关系型数据库设计的基本原则,旨在减少数据冗余、提高数据的一致性,并确保数据依赖的合理性;

第一范式:字段具有原子性,就是每个字段不能再拆分。比如联系方式应该拆分为电话和地址两个独立的字段;

第二范式:在满足第一范式的基础上,消除部分依赖,就是非主键字段必须完全依赖主键中的各个字段(表中使用的是复合主键,主键包含多个字段)。比如订单明细表的主键是订单ID+产品ID,字段客户姓名仅依赖订单ID,可以将客户姓名移到以订单ID为主键的订单表中;

第三范式:在满足第一、二范式的基础上,消除传递依赖,就是非主键字段不能依赖其他非主键字段。比如学生表包含学号(主键)、学院、学院电话,其中学院电话依赖学院,而学院依赖学号,应拆分为学生表(学号、学院)和学院表(学院、学院电话)

这种规则约束减少了冗余、避免了跟新异常,但过度范式化可能导致多表关联查询、降低性能;

3、数据库的优化问题?

(1)表设计优化

  1. 选择合适的数据类型,尽量使用最小的数据类型(比如使用INT替代BIGINT,使用CHAR替代VARCHAR)来减少存储和查询成本;
  2. 分区表:对于数据量极大的表可以考虑分区表,将表按某些规则分割成多个小表,提高查询效率;
  3. 主从复制、读写分离:如果数据库读的操作比较多,为了避免写操作所造成的性能影响,可以采用读写分离的架构;

(2)索引优化:

  1. 创建适当的索引,避免过多的索引,查照索引的创建原则;
  2. 覆盖索引:使用索引覆盖查询,避免回表,调高效率;

(3)SQL语句优化:

  1. 尽量明确指定需要的列,避免使用SELECT *,以减少不必要的数据传输;
  2. SQL语句要避免造成索引失效的写法;
  3. 尽量用union all 替代 union ,union多了一次过滤,效率较低;
  4. 避免子查询,特别是当子查询返回大量数据时,可以考虑JOIN或WITH子句替代

索引创建原则和失效场景看这篇八股文:

https://blog.csdn.net/weixin_73144915/article/details/145535602?spm=1001.2014.3001.5501

4、知道多态吗,解释一下?

多态指同一个操作作用于不同对象时,可以有不同的实现方式。核心目的是提高代码的灵活性和可扩展性;多态的两种形式如下:

1、编译时多态(静态多态),实现方法重载,在编译时根据参数类型和个数确定调用哪个方法;

2、运行时多态(动态多态),通过接口/继承和方法重写来实行,在运行时根据对象的实际类型决定调用哪个方法;

5、hashMap和hashTable的区别?

HashMap和Hashtable都是Java中用于存储键值对的哈希表类,区别如下:

(1)线程安全:HashMap不是线程安全的,如果多个线程并发访问HahsMap,并且至少有一个线程做了修改,他必须通过外部同步来保证线程安全,否则可能会导致数据不一致的情况;而Hashtable是线程安全的,他的方法都被synchronized修饰,可以在多线程环境下安全的被访问;

(2)性能:HashMap性能通常优于Hashtable,特别是在单线程环境下;而Hashtable由于方法上都有同步锁,性能较差;

(3)Null值:HashMap允许一个null值(键唯一性)和多个null值;而Hashtable不允许出现null键或null值。

6、SpringMVC的核心是什么?

SpringMVC的核心是基于前端控制器模式的请求驱动设计,将前端控制器作为中央调度器,拦截请求将请求分发给对应的处理器,并协调视图解析、数据绑定等组件完成全流程处理。其核心设计理念是解耦、模块化、可扩展。核心流程如下:

1.发送请求:用户发送请求,被前端控制器拦截;

2.映射处理器:处理器映射器根据URL找到对应的Controller层和方法;

3.调用控制器:Controller执行业务逻辑,返回ModelAndView数据;

4.解析视图:视图解析器将视图名称转化为具体视图(如HTML页面);

5.渲染视图:将模型数据填充到视图中,生成最终响应给用户;

7、怎么解决超卖问题?

解决超卖问题的核心在于保证库存扣减的原子性和一致性,尤其是在高并发场景下。以下是分层的解决方案,涵盖技术实现和业务逻辑优化:


一、技术层面解决方案

1. 数据库锁机制

  • 悲观锁(Pessimistic Lock)
    在事务中通过 SELECT ... FOR UPDATE 锁定库存记录,防止其他事务修改。

BEGIN;
SELECT stock FROM products WHERE id=1 FOR UPDATE;
UPDATE products SET stock = stock - 1 WHERE id=1;
COMMIT;
  • 缺点:性能较差,适用于低并发场景。

  • 乐观锁(Optimistic Lock)
    通过版本号或时间戳控制并发,仅当库存未被修改时才扣减。

UPDATE products 
SET stock = stock - 1, version = version + 1 
WHERE id=1 AND version = {current_version} AND stock > 0;
  • 优点:性能高,适合高并发;缺点:需重试逻辑(如失败后提示用户重新下单)。

2. 分布式锁(Redis/ZooKeeper)

  • 使用 Redis 的 SETNX 或 RedLock 算法,确保同一时间只有一个请求能操作库存。
    示例(Redis + Lua脚本保证原子性):

local key = "product_1_stock"
local decrement = 1
local stock = tonumber(redis.call('GET', key))
if stock >= decrement thenredis.call('DECRBY', key, decrement)return 1  -- 扣减成功
elsereturn 0  -- 库存不足
end

适用场景:分布式系统,需配合数据库最终一致性。

3. 缓存预扣库存(Redis + 异步队列)

步骤

  1. 将库存预热到 Redis 中。

  2. 用户下单时,先通过 DECR 扣减 Redis 库存。

  3. 若扣减成功,将订单信息发送到消息队列(如 Kafka、RabbitMQ),异步更新数据库。

  4. 若最终数据库更新失败,需回滚 Redis 库存(如通过 TTL 自动过期或补偿事务)。

优点:扛住瞬时高并发;缺点:需处理缓存与数据库的数据一致性。

8、Mybatis中XML和注解你是怎么使用的? 

配合着使用,一些简单的SQL语句可以直接用注解来写,而复杂SQL、联表查询的用XML来写

9.如果利用用户ID恶意访问接口,怎么解决?

1. 采用 Token 进行身份验证

  • 使用 JWT(JSON Web Token) 或 Session 机制 进行身份认证,确保用户必须先登录后才能访问接口。
  • Token 绑定用户身份,服务器通过 Token 解析出用户 ID,而不是让前端传递用户 ID。

2. 避免前端传递用户 ID

  • 服务器根据 Token 自动获取当前用户 ID,而不是让前端传递 userId 参数。
  • 示例
@GetMapping("/user/profile")
public ResponseEntity<UserProfile> getUserProfile(@RequestAttribute("userId") Long userId) {UserProfile profile = userService.getProfileById(userId);return ResponseEntity.ok(profile);
}

这里 userId 是从 JWT 解析出来的,而不是从前端传递的参数。 

3. 进行权限校验

  • 后端校验数据归属权,即使用户传递 userId,也要检查该 userId 是否与当前登录用户匹配。
  • 示例(Spring Boot 权限校验):
@GetMapping("/user/orders")
public ResponseEntity<List<Order>> getUserOrders(@RequestParam Long userId, @RequestAttribute("userId") Long currentUserId) {if (!userId.equals(currentUserId)) {throw new AccessDeniedException("非法访问");}return ResponseEntity.ok(orderService.getOrdersByUserId(userId));
}

这里 currentUserId 是从 Token 解析出来的,确保用户不能查询别人的订单。

4. 限制请求频率(防止暴力攻击)

  • 使用 Rate Limiting(限流)机制,比如:
    • Redis + 滑动窗口 进行限流
    • Nginx 限流
    • 使用 Spring Boot 的 Bucket4jGuava RateLimiter
  • 示例(Spring Boot 限流):
@RateLimiter(name = "user-api", fallbackMethod = "limitExceeded")
@GetMapping("/user/data")
public ResponseEntity<?> getUserData() {return ResponseEntity.ok("数据获取成功");
}public ResponseEntity<String> limitExceeded(Exception e) {return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS).body("请求过于频繁,请稍后再试");
}

10.说一下类加载器?

JVM只会运行二进制文件,类加载器的作用就是将字节码文件加载到JVM中,转化为JVM可识别的数据结构,从而使Java程序能够运行启动。核心作用如下:

(1)动态加载:在程序运行时按需要加载类,而非一次性加载所有类;

(2)隔离性:不同类加载器可以加载不同来源的类,避免命名冲突(如Tomcat隔离Web应用);

(3)安全性:通过双亲委派机制,防止恶意修改核心类库代码;

相关文章:

全栈(Java+vue)实习面试题(含答案)

在广州一个小公司&#xff08;BOSS标注是0-20人&#xff0c;薪资2-3k)&#xff0c;直接面试没有笔试&#xff0c;一开始就直接拿着简历问&#xff0c;也没有自我介绍&#xff0c;问题是结合场景题和八股文、基础。废话不多说&#xff0c;直接分享面试题目个大家做参考。 1、能…...

SQL经典常用查询语句

1. 基础查询语句 1.1 查询表中所有数据 在SQL中&#xff0c;查询表中所有数据是最基本的操作之一。通过使用SELECT * FROM table_name;语句&#xff0c;可以获取指定表中的所有记录和列。例如&#xff0c;假设有一个名为employees的表&#xff0c;包含员工的基本信息&#xf…...

超详细:数据库的基本架构

MySQL基础架构 下面这个图是我给出的一个MySQL基础架构图&#xff0c;可以清楚的了解到SQL语句在MySQL的各个模块进行执行过程。 然后MySQL可以分为两个部分&#xff0c;一个是server层&#xff0c;另一个是存储引擎。 server层 Server层涵盖了MySQL的大多数核心服务功能&am…...

AI催化新一轮创业潮与创富潮:深圳在抢跑

作者&#xff1a;尺度商业大掌柜黄利明 2025年春节伊始至今&#xff0c;从DeepSeek R1开源模型持续引发全球围观&#xff0c;到腾讯混元Turbo S模型发布秀出了"秒回"绝活&#xff0c;再到国务院发布《新一代人工智能发展规划&#xff08;2025-2030&#xff09;》重磅…...

Docker 深度解析:适合零基础用户的详解

此博客涵盖 Docker 的基本概念和作用、架构和核心组件、与传统虚拟机的对比、安装与基本操作&#xff0c;以及在实际开发和运维中的应用场景。 首先&#xff0c;详细解释了 Docker 的基本概念&#xff0c;包括它的诞生背景、作用及其如何解决传统应用部署中的问题。然后&#…...

SpringBoot生成唯一ID的方式

1.为什么要生成唯一ID&#xff1f; 数据唯一性&#xff1a;每个记录都需要有一个独一无二的标识符来确保数据的唯一性。这可以避免重复的数据行&#xff0c;并有助于准确地查询、更新或删除特定的记录。 数据完整性&#xff1a;通过使用唯一ID&#xff0c;可以保证数据库中的数…...

FastGPT 源码:RRF、Rerank 相关代码

文章目录 FastGPT 源码&#xff1a;RRF、Rerank 相关代码1. RRF (Reciprocal Rank Fusion) 合并实现2. Rerank 二次排序实现3. 重排序的主要特点4. 整个搜索流程5. 这种方式的优势 FastGPT 源码&#xff1a;RRF、Rerank 相关代码 下边介绍 RRF 合并和 Rerank 二次排序的相关实…...

Android视频流畅播放要素

要让 Android 设备流畅播放视频&#xff0c;需根据设备性能&#xff08;低端、中端、高端&#xff09;和播放场景&#xff08;本地播放、在线流媒体&#xff09;动态调整视频参数。以下是针对不同设备的推荐配置方案&#xff1a; 一、通用推荐配置&#xff08;平衡兼容性与流畅…...

Python:类型转换和深浅拷贝,可变与不可变对象

int()&#xff1a;转换为一个整数&#xff0c;只能转换由纯数字组成的字符串 浮点型强转整型会去掉小数点及后面的数&#xff0c;只保留整数部分 #如果字符串中有数字和正负号以外的字符就会报错 float()&#xff1a;整形转换为浮点型会自动添加一位小数 .0 如果字符串中有…...

vcredist_x64 资源文件分享

vcredist_x64 是 Microsoft Visual C Redistributable 的 64 位版本&#xff0c;用于在 64 位 Windows 系统上运行使用 Visual C 开发的应用程序。它包含了运行这些应用程序所需的运行时组件。 vcredist_x64 资源工具网盘下载链接&#xff1a;https://pan.quark.cn/s/ef56f838f…...

Linux:vim快捷键

Linux打开vim默认第一个模式是&#xff1a;命令模式&#xff01; 命令模式快捷键操作&#xff1a; gg&#xff1a;光标快速定位到最开始 shift g G&#xff1a;光标快速定位到最结尾 n shift g n G&#xff1a;光标快速定位到第n行 shift 6 ^&#xff1a;当前行开始 …...

DeepSeek在MATLAB上的部署与应用

在科技飞速发展的当下&#xff0c;人工智能与编程语言的融合不断拓展着创新边界。DeepSeek作为一款备受瞩目的大语言模型&#xff0c;其在自然语言处理领域展现出强大的能力。而MATLAB&#xff0c;作为科学计算和工程领域广泛应用的专业软件&#xff0c;拥有丰富的工具包和高效…...

NAT 代理服务 内网穿透

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; NAT 技术背景二&#xff1a;&#x1f525; NAT IP 转换过程三&#xff1a;&#x1f525; NAPT四&#xff1a;&#x1f525; 代理服务器&#x1f98b; 正向…...

高级课第五次作业

首先配置交换机&#xff0c;路由器 LSW1配置 [SW1]vlan batch 10 20 30 40 [SW1]int g0/0/2 [SW1-GigabitEthernet0/0/2]port link-type access [SW1-GigabitEthernet0/0/2]port default vlan 10 [SW1]int g0/0/3 [SW1-GigabitEthernet0/0/3]port link-type access […...

51单片机编程学习笔记——动态数码管显示多个数字

大纲 视觉残留原理生理基础神经传导与处理 应用与视觉暂留相关的现象 频闪融合不好的实现好的效果 延伸 在《51单片机编程学习笔记——动态数码管》一文中&#xff0c;我们看到如何使用动态数码管显示数字。但是基于动态数码管设计的特点&#xff0c;每次只能显示1个数字。这就…...

金蝶ERP星空对接流程

1.金蝶ERP星空OPENAPI地址&#xff1a; 金蝶云星空开放平台 2.下载金蝶云星空的对应SDK包 金蝶云星空开放平台 3.引入SDK流程步骤 引入Kingdee.CDP.WebApi.SDK 右键项目添加引用&#xff0c;在打开的引用管理器中选择浏览页签&#xff0c;点击浏览按钮&#xff0c;找到从官…...

【随手笔记】利尔达NB模组

1.名称 移芯EC6263GPP 参数 指令备注 利尔达上电输出 [2025-03-04 10:24:21.379] I_AT_WAIT:i_len2 [2025-03-04 10:24:21.724] LI_AT_WAIT:i_len16 [2025-03-04 10:24:21.724] [2025-03-04 10:24:21.733] Lierda [2025-03-04 10:24:21.733] [2025-03-04 10:24:21.745] OK移…...

Vue3的核心语法【未完】

Vue3的核心语法 OptionsAPI与CompositionAPI Options API&#xff08;选项式&#xff09; 和 Composition API &#xff08;组合式&#xff09;是 Vue.js 中用于构建组件的两种不同方式。Options API Options API Options API 是 Vue 2 中的传统模式&#xff0c;并在 Vue 3…...

解决redis lettuce连接池经常出现连接拒绝(Connection refused)问题

一.软件环境 windows10、11系统、springboot2.x、redis 6 7 linux&#xff08;centos&#xff09;系统没有出现这问题&#xff0c;如果你是linux系统碰到的&#xff0c;本文也有一定大参考价值。 根本思路就是&#xff1a;tcp/ip连接的保活(keepalive)。 二.问题描述 在spr…...

C#进阶指南

C# 是一种功能强大的编程语言,其高级语法特性为开发者提供了更灵活、高效和简洁的编程方式。以下是一些常见的 C# 高级语法特性: 1. 委托(Delegate) 委托是一种类型安全的函数指针,用于封装方法的引用。它可以将方法作为参数传递,实现回调机制。 定义委托: csharp复制 …...

从DNS到TCP:DNS解析流程和浏览器输入域名访问流程

1 DNS 解析流程 1.1 什么是DNS域名解析 在生活中我们会经常遇到域名&#xff0c;比如说CSDN的域名www.csdn.net&#xff0c;百度的域名www.baidu.com,我们也会碰到IP&#xff0c;现在目前有的是IPV4&#xff0c;IPV6。那这两个有什么区别呢&#xff1f;IP地址是互联网上计算机…...

【MySQL、Oracle、SQLserver、postgresql】查询多条数据合并成一行

四大数据库多行合并为单行&#xff1a;函数详解与对比 一、MySQL**GROUP_CONCAT()** 函数说明&#xff1a;语法结构&#xff1a;参数解释&#xff1a;示例&#xff1a;注意事项&#xff1a; 二、Oracle**LISTAGG()** 函数说明&#xff1a;语法结构&#xff1a;参数解释&#xf…...

解锁Egg.js:从Node.js小白到Web开发高手的进阶之路

一、Egg.js 是什么 在当今的 Web 开发领域&#xff0c;Node.js 凭借其事件驱动、非阻塞 I/O 的模型&#xff0c;在构建高性能、可扩展的网络应用方面展现出独特的优势 &#xff0c;受到了广大开发者的青睐。它让 JavaScript 不仅局限于前端&#xff0c;还能在服务器端大展身手&…...

JavaWeb后端基础(4)

这一篇就开始是做一个项目了&#xff0c;在项目里学习&#xff0c;我主要记录在学习过程中遇到的问题&#xff0c;以及一些知识点 Restful风格 一种软件架构风格 在REST风格的URL中&#xff0c;通过四种请求方式&#xff0c;来操作数据的增删改查。 GET &#xff1a; 查询 …...

软件试用 防破解 防软件调试(C# )

防破解&防软件调试 实现思路 这里采用C#语言为例: 获取网络北京时间:向百度发送 HTTP 请求,从响应头中提取日期时间信息,将其转换为本地时间。记录试用开始时间:首次运行软件时,将获取的百度北京时间作为试用开始时间,并加密存储在本地文件中。检查试用是否过期:每…...

【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey

这篇文章发表于2024年4月 摘要 大语言模型&#xff08;LLMs&#xff09;的快速发展推动了多个领域的变革&#xff0c;重塑了通用人工智能的格局。然而&#xff0c;这些模型不断增长的计算和内存需求带来了巨大挑战&#xff0c;阻碍了学术研究和实际应用。为解决这些问题&…...

OpenGL ES -> GLSurfaceView纹理贴图

贴图 XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MyGLSurfaceViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height…...

FastGPT 源码:基于 LLM 实现 Rerank (含Prompt)

文章目录 基于 LLM 实现 Rerank函数定义预期输出实现说明使用建议完整 Prompt 基于 LLM 实现 Rerank 下边通过设计 Prompt 让 LLM 实现重排序的功能。 函数定义 class LLMReranker:def __init__(self, llm_client):self.llm llm_clientdef rerank(self, query: str, docume…...

DE2115实现4位全加器和3-8译码器(FPGA)

一、配置环境 1、Quartus 18.1安装教程 软件&#xff1a;Quartus版本&#xff1a;Quartus 18.1语言&#xff1a;英文大小&#xff1a;5.78G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09; 下载通道①百度网盘丨64位下载…...

大语言模型(LLM)如何赋能时间序列分析?

引言 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;在文本生成、推理和跨模态任务中展现了惊人能力。与此同时&#xff0c;时间序列分析作为工业、金融、物联网等领域的核心技术&#xff0c;长期依赖传统统计模型&#xff08;如ARIMA&#xff09;或深度学习模型&a…...