
面试题
文章平均质量分 88
阿瑞的博客
你请不必打听我大名,望望无尽夜星,仍旧照亮你这一刹心境
展开
-
# 数据结构和算法面试题系列-随机算法总结
随机算法涉及大量概率论知识,有时候难得去仔细看推导过程,当然能够完全了解推导的过程自然是有好处的,如果不了解推导过程,至少记住结论也是必要的。本文总结最常见的一些随机算法的题目,是几年前找工作的时候写的。需要说明的是,这里用到的随机函数假定它能随机的产生范围[a,b]内的整数,即产生每个整数的概率相等(虽然在实际中并不一定能实现,不过不要太在意,这个世界很多事情都很随机)。原创 2023-04-26 23:20:50 · 838 阅读 · 0 评论 -
数据结构和算法面试题系列-排序算法之快速排序
快速排序也是基于分治模式,类似归并排序那样,不同的是快速排序划分最后不需要merge。对一个数组A[p..r]A[p...r]A[p...q-1]A[q+1...r]A[p...q-1]A[q]A[q+1...r]A[q][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63GtmUft-1682512340729)(null)]快速排序算法不算复杂的算法,但是实际写代码的时候却是最容易出错的代码,写的不对就容易死循环或者划分错误。原创 2023-04-26 20:33:18 · 635 阅读 · 0 评论 -
数据结构和算法面试题系列-排序算法之快速排序
快速排序也是基于分治模式,类似归并排序那样,不同的是快速排序划分最后不需要merge。对一个数组A[p..r]A[p...r]A[p...q-1]A[q+1...r]A[p...q-1]A[q]A[q+1...r]A[q][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tzEJN01W-1682438818684)(null)]快速排序算法不算复杂的算法,但是实际写代码的时候却是最容易出错的代码,写的不对就容易死循环或者划分错误。原创 2023-04-26 00:07:50 · 532 阅读 · 0 评论 -
数据结构和算法面试题系列-排序算法之基础排序
排序算法也是面试中常常提及的内容,问的最多的应该是快速排序、堆排序。这些排序算法很基础,但是如果平时不怎么写代码的话,面试的时候总会出现各种bug。虽然思想都知道,但是就是写不出来。本文打算对各种排序算法进行一个汇总,包括插入排序、冒泡排序、选择排序、计数排序、归并排序,基数排序、桶排序、快速排序等。快速排序比较重要,会单独写一篇,而堆排序见本系列的二叉堆那篇文章即可。需要提到的一点就是:插入排序,冒泡排序,归并排序,计数排序都是稳定的排序,而其他排序则是不稳定的。原创 2023-04-25 23:53:03 · 513 阅读 · 0 评论 -
数据结构和算法面试题系列-二分查找算法详解
二分查找本身是个简单的算法,但是正是因为其简单,更容易写错。甚至于在二分查找算法刚出现的时候,也是存在bug的(溢出的bug),这个bug直到几十年后才修复(见《编程珠玑》)。本文打算对二分查找算法进行总结,并对由二分查找引申出来的问题进行分析和汇总。若有错误,请指正。原创 2023-04-25 23:50:42 · 565 阅读 · 0 评论 -
数据结构和算法面试题系列-二叉树面试题汇总
解决这两个问题的方案非常简单:在每次递归调用的时候,更新当前遍历结点的。原创 2023-04-22 17:57:12 · 842 阅读 · 0 评论 -
数据结构和算法面试题系列-二叉树基础
int value;} BTNode;其中value存储值,left和right指针分别指向左右子结点。二叉搜索树跟二叉树可以使用同一个结构,只是在插入或者查找时会有不同。原创 2023-04-22 17:47:23 · 657 阅读 · 0 评论 -
数据结构和算法面试题系列-二叉堆
使用数组来实现二叉堆,二叉堆两个属性,其中LENGTH(A)表示数组A的长度,而则表示存放在A中的堆的元素个数,其中,也就是说虽然都可以包含有效值,但是之后的元素不属于相应的堆。二叉堆对应的树的根为A[0],给定某个结点的下标 i ,可以很容易计算它的父亲结点和儿子结点。注意在后面的示例图中我们标注元素是从1开始计数的,而实现代码中是从0开始计数。注:堆对应的树每一层都是满的,所以一个高度为h的堆中,元素数目最多为(满二叉树),元素数目最少为。由于元素数目,所以,因此h = lgn。原创 2023-04-22 17:45:16 · 526 阅读 · 0 评论 -
数据结构和算法面试题系列-栈
我们使用结构体来定义栈,使用柔性数组来存储元素。几个宏定义用于计算栈的元素数目及栈是否为空和满。int top;} Stack;原创 2023-04-22 17:43:27 · 545 阅读 · 0 评论 -
数据结构和算法面试题系列-链表
先定义一个单向链表结构,如下,定义了链表结点和链表两个结构体。这里我没有多定义一个链表的结构体,保存头指针,尾指针,链表长度等信息,目的也是为了多练习下指针的操作。// 链表结点定义int value;} listNode;[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PfeF6Pp6-1682156358128)(null)]原创 2023-04-22 17:41:33 · 645 阅读 · 0 评论 -
数据结构和算法面试题系列—字符串
字符串作为数据结构中的基础内容,也是面试中经常会考察的基本功之一,比如实现 strcpy,strcmp等基本函数等,回文字符串,字符串搜索,正则表达式等。原创 2023-04-16 10:32:58 · 484 阅读 · 0 评论 -
JUC源码系列-AQS独占锁获取
AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。AQS虽然被定义为抽象类,但事实上它并不包含任何抽象方法。这是因为AQS是被设计来支持多种用途的,如果定义抽象方法,则子类在继承时必须要覆写所有的抽象方法,这显然是不合理的。原创 2023-04-15 17:05:31 · 589 阅读 · 0 评论 -
JUC源码系列-CyclicBarrier源码分析
本篇我们来看看另一个和它比较像的并发工具CyclicBarrier。CyclicBarrier实现了类似CountDownLatch的逻辑,它可以使得一组线程之间相互等待,直到所有的线程都到齐了之后再继续往下执行。CyclicBarrier基于条件队列和独占锁来实现,而非共享锁。CyclicBarrier可重复使用,在所有线程都到齐了一起通过后,将会开启新的一代。CyclicBarrier使用了。原创 2023-04-15 18:24:37 · 944 阅读 · 0 评论 -
JUC源码系列-Semaphore源码研读
Semaphore(信号量)也是常用的并发工具之一,它常常用于流量控制。通常情况下,公共的资源常常是有限的,例如数据库的连接数。使用Semaphore可以帮助我们有效的管理这些有限资源的使用。Semaphore的结构和ReentrantLock以及CountDownLatch很像,内部采用了公平锁与非公平锁两种实现,如果你已经看过了ReentrantLock源码分析 和 CountDownLatch源码分析,弄懂它将毫不费力。Semaphore是一个有效的流量控制工具,它基于AQS共享锁实现。原创 2023-04-16 00:17:19 · 302 阅读 · 0 评论 -
JUC源码系列-ReentrantReadWriteLock
(1)首先说一下公平锁和非公平锁的区别,公平锁:当线程发现已经有线程在排对获取锁了,那么它必须排队,除了一种情况就是,线程已经占有锁,此次是重入,不用排队。非公平锁:只有一种情况需排队,其他情况不用排队就可以尝试获取锁: 如果当前全局处于读锁状态,且等待队列中第一个等待线程想获取写锁,那么当前线程能够获取到读锁的条件为:当前线程获取了写锁,还未释放;当前线程获取了读锁,这一次只是重入读锁而已;其它情况当前线程入队尾。原创 2023-04-15 18:37:02 · 714 阅读 · 0 评论 -
JUC源码系列-ReentrantLock源码研读
上一篇我们学习了lock接口,本篇我们就以ReentrantLock为例,学习一下Lock锁的基本的实现。Lock 接口ReentrantLock 实现lock()tryLock()unlock()从表中可以看出,ReentrantLock对于Lock接口的实现都是直接“转交”给sync对象的。ReentrantLock对于Lock接口方法的实现大多数是直接调用了AQS的方法,AQS中已经完成了大多数逻辑的实现,子类只需要直接继承使用即可,这足见AQS在并发编程中的地位。原创 2023-04-15 18:35:37 · 699 阅读 · 0 评论 -
JUC源码系列-Lock 和 Condtion
前面几篇我们学习了synchronized同步代码块,了解了java的内置锁,并学习了监视器锁的wait/notify机制。在大多数情况下,内置锁都能很好的工作,但它在功能上存在一些局限性,例如无法实现非阻塞结构的加锁规则等。为了拓展同步代码块中的监视器锁,java 1.5 开始,出现了lock接口,它实现了可定时、可轮询与可中断的锁获取操作,公平队列,以及非块结构的锁。与内置锁不同,Lock是一种显式锁,它更加“危险”,因为在程序离开被锁保护的代码块时,不会像监视器锁那样自动释放,需要我们手动释放锁。原创 2023-04-15 18:33:46 · 695 阅读 · 0 评论 -
JUC源码系列-CountDownLatch源码研读
CountDownLatch是一个很有用的工具,latch是门闩的意思,该工具是为了解决某些操作只能在一组操作全部执行完成后才能执行的情景。例如,小组早上开会,只有等所有人到齐了才能开;再如,游乐园里的过山车,一次可以坐10个人,为了节约成本,通常是等够10个人了才开。CountDown。原创 2023-04-15 18:21:01 · 457 阅读 · 0 评论 -
JUC源码系列-AQS共享锁的获取与释放
共享锁与独占锁的最大不同,是共享锁可以同时被多个线程持有,虽然AQS里面没有成员用来保存持有共享锁的线程们。由于共享锁在获取锁和释放锁时,都需要唤醒head后继,所以将其逻辑抽取成一个的逻辑了。原创 2023-04-15 18:18:37 · 451 阅读 · 0 评论 -
JUC源码系列-AQS的Condition的接口实现
本篇文章是基于线程间的同步与通信(4)——Lock 和 Condtion 这篇文章写的,在那篇文章中,我们分析了Condition接口所定义的方法,本篇我们就来看看AQS对于Condition接口的这些接口方法的具体实现。Object 方法Condition 方法区别时间单位,返回值时间单位,参数类型,返回值Condition独有Condition独有这里先做一下说明,本文说wait方法时,是泛指wait()三个方法,当需要指明某个特定的方法时,会带上相应的参数。原创 2023-04-15 17:02:32 · 513 阅读 · 0 评论 -
JUC源码系列-ReentrantLock独占锁的释放
try {// 更新对象 //捕获异常 } finally {一定要记得在 finally 块中释放锁!!!原创 2023-04-15 12:07:58 · 900 阅读 · 0 评论 -
SpringBoot 事务不回滚的解决方法
springboot 事务失效的情况和解决方法原创 2022-10-12 16:23:17 · 4134 阅读 · 0 评论 -
说一下 Spring 事务传播机制?
java 事务传播机制讲解原创 2022-10-12 15:24:59 · 310 阅读 · 0 评论 -
加入事务和嵌套事务有的区别
嵌套事务和当前事务的区别原创 2022-10-12 11:50:41 · 603 阅读 · 0 评论 -
事务隔离级别(数据库层面)和传播机制(代码层面spring框架)的区别?
面试题收集,数据库事务和spring事务传播机制的区别原创 2022-10-12 10:42:28 · 458 阅读 · 0 评论 -
面试官:mysql 索引原理
索引原理MySQL官方对索引定义:是存储引擎用于快速查找记录的一种数据结构。需要额外开辟空间和数据维护工作。索引是物理数据页存储,在数据文件中(InnoDB,ibd文件),利用数据页(page)存储。索引可以加快检索速度,但是同时也会降低增删改操作速度,索引维护需要代价。B+Tree结构MySQL数据库索引采用的是B+Tree结构,在B-Tree结构上做了优化改造。B-Tree结构索引值和data数据分布在整棵树结构中每个节点可以存放多个索引值及对应的data数据树节点中的多个索引原创 2021-04-22 23:08:58 · 276 阅读 · 0 评论 -
java多线程题目详解
1. 什么是CAS答:CAS全称是Compare And Swap,即比较替换,是实现并发应用到的一种技术。操作包含三个操作数—内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。CAS存在三大问题:ABA问题,循环时间长开销大,以及只能保证一个共享变量的原子操作2. CyclicBarrier和CountDownLatch区别答:CountdownLatch适用于所有线程通过某一点后通知方法,而Cycli原创 2021-04-22 21:48:52 · 246 阅读 · 2 评论