摘要:
堆排其实就是选择排序,只不过用了完全二叉树特性。 堆排思想 : 利用完全二叉树特性建堆和重复选择调整来得到有序数组。 完全二叉树有什么特性呢? 节点左对齐 > 层序遍历不会出现空,可以用数组表达(访问效率高) 那么可以将它映射到数组上,并且遵循一个规律: 设i为当前节点索引, i->left = 2 阅读全文
摘要:
在线程并发执行的时候,我们需要保证临界资源的安全访问,防止线程争抢资源,造成数据二义性。 线程同步: 条件变量 为什么使用条件变量? 对临界资源的时序可控性,条件满足会通知其他等待操作临界资源的线程,类似信号。 场景:T-DAY展会排队参观/生产者消费者模型 条件变量是什么? 是一种同步机制,一个线 阅读全文
摘要:
相同点: 都是IO多路转接,都是一个线程能同一时间等待一堆描述符 不同点: 1.select接口使用不方便,每次调用完select都需要重新设置fd_set,因为输入输出未分离,返回的fd_set会将未就绪的fd清空; epoll接口使用方便,采用事件结构方式监控,简化了对多个监控结合的操作 , 输 阅读全文
摘要:
什么是多态? 多态就是不同对象对同一行为会有不同的状态。(举例 : 学生和成人都去买票时,学生会打折,成人不会) 实现多态有两个条件: 一是虚函数重写,重写就是用来设置不同状态的 二是对象调用虚函数时必须是指针或者引用 ps:没有这两个条件无法构成多态,很多笔试题都会利用这个陷阱让你上当! 实际上, 阅读全文
摘要:
学而不思则罔,思而不学则殆。 Linux下,进程状态有五种 : 运行态,可中断睡眠态,不可中断睡眠态,停止态和追踪态 运行态表示进程可执行或者正在执行, 可中断睡眠态表示进程被阻塞,等条件满足就会被唤醒,也可以提前被信号打断唤醒。 不可中断睡眠态和可中断睡眠态是一样的,但是他不会被信号打断。 停止态 阅读全文
摘要:
设计模式 : 大佬们总结出的是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 今天讲一讲,设计模式中创建型模式的单例模式(创建型模式还有工厂方法模式、抽象工厂模式、建造者模式、原型模式) 单例模式: 通俗地说,一个类只能创建一个对象 特点: 1.该模式下保证系统中该类只有一个实例 阅读全文
摘要:
经典排序三剑客: 归并,堆排,快排。 今天,图解归并,一步步带你手撕代码~ 归并排序,是采用"分而治之"思想的一个典型应用。 分治法精髓: 1.分 将问题分解成若干个规模更小的问题 2.治 将这些规模更小的问题逐个击破 3.合 将已解决的子问题合并,最终得到"母"问题的解 知道了归并思想,如图,归并 阅读全文
摘要:
引言: 集中一点,登峰造极。 先把流程图贴上来 : 为什么这么复杂? 因为TCP是可靠性传输。 确认可靠传输的前提: TCP连接管理机制 用TCP报文中标志位控制 : 三次握手(建立连接) : 两次连接请求(SYN)+两次应答(ACK) 流程 : 服务端进入LISTEN状态后,客户端向服务端发送SY 阅读全文
摘要:
进程通信 : 不同进程之间传播或交换信息 为什么要进程通信呢? 协同运行,项目模块化 通信原理 : 给多个进程提供一个都能访问到的缓冲区。 根据使用场景,我们能划分为以下几种通信 : 1.管道(匿名管道、命名管道) 因为是半双工通信(单向传递信息),所以叫"管道"。原理是在内核中创建一个缓冲区让通信 阅读全文
摘要:
不知哪个大佬说过: 关于字符串的题都可以用指针或哈希解决。 罗马数字转数字: 思想: 我们能观察到规律: 一般情况下,表示大的字母在前,小字母在后; 特殊情况下,小字母会在大字母之前,但是相应的,得到的值会是大字母-小字母 所以,我们可以用哈希表映射大小,利用哈希表比较所给罗马字母,一般情况直接+该 阅读全文