自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 进程调度算法

当较高优先级的队列为空,才调度较低优先级的队列中的进程运行。如果进程运行时,有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列末尾,接着让较高优先级的进程运行;新的进程会被放入到第一级队列的末尾,按先来先服务的原则排队等待被调度,如果在第一级队列规定的时间片没运行完成,则将其转入到第二级队列的末尾,以此类推,直至完成;是「时间片轮转算法」和「最高优先级算法」的综合和发展。设置了多个队列,赋予每个队列不同的优先级,每个。通常是一个比较合理的折中值。

2023-05-16 16:40:18 191

原创 内存安全的阻塞队列:MemoryLimited/SafeLinkedBlockingQueue

MemorySafeLinkedBlockingQueue只是在真正调用LinkedBlockingQueue的put方法前,判断JVM剩余内存是否足够。MemoryLimitCalculator通过线程池定时任务保证我们能够获得JVM剩余空闲内存的大小。而put方法在hasRemainedMemory()return true之后直接调用了父类的方法。这是dubbo源码用到的阻塞队列。相反,它从JVM的角度考虑,maxFreeMemory变量代表最大的剩余内存。它的目的就是限制队列的内存上限。

2023-05-03 12:40:01 432

原创 关于MySQL缓冲池:Buffer Pool 与 Change Buffer

也就是如果buffer pool有数据,更新buffer pool;没有的话,也不查磁盘数据,而是写入Change Buffer。而写完了立刻要查,那就会立即触发merge,也是对磁盘的读写,这样随机访问IO的次数不会减少,反而增加了change buffer的维护代价,起到了副作用。InnoDB 为每一个缓存页都创建了一个控制块,控制块信息包括「缓存页的表空间、页号、缓存页地址、链表节点」等等。读多写少的场景,Change Buffer很有用,因为一次merge可以处理很多读操作。

2023-05-02 13:24:31 630

原创 Java序列化

将一个对象转化为字节流,从而能够保存到磁盘,进行网络传输。

2023-04-28 09:17:39 184

原创 磁盘调度算法

为了提高磁盘的访问性能,一般是通过优化磁盘的访问请求顺序来做到的。寻道的时间是磁盘访问最耗时的部分,如果请求顺序优化的得当,必然可以节省一些不必要的寻道时间,从而提高磁盘的访问性能。扫描算法使得每个磁道响应的频率存在差异,那么要优化这个问题的话,可以总是按相同的方向进行扫描,使得每个磁道的响应频率基本一致。只有磁头朝某个特定方向移动时,才处理磁道访问请求,而返回时直接快速移动至最靠边缘的磁道,也就是复位磁头,这个过程是很快的,并且。LOOK优化扫描算法,C-LOOK优化循环扫描算法。,该算法的特点,就是。

2023-04-27 14:22:50 143

原创 JAVA基础面试题汇总及JAVA8新特性

自定义异常类(xxxException)继承RuntimeException,在捕获异常的地方。

2023-04-23 21:37:21 573

原创 并发,多线程/进程基础知识

默认将父线程(当前执行new Thread的线程)线程组设置为自己的线程组。这里的中断线程并不会立即停止线程,而是设置线程的中断状态为true。具体被要求中断的线程要怎么处理,完全由被中断线程自己而定,可以在合适的时机处理中断请求,也可以完全不处理继续执行下去。默认的线程优先级为5。应用场景是:当所有非守护线程结束时,结束其余的子线程(守护线程)自动关闭,就免去了还要继续关闭子线程的麻烦。目前在Java里还没有安全直接的方法来停止线程,但是Java提供了线程中断机制来处理需要中断线程的情况。

2023-04-23 09:02:14 306

原创 Java线程池详解,阻塞队列关键源码分析

线程池中有两类线程,核心线程和非核心线程。核心线程默认情况下会一直存在于线程池中,即使这个核心线程什么都不干(铁饭碗),而非核心线程如果长时间的闲置,就会被销毁(临时工)。一般一个线程在创建的时候会指定一个线程任务,当执行完这个线程任务之后,线程自动销毁。线程池本身有一个调度线程,这个线程就是用于管理布控整个线程池里的各种任务和事务,例如创建线程、销毁线程、任务队列管理、线程队列管理等等。创建线程的工厂 ,用于批量创建线程,统一在创建线程时设置一些参数,如是否守护线程、线程的优先级等。

2023-04-20 13:21:28 304

原创 从AQS到ReentrantLock - 底层详解

继承 AbstractQueuedSynchronizer(AQS) ,并需要重写以下模板方法,独占 / 共享一般只要实现其中一组即可AQS会调用这些方法来维护CLH等,即AQS的acquire实际上调用了tryAcquire方法, 1 isHeldExclusively() //该线程是否正在独占资源。只有用到condition才需要去实现它。2 tryAcquire(int) //独占方式。尝试获取资源,成功则返回true,失败则返回false。3 tryRelease(int) //独占方式。

2023-04-20 00:10:13 158

原创 synchronized进化之路详解

非数组类型,则用2个字宽来存储对象头,如果是数组,则会用3个字宽来存储对象头。当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。这是对于synchronized来说的,所以它底层是偏向锁+CAS(偏向锁/轻量级锁)+wait/notify(重量级锁)实现的。比较是否和给定的数值一致,如果一致则修改,不一致则不修改。,所以当其他线程尝试竞争偏向锁时, 持有偏向锁的线程才会释放锁。

2023-04-19 23:56:28 154

原创 Codeforces Round #805 (Div. 3)

E找奇环法一:并查集维护连通块法二:二分图染色F2可以×/÷任意个数不妨除完所有的2 对剩余的部分进行匹配G可以参考Codeforces Round #805 (Div. 3) E(染色) F(贪心) G(lca) - 知乎讲的很清楚注意直链不需要额外判断 ed==0就是直链了...

2022-07-12 22:19:08 234

原创 Codeforces Round #791 (Div. 2) D. Toss a Coin to Your Graph...

拓扑排序加二分最大值的最小值 想到二分 然后考虑怎么check只需要 把满足小于等于mid的边加入到图中拓扑 有环或者链长大于等于k就是ok但不用每次建信图 判一下能否访问即可int u[N], deg[N];vector<int> v[N];int ve[N];par arr[N];bool ck(int mid) { // topo cnt = 0, pp = 0; rep(i, 1, n) { if (u[i] <=

2022-05-17 22:26:25 146

原创 AtCoder Beginner Contest 251 D - At Most 3 (Contestant ver.)

构造题N=1e6最多300个数,至多三个其中的数(这些数也<=N)相加,尽可能覆盖多的1~W(W<=N)一眼想到二进制 发现不好构造只好从数据下手 300 1e6就想到拆成 3个部分 每份100个数int v[510];int u[N];signed main() { n = read(); cout << 300 << "\n"; rep(i, 1, 100) cout << i << " "

2022-05-14 23:40:25 449

原创 Codeforces Round #789 (Div. 2) A~E

A Tokitsukaze and All Zero Sequence直接贪心即可bool v[1010];signed main() { cf { memset(v, 0, sizeof v); n = read(); cnt = 0; bool flag = 0; rep(i, 1, n) { a = read(); if (v[a]) flag = 1;

2022-05-11 21:39:31 338

原创 Codeforces Round #787 (Div. 3) E Replace With the Previous, Minimize

模拟题给定一个字符串 操作次数k 让字符串字典序最小操作是让 所有的某个字符减1 如 b=>a c=>b那么就从前往后枚举 优先让前面的字典序最小即可要注意出现 剩余的操作次数 不足以让s[i]变为小于等于目前操作次数的情况是让lst2~lst3这个区域的字符 都变为lst3 (见代码)signed main() { cf { char lst = 'a', lst2 = 'a', lst3 = 'a'; n = read();

2022-05-06 00:50:06 505

原创 Codeforces Round #786 (Div. 3) Remove Directed Edges

题意:n个点条m边的有向无环图 删边 让每对点彼此至少有一条路径可以从a到b或b到a同时每个点的入度 出度都必须减少 除非是0 求最多的点数本质上就是个 带限制的 求最长链问题为什么 因为无环 若从一点出发去了两个点 那么这两个点一定彼此无法到达考虑枚举每个点 找从他开始出发的最长链 想到DP不过要注意转移的时候 只能由入度大于等于2 的点转移int f[N];int in[N];int out[N];vector<int> v[N];void dfs(

2022-05-05 17:08:15 393

原创 Codeforces Round #785 (Div. 2) D Lost Arithmetic Progression

题意:给定两个等差数列B,C 其中C是A和B的所有的公共部分 求这样的等差数列A的个数若无限个A 输出-1细节题思路:首先判断C的项是不是全部在B中 若不是 答案为0 直接输出然后A必须有所有C的项 所以A的公差必然是C的公差的因子记 Di 为 i 的公差即 Dc % Da == 0想到 A和B不能有别的相同的项 且都是等差数列那么 C的两项之间 ,A,B的每一项没有交集所以lcm(Da,Db)== Dc还有无限个A的情况C的后一项/前一项如果在B中没有出

2022-05-02 16:45:03 517

原创 Codeforces Round #783 (Div. 2) D. Optimal Partition

思路在最后#include <bits/stdc++.h>using namespace std;#define int long long#define rep(i, a, b) for (int i = a; i <= b; i++)#define per(i, a, b) for (int i = a; i >= b; i--)#define cf \ int _; \ cin >> _; \ while (_-.

2022-04-30 15:12:02 238

原创 Codeforces Global Round 20 E

E. notepad.exe交互题: 有n个单词,长度1~2000,n<=2000。文本编辑器会显示这些单词。你可以进行若干次询问,给出宽度,返回显示这些单词需要的最小高度。注意 同行相邻的两个单词之间要用空格隔开,若宽度太小不够打印某个单词,返回0求显示所有单词所需要的最小面积(宽度*高度)注意询问次数最多n+30次ps:这样的交互题一般询问次数中都透露着做法方法:先考虑高度为1的情况,显然可以二分求出最小值 l=S+n-1其中S是单词总长度,n-1是空格数量

2022-04-30 14:53:09 297

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除