Java面经
文章平均质量分 78
stay or leave
这个作者很懒,什么都没留下…
展开
-
后端常问面经
笔者就读于中国地质大学北京的计算机技术专业,专注于Java开发。在准备实习的过程中,笔者吸取了各方面的面试经验和知识,包括JavaGuide、小林coding和黑马程序员的Java面试合集等。通过自己对知识点的理解和实际面试经历,整理了一些常见的面试问题和经验,并将其分享在下方,供同行参考学习。原创 2024-03-25 17:20:44 · 418 阅读 · 0 评论 -
后端常问面经之操作系统
线程在执行过程中会有自己的运行条件和状态(也称上下文),比如程序计数器,虚拟机栈和本地方法栈等。当出现如下情况的时候,会发生线程切换。主动让出 CPU,比如调用了sleep()wait()等。时间片用完,因为操作系统要防止一个线程或者进程长时间占用 CPU 导致其他线程或者进程饿死。调用了阻塞类型的系统中断,比如请求 IO,线程被阻塞。线程切换意味着需要保存当前线程的上下文(比如程序计数器,虚拟机栈和本地方法栈),留待线程下次占用 CPU 的时候恢复现场。并加载下一个将要占用 CPU 的。原创 2024-03-25 17:09:59 · 1473 阅读 · 0 评论 -
后端常问面经之计算机网络
每个连入互联网的设备或域(如计算机、服务器、路由器等)都被分配一个IP 地址(Internet Protocol address),作为唯一标识符。每个 IP 地址都是一个字符序列,如 192.168.1.1(IPv4)、2001:0db8:85a3:0000:0000:8a2e:0370:7334(IPv6)。当网络设备发送 IP 数据包时,数据包中包含了源 IP 地址和目的 IP 地址。源 IP 地址用于标识数据包的发送方设备或域,而目的 IP 地址则用于标识数据包的接收方设备或域。原创 2024-03-25 17:05:57 · 1460 阅读 · 0 评论 -
后端常问面经之Spring和Mybatis框架
所谓控制就是对象的创建、初始化、销毁。创建对象:原来是 new 一个,现在是由 Spring 容器创建。初始化对象:原来是对象自己通过构造器或者 setter 方法给依赖的对象赋值,现在是由 Spring 容器自动注入。销毁对象:原来是直接给对象赋值 null 或做一些销毁操作,现在是 Spring 容器管理生命周期负责销毁对象。总结:IOC 解决了繁琐的对象生命周期的操作,解耦了我们的代码。原创 2024-03-25 17:03:00 · 852 阅读 · 0 评论 -
后端常问面经之Redis
我发现缓存雪崩这名字起的有点意思,哈哈。缓存在同一时间大面积的失效,导致大量的请求都直接落到了数据库上,对数据库造成了巨大的压力。这就好比雪崩一样,摧枯拉朽之势,数据库的压力可想而知,可能直接就被这么多请求弄宕机了。另外,缓存服务宕机也会导致缓存雪崩现象,导致所有的请求都落到了数据库上。举个例子:数据库中的大量数据在同一时间过期,这个时候突然有大量的请求需要访问这些过期的数据。这就导致大量的请求直接落到数据库上,对数据库造成了巨大的压力。原创 2024-03-25 16:57:28 · 949 阅读 · 0 评论 -
后端常见面经之MySQL
读未提交,指一个事务还没提交时,它做的变更就能被其他事务看到;读提交,指一个事务提交之后,它做的变更才能被其他事务看到;可重复读,指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别;串行化;会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;脏读是指一个事务读取了另一个事务未提交的数据不可重复读是指一个事务在同一时间点内多次读取同一数据时,得到的结果不一致。原创 2024-03-25 16:56:11 · 1131 阅读 · 0 评论 -
后端常见面经之JVM
嗯,是这样~~java虚拟机对于多线程是通过线程轮流切换并且分配线程执行时间。在任何的一个时间点上,一个处理器只会处理执行一个线程,如果当前被执行的这个线程它所分配的执行时间用完了【挂起】。处理器会切换到另外的一个线程上来进行执行。并且这个线程的执行时间用完了,接着处理器就会又来执行被挂起的这个线程。这时候程序计数器就起到了关键作用,程序计数器在来回切换的线程中记录他上一次执行的行号,然后接着继续向下执行。好的~Java中的堆术语线程共享的区域。主要用来保存对象实例,数组。原创 2024-03-25 16:53:48 · 1000 阅读 · 1 评论 -
后端常问面经之并发
Java 中和等独占锁就是悲观锁思想的实现,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源(也就是数据)是否被其它线程修改了(具体方法可以使用版本号机制或 CAS 算法)。monitor对象存在于每个Java对象的对象头中,synchronized 锁便是通过这种方式获取锁的,也是为什么Java中任意对象可以作为锁的原因。原创 2024-03-25 16:52:37 · 970 阅读 · 0 评论 -
后端常问面经之Java集合
为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀。我们上面也讲到了过了,Hash 值的范围值-2147483648 到 2147483647,前后加起来大概 40 亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个 40 亿长度的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。原创 2024-03-25 16:49:27 · 838 阅读 · 0 评论 -
后端常问面经之Java基础
在 Java 1.4 的 NIO 库中,所有数据都是用缓冲区处理的,这是新库和之前的 BIO 的一个重要区别,有点类似于 BIO 中的缓冲流。在写入数据时,写入到缓冲区中。:多态是面向对象编程的核心概念之一,多态是指同一个方法名可以在不同的类中有不同的实现,不同的子类可以重写父类的方法,通过父类引用指向子类对象时,根据实际对象的类型来确定调用哪个方法。多态是指同一个方法名可以在不同的类中有不同的实现,不同的子类可以重写父类的方法,通过父类引用指向子类对象时,根据实际对象的类型来确定调用哪个方法。原创 2024-03-25 16:36:50 · 1054 阅读 · 0 评论 -
JDK8新特性
是 Java 8 引入的一种处理集合数据的新方式。它提供了一种更简洁、更易读和更灵活的方式来操作和处理集合数据。流的核心思想是将数据处理操作集中在一起,可以进行过滤、映射、排序、聚合等一系列操作,而不需要显式地使用循环和条件语句。原创 2023-07-13 20:51:09 · 199 阅读 · 0 评论 -
面试总结
jdk8对集合的stream流的api。不会,这个用来测试你是否用过stream流。springboot如何在启动时自动从数据库中读取数据。hashmap的api。不会,这个用来测试你是否用过hashmap。按照自己的项目能说个大概出来。springboot的注解。hashmap的使用场景。原创 2023-07-12 12:08:49 · 188 阅读 · 0 评论 -
spring springmvc springboot mybatis
候选人:aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做为公共日志保存,事务处理等。原创 2023-07-11 18:17:44 · 419 阅读 · 1 评论 -
Mysql
如何定位慢查询一个SQL语句执行很慢,如何分析索引什么是聚簇索引,非聚簇索引,回表查询 什么是覆盖索引索引创建原则有哪些?什么情况下索引会失效 ?sql优化的经验事务的特性是什么?可以详细说一下吗?并发事务带来哪些问题?怎么解决这些问题呢? MySQL的默认隔离级别是?主从同步原理原创 2023-07-11 16:43:09 · 146 阅读 · 0 评论 -
线程 线程池
进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间线程更轻量,线程上下文切换成本一般上要比进程上下文切换低。原创 2023-07-10 17:17:46 · 124 阅读 · 0 评论 -
集合List和Map
首先计算数组的容量,如果当前数组已使用长度+1后的大于当前的数组长度,则调用grow方法扩容(原来的1.5倍),确保新增的数据有地方存储之后,则添加元素到size的位置上。在重新分配元素的过程中,如果原来的桶中只有一个元素,那么该元素可以直接放入新的桶中。插入删除效率,对于LinkedList,在首尾的效率为O(1),其他位置是O(n),对于ArrayList,首部的效率为O(1),其他位置是O(n)。接下来,HashMap会遍历原来的桶数组中的每个桶,并将桶中的元素重新分配到新的桶数组中的相应位置。原创 2023-07-10 16:47:40 · 705 阅读 · 0 评论 -
RabbitMQ
保证消息不丢失重复消费问题消息堆积原创 2023-07-09 20:20:27 · 659 阅读 · 0 评论 -
Redis
多路:指的是多个网络连接,复用:指的是复用一个线程。采用多路I/O复用技术可以让单个线程处理多个连接请求(文件句柄)。一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;而没有文件句柄就绪时,就会阻塞应用程序,交出cpu。多路复用主要有三种技术:select,poll,epoll。epoll是最新的也是目前最好的多路复用技术,Redis使用的epoll。Redis 采用网络IO多路复用技术来保证多连接时的高吞吐量。原创 2023-07-09 19:52:05 · 297 阅读 · 0 评论 -
关于简历,在面试时可能会被问到的问题
同时插入商品对应的使用时间数据,需要操作两张表:product,product_usetime。在productService接口中定义save方法,该方法接受一张Dto对象,dto对象继承自product类,并将product_usetime的List集合作为成员属性。通过productService实现类的save方法,将dto对象保存至数据库。原创 2023-06-18 18:20:06 · 1026 阅读 · 0 评论 -
框架---面经
多个实体之间相互依赖并形成闭环的情况就叫做"循环依赖”,也叫做”循环引用。原创 2023-06-15 14:19:05 · 721 阅读 · 0 评论 -
java面经 MySQL
在字段很多的情况下(例如一个大表有100多个字段),通过"大表拆小表",更便于开发与维护,也能避免跨页问题,MySQL底层是通过数据页存储的,一条记录占用空间过大会导致跨页,造成额外的性能开销。举个例子,从user表中查询用户id,姓名和性别,查询条件为姓名,这时候就可以对用户姓名和性别创建联合索引,这样可以做到覆盖查询和避免会表查询。2、容易面临跨分片查询的复杂问题。连续分片可能存在数据热点,例如按时间字段分片,有些分片存储最近时间段内的数据,可能会被频繁的读写,而有些分片存储的历史数据,则很少被查询。原创 2023-06-14 20:40:49 · 1504 阅读 · 0 评论 -
Java基础
为什么静态方法不能调用非静态方法和变量?原创 2023-06-13 21:14:22 · 477 阅读 · 0 评论