
面试题
文章平均质量分 59
北海冥鱼未眠
道路在身旁!
展开
-
MySQL实现删除重复数据行仅保留一行
另外这个sql里面涉及到中间表的查询,也就是我中间又进行了一些select,这是因为MySQL中。错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)接下来研究如何做到删除重读的数据行并且仅保留第一条id最小的记录。因此我上面的sql这样写即可。创建数据库表并加入数据。原创 2022-09-29 13:08:37 · 2507 阅读 · 0 评论 -
SpringBoot自动装配的原理
第一行if时会首先判断当前系统是否禁用了自动装配的功能,如果当前系统禁用了自动装配的功能则会返回如下这个空的数组,后续也就无法注入bean了,如果没有禁用自动装配则进入else分枝,第一步操作首先会去加载所有Spring预先定义的配置条件信息,这些配置信息在。方法,这个方法执行完毕后,Spring会把这个方法返回的类的全限定名数组里的所有的类都注入到IOC容器中。利用@Import注解,将所有符合自动装配条件的bean注入到IOC容器中。这个是一个符合注解,包含下面几个注解。的启动类上有这个注解。转载 2022-08-21 09:37:23 · 190 阅读 · 0 评论 -
线程间通信方式
因为如果不判断的话第一个线程执行完之后唤醒第二个,第二个执行完结束了,没有办法唤醒第三个等待的线程了。注意这里面还是需要注意一下的,比如实现打印完成之后线程结束,这里面就要进行if判断了。三个线程分别交替打印A、B、C,打印100次。基于Lock锁的Condition实现线程通信。基于synchronized 锁的实现方式。对第二种方式进行重构优化。原创 2022-08-20 00:44:38 · 95 阅读 · 0 评论 -
Java多线程、线程池
Java中线程的六种状态新建可运行阻塞等待超时等待终止处于可运行状态下的线程才有可能获取CPU的时间片,状态之间切换如下图(摘自黑马教程)新建当一个线程对象被创建,但还未调用 start 方法时处于新建状态此时未与操作系统底层线程关联可运行调用了 start 方法,就会由新建进入可运行此时与底层线程关联,由操作系统调度执行终结线程内代码已经执行完毕,由可运行进入终结此时会取消与底层线程关联阻塞当获取锁失败后,由可运行进入 Monitor 的原创 2022-03-04 09:22:33 · 327 阅读 · 0 评论 -
排序算法时间空间复杂度
算法原创 2022-06-14 16:51:00 · 120 阅读 · 0 评论 -
排序算法时间空间复杂度
算法原创 2022-06-14 16:12:46 · 103 阅读 · 0 评论 -
ReentrantLock的实现
获取锁成功分为两种情况,第一个if判断AQS的state是否等于0,表示锁没有人占有。接着,没有的话调用compareAndSetState使用CAS(Unsafe类调用本地方法)的方式修改state,传入的acquires写死是1。最后线程获取锁成功,setExclusiveOwnerThread将线程记录为独占锁的线程。第二个if判断当前线程是否为独占锁的线程,因为ReentrantLock是可重入的,线程可以不停地lock来增加state的值,对应地需要unlock来解锁,直到state为零。与no原创 2022-06-13 11:13:55 · 191 阅读 · 0 评论 -
JVM 类加载机制、双亲委派
加载 —>连接—>初始化—>使用—>卸载其中连接包括:验证—>准备—>解析三个阶段下面介绍每个部分的作用加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对 象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个 Class 文件获取,这里既可以从 ZIP 包中读取(比如从 jar 包和 war 包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将 JSP 文件转换成对应的 Class 类)这一阶段的主要目的是为了确保 C原创 2022-06-13 10:03:54 · 175 阅读 · 0 评论 -
项目中如何保证幂等、Redis分布式锁
问题背景假如我们一个支付项目中,用户购买了商品A,用户点击支付的时候瞬间点击了两次,就可能导致后端进行了两次的扣费处理,这个时候肯定是有问题的,怎么解决这个问题?这就涉及到幂等方案的设计了。什么是幂等?幂等性最早是数学里面的一个概念,后来被用于计算机领域,用于表示任意多次请求均与一次请求执行的结果相同,也就是说对于一个接口而言,无论调用了多少次,最终得到的结果都是一样的。解决方案使用前端拦截:前端拦截是指通过 Web 站点的页面进行请求拦截,比如在用户点击完“提交”按钮后,我们可以把.原创 2022-05-05 13:25:09 · 896 阅读 · 0 评论 -
MySQL相关的面试题
非关系型数据库和关系型数据的区别关系型数据库:采用关系模型来组织数据可以保证数据的一致性更新的开销小支持复杂的查询非关系型数据库无需sql层的解析,读写效率高基于键值对的方式存储数据,支持多种数据类型的存储,图片文档等应该很快执行的sql突然变慢了,为什么?如何解决?原因MySQL数据库本身被堵住了,比如系统网络资源的限制sql语句被一些加在数据库上的锁堵住了,导致存储引擎不执行,索引使用不当导致没有走索引数据库表的特点导致回表的次数过多。解决:采用forc.原创 2022-05-02 23:11:47 · 803 阅读 · 0 评论 -
MySQL数据库的存储引擎及索引
MySQL存储引擎MySQL的存储引擎有很多种,使用show engines命令查看MySQL支持的存储引擎我们这里主要介绍一下InnoDB和MyISAM存储引擎MyISAM存储引擎(mysql-5.1版本之前默认引擎)InnoDB存储引擎(mysql-5.1版本之后默认引擎)相关的命令查看mysql默认的存储引擎:show variables like '%storage_engine%';修改默认的存储引擎:在配置文件my.cnf中的 [mysqld] 下面加入def.原创 2022-03-27 21:30:57 · 2308 阅读 · 0 评论 -
为什么db是先写日志,而redis是后写日志
预写式日志(Write-Ahead Logging (WAL))基本上所有的数据库都实现了这个WAL技术,来保证原子性和持久性。WAL的核心思想是:在数据写入到数据库之前,先写入到日志,这一定程度上也可以提高效率,因为不需要每次都和磁盘交互,可以先记录下来,等到下次IO的时候再一次性页写入。为什么redis是先写数据然后再写日志呢?第一个是因为redis的aof的文件比较大,如果每次都记录日志,可能会有很多错误的指令进入日志,所以先通过执行指令,同时执行的时候就可以检查语句是不是有语法错误,没有原创 2022-05-02 15:34:51 · 1916 阅读 · 0 评论 -
LongAdder类和AtomicInteger类
voliate关键在保证可见性但是不保证原子性,多线程下还是有线程安全问题。不使用voliate情况下:使用voliate情况下:换成使用线程安全的类也可以使用LongAdder类来实现线程安全LongAdder类在 LongAdder 中维护了一个 Cell 数组,当 Cell 它不为空时,size 是 2 的次幂大小,每个 Cell 数组里面都有一个初始值为 0 的 long 变量,用来存储每个 Cell 的值:LongAdder 引入了分段累加的概念,内部一共原创 2022-05-02 15:16:53 · 679 阅读 · 0 评论 -
TCP相关面试题
tco建立连接丢失第三次握手报文怎么办?第三次的 ack 包丢失就是说在 client 端接收到 syn + ack 之后,向 server 发送的 ack 包 由于各种原因 server 没有收到。这时 client, server 分别会进行怎样的处理呢?第三次的ACK在网络中丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。而Server重发SYN+ACK包的次数.原创 2022-05-02 13:33:40 · 533 阅读 · 0 评论 -
过滤器,监听器,拦截器的区别
过滤器过滤器:Filter是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成.原创 2022-04-28 10:11:43 · 539 阅读 · 0 评论 -
Linux命令相关的面试题
如何查看Linux的系统负载?使用top命令第一行:系统当前时间,运行天数,小时数,在线用户数,1、5、15分钟内的平均负载第二行:当前任务数,正在运行的,睡眠的,停止的,僵死的第三行:用户态线程占cpu,内核态线程占cpu,renice值为负的任务的用户态进程的CPU时间百分比,空闲cpu,等待iocpu,cpu硬中断时间百分比,cpu软中断时间百分比第四行:物理内存总数,空闲的,使用的,用作缓存的,top - 01:05:56 up 55 days, 12:33, 1 user, l.原创 2022-04-27 11:43:01 · 205 阅读 · 0 评论 -
Java基础面试题
怎么理解栈、堆?堆中存什么?栈中存什么?栈是运行时的单位,而堆是存储的单位。 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。 堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用。一个对象的大小是不可估计的,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个4btye的引用(堆栈分离的好处:))。为什么不把基本类型放堆中呢?因为其占用的空间一般是1~8个字节——需要空间比较少,而且因为是基本类型,所以不会出现动态增长.原创 2022-04-27 11:42:48 · 150 阅读 · 0 评论 -
Redis的持久化方式
Redis的两种持久化方式RDB(RedisDataBase)和AOF(AppendOnlyFile)。RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照。AOF(Append only file)持久化方式则会记录每一个服务器收到的写操作。数据回复时,这些记录的操作会逐条执行从而重建出原来的数据。写操作命令 记录的格式跟Redis协议一致,以追加的方式进行保存。根据配置文件触发,可以是每次执行触发,可以是每秒触发,可以不同步。RDB 是 Redis 默认的持久化方案。在指定的.原创 2022-04-26 22:12:32 · 818 阅读 · 0 评论 -
Java中的反射知识点
什么是反射机制?反射机制是在Java程序运行时,对于任意一个类,都能够知道这个类的中的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的全限定名称,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射回去class文件的方式?获取Class对象(1)Class.forName(“类的路径”);(2)类名.class;(3)对象名.getClass();泛型只在编译期有效.原创 2022-04-24 21:14:20 · 717 阅读 · 1 评论 -
Java中的io
阻塞IO最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出 CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除 block 状态。典型的阻塞 IO 模型的例子为:data = socket.read();如果数据没有就绪,就会一直阻塞在 read 方法。非阻塞IO当用户线程发起一个 read 操作后,并不需要等待,而.原创 2022-03-25 16:53:02 · 827 阅读 · 0 评论 -
MySQL事务、日志、锁和MVCC机制
InnoDB中事务的四大特性原子性:当前事务的操作要么全部成功要么全部失败。原理:原子性是由undo log来保证的,undolog记录着数据修改之前的值。比如我们insert一条语句,undolog就会记录一条delete语句,我们update一条语句,undolog就会记录一条对应的原来数据的update语句,如果回滚就会利用到undolog日志的内容。一致性:事务提交前后我们的数据要一一致。我们使用事务的目的就是为例保证一致性,而原子性、隔离性、持久性都是为了保证一致性的。隔离.原创 2022-03-28 00:46:20 · 258 阅读 · 1 评论 -
Redis相关知识点
redis为什么这么快?采用的是多路复用io:在多路复用 IO模型中,会有一个线程不断去轮询多个 socket 的状态,只有当 socket 真正有读写事件时,才真正调用实际的 IO 读写操作。因为在多路复用 IO 模型中,只需要使用一个线程就可以管理多个socket,系统不需要建立新的进程或者线程,也不必维护这些线程和进程,并且只有在真正有socket 读写事件进行时,才会使用 IO 资源,所以它大大减少了资源占用。数据结构简单,操作快。使用了简单动态字符串(SDS)。Redis的链表为双端链表.原创 2022-04-17 23:10:23 · 966 阅读 · 0 评论 -
计算机网络输入一个URL全过程
1.输入url时候当我们开始在浏览器中输入网址的时候,浏览器他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全url地址。2.请求发起之后,解析这个域名,解析域名分为下面几个步骤1:首先,浏览器会查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。2:如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 。本地DN.原创 2022-03-27 14:12:48 · 9554 阅读 · 0 评论 -
HashMap相关的面试题
如果我们不重写的话,那么我们两个属性完全相同的对象,放在集合中就是不相等的,这不符合常规的逻辑,所以要重写。如果只重写hascode方法,那么那么就会导致最后算出的桶下标相同,但是equals比较又不同,就会导致我们逻辑上认为相同的对象,放在相同的桶里面,导致链表过长(Java7)或者形成红黑树(Java8)。map集合内部比较元素是否相等用的就是equals方法,所以一定要重写,不然我们就没办法利用到map这种高效的数据结构。如果只重写equals方法,那么就会导致两个逻辑上相同但是内存地址.原创 2022-03-20 00:28:08 · 511 阅读 · 0 评论 -
Java中的finally关键字面试题
public static int geta(){ try { return 1; }finally { System.out.println(5);// return 2; } } public static void main(String[] args) throws FileNotFoundException { System.out.print原创 2022-03-19 20:46:18 · 172 阅读 · 0 评论 -
Java基础面试题2
package com.dongmu.mianshi;import java.util.ArrayList;import java.util.List;public class test02 { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 20; i++) {原创 2022-03-13 21:50:04 · 789 阅读 · 0 评论 -
Java基础面试体
public static void main(String[] args) { int a1 = 2,a2=2,a3 = 2,a4 = 2; int b = a1+++a1; int c = a2+a2++; a3+=a3++;//先把a3的值取出来然后再对a3++;加完了之后再执行a3=a3+a3,因为之前取出来的时候a3都是2,所以a3++之后又被前面的等式覆盖了,所以是4 a4+=++a4;//a4=a4+++a4,前原创 2022-03-13 20:38:12 · 630 阅读 · 0 评论