- 博客(238)
- 资源 (6)
- 收藏
- 关注
原创 float类型的存储
综上所述,17.625在内存中的存储格式是:01000001 10001101 00000000 00000000。遵循IEEE-754格式标准:一个浮点数由3部分组成:符号位s(1位)和、指数e(8位)、底数m(23位)格式:SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM。底数:因为小数点前必为1,只记录小数点后数。指数:实际为4,需加127为131 也就是10000011。float类型数字在计算机中用4个字节(32位)存储。符号:正数,所以是0。
2024-04-24 14:09:56
314
原创 时间复杂度
时间复杂度关注的是算法执行时间随输入规模增长的变化趋势,而不是具体的时间单位。算的平均情况,其实很明显最差的情况是每次分出来就是N-1和1个,相当于原本就是有序的序列来快排:O(N) = N + O(N-1) = N+N-1+O(N-2)= …n):对数阶,执行时间随输入规模的对数增长。二分查找,n->n/2->n/4->n/8 直到等于1。n),因为每次算的是平均划分的情况: 其实关键就是划分次数少了,从上述的N次划分降到了log。O(n^2):平方阶,执行时间随输入规模的平方增长。
2024-04-17 21:13:58
241
原创 交叉编译
要在 X86 的PC上编译出能够在 ARM上运行的程序,须明确告诉编译器,编译生成的可执行文件需要以ARM指令集的标准编码。为了流程变得简单,开发者们为不同的芯片开发了不同的编译器,如针对 ARM平台的 arm-linux-gcc,针对mips平台的 mips-linux-gnu-gcc。应用程序在嵌入式目标系统上运行,调试时,gdb调试在Host端。Linux发行版中有一个可以运行的gdb,但不能直接用来做远程调试,需要获取gdb的源代码包,针对arm平台作一个简单配置,重新编译得到相应gdb。
2024-03-25 10:26:10
373
原创 gdb命令
如果没有调试信息,提示 Reading symbols from main…(no debugging symbols found)…gdb调试需在可执行文件中加入源码信息:gcc –o main a.c -g。有调式信息 Reading symbols from main…2.通过set args命令指定程序的参数。1.通过run命令提供程序运行时的参数。
2024-03-21 19:18:21
406
原创 自动驾驶技术
安全技术包括实时监控和故障检测,通过传感器和算法监测车辆状态、传感器性能以及系统运行,及时响应异常情况,保障车辆和乘客的安全。感知技术是自动驾驶的基础,通过使用各种传感器(如雷达、摄像头、激光雷达等)来感知周围环境,包括道路、车辆、行人、交通标志等。决策与规划技术是基于感知结果,根据道路交通规则和行驶策略,决定车辆的行驶路径、时机和速度等。这项技术需要通过算法来解决车辆的路径规划、交通流预测、障碍物避让等问题,确保自动驾驶车辆能够在复杂的交通环境中安全行驶。
2024-03-13 14:51:18
673
原创 GetMemory 有关内存的思考题
因为GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。因为free(str)之后,str 成为野指针,if(str!因为GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原。请问运行Test 函数会有什么样的结果?篡改动态内存区的内容,后果难以预料,非常危险。请问运行Test 函数会有什么样的结果?本题和常见的交换a、b的值一样,需要用引用或指针作参数。请问运行Test 函数会有什么样的结果?请问运行Test 函数会有什么样的结果?
2024-03-13 11:04:26
532
原创 const关键字
const修饰函数,在函数内部不会修改类内的数据成员,不会调用其它非 const 成员函数。类成员函数中const:void fun() const;
2024-03-13 00:01:17
421
原创 OpenGL
这个上下文是一个非常庞大的状态机,保存了OpenGL中的各种状态,这也是OpenGL指令执行的基础。OpenGL的函数是类似C语言一样的面向过程的函数,本质上是对OpenGL上下文这个庞大的状态机中的某个状态或者对象进行操作。由于OpenGL上下文的属性,切换上下文往往会产生较大的开销,但是不同的绘制模块,可能需要使用完全独立的状态管理。因此,可以在应用程序中分别创建多个不同的上下文,在不同线程中使用不同的上下文,上下文之间共享纹理、缓冲区等资源。图层可以将页面上的元素精确定位。
2024-03-07 17:36:11
471
原创 什么是协程
多进程并发:当一个进程阻塞时,切换到等待执行的进程把 CPU 利用起来。为了更合理的利用 CPU 资源,内存划分为多块,不同进程使用各自的内存空间互不干扰,CPU 可以在多个进程之间切换执行,让 CPU 的利用率变高。为了实现 CPU 在多个进程之间切换,需要保存进程的上下文(如程序计数器、栈等),以便下次切换回来可以恢复执行。还需一种调度算法,Linux 中采用了基于时间片和优先级的完全公平调度算法。进程的上下文切换涉及到从用户态->内核态->用户态的过程,并且上下文中包含非常多的数据。
2024-03-02 18:09:50
502
原创 为什么构造函数不能是虚函数?
虚函数对应一个vtable(虚函数表),每个类对象用一个虚表指针指向。如果构造函数是虚函数,就需要通过 vtable来调用,可是对象还没有实例化,无法找到vtable,所以构造函数不能是虚函数。
2024-03-02 17:33:49
481
原创 为什么静态成员函数不能是虚函数
在有虚函数的类实例中,this指针调用vptr指针,指向的是vtable(虚函数列表),通过虚函数列表找到需要调用的虚函数的地址。总体来说虚函数的调用关系是:this指针->vptr->vtable ->virtual虚函数。静态函数没有this指针,无法找到虚函数。所以静态成员函数不能是虚函数。静态成员函数属于类本身(所有对象共用),不属于类中的任何一个对象。this指针指向的是每一个对象,不能用this指针来访问。但是对于虚函数的调用需求this指针。所以静态成员函数不能是虚函数。
2024-03-02 17:29:14
549
原创 为什么模板成员函数不能是虚函数
当一个类声明为虚函数时,它会在编译时生成一个虚函数表(vtable),vtable是一个数组,存储了类中所有虚函数的地址。虚函数是在基类中声明的、带有virtual关键字的成员函数,它可以被派生类重写(覆盖)并在运行时动态地绑定到相应的函数代码。虚函数提供了一种在运行时确定对象类型的机制,使得在调用虚函数时能够正确地调用到派生类中的对应函数。模板函数的实例化是在编译时进行的,而虚函数的调用是在运行时进行的。因此,模板函数的虚函数表在编译时是未确定的,无法在运行时进行虚函数的动态绑定。
2024-03-02 17:24:31
489
原创 uwsgi
nginx web服务器,更加安全,更好的处理处理静态资源,缓存功能,负载均衡,因此nginx的强劲性能,配合uWSGI服务器会更加安全,性能有保障。django 高级的python web框架,用于快速开发,解决web开发的大部分麻烦,可以更专注业务逻辑。uwsgi 和wsgi一样是通信协议,是uWSGI服务器的单独协议,用于定义传输信息的类型。运行在wsgi上的web框架有bottle,flask,django。uWSGI web服务器,实现了wsgi协议,uwsgi协议。
2024-02-20 16:08:34
445
原创 Supervisor
Supervisor是一个Linux下用Python写的进程集中管理工具,提供web页面管理,将非daemon程序变成deamon方式运行,对于daemon程序则不能监控。可以方便地对管理的进程进行启动、重启、关闭操作。安装后有两个可用的命令行supervisord 和 supervisorctl。启动:supervisord -c /etc/supervisord.conf。关闭:supervisorctl shutdown。
2024-02-20 15:42:50
518
原创 tcpdump
-i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议);-X 需要把协议头和包内容都显示出来(tcpdump会以16进制和ASCII的形式显示),便于协议分析;-e 在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议;-c Count 在收到指定的包的数目后,tcpdump就会停止;
2024-02-18 16:40:31
656
原创 RGB颜色值
最小值(0或 #000000)时为黑色;最大值(255或 #0xffffff)时为白色。通常遵循RGB/ARGB标准,使用时通常以“ # ”字符开头的8位16进制表示。透明度(Alpha)、红色(Red)、绿色(Green)、蓝色(Blue)#ff0000 红色 #00ff00 绿色 #0000ff 蓝色。RGB 从0x00到0xff表示颜色从浅到深。A 从0x00到0xff表示从透明到不透明。
2024-02-01 18:44:24
442
原创 MVC模式
Controller(控制器):作用于模型和视图之上。控制数据流向模型对象,并在数据变化时更新视图。使视图与模型分离开。Model-View-Controller : 模型-视图-控制器模式,用于应用程序的分层开发。Model(模型):代表一个存取数据的对象。也可以带有逻辑,在数据变化时更新控制器。View(视图):代表模型包含的数据的可视化。
2024-01-24 17:18:26
644
原创 车机联网
通过笔记本电脑,D-link给车机提供网络因为笔记本用的无线网络上网,将无线网络连接设置为共享设置后的效果本地连接属性设置Dlink连接电脑和车机;获取车机的动态ip(动态ip每次开关机都会变化,注意更新);车机是动态ip获取,在dos窗口输入命令: arp –a (地址192.168.137.255是不对的,需要在刷新一会)
2024-01-16 18:21:04
668
原创 C++ : 类
在类中定义的成员函数的规模一般都很小,而系统调用函数的过程所花费的时间开销相对是比较大的。调用一个函数的时间开销远远大于小规模函数体中全部语句的执行时间。为了减少时间开销,如果类中定义的成员函数中不包含循环等控制结构,系统会自动将类的成员函数作为内置函数来处理。如果只用前置声明(不包含头文件"A.h"),那么类B的成员变量A a编译不过。类B的成员变量可以用到声明A指针的变量:A *a。一个对象所占的空间大小只取决于该对象中数据成员所占的空间,而与成员函数无关。类的数据成员不能在声明类时初始化。
2024-01-11 17:05:05
453
原创 数据类型转换
涉及到面向对象的多态性,应用于运行时类型识别与检查。将一种类型的指针转换为另一种类型的指针,主要用来父类型和子类型之间的转换。去除指针或引用的const属性(编译时进行类型转换), 不能进行不同类型之间的转换。脱常,只能用于指针和引用。
2024-01-05 10:54:31
344
原创 虚函数
设计抽象类的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。作用:运行时多态,基类中提供虚函数的实现,为子类提供默认的函数实现。C++接口(使用抽象类来实现):接口描述了类的行为和功能,而不需要完成类的特定实现。作用:在基类中不能对虚函数给出有意义的实现,它的实现留给该基类的派生类去做。包含纯虚函数的类,被称为抽象类。类中至少有一个函数被声明为纯虚函数,则这个类是抽象类。如果抽象类的子类需要被实例化,则必须实现每个虚函数。
2024-01-05 10:45:18
534
原创 重载、重写、隐藏
指同一类内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。派送类的方法名、参数列表、返回值类型,同基类中被重写的函数一致。只有函数体不同,派生类调用时会调用派生类的重写函数。指派生类的函数屏蔽了与其同名的基类函数。派生类的方法与基类的方法相同,参数也相同,但是基类方法没有virtual,基类函数被隐藏。派生类的方法与基类的方法相同,但是参数不同,基类函数被隐藏。重写的基类中被重写的函数必须有virtual修饰。
2024-01-02 17:49:09
427
原创 模板模式
模板模式抽象类定义了执行它的方法的方式。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。通用方法在抽象类实现,特有方法在子类来实现。定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。模板是泛型编程的基础,泛型编程是以一种独立于任何特定类型的方式编写代码。
2023-12-28 17:43:19
533
原创 策略模式
策略模式就是把各个平等的具体实现进行抽象、封装成为独立的算法类,然后通过上下文和具体的算法类来进行交互。各个策略算法都是平等的,地位是一样的,正是由于各个算法的平等性,所以它们才是可以相互替换的。在软件开发中也常常遇到类似情况,当实现某一个功能存在多种方法,可以根据环境或者条件的不同选择不同的方法来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序等。用途:在有多种算法相似的情况下,使用 if…策略模式的着重点不是如何来实现算法,而是如何组织和调用这些算法,从而让我们的程序结构更加的灵活、可扩展。
2023-12-28 15:49:18
438
原创 建造者模式
指挥者负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可调用建造者对象的部件与装配方法,完成发展对象的建造。建造者模式主要是将建造过程与具体表示分离,做到了建造过程的抽象,当有新的对象要创建并且建造过程相同,可以继承建造类实现自己的具体表示即可。具体建造者实现了抽象建造者接口,实现各个部件的构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。产品角色是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。
2023-12-26 11:45:41
673
原创 代理模式
代理模式是程序设计重要的一种模式。为其他对象提供一种代理以控制对这个对象的访问,这样实现了业务和核心功能分离。虚拟代理是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,使其只有在真正需要时才被创建。Proxy Pattern,一个类代表另一个类的功能。
2023-12-25 18:16:24
354
原创 工厂模式
工厂模式属于创建型设计模式。工厂模式通过提供一个公共的创建对象的接口,可以在不暴露对象创建逻辑的情况下创建对象,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决接口选择的问题。工厂模式分为三种类型:简单工厂、方法工厂和抽象工厂,其本质就是对获取对象过程的抽象。你需要一辆汽车,可以直接从工厂里提货,而不用关心它具体是怎么实现。
2023-12-25 11:54:51
453
原创 单例模式 Singleton
所以线程A执行开辟内存,对instance赋值,线程B执行到这发现instance不为空,直接返回insatnce,返回一个未经构造的对象,那后面访问这个未经构造的对象就会出错。1.构造函数是私有的。声明一个对象时编译器会调用构造函数,调用通常是外部的,不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访问私有成员,所以会导致编译出错。某个线程调用该函数,没有执行完即对象instance还没被创建,另一个线程也执行,发现instance为空,那也执行创建instance。
2023-12-22 20:19:41
466
原创 观察者模式 Observer
观察者模式属于行为型模式。在程序设计中,观察者模式通常由两个对象组成:观察者和被观察者。当被观察者状态发生改变时,它会通知所有的观察者对象,使他们能够及时做出响应。事件发生了变化,被观察者从容器中得到注册的观察者,将变化通知观察者。将自己注册到被观察对象中,被观察对象将观察者存放在一个容器里。三要素:观察者(Observer),被观察者,事件。
2023-12-22 19:41:47
1318
原创 core文件
限制core文件大小:ulimit -c 1024 将core文件限制为1024KB。如果生成的信息超过了将会被裁剪,生成一个不完整的core文件,调试此core文件时,gdb会提示错误。查看core文件的生成开关:ulimit -c,若结果为0,则表示关闭了此功能,不会生成core文件。core文件的大小不受限制:ulimit -c unlimited。默认为输入可执行文件运行命令的同一路径下。
2023-12-21 11:21:45
530
原创 什么是引用
引用是 C++ 相对于C语言的又一个扩充。引用是变量(也可以理解为数据)的一个别名,初始化为某个变量,就可以用引用找到变量的数据。2.引用被初始化为一个对象后,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。对于普通变量,传引用效果不明显;对于类对象,效率很高。传引用等价于扩大了源对象的作用域。3.指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。1.引用必须在创建时被初始化;指针可以在任何时间被初始化。
2023-12-20 17:30:06
437
原创 栈(stack)
栈(stack)是一种用于存储数据的简单数据结构,与链表和顺序表很相似,最大的区别在于数据的存取操作。栈的插入和删除操作只允许在一端执行,因此把允许操作的一端称为栈顶,不允许操作的称为栈底。插入元素称为入栈(push),删除元素称为出栈(pop),没有元素的栈则是空栈。
2023-12-20 15:58:51
648
原创 队列(Queue)
typedef struct QueueNode //队列节点结构//节点数据//节点指针}QueueNode;typedef struct QueuePtr //队列的链式结构//队头指针//队尾指针}LinkQueue;
2023-12-20 11:49:16
514
原创 对链表进行插入排序
对于链表而言,插入元素时只要更新相邻节点的指针即可,不需要像数组一样将插入位置后面的元素往后移动,因此插入操作的时间复杂度是 O(1),但是找到插入位置需要遍历链表中的节点,时间复杂度是 O(n),因此链表插入排序的总时间复杂度仍然是 O(n*n)如果是数组的插入排序,则数组的前面部分是有序序列,每次找到有序序列后面的第一个元素(待插入元素)的插入位置,将有序序列中的插入位置后面的元素都往后移动一位,然后将待插入元素置于插入位置。否则,从链表的头节点开始往后遍历链表中的节点,寻找插入 curr 的位置。
2023-12-19 14:50:57
625
Design pattern.asta
2020-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人