喜欢猪猪
阿里云博客专家、腾讯云博客优秀作者、优快云博客专家,软件设计师、软件分析师在考,博客分享一些学习整理的资料、面试宝典、工作中遇到问题的解决方案,欢迎大家交流学习.
展开
-
C#高级工程师面试题
1、简述private、protected、public、internal修饰符的访问权限。private :私有成员,在类的内部才可以访问,也就是类内部的函数等成员可以访问。protected :保护成员,该类内部和继承类中可以访问。public :公共成员,完全公开,没有访问限制。internal:当前程序集内可以访问。2、ADO.NET中的五个主要对象Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得原创 2024-12-16 13:23:17 · 504 阅读 · 0 评论 -
Spring面试必问---手写Spring Ioc 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。通过本文的深入剖析,相信你对Spring IoC循环依赖的底层源码有了全新的认识。Spring通过三级缓存机制巧妙地解决了循环依赖问题,使得开发者能够更加方便地管理Bean的依赖关系。原创 2024-12-04 18:25:33 · 70 阅读 · 0 评论 -
一线大厂面试集锦
String 为什么要设计成不可变的String被设计成不可变的有以下几个原因:线程安全:由于String是不可变的,多个线程可以同时访问同一个String对象而无需担心数据被修改。这使得String在多线程环境下是线程安全1.的。2.缓存Hash值:由于String是不可变的,它的hashcode可以缓存,将String用作Key在哈希表中查找时,由于hashCode不变,可以加快查找速度。3.安全性:Sting在很多安全框架和API中广泛使用,如密码学中的加密操作。如果String是原创 2024-11-22 11:46:18 · 213 阅读 · 0 评论 -
Spring如何解决循环依赖问题
循环依赖是指两个或多个 Bean 之间存在互相依赖的关系。例如,Bean A 依赖于 Bean B,Bean B 又依赖于 Bean A。Spring 通过三级缓存(和)机制来解决循环依赖问题。具体步骤包括实例化 Bean、提前暴露原始 Bean 引用、依赖注入和初始化 Bean。理解这些机制可以帮助开发者在实际项目中更好地处理循环依赖问题,提高应用程序的稳定性和可靠性。原创 2024-07-01 19:50:22 · 412 阅读 · 0 评论 -
解释Spring支持的几种bean的作用域
Spring 还支持自定义作用域。通过实现接口,可以定义自定义作用域。示例java复制代码} }注册自定义作用域:java复制代码} }使用自定义作用域:java复制代码@Component @Scope("custom") public class CustomScopedBean { // 自定义作用域 Bean }单例作用域(Singleton):默认作用域,全局共享单一实例。原型作用域(Prototype):每次请求创建一个新实例。请求作用域(Request)原创 2024-07-01 20:10:32 · 620 阅读 · 0 评论 -
Spring容器的启动流程
解析后的对象被注册到中,这是 Spring 容器的核心部分。维护了所有 Bean 定义的注册表。创建 Spring 容器:通过接口或其实现类来创建容器。读取配置文件或注解:加载应用程序的配置。解析配置文件或注解:将配置信息转换为内部的元数据结构。注册 Bean 定义:将解析后的对象注册到中。实例化单例 Bean:创建 Bean 实例、注入属性和调用初始化方法。处理 Bean 后置处理器:在 Bean 初始化的前后执行自定义逻辑。完成容器启动。原创 2024-07-01 19:48:09 · 778 阅读 · 0 评论 -
Spring的事务传播机制和隔离级别
Spring 提供了强大的事务管理机制,通过事务传播机制:定义了事务方法在被另一个事务方法调用时的行为。常见的传播行为包括等。事务隔离级别:定义了一个事务对其他事务的可见性。常见的隔离级别包括和。了解事务传播机制和隔离级别有助于写出更健壮和高效的事务管理代码,确保数据的一致性和完整性。Spring 提供了强大的事务管理机制,通过注解或程序化事务管理方式,开发者可以轻松地在应用中启用事务特性。原创 2024-07-01 19:57:02 · 776 阅读 · 0 评论 -
Spring 框架中都用到了哪些设计模式:单例模式、策略模式、代理模式
单例模式:用于默认的 Bean 作用域,实现单例。策略模式:用于不同的 Bean 创建策略、事务管理策略等。代理模式:用于 AOP、事务管理等,通过代理对象实现方法拦截和增强���工厂模式:用于和创建和管理 Bean 实例。模板方法模式:用于等,简化常见操作。观察者模式:用于 Spring 事件机制,实现事件发布和监听。装饰器模式:用于等,实现功能的动态扩展。理解这些设计模式在 Spring 中的应用有助于更好地掌握 Spring 框架的核心原理,提高开发效率和代码质量。原创 2024-07-01 19:58:21 · 793 阅读 · 0 评论 -
mybatispuls 分页插件的基本原理是什么?
拦截器注册:将分页拦截器注册到 MyBatis 拦截器链中。SQL 拦截:在 SQL 执行之前拦截查询语句。分页参数解析:从请求参数或上下文中获取分页参数。SQL 修改:修改原始 SQL 语句,添加分页相关的 SQL 片段。执行查询:执行修改后的 SQL 语句,获取分页结果。封装结果:将查询结果封装成分页对象,返回给调用者。通过这一机制,MyBatis-Plus 分页插件能够高效地实现分页查询,简化了开发者的分页处理工作。原创 2024-07-01 20:13:47 · 933 阅读 · 0 评论 -
OOAD的概念
抽象是忽略不相关的细节,专注于对象的关键特性。抽象通过类和接口来实现。面向对象分析与设计(OOAD)是一种强大的软件开发方法,通过对象、类及其关系来建模和设计系统。OOAD 的主要步骤包括面向对象分析(OOA)和面向对象设计(OOD),利用 UML 工具来可视化和描述系统的结构和行为。此外,设计模式作为面向对象设计中的最佳实践,可以提高系统的可维护性、可扩展性和重用性。掌握 OOAD 和设计模式,有助于开发高质量的、易维护的软件系统。原创 2024-07-01 20:26:03 · 909 阅读 · 0 评论 -
苏州大厂面试题JAVA 面试集
答案参考:https://time.geekbang.org/column/article/10192。答案参考:https://time.geekbang.org/column/article/6970。答案参考:https://time.geekbang.org/column/article/8053。2、 对比Hashtable、HashMap、TreeMap有什么不同?3、一个线程调用两次start()会出现什么情况?谈谈线程的生命周期有哪些(线程)1、强引用、软引用、弱引用、幻象引用有什么区别?原创 2024-06-29 09:45:32 · 330 阅读 · 0 评论 -
Redis40问,刨根问底
Redis1、什么是Redis?Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis与其他key - value缓存产品有以下三个特点:l Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时 候可以再次加载进行使用。l Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。l Redis支持数据的备份,即master-sla原创 2023-03-14 14:59:17 · 309 阅读 · 0 评论 -
2023Java 并发编程面试题
BlockingQueue 接口是 Queue 的子接口,它的主要用途并不是作为容器,而是作为线程同步的的工具,因此他具有一个很明显的特性,当生产者线程试图向 BlockingQueue 放入元素时,如果队列已满,则线程被阻塞,当消费者线程试图从中取出一个元素时,如果队列为空,则该线程会被阻塞,正是因为它所具有这个特性,所以在程序中多个线程交替向BlockingQueue 中放入元素,取出元素,它可以很好的控制线程之间的通信。因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。原创 2023-03-10 18:21:49 · 591 阅读 · 3 评论 -
2023携程面试题
Java NIO 的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。InnoDB 的锁粒度为行锁、MyISAM 的锁粒度为表锁、行锁需要对每一行进行加锁,所以锁的开销更大,但是能解决脏读和不可重复读的问题,相对来说也更容易发生死锁l 可恢复性上:由于 InnoDB 是有事务日志的,所以在产生由于数据库崩溃等条件后,可以根据日志文件进行恢复。原创 2023-03-10 09:32:33 · 1994 阅读 · 0 评论 -
2023腾讯面试真题:
100 万个数据里面查找最大的 10000 个数据的方法如下:用快速排序的方法,将数据分为 2 堆,如果大的那堆个数 N 大于 10000 个,继续对大堆快速排序一次分成 2 堆,如果大的那堆个数 N 大于 10000 个,继续对大堆快速排序一次分成 2 堆,如果大堆个数 N 小于10000 个,就在小的那堆里面快速排序一次,找第 10000-n 大的数字;当然如果上一次运行时间为空的情况下,也是允许标记的,如果数据库中的序列号与当前节点生成序列号相匹配,则执行任务的具体逻辑,反之,则什么都不做处理。原创 2023-03-10 09:31:22 · 3649 阅读 · 2 评论 -
2023华为面试真题
如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当 A 系统访问 B 系统提供的服务时,B 系统有多种提供服务的方式,但一切对 A系统来说都是透明的。而且 IO 的各种流是阻塞的。Java 程序最初都是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁,就会认定其为"热点代码",热点代码的检测主要有基于采样和基于计数器两种方式,为了提高热点代码的执行效率,虚拟机会把它们编译成本地机器码,尽可能对代码优化,在运行时完成这个任务的后端编译器被称为即时编译器。原创 2023-03-09 10:52:37 · 6616 阅读 · 0 评论 -
2023百度面试真题
AOF 缺点:l 对于相同的数据来说,AOF 文件大小通常要大于 RDB 文件 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB混合持久化方式Redis 4.0 之后新增的方式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能减低数据丢失的风险。用户程序是不可信的,不管程序员是有意的还是无意的,都很容易将系统干到崩溃。原创 2023-03-08 13:42:55 · 1306 阅读 · 0 评论 -
2023阿里面试真题
解析阶段是指虚拟机将常量池中的符号引用替换为直接引用的过程。ThreadLocal 是一个解决线程并发问题的一个类,用于创建线程的本地变量,我们知道一个对象的所有线程会共享它的全局变量,所以这些变量不是线程安全的,我们可以使用同步技术。当每个进程创建的时候,内核会为每个进程分配虚拟内存,这个时候数据和代码还在磁盘上,当运行到对应的程序时,进程去寻找页表,如果发现页表中地址没有存放在物理内存上,而是在磁盘上,于是发生缺页异常,于是将磁盘上的数据拷贝到物理内存中并更新页表,下次再访问该虚拟地址时就能命中了。原创 2023-03-07 09:22:09 · 382 阅读 · 0 评论 -
2023美团面试真题
在使用过程中,把最近使用的页面移动到队列头,最近没有使用的页面将被放在队列尾的位置l 使用一个哈希表,把页号作为键,把缓存在队列中的节点的地址作为值,只需要把这个页对应的节点移动到队列的前面,如果需要的页面在内存中,此时需要把这个页面加载到内存中,简单的说,就是将一个新节点添加到队列前面,并在哈希表中跟新相应的节点地址,如果队列是满的,那么就从队尾移除一个节点,并将新节点添加到队列的前面。完全以缓存为准,使用延迟异步加载的策略(异步线程负责维护缓存的数据,定期或根据条件触发更新),这样就不会触发更新。原创 2023-03-06 10:57:11 · 4438 阅读 · 0 评论 -
2021年JVM面试题汇总
JVM面试题汇总一:Java 类加载过程?Java 类加载需要经历一下 7 个过程:1. 加载加载是类加载的第一个过程,在这个阶段,将完成一下三件事情:• 通过一个类的全限定名获取该类的二进制流。• 将该二进制流中的静态存储结构转化为方法去运行时数据结构。• 在内存中生成该类的 Class 对象,作为该类的数据访问入口。2. 验证验证的目的是为了确保 Class 文件的字节流中的信息不回危害到虚拟机, 在该阶段主要完成以下四钟验证:• 文件格式...原创 2021-06-10 13:59:23 · 474 阅读 · 0 评论 -
Spring IOC和Spring AOP的实现原理(源码主线流程)
Spring IOC## 一、容器初始化 容器的初始化首先是在对应的构造器中进行,在applicationContext的实现类构造器中,首先对参数路径中的${}进行了处理,用系统变量替换(setConfigLocations方法)然后调用refresh方法(这个就是最核心的容器初始化方法)。### 1、Resourc...原创 2021-05-05 15:49:20 · 436 阅读 · 0 评论 -
Mybatis中Dao接口的工作原理
答:Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3..原创 2021-05-05 15:48:44 · 2091 阅读 · 1 评论 -
Spring的并发问题——有状态Bean和无状态Bean
**一、有状态和无状态****有状态会话bean** :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。简单来说,有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是**非线程安全**的。**无状态会话bean** :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean...原创 2021-05-05 15:47:25 · 2308 阅读 · 6 评论 -
CodeReview 目标与原则
目标&原则:1、 提高代码质量,及早发现潜在缺陷,降低修改/弥补缺陷的成本。2、 促进团队内部知识共享,提高团队整体水平3、 评审过程对于评审人员来说,也是一种思路重构的过程,帮助更多的人理解系统4、 是一个传递知识的手段,可以让其它并不熟悉代码的人知道作者的意图和想法,从而可以在以后轻松维护代码5、 鼓励相互学习对方的长处和优点6、 高效迅速完成Code Review周期:频率越高越好,交流放在每一天,具体根据各团队实际情况安排,下面列出几个关键节点。需求评审原创 2021-04-14 18:07:44 · 358 阅读 · 1 评论 -
如何保证缓存和数据库数据的一致性
问题:先修改数据库,再删除缓存。如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致。解决思路:先删除缓存,再修改数据库。如果数据库修改失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致。因为读的时候缓存没有,则读数据库中旧数据,然后更新到缓存中。比较复杂的数据不一致问题分析:数据发生了变更,先删除了缓存,然后要去修改数据库,此时还没修改。一个请求过来,去读缓存,发现缓存空了,去查询数据库,查到了修改前的旧数据,放到了缓存中。随后数据变更的程序.原创 2021-04-13 19:34:57 · 195 阅读 · 0 评论 -
谈谈Spring bean的生命周期,作用域
谈谈Spring bean的生命周期,作用域 在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义以及bean相互间的依赖关系将通过配置元数据来描述。 Spring中的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独...原创 2021-03-26 11:52:41 · 244 阅读 · 0 评论 -
spring的思维导图
原创 2020-09-07 11:53:57 · 478 阅读 · 0 评论 -
软件设计师算法--常见算法,常见面试算法,经典面试算法
目录一、排序简介二、冒泡排序法三、选择排序四、插入排序五、希尔排序六、归并排序七、快速排序一、排序简介排序算法大体可分为两种:1、比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。2、非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。二、冒泡排序法算法思路:1、比较相邻的元素。如果第一个比第二个大,就交换它们两个;2、对每...原创 2020-07-22 11:17:25 · 1497 阅读 · 1 评论 -
JAVA高级工程师面试备份整理2
目录Java概述何为编程什么是JavaJVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点Java和C++的区别基础语法数据类型super关键字的用法3.引用父类构造函数static的独特之处面向对象面向过程:面向对象三大特性封装继承多态方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。多态的实现面向对..原创 2020-06-29 09:40:42 · 463 阅读 · 0 评论 -
Java高级工程师面试题整理
面试题:HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理Spring的AOP和IOC是什么?使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点SpringCould组件有哪些,他们的作用是什么?(说七八个)微服务的CAP是什么?B.原创 2020-06-11 22:50:29 · 6821 阅读 · 0 评论 -
Java 面试备份-7,集合的相关介绍使用、优缺点介绍,案例
文章目录简介 特点 使用集合框架的好处 Iterator接口 ListIterator接口 Collection接口 单列集合继承关系图 List集合 List常用方法 ArrayList、LinkedList、Vector 的区别 遍历时操作元素 Set集合 Set常用方法 HashSet、TreeSet、LinkedHashSet的区别 HashSet如何检查重复 Map接口 双列集合继承关系图 Map常用方法 HashMap、HashTable、TreeMap的原创 2020-05-20 11:31:38 · 293 阅读 · 0 评论 -
设计模式、秒杀系统、常见算法、分布式系统面试题备份6
架构设计请列举出在JDK中几个常用的设计模式?单例模式(Singleton pattern)用于Runtime,Calendar和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像Boolean.valueOf,观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中。装饰器设计模式(Decorator design pattern)被用于多个 Java IO 类中。什么是设计模式?你是否在你的代码里面使用过任何设计模式?原创 2020-05-10 22:10:30 · 502 阅读 · 0 评论 -
JAVA并发面试知识点备份5
基础知识并发编程的优缺点为什么要使用并发编程(并发编程的优点)充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升方便进行业务拆分,提升系统并发能力和性能:在特殊的业务场景下,先天的就适合于并发编程。现在的系统动不动就要求百万级甚至千万级的并发量,而多线程并发编程正是开发高并发系统的基础,利用好多线程机制可以大大提高系统整体的并发能力以及性能。面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分 。并发编程有什么缺点原创 2020-05-09 21:58:17 · 300 阅读 · 0 评论 -
Spring面试题备份整理3
什么是spring?spring是一个轻量级的Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,它是一个分层的JavaSE、JavaEE full stack(一站式)轻量级开源框架,为开发Java应用程序提供了全面的基础架构支持。spring负责基础架构,因此Java开发者可以专注于应用程序开发。Spring最根本的使命是解决企业级...原创 2020-05-02 22:59:24 · 333 阅读 · 0 评论 -
Java虚拟机(JVM)面试题备份2
Java内存区域,JVM包含了两个子系统和两个组件,两个子系统为class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native interface(本地接口) class locader(类装载):根据给定的全限定类名称(如:java.lang.Object)来装载class文件到Runtime da...原创 2020-05-02 15:38:35 · 393 阅读 · 0 评论 -
Java面试基础知识整理-1
Static存在的意义,static主要意义是在于创建独立的具体对象的域变量或者方法,以至于即使没有创建对象,也能使用属性和调用方法,static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序的性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个statci块,并且只会执行一次。为什么说static块可以...原创 2020-04-29 22:36:13 · 203 阅读 · 0 评论 -
JAVA面试基础知识整理备份
何为编程,编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路,方法、和手段通过计算机能够理解的方式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务,这种人和计算机之间的交流过程就是编程。 什么是JAVA,Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还屏蔽...原创 2020-04-28 21:49:12 · 220 阅读 · 0 评论