精华内容
下载资源
问答
  • 2021美团Java面试真题解析(含参考答案)

    如果有疑问,欢迎在评论区留言,大家一起讨论

    文章目录

    1、Spring AOP 底层原理

    aop 底层是采用动态代理机制实现的:接口+实现类

    • 如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象。
    • 没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用Cglib生成一个被代理对象的子类来作为代理。

    就是由代理创建出一个和 impl 实现类平级的一个对象,但是这个对象不是一个真正的对象, 只是一个代理对象,但它可以实现和 impl 相同的功能,这个就是 aop 的横向机制原理,这样就不需要修改源代码。

    2、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() 方法对数组扩容。

    3、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,则不再初始化,直接存入数据,然后判断是否需要扩容;

    4、ConcurrentHashMap 的存储结构是怎样的?

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

    5、线程池大小如何设置?

    • 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 操作完成上。

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

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

    7、G1 收集器有哪些特点?

    G1 的全称是 Garbage-First,意为垃圾优先,哪一块的垃圾最多就优先清理它。

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

    G1 收集器在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的 Region(这也就是它的名字 Garbage-First 的由来)

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

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

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

    为了达到事务的四大特性,数据库定义了 4 种不同的事务隔离级别:

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

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

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

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

    分析语句,是否加载了不必要的字段/数据。

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

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

    缓存穿透

    • 问题:大量并发查询不存在的 KEY,在缓存和数据库中都不存在,同时给缓存和数据库带来压力。
    • 原因:一般而言,缓存穿透有 2 种可能性:业务数据被误删,导致缓存和数据库中都没有数据。恶意进行 ddos 攻击。
    • 分析:为什么会多次透传呢?不存在一直为空,需要注意让缓存能够区分 KEY 不存在和 查询到一个空值。
    • 解决办法:缓存空值的 KEY,这样第一次不存在也会被加载会记录,下次拿到有这个 KEY。Bloom 过滤或 RoaingBitmap 判断 KEY 是否存在,如果布隆过滤器中没有查到这个数据,就不去数据库中查。在处理请求前增加恶意请求检查,如果检测到是恶意攻击, 则拒绝进行服务。完全以缓存为准,使用延迟异步加载的策略(异步线程负责维护缓存的 数据,定期或根据条件触发更新),这样就不会触发更新。

    缓存击穿

    • 问题:某个 KEY 失效的时候,正好有大量并发请求访问这个 KEY。
    • 分析:跟穿透其实很像,属于比较偶然的。
    • 解决办法:KEY 的更新操作添加全局互斥锁。完全以缓存为准,使用延迟异步加载的策略(异步线程负责维护缓存的数据,定期或根据条件触发更新),这样就不会触发更新。

    缓存雪崩

    • 问题:当某一时刻发生大规模的缓存失效的情况,导致大量的请求无法获取数据,从而将 流量压力传导到数据库上,导致数据库压力过大甚至宕机。

    • 原因:一般而言,缓存雪崩有 2 种可能性:大量的数据同一个时间失效:比如业务关系 强相关的数据要求同时失效 Redis 宕机

    • 分析:一般来说,由于更新策略、或者数据热点、缓存服务宕机等原因,可能会导致缓存 数据同一个时间点大规模不可用,或者都更新。所以,需要我们的更新策略要在时间上合适,数据要均匀分享,缓存服务器要多台高可用。

    • 解决办法:更新策略在时间上做到比较平均。如果数据需要同一时间失效,可以给这批数 据加上一些随机值,使得这批数据不要在同一个时间过期,降低数据库的压力。使用的热 数据尽量分散到不同的机器上。多台机器做主从复制或者多副本,实现高可用。做好主从 的部署,当主节点挂掉后,能快速的使用从结点顶上。实现熔断限流机制,对系统进行负 载能力控制。对于非核心功能的业务,拒绝其请求,只允许核心功能业务访问数据库获取数据。服务降价:提供默认返回值,或简单的提示信息。

    13、LRU 是什么?如何实现?

    最近最少使用策略 LRU(Least Recently Used)是一种缓存淘汰算法,是一种缓存淘汰机制。

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

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

    堆内存是指由程序代码自由分配的内存,与栈内存作区分。 在 Java 中,堆内存主要用于分配对象的存储空间,只要拿到对象引用,所有线程都可以访问堆内存。

    • -Xmx, 指定最大堆内存。 如 -Xmx4g. 这只是限制了 Heap 部分的最大值为 4g。这个内存不包括栈内存,也不包括堆外使用的内存。
    • -Xms, 指定堆内存空间的初始大小。 如 -Xms4g。 而且指定的内存大小,并不是操作系统实际分配的初始值,而是 GC 先规划好,用到才逐步分配,对象占用内存越来越多后,Xms不够用就会逐渐扩大到Xmx数值。 专用服务器上需要保持 –Xms 和 –Xmx 一致(一般服务器也建议这样设置),否则应用刚启动可能就有好几个 FullGC。当两者配置不一致时,堆内存扩容可能会导致性能抖动。
    • -Xmn, 等价于 -XX:NewSize,使用 G1 垃圾收集器不应该设置该选项,在其他的某些业务场景下可以设置。除了 G1 外Xmn在其他垃圾回收器中表示的young区的大小,官方建议设置为 -Xmx 的 1/2 ~ 1/4.
    • -XX:MaxPermSize=size, 这是 JDK1.7 之前使用的持久代的大小。Java8 称为元数据区(MetaSpace),默认允许的 Meta 空间无限大,Java8 中此参数无效。
    • -XX:MaxMetaspaceSize=size, Java8 默认不限制 Meta 空间, 一般不允许设置该选项。
    • -XX:MaxDirectMemorySize=size,系统可以使用的最大堆外内存,这个参数跟 - Dsun.nio.MaxDirectMemorySize 效果相同。 这个就是配置直接内存的,这块内存不受GC管理。
    • -Xss, 设置每个线程栈能使用多少内存。 一般JDK8以上 -Xss1m 指定线程栈使用 1MB,与- XX:ThreadStackSize=1m 等价 。每个线程有自己的线程栈,线程栈上有很多栈帧,每调用一个方法就会新建一个栈帧,这样栈帧的深度可能很深。如果发现某些线程的堆栈溢出,那就是我们调用方法的深度很深,比如死循环两个方法来回调用,会导致栈帧使用的内存超过了Xss的限制,就会溢出。

      必须要强调,假设一台机器4G内存,如果你设置-Xmx4g,表示最大可以使用的堆内存是4g,而Xmx配置的仅仅是堆内内存,JVM进程还会使用一些非堆内存(比如各种语言数据)、堆外内存(比如一些直接内存),并且JVM自己会再消耗一点系统内存,整个操作系统物理内存RAM就是4G,操作系统和其他一些非Java进程也会消耗一定的内存,整个Java能够使用的内存大概是3.8G,非堆+堆外等内存估计得占个300~500M,最后留给堆内内存只有3.2G左右了,所以配置的Xmx要<=3.2G才是合适的值。

      有的架构师机器内存有多大,他就Xmx设置多大,没多久就OOM,结果还一个劲的加机器来缓解,这也是常见的错误。

      Xmx一般是配置物理内存的60~80%,不要去按内存最大值配。

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

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

    16、MySQL 为什么 InnoDB 是默认引擎?

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

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

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

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

      索引就是 B+ 树,叶子结点就是用户的数据页,非叶子节点就是目录页,页与页之间是双向链表,页中的用户记录是单向链表。

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

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

    • 事务版本号
    • 表的隐藏列
    • undo log
    • read view

    20、undo log 具体怎么回滚事务 ?

    举个例子:

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

    21、如何查询慢 SQL 产生的原因

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

    22、索引失效的情况有哪些?

    • like 以%开头索引无效,当 like 以&结尾,索引有效。
    • or 语句前后没有同时使用索引,当且仅当 or 语句查询条件的前后列均为索引时,索引生效。
    • 联合索引使用的不是第一列索引时候,不满足最左匹配规则,索引失效。
    • 数据类型出现隐式转换,如 varchar 不加单引号的时候可能会自动转换为 int 类型,这个时候索引失效。
    • 对索引字段进行计算操作,函数操作时不会使用索引。
    • 当优化器计算查询成本发现全表扫描的成本比索引的成本低的时候不会使用索引。

    扩展阅读B+树使用场景大全的文章:IS NULL、IS NOT NULL、!=、BETWEEN、IN等等不能用索引吗?必须辟谣!

    23、一个 Redis 实例最多能存放多少的 keys?List、Set、Sorted Set 它们最多能存放多少元素?

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

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

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

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

    为了省内存。

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

    全量同步

    master 服务器会开启一个后台进程用于将 redis 中的数据生成一个 rdb 文件,与此同时, 服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程处理完毕后,会将该 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 策略是,无论如何,首先会尝试进行增量同步, 如不成功,要求从机进行全量同步。

    27、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 优点:

    • 使用 AOF 会让你的 Redis 更加持久化。
    • AOF 文件是一个只进行追加的日志文件,不需要在写入时读取文件。
    • Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写 。
    • AOF 文件可读性高,分析容易。

    AOF 缺点:

    • 对于相同的数据来说,AOF 文件大小通常要大于 RDB 文件。
    • 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB。

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

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

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

    • Bean 容器找到配置文件中 Spring Bean 的定义。
    • Bean 容器利用 Java Reflection 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 属性, 执行指定的方法。

    30、RabbitMQ 如何保证消息不丢失 ?

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

    消费者:关闭自动 ACK


    欢迎一键三连~

    有问题请留言,大家一起探讨学习

    ----------------------Talk is cheap, show me the code-----------------------
    展开全文
  • 尤其是这我啃了足足58天的[Java进阶架构核心知识集](文末有介绍,可分享),还是当初朋友面试进大厂后分享给我的。摸熟里边近30个分类的Java知识后,7月下旬鼓足勇气向抖音后端进击,123面(视频面)下来就像开挂

    前言

    人人都想进大厂,当然我也不例外。早在春招的时候我就有向某某某大厂投岗了不少简历,可惜了,疫情期间都是远程面试,加上那时自身也有问题,导致屡投屡败。突然也意识到自己肚子里没啥货,问个啥都是卡卡卡卡,后期下定决心好好弥补我的知识与智商,天天扎在书堆里,再加上实操,自我感觉还是不错的,有进步。

    尤其是这我啃了足足58天的[Java进阶架构核心知识集](文末有介绍,可分享),还是当初朋友面试进大厂后分享给我的。摸熟里边近30个分类的Java知识后,7月下旬鼓足勇气向抖音后端进击,123面(视频面)下来就像开挂了(幸运)。完事之后整理了一下抖音3面面经,我想大家可以参考看看。

    image

    下面总结了我这一段时间面试出现的一些spring高频问题

    1. 什么是 Spring 框架?Spring 框架有哪些主要模块?
    2. 使用 Spring 框架能带来哪些好处?
    3. 什么是控制反转(IOC)?什么是依赖注入?
    4. 请解释下 Spring 框架中的 IoC?
    5. BeanFactory 和 ApplicationContext 有什么区别?
    6. Spring 有几种配置方式?
    7. 如何用基于 XML 配置的方式配置 Spring?
    8. 如何用基于 Java 配置的方式配置 Spring?
    9. 怎样用注解的方式配置 Spring?
    10. 请解释 Spring Bean 的生命周期?
    11. Spring Bean 的作用域之间有什么区别?
    12. 什么是 Spring inner beans?
    13. Spring 框架中的单例 Beans 是线程安全的么?
    14. 请举例说明如何在 Spring 中注入一个 Java Collection?
    15. 如何向 Spring Bean 中注入一个 Java.util.Properties?
    16. 请解释 Spring Bean 的自动装配?
    17. 请解释自动装配模式的区别?
    18. 如何开启基于注解的自动装配?
    19. 请举例解释@Required 注解?
    20. 请举例解释@Autowired 注解?
    21. 构造方法注入和设值注入有什么区别?
    22. Spring 框架中有哪些不同类型的事件?
    23. FileSystemResource 和 ClassPathResource 有何区别?
    24. Spring 框架中都用到了哪些设计模式?

    这些问题你都会了吗?

    趁着现在还没入职,时间比较自由把我面试时候准备的学习资料整理出成一份 Spring全家桶的学习笔记,这份笔记不管是懂得Sping的开发者和刚刚学习的朋友都是一份非常不错的内容,同时也是面试复习的精选笔记!还准备了一份目前互联网公司Java面试的高频面试知识点文档免费分享给大家!

    一、55个Spring高频问点(七个模块)

    二、Spring Data实战

    三、Spring Boot面试专题及解析

    四、SpringCloud参考指南

    5、精通Spring MVC

    6、Spring源码深度解析

    线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

    一线互联网P7面试集锦+各种大厂面试集锦

    学习笔记以及面试真题解析

    Kafka实战笔记

    关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图,如果你需要完整的pdf版本,戳这里即可免费领取

    image.png

    • Kafka入门
    • 为什么选择Kafka
    • Karka的安装、管理和配置

    image.png

    • Kafka的集群
    • 第一个Kafka程序
    • image.png

    afka的生产者

    image.png

    • Kafka的消费者
    • 深入理解Kafka
    • 可靠的数据传递

    image.png

    image.png

    • Spring和Kalka的整合
    • Sprinboot和Kafka的整合
    • Kafka实战之削峰填谷
    • 数据管道和流式处理(了解即可)

    image.png

    • Kafka实战之削峰填谷

    image.png

    了解即可)**

    [外链图片转存中…(img-b6PHRnDK-1620365434461)]

    • Kafka实战之削峰填谷

    [外链图片转存中…(img-F26qMqMH-1620365434462)]

    展开全文
  • 本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究...

    本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究大厂的面试题。

    与此同时,今年算法面试一定是会被问的,而算法不是光靠背面试题就有用的,它是需要数学逻辑思维的,因此,小编会在文末为大家准备一份非常优质的算法学习手册,重点在于学习思维方法,话不多说,直接开始上精选的大厂面试真题!

    由于文章篇幅限制,不可能将所有面试题以文字形式把大厂面试题展示出来,本篇为大家精选了一些面试题,更多Java面试题大家可以帮忙转发一下,关注后添加助理vx:yunduoa2019或扫描下图二维码,跟随助理指引自行获取

    Java基础

    1.JAVA 中的几种数据类型是什么,各自占用多少字节。

    2.String 类能被继承吗,为什么。

    3. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?

    4. String 属于基础的数据类型吗?

    5.Java 中操作字符串都有哪些类?它们之间有什么区别?

    6.Java 中 IO 流分为几种?

    7.BIO、NIO、AIO 有什么区别?

    8.用过哪些 Map 类,都有什么区别,HashMap 时线程安全的吗,并发下使用的 Map 是什么,他们的内部原理分别是什么,比如存储方法,hashcode,扩容,默认容量等。

    9. 如何将字符串反转?

    10.抽象类必须要有抽象方法吗?

    11.普通类和抽象类有哪些区别?

    12.抽象类能使用 final 修饰吗?

    13.ArrayList 和 LinkedList 有什么区别?

    14.ConcurrentHashMap的数据结构(必考)

    15.volatile作用(必考)

    16.Atomic类如何保证原子性(CAS操作)(必考)

    17.为什么要使用线程池(必考)

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    Redis

    • Redis的应用场景
    • Redis支持的数据类型(必考)
    • zset跳表的数据结构(必考)
    • Redis的数据过期策略(必考)
    • Redis的LRU过期策略的具体实现
    • 如何解决Redis缓存雪崩,缓存穿透问题
    • Redis的持久化机制(必考)
    • Redis为什么是单线程的?
    • 什么是缓存穿透?怎么解决?
    • Redis持久化有几种方式?
    • Redis为什么这么快?(必考)
    • Redis怎么实现分布式锁?
    • Redis如何做内存优化?
    • Redis淘汰策略有哪些?
    • Redis常见的性能问题有哪些?该如何解决?
    • Redis的使用要注意什么?

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    ZooKeeper

    • CAP定理
    • ZAB协议
    • leader选举算法和流程
    • zookeeper 是什么?
    • zookeeper 有几种部署模式?
    • zookeeper 怎么保证主从节点的状态同步?

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    Mysql

    • 事务的基本要素
    • 事务隔离级别(必考)
    • 如何解决事务的并发问题(脏读,幻读)(必考)
    • MVCC多版本并发控制(必考)
    • binlog,redolog,undolog都是什么,起什么作用
    • InnoDB的行锁/表锁
    • myisam和innodb的区别,什么时候选择myisam
    • 为什么选择B+树作为索引结构(必考)
    • 索引B+树的叶子节点都可以存哪些东西(必考)
    • 查询在什么时候不走(预期中的)索引(必考)
    • sql如何优化
    • explain是如何解析sql的
    • order by原理

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    JVM

    • 运行时数据区域(内存模型)(必考)
    • 垃圾回收机制(必考)
    • 垃圾回收算法(必考)
    • Minor GC和Full GC触发条件
    • GC中Stop the world(STW)
    • 各垃圾回收器的特点及区别
    • 双亲委派模型
    • JDBC和双亲委派模型关系
    • JVM 中一次完整的 GC 流程是什么样子的,对象如何晋升到老年代,说说你知道的几种主要的 JVM 参数

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    Spring

    • Spring的IOC/AOP的实现(必考)
    • 动态代理的实现方式(必考)
    • Spring如何解决循环依赖(三级缓存)(必考)
    • Spring的后置处理器
    • Spring的@Transactional如何实现的(必考)
    • Spring的事务传播级别
    • BeanFactory和ApplicationContext的联系和区别

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    其他

    • 高并发系统的限流如何实现
    • 高并发秒杀系统的设计
    • 负载均衡如何设计

    操作系统篇

    • 进程和线程的区别
    • 进程同步的几种方式
    • 线程间同步的方式
    • 什么是缓冲区溢出。有什么危害,其原因是什么
    • 进程中有哪几种状态
    • 分页和分段有什么区别

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    多线程篇

    • 多线程的几种实现方式,什么是线程安全
    • volatile 的原理,作用,能代替锁吗?
    • sleep 和 wait 的区别
    • sleep(0)的意义
    • Lock 和 Synchronized 的区别
    • synchronized 的原理是什么,一般用在什么地方(比如加载静态方法和非静态方法的区别)

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    补充

     

    另外还会考一些计算机网络之类的。像消息队列,RPC框架这种考的比较少。计算机网络就是分层啊,tcp/udp啊,三次握手之类的。操作系统就是进程与线程啊,进程的数据结构以及如何通信之类的。

    数据结构的排序算法也比较常考,考的话一定会让你手写个快排。剩下的算法题就靠LeetCode的积累了。其实非算法岗考的算法题都蛮简单的,很多题完全就是考察你智力是否正常,稍微难点的涉及到一些算法思想的按照LeetCode题目类型的分类,每种题做一两道基本就能完全应付面试了。

    接下来,就要跟大家分享数据结构与算法的笔记了!

    数据结构与算法笔记

    动态规划设计

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    数据结构系列

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    算法思维系列

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    高频面试题系列

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    计算机技术

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

     

    最后

    面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?

    掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

    如果你需要这份完整版的面试笔记,只需你多多支持我这篇文章。

    帮忙转发一下,关注后添加助理vx:yunduoa2019或扫描下图二维码,跟随助理指引自行获取

    精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂

    展开全文
  • 该文档在Github上收获40K+star的Java面试神技(这赞数,质量多高就不用我多说了吧)非常全面,包涵Java基础、Java集合、JavaWeb、Java异常、OOP、IO与NIO、反射、注解、多线程、JVM、MySQL、MongoDB、Spring全家桶、...

    前言

    该文档在Github上收获40K+star的Java面试神技(这赞数,质量多高就不用我多说了吧)非常全面,包涵Java基础、Java集合、JavaWeb、Java异常、OOP、IO与NIO、反射、注解、多线程、JVM、MySQL、MongoDB、Spring全家桶、计算机网络、分布式架构、Redis、Linux、git、前端、算法与数据结构、MyBatis、RocketMQ、Netty、Dubbo。内容非常丰富,已经帮很多人拿下互联网一线公司的offer。

    每个知识点都有左侧导航书签页,看的时候十分方便,由于内容较多,这里就截取一部分图吧。

    《Java面试神技》整理了从业到现在看到的、经历过的一些Java面试题,这些面试题的主要来源是一些网站还有github上的内容,话不多说,直接上图:

    Linux 专题

    汇总技术架构路线,梳理技术盲区(条理清晰,一清二楚)

    在技术汇总中,可以看到有一些是自己常用的,也有一些是当前工作经历下没用接触过的。那么这些以上的技术栈,你有想过他们是怎么互相配合,组装出一张技术架构图吗?每一个地方用什么技术承载,也可以考虑自己的日常开发中,都有哪些技术来支撑你们整个技术框架。

    • 这是一张把服务端开发涉及的技术栈汇总出来的一张技术架构图。
    • 当然技术栈内容绝对不止局限于此,还有很多的其他的框架,可以被替代,只不过这些是比较常用的。
    • 这些构成你日常开发的整张技术图,可能有些是没用接触的,但这样就可以很好地让你去补充自己的盲区。

    对应梳理笔记(快速突破核心内容)

    什么样的技术才能进互联网大厂?

    对于一名“合格的”程序员来说,进入互联网大厂一定是对自己职业生涯上的追求,所以我建议大家平时在学习的时候尽量用大厂的标准要求自己。

    每个公司的每个职位要求会略有不同,所以不能一概而论,某一行没有写某项技术点也不能代表什么。更多的是参考以及自己在面试求职时可以按照这个方式进行梳理。

    综上,各家公司的招聘要求,梳理出七个方向的考点,包括:基本功底、常用技术、技术深度、技术经验、学习能力、工作能力、项目经验。

    数据结构与算法

    在字节跳动、华为等公司带动下,无论是求职者还是面试官,都逐渐认识到算法面试其实是相对高效、准确且公平的筛选机制。

    你可能会认为这对你来说就是“面试造火箭,工作拧螺丝”罢了,但对于企业来说,算法面试就是为了筛选出足够聪明要么足够勤奋的人,在一个算法题中,不仅考察你的沟通能力,你的逻辑思维能力,同时也在考察你的**代码质量。**因此,无论在哪种情况下,都不是单纯刷题背题就能应付的。

    • 第 1 节:HashCode为什么使用31作为乘数?

    • 第 2 节:HashMap 源码分析(上)

    • 第 3 节:HashMap 源码分析(下)

    • 第 4 节:2-3树与红黑树学习(上)

    • 第 5 节:2-3树与红黑树学习(下)

    • 第 6 节:ArrayList 详细分析

    • 第 7 节:LinkedList、ArrayList,插入分析

    • 第 8 节:双端队列、延迟队列、阻塞队列

    • 第 9 节:java.util.Collections、排序、二分、洗牌、旋转算法

    • 第 10 节:StringBuilder 与 String 对比

    码农会锁

    • 第 1 节:volatile

    • 第 2 节:synchronized

    • 第 3 节:ReentrantLock 和 公平锁

    • 第 4 节:AQS原理分析和实践运用

    • 第 5 节:AQS 共享锁,Semaphore、CountDownLatch

    多线程

    • 第 1 节:Thread.start() 启动原理

    • 第 2 节:Thread,状态转换、方法使用、原理分析

    • 第 3 节:ThreadPoolExecutor

    • 第 4 节:线程池讲解以及JVMTI监控

    JVM 虚拟机

    • 第 1 节:JDK、JRE、JVM

    • 第 2 节:JVM 类加载实践

    • 第 3 节:JVM 内存模型

    • 第 4 节:JVM 故障处理工具

    • 第 5 节:GC 垃圾回收

    最后

    光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性,因此仅以截图展示,需要的小伙伴可以点击这里即可免费获取!

    Java面试宝典2021版

    最常见Java面试题解析(2021最新版)

    2021企业Java面试题精选

    面试题解析(2021最新版)

    [外链图片转存中…(img-jX5aQhYt-1623923583564)]

    [外链图片转存中…(img-kjsHcAGD-1623923583565)]

    2021企业Java面试题精选

    [外链图片转存中…(img-ry2hYpsk-1623923583565)]

    展开全文
  • 2021 Java 面试真题-(1).pdf
  • 就粗略的展示了,不要嫌弃, 1111道Java工程师必问面试题 MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题: Elasticsearch 24 题 +Memcached + Redis 40题: Spring 26 题+ 微服务 27题+ Linux 45题: Java面试题合集...
  • 本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究...
  • 针对以上蚂蚁金服的面试题我整理了一些Java面试题,如果有需要的可以在文末免费获取哦! 福利 内容真的很丰富!上图!看看就知道了! Jvm 并发 Mysql 全部的(不一一截图了) 总结 机会是留给有准备的人,大家在...
  • 本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究...
  • 本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究...
  • 二、回顾整理阿里面试题 基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。 自我介绍 JVM如何加载一个类的过程,双亲委派模型中有哪些方法? HashMap如何实现的? HashMap和ConcurrentHashMap区别...
  • 前言 现在刷抖音经常可以看到一些老外街坊,问...众所周知,阿里巴巴的主要开发语言就是Java,而对于Java开发者来说,最重要的就是学习Spring框架了。现在,我想跟大家分享出这份老外看外都不禁赞叹的《阿里技术官Spri
  • 目录前言一、Java面试之MyBatis什么是MyBatis?讲下MyBatis的缓存Mybatis是如何进行分页的?分页插件的原理是什么?简述Mybatis的插件运行原理,以及如何编写一个插件?Mybatis动态sql是做什么的?都有熟些动态sql?能...
  • 下面博主给大家分享一波十月份精选的互联网大厂Java核心面试题,透过面试题来分析自己所掌握的技术栈与大厂所需的差距,判断面试难易程度,从而进一步明确自己学习的方向。 天下码农,多为CV!你是否每天还在增删改...
  • 2021JAVA面试题附答案(持续更新版)

    千次阅读 2021-03-14 20:00:49
    1.JAVA基础 1.JAVA中的几种基本类型,各占用多少字节? 下图单位是bit,非字节 1B=8bit 2.String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许...
  • 前言 关于技术人如何成长的问题,一直以来都备受关注,因为程序员职业发展...Java成长笔记主要是将Java程序员按照年限来进行分层,清晰的标注着Java程序员应该按照怎样的路线来提升自己,需要去学习哪些技术点。 下
  • 说实话,去年我面试也被虐了,为了能找到一份心怡的工作,特地的从朋友那里讨来一份面试圣经(阿里某大牛),980道面试真题和解析,一共485页PDF。囊括Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、...
  • Java小白、初中级、高级到Java架构师各个层面的大厂面试真题(含答案解析)和面试现场经验,互联网大公司资深架构师核心技术汇总, 涵盖内容如:Java基础、JVM、多线程与高并发、spring、springMVC、MyBatis、资深...
  • spring相关的问题一直是大厂面试常问到的一个问题,也是一直困扰这我们,不知道从哪里下手,今天举例分析大厂的一些spring相关的面试真题。和分享我学习spring相关问题所整理的一些知识点。 第一部分 Java相关以及...
  • 其实,今年下半年我面试不少互联网企业,像涂鸦智能,百度,京东,腾讯,字节,滴滴,阿里等等都有三井的身影,之后总结出来的针对Java面试的知识点或真题,每个点或题目都是在面试中被问过的,满满干货,诚意分享!...
  • 大厂真题之腾讯-Java高级.pdf
  • 给大家分享一份最新个大厂的java面试真题总结,希望能帮助大家,祝大家面试顺利! 链接:https://pan.baidu.com/s/1wQB9Y3HuMJdV4Cs0KaYtjw 提取码:zv29
  • Java面试复习体系总结(2021版,持续更新)

    万次阅读 多人点赞 2021-01-14 11:43:47
    Java面试复习体系总结(2021版) 一、Java基础 内容 Java基础(一):Java集合框架(超详细解析,看完面试不再怕) Java基础(二):迭代器(Iterator)(含使用方法详解) Java基础 (三):LinkedList...
  • 包含java面试宝典,1000名企java面试题,java面试真题
  • 一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis...
  • 前言 俗话说“生于忧患,死于安乐”,其实大部分中年危机,就是在安乐中产生的。 有的人或许会反驳,“照你这么说,我还必须奋斗了,不奋斗就要死,难道选择安逸的生活就不对吗?我就没有选择自己生活方式的权利吗?...
  • 面试真题来源自网络…… 前言 宅在家里快两个月的在家办公模式基本告一段落。企业复工,大家的工作生活终于可以回归正轨,相信不少朋友已经走出家门,迎战跳槽季了。一些动作快的朋友可能已经拿到一两个 Offer 了。 ...
  • Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别(String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象。因此在每次对 String 类型进行改变的...
  • 秋招将至,今年大学生毕业生909万,就职压力更大,个人特意整理了20年35家公司面试题目,希望能帮助到更多准备跳槽或者应届生做好面试准备,拿到心仪的Offer。
  • 在过去很长一段时间内,国内互联网一直处于三足鼎立状态,BAT即百度、阿里巴巴、腾讯。...今天给大家带来ATM(阿里巴巴,腾讯,蚂蚁金服)的Java面试真题,希望能帮助各位读者在奋斗的路上少走弯路。 阿里巴...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,609
精华内容 9,443
关键字:

java面试真题

java 订阅