自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux内核源码学习(1)

一,内核简介

2018-07-04 13:59:54 1825

原创 操作系统-03(狄泰)

调试环境搭建Bochs专业模拟x86架构的虚拟机开源且高度可移植,由C++编写完成支持操作系统开发过程中的断点调试通过简单配置就能运行大多数主流的操作系统确定bochs的安装路径(which bochs)确定vgabios的安装路径(whereis vgabios)总结Bochs的启动配置文件是正确运行关键Bochs支持断点调试,调试命令与GDB类似...

2018-05-02 21:38:15 484

原创 C(#和##操作符)

概念#运算符用于在预处理期将宏参数转换为字符串在预处理期完成,因此只在宏定义中有效编译器不知道#的转换作用用法#define STRING(x) #xprintf("%s\n",STRING(Hello World!));##运算符用于在预处理期粘连两个标识符在预处理期完成,因此只在宏定义中有效编译器不知道##的连接作用用法#define CONNEC...

2018-04-26 11:46:28 4924 1

原创 C(#pragma)

简介#pragma用于指示编译器完成一些特定的动作#pragma所定义的很多指示字是编译器特有的#pragma在不同的编译器间是不可移植的 预处理器将忽略它不认识的#pragma指令不同编译器可能以不同的方式解释同一条#pragma指令;用法 #pragma parameter 不同的parameter参数语法和意义各不相同parameter实例m...

2018-04-25 15:09:43 425

原创 C(#error和#line)

用法#error用于生成一个编译错误消息 #error messagemessage 不需要用双引号包围#error是一种预编译器指示字#error可用于提示编译条件是否满足实例: #ifndef _cplusplus #error This file should be processed with C++ compiler. #endif#...

2018-04-25 15:02:08 472

原创 C(条件编译使用分析)

基本你概念条件编译是预编译提示命令,用于控制是否编译某段代码本质预编译器根据条件编译指令有选择的删除代码编译器不知道代码分支的存在if…else…语句在运行期进行分支判断条件编译指令在预编译期进行分支判断可以通过命令行定义宏 (1) gcc -D宏名=Value file.c (2) gcc -D宏名 file.c.#include的本质将已经存在的...

2018-04-23 10:15:08 851

原创 操作系统-02(狄泰)

主引导程序存储在主引导区(MBR)中的有效代码并不固化于硬件,属于操作系统代码的一部分启动操作系统内核的桥梁,由汇编程序编写代码总量不超过512字节(包括0x55aa)实现思路初始化:将关键寄存器的值设置为0(mov ax, 0);定义需要打印的数据(db “Hello, My.OS!”);打印预定义好的字符数据(int 0x10)总结主...

2018-04-22 09:14:08 510

原创 操作系统-01(狄泰)

定义:操作系统是直接运行于硬件之上的计算机程序计算机系统架构: BIOSBIOS是计算机上电第一个运行的程序BIOS首先检测硬件状态,检测通过后立即进行硬件初始化BIOS会在内存中建立中断向量表(提供硬件访问的方法)BIOS最后把控制权交由主引导程序执行BIOS不是软件,而是固件(固化于硬件中的程序,在硬件出厂前已经烧写固定)系统启动流程: BIOSBI...

2018-04-15 10:01:19 367

原创 读取二进制文件部分内容

#include <stdio.h>#include <stdlib.h>#define max_len 68760*16#define max_float_len 68760*4/**************************************total:12103523channel1:0xE1:68760channel2:0xE3:6...

2018-04-13 15:55:50 1136

原创 C(宏定义与使用)

宏表达式被预处理器处理,编译器不知道宏表达式的存在宏表达式用“实参”完全替代形参,不进行任何运算宏表达式没有任何的“调用”开销宏表达式不能出现递归定义宏的使用会带来一定的副作用...

2018-04-10 13:34:21 1336

原创 C++(对象模型分析)

一、运行时的对象退化为结构体的形式所有成员变量在内存中一次排布成员变量可能存在内存空隙可以通过内存地址直接访问成员变量访问权限关键字在运行时失效1、类中的成员函数位于代码段中,成员变量和成员函数在内存中分开存放 2、调用成员函数时对象地址作为参数隐式传递 3、成员函数通过对象地址访问成员变量 4、C++语法规则隐藏了对象地址的传递过程二、C++多态的实现原理当类中...

2018-04-10 08:47:14 333

原创 训练营笔记

Program SMaRT: Performance(高效)、Portable(可移植性)、Simple(简洁)、Maintainable(可维护)、Robustness(可靠)、Testable(可测试)编程规范- 模块 - 独立完成指定功能:接口(a.h),实现(a.c),数据(a_data)- 函数- 语句头文件- 编译过程: - 预处理:头文件插入...

2018-02-13 13:48:42 660

原创 smart_ptr

shared_ptr:会记录有多少个shared_ptr共同指向一个对象,一旦某个对象的引用计数变为0,这个对象会被自动删除make_shared:创建管理新对象的共享指针:make_shared需指定类型(’<>’中)及参数(’()’中),传递的参数必须与指定的类型的构造函数匹配template<class T,class... Args>shared_ptr<T> make_shared(Ar

2017-11-10 14:40:17 772

转载 补充

创建二叉树void CreateBiTree(BiTree* T){ TElemType ch; scanf("%c",&ch); if(ch == '#') *T = NULL; else { *T = (BiTree)malloc(sizeof(BiTNode)); if(!*T)

2017-09-21 11:12:13 216

转载 文章标题

算法:解决特定问题求解步骤的描述 好的算法:时间效率高和存储量低判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注最高阶项的阶数:输入规模越大,次要项影响越来越小算法事件复杂度:随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同;O(n) ;(n就是程序语句执行多少次)对数阶:2的x次方等n,x=O(logn)int count = 1;while(count

2017-09-20 00:18:38 285

转载 兆芯(9月19)

BIOS:基本输入输出系统,保存着计算机最重要的基本输入输出程序,开机后自检程序和系统自启动程序主要业务和目标是研发基于国产X86架构的CPU、GPU和芯片的X86架构:微处理器执行的计算机语言指令集BootLoader:嵌入式系统上电后执行的第一段代码,在嵌入式系统中,通常没有像BIOS那样的固件程序,因此bootloader是在操作系统内核运行之前执行,可以初始化硬件设备、建立内存空间映射,就是

2017-09-18 18:45:25 1456

转载 联发科(9月21)

C语言如何实现C++的成员函数C++成员函数是把this指针传进去,来操作类成员的;所以可以通过C语言的函数指针来实现项目中碰到的难题?具体如何解决?你在解决问题中主要扮演角色?性格缺点?内联函数内联函数是指用inline关键字修饰的函数;内联函数是在编译时将函数体嵌入到每个调用处,编译时,类似于宏替换,省去了函数调用和返回时的开销;但是内联函数具有普通函数的特征:参数检查,返回类型等等;对于

2017-09-18 14:41:24 534

转载 面试题(7)

1、malloc和free是标准库函数,new/delete是C++运算符

2017-09-16 15:12:04 200

转载 面试题(6)

链表的基本概念:表头结点:链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息数据结点:链表中代表数据元素的节点,包含下一个数据元素的指针和数据元素尾节点:链表中的最后一个数据结点,其下一个元素指针为空,表示无后继已知链表的头结点head,写一个函数把这个链表逆序Node* ReverseList(Node* head){ if(head == NULL || h

2017-09-15 21:18:46 328

转载 面试题(5)

1、介绍STLSTL(标准模板库)由容器算法迭代器组成;vector实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间;vector使用allocator来进行内存管理,使用3个迭代器来引用这段内存。vector的iterator其实就是T*的别名。在一个连续的内存里(数组),指针可以做算术运算,也支持[]操作,由此vector的iterator也支持算术运算,++、–、+=、-=、

2017-09-10 20:20:11 6207

转载 面试题(4)

斐波那契数列从第三项开始,每一项都等于前两项之和进行计算

2017-09-07 18:39:06 211

转载 面试题(3)

软件工程基础什么是软件工程:采用工程的概念、原理、技术和方法来开发和维护软件 软件是一种逻辑实体;软件开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件成本相当昂贵。需要投入大量的、复杂的、高强度的脑力劳动相当多的软件工作设计到社会因素。许多软件的开发和运行涉及机构、体制及管理方式软件开发原则:抽象、信息隐藏、模块化、局部化、一致性、完整性、可验证性软件危机:软件

2017-09-07 10:59:12 191

转载 面试题(2)

表有哪几种表的实现方式:顺序实现(顺序表:用一组地址连续的存储单元依次存储线性表的数据元素)和链式实现 使用顺序实现时,缺点在于需要预先分配表的大小,在超过原有大小后需要重新分配连续的空间;链式实现不用预先分配大小,但是需要额外的空间来存储节点指针以实现表的逻辑关系链表的分类:单链表、循环链表和双向链表 单链表:指的是链表中节点指针只能指向链表中的下一个元素或者为空双向链表:每个链表节点既

2017-09-05 23:48:38 232

转载 面试题(1)

C++的基础数据类型分为3种:整数型、浮点型和void型除了指针类型与long随操作系统字长变化而变化外,其他的都固定不变(32位和64相比)表示整数、字符和布尔值的算术类型合称为整形,整形根据修饰符细分为13种形式,它们的区分主要体现在类型名、长度和表示范围几个方面。C++常量:常量是不可改变的数据,主要分为整形常量,浮点型常量,字符型常量,字符串常量,转义字符常量(’\0nnn’),地址常

2017-09-02 11:38:08 367

转载 电话面试

1、良好的环境2、准备好工具3、控制自己的声音4、给出准确的答案5、及时感谢为什么想进本公司?适当的夸夸面试公司(大疆是全球领先的无人机和影像系统研发和制造商),希望能在嵌入式软件领域有所发展,希望能在贵公司多多学习你最喜欢这份工作的哪一点或者哪些方面?嵌入式软件开发与互联网不同的是,它是与底层硬件相关的,与实际电子产品息息相关,能够开发出实际的电子产品,这些都颇能符合我的兴趣描述一下自己的优缺点?

2017-09-02 09:43:55 349

转载 多线程与界面组件的通信

是否可以在子线程中创建界面组件?子线程如何对界面组件进行更新?子线程能够更改界面组件状态的本质是什么? 另一种可以间接让子线程更新界面组件的状态的方式

2017-09-01 18:53:53 371

转载 另一种创建线程的方式

如何灵活的指定一个线程对象的线程入口函数?

2017-09-01 12:08:58 164

转载 线程的生命期问题

C++对象有生命周期; 线程也有生命周期; QThread对象的生命周期与对应的线程生命周期是否一致?

2017-09-01 10:46:15 255

转载 信号与槽的连接方式

信号与槽的连接方式决定槽函数调用时候的相关行为

2017-09-01 10:03:43 470

转载 多线程中的信号与槽

如果程序中有多个线程,槽函数在哪个线程中执行? 只要函数体中没有访问临界资源的代码,同一个函数可以被多个线程同时调用,且不会产生任何副作用研究槽函数的具体执行线程意义:当信号的发送与对应槽函数的执行在不同线程中时,可能产生临界资源的竞争问题无论事件循环是否开启,信号发送后会直接进入对象所依附线程的事件队列;然而,只有开启了事件循环,对应的槽函数才会在线程中被调用什么时候需要在线程中开启事件循环?

2017-08-31 20:36:22 3459

转载 多线程间的互斥

临界资源每次只允许一个线程进行访问(读/写)的资源线程间的互斥(竞争)多个线程在同一时刻都需要访问临界资源QMutex类是一把线程锁,保证线程间的互斥利用线程锁能够保证临界资源的安全性小结临界资源每次只允许一个线程进行访问(读/写)线程锁(QMutex)用于保护临界资源线程只有获取锁之后才能访问临界资源锁被其他线程获取时,当前线程进入等待状态线程锁的获取和释放必须在同一个线程中

2017-08-29 23:53:17 615

转载 多线程间的同步

多线程编程的本质并发性是多线程编程的本质在宏观上,所有线程并行执行多个线程间相对独立,互不干涉同步:在特殊情况下,控制多线程间的相对执行顺序QThread类直接支持线程间的同步

2017-08-29 23:42:28 170

转载 Qt中的多线程编程

Qt中通过QThread直接支持多线程QThread是一个跨平台的多线程解决方案QThread以简洁易用的方式实现多线程编程Qt中的线程是以对象的形式被创建和使用 每一个线程对应着一个QThread对象在工程开发中terminate()是禁止使用的!terminate会使得操作系统暴力终止线程,而不会考虑数据完整性,资源释放等问题

2017-08-29 00:32:03 280

转载 进程与线程

进程:程序被加载到内存中执行后得到进程程序和进程的区别:程序是物理存储空间中的数据文件进程是内存中动态的运行实体联系一个程序可能对应多个进程一个进程可能包含多个程序值得注意:在当代操作系统中,资源分配的基本单位是进程;而CPU调度执行的基本单位是线程线程:进程内的一个执行单元操作系统中一个可调度的实体进程中相对独立的一个控制流序列执行时的现场数据和其他调度所需的信息深入理解

2017-08-28 23:29:30 275

转载 登录对话框的改进

验证码机制随机产生验证码用户识别后填写判断用户识别的正确性随机数计算机无法产生真正意义上的随机数计算机只能模拟随机数序列(伪随机数)随机种子决定每次产生的随机序列是否相同qsrand(seed);设置随机数种子int n = qrand()%100;

2017-08-28 18:50:54 227

转载 文本绘制技巧

QPainter拥有绘制文本的能力drawText(拥有多个重载形式)常见调用方式 p.drawText(10, 10, “D.T.Software”);p.drawText(0, 0 , 100 , 30, Qt::AlignCenter, “D.T.Software”)文本由小变大:在主窗口绘制文本(QWidget)将文本中心绘制于窗口中心(width()/2, height()/

2017-08-28 16:52:49 223

转载 图像处理与绘制

Qt图像类都继承自QPaintDeviceQPainter能够直接在图像上绘制图形QImage和QPixmap能够相互转换QImage:读取图像文件,直接进行像素级操作;内置简易图像处理相关算法QPixmap:最大限度利用硬件(显卡)加速,增强图像显示效果小结QImage适用于直接进行图像处理的场合QPixmap适用于在界面上显示图像的场合QPixmap能够对QImage图像进行转换Q

2017-08-28 11:34:26 280

转载 基础图形绘制

QPainter(Qt中的画家):能够绘制各种图形,拥有绘图所需的画笔(QPen),画刷(QBrush),字体(QFont)QPaintDevice(Qt中的画布):QPainter的绘图板,所有的QWidget类都继承自QPaintDevice重要规则:只能在QWidget::paintEvent中绘制图形void paintEvent(QPaintEvent* event){ QPai

2017-08-27 22:05:26 276

转载 模型视图中的委托

模型视图中的委托委托(Delegate)是视图中处理用户输入的部件视图可以设置委托对象用于处理用户输入委托对象负责创建和显示用户输入上下文 如:编辑框的创建和显示 委托中的关键函数createEditor 需要编辑数据时,创建编辑组件updateEditorGeometry 更新编辑器组件的大小setEditorData 通过索引从模型中获取数据setModelData

2017-08-27 11:14:12 249

转载 笔试

1、stdout,输出方式是行缓冲,输出的字符会先存放在缓冲区,等按下回车键时才进行实际的I/O操作 2、stderr:是不带缓冲的,使得出错信息可以直接尽快地显示出来

2017-08-26 13:43:03 167

空空如也

空空如也

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

TA关注的人

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