【无标题】

1.springboot的starter了解吗?

在Spring Boot应用中,starter是一组预配置的依赖项,您可以通过一个依赖声明将其包含在项目中。Spring Boot starter的目的是通过提供一组常用的依赖项和配置来简化新项目的设置过程;

9.SpringBoot项目在启动的时候是怎么获取Bean

在启动过程中,Spring Boot会扫描所有被@Component相关注解(如@Service、@Controller等)标注的类,并生成对应的Bean定义。

Spring Boot会将所有生成的Bean定义注册到容器中。

在注册完所有Bean定义后,Spring Boot会进行依赖注入(DI),即将Bean之间的依赖关系进行绑定。这个过程是根据各个Bean之间的依赖关系进行的。

当需要获取某个Bean时,Spring Boot会从容器中查找该Bean实例,并将其返回给调用方。具体查找方式可以是按照Bean名称查找、按照类型查找等。

10.Spring Bean管理,原理知道吗?

首先,在启动时,Spring容器会根据配置文件或注解扫描等方式读取所有Bean的定义。

接着,Spring容器会创建所有Bean的实例,并将其存储在内部数据结构中。

Spring容器会根据Bean之间的依赖关系,自动将各个Bean进行注入,形成完整的Bean依赖关系。

当应用程序需要一个Bean时,Spring容器会从之前创建好的Bean实例中查找并返回对应的实例。

当应用程序关闭时,Spring容器会自动销毁所有已创建的Bean实例,释放资源。

48.SpringMVC流程?为什么所有请求都会经过DispatcherServlet?

SpringMVC的流程如下:

客户端发送请求到DispatcherServlet。

DispatcherServlet接收到请求后,根据请求的URL路径,选择合适的Controller进行处理。

Controller处理请求并返回一个ModelAndView对象。

DispatcherServlet通过视图解析器将ModelAndView对象转换成具体的视图,并将响应发送给客户端。

在SpringMVC中,所有请求都会经过DispatcherServlet。这是因为DispatcherServlet充当了前端控制器(Front Controller)的角色,它负责接收所有请求,并协调整个流程的各个组件,

具体来说,DispatcherServlet会根据请求的URL路径,使用HandlerMapping将请求映射到对应的Controller进行处理。然后,Controller会根据请求参数和业务逻辑生成一个ModelAndView对象,该对象包含了需要渲染的视图名称和模型数据。最后,DispatcherServlet将该对象传递给ViewResolver,将其转换成具体的视图,并将响应发送给客户端。

总之,在SpringMVC中,DispatcherServlet是整个流程的核心,它负责接收和分派所有请求,并协调整个流程的各个组件,从而实现灵活高效的Web应用程序。

49.SpringAOP的底层实现?动态代理需要实现InvocationHandler接口,InvocationHandler底层是如何实现的?

Spring AOP 的底层实现是基于 JDK 动态代理和 CGLIB 代码生成技术的。

1.在使用纯 Java 类型的 Spring Bean 的时候,Spring AOP 使用了 JDK 动态代理技术。JDK 动态代理是通过反射机制动态地生成一个实现了被代理接口的代理类,在代理类中增强原有方法的逻辑,并在执行原有方法前后执行增强逻辑。JDK 动态代理要求被代理的类必须实现至少一个接口,因此只能代理接口中定义的方法。

2.而对于没有实现接口的类,Spring AOP 则使用 CGLIB 代码生成技术来实现动态代理。CGLIB(Code Generation Library)是一个功能强大的代码生成库,它可以在运行时动态地生成指定类的子类,并覆盖其中的方法来实现动态代理。通过继承被代理对象,CGLIB 能够对类的所有方法进行代理,包括 final 方法。

3.在 JDK 动态代理和 CGLIB 技术中,都需要实现 InvocationHandler 接口,该接口只有一个 invoke() 方法,该方法会在代理对象调用方法时被调用。在 invoke() 方法中,可以对被代理方法进行增强处理,并在原有方法的前后执行增强逻辑。具体来说,当代理对象调用方法时,invoke() 方法会接收到代理方法的 Method 对象、参数列表和代理对象本身,通过反射机制来执行增强逻辑,并返回一个代理方法的返回值。

4.总之,Spring AOP 的底层实现基于 JDK 动态代理和 CGLIB 代码生成技术,并通过 InvocationHandler 接口来实现对原有方法的增强

58.springboot线程池创建

在 Spring Boot 中,你可以通过配置 ThreadPoolTaskExecutor 或 TaskScheduler 来创建线程池。下面是基本的步骤:

在你的 Spring Boot 应用程序的配置类中定义一个 Bean,并指定它的类型为 ThreadPoolTaskExecutor 或 TaskScheduler。

配置线程池参数,如核心线程数、最大线程数、队列容量等。

使用线程池来执行需要异步处理的任务。

3.md5算法加密是对称还是非对称的?

         简介:MD5算法加密是一种单向哈希函数,属于非对称加密算法。它可以将任意长度的消息转换为一个固定长度(128位)的输出,该输出通常被称为摘要或指纹。MD5算法具有不可逆性,即无法从摘要反推出原始数据

        场景:在文件传输过程中,可以通过计算文件的MD5值来检查文件是否在传输过程中被篡改。此外,MD5算法也可以用于存储密码等敏感信息的加密

6.Mytabis是怎么防止Sql注入的

1.Mybatis通过预编译的方式来防止SQL注入,它会将用户输入的参数转义后再拼接到SQL语句中,而不是直接将参数拼接在SQL语句中。这样可以避免恶意用户通过输入特殊字符来修改原始SQL语句。

2.同时,Mybatis也支持使用动态SQL语句,这使得在构建SQL语句时可以根据不同的情况来动态拼接SQL语句,从而更加灵活和安全。例如,可以使用if语句来判断某个参数是否为空,如果为空则不拼接该参数对应的SQL语句,以避免不必要的错误。

3.总的来说,Mybatis提供了多种方法来防止SQL注入攻击,包括预编译、转义参数、动态SQL等,开发人员只需要按照规范使用Mybatis即可有效地防止SQL注入攻击

16.你能说说僵尸进程吗?(回答了等于没回答,了解的确实不多啊)

1.当一个进程终止时,内核会为其保留一定时间的资源,以便父进程可以获取它的退出状态。这段时间称为进程的“僵尸期”。如果父进程没有及时地获取子进程的退出状态,则子进程就会成为一个“僵尸进程”。

2.僵尸进程在系统中占用着有限的资源(如进程号、程序计数器等),如果存在大量的僵尸进程,就会导致系统资源的浪费和性能下降。

3.避免僵尸进程的方法是让父进程及时处理子进程的退出状态。可以使用wait()或waitpid()等函数来等待子进程的退出并获取其退出状态。在父进程中注册SIGCHLD信号的处理程序,当子进程退出时,该处理程序会被调用,父进程就可以在信号处理程序中获取子进程的退出状态。

4.另外,还可以通过设置进程的信号处理方式为SIG_IGN来忽略子进程的SIGCHLD信号,从而让内核自动回收子进程的资源,避免产生僵尸进程。

22.二叉树有哪些?二叉搜索树查询时间复杂度多少?最坏情况?(忘记了变成链表)

1.二叉树是一种树形数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。常见的二叉树包括:普通二叉树(Binary Tree)、满二叉树(Full Binary Tree)、完全二叉树(Complete Binary Tree)等。

2.二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,它的左子树中所有节点的值都小于根节点的值,而右子树中所有节点的值都大于根节点的值。这个规则保证了二叉搜索树在查找、插入和删除操作时的高效性。

3.在二叉搜索树中进行查找操作的时间复杂度为 O(log n),其中 n 表示二叉搜索树中节点的数量。这是因为每次查找都会将搜索区间缩小一半,所以查找的时间复杂度与树的高度相关。在最坏情况下,即二叉搜索树退化成链表的情况下,查找的时间复杂度为 O(n)。

4.需要注意的是,在进行插入、删除操作时,可能会导致二叉搜索树不再平衡,从而使树的高度增加,进而影响查找的时间复杂度。因此,在实际应用中,需要采用一些特殊的二叉搜索树,如红黑树、AVL 树等,来保证二叉搜索树的平衡性,从而提高查找操作的效率

25.内存泄露如何定位?

使用工具进行检测:可以使用一些专门的工具来检测内存泄露,例如 Java 中的 Profiler 工具、Eclipse MAT(Memory Analysis Tool) 等。这些工具可以帮助开发人员查找应用程序中的内存泄露问题,并提供详细的分析和报告。

代码审查:通过对代码进行仔细审查,寻找可能导致内存泄露的地方,如未关闭文件、未释放数据库连接、未释放锁等。另外,需要特别注意循环引用和静态变量等情况,这些往往也是导致内存泄露的重要原因之一。

分析堆转储文件:当程序出现内存泄露时,可以使用 JVM 提供的 HeapDump 工具(如jmap)生成堆转储文件。然后,可以使用 MAT 或其他类似工具对堆转储文件进行分析,从而查找内存泄露的原因。

代码注入:在代码中注入记录堆栈和对象信息的代码,以追踪内存泄露的来源。这种方法可以用于非实时系统或者测试环境下,但需要谨慎使用,避免对代码性能造成影响

33.问非对称加密你了解多少?

非对称加密(Asymmetric Encryption)是一种加密方式,其特点是需要两个密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。非对称加密广泛应用于数字签名、TLS/SSL安全传输协议、SSH远程登录等场景中。其优点是保证了通信的可靠性和机密性,但缺点是加密解密的速度较慢,因此通常只用于加密少量数据

43.注册中心上保存的什么东西?(nacos作为注册中心)

注册中心通常是微服务架构中的一个组件,用于管理和协调各个微服务实例。它通常会保存以下一些信息:
微服务实例的网络位置信息(比如IP地址、端口号等)
微服务实例的元数据信息(比如服务名称、版本号、环境信息等)
微服务实例的健康状态信息(比如存活状态、负载情况等)
微服务实例的路由信息(比如路由规则、负载均衡策略等)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网友小浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值