总结面试题一起看看

运维开发面试题整理 Python的可变与不可变数据类型 可变数据类型:列表list和字典dict;不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。 不可变数据类型分析 python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象, 阅读详情

【美团】面试真题

江湖传言这些都是前辈们遇到过的

Spring AOP 底层原理

aop底层是采用动态代理机制实现的:接口 +实现类
如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy ,去创建代
理对象。
没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用
Cglib 生成一个被代理对象的子类来作为代理。
就是由代理创建出一个和 impl 实现类平级的一个对象,但是这个对象不是一个真正的对象,
只是一个代理对象,但它可以实现和 impl 相同的功能,这个就是 aop 的横向机制原理,这
样就不需要修改源代码。

HashMap 的底层数据结构是怎样的 ?

JDK1.8 之前
JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列 。
HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n -1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在
元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,
直接覆盖,不相同就通过拉链法解决冲突。
所谓扰动函数指的就是 HashMap 的 hash 方法。使用 hash 方法也就是扰动函数是为了
防止一些实现比较差的 hashCode() 方法 换句话说使用扰动函数之后可以减少碰撞。
JDK1.8 之后 当链表长度大于阈值(默认为 8)时,会首先调用 treeifyBin() 方法。
这个方法会根据 HashMap 数组来决定是否转换为红黑树。
只有当数组长度大于或者等于 64 的情况下,才会执行转换红黑树操作,以减少搜索时间。
否则,就是只是执行 resize() 方法对数组扩容。

HashMap 的扩容机制是怎样的?

一般情况下,当元素数量超过阈值时便会触发扩容。每次扩容的容量都是之前容量的 2倍。
HashMap 的容量是有上限的,必须小于 1<<30 ,即 1073741824 。如果容量超出了这个
数,则不再增长,且 阈值会被设置为 Integer.MAX_VALUE 。
JDK7 中的扩容机制
空参数的构造函数:以默认容 量、默认负载因子、默认阈值初始化数组。内部数组是空数
组。
有参构造函数:根据参数确定容量、负载因子、阈值等。
第一次 put时会初始化数组,其容量变为不小于指定容量的 2的幂数,然后根据负载因子
确定阈值。
如果不是第一次扩容,则 新容量 =旧容量 x 2 ,新阈值 =新容量 x 负载因子 。
JDK8 的扩容机制
空参数的构造函数:实例化的 HashMap 默认内部数组是 null,即没有实例化。第一次调
用put方法时,则会开始第一次初始化扩容,长度为 16。
有参构造函数:用于指定容量。会根据指定的正整数找到不小于指定容量 的2的幂数,将
这个数设置赋值给阈值( threshold )。第一次调用 put方法时,会将阈值赋值给容量,
然后让 阈值 = 容量 x 负载因子 。
如果不是第一次扩容,则容量变为原来的 2倍,阈值也变为原来的 2倍。(容量和阈值都
变为原来的 2倍时,负载因子还是不变)。
此外还有几个细节需要注意:
首次 put时,先会触发扩容(算是初始化),然后存入数据,然后判断是否需要扩容;
不是首次 put,则不再初始化,直接存入数据,然后判断是否需要扩容;

ConcurrentHashMap 的存储结构是怎样的?

Java7 中 ConcurrnetHashMap 使用的分段锁,也就是每一个 Segment 上同时只有一个
线程可以操作,每一个 Segment 都是一个类似 HashMap 数组的结构,它可以扩容,它
的冲突会转化为链表。但是 Segment 的个数一但初始化就不能改变,默认 Segment 的
个数是 16 个。
Java8 中的 ConcurrnetHashMap 使用的 Synchronized 锁加 CAS 的机制。结构也由
Java7 中的 Segment 数组 + HashEntry 数组 + 链表 进化成了 Node 数组 + 链表 / 红
30 黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红
黑树,在冲突小于一定数量时又退回链表。

线程池大小如何设置?

CPU 密集型任务 (N+1) : 这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N
(CPU 核心数) +1,比 CPU 核心数多出来的一个线程是为了防止线程偶 发的缺页中断,
或者其它原因导致的任务暂停而带来的影响。一旦任务暂停, CPU 就会处于空闲状态,而
在这种情况下多出来的一个线程就可以充分利用 CPU 的空闲时间。
I/O 密集型任务 (2N) : 这种任务应用起来,系统会用大部分的时间来处理 I/O 交互,而
线程在处理 I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程
使用。因此在 I/O 密集型任务的应用中,我们可以多配置一些线程,具体的计算方法是
2N。
如何判断是 CPU 密集任务还是 IO 密集任务?
CPU 密集型简单理解 就是利用 CPU 计算能力的任务比如你在内存中对大量数据进行排序。单
凡涉及到网络读取,文件读取这类都是 IO 密集型,这类任务的特点是 CPU 计算耗费时间相
比于等待 IO 操作完成的时间来说很少,大部分时间都花在了等待 IO 操作完成上。

IO 密集=Ncpu*2 是怎么计算出来?

I/O 密集型任务 任务应用起来,系统会用大部分的时间来处理 I/O 交互,而线程在处理
I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程使用。因此在
I/O 密集型任务的应用中,我们可以多配 置一些线程。例如:数据库交互,文件上传下
载,网络传输等。 IO密集型,即该任务需要大量的 IO,即大量的阻塞,故需要多配置线
程数。

G1 收集器有哪些特点?

G1 的全称是 Garbage -First,意为垃圾优先,哪一块的垃圾最多就优先清理它。
G1 GC 最主要的设计目标是:将 STW 停顿的时间和分布,变成可预期且可配置的。
被视为 JDK1.7 中 HotSpot 虚拟机的一个重要进化特征。它具备一下特点:
并行与并发 :G1 能充分利用 CPU、多核环境下的硬件优势,使用多个 CPU(CPU 或者
CPU 核心)来缩短 Stop -The-World 停顿时间。部分其他收集器原本需要停顿 Java 线程
执行的 GC 动作, G1 收集器仍然可以通过并发的方式让 java 程序继续执行。
分代收集 :虽然 G1 可以不需要其他收集器配合就能独立管理整个 GC 堆,但是还是保留
了分代的概念。
31 空间整合 :与 CMS 的“标记-清理”算法不同, G1 从整体来看是基于 “标记-整理”算法
实现的收集器;从局部上来看是基于 “标记-复制”算法实现的。
可预测的停顿 :这是 G1 相对于 CMS 的另一个大优势,降低停顿时间是 G1 和 CMS 共
同的关注点,但 G1 除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明
确指定在一个长度为 M 毫秒的时间片段内。
G1 收集器在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的
Region (这也就是它的名字 Garbage -First 的由来)

你有哪些手段来排查 OOM 的问题?

增加两个参数 -XX:+HeapDumpOnOutOfMemoryError -
XX:HeapDumpPath=/tmp/heapdump.hprof ,当 OOM 发生时自动 dump 堆内存信
息到指定目录。
同时 jstat 查看监控 JVM 的内存和 GC 情况,先观察问题大概出在什么区域。
使用 MAT 工具载入到 dump 文件,分析大对象的占用情况,比如 HashMap 做缓存未
清理,时间长了就会内存溢出,可以把改为弱引用。

MySQL 事务的特性有什么,说一下分别是什 么意思?

原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。
一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态。
隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务。
持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故
障,事务的处理结果也会得到保存。

请你谈谈 MySQL 事务隔离级别, MySQL 的默认隔离级别是什么?

为了达到事务的四大特性,数据库定义了 4种不同的事务隔离级别:
READ -UNCOMMITTED (读取未提交):最低的隔离级别,允许脏读,也就是可能读取
到其他会话中未提交事务修改的数据, 可能会导致脏读、幻读或不可重复读 。
READ -COMMITTED (读取已提交): 只能读取到已经提交的数据。 Oracle 等多数数据
库默认都是该级别 (不重复读), 可以阻止脏读,但是幻读或不可重复读仍有可能发生 。
REPEATABLE -READ (可重复读):对同一字段的多次读取结果都是一致的,除非数据是
被本身事务自己所修改, 可以阻止脏读和不可重复读,但幻读仍有可能发生 。
SERIALIZA BLE(可串行化):最高的隔离级别,完全服从 ACID 的隔离级别。所有的事
务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说, 该级别可以防止脏
读、不可重复读以及幻读 。
MySQL 默认采用的 REPEATABLE_READ 隔离级别。

可重复读解决了哪些问题?

可重复读的核心就是一致性读 (consistent read); 保证多次读取同一个数据时,其值都和事
务开始时候的内容是一致,禁止读取到别的事务未提交的数据,会造成幻读。
而事务更新数据的时候,只能用当前读。如果当前的记录的行锁被其他事务占用的 话,就
需要进入锁等待。
32 查询只承认在事务启动前就已经提交完成的数据。
可重复读解决的是重复读的问题,可重复读在快照读的情况下是不会有幻读,但当前读的
时候会有幻读。

对 SQL 慢查询会考虑哪些优化 ?

分析语句,是否加载了不必要的字段 /数据。
分析 SQL执行计划( explain extended ),思考可能的优化点,是否命中索引等。
查看 SQL涉及的表结构和索引信息。
如果 SQL很复杂,优化 SQL结构。
按照可能的优化点执行表结构变更、增加索引、 SQL改写等操作。
查看优化后的执行时间和执行计划。
如果表数据量太大,考虑分表。
利用缓存,减少查询次数。

谈一谈缓存穿透、缓存击穿和缓存雪崩,以及解决办法?

缓存穿透
问题:大量并发查询不存在的 KEY,在缓存和数据库中都不存在,同时给缓存和数据库带
来压力。
原因:一般而言,缓存穿透有 2种可能性:业务数据被误删,导致缓存和数据库中都没有
数据。恶意进行 ddos 攻击。
分析:为什么会多次透传呢?不存在 一直为空,需要注意让缓存能够区分 KEY不存在和
查询到一个空值。
解决办法:缓存空值的 KEY,这样第一次不存在也会被加载会记录,下次拿到有这个
KEY。Bloom 过滤或 RoaingBitmap 判断 KEY是否存在,如果布隆过滤器中没有查到这
个数据,就不去数据库中查。在处理请求前增加恶意请求检查,如果检测到是恶意攻击,
则拒绝进行服务。完全以缓存为准,使用延迟异步加载的策略( 异步线程负责维护缓存的
数据,定期或根据条件触发更新),这样就不会触发更新。
缓存击穿
问题:某个 KEY失效的时候,正好有大量并发请求访问这个 KEY。
分析:跟穿透其实很像,属于比较偶然的。
解决办法: KEY的更新操作添加全局互斥锁。完全以缓存为准,使用延迟异步加载的策略
(异步线程负责维护缓存的数据,定期或根据条件触发更新),这样就不会触发更新。
缓存雪崩
33 问题:当某一时刻发生大规模的缓存失效的情况,导致大量的请求无法获取数据,从而将
流量压力传导到数据库上,导致数据库压力过大甚至宕机。
原因:一般而言,缓存雪 崩有 2种可能性:大量的数据同一个时间失效:比如业务关系强
相关的数据要求同时失效 Redis 宕机
分析:一般来说,由于更新策略、或者数据热点、缓存服务宕机等原因,可能会导致缓存
数据同一个时间点大规模不可用,或者都更新。所以,需要我们的更新策略要在时间上合
适,数据要均匀分享,缓存服务器要多台高可用。
解决办法:更新策略在时间上做到比较平均。如果数据需要同一时间失效,可以给这批数
据加上一些随机值,使得这批数据不要在同一个时间过期,降低数据库的压力。使用的热
数据尽量分散到不同的机器上。多台机器做主从复制或者多副本, 实现高可用。做好主从
的部署,当主节点挂掉后,能快速的使用从结点顶上。实现熔断限流机制,对系统进行负
载能力控制。对于非核心功能的业务,拒绝其请求,只允许核心功能业务访问数据库获取
数据。服务降价:提供默认返回值,或简单的提示信息。

LRU 是什么?如何实现?

最近最少使用策略 LRU(Least Recently Used )是一种缓存淘汰算法,是一种缓存淘汰机
制。
使用双向链表实现的队列,队列的最大容量为缓存的大小。在使用过程中,把最近使用的
页面移动到队列头,最近没有使用的页面将被放在队列尾的位置
使用一个哈希表,把页号作为键,把缓存在队列中的节点的地址作为值,只需要把这个页
对应的节点移动到队列的前面,如果需要的页面在内存中,此时需要把这个页面加载到内
存中,简单的说,就是将一个新节点添加到队列前面,并在哈希表中跟新相应的节点地
址,如果队列是满的,那么就从队尾移除一个节点,并将新节点添加到队列的前面。

什么是堆内存?参数如何设置?

堆内存是指由程序代码自由分配的内 存,与栈内存作区分。
在Java 中,堆内存主要用于分配对象的存储空间,只要拿到对象引用,所有线程都可
以访问堆内存。
-Xmx, 指定最大堆内存。 如 -Xmx4g. 这只是限制了 Heap 部分的最大值为 4g。这个内
存不包括栈内存,也不包括堆外使用的内存。
-Xms, 指定堆内存空间的初始大小。 如 -Xms4g 。 而且指定的内存大小,并不是操作系
统实际分配的初始值,而是 GC先规划好,用到才分配。 专用服务器上需要保持 –Xms
和 –Xmx 一致,否则应用刚启动可能就有好几个 FullGC 。当两者配置不 一致时,堆内存
扩容可能会导致性能抖动。
34 -Xmn, 等价于 -XX:NewSize ,使用 G1 垃圾收集器 不应该 设置该选项,在其他的某些业
务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4.
-XX:MaxPermSize=size, 这是 JDK1.7 之前使用的。 Java8 默认允许的 Meta 空间无限
大,此参数无效。
-XX:MaxMetaspaceSize=size, Java8 默认不限制 Meta 空间, 一般不允许设置该选
项。
-XX:MaxDirectMemorySize= size,系统可以使用的最大堆外内存,这个参数跟 -
Dsun.nio.MaxDirectMemorySize 效果相同。
-Xss, 设置每个线程栈的字节数。 例如 -Xss1m 指定线程栈为 1MB,与-
XX:ThreadStackSize=1m 等价

栈和队列,举个使用场景例子?

栈(后进先出 )可以用于字符匹配,数据反转等场景
队列( 先进先出 )可以用于任务队列,共享打印机等场景

MySQL 为什么 InnoDB 是默认引擎?

聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同 。一个表只能有一
个聚簇索引,因为一个表的物理顺序只有一种情况,所以,对应的聚簇索引只能有一个。聚簇
索引的叶子节点就是数据节点,既存储索引值,又在叶子节点存储行数据。
Innodb 创建表后生成的文件有:
frm:创建表的语句
idb:表里面的数据 +索引文件

17、MySQL 索引底层结构为什么使用 B+树?

哈希虽然能够提供 O(1) 的单数据行操作性能,但是对于范围查询和排序却无法很好地支
持,最终导致全表扫描; B树能够在非叶节子点中存储数据,但是这也导致在查询连续数
据时可能会带来更多的随机 I/O,而 B+树的所有叶节点可以通过指针相互连接,能够减
少顺序遍历时产生的额外随机 I/O;
第一, B 树一个节点里存的是数据,而 B+树存储的是索引(地址),所以 B 树里一个节
点存不了很多个数据,但是 B+树一个节点能存很多索引, B+树叶子节点存所有的数据。
第二, B+树的叶子节点是数据阶段用了一个链表串联起来,便于范围查找。

B+ 树的叶子节 点链表是单向还是双向?

双向链表

MVCC 是什么?它的底层原理是什么?

MVCC ,多版本并发控制 ,它是通过读取历史版本的数据,来降低并发事务冲突,从而提高并
发性能的一种机制。
事务版本号
表的隐藏列
undo log
read view

undo log 具体怎么回滚事务 ?

举个例子:
对于 insert 类型的 sql,会在 undo log 中记录下方才你 insert 进来的数据的 ID,当你想
roll back 时,根据 ID完成精准的删除。
对于 delete 类型的 sql,会在 undo log 中记录方才你删除的数据,当你回滚时会将删除
前的数据 insert 进去。
对于 update 类型的 sql,会在 undo log 中记录下修改前的数据,回滚时只需要反向
update 即可。
对于 select 类型的 sql,别费心了, select 不需要回滚。

如何查询慢 SQL 产生的原因

分析 SQL执行计划( explain extended ),思考可能的优化点,是否命中索引等。
没有索引或者没有用到索引 (这是查询慢最常见的问题,是程序设计的缺陷 )。
内存不足。
网络速度慢。
是否查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。
是否返回了不必要的行和列。
锁或者死锁。
I/O吞吐量小,形成了瓶颈效应。
sp_lock,sp_who, 活动的用户查看 ,原因是读写竞争资源。

索引失效的情况有哪些?

like以%开头索引无效,当 like以&结尾,索引有效。
36 or语句前后没有同事使用索引,当且仅当 or语句查询条件的前后列均为索引时,索引生
效。
组合索引,使用的不是第一列索引时候,索引失效,即最左匹配规则。
数据类型出现隐式转换,如 varchar 不加单引号的时候可能会 自动转换为 int类型,这个
时候索引失效。
在索引列上使用 IS NULL 或者 IS NOT NULL 时候,索引失效,因为索引是不索引空值
得。
在索引字段上使用, NOT、 <>、!= 、时候是不会使用索引的,对于这样的处理只会进
行全表扫描。
对索引字段进行计算操作,函数操作时不会使用索引。
当全表扫描速度比索引速度快的时候不会使用索引。

一个 Redis 实例最多能存放多少的 keys ?List、Set、Sorted Set 他们最

多能存放多少元素?
理论上 Redis 可以处理多达 232的keys,并且在 实际中进行了测试,每个实例至少存放了 2
亿5千万的 keys。我们正在测试一些较大的值。任何 list、set、和 sorted set 都可以放 232
个元素。换句话说, Redis 的存储极限是系统中的可用内存值。

Redis 数据结构 压缩列表和跳跃表的区别

压缩列表( ziplist )本质上就是一个字节数组,是 Redis 为了节约内存而设计的一种线性
数据结构,可以包含多个元素,每个元素可以是一个字节数组或一个整数。
跳跃表( skiplist )是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指
针,从而达到快速访问节点的目的。跳跃表支持平均 O(logN )、最坏 O(N)复杂度的
节点查找,还可以通过顺序性操作来批量处理节点。

为什么数据量小的时候用压缩列表 ?

为了省内存。

Redis 主从同步是怎么实现的?

全量同步
master 服务器会开启一个 后台进程用于将 redis 中的数据生成一个 rdb文件,与此同时,服
务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程处理完毕
37 后,会将该 rdb文件传递给 slave 服务器,而 slave 服务器会将 rdb文件保存在磁盘并通过读
取该文件将数据加载到内存,在此之后 master 服务器会将在此期间缓存的
命令通过 redis 传输协议发送给 slave 服务器,然后 slave 服务器将这些命令依次作用于自己
本地的数据集上最终达到数据的一致性。
增量同步
从redis 2.8 版本以前,并不支持部分同步,当主从服务 器之间的连接断掉之后, master 服务
器和 slave 服务器之间都是进行全量数据同步。
从redis 2.8开始,即使主从连接中途断掉,也不需要进行全量同步,因为从这个版本开始融
入了部分同步的概念。部分同步的实现依赖于在 master 服务器内存中给每个 slave 服务器维
护了一份同步日志和同步标识,每个 slave 服务器在跟 master 服务器进行同步时都会携带自
己的同步标识和上次同步的最后位置。当主从连接断掉之后, slave 服务器隔断时间(默认
1s)主动尝试和 master 服务器进行连接,如果从服务器携带的偏移量标识还在 master 服务
器上的同步备份日志中,那么就从 slave 发送的偏移量开始继续上次的同步操作,如果 slave
发送的偏移量已经不再 master 的同步备份日志中(可能由于主从之间断掉的时间比较长或者
在断掉的短暂时间内 master 服务器接收到大量的写操作),则必须进行一次全量更新。在部
分同步过程中, master 会将本地记录的同步备份日志中记录的指令依次发送给 slave 服务器
从而达到数据一致。
Redis 主从同步策略
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,
slave 在任何时候都可以发起全量同步。 redis 策略是,无论如何,首先会尝试进行增量同
步,如不成功,要求从机进行 全量同步。

Redis 持久化 RDB 和 AOF 优缺点

RDB
RDB 持久化方式,是将 Redis 某一时刻的数据持久化到磁盘中,是一种快照式的持久化方
法。

  • RDB 优点:
    RDB 是一个非常紧凑(有压缩)的文件 ,它保存了某个时间点的数据 ,非常适用于数据的备份。
    RDB 作为一个非常紧凑(有压缩)的文件,可以很方便传送到另一个远端数据中心 ,非常适用于灾难恢复。
    RDB 在保存 RDB 文件时父进程唯一需要做的就是 fork出一个子进程 ,接下来的工作全部由子进程来做,父进程不需要再做其他 IO操作,所以 RDB 持久化 方式可以最大化 redis的性能。
    与AOF 相比,在恢复大的数据集的时候, RDB 方式会更快一些。
  • RDB 缺点:
    Redis 意外宕机时,会丢失部分数据。
    当Redis 数据量比较大时, fork的过程是非常耗时的, fork子进程时是会阻塞的,在这期间 Redis 是不能响应客户端的请求的。
    AOF 方式是将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍。
  • AOF 优点:
    使用 AOF 会让你的 Redis 更加持久化。
    AOF 文件是一个只进行追加的日志文件,不需要在写入时读取文件。
    Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写 。
    AOF 文件可读性高,分析容易。
  • AOF 缺点:
    对于相同的数据来说, AOF 文件大小通常要大于 RDB 文件。
    根据所使用的 fsync 策略, AOF 的速度可能会慢于 RDB。

谈谈自己对于 Spring AOP 的了解?

AOP(Aspect -Oriented Programming: 面向切面编程 )能够将那些与业务无关,却为业务模块
所共同调用的逻辑或 责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统
的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

Spring Bean 容器的生命周期是什么样的?

Bean 容器找到配置文件中 Spring Bean 的定义。
Bean 容器利用 Java 反射的API 创建一个 Bean 的实例。
如果涉及到一些属性值 利用 set()方法设置一些属性值。
如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName() 方法,传入 Bean 的名字。
如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader() 方法,传入 ClassLoader 对象的实例。
如果 Bean 实现了 BeanFactoryAware 接口,调用 setBeanFactory() 方法,传入 BeanFactory 对象的实例。
与上面的类似,如果实现了其他 *.Aware 接口,就调用相应的方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行 postProcessBeforeInitialization() 方法
如果 Bean 实现了 InitializingBean 接口,执行 afterPropertiesSet() 方法。
如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessAfterInitialization() 方法
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy -method 属性,执行指定的方法。

RabbitMQ 如何保证消息不丢失 ?

生产者:
方案 1:开启 RabbitMQ 事务(同步,性能差 )
方案 2:开启 confirm 模式(异步,性能较好 )
MQ:(1)exchange 持久化 (2)queue 持久化 (3)消息持久化
消费者:关闭自动 ACK

Java面试题及答案(2021年Java面试题大全带答案) 01、Java有没有goto?02、JVM怎么判断一个对象是不是要回收?03、创建了几个字符串对象?04、什么是过滤器?怎么创建一个过滤器05、介绍一下 JVM 中垃圾收集器有哪些?他们特点分别是什么?06、线程池的执行原理?07、假设数组内有5个元素,如果对数组进行反序,该如何做?08、java 中 IO 流分为几种?09、你都有哪些手段用来排查内存溢出?10、GC 是什么?为什么要有 GC?此处,仅展示前10道,查看更多40道…01、CMS分为哪几个阶段?02、 阅读详情

相关推荐

点云直线检测-3DLineDetection复现

点云直线分割-Fast 3D line detection

阁楼 8156

【面试题】2021最新Vue面试题汇总

面试题(2020)Vue面试题汇总 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 1、对于MVVM的理解 MVVM 是 Model-View-ViewModel 的缩写。 Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。 View 代表UI 组件,它负责将数据模型转化成UI 展现出来。 ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对

归子莫的博客 5万+

百条网络工程师基础面试题(不断更新)

1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。 3)什么是骨干网? 骨干网络是集中的基础设施,旨在将不同的路由和数据分发到各种网络。它还处理带宽管理和各种通道。 4)什么是 LAN? LAN 是局域网的缩写。它是指计算机与位于小物理位置的其他网络设备之间的连接。 5)什么是节点? 节点是指连接发生的点。它可以是作为网络一部分的计算机

weixin_42728126的博客 2万+

SpringCloud面试题及答案 300道,springcloud面试题总结 (持续更新)

SpringCloud面试题及答案(SpringCloud面试题大全带答案) 2021年面试题及答案【最新版】高级SpringCloud面试题大全,发现网上很多SpringCloud面试题及答案整理都没有答案,所以花了很长时间搜集,本套SpringCloud面试题大全,有大量经典的SpringCloud面试题以及答案,面试经验技巧等,应届生,实习生,企业工作过的,都可参考学习! 本套SpringCloud面试题大全,汇总了大量经典的Java程序员面试题以及答案,包含SpringCloud语言常见面试题、

架构师专栏 4万+

【数字IC设计】Centos 7桌面版 安装Synopsys EDA Tools

简称DC,是Synopsys公司用于做电路综合的核心工具,可以将HDL描述的电路转换为基于工艺库的门级网表。

qiumingT的博客 9807

FANUC机器人有关动作速度倍率的相关系统变量-解释说明

FANUC机器人有关动作速度倍率的相关系统变量-解释说明 1.$SHFTOV_ENB 默认值:0 名称:位移倍率的有效/无效 含义:位移倍率功能,通过按住SHIFT键的同时按下倍率键,将速度倍率更改为5档 设定值:有效1; 无效0. 有SHFIT键:微速–低速–5%–50%–100% 2.MCRGRP[GROUP].MCR_GRP[GROUP].MCRG​RP[GROUP].PRGOVERRIDE 默认值:100 名称:程序倍率 含义:设定程序再生时的、机器人动作速度比率 设定值:0~100(%) 3.S

Robot_PLC_HMI_Automation 9321

大神整理的剑指Offer【所有面试题汇总】

    剑指Offer学习   剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代码下载【https://github.com/Wang-Jun-Chao/coding-interviews】 目录 第01-10题 【剑指Offer学习】【面试题02:...

晓飛的博客 3万+

一文吃透 SAP IDoc 状态码:从 TEDS1 到 WE02 排障,再到 ABAP 自动化监控

在 SAP 集成场景里,IDoc 往往是最常见、也最容易被低估的一条生命线:采购订单、发票、主数据、库存移动……只要系统之间要稳定地交换结构化业务数据,IDoc 就经常登场。真正让人头疼的,并不是 IDoc 本身,而是它在链路里到底走到了哪一步、卡在了哪里、该找谁背锅。这篇文章把常用的 IDoc 状态码按出站、入站拆开讲清楚,并且把每个状态对应的真实世界故障现象、排查入口、以及可以落地的 ABAP 监控代码串起来,让你看到状态码就能想到动作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 409

MySQL面试题合集!

临近秋招,备战暑期实习,祝大家每天进步亿点点!Day13 本篇总结的是 MySQL 相关的面试题,后续会每日更新~ 一、MySQL索引分析以及相关面试题 参考文章:MySQL索引分析以及相关面试题 二、MySQL主从复制与表拆分相关问题总结 参考文章: MySQL主从复制与表拆分相关问题总结 三、MySQL如何解决幻读和不可重复度? 参考文章:MySQL如何解决幻读和不可重复度? 四、MySQL中联表查询条件WHERE和ON的区别? 参考文章:MySQL中联表查询条件WHERE和O.

兴趣使然的草帽路飞 3万+

RK3588 部署 YOLO26-Pose 人体姿态检测:Windows Docker 环境全流程

YOLO26-Pose 在 RK3588 上的部署流程是 PC 端 ONNX 导出 → RKNN 转换(INT8 量化)→ 板端推理。INT8 量化后 YOLO26s-Pose 约 35ms,YOLO26n-Pose 约 15ms,可以覆盖实时姿态检测的需求。后处理是 Python 实现的常见瓶颈——如果帧率不达标,先用 npy 保存模型输出在 PC 上验证解析逻辑的正确性,确认无误后再迁移到 C++ 实现。

m0_64661770的博客 545

前拉后推计划逻辑适用于哪些行业和企业规模?

《前拉后推计划逻辑的行业适用性分析》摘要:前拉后推计划逻辑(需求端后推锚定交付、供应端前拉匹配资源)最适用于需求波动大且具规模效益的行业,包括家具制造(定制化需求+批量运输)、机械装备(非标设备+部件采购)、消费电子(短周期产品+核心部件备货)及汽车配套(交期绑定+批量生产)等领域。该模式要求企业具备:1)独立计划部门;2)ERP/MES等信息系统;3)资源冗余能力,故更适配中型(1-10亿营收)和大型企业(10亿+)。小型企业需简化应用,仅聚焦关键环节。不适配需求稳定(如快消品)、无规模效益或短周期生产的

追随内心 144

IT行业经典面试题,121套面试题

 IT行业经典面试题,121套面试题资源大小: 580.80KB资源类型:发布人: eyelife        发布日期: 2天前Tag: 名企,计算机 资源分: 10下载人数: 857 4.33/347人评分 12 3 4 5 <!--评论收藏 举报共享-->评论 分享 收藏 举报 上传

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 5243

【AutoSAR CAN】04 - 如何使用Davinci Configurator Pro工具配置CAN的波特率

改参数为Tx Arbitration start delay value ,可用于延迟仲裁过程的起始点,用来补偿CAN收发器及线路的传输延迟,以优化传输性能。有关详细信息,请参阅硬件手册。该参数指定采样点模式,即选择多少个采样点的数量,如果选择了每比特三个样本选项,则该点标记第三个样本的位置;我们要配置CAN的波特率,其实就是要弄明白 CAN 控制器的位时序即可,具体的理论部分和EB的配置部门可参考文章《该参数表示传播延迟有多少个时间单位Tq,即上文中的Propagation delay/PROGSEG。.

2602

干货,别再浪费时间到处找了,各大面试题和答案都在这里

又到一年跳槽季,课下不准备,面试徒伤悲。 本文汇总了常见面试题及面试技巧,让百忙中的程序员,少花精力乱找资料,希望对你有帮助。 一、面试题及答案 1、Java面试题阶段汇总 2、史上最全69道Spring面试题和答案 3、史上最全 40 道 Dubbo 面试题及答案 4、紧急整理了 20 道 Spring Boot 面试题 5、Spring Cloud面试题 5、史上最全Jav...

勇往直前的专栏 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最新前端面试题、高频面试题、面试题总结

Doctype 作用HTML5 新增的内容有哪些Html5 新增的语义化标签有哪些对 HTML 语义化标签的理解行内元素/块级元素有哪些视频/音频标签的使用说一下 HTML5 drag apiES6 新特性Let 与 var 与 const 的区别Js 基本数据类型有哪些字符串数组方法有哪些请简述普通函数和构造函数的区别Ajax 如何使用 一个完整的 AJAX 请求包括五个步骤:如何判断一个数据是 NaN闭包是什么?有什么特性?对页面会有什么影响Js 中常见的内存泄漏事件委托是什么?如何确定事件源(Even

HeXinT的博客 1866

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux驱动开发面试题整合

Linux 驱动常见面试及答案 八个常见的Linux驱动面试题 Linux驱动面试题总结 嵌入式校招面试题 BSP开发工程师面试笔试题集 海康面试题 面试题,详细 BSP开发流程讲解

qq_40904479的博客 4100

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Promise面试题

由于then方法是异步的,当片段一(代码中已标出)代码没有执行完,片段二是不会执行的,转而会执行片段三,由于执行片段三前已执行resolve,其实例对象状态已变为成功,因此执行片段三的then方法中第一个回调,输出8,接着回到片段一里的第一个then方法,由于已经执行resolve,其实例对象状态已变为成功,因此执行then方法,输出4,此时若片段一中第一个then没有执行完,也不会接着链式执行第二个then。重难点:3之后输出8,4之后输出6,是因为then方法是异步的,前一个没有执行完,会接着往下走。

m0_47743942的博客 1761

MySql 常用面试题 2024最新面试题(一)

使用函数。事务是一组有序的数据库操作,具有原子性、一致性、隔离性和持久性。事务回滚是将已完成的对数据库的更新操作撤销,使数据库回到事务开始前的状态。存储过程是一组预编译的SQL语句;可以使用命令对象调用存储过程。

qq_15363475的博客 2631

面试题内容聚合

分类整理一些内容,方便需要时回过头来看,整理不易,如有疏漏,请多担待!之后要查找这篇文章,可以直接在Java知音公众号后台回复 “面试题聚合”面试技术文Java岗 面...

Java笔记虾 847

关于python的一些面试题

python

kblj5555的博客 1190

《剑指offer》所有面试题的笔记总结

*建议:还是以书为主,然后以我的笔记为辅助。 C#不太了解,所以没放书上的代码。博文https://www.cnblogs.com/james111/p/7003100.html对这个问题分析得很全面。 思路很简单,每个元素的值就是ta应该所处的数组下标,然后不断地归位就可以了。我的笔记如下: 这个题目相比上一个题目,难在“不能修改数组”上。所以思路是这样的: 以题目中的数组为例,长度为8,范围是1~7。从中间将其范围划分成两组:1~4一组,5~7一组。然后对值为1~4和值为5~7的数字进行计

zxc120389574的博客 780

【面试题】-java面试题总目录

前言:先吐槽一下面试吧,相信不少人都有这样的经历,其实你对某项技术已经掌握的很OK了,但在面试的时候却未必能发挥到很好,让面试官觉得你确实已经很好的掌握该技术,也就是说你实际对该技术掌握的程度有90%,但面试时表现出来的却只有30%甚至更少,这可能是表达能力的问题,但也可能很大程度是因为你没有刷面试题,有些平时几乎很少会用到地方没有涉及到刚好被问到了.就好生活中有些人开车开得很好,甚至是一些开车多...

老汉健身的博客 580

spring面试题_spring mvc面试题_springboot面试题库

1、 Spring中的自动装配有哪些限制? 2、4个Spring常见面试题及答案解析 3、java面试题及答案2018Spring高频率面试题 4、Spring Bean 的加载过程 5、Spring Bean 的生命周期,如何被管理的 6、Spring Boot面试题总结 7、Spring Cloud Bus是什么? 8、Spring Cloud与Dub...

技术研究中心 6055

python面试题_300道Python面试题

Python 工程师也分不同的技术岗位,初级、中级与高级开发工程师需要具备的技能也不同。这个面试题覆盖的知识点按照由易到难罗列,分为【Python 基础】与【Python 高级】。【Python 基础】 1~3 (文件操作、模块与包、数据类型)知识点,虽然被归类为基础题,但大家在实际解题过程中还需要更多的思考,是否情况都考虑全面了。高级题部分就不用说了,都是一些在学习时有难度,不能一下就 get ...

weixin_39715538的博客 1288

Java基础面试题

Java基础 必知必会面试题 Java基础,面向对象,String,IO 其他内容面试题文章中有链接... 持续更新中...

weixin_46030002的博客 4159

Kotlin的几个面试题

今天去自己心仪的公司去面试,本来信心满满,结果面试下面自己深感能力不足,哎,错失了一次这么好的机会 不过还是感谢能给自己这次面试的机会 1 说一下Kotlin的伴生对象(关键字companion使用要说出来) 2 Kotlin的高阶函数使用过吗(平时使用的map,let ,apply ,also之类的都是高阶函数) (这些问题都可以在我的Kotlin专栏里面找到,) 3 java 中定义...

小牧在一直在学习,在前进的道路上大家一起学习,进步。 9483
上一篇: 利用Python做数据可视化
下一篇: 分享一些面试题
「已注销」
博客等级 码龄11年 4粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值