自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基础篇(一):volatile的使用(没你想得那么简单)

在没有详细了解volatile关键字作用之前,我一直都是认为加上这个关键字只是每次读取都会从内从中读取,而不是会被编译器优化。实际上只要变量可能被意外的修改,就需要把该变量声明为volatile。在实际应用中,只有三种类型数据可能被修改:外设寄存器地址映射在中断服务程序中修改全局变量在多线程、多任务应用中,全局变量被多个任务读写接下来,我们将分别讨论上述三种情况。外设寄存器嵌入式系统包含真正的硬件,通常会有复杂的外设。这些外设寄存器的值可能被异步的修改。举个简单的例子,我们要把一个8-bi

2021-11-30 13:28:33 481

原创 Python学习笔记(七):面向对象编程!(先到这里,最近没时间更了!)

一、面向对象面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝

2021-09-28 12:29:40 196

原创 Jeff学C++头大第七天:模板(结束!!!)

一、什么是模板模板是C++中自动生成代码的技术。二、为什么使用模板问题:实现一个通用的排序算法。 C语言:通过回调函数实现,使用者调用麻烦。 C++语言:函数重载,需要为多种类型实现一个第一版本,还会导致代码段增加。 C/C++语言:借助宏函数实现,类型检查不严格,频繁使用还会增加代码段。由于以上原因C++之父在C++中实现了模板技术,既能技术多种类也能兼顾严格的类型检查,能让程序员编程专注思考业务逻辑而不用关系数据类型。三、函数模板1、函数模板的定义templat

2021-09-20 23:10:27 165 1

原创 Jeff学C++头大第六天:文件相关操作及异常处理(马上更完了!)

一、虚析构当使用delete释放一个父类指针时(父类引用),不管指向的是父类对象还是子类对象,都只会调用父类的析构。当使用多态特性时,如果子类中有需要析构释放的资源,为了避免内存泄漏就需要把父类的析构函数设置为虚函数。当父类的析构函数为虚函数时,子类的析构会自动覆盖它而不用比较它们的名字,当通过父类或引用来释放子类对象时会自动调用子类的析构函数。二、文件流C++把对文件的操作封装到了类中。ifstream 输入文件流 ofstream 输出文件流fstream 输入/输出文件流1、

2021-09-20 23:06:47 130

原创 Jeff学C++头大第五天:类的继承(今天晚上把之前的C++学习笔记都更了吧!)

一、类的继承1、在解决问题时,先查看当前现在的类能否解决部分问题,如果可以则把旧的继承后再拓展来缩短解决问题的时间,降低解决问题的难度,继承就是为了让代码能够重复使用。2、当面临一个复杂问题时,可以先把问题进行分层,每层的类解决一部分问题,然后通过继承进行汇总,最终得到一个解决问题的类。二、继承的基本语法1、继承表一个子类可以继承多个父类,每个类的继承方式可以不同。class 子类:继承方式 父类1,继承方式 父类2,... //继承表{}2、继承方式 public

2021-09-20 23:04:20 57

原创 Python小记(一):import和from。。。import区别?

系统自带模块(库)```cppimport retarget = 'abc1234xyz're.search('(\d+)', target)但有时候,你可能会看到某些人这样写代码:```pythonfrom re import searchtarget = 'abc1234xyz'search('(\d+)', target)那么这两种导入方式有什么区别呢?我们分别使用type函数来看看他们的类型:>>> import re>>> ty

2021-09-20 22:51:52 718 1

原创 Python学习笔记(六):函数(二)!OVER!

引言Python代码运行的时候遇到函数是怎么做的,从Python解释器开始执行之后,就在内存中开辟里一个空间,每当遇到一个变量的时候,就把变量名和值之间对应的关系记录下来,但是当遇到函数定义的时候,解释器只是象征性的将函数名读如内存,表示知道这个函数存在了,至于函数内部的变量和逻辑,解释器根本不关心。等执行到函数调用的时候,Python解释器会再开辟一块内存来储存这个函数里面的内容,这个时候,才关注函数里面有哪些变量,而函数中的变量回储存在新开辟出来的内存中,函数中的变量只能在函数内部使用,并且会随着函

2021-09-17 13:30:03 356

原创 Python学习笔记(五):函数(一)!RUSH!!!!

函数定义def mylen(): """计算s1的长度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length)#函数调用 mylen()定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。   def 是固定的,不能变,他就是定义函数的关键字。   空格 为了将def关键字和函数名分开,必须空(四声),当然你可以

2021-09-15 13:18:07 97

原创 Python学习笔记(四):基础数据类型!(元组、列表、字典)

元组tupe元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。例:(1,2,3)(“a”,“b”,“c”)列表list列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = [‘alex’,123,Ture,(1,2,3,’wusir’),[1,2,3,’小明’,],{‘name’:’alex’}]列表相比于字符串,不仅可以储存不同的数据

2021-09-14 13:34:57 379

原创 Python学习笔记(三):基础数据类型!数字和字符串。

数据分类数字字符串列表元组字典集合数字int#bit_length() 当十进制用二进制表示时,最少使用的位数v = 11data = v.bit_length()print(data)布尔bool真 1 True。真 1 True。假 0 False。字符串str字符串的索引与切片索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推。a = 'ABCDEFGHIJK'print(a[0])print(a[3])print(a

2021-09-13 13:25:01 103

原创 Python学习笔记(二):循环语句!

流程控制语句if …else(强制缩进)"""if 条件: 满足条件执行代码else: if条件不满足就走这段"""AgeOfOldboy = 48if AgeOfOldboy > 50 : print("Too old, time to retire..")else: print("还能折腾几年!")Python的缩进有以下几个原则:顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进同一级别的代码,缩进必须一致

2021-09-11 13:29:32 112

原创 Python学习笔记(一):随手记记!

1、注释当行注释:# 被注释内容多行注释:’’‘被注释内容’’’,或者""“被注释内容”""2、名字定义方式#驼峰体AgeOfOldboy = 56NumberOfStudents = 80#下划线age_of_oldboy = 56number_of_students = 803、程序交互name = input(“What is your name?”)age = input(“How old are you?”)hometown = input(“Where is your

2021-09-10 13:24:36 92

原创 如何从零开始开发一款嵌入式产品!

1)产品需求文档:描述产品的特性2)功能需求文档:描述产品必须具备的功能3)工程说明文档:描述系统实现的方法和满足需求的手段4)硬件说明文档:对有关硬件进行描述5)软件或固件说明文档:描述特定处理器下设计微程序以及固件的方法6)测试说明文档:描述必须测试的项目和验证系统正常运行的方法需求定义需求定义用来描述产品的基本功能,对于公司来说,需求一般由该公司的市场销售部门或该公司的主要客户来制定;而对小公司或爱好者(就像armjishu.com里的爱好者一样),技术人员可以自己负责定义需求,并撰写成

2021-08-02 23:44:18 634

原创 if和switch(随便写写,爱看不看)

If与switch的使用场合1、 if可以是小数也可以是整数,switch只能是整数2、 当数据条件处于一个范围时,if比switch更实用3、 If语句可以表示范围,switch只能表示把这个区间所有的整数都列在case中4、 在选择语句比较少,表示小区间时,switch的运行速度更快;if适用于大区间的选择结构,总结:if语句更加灵活,可以表示整数和小数,适合大区间;switch语句只能表示整数,适用小区间。If和switch可以嵌套使用。if与switch在不同情况下的运行时长报告1、

2021-07-03 18:09:10 768

原创 史上最全C语言运算级优先表

运算符的优先级表一些容易出错的优先级问题

2021-02-18 16:58:04 533

原创 Jeff学C++头大第四天:运算符重载及智能指针(what?)

一、运算符重载C++中是运算符当作函数来看待,所以C++中的运算符可以重载,这样可以让类对象支持运算符,对类对象进行定制化操作。例如:string类就支持很多运算符来代替标准库中的函数。 = strcpy += strlen ==|!=|>=|<= strcmp二、双目录运算符重载假如:Test a,b; a+b操作可以调用两种函数Test的成员函数:a是触发者,b是参数Test operator+(cosnt Test& b) const{

2020-10-31 23:09:25 125

原创 Jeff学C++头大第三天:类中需要注意的一些常用成员变量及函数(单例模式的实现)!

一、this指针:指向访问成员函数对象的指针,默认是隐藏的,但也可以显示使用。对象调用成员函数时会自动计算它的内存地址传递给成员函数中的this,而在成员函数调用其它成员函数,会把对象的地址接力传递下去。构造函数中也有this指针,指向这个正在构造的对象,原因是构造函数执行前对象所需的内存就已经分配完毕,执行构造函数的目的是为了申请其它资源、做一些准备工作,对指针成员分配内存。思考题: 类的成员变量存储在每个类对象中(每个对象一份),成员函数存储在代码段中(所有的对象共享一份),那么成员函数是如

2020-10-11 19:55:09 335 1

原创 Jeff学c++头大第二天:类及对象(go!go!go!)

一、面向对象与面向过程:面向过程:关注解决问题的步骤,算法。面向对象:关注的是谁能解决问题,需要什么样的数据(成员变量),具备什么样的功能(成员函数)。抽象:找出或相像出一个能够解决问题的"对象",通过研究观察对象,找出c"对象"解决问题所必须的数据(属性)、功能(技能)。封装:把抽象的结果归纳为一个结构,然后实例化出结构变量,然后结构变量中的数据和功能相互作用最终解决问题。继承:在封装结构时,可以先分析结构需要的数据和功能现有的结构是具备,如果具备,可以继承现有的结构的代码,达到代码复用的目的

2020-10-08 09:30:49 108

原创 Jeff精品错题集第二弹C++(二):好多星星!

题一:C++类体系中,不能被派生类继承的有?正确答案: A B D 你的答案: A B (错误)构造函数静态成员函数非静态成员函数赋值操作函数解答:编译器总是根据类型来调用类成员函数。但是一个派生类的指针可以安全地转化为一个基类的指针。这样删除一个基类的指针的时候,C++不管这个指针指向一个基类对象还是一个派生类的对象,调用的都是基类的析构函数而不是派生类的。如果你依赖于派生类的析构函数的代码来释放资源,而没有重载析构函数,那么会有资源泄漏。所以建议的方式是将析构函数声明为虚函数。也就

2020-10-05 21:33:27 447 1

原创 Jeff学c++头大第一天:相关介绍及与c的区别!(雄起!)

一、C++介绍本贾尼·斯特劳斯特卢普,于1979年4月份贝尔实验室的本贾尼博士在分析UNIX系统分布内核流量分析时,希望有一种有效的更加模块化的工具。1979年10完成了预处理器Cpre,为C增加了类机制,也就是面向对象,1983年完成了C++的第一个版本,C with classes也就是C++C++与C的不同点: 1、C++完全兼容C的所有内容 2、支持面向对象编程思想 3、支持运算符、函数重载 4、支持泛型编程、模板 5、支持异常处理 6、类型检

2020-10-05 15:14:10 139

原创 C++关于运算符的重载(一览表)及函数重载!

运算符重载函数重载例题:2个同名成员函数,可以重载的是()?正确答案: B C 你的答案: A B D E (错误)int A::f() 和double A::f()void A::f(int) 和void A::f(short)void A::f() 和void A::f() constvoid A::f(int) 和void A::f(const int)const int A::f() 和int A::f()解答:A.B.E.选项:不同的返回值不能区分重载函数,只有函数名

2020-10-03 14:47:39 460

原创 Jeff精品错题集第二弹C++(一):喜迎国庆!

1、(C++部分)c++定义一个空的类CTest,CTest没有定义任何成员变量和成员函数,在32位机器上,以下结论正确的有:正确答案: B C 你的答案: A B (错误)对该类求sizeof,结果为0。给CTest添加构造函数,再对CTest求sizeof,结果为1.给CTest添加虚函数,再对CTest求sizeof,结果为4.给CTest添加虚函数,再对CTest求sizeof,结果为5.解答:2、#include “stdio.h”class Base{public:

2020-09-29 16:27:34 302 1

原创 Jeff的linux环境编程第七天终结篇:学线程看这一篇就够了!

一、基本概念1、线程就是进程的进程路线,它是进程内部的控制序列,或者说它是进程的一部分(进程是一个资源单位,线程是的一部分负责真正的执行)。2、线程是轻量级的,没有自己独立的代码段、数据段、bss段、堆、环境变量、命令行参数、文件描述符、信号处理函数、当前目录等资源。3、线程有自己独立的栈内存、线程ID、错误码、信号掩码等。4、一个进程中可以包含多个线程(多个执行路线),但至少有一个,这个线程要主线程,//默认情况下主线程结束其它线程会跟着一起结束。5、ps -T -p <pid> 或

2020-09-27 19:45:21 809 3

原创 Jeff的linux环境编程第六天:十分钟学会Socket套接字(喝过秋天的第一杯奶茶之后学点干货吧!)

一、套接字基本特点:socket是一种接口技术,被抽象成一个文件操作,可以让进程之间通信,也可以让不同计算机的进程通信(网络)。相关函数int socket(int domain, int type, int protocol);功能:创建套接字domain: AF_UNIX/AF_LOCAL 本地通信,进程间通信 AF_INET 基于IPv4地址通信 AF_INET6 基于IPv6地址通信type: SOCK_STREAM 数据流协议 SOCK_DG

2020-09-24 15:56:19 186 1

原创 Jeff的linux环境编程第五天:管道、共享内存、消息队列及信号量(重中之重!)

基本概念:什么是进程间通信:是指两个或多个进程之间交互数据的过程,因为进程之间是相互独立,为了协同工作必须交互数据。进程间通信的分类: 简单的进程间通信:信号、文件、环境变量、命令行参数。 传统的进程间通信:管道文件(有名管道、匿名管道) XSI进程间通信:共享内存、消息队列、信号量。 网络进程间通信:套接字传统进程间通-管道管道是UNIX系统中最古老的进程间通信方式,古老就意味着所有系统都支持,早期的管道都是半双工,现在有些系统的管道是全双工(但要假定系统仅支持半

2020-09-17 20:57:09 129 1

原创 Jeff的linux环境编程第四天:进程(我的offer在哪里!)

进程基本概念:1、进程与程序 程序就是存储在磁盘上的可执行文件,程序被加载到内存中开始运行叫进程。一个程序可以被多次加载生成多个进程,进程就是处于活动状态的计算机程序。2、进程的分类 进程一般分为三种类型:交互进程、批处理进程、守护进程。 守护进程一般都处于活跃状态,运行在后台,由于系统在开机时通过启动脚本自动创建的。3、查看进程 简单形式:ps 显示当前用户有控制终端的进程信息。 列表形式:ps auxw 显示进程详细信息 a 所有用户的有

2020-09-08 21:56:36 148 1

原创 Jeff的linux环境编程第三天:文件相关及信号(我的头好大啊!)

文件相关文件同步:1、在写入数据时内存与磁盘之间也有一个缓冲区,这种机制降低了磁盘读写次数,提高了读写的效率。2、但这种机制带来的后果就是磁盘中的数据与实写入的数据不匹配,系统提供了一个函数可以让缓冲区中的数据立即写入到磁盘。void sync(void);功能:把缓冲区中的数据同步到磁盘注意:并不等到数据同步完成后才返回,而是把缓冲区的数据加入到写入队列。int fsync(int fd);功能:把指定文件的内容从缓冲区同步到磁盘注意:会等到完全定稿磁盘才返回int fdatas

2020-09-05 16:28:12 151 1

原创 Jeff的linux环境编程第二天:内存管理与系统调用(要记的函数也太多了吧!)

一、内存管理用户层 STL 自动分配/释放内存 调用C++ C++ new/delete 调用C C malloc/free 调用POSIX POSIX brk/sbrk 调用Linux Linux mmap/munmap 调用内核 系统层 kernal kmalloc/vmalloc 调用驱动 driver get_free_page二、进程映像程序是存储

2020-09-01 15:28:35 235 3

原创 Jeff的linux环境编程第一天:系统介绍、环境变量表及库(暴风雨前的平静!)

环境编程内容介绍:内存管理文件管理信号处理进程管理进程通信线程管理线程同步网络通信UNIX系统介绍:最早版于1970年问世于贝尔实验室,作者是丹尼斯.里奇和肯.汤普逊。是最早的多用户、多任务、支持多种CPU架构,高安全性、高稳定性、高可靠性。既能构架大型关键性业务系统的商用服务器,也能支持嵌入式设备。MiniX基于微内核加载的类UNIX系统,名为MINIX(即小型的UNIX),并开放全部源代码给大学教学和研究工作,Linux之父林纳克斯,正是在受了MiniX的启发,才开发了Li

2020-08-27 20:54:38 232 2

原创 Jeff数据结构与算法收官之战:图及常见的十种算法(四天结束战斗!)

平衡二叉树:前提是有序的二叉树,它的左右子树的高相差不超过1,它的所有的子树也要满足这个要求。如果一个有序二叉树呈单支状(接近单支),它的效率接近链表,因此只有达到平衡时它的效率才最高。由于节点的位置受值的影响,因此只能进行调整,而不能强行修改。二叉树不平衡的基础原因: x y / \ / \ y t1 以为轴向右旋转 z x /

2020-08-26 19:41:50 1743 3

原创 Jeff的错题集(十一):Jeff出品,必属精品!

题一:在C语言中,定义一个返回值为指针的函数,以下函数定义错误的是()正确答案: D 你的答案: A (错误)A、static char retarray[20];char *func(int n){sprint(retarray,”%d”,n);return retarray;}B、char *func(int n,char *retarray){sprint(retarray,”%d”,n);return retarray;}C、char *func(int n){c

2020-08-24 18:25:24 735 1

原创 Jeff数据结构与算法自闭第三天:树相关(越学越迷糊!)

树型结构:1、树的基本概念 一种表示层次关系的(一对多)数据结构。 有且仅有一个特定的节点,该节点没有前驱,被称为根节点。 剩余的n个互不相交的子集,其中每个子集也都是一棵树,被称为根节点的子树。 注意:树型结构具有递归性(树中有树)。2、树的表示方法:倒悬树、嵌套法、凹凸法。3、树的专业术语: 节点:组成树的基础元素,同时它也是一棵树。 节点的度:该节点子树的数量。 树的度(密度):树中节点的数量。 叶子节点:节点的度为0的节点。

2020-08-21 21:58:47 288 3

原创 Jeff的错题集(十):最后一个暑假快结束了!

题一:char a[]={‘a’,‘b’,‘c’};char b[]={“abc”};数组a和数组 b 占用的内存空间大小不一样。请问这句话的说法是正确的吗?正确答案: A 你的答案: B (错误)正确错误解答:char b[]={“abc”}; 其实就是 char b[]=“abc”; 所以b占用的空间需要加上末尾的’\0’,长度为4.题二:若有以下程序struct st{ int n; struct st * nest; };struct st a[3]={ 5,&a[1

2020-08-20 21:01:48 1050 4

原创 Jeff的错题集(九):奥利给!

题一:下面哪些运算符不能被重载?()正确答案: A B C 你的答案: A B (错误)三目运算符“?:”作用域运算符“::”对象成员运算符“.”指针成员运算符“->”解答:不能被重载的运算符只有五个,分别是. (成员访问运算符)(成员指针访问运算符):: (域运算符)sizeof (长度运算符)?: (条件运算符)前两个运算符不能重载是为了保证访问成员的功能不被改变 ,域运算符和sizeof运算符的运算对象是类型而不是变量或者一般表达式,不具备重

2020-08-19 21:02:58 2134 2

原创 史上最全数据结构与算法概要:看这张表就够了!

2020-08-18 21:51:22 327

原创 Jeff数据结构与算法自闭第二天:链式表、功能受限的表及封装链表

链式表:元素的数据项: 数据域:可以是各种类型的若干个数据项 指针域:指向下一元素 由若干个元素通过指针域连接在一起形成链式表。不带头节点:第一个元素的数据域存储的就是有效的数据。 插入删除时可以会修改头节点指针,参数需要使用二维指针。 同时需要获取到上一个节点的指针,而头节点没有上一个节点,因此需要额外处理。带头节点:第一个元素不使用,仅仅是为了用它来指向下一元素。 进入插入、删除操作时会比不带头节点的链表方便。 注意:其它操作要从第二节点

2020-08-18 21:45:59 205

原创 Jeff的错题集(八):冲冲冲!

题一:如果两个关键字的值不等但哈希函数值相等,则称这两个关键字为同义词。( )正确答案: A 你的答案: B (错误)正确错误解答:散列函数:一个把查找表中关键字映射成该关键字对应的地址的函数,记为Hash(key)=Addr。(这里的地址可以是数组下标、索引、或内存地址等)散列函数可能会把两个或两个以上的不同关键字映射到同一地址,称这种情况为“冲突”,这些发生碰撞的不同关键字称为同义词。题二:int c[4][5],( *pc)[5];pc=c;那么,下列对数组C的元素引用正确的

2020-08-18 21:36:30 1021

原创 Jeff的错题集(七):洗刷刷,洗刷刷

题一:一组记录的排序码为(46,79,56,38,40,84),一趟排序的结果为(40,38,46,56,79,84),则采用的是()排序算法。正确答案: C 你的答案: D (错误)起泡直接插入快速2-路归并解答:A选项起泡算法:相邻元素两两比较,一个元素大于右侧相邻元素交换位置,否则位置不变。一趟排序为:46,56,38,40,79,84B选项直接插入:每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。一趟排序为:38,40,46,79,56,

2020-08-17 22:19:25 216

原创 Jeff的错题集(六):之前的存货,忘发了。

题一:在图B-1所示的平衡二叉树中,插入关键字48后得到一棵新平衡二叉树。在新平衡二叉树中,关键字37所在结点的左、右子结点中保存的关键字分别是()。图B-1正确答案: C 你的答案: B (错误)13,4824,4824,5324,90解答:123平衡二叉树全称是平衡二叉搜索树,所以本质是二叉搜索树左结点的权值比根节点小,根结点权值比右结点小,以此规则将48插到37的右子树里去。 插入48之后属于右左双旋转的情况,按照图示的方法先做右单旋转,再做左单旋转复制代码12

2020-08-17 18:35:15 570

原创 Jeff的错题集(六):今天是不想说话的一天!

题一:具有很多C语言的功能,又称过滤器的是?正确答案: C 你的答案: A (错误)Cshtcshawksed解答:csh:调用 C shell。Tcsh是csh的增强版,并且完全兼容csh。它不但具有csh的全部功能,还具有命令行编辑、拼写校正、可编程字符集、历史纪录、 作业控制 等功能,以及C语言风格的语法结构。AWK 是一种优良的文本处理工具, Linux 及 Unix 环境中现有的功能最强大的数据处理引擎之一, AWK 提供了极其强大的功能:可以进行样式装入、 流控制 、数学

2020-08-16 19:20:47 905 3

空空如也

空空如也

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

TA关注的人

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