面试整理
文章平均质量分 82
面试资料八股文
liuxinyifan
这个作者很懒,什么都没留下…
展开
-
SPI定义
服务提供者接口,通过在classPath路径下文件夹查找文件并自动加载文件里所定义的类。Java中连接数据库加载驱动,通过driverManger获取connection连接对象,创建statement对象创建SQL语句,最后再处理结果集。驱动不同而且只是一个接口,不可以直接实例化,除非知道接口的全限定名,通过反射。SPI解决不同框架之间的扩展问题。springBoot自动装配其他框架的包名不同不能扫描注入,解耦,读取spring.factories文件,加载到IOC中。总.原创 2022-03-25 13:56:42 · 1140 阅读 · 0 评论 -
手写一个生产者消费,单例DCL,及一个ReentrantLock
手写多线程消费生产者,单例模式,Reentrantlock原创 2022-03-20 16:18:33 · 107 阅读 · 0 评论 -
JVM常见面试题
以下是本期JVM面试题的目录: 讲一下JVM的内存结构? 说一下堆栈的区别? 什么情况下会发生栈溢出? 类文件结构 什么是类加载?类加载的过程? 什么是双亲委派模型? 为什么需要双亲委派模型? 什么是类加载器,类加载器有哪些? 如何判断一个对象是否存活? 可作为GC Roots的对象有哪些? 什么情况下类会被卸载? 强引用、软引用、弱引用、虚引用是什么? Minor GC 和 Ful原创 2022-03-15 20:25:11 · 66 阅读 · 0 评论 -
MySQL
事务的四大特性?事务特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。 一致性是指一个事务执行之前和执行之后都必须处于一致性状态。比如a与b账户共有1000块,两人之间转账之后无论成功还是失败,它们的账户总和还是1000。 隔离性。跟隔离级别相关,如read committed,一个事务只能读到已经提交的修改。 持久性原创 2022-03-15 19:40:30 · 53 阅读 · 0 评论 -
MyBatis
什么是 MyBatisMyBatis 是一种半自动化的 Java 持久层框架,其通过注解或 XML 的方式将对象和 SQL 关联起来。之所以说它是半自动的,是因为和 Hibernate 等一些可自动生成 SQL 的 ORM(Object Relational Mapping) 框架相比,使用 MyBatis 需要用户自行维护 SQL。维护 SQL 的工作比较繁琐,但也有好处。比如我们可控制 SQL 逻辑,可对其进行优化,以提高效率。为什么要使用 MyBatis我们在使用 Java 程序访问数据库原创 2022-03-15 14:32:39 · 1226 阅读 · 0 评论 -
关于HTTP cookie,sessionid,token问题
1.cookie不安全,而sessionid也是放在cookie里,是不是没有区别,不安全?答:首先cookie是放在HTTP头部字段的东西,里面存放的是身份标识数据。由于cookie是明文显示的,如果身份标识数据是用户密码,那肯定不安全。存放在客户端,容易被篡改。而sessionid也是身份标识数据,但是是放在服务端的,就是一个单纯的id,就算被知道了,也不知道用户密码。所有sessionid是存在在cookie里的。安不安全取决于身份标识数据存放的是什么。而争对cookie安全问题,JS脚本原创 2022-03-14 09:52:36 · 2310 阅读 · 0 评论 -
网络系统整理
一.基础篇同一台设备上的进程间通信,我们可以采用管道,消息队列,共享内存,信号等方式。而对于不同设备的通信,采用网络协议。应用层:只给用户提供应用功能,不要关心怎么传输的。应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。传输层:有两个传输协议,主要是TCP和UDP。只需要服务应用,作为应用间传输媒介,实现应用到应用的通信,TCP:大部分应用如HTTP都是使用的TCP传输层协议,TCP比UDP多了很多特性,比如流量控制,超时重传,拥塞控制。UDP:只负责发送数据包,不保证原创 2022-03-13 16:27:04 · 2979 阅读 · 0 评论 -
SpringMVC
1.工作原理(1)用户端发起请求,直接请求到DispatcherServlet;(2)DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler.(3)解析到对应的handler即controller后,由handlerAdapter适配器处理。(4)handlerAdapter调用真正的处理器处理请求逻辑。(5)处理完返回一个ModelAndView对象,model是返回的数据对象,view是个逻辑view。(6)ViewRes原创 2022-02-28 16:26:42 · 117 阅读 · 0 评论 -
Spring
一.Spring4和Spring5 AOP执行流程差别1.Spring4正常执行:@Before======@After======@AfterReturning异常执行:@Before======@After======@AfterThrowing2.Spring5正常执行:@Before(前置通知)=======@AfterReturning(返回后通知)=======@After(后置通知)异常执行:@Before========@AfterThrowing====@Aft.原创 2022-02-28 15:53:22 · 215 阅读 · 0 评论 -
Redis主从,哨兵,集群,分布式锁
1.redis常用适用方式(1)单副本,数据量少(2)多副本(主从):master节点挂掉,需要手动指定新的master,可用性差,一般不用;(3)哨兵模式(sentinel):master挂了,哨兵会主动选举新的master,但是每个节点存储数据一样,浪费内存空间。数据量不多,集群规模不大,需要自动容错时使用。哨兵个数要满足2n+1,奇数个;并且不能读写分离,slave节点只备份不提供服务。哨兵只判断,不执行故障转移。(4)cluster:海量数据,所有master容量和就是数据量原创 2022-02-27 15:47:16 · 560 阅读 · 0 评论 -
Redis线程模型,事务
1.单线程如果一个DB,CPU不是瓶颈,大多数时IO密集的,不是CPU密集的。具体到redis,如果不考虑持久化,不会有瓶颈,真正来源时网络IO,也就是客户端和服务端之间的网络传输延迟,因此redis选择了单线程的IO多路复用实现核心网络模型。(1)避免过多的线程上下文切换开销;(2)避免同步机制的开销,会涉及到底层数据同步的问题,要加同步比如锁。带来加锁和解锁。(3)简单可维护,如果多线程,都必须实现线程安全,会更加复杂。2.redis6.0引入多线程I/O只是用来处理网络数据的读原创 2022-02-27 14:33:51 · 110 阅读 · 0 评论 -
Redis缓存异常
1.如何保证双一致性原创 2022-02-27 11:04:43 · 631 阅读 · 0 评论 -
Redis概述,持久化,过期键的删除淘汰策略
概述1.K-V非关系数据库,加载在内存中,异步保存(1)读写最快,能处理10万次的读写操作;(2)支持数据持久化:有AOF和RDB;(3)支持事务,所有操作都是原子性的。通过MULTI和EXEC指令包起来;(4)数据结构丰富,支持string,list,set,hash,Zset结构;(5)支持主从复制,读写分离。(6)支持通知订阅,过期缺点:(1)不能做海量数据的读写(2)主机宕机,不能及时同步。2.为啥快(1)在内存中;没有磁盘IO,类似HashMap。(.原创 2022-02-26 20:45:30 · 369 阅读 · 0 评论 -
MySQL优化
1.执行explain语句,引擎都会对SQL语句进行优化,对于查询语句,最重要的就是使用索引。2.大表数据查询,怎么优化(1)优化shema(设计优化),SQL语句+索引;(2)加缓存,如memcached,redis;(3)主从复制,读写分离;(4)分库分表,水平拆分,最麻烦,要选择一个合理的sharding key,并且表结构要改,SQL要带sharding key。定位到限定的表,而不是扫描全部的表。(5)垂直拆分,将大系统分为多个小系统,就是分布式系统。3.超大分页怎么处原创 2022-02-26 19:38:01 · 376 阅读 · 0 评论 -
锁,分库分表,读写分离,主从同步
锁1.在关系型数据中,数据库锁分为行级锁(innodb引擎,分为共享锁和排他锁),表级锁(MYISAM引擎和innodb)和页级锁(BDB引擎)。共享锁又称为读锁,共享锁可以同时加上多个;排他锁又称作写锁,只可以加一个,和排他锁,共享锁都互斥。悲观锁:在查询完数据就把事务锁起来,直到提交事务。设用于写多的情况。乐观锁:在修改数据时把事务锁起来,通过version的方式来锁定。一般用版本号或者CAS实现。适合于写少读多。2.innobd是基于索引完成行锁for update.原创 2022-02-26 17:10:45 · 274 阅读 · 0 评论 -
MySQL
聚簇索引:将数据存储和索引放在一起、并且是按照一定的顺序组织的,找到索引也就找到了数据,数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻的存放在磁盘上的。 非聚簇索引:叶子节点不存储数据,存储的是数据行地址,也就是说根据索引查找到数据行的位置再去磁盘查找数据,这就有点类似一本书的目录,比如要找到第三章第一节,那就现在目录里面查找,找到对应的页码后再去对应的页码看文章。 InnoDB中一定有主键,主键一定是聚簇索引,不手动设置,则会使用一个unique...原创 2022-02-25 20:05:27 · 150 阅读 · 0 评论 -
线程池专题,AQS和原子类
1.线程池的好处:(1)降低资源消耗:利用已创建的线程降低创建和消耗的浪费;(2)方便管理:同一分配,调优和监控。防止无限创建;(3)提高响应速度:任务到达时,不需要等线程创建就立即执行。2.execute()和submit()方法execute提交不需要返回值的任务,无法判断任务是否被线程池执行成功;而submit提交有返回值的,一个future对象,判断任务是否执行。3.线程池核心参数核心线程;最大线程;线程工厂;非核心线程等待时间;时间单位;拒绝策略;阻塞队列。拒绝策略原创 2022-02-25 16:04:23 · 128 阅读 · 0 评论 -
JAVA并发
1.进程和线程(1)进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位。(2)每个进程都有独立的代码和数据空间(程序上下文),程序间切换有较大的开销;线程是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立运行栈和程序计数器,线程之间开销小。(3)进程崩溃对其他进程没有影响,但是线程崩溃会导致整个进程死掉。2.创建线程的方式thread类,runnable接口;线程池thread其实是实现runnable接口的一个实例(1)实现runable接.原创 2022-02-25 15:33:35 · 51 阅读 · 0 评论 -
JVM整理
1.JVM内存结构方法区:存放已经加载的类信息,常量,静态变量。即永久代。在1.8中不存在方法区了,被元数据区替代了,原方法区被分为:1.加载的类信息;2.运行时常量池。加载的类信息被保存到元数据区中,运行时常量池保存在堆中。2.Java内存模型(JMM)它明确指定了一组排序规则,来保证线程间的可见性。(1)volatile:保证可见性和有序性;(2)synchronized:保证可见性(在unlock前写入内存)和有序性(只能一个线程占有锁)。通过管程(Monitor)保证原子原创 2022-02-25 10:43:46 · 143 阅读 · 0 评论 -
Java集合
1.集合类主要由collection和Map派生而来的。collection派生出三个子接口:List,Set,Queue。原创 2022-02-24 16:15:14 · 56 阅读 · 0 评论 -
Java基础
1.Java语言特点:面向对象(继承,封装,多态);平台无关;支持多线程;支持网络编程;编译与解释并存;Java没有指针的概念;Java不支持多继承,但允许一个类实现多个接口;Java自动垃圾回收。2.Java是编译型还是解释型语言?Java无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。Java通过字节码的方式在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。3.Java数据类型分为两种:基本数据类型和引用数据类型基本数据原创 2022-02-23 19:57:55 · 92 阅读 · 0 评论