某中厂面试题分享(附详细答案解析)

news2024/11/25 0:33:26

前言:
本篇文章主要记录上周某中厂面试题的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。

如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~

小威在此先感谢各位小伙伴儿了😁

在这里插入图片描述

以下正文开始

文章目录

  • 实例变量是否必须赋初值,局部变量呢?
  • 用过Spring和SpringMVC的哪些注解?
  • Spring框架都用到了哪些设计模式?
  • MySQL中的索引下推是什么
  • 网页首页访问量大,如何提高响应速度
  • 介绍下你知道的四大引用
  • 合并二叉树(leetcode617原题)
  • 其他面试问题

在这里插入图片描述

实例变量是否必须赋初值,局部变量呢?

在Java中,实例变量(成员变量)可以不赋初始值。如果我们没有为实例变量显式赋初值,Java会将其自动初始化为默认值。默认值取决于变量的类型。

下面这些是一些常见数据类型的默认值:

整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):‘\u0000’(空字符)
布尔型(boolean):false
引用类型(类、接口、数组等):null

而对于局部变量呢,局部变量在使用前必须进行初始化。否则,编译器会报错。这是Java编程语言的规定,目的是为了确保程序的安全性和可靠性。

局部变量是在方法、构造函数或代码块内部声明的变量,只能在其所在的作用域内使用。

用过Spring和SpringMVC的哪些注解?

@Component:用于将类标识为Spring容器中的组件。当类被标记为@Component后,Spring会自动扫描并将其实例化为Bean对象,方便进行依赖注入。

@Controller:用于标识控制器类,处理用户请求并返回响应。控制器类通常用于处理Spring MVC框架中的请求映射。

@Service:用于标识服务层(Service)类,通常用于业务逻辑的处理。被标记为@Service的类在Spring中被视为一个服务组件,可被自动装配到其他组件中使用。

@Repository:用于标识数据访问层(Repository)类,通常用于数据库操作。被标记为@Repository的类可以享受Spring提供的异常转换等特性。

@Autowired:用于自动装配依赖项。当一个类中需要引用其他组件时,可以使用@Autowired注解,Spring会根据类型自动注入相应的实例。

@RequestMapping:用于映射请求URL和处理方法。通过指定URL路径和HTTP请求方法,可以将请求映射到对应的方法上进行处理。

@PathVariable:用于获取URL路径中的变量值,并绑定到方法的参数上。

@RequestParam:用于获取请求参数的值,并绑定到方法的参数上。

@ResponseBody:用于将方法的返回值直接作为响应体返回给客户端,而不是返回一个视图。

@Transactional:用于标识事务处理方法。被标记为@Transactional的方法将在执行期间启动事务,并在方法结束时进行提交或回滚。
在这里插入图片描述

Spring框架都用到了哪些设计模式?

设计模式这块知识在前面专栏出过文章,大佬哪些设计模式忘记了可以自行查看哈~~~

Spring框架用到的设计模式有:

  • 工厂模式(Factory Pattern):Spring 中的 BeanFactory 和 ApplicationContext 都是工厂模式的实现,它们负责创建和管理应用程序中的 Bean 对象。

  • 单例模式(Singleton Pattern):Spring 中的 Bean 默认是单例模式的,意味着在整个应用程序中只存在一个实例对象。在 Spring 中,可以通过配置文件来设定 Bean 的作用范围,从而实现多例模式。

  • 适配器模式(Adapter Pattern):Spring 中的 MVC 设计模式就是采用适配器模式实现的,它允许开发者定义自己的控制器并将这些控制器与框架集成起来。

  • 代理模式(Proxy Pattern):Spring 中的 AOP 就是基于代理模式实现的。AOP 可以通过代理模式将 Cross-cutting concerns(如日志记录、安全性、性能检测等)与业务逻辑分离,并将其应用到多个应用程序组件中。

  • 模板方法模式(Template Method Pattern):Spring 中的 JdbcTemplate 就是采用模板方法模式实现的,它把一些公共的操作过程(如连接数据库、关闭资源等)封装在一个抽象父类中,子类继承这个抽象类并实现自己的业务逻辑。

  • 观察者模式(Observer Pattern):Spring 中的事件监听机制就是基于观察者模式实现的,通过在事件发布者和事件监听者之间建立一种松耦合的关系,将应用程序的不同部分解耦开来,从而提高了应用程序的可维护性和扩展性。

MySQL中的索引下推是什么

索引下推(Index Condition Pushdown)是MySQL数据库中的一个优化技术,旨在减少不必要的数据读取和过滤操作,提高查询性能

从工作原理方面分析:

通常情况下,当执行SELECT语句时,MySQL首先会根据WHERE子句中的条件使用索引快速定位到匹配的行。然后,对于每一行,MySQL会检查额外的过滤条件以确定是否将该行包含在结果集中。这个过程称为"回表",因为它需要访问主要存储引擎中的实际数据行。

索引下推通过将部分WHERE子句的条件下推到存储引擎层级实现了优化。具体来说,当MySQL发现某些条件可以在索引上进行求值时,它会将这些条件下推到存储引擎层级,减少了回表操作的次数。这意味着,在索引上就可以过滤掉不满足条件的行,从而减少了处理的数据量和磁盘I/O操作

索引下推的优点:

  • 减少回表次数:索引下推可以避免不必要的回表操作,减少了数据的读取和过滤操作,显著提高了查询性能。
  • 减少磁盘I/O:由于减少了回表操作,索引下推可以减少对磁盘的访问次数,从而降低了I/O负载。
  • 降低存储引擎开销:通过将部分过滤条件下推到存储引擎层级,索引下推减轻了存储引擎的负担,提高了整体性能。

使用索引下推的条件:

要使用索引下推,需要满足以下条件:

  1. MySQL版本必须是5.6.5或更高。
  2. 表必须使用InnoDB存储引擎。
  3. 查询中的WHERE子句必须包含一个索引列,并且限制条件必须使用等于操作符(例如=、IN)或范围操作符(例如BETWEEN、<、>)。

在这里插入图片描述

网页首页访问量大,如何提高响应速度

这点当时回答的不是很全面,提高相应速度,方法有很多,在此总结下:

要提高网页首页的响应速度,可以考虑以下几个方面:

  • 优化网页代码:删除无用的代码和文件、缩小图片和视频文件的大小、使用压缩技术等,以减少网页的加载时间。

  • 部署CDN加速服务:通过将网页内容存储到多个地理位置的服务器中,大大提高用户访问时的响应速度。

  • 使用浏览器缓存机制:设置合适的HTTP头信息,控制浏览器缓存,减少客户端请求的次数。

  • 压缩HTTP请求:将多个HTTP请求合并为一个,减少请求次数和响应时间。

  • 使用高效的Web服务器:选择高效稳定的Web服务器,如Nginx、Apache等,以提高响应速度和并发能力。

  • 减少DNS查找时间:减少DNS解析时间,可以将DNS记录缓存到本地或者使用CDN服务商提供的DNS解析服务。

  • 使用HTTP/2协议:HTTP/2协议支持多路复用和头部压缩等技术,可以减少网络延迟和带宽消耗,提高页面加载速度。

介绍下你知道的四大引用

我:Java中有四种不同的引用类型,包括强引用、软引用、弱引用和虚引用。

强引用是指在程序中正常使用的对象引用,只要强引用存在,垃圾回收器就不会回收该对象。比如我们写代码时自己new的对象引用:

Object obj = new Object(); //obj为强引用

软引用是在内存不足时才会被回收的引用类型,在内存充足时与强引用没有区别。当垃圾回收器准备回收某个软引用对象时,会先检查内存状态,如果内存充足则不会回收,反之则会回收该对象。下面是软引用:

SoftReference<Object> softRef = new SoftReference<>(new Object()); //softRef为软引用
Object obj = softRef.get(); //obj获取软引用所指向的对象

弱引用也是一种比较灵活的引用类型,它比软引用还要更加弱化。当垃圾回收器扫描到某个弱引用对象时,不管内存是否充足,都会立即回收该对象。如下是弱引用:

WeakReference<Object> weakRef = new WeakReference<>(new Object()); //weakRef为弱引用

Object obj = weakRef.get(); //obj获取弱引用所指向的对象

虚引用是所有引用类型中最弱的一种引用,它唯一的作用就是在对象被回收时收到系统通知。虚引用无法通过get()方法获得实例对象,需要通过ReferenceQueue来判断虚引用的对象是否被回收了。下面是虚引用:

ReferenceQueue<Object> queue = new ReferenceQueue<>(); //声明一个ReferenceQueue
PhantomReference<Object> phanRef = new PhantomReference<>(new Object(), queue); //phanRef为虚引用
Object obj = phanRef.get(); //obj无法获取虚引用所指向的对象

在这里插入图片描述

合并二叉树(leetcode617原题)

在这里插入图片描述
这道题目在leetcode上是道简单题,可以使用深度优先和广度优先来解答,官网讲解的也比较详细,在这里附上答案,详细讲解可参考官网:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if (t1 == null) {
            return t2;
        }
        if (t2 == null) {
            return t1;
        }
        TreeNode merged = new TreeNode(t1.val + t2.val);
        merged.left = mergeTrees(t1.left, t2.left);
        merged.right = mergeTrees(t1.right, t2.right);
        return merged;
    }
}

在这里插入图片描述

其他面试问题

面试还问到了计算机网络(三握四挥),Java基础相关(类加载,双亲委派,垃圾回收)的知识点,都是一些常见的面经,在以往的文章里都有记录过这些知识,在这里就不重复记录了。

文章到这里就先结束了,感兴趣的可以订阅专栏哈,后续会继续分享相关的知识点。

制作不易,感谢各位大佬的热心支持😀

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【性能工程】性能比较:REST vs gRPC vs 异步通信

微服务之间的通信方式对微服务架构内的各种软件质量因素有重大影响&#xff08;有关微服务网络内通信的关键作用的更多信息&#xff09;。沟通方式会影响软件的性能和效率等功能性需求&#xff0c;以及可变性、可扩展性和可维护性等非功能性需求。因此&#xff0c;有必要考虑不…

Element-Plus select选择器-下拉组件错位bug(有高度滚动时)

1. bug重现 由于项目不便展示&#xff0c;因此在官网复现bug https://element-plus.org/zh-CN/component/select.html#基础用法 2. 调试 源码调试时发现下拉菜单是直接放在body 元素里&#xff0c;这时候希望它不要直接放在body里&#xff0c; 查阅文档看到这两个属性&#x…

直线模组怎样保养才合理?

直线模组简单来说就是自动领域中做直线来回往返运动的传动部件&#xff0c;被广泛应用于自动化领域市场当中&#xff0c;可实现二轴、三轴、龙门等多轴搭建的形式&#xff0c;也可用于水平使用、垂直移载使用&#xff0c;能满足自动化领域中大多数的用户。 至于直线模组的保养&…

基于Java+控制台+Mysql实现图书管理系统

基于Java控制台Mysql实现图书管理系统 一、系统介绍二、功能展示1.主页2.添加图书3.图书列表4.根据图书名称号查询图书信息5.根据编号删除图书信息6.根据编号编辑图书信息7.退出系统 三、数据库四、其它1.其他系统实现2.获取源码 一、系统介绍 使用控制台Mysql完成一个图书管理…

实现使用语音控制myCobot机械臂运动

基于语音识别技术的机器人手臂控制智能化尝试 介绍&#xff1a; 在电影《钢铁侠》中&#xff0c;我们看到托尼斯塔克在建造设备时与人工智能贾维斯交流。托尼向贾维斯描述了他需要的零件&#xff0c;贾维斯控制机械臂协助托尼完成任务。随着当今技术的发展&#xff0c;这种实现…

Redis内存策略

Redis内存回收 Redis之所以性能强&#xff0c;最主要的原因就是基于内存操作。然而单节点的Redis其内存大小不宜过大&#xff0c;否则会影响持久化或主从同步性能。 可以通过修改配置文件来设置Redis的最大内存&#xff1a; # 格式&#xff1a; # maxmemory <bytes> #…

[PyTorch][chapter 44][时间序列表示方法2]

前言 bag of words 技术里面除了上面我们讲的&#xff0c;还包括 word2Vec TF-IDF,Glove, co-occurrence matrix 等技术 论文总览 1 Abstract: 摘要 2 Introduction: 前人工作&#xff0c;本文目标 3 Model Architectures: LSA LDA 4 New Log-Linear model 5 Result…

STM32面试知识点总结分析

一、STM32F1和F4的区别&#xff1f; 内核不同&#xff1a;F1是Cortex-M3内核&#xff0c;F4是Cortex-M4内核&#xff1b; 主频不同&#xff1a;F1主频72MHz&#xff0c;F4主频168MHz&#xff1b; 浮点运算&#xff1a;F1无浮点运算单位&#xff0c;F4有&#xff1b; 功能性…

【推荐】win 安装 rust 1.70

目录 一、下载二、安装先决条件MinGW三、安装Rust四、配置国内镜像五、检查是否安装成功五、参考文章 一、下载 官网地址&#xff1a;https://www.rust-lang.org/zh-CN/ 二、安装先决条件MinGW win 安装 C运行环境 - MinGW 三、安装Rust 3.1首先设置安装路径和环境变量 配…

容器常用操作命令概述

容器镜像就可以说是一个“样板间”&#xff0c;把运行进程所需要的文件系统、依赖库、环境变量、启动参数等所有信息打包整合到了一起。之后镜像文件无论放在哪里&#xff0c;操作系统都能根据这个“样板间”快速重建容器&#xff0c;应用程序看到的就会是一致的运行环境了。 …

EMC学习笔记(十四)射频PCB的EMC设计(一)

射频PCB的EMC设计&#xff08;一&#xff09; 1.板材1.1 普通板材1.2 射频专用板材 2.隔离与屏蔽2.1 隔离2.2 器件布局2.3 敏感电路和强辐射电路2.4 屏蔽材料和方法2.5 屏蔽腔的尺寸 近十年来&#xff0c;移动通信飞速发展&#xff0c;在移动通信设备的设计、测试、安装和操作维…

你有几种实现点击锁定屏慕,输入密码解锁的效果的思路?

文章目录 点击锁定&#xff0c;密码解锁1 需求解析2 思路2.1输入密码时回显2.1.1 利用prompt的输入值来判断 2.2 输入密码时不回显2.2.1实现思路 点击锁定&#xff0c;密码解锁 1 需求解析 点击指定的按钮&#xff0c;当前的屏幕变为空白&#xff0c; 弹出对话框&#xff0c;当…

ChatGPT付费创作系统V2.0.8独立版 +WEB端+ H5端 + 小程序端+新增PC端绘画

ChatGPT付费创作系统V2.0.8提供单独的升级包&#xff0c;升级前先更新至2.0.7版本&#xff0c;再上传升级包替换&#xff0c;同是导入升级包数据库。ChatGPT2.0.8独立版核心功能增加了PC端绘画功能&#xff0c;绘画功能采用其他绘画接口-意间AI&#xff0c;后台一些小细节的优化…

电脑c盘哪些文件可以删除?这4种文件可以删!

我的电脑使用了快两年了&#xff0c;现在经常很卡顿&#xff0c;不知道是不是因为电脑c盘空间快满了导致的。电脑c盘哪些文件可以删除呢&#xff1f;请大家帮我看看&#xff01; 电脑的c盘一般会存储很多的临时文件和系统的文件。然而这些文件并不是都有用的。有些文件我们可以…

[golang 微服务] 9.go-micro + gorm实现商品微服务的分页查询

一.引入 上一节讲解 go-micro的负载均衡操作&#xff0c;go Web框(Gin,Beego)调用go-micro微服务等技术&#xff0c;这一节来看看 go-micro gorm实现 商品微服务的 分页查询操作,go-micro微服务中使用GORM和go web框架gin、beego中使用 GORM都是一样的 二.创建goodsinfo服务端…

git学习使用技巧

目录 关于版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 Git 是什么 直接记录快照&#xff0c;而非差异比较 近乎所有操作都是本地执行 Git 保证完整性 Git 一般只添加数据 三种状态 起步 - 初次运行 Git 前的配置 初次运行 Git 前的配置 用户…

2023年7月1日【青书学堂】考试 统计学(高起专)

2023年7月1日【青书学堂】考试 统计学(高起专) 注意:答案仅供参考 成绩:84.34 分 第1题 单选题 下列哪两个变量之间的相关程度高 ( ) A: 商品销售额和商品销售量的相关系数是0.9 B: 商品销售额与商业利润率的相关系数是0.84 C: 平均流通费用率与商业利润率的相关系数是-0…

ACL2023 | Multi-CLS BERT:传统集成的有效替代方案

进NLP群—>加入NLP交流群 在本文中&#xff0c;介绍了 Multi-CLS BERT&#xff0c;这是传统集成方法的有效替代方案。 这种基于 CLS 的预测任务的新颖方法旨在提高准确性&#xff0c;同时最大限度地减少计算和内存需求。 通过利用具有不同参数化和目标的多个 CLS token&…

数据结构-查找

数据结构-查找 1 知识框架2 顺序查找和折半查找2.1 顺序查找2.2折半查找2.3 分块查找 3 树型查找3.1 二叉排序树3.2 平衡二叉树3.3 B树和B树3.3.1 B树3.3.2 B树 4 散列表4.1 构造方法4.2 处理冲突的办法4.3性能分析 1 知识框架 2 顺序查找和折半查找 2.1 顺序查找 1.一般线性…

vue 基础入门

目录 vue 简介 vue 的特性 数据驱动视图 双向数据绑定 MVVM vue 的基本使用 vue 的调试工具 vue 的指令 1、内容渲染指令 2、属性绑定指令 3、事件绑定 4、双向绑定指令 v-model 5、 条件渲染指令 6 、列表渲染指令 vue过滤器 定义过滤器基本使用 私有过滤器和全…