- 博客(56)
- 收藏
- 关注
原创 【刷题笔记】 AOV网的拓扑排序
摘要: 有向无环图(DAG)是没有环的有向图,其中AOV网络用顶点表示活动,边表示依赖关系。拓扑排序通过反复移除入度为0的顶点及其出边,判断AOV网络是否存在环。算法步骤包括初始化入度数组、处理队列顶点并更新邻接顶点入度,最终检查结果是否包含所有顶点。若排序成功,输出拓扑序列(如0->1->2->3);若存在环,则无法完成排序。代码示例展示了基于邻接表的实现方法,适用于任务调度等场景。
2025-11-12 11:18:52
334
1
原创 【刷题笔记】二分法
本文介绍了二分查找算法的两种区间定义实现方式。第一种采用左闭右闭区间[left,right],循环条件为left<=right,当中间值大于目标时right=middle-1,小于时left=middle+1。第二种采用左闭右开区间[left,right),循环条件为left<right,调整边界时right=middle或left=middle+1。两种方式时间复杂度均为O(n),空间复杂度O(1),通过不同区间定义实现了相同的二分查找功能。
2025-11-10 16:16:23
115
原创 【车载以太网】SOME/IP协议:基本概念、报文格式、通信方式、序列化
SOME/IP是一种面向服务的汽车电子通信协议,支持ECU间的服务交互,基于IP网络传输。其核心功能包括序列化、远程调用、服务发现及发布/订阅机制,采用16字节固定头部格式报文,支持请求/响应、事件通知等多种通信方式。通过大端编码实现基础数据类型序列化,并支持结构体、字符串和数组的序列化处理。SOME/IP协议优化了带宽利用率,实现异构系统间的互操作,为汽车以太网提供高效的中间件解决方案。
2025-10-31 14:00:00
733
原创 【新人入门】Android基础知识(四):Android四大组件
摘要:本文介绍了Android四大核心组件:Activity负责用户界面交互,包含生命周期管理;Service用于后台长期运行任务,分启动式和绑定式;BroadcastReceiver处理全局广播,支持静态/动态注册;ContentProvider提供跨应用数据共享机制,通过URI标识数据源。各组件均详细说明了使用方法和生命周期特点,并配有示意图说明其工作原理。
2025-10-29 14:00:00
927
1
原创 【新手入门】Android基础知识(三):JNI(Java Native Interface)
JNI(Java本地接口)是Java与原生代码(C/C++)交互的编程框架,主要用于在Java应用中调用系统级功能。其核心要素包括:1)Native方法声明,需遵循JNI命名规则和数据类型映射;2)JNIEnv接口指针,提供操作Java对象的功能;3)jobject类型处理Java对象引用。JNI开发涉及基本类型(如jint对应int)和引用类型(如jstring)的映射转换,以及函数签名机制确保方法正确匹配。开发流程包括环境配置、C/C++代码编写、CMake构建和编译运行。JNI实现了Java与底层系统
2025-10-27 14:00:00
765
原创 【自存干货】Git 常用命令整理,从基础到实用一键收藏
在使用 Git 前,首先需要进行基础配置,确保提交记录能正确关联到用户信息。●设置用户名:git config --global user.name "用户名"该命令会将用户名配置为全局生效,所有 Git 仓库都会使用这个用户名提交记录。●设置用户邮箱:git config --global user.email "邮箱地址"邮箱需与代码托管平台的注册邮箱保持一致,便于身份关联。●查看配置信息:git config --global --list。
2025-10-25 19:35:32
677
原创 【新手入门】Android基础知识(二):Binder进程间通信,理解Binder工作原理以及Binder实体、Binder引用、Binder代理概念
Android Binder机制是一种跨进程通信(IPC)解决方案,采用C/S架构实现进程间通信。核心组件包括:服务端(Server)提供功能服务并在ServiceManager注册;客户端(Client)通过ServiceManager获取服务引用;内核Binder驱动负责数据传输。通信过程涉及三个关键对象:服务端的Binder实体、客户端的Binder代理以及内核的Binder引用。服务调用时,客户端通过代理发起请求,请求经Binder驱动转发至服务端处理,结果再沿原路径返回。该机制实现了进程间透明的方
2025-08-17 19:00:00
1165
原创 【新手入门】Android基础知识(一):系统架构
摘要:Android系统采用分层架构设计,底层以Linux内核为基础,提供安全、内存管理等核心服务。硬件抽象层(HAL)封装驱动细节,原生C/C++库提供图形渲染、多媒体等关键功能。Android运行时(ART)通过预编译优化应用性能。Java API框架层为应用开发提供Activity管理、UI组件等核心服务。应用层包含系统应用和第三方应用,通过SDK接口开发。各层通过系统调用和JNI技术实现互联,形成完整的Android生态系统。
2025-08-15 21:37:28
1556
原创 【新手入门】Android Studio 项目结构拆解,快速理解文件作用!
本文介绍了Android Studio项目结构的基本知识,包括两种视图下的目录组织方式。在【Project】视图中展示了真实的物理文件结构,包括源码目录、资源文件、Gradle配置等;【Android】视图则按功能逻辑分类,更贴近开发习惯。重点解析了app模块中的关键文件:build.gradle(模块构建配置)、AndroidManifest.xml(应用清单配置)以及res资源目录的组织方式。文章还说明了不同屏幕密度的资源适配方案,为Android开发新手提供了清晰的项目结构认知框架。
2025-08-13 22:30:08
1018
原创 【2025.08.06最新版】Android Studio下载、安装及配置记录(自动下载sdk)
本文介绍了Android Studio的安装与使用指南:1)下载对应系统版本的安装包;2)详细安装步骤,包括组件选择和路径设置;3)创建第一个项目的方法,包括模板选择和参数配置;4)常见问题解决方案,如Gradle构建失败、模拟器问题和SDK下载等。文章提供了从安装到项目创建的完整流程,并针对常见问题给出了实用解决方案。
2025-08-06 21:26:31
1283
原创 【面试八股总结】线程/进程同步问题
在线程并发执行的过程中,进程/线程之间存在协作的关系,例如有互斥、同步的关系。为了实现进程/线程间正确的协作,操作系统必须提供实现进程协作的措施和方法,主要的方法有两种:锁信号量。
2025-08-06 19:47:13
930
原创 【面试八股总结】GC垃圾回收机制
在Go中,线程是运行goroutine的实体,调度器的功能是把可运行的goroutine分配到工作线程上。Goroutine调度器和OS调度器是通过M结合起来的,每个M都代表了一个内核线程,OS调度器负责把内核线程分配到CPU的核上执行。
2024-09-16 17:56:31
1372
原创 【面试八股总结】Golang -- GMP模型
在Go中,线程是运行goroutine的实体,调度器的功能是把可运行的goroutine分配到工作线程上。Goroutine调度器和OS调度器是通过M结合起来的,每个M都代表了一个内核线程,OS调度器负责把内核线程分配到CPU的核上执行。
2024-09-16 16:47:12
749
原创 【面试八股总结】Redis持久化
Redis 实现了数据持久化的机制,这个机制会把数据存储到磁盘,这样在 Redis 重启就能够从磁盘中恢复原有的数据。
2024-09-13 22:23:31
1291
原创 【面试八股总结】MySQL日志:undo log、redo log、binlog
MySQL中存在三种日志:undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复;binlog (归档日志):是 Server 层生成的日志,主要用于数据备份和主从复制。
2024-09-04 19:04:02
1680
原创 【面试八股总结】C++内存管理:内存分区、内存泄漏、new和delete、malloc和free
C++内存管理:内存分区、内存泄漏、new和delete、malloc和free
2024-07-10 17:18:06
1100
原创 【面试八股总结】Redis数据结构及底层实现
Redis 提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)
2024-06-18 16:56:14
1492
原创 【面试八股总结】死锁:产生条件、预防死锁、处理死锁、避免死锁
进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执⾏,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。一个小城镇的银行家,他向⼀群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;来实现,从⼀个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁发生。Has 表示已拥有的资源数,Max 表示总共需要的资源数,Free 表示还有可以使⽤的资源数。
2024-06-06 10:54:45
1477
原创 【面试八股总结】锁:互斥锁、自旋锁、读写锁、乐观锁、悲观锁
读优先锁期望的是,读锁能被更多的线程持有,以便提高读线程的并发性,它的工作方式是:当读线程 A 先持有了读锁,写线程 B 在获取写锁的时候,会被阻塞,并且在阻塞过程中,后续来的读线程 C 仍然可以成功获取读锁,最后直到读线程 A 和 C 释放读锁后,写线程 B 才可以成功获取写锁。,表示该数据的版本号,每当数据被修改,版本号+1。当「写锁」没有被线程持有时,多个线程能够并发地持有读锁,这大大提高了共享资源的访问效率,因为「读锁」是用于读取共享资源的场景,所以多个线程同时持有读锁也不会破坏共享资源的数据。
2024-06-05 14:54:52
1371
原创 【面试八股总结】内存页面置换算法
并且LFU 算法只考虑了频率问题,没考虑时间的问题,比如有些页面在过去时间里访问的频率很高,但是现在已经没有访问了,而当前频繁访问的页面由于没有这些页面访问的次数高,在发生缺页中断时,就会可能会误伤当前刚开始频繁访问,但访问次数还不高的页面。为了完全实现 LRU,需要在内存中维护一个所有页面的链表,最近最多使用的页面在表头,最近最少使用的页面在表尾。」选择一个物理页,如果该物理页有被修改过(脏页),则把它换出到磁盘,然后把该被置换出去的页表项的状态改成「无效的」,最后把正在访问的页面装入到这个物理页中。
2024-06-04 19:53:40
828
原创 【面试八股总结】MySQL索引(二):B+树数据结构、索引使用场景、索引优化、索引失效
B 树是一个,每一个节点最多可以包括 M 个子节点,M 称为 B 树的阶,所以 B 树就是一个多叉树。叶子节点(最底部的节点)才会存放实际数据(索引+记录),非叶子节点只会存放索引;所有索引都会在叶子节点出现,叶子节点之间构成一个有序链表;非叶子节点的索引也会同时存在在子节点中,并且是在子节点中所有索引的最大(或最小)。非叶子节点中有多少个子节点,就有多少个索引;
2024-05-28 20:23:42
1123
原创 【面试八股总结】C++11新特性:智能指针
如果你拷贝⼀个unique_ptr,那么拷贝结束后,这两个unique_ptr都会指向相同的资源,造成在结束时对同⼀内存指针多次释放而导致程序崩溃。如果⼀块 内存被shared_ptr和weak_ptr同时引⽤,当所有shared_ptr析构了之后,不管还有没有weak_ptr引⽤该内存,内存也会被释放。,每当多⼀个指针指向该对象时,指向该对象的所有智能指针内部的引用计数加1,每当减少⼀个智能指针指向对象时,引用计数会减1,当。,⼀个非空的unique_ptr总是拥有它所指向的资源。
2024-05-09 22:24:09
1378
原创 【面试八股总结】Linux系统下的I/O多路复用
这在并发程序中会引起一个问题,假设一个线程在读取完某个socket上的数据后开始处理该数据,而在数据处理过程中该socket又有新的数据可读(EPOLLIN再次被触发),此时另一个线程被唤醒来读取这些新的数据,于是就出现了两个线程同时操作一个socket的局面。epoll使用一组函数完成任务,而不是一个函数,并且epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,不需要像select和poll一样每次调用都需要重复传入文件描述符集合。但对于大量的文件描述符,poll的性能也可能变得不够⾼效。
2024-04-22 21:59:25
1435
原创 【面试八股总结】排序算法(二):堆排、计数、桶排、基数
这样就把最大值放到了数组最后边。把数组长度n-1,再进行构造堆把剩余的第二大值放到堆顶,输出堆顶(放到剩余未排序数组最后面)。依次类推,直至数组排序完成。
2024-04-16 19:22:00
1409
原创 【面试八股总结】排序算法(一):冒泡、选择、插入、快排、希尔、归并
冒泡排序就是把小的元素往前交换或者把大的元素往后交换,比较相邻的两个元素,交换也发生在这两个元素之间。
2024-04-11 23:06:36
1327
1
原创 【面试八股总结】进程(二):进程调度与进程同步
参考资料 :小林Coding、阿秀、代码随想录当⼀个进程的状态发⽣改变时,操作系统需要考虑是否要换⼀个进程执行,这就需要⽤到“进程调度算法”。不同的调度算法具有不同的特性,因为使用以下标准比较处理机调度算法的性能: 每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。 非抢占式的调度算法,按照请求的顺序进行调度。 有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又
2024-04-11 21:07:30
1625
原创 【牛客SQL快速入门】高级查询
AVG()为平均值函数,通过对表中行数计数并计算其,求得该列的平均值。AVG() 可用来,也可以用来返回特定列或行的平均值。COUNT()函数为计数函数,可利用 COUNT()。MAX()返回指定列中的最大值。MAX在使用时,MIN()的功能正好与 MAX()功能相反,它返回。与 MAX() 一样,MIN()要求指定列名SUM()用来返回指定列值的和(总计)。在一些聚集运算中,容易出现结果为非整数的情况,这时候如果想要,语法格式为,其中value代表想要限制小数位数的字段,n代表想要限制的小数位数。
2024-04-09 16:13:34
1115
原创 【C++从0到1-黑马程序员】STL常用算法
algorithm>是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等。merge 容器元素合并,并存储到另一容器中。查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()二分查找法查找效率很高,值得注意的是查找的容器中元素必须是。将区间内满足条件的元素,替换成指定元素。两个容器元素合并,并存储到另一容器中。容器内指定范围的元素拷贝到另一容器中。将容器内指定范围的旧元素修改为新元素。
2024-04-06 21:58:40
890
原创 【面试八股总结】进程(一):基本概念、进程状态、进程控制与通信方式
一、什么是进程?参考资料 :小林Coding、阿秀、代码随想录一、什么是进程?1. 基本概念进程是具有独立功能的程序在一个数据集合上运行的过程,是。2. 进程控制块系统通过进程控制块PCB描述进程的进本情况和运行状态,进而控制和管理进程进程,,包括以下信息:进程描述信息:进程标识符、用户标识符;进程控制和管理信息:进程当前状态、进程优先级;进程资源分配清单:有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的I/O设备信息;
2024-04-04 18:53:12
1532
2
原创 【面试八股总结】传输控制协议TCP(三):拥塞控制、可靠传输与重传机制
慢启动是指TCP连接刚建立,一点一点地提速,试探一下网络的承受能力,以免直接扰乱了网络通道的秩序。
2024-04-02 15:27:21
1954
2
原创 【面试八股总结】传输控制协议TCP(二):报文段与流量控制
若此时接收方的应用进程以交互方式每次只读取一个字节,于是接收方又发送窗口大小为一个字节的更新报文,发送方应邀发送一个字节的数据(发送的 IP 数据报是 41 字节长),于是接收窗口又满了,如此循环往复。若发送应用进程把要发送的数据逐个字节地送到 TCP 的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。发送方 TCP 每次接收到一字节的数据后就发送。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。
2024-04-02 11:12:18
1345
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅