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

柠檬微趣面试准备

简单介绍一下spring原理

Spring框架是一个开源的Java应用程序框架,它提供了广泛的基础设施支持,帮助开发者构建Java应用程序。Spring的设计原则包括依赖注入(DI)和面向切面编程(AOP)等,以促使代码的松耦合和更好的可维护性。

以下是Spring框架的一些关键原理:
(1)依赖注入(Dependency Injection,DI):
DI是Spring的核心原则之一,它通过控制反转(Inversion of Control,IoC)来实现。
在DI中,对象的依赖关系由外部容器负责注入,而不是在对象内部创建或查找依赖对象。
(2)控制反转(Inversion of Control,IoC):
IoC是一种设计模式,它将对象的创建和管理权交给容器,从而实现了松耦合。
Spring容器负责管理应用中的对象,开发者只需要配置和描述对象的依赖关系。
(3)AOP(面向切面编程):
AOP是一种编程范式,它允许将横切关注点(cross-cutting concerns)从主业务逻辑中分离出来。Spring AOP通过在运行时动态地将横切关注点织入到应用程序中,实现了更好的模块化和可维护性。
(4)Spring容器:
Spring框架提供了两种主要类型的容器:BeanFactory和ApplicationContext。
容器负责实例化、配置和管理应用程序中的对象。
(5)Bean:
在Spring中,对象被称为Bean。这些Bean由Spring容器进行管理。
Bean可以通过XML配置文件、Java注解或Java配置类进行定义。
(6)Spring MVC(Model-View-Controller):
Spring MVC是Spring框架中用于开发Web应用程序的模块,它采用MVC设计模式。
控制器接收请求,模型处理业务逻辑,视图负责渲染用户界面。
(7)事务管理:
Spring提供了事务管理的支持,通过声明式事务和编程式事务两种方式实现。
事务管理可以确保数据库操作的一致性和可靠性。
总的来说,Spring框架的原理集中在依赖注入、控制反转、面向切面编程以及提供了强大的容器和其他模块,帮助开发者构建灵活、可维护且易于测试的Java应用程序。

Spring创建对象是单例还是多例?

Spring默认情况下创建的对象是单例的,即在整个Spring容器中,只会创建一个实例并共享给所有需要该对象的地方。这种默认的单例模式有助于提高性能和减少资源消耗,因为对象只需创建一次,然后可以被多个客户端共享。
如果需要将Bean配置为多例(每次请求都创建一个新的实例),可以在Bean的定义中使用scope属性,将其设置为"prototype"

说一下反射的理解?应用在哪里?

反射是指在运行时检查、获取和操作类、方法、属性等程序结构的能力。在Java中,反射机制允许程序在运行时动态获取类的信息、创建对象、调用方法、访问和修改字段等,而不需要在编译时确定这些结构。
动态代理以及spring的数据库连接都用到了反射。

Spring的注入方式?

属性注入、构造器注入和setter注入

aop用到了什么设计模式?

AOP(面向切面编程)主要使用了两个设计模式来实现横切关注点的模块化和可维护性:装饰者模式和代理模式。

(1)装饰者模式(Decorator Pattern):
AOP通过装饰者模式实现了对现有对象(通常是目标对象)的功能扩展,而无需修改目标对象的源代码。
在AOP中,切面(Aspect)就充当了装饰者的角色,它可以包装目标对象的方法,并在方法执行前、后或中间执行横切逻辑。
装饰者模式使得可以动态地添加新的功能,而不影响原有的类结构。
(2)代理模式(Proxy Pattern):
AOP通过代理模式创建了一个代理对象,该代理对象可以控制对目标对象的访问,并在访问目标对象时插入横切逻辑。
在AOP中,代理对象既可以是静态代理也可以是动态代理。静态代理是在编译时就创建的,而动态代理是在运行时通过反射动态生成的。
代理模式使得可以通过代理对象来控制目标对象的访问,实现了对目标对象的解耦和横切逻辑的插入。
这两个设计模式的结合使AOP实现了关注点的分离,将横切关注点从核心业务逻辑中抽离出来,提高了代码的可维护性和重用性。代理模式用于控制对象的访问,而装饰者模式用于动态地添加额外的行为。通过AOP,可以更容易地实现横切关注点,如日志记录、事务管理、权限控制等,而无需修改核心业务逻辑的代码。

SpringBoot解决了Spring哪些问题?

(1)简化配置:
Spring Boot采用了约定大于配置的原则,通过默认配置和自动配置来简化项目的配置工作。大多数应用程序可以零配置启动。
(2)内嵌服务器
Spring Boot内置了一些常见的Web服务器(如Tomcat、Jetty、Undertow),无需额外配置即可快速启动Web应用程序,减少了对外部服务器的依赖。
(3)自动配置:
Spring Boot提供了大量的自动配置,根据类路径上的依赖自动配置应用程序的各种组件。这减少了手动配置的需求,使得开发者能够更专注于业务逻辑。
(4)快速开发:
Spring Boot支持热部署,提供了开发者友好的开发工具,可以在开发阶段快速进行代码的修改和测试,提高了开发效率。
(5)集成常用功能:
Spring Boot集成了许多常用的功能,如安全性、事务管理、数据访问、缓存、消息队列等,这些功能通过简单的配置即可启用。
(6)微服务支持:
Spring Boot对微服务架构提供了良好的支持。它可以轻松创建独立运行的微服务,同时提供了Spring Cloud等工具来简化微服务的开发和部署。
(7)自动化构建和监控:
Spring Boot提供了一些开箱即用的插件和工具,如Spring Boot Maven插件和Spring Boot Actuator,使得构建和监控应用程序变得更加容易。

maven的依赖冲突是什么,怎么解决

Maven的依赖冲突是指在项目中存在多个版本不同但名称相同的依赖库,导致编译、运行时可能出现不一致的行为。这种情况可能会引发各种问题,如类版本不匹配、方法不兼容等。
解决Maven的依赖冲突通常可以采取以下一些方法:
(1)排除依赖:
在项目的pom.xml文件中,可以使用元素排除不需要的依赖。这样可以确保只使用指定版本的依赖库。
(2)使用Dependency Management:
在项目的pom.xml中,可以使用元素来集中管理依赖的版本。这样可以确保所有模块使用相同版本的依赖。

java的基本类型各占多少字节

byte(字节): 1字节
short(短整型): 2字节
int(整型): 4字节
long(长整型): 8字节
float(单精度浮点型): 4字节
double(双精度浮点型): 8字节
char(字符型): 2字节
boolean(布尔型): 没有固定大小,理论上占用1位,但在实际存储中,一般以字节为单位。

NIO工作流程

(1)创建 Selector:Selector 是 NIO 的核心组件之一,它可以同时监听多个通道上的 I/O 事件,并且可以通过 select() 方法等待事件的发生。
(2)注册 Channel:通过 Channel 的 register() 方法将 Channel 注册到 Selector 上,这样 Selector 就可以监听 Channel 上的 I/O 事件。
(3)等待事件:调用 Selector 的 select() 方法等待事件的发生,当有事件发生时,Selector 就会通知相应的线程进行处理。
(4)处理事件:根据不同的事件类型,调用对应的处理逻辑。
(5)关闭 Channel:当 Channel 不再需要使用时,需要调用 Channel 的 close() 方法关闭 Channel,同时也需要调用 Buffer 的 clear() 方法清空 Buffer 中的数据,以释放内存资源。
Java NIO 的工作流程可以简单概括为:通过 Selector 监听多个 Channel 上的 I/O 事件,当事件发生时,通过对应的 Channel 进行读写操作,并在 Channel 不再需要使用时关闭 Channel。

select、poll、epoll的区别

select、poll和epoll这三个函数是Linux系统中I/O复用的系统调用函数。I/O复用使得这三个函数可以同时监听多个文件描述符(File Descriptor, FD),因为每个文件描述符相当于一个需要 I/O的“文件”,在socket中共用一个端口。

Select可以是非阻塞模型,非阻塞并不一定是异步模型,但异步模型一定是非阻塞的。利用 select 函数来判断某Socket上是否有数据可读,或者能否向一个套接字写入数据,防止程序在Socket处于阻塞模式中时,在一次 I/O 调用(如send或recv、accept等)过程中,被迫进入“锁定”状态;

poll是一个增强版本的select,因为select的比特位操作决定了一次性最多处理的读或者写事件(文件描述符数量)只有1024个,而poll使用一个新的方式优化了这个模型。它没有最大连接数的限制,原因是它是基于链表来存储的

epoll给出了一个新的模式,直接申请一个epollfd的文件,对这些进行统一的管理,初步具有了面向对象的思维模式。可理解为event poll,epoll会把哪个流发生哪种I/O事件通知我们。所以epoll是事件驱动(每个事件关联fd)的,此时我们对这些流的操作都是有意义的。复杂度也降低到了O(1)。
在这里插入图片描述

很多个请求,每个请求用一个线程,如何同时写日志文件

1、使用线程安全的日志库

选择一个线程安全的日志库,如Log4j或Slf4j,这些库已经提供了线程安全的机制来处理并发写日志的情况。

2、分配独立的日志文件

为每个请求分配一个独立的日志文件,可以使用请求的唯一标识符或者线程ID作为日志文件的名称。这样每个请求都有自己的日志文件,避免了多个线程同时写入同一个文件造成的并发问题。

3、使用线程锁或互斥机制

在写入日志文件的代码块中使用线程锁或互斥机制,确保同一时间只有一个线程能够执行写入操作。可以使用Java中的synchronized关键字或者Lock接口来实现线程锁。

相关文章:

柠檬微趣面试准备

简单介绍一下spring原理 Spring框架是一个开源的Java应用程序框架,它提供了广泛的基础设施支持,帮助开发者构建Java应用程序。Spring的设计原则包括依赖注入(DI)和面向切面编程(AOP)等,以促使代…...

uniapp嵌套webview,无法返回上一级?

uniapp嵌套webview,如何解决回退问题? 文章目录 uniapp嵌套webview,如何解决回退问题?遇到问题解决方式方式一方式二 场景: 进入首页,自动跳转第三方应用 遇到问题 在设备上运行时,无法回退上…...

【优先级队列 之 堆的实现】

文章目录 前言优先级队列 PriorityQueue优先队列的模拟实现 堆堆的储存方式堆的创建建堆的时间复杂度堆的插入与删除 总结 前言 优先级队列 PriorityQueue 概念:对列是先进先出的的数据结构,但有些情况,数据可能带有优先级,一般出…...

Vue中$watch()方法和watch属性的区别

vue中$watch()和watch属性都是监听值的变化的,是同一个作用,但是有两个不同写法。 用法一: //注意:这种方法是监听不到对象的变化的。 this.$watch((newVal,oldVal)>{ }) 用法二: watch:{xxx:(newVal,oldVal)>…...

openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert

文章目录 openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert概述笔记备注END openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert 概述 实验前置条件为 openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法 …...

小程序商城能不能自己开发?

在数字化时代,小程序商城已经成为商家拓展销售渠道、提升品牌影响力的重要工具。那么,商家能否自己动手开发小程序商城呢?答案是肯定的。接下来,以乔拓云为例,为大家详细介绍如何自己搭建小程序商城。 首先&#xff0c…...

GPTBots:利用FlowBot中的卡片和表单信息,提供丰富的客服体验

在当今的数字化时代,客户服务的形式和体验正在经历着前所未有的变革。传统的文字消息方式已经无法满足现代用户对于服务体验的多元化需求。那么,如何才能在这个信息爆炸的时代,让我们的服务方式更加个性化、多样化,从而提供更丰富…...

ERC20 解读

1.ERC20 什么叫做代币? 代币可以在以太坊中表示任何东西: 在线平台中的信誉积分游戏中一个角色的技能彩票卷金融资产类似于公司股份的资产像美元一样的法定货币一盎司黄金及更多... 以太坊的这种强大特点必须以强有力的标准来处理,对吗&a…...

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇: C#,入门教程(30)——扎好程序的笼子,错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386 Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计。 编译程序的时候会发现&am…...

Java SE:面向对象(下)

1. static关键字 静态区的特点:静态区里面的每一样东西都是唯一有且仅有一个的,如此时str1 "abc"即此时静态区里面已经创建了字符串abc并将abc地址赋给str1,后面在进行赋值也不会在静态区开辟一串新的"abc" 1.1 static修…...

搭建开源数据库中间件MyCat2-配置mysql数据库双主双从

mycat2官网:MyCat2 前言:mycat2下载地址无法访问,不知道是不是被DNS污染了,还是需要搭梯子访问,所以我只能找到1.21的版本进行安装。搭建mycat2的前提是搭建数据库主从复制。 架构:双主双从 配置&#xf…...

Oracle 19c rac集群管理 -------- 集群启停操作过程

Oracle rac集群启停操作过程 首先查看数据库的集群的db_unique_name SQL> show parameter nameNAME TYPE VALUE ------------------------------------ ----------- --------------------------- cdb_cluster_name …...

【Java】HttpServlet类中前后端交互三种方式(query string、form表单、JSON字符串)

在前后端的交互中,前端通过以下三种方式来与后端进行交互🌟 ✅query string ✅form表单 ✅JSON字符串 下面我们将书写这三种方式的后端代码并进行讲解 1、Query String QueryString即在url中写入键值对,一般用doGet方法进行交互 代码如下 …...

【深蓝学院】移动机器人运动规划--第2章 基于搜索的路径规划--笔记

0. Outline 1. Graph Search Basis Configuration Space等概念 机器人配置: 指机器人位置和所有点的表示。 DOF: 指用于表示机器人配置所需的最小的实数坐标的数量n。 C-space: 包含机器人n维所有配置的空间。 在C-space中机器人的pose是一个点。 机器人在C-space中被表示为一…...

安装向量数据库milvus可视化工具attu

使用docker安装的命令和简单就一个命令: docker run -p 8000:3000 -e MILVUS_URL{milvus server IP}:19530 zilliz/attu:v2.3.5sunyuhuasunyuhua-HKF-WXX:~/dockercom/milvus$ docker run -p 8000:3000 -e MILVUS_URL127.0.0.1:19530 zilliz/attu:latest yarn run…...

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟,引脚,将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…...

jdk17新特性——文本块(即多行的字符串)增强

目录 一、文本块(即多行的字符串)概述二、文本块(即多行的字符串)示例2.1、jdk17之前 多行字符串处理方式2.2、jdk17及以后版本 多行字符串处理方式2.3、注意事项 三、文本块(即多行的字符串)转义字符示例3.1、jdk17及以后版本 多行字符串的转义字符处理方式示例一3.2、jdk17及…...

阿里云ECS使用docker搭建mysql服务

目录 1.确保正确安装好docker 2.安装mysql镜像 3.创建容器(设置端口映射、目录映射) 1.确保正确安装好docker 安装教程: 阿里云ECS(CentOS镜像)安装docker-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135686614?spm10…...

Windows给docker设置阿里源

windows环境搭建专栏🔗点击跳转 Windows系统的docker设置阿里源 文章目录 Windows系统的docker设置阿里源1.获得镜像加速器2.配置docker 由于我们生活在中国大陆,所以外网的访问总是那么慢又困难,用docker拉取几兆的小镜象还能忍受&#xff…...

安裝火狐和穀歌流覽器插件FoxyProxy管理海外動態IP代理

代理生態系統擁有大量有用的實用程式,使海外代理IP代理設置的使用變得簡單起來。其中一種類型叫做代理管理工具,像FoxyProxy就是該工具集比較受歡迎的。 本文將全面解析FoxyProxy擴展的功能和特性、Foxyproxy怎麼下載、以及如何在穀歌流覽器和火狐流覽器…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...

sshd代码修改banner

sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4,后7...