- 博客(45)
- 收藏
- 关注
原创 【面试八股总结】GC垃圾回收机制
在Go中,线程是运行goroutine的实体,调度器的功能是把可运行的goroutine分配到工作线程上。Goroutine调度器和OS调度器是通过M结合起来的,每个M都代表了一个内核线程,OS调度器负责把内核线程分配到CPU的核上执行。
2024-09-16 17:56:31
1238
原创 【面试八股总结】GMP模型
在Go中,线程是运行goroutine的实体,调度器的功能是把可运行的goroutine分配到工作线程上。Goroutine调度器和OS调度器是通过M结合起来的,每个M都代表了一个内核线程,OS调度器负责把内核线程分配到CPU的核上执行。
2024-09-16 16:47:12
564
原创 【面试八股总结】Redis持久化
Redis 实现了数据持久化的机制,这个机制会把数据存储到磁盘,这样在 Redis 重启就能够从磁盘中恢复原有的数据。
2024-09-13 22:23:31
1202
原创 【面试八股总结】MySQL日志:undo log、redo log、binlog
MySQL中存在三种日志:undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复;binlog (归档日志):是 Server 层生成的日志,主要用于数据备份和主从复制。
2024-09-04 19:04:02
1479
原创 【面试八股总结】C++内存管理:内存分区、内存泄漏、new和delete、malloc和free
C++内存管理:内存分区、内存泄漏、new和delete、malloc和free
2024-07-10 17:18:06
1000
原创 【面试八股总结】Redis数据结构及底层实现
Redis 提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)
2024-06-18 16:56:14
1416
原创 【面试八股总结】死锁:产生条件、预防死锁、处理死锁、避免死锁
进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执⾏,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。一个小城镇的银行家,他向⼀群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;来实现,从⼀个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁发生。Has 表示已拥有的资源数,Max 表示总共需要的资源数,Free 表示还有可以使⽤的资源数。
2024-06-06 10:54:45
1315
原创 【面试八股总结】锁:互斥锁、自旋锁、读写锁、乐观锁、悲观锁
读优先锁期望的是,读锁能被更多的线程持有,以便提高读线程的并发性,它的工作方式是:当读线程 A 先持有了读锁,写线程 B 在获取写锁的时候,会被阻塞,并且在阻塞过程中,后续来的读线程 C 仍然可以成功获取读锁,最后直到读线程 A 和 C 释放读锁后,写线程 B 才可以成功获取写锁。,表示该数据的版本号,每当数据被修改,版本号+1。当「写锁」没有被线程持有时,多个线程能够并发地持有读锁,这大大提高了共享资源的访问效率,因为「读锁」是用于读取共享资源的场景,所以多个线程同时持有读锁也不会破坏共享资源的数据。
2024-06-05 14:54:52
1125
原创 【面试八股总结】内存页面置换算法
并且LFU 算法只考虑了频率问题,没考虑时间的问题,比如有些页面在过去时间里访问的频率很高,但是现在已经没有访问了,而当前频繁访问的页面由于没有这些页面访问的次数高,在发生缺页中断时,就会可能会误伤当前刚开始频繁访问,但访问次数还不高的页面。为了完全实现 LRU,需要在内存中维护一个所有页面的链表,最近最多使用的页面在表头,最近最少使用的页面在表尾。」选择一个物理页,如果该物理页有被修改过(脏页),则把它换出到磁盘,然后把该被置换出去的页表项的状态改成「无效的」,最后把正在访问的页面装入到这个物理页中。
2024-06-04 19:53:40
754
原创 【面试八股总结】MySQL索引(二):B+树数据结构、索引使用场景、索引优化、索引失效
B 树是一个,每一个节点最多可以包括 M 个子节点,M 称为 B 树的阶,所以 B 树就是一个多叉树。叶子节点(最底部的节点)才会存放实际数据(索引+记录),非叶子节点只会存放索引;所有索引都会在叶子节点出现,叶子节点之间构成一个有序链表;非叶子节点的索引也会同时存在在子节点中,并且是在子节点中所有索引的最大(或最小)。非叶子节点中有多少个子节点,就有多少个索引;
2024-05-28 20:23:42
1030
原创 【面试八股总结】C++11新特性:智能指针
如果你拷贝⼀个unique_ptr,那么拷贝结束后,这两个unique_ptr都会指向相同的资源,造成在结束时对同⼀内存指针多次释放而导致程序崩溃。如果⼀块 内存被shared_ptr和weak_ptr同时引⽤,当所有shared_ptr析构了之后,不管还有没有weak_ptr引⽤该内存,内存也会被释放。,每当多⼀个指针指向该对象时,指向该对象的所有智能指针内部的引用计数加1,每当减少⼀个智能指针指向对象时,引用计数会减1,当。,⼀个非空的unique_ptr总是拥有它所指向的资源。
2024-05-09 22:24:09
1282
原创 【面试八股总结】Linux系统下的I/O多路复用
这在并发程序中会引起一个问题,假设一个线程在读取完某个socket上的数据后开始处理该数据,而在数据处理过程中该socket又有新的数据可读(EPOLLIN再次被触发),此时另一个线程被唤醒来读取这些新的数据,于是就出现了两个线程同时操作一个socket的局面。epoll使用一组函数完成任务,而不是一个函数,并且epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,不需要像select和poll一样每次调用都需要重复传入文件描述符集合。但对于大量的文件描述符,poll的性能也可能变得不够⾼效。
2024-04-22 21:59:25
1358
原创 【面试八股总结】排序算法(二):堆排、计数、桶排、基数
这样就把最大值放到了数组最后边。把数组长度n-1,再进行构造堆把剩余的第二大值放到堆顶,输出堆顶(放到剩余未排序数组最后面)。依次类推,直至数组排序完成。
2024-04-16 19:22:00
1314
原创 【面试八股总结】排序算法(一):冒泡、选择、插入、快排、希尔、归并
冒泡排序就是把小的元素往前交换或者把大的元素往后交换,比较相邻的两个元素,交换也发生在这两个元素之间。
2024-04-11 23:06:36
1184
1
原创 【面试八股总结】进程(二):进程调度与进程同步
参考资料 :小林Coding、阿秀、代码随想录当⼀个进程的状态发⽣改变时,操作系统需要考虑是否要换⼀个进程执行,这就需要⽤到“进程调度算法”。不同的调度算法具有不同的特性,因为使用以下标准比较处理机调度算法的性能: 每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。 非抢占式的调度算法,按照请求的顺序进行调度。 有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又
2024-04-11 21:07:30
1552
原创 【牛客SQL快速入门】高级查询
AVG()为平均值函数,通过对表中行数计数并计算其,求得该列的平均值。AVG() 可用来,也可以用来返回特定列或行的平均值。COUNT()函数为计数函数,可利用 COUNT()。MAX()返回指定列中的最大值。MAX在使用时,MIN()的功能正好与 MAX()功能相反,它返回。与 MAX() 一样,MIN()要求指定列名SUM()用来返回指定列值的和(总计)。在一些聚集运算中,容易出现结果为非整数的情况,这时候如果想要,语法格式为,其中value代表想要限制小数位数的字段,n代表想要限制的小数位数。
2024-04-09 16:13:34
1063
原创 【C++从0到1-黑马程序员】STL常用算法
algorithm>是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等。merge 容器元素合并,并存储到另一容器中。查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()二分查找法查找效率很高,值得注意的是查找的容器中元素必须是。将区间内满足条件的元素,替换成指定元素。两个容器元素合并,并存储到另一容器中。容器内指定范围的元素拷贝到另一容器中。将容器内指定范围的旧元素修改为新元素。
2024-04-06 21:58:40
844
原创 【面试八股总结】进程(一):基本概念、进程状态、进程控制与通信方式
一、什么是进程?参考资料 :小林Coding、阿秀、代码随想录一、什么是进程?1. 基本概念进程是具有独立功能的程序在一个数据集合上运行的过程,是。2. 进程控制块系统通过进程控制块PCB描述进程的进本情况和运行状态,进而控制和管理进程进程,,包括以下信息:进程描述信息:进程标识符、用户标识符;进程控制和管理信息:进程当前状态、进程优先级;进程资源分配清单:有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的I/O设备信息;
2024-04-04 18:53:12
1425
2
原创 【面试八股总结】传输控制协议TCP(三):拥塞控制、可靠传输与重传机制
慢启动是指TCP连接刚建立,一点一点地提速,试探一下网络的承受能力,以免直接扰乱了网络通道的秩序。
2024-04-02 15:27:21
1791
2
原创 【面试八股总结】传输控制协议TCP(二):报文段与流量控制
若此时接收方的应用进程以交互方式每次只读取一个字节,于是接收方又发送窗口大小为一个字节的更新报文,发送方应邀发送一个字节的数据(发送的 IP 数据报是 41 字节长),于是接收窗口又满了,如此循环往复。若发送应用进程把要发送的数据逐个字节地送到 TCP 的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。发送方 TCP 每次接收到一字节的数据后就发送。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。
2024-04-02 11:12:18
1263
1
原创 【面试八股总结】传输控制协议TCP(一):基本概念、连接的建立与释放(三次握手、四次挥手)
TCP是传输控制协议Transmission Control ProtocolTCP 是面向连接的、可靠的、基于字节流的传输层通信协议。
2024-04-01 15:12:43
1496
1
原创 【C++从0到1-黑马程序员】STL容器(三)
插入操作和删除操作都不会导致原有list迭代器的失效,在vector中是不成立的。由于链表的存储方式并不是连续的内存空间,因此链表中的迭代器支持前移和后移,属。结点的组成:一个存储数据元素的数据域,另一个是存储下一个结点地址的指针域。set不允许容器中有重复的元素;list不支持使用[]和at方式访问容器中的元素,原因是。,不适用连续线性空间存储数据,迭代器也是不支持随机访问的。不支持随机访问迭代器的容器,内部会提供对应的一些算法。将容器中的元素反转,以及将容器中的数据进行排序。
2024-03-31 21:30:00
973
1
原创 【C++从0到1-黑马程序员】STL容器(二)
3. Deque容器3. Deque容器3.1 deque基本概念功能:,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率极低,数据量越大,效率越低deque相对而言,对于头部的插入删除速度会比vector快vector访问元素时的速度会比deque快deque内部工作原理:deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实的数据中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间。
2024-03-31 16:57:11
311
1
原创 【面试八股总结】超文本传输协议HTTP(二):缓存技术、版本更新、请求/响应过程
将资源(如⽹⻚、图像、脚本等)的副本存储在客户端或中间代理服务器上,以便将来的请求可以直接从缓存中获取,⽽不必重新从服务器下载资源。这有助于减少⽹络延迟,提高页面加载速度,并减轻服务器的负担。HTTP 缓存有两种实现方式,分别是。
2024-03-29 17:41:31
1486
1
原创 【面试八股总结】超文本传输协议HTTP(一):基本概念、报文、请求方法、状态码与常见字段
一、 什么是HTTP协议?一、 什么是HTTP协议?HTTP是超文本传输协议 HyperText Transfer Protocal简单、灵活、易于扩展无状态:服务器不会记忆HTTP状态二、 HTTP报文1. HTTP请求报文URL HTTP协议版本号Request Headers 请求头:包含请求的附加信息,由key:value组成空 行:分隔请求头和请求体Request Body 请求体:承载多个请求参数的数据(可选)2. HTTP响应报文空 行。
2024-03-29 16:11:08
1036
1
原创 【C++从0到1-黑马程序员】STL容器(一)
2. Vector容器C++从0到1 - 黑马程序员 课程学习笔记1. String 容器1.1 string基本概念string是C++风格的字符串,而string本质上是一个char*是一个指针string是一个类,类内部封装了char*,管理这个字符串,是一个char*类型的容器string类内部封装了很多成员方法string管理char* 所分配的内存,不需要担心赋值越界和取值越界等,由类内部进行负责1.2 string构造函数1.3 string赋值操作。
2024-03-27 15:54:47
818
1
原创 【C++从0到1-黑马程序员】STL初识
非质变算法:是指运算过程中不会更改区间内的元素的内容,例如:查找、计数、遍历、寻找极值等。提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。STL六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。质变算法:是指运算过程中会更改区间内的元素的内容,例如:拷贝、替换、删除。序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系。常用的数据结构:数组、链表、树、栈、队列、集合、映射表等。
2024-03-25 18:05:15
787
原创 【C++从0到1-黑马程序员】模板
建立一个通用函数,函数返回值类型和形参类型可以不具体定制,用一个虚拟的类型来代表。类模板作用: 建立一个通用类,类中的成员数据类型可以不具体定制,用一个虚拟的类型来表示。将声明和实现写到一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制。全局函数类外实现 - 需要提前让编译器知道函数的存在:需要提前声明类模板以及函数。❗模板的通用性并不是万能的,有些特定数据类型,需要用具体化方式做特殊实现。当子类继承的父类是一个类模板时,子类在继承前必须指定父类中T的数据类型。
2024-03-25 15:28:11
257
原创 【C++从0到1-黑马程序员】文件操作
1. 文本文件C++从0到1 - 黑马程序员 课程学习笔记程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放可以通过文件C++中对文件操作需要包含头文件文件类型分为两种:文本文件 - 文件以文本的ASCII码形式存储在计算机中操作文件的三大类:ofstream:写操作ifstream: 写操作fstream:读写操作1. 文本文件1.1 写文件写文件步骤:包含头文件 #include。
2024-03-24 19:15:00
873
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人