- 博客(54)
- 收藏
- 关注
原创 zookeeper使用过程中出现的问题
Ubuntu 缺少相应的包 libzookeeper-mt-dev,安装完成即可。sudo apt-get install libzookeeper-mt-dev
2021-03-06 14:11:46 1062
原创 muduo安装和使用中遇到的问题及解决
2、“muduo/net/TcpServer.h: 没有那个文件或目录”而这个目录的位置在 path/to/build/release-install-cpp11/include/mudo 下 ; 所以将muduo目录链接到 /usr/include 下;另外还需要将静态库文件 path/to/build/release-install-cpp11/lib/.a* 链接到 /usr/lib/ 。参考链接...
2021-03-06 11:00:00 803
原创 VMware的磁盘格式化
在OS的文件系统中,需要预先将磁盘格式化为FAT32,从而进行相应的底层操作。然而对于VMware玩家而言,无法像操作物理硬盘一样直接进行格式化分区,因此需要间接进行相关的方法。一、准备工作一个虚拟机中的操作系统,本文选用了ubuntu。虚拟机中磁盘格式化工具,本文选用了gparted。实现OS和磁盘操作OS的磁盘共享操作,参考链接。由于实现OS的硬盘操作命令是基于IDE接口,因此磁盘类型和VMware配置文件也要相应的改成IDE,注意两个虚拟机的节点要设置为一致,配置文件修改的部分也需要一致。
2021-02-09 11:27:16 6819
原创 Legacy改UFEI的内核修改
一、内核头程序head.S田宇老师的《一个UEFI引导程序的实现》一文提出:“由于数据段描述符在GDT表中的位置无法确定,从而就无法直接通过段选择子对段寄存器进行赋值。不过,好在栈段寄存器SS指向的段是可读写的,那么将此段作为数据段是可行的。”基于此关键修改部分如下:#include "linkage.h".section .textENTRY(_start) mov %ss, %ax mov %ax, %ds mov %ax, %
2021-02-02 16:20:25 286 1
原创 U盘UEFI引导OS内核的小白教程
本文参考田宇老师的《一个UEFI引导程序的实现》一文,使用U盘进行UEFI的内核引导,在VMware虚拟机上运行内核。一、工具DiskGenius磁盘格式化工具。TianoCore EDK2开发环境(编译UEFI程序),本文直接使用了编译后的BootLoader.efi文件。资料链接,主要使用了引导文件Bootloader.efi和kernel文件夹编译后的内核文件kernel.bin。二、准备工作首先使用磁盘管理软件DiskGenius清空U盘扇区里的所有数据,然后选择磁盘->转换
2021-01-31 10:59:59 3071 3
原创 STM32F7 can只能发送不能接收
昨天将师弟的电机底层can驱动代码移植到项目中,发现原本已经调好的can底层代码出现了bug:can只能发不能收了orz。。。此处省略一万字。。。通过二分查找法,最终定位到出现bug的神秘代码如下:#define ENABLE 0x11 #define DISABLE 0x12 直接find in files,好家伙,直接与f7的hal库函数一枚举变量重名typedef enum { DISABLE = 0, ENABLE = !DISABLE} Function
2020-12-26 09:28:51 1561 2
原创 OS 13号#GP异常
运行任务切换的时候,发现如下错误,发现出现了#GP13号异常,段选择子是0,对应了将NULL(0)段选择子载入CS/SS导致#GP异常的原因:根据RIP的值以及反汇编文件发现出现异常的调用函数为__switch_to的最后一句。(省去一些中间程序。。)查看gdt表(物理地址0x10a240处),发现第39位置1,这一位应该是段基地址(16-39位为段基地址),此处发生了异常:默认的gdt表初始化如下:可以看到kernel code和data两者的第39位是都有区别的。..
2020-12-15 21:53:55 1172 1
原创 编译内核时出现对undefined reference to‘XXXX’
在Makefile出错文件的gcc那一行加上-fno-stack-protector选项,如:gcc -mcmodel=large -fno-builtin -fno-stack-protector -m64 -c printk.c
2020-12-11 22:25:01 1055
原创 计算机的几种地址
一、物理地址真实存在硬件上的,通过处理器的引脚直接或间接的和外部设备相连。分为IO地址和内存地址二、虚拟地址相对于物理地址的抽象地址。1、逻辑地址段和偏移的组合。格式为Segment:Offset。偏移为称为有效地址,程序中的变量地址即为有效地址。2、线性地址由逻辑地址组合而成:Segment<<4+Offset。...
2020-12-10 21:22:32 3401
原创 底层知识点
汇编语言格式分为intel和AT&T两种,格式略有不同。objump -b可以将目标程序反汇编成汇编语言。指令后加l表示32位,加q表示64位。c使用关键字asm声明代码是内嵌汇编语句。
2020-12-09 14:54:08 94
原创 socket api阻塞情况分析
connect:激发三次握手,仅在连接成功或出错时才返回。有四种结果。没收到响应会触发超时错误;收到RST触发硬错误;路由不可达错误;成功。listen:把一个未连接的套接字转换成一个被动套接字,指示内核应接受指向该套接字的连接请求。不存在阻塞。accept:由tcp服务器调用,用于从已完成连接队列头返回下一个已完成队列。如果已完成队列为空,进程被投入睡眠。(默认阻塞,可以强行设置为阻塞)close:把改套接字标记成已关闭,然后立即返回到调用进程,立即返回表明是非阻塞的。这里只是把相应描述符的引用计.
2020-09-08 09:39:17 225
原创 一些代码模板
快排很简单,partion把小于数组第一个元素放在左边,大于的放在右边。再通过递归对左右两边的元素做调整,即nlog(n).#include <iostream>#include <map>#include <vector>using namespace std;int Partition(vector<int> &nums, int begin, int end) { if (begin >= end ||
2020-08-03 16:37:39 204
原创 OJ中不给定输入数量的处理方式
1、计算一系列数的和输入数据有多组, 每行表示一组输入数据。每行不定有n个整数,空格隔开。(1 <= n <= 100)。示例:1 2 34 50 0 0 0 0代码:int main(){ string line; while (getline(cin, line)) { stringstream ss(line); int sum = 0, num = 0; while (ss >> num)
2020-08-02 16:07:39 839
原创 nginx知识点
nginx是多进程任务,分为master进程和worker进程。worker进程主要对网络事件进行处理,master进程不处理网络事件,只会管理worker子进程实现重启服务、平滑升级、更换日志等。master通过信号进行管理worker进程,worker进程设置信号处理函数设置标志位,实现优雅或强制关闭进程。nginx实现了自己的内存池、连接池。时间是缓存在内存中的。定时器的时间保存在红黑树,一定的时间周期内看是否会超时。惊群效应的解决:规定同一时刻只能由唯一一个worker子进程监听web端.
2020-08-01 11:05:19 117
原创 CSAPP学习
对象本质是位+上下文。处理器正常的加载和存储都要经过寄存器。显示器也是内存经寄存器才能显示。针对主存和处理器的运算差异,采用cache进行高速缓存。CPU包括高速缓存、寄存器文件以及、ALU。文件是对IO设备的抽象,虚拟内存是对主存和磁盘的抽象,进程是处理器、主存和IO设备的抽象。补码的必要性:原码和反码对0有不同解释。...
2020-05-23 20:14:33 311
原创 Effective C++笔记
万一编译器不允许static整数型class常量完成in class初值设定,可改用所谓的the enum hack补偿做法。取一个enum的地址是不合法的。关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量。c++以by value返回对象其实是一个副本而不是其自身。mutable关键字:表明成员变量可能总是会更改,即使在const成员函数内。当const和non-const成员函数有着实质等价的是现实,令non-const调用const版本可避免代码重复.
2020-05-10 11:26:19 155
原创 LUA学习
一、lua语言介绍lua主要负责逻辑,c代码实现功能。lua源代码make后生成lua和luac,lua可以运行lua文件,而luac可以生成out文件直接运行。二、lua基本语法环境ldt eclipse无变量的定义,默认是全局的,局部变量前加local两个‘-’是注释:“- -”例子function max(a, b) if a > b then ...
2020-04-26 16:47:52 199
原创 Redis设计与实现笔记
一、数据结构与对象1、SDS结构包含len、free、buf。len表示当前大小、free表示剩余大小,buff为内容。c字符串再增长和缩短操作都会内存重分配,需要系统调用,耗时。分配原则:修改后长度小于1M,多分配和len同样大小的未使用空间;大于时多分配1M空间。使得连续增长n次字符串所需的内存重分配次数从必定n次到至多n次。惰性空间释放:缩短时不会重分配内存。提供api手动释放。...
2020-03-27 18:27:18 135
原创 分布式知识点
1、CAP 定理一致性(Consistence) :所有节点访问同一份最新的数据副本可用性(Availability):每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据分区容错性(Partition tolerance) : 分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。2、BASE 理论BASE理论是对CAP中一致性和可用性...
2020-03-13 16:44:48 287
原创 Muduo学习
一、线程安全的对象生命期管理对象构造要做到线程安全,唯一的要求是在构造期间不要暴露this指针。如果this指针被泄漏给其他对象,那么别的线程有可能访问这个半成品对象,这会造成难以预料的后果。成员函数用来保护临界区的互斥器本身就是必须有效的,但析构函数会把互斥器销毁掉。share_ptr的使用:传递参数的时候以const reference方式传递,值传递的时候会增减计数,开销大。可以通过...
2020-03-10 15:56:52 221
原创 Linux常用命令、API
1、查找当前目录下名为abc文件find . -name abc2、查找当前目录下名字包括abc的文件grep “abc” -R .(当前目录,也可以加绝对路径)。3、创建新文件touch abc.c...
2020-02-23 20:35:54 482
原创 HTTP学习
一、简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。二、特点无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。媒体独立:这意味着,只要客户端和服务器知道如何处...
2020-02-22 12:27:26 274
原创 数据库知识点
一、左连接、右连接、内连接区别:左连接:左表不受限制和右表中连接字段相等的字段右连接:右边不受限制和左表连接字段相等的字段inner join(内连接或等值连接):只返回两个表相等的字段full join(全外连接):返回左右表的全部字段和两个表相等的字段二、聚簇索引和非聚簇索引:聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据 。非聚簇索引:将数据与索引分开存储...
2020-02-21 17:20:36 283
原创 操作系统知识点
一、进程调度几种方式1、先来先服务2、基于优先级调度:抢占/非抢占3、基于时间片调度,多级反馈队列调度算法4、短作业(进程)优先调度算法参考...
2020-02-21 11:41:28 805
原创 计算机网络知识点
一、select poll epoll区别select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1、 单个进程可监视的fd数量被限制,即能监听端口的大小有限。2、 对socket进行扫描时是线性扫描,即采用轮询的方法,效率较低当套接字比较多的时候,每次select()都要通过遍历FD_SETSIZE个Socket来完成调度,不管哪个Socket是...
2020-02-20 12:49:39 2838
原创 面经中的算法题总结
1、题目:有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如: var a = [100,99,98,1,2, 3],b = [1, 2, 3, 4,5,40];思路:当前数组a和数组b的和之差为: A = sum(a) - sum(b),a的第i个元素和b的第j个元素交换后,a和b的和之差为...
2020-02-19 19:39:50 853
原创 Shell 查看一个文件,大于10M删除,否则打印内容
在shell里“ ` ”是什么意思?命令替换,两个`中包含要替换的命令。#!/bin/shfilename = media.logfilesize = `ls -l $filename | awk '{ print $5 }'`maxsize = $((1024*10))if [ $filesize -gt $maxsize ]//大于10Mthen echo "$files...
2020-02-19 18:37:20 760 1
原创 mySQL常用语句
1、查询所有科目分数大于80的姓名SELECT name FROM grade GROUP BY name HAVING MIN(score) > 80;SELECT DISTINCT name FROM grade WHERE name NOT IN(SELECT DISTINCT name FROM grade WHERE score <=80);...
2020-02-18 12:47:57 54
原创 STL源码剖析学习
一、STL概论1、临时对象的使用刻意制造临时对象的方法,在型别名称之后直接加一堆小括号,并指定初值。如int(8)、vector<int>等。2、迭代器的前闭后开区间表示法3、仿函数的使用仿函数可以起到取代函数指针的作用。函数指针的缺点是无法持有自己的状态,也无法达到组件技术中的可适配性,也就是无法再将某些修饰条件加诸于其上而改变其状态。所谓的仿函数就是使用起来想函数一样...
2020-02-05 14:41:38 224
原创 c++和数据结构
1、左连接、右连接、内连接区别:左连接:左表不受限制和右表中连接字段相等的字段右连接:右边不受限制和左表连接字段相等的字段inner join(内连接或等值连接):只返回两个表相等的字段full join(全外连接):返回左右表的全部字段和两个表相等的字段2、聚簇索引和非聚簇索引:聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据 。非聚簇索引:将数据与索引分开存储...
2020-01-07 14:29:41 1485
原创 设计模式学习
基本原理设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。分类主要分为三类:创建型模式这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创...
2019-12-27 09:10:52 89
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人