自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 资源 (2)
  • 收藏
  • 关注

原创 cookies和session的区别【面试】

Cookie和Session都是为无状态的HTTP协议下保持用户状态的技术。

2024-07-18 18:02:19 381

原创 C++中struct与class区别,C与C++中struct区别

C++中struct与class区别,C与C++中struct区别

2024-07-12 20:08:45 376

原创 C++ this指针的作用

C++ this指针的作用

2024-07-04 17:53:05 465

原创 c++ 联合(Union)的特性和使用

联合(Union)是一种特殊的数据结构,允许在同一内存位置存储不同的数据类型。

2024-07-04 17:50:02 204

原创 http 状态码主要有哪些?【面试】

HTTP 协议在互联网上用得特别广,在浏览网页的时候经常会碰到它的状态码。这状态码其实就是服务器给客户端请求的一个回应,通过它我们就能知道请求处理得怎么样了。

2024-07-04 14:36:39 632

原创 C++线程安全是如何保证的?线程不安全是如何出现的?有什么处理方案呢

【代码】C++线程安全是如何保证的?线程不安全是如何出现的?有什么处理方案呢。

2024-07-02 20:52:21 480

原创 MVC(Model-View-Controller)模式

模型(Model)负责管理数据,视图(View)负责显示界面并接收用户输入,控制器(Controller)负责协调视图和模型之间的交互。用户通过界面输入数据后,控制器负责更新模型中的数据,并通知视图显示相应的消息。

2024-07-02 14:21:19 577

原创 给你一个5L和三L的桶,怎么得到4L的水

给你一个5L和三L的桶,怎么得到4L的水

2024-07-01 11:21:31 91

原创 C++中main函数的参数、返回值分别什么意思?main函数返回值跟普通函数返回值一样吗?

在C++中,main函数是程序的入口点,即程序开始执行的地方。main函数可以有两种形式的签名(signature):标准的main带有参数的main。

2024-06-28 11:16:48 199

原创 C++ 参数传递方式有哪些?它们有什么区别【面试】

在选择传递方式时,需要根据具体情况考虑是否需要修改实参、传递的数据类型和大小以及性能方面等进行考量。

2024-06-27 15:11:20 262

原创 static在C/C++中的作用

static在C/C++中的作用

2024-06-26 10:43:31 228

原创 const的作用[C++面试]

修饰变量,说明该变量不可以被改变

2024-06-26 09:38:36 305

原创 面向对象设计原则(SOLID原则)C++

面向对象设计原则(SOLID原则),每个原则都有其独特的重要性和应用场景。这些原则可以帮助你在写代码时,设计出更加灵活、可维护和可扩展的C++类和系统架构。

2024-06-25 20:17:07 587

原创 C++观察者模式

观察者(Observer)模式 定义如下:是一种对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

2024-06-24 10:59:34 481

原创 C++堆栈的区别?两者大小有限制吗?【面试】

堆和栈在C++中扮演着不同的角色,堆提供了更大的灵活性和空间,但需要程序员更加小心地管理内存。栈则提供了快速的局部变量存储,但空间有限且不可控制。

2024-06-21 14:21:10 396

原创 socket通讯可以直接传地址吗?【面试】

在网络编程中,socket 通信不直接传输内存地址。这是因为网络通信是在不同的内存空间和可能不同的计算机之间进行的,内存地址在不同的进程和机器上没有意义。当你创建一个socket时,你会指定它是一个客户端(主动发起连接)还是服务器(等待连接)。此外,如果你需要在两个进程之间共享内存,你可以考虑使用共享内存或其他进程间通信(IPC)机制,但这些机制与socket通信是不同的概念,并且通常用于同一台机器上的进程间通信。例如,如果你有一个C++对象,你不能直接通过网络发送这个对象的内存地址。

2024-06-17 15:50:32 497

原创 C++ 二叉搜索树【面试】

二叉搜索树是一种非常有效的数据结构,用于快速查找、插入和删除操作。它的核心特点是每个节点的值都大于其左子树上所有节点的值,小于其右子树上所有节点的值。这保证了二叉搜索树可以进行中序遍历,从而获得有序的数据序列。

2024-06-14 17:32:40 598

原创 C++ 二分查找法【面试】

二分查找是一种高效的搜索算法,适用于有序数组。它的基本思想是将目标值与数组中间的元素进行比较。如果目标值大于中间元素,搜索范围缩小至数组的右半部分。二分查找法是一种在有序数组中查找特定元素的算法,其时间复杂度为O(log n)。:解释二分查找的基本原理,包括如何确定中间位置,以及如何根据中间值与目标值的比较结果更新搜索范围。如果数组中有重复元素,二分查找将返回任意一个匹配的索引。:讨论二分查找的时间复杂度为O(log n),其中n是数组的大小。:讨论函数的返回值,即找到目标时返回索引,未找到时返回-1。

2024-06-14 16:53:33 560

原创 HTTP中get与post的区别?在传输数据类型上有什么区别?【面试】

GET和POST是HTTP协议中两种基本的请求方法,它们在数据传输和使用场景上有明显的区别。GET请求通过URL传输数据,适合少量和非敏感信息的传输,且具有幂等性和可缓存性。POST请求则通过请求体传输数据,适合大量数据和敏感信息的传输,但不具有幂等性,且不会被浏览器缓存。GET请求的数据长度受限,通常只传输ASCII字符,而POST请求可以传输包括二进制数据在内的各种数据类型,如表单数据、JSON、XML等。

2024-06-14 15:23:44 554

原创 TCP如何保证数据传输的稳定性和可靠性

发送方为每个字节分配序列号,接收方通过确认号来确认接收到的数据,并指示期望接收的下一个字节。如果接收方收到的数据有缺失,它会发送相同的确认号,请求发送方重传丢失的数据。此外,TCP使用流量控制机制,如滑动窗口,来控制发送方的数据流量,确保接收方不会被大量数据淹没。确认号在这里起到了关键作用,它不仅确认了数据的接收,也隐含了流量控制的信息。确认号不仅用于确认数据的接收,还隐含了流量控制的信息。当接收方返回一个确认号时,它同时也在告知发送方接收窗口的大小,即接收方还能接收多少数据。

2024-06-14 14:47:19 448

原创 QT与VS的区别?使用QT的好处?

总结来说,Qt 是一个强大的跨平台应用程序开发框架,而 Visual Studio 是一个功能丰富的集成开发环境,它们可以结合使用(Qt 可以作为 Visual Studio 的插件),也可以根据项目需求单独使用。

2024-06-13 14:50:21 752

原创 C++算法-青蛙跳台阶【面试】

对于更高的台阶,到达那里的方法数是到达前一阶和前两阶台阶的方法数之和,因为青蛙可以选择从这两个位置跳过来。我们从第三阶台阶开始,逐步计算直到第。"青蛙跳台阶"问题是一个经典的递归问题,也与斐波那契数列有关。问题是这样的:一只青蛙站在一个n阶台阶上,它每次可以跳1阶或2阶,问青蛙跳到顶端总共有多少种跳法。这种方法避免了递归方法中的重复计算,时间复杂度是O(n),空间复杂度也是O(n)。"青蛙跳台阶问题可以通过动态规划来解决。来存储子问题的解,避免了重复计算。阶台阶的跳法数等于到达。阶台阶的跳法数之和。

2024-06-13 14:38:33 265

原创 什么是僵尸进程,如何回收

当一个子进程终止时,操作系统会保留该进程的一些信息(如进程ID、退出状态等),直到父进程读取这些信息。这段时间内,该子进程处于一个特殊的状态,称为僵尸进程(Zombie Process)。进程已经终止,但仍在进程表中占有一个条目。它的资源(如内存)已被释放,但进程控制块(PCB)等信息仍然保留。等待父进程调用wait()或waitpid()来获取它的终止状态。

2024-06-13 11:20:49 386

原创 SendMessage和PostMessage的区别【面试】

同步与异步: SendMessage 是同步的,调用线程会等待消息被目标窗口处理完毕。而 PostMessage 是异步的,它将消息放入消息队列后立即返回,不等待消息处理。返回值: SendMessage 会返回目标窗口窗口过程处理消息的结果,而 PostMessage 总是返回 TRUE ,仅表示消息已入队列,不保证已被处理。性能影响: SendMessage 可能因为等待消息处理而影响性能,而 PostMessage 由于其非阻塞特性,对性能的影响较小。

2024-06-13 01:06:40 488

原创 C++生产者消费者模型代码【面试】

在C++中,我们可以使用std::mutex和std::condition_variable来实现生产者-消费者模型。std::mutex用于保护共享资源,确保同时只有一个线程可以访问缓冲区。std::condition_variable用于在生产者生产数据后通知消费者,以及在消费者等待数据时挂起。生产者将数据放入缓冲区,并使用notify_one唤醒一个等待的消费者。消费者在缓冲区空时使用wait挂起,直到被生产者通知。这个模型确保了线程安全和有效的线程间通信。

2024-06-12 21:59:22 131

原创 C++:调整数组顺序使奇数位于偶数前面【面试】

要解决这个问题,我们可以使用双指针技术。首先,我们初始化两个指针,一个指向数组的开始,另一个指向数组的末尾。然后,我们分别从数组的两端向中间扫描,左边的指针寻找偶数,右边的指针寻找奇数。一旦找到,我们就交换这两个数的位置。这种方法不需要额外的存储空间,并且时间复杂度为O(n),是一种高效且常用的解决方案。在C++,如果要调整数组顺序使所有奇数位于偶数前面,这里提供一种简单且常用的方法:双指针技术。这种方法保证了所有的奇数在数组的前半部分,偶数在后半部分,满足了题目要求。这段代码中,我们使用了两个指针。

2024-06-12 21:51:21 279

原创 简单说一下STL中的map容器的特点、底层实现和应用场景【面试】

适合用于需要有序数据结构的场景,如实现快速查找、自动排序的数据存储,或者进行范围查询。它的应用场景广泛,包括但不限于唯一键值的快速检索、维护有序数据集合等。是C++ STL中的一个关联容器,它使用红黑树作为底层数据结构来维护元素的有序性。它的主要特点包括自动排序、唯一键值保证、以及对数时间复杂度的主要操作。

2024-06-12 21:34:15 475

原创 C和C++动态分配内存方法是什么,有什么区别?本质区别是什么?【面试】

操作符提供了对动态内存生命周期管理的抽象,与C语言更底层的内存管理方式相比,这种抽象允许开发者关注于对象级别的操作,而不是内存块的管理。这可以看作是C++在动态内存管理方面与C的本质区别。不仅仅是分配和释放内存,它们还负责对象的构造和析构,这是C语言所不具备的。C的内存分配机制与面向对象的特性紧密集成。C和C++在动态内存分配上提供了不同的机制和方法。

2024-06-12 21:28:07 804

原创 Linux内核同步机制有哪些?【面试】

Linux内核提供了多种同步机制来处理并发访问。自旋锁适用于快速持有和释放的情况,而互斥锁适用于可能长时间持有的场景。读写锁允许多个读者同时访问资源,但写者需要独占访问。信号量用于控制对资源的访问数量。完成量和等待队列常用于等待某个条件的发生。屏障用于同步多个线程。顺序锁和RCU是针对特定场景优化的同步机制。此外,还有下推锁、定时锁和Futex等其他同步工具。选择正确的同步机制对于提高系统性能和保证数据一致性至关重要。在Linux内核中,同步机制是确保在多线程或多任务环境中对共享资源正确访问的关键技术。

2024-06-12 21:22:23 403

原创 Release和Debug的区别?Release有什么好处?【面试】

Debug和Release是编译配置的两种模式,主要用于不同的目的。Debug模式主要用于开发过程中,它不包含优化并提供完整的调试信息,方便开发者查找和解决问题。而Release模式则用于最终产品的发布,它经过高度优化,减少了调试信息,以提高程序的性能和减小文件大小。使用Release模式的好处包括更快的运行速度、更高效的资源使用和更好的用户体验,适合生产环境部署。

2024-06-12 21:17:44 904

原创 C++指针和引用的区别

也可以在运行时改变指向。引用是变量的别名,必须在声明时初始化,并且不能改变所引用的对象。指针需要手动管理内存,而引用则不需要。此外,指针常用于动态内存分配和数组,而引用则常用于函数参数,以提高效率并允许修改原始数据。在C++中,指针和引用是两种不同的特性,它们在程序中扮演不同的角色。: "在C++中,指针是存储变量地址的变量,可以是。

2024-06-12 21:12:30 241

原创 MFC socket编程-服务端和客户端流程

MFC 提供了一套丰富的类库来简化 Windows 应用程序的网络编程。

2024-06-12 20:52:26 776

原创 MFC序列号输入框

在MFC(Microsoft Foundation Classes)中创建一个对话框的过程,该对话框用于输入序列号(SN),并具有一些特定的行为,比如自动聚焦到输入框、验证输入规则以及根据输入情况关闭对话框。

2024-06-12 17:31:25 1196

原创 C++ STL std::map的实现机制【面试】

简述std::map的实现机制

2024-06-09 11:10:53 179

原创 new操作符和数组直接初始化比较

在C++中,new操作符和数组直接初始化是两种不同的内存分配和初始化方式。下面是两种方式的比较

2024-06-06 20:49:37 198

原创 二叉树的非递归后序遍历

二叉树的后序遍历是一种深度优先遍历算法,其遍历顺序为:左子树 -> 右子树 -> 根节点。非递归实现后序遍历通常使用一个辅助栈来模拟递归过程。这种方法利用了栈来记录遍历路径,避免了递归调用,适用于深度很大的二叉树,可以减少递归导致的栈溢出风险。用来记录上一个访问的节点,以避免重复访问右子树。在这段代码中,我们使用了一个。来存储待访问的节点。

2024-06-06 20:44:46 244

原创 C++ STL std::vector的实现机制【面试】

是 C++ 标准模板库(STL)中的一种序列容器,它封装了动态数组的实现,提供了一系列方法来操作这个动态数组。这通常涉及到申请更大的内存块,将现有元素复制或移动到新内存,然后释放旧内存。提供了迭代器,支持对容器元素的遍历,包括随机访问迭代器,允许快速访问任何位置的元素。对于非尾部的插入和删除,可能需要移动后续所有元素,因此相对较慢。自动管理内存,包括在扩容时申请内存和在元素销毁后释放内存。是一个模板容器,可以存储任意类型的元素,包括自定义类型。操作中,如果元素构造或复制过程中抛出异常,

2024-06-06 20:39:00 438

原创 讲一讲C++面向对象三大特性【面试】

封装提供了数据隐藏和接口定义,继承支持了代码复用和层次结构的建立,而多态则允许编写更通用的代码,能够对不同类型的对象执行不同的操作。: 封装是将对象的实现细节隐藏起来,只暴露出一个可以被外界访问的接口。这增强了安全性和灵活性,因为对象的内部表示可以在不改变与其用户的接口的情况下改变。: 继承是一种机制,允许一个类(子类)继承另一个类(父类或基类)的属性和方法。C++支持公有继承(这允许将不同类的对象视为同一类型(通常是基类类型),而实际调用的是与对象实际类型相对应的函数。),其中公有继承是最常用的形式。

2024-06-06 20:33:59 291

原创 C++ 反转单词

在C++中,反转一个字符串中的单词(单词之间通过空格分隔,但单词内部保持原有顺序)可以通过以下步骤实现:

2024-06-06 18:54:50 373

原创 C++ 用数组模拟队列

在C++中,使用数组模拟队列通常涉及到两个主要的操作:入队(enqueue)和出队(dequeue)。由于数组是一个固定大小的数据结构,当使用数组模拟队列时,需要手动管理队列的头部和尾部位置。请注意,当数组填满时,我们可以选择扩容数组或者将数组中的元素向前移动,以重新利用数组空间。在这个例子中,我们选择了后者,这样可以避免频繁的内存分配和复制操作。但是,这种方法要求数组的初始位置不为0,或者在移动元素后更新。来避免固定大小数组带来的限制,使得队列可以根据需要自动扩容。分别指向队列的头部和尾部,

2024-06-06 18:52:34 208

RichEditTest.rar

针对MFC编辑框,需要多行显示,每行不同状态需要不同颜色,使用控件CRichEditCtrl非常合适。

2019-07-01

Android垂直滚动广告

垂直广告测试代码,可直接拷贝转移到正式工程中: 1.每条广告一行显示,过长则末尾显示省略号; 2.点击每条广告执行相应的动作; 3.左侧添加一个固定的图标

2018-05-15

空空如也

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

TA关注的人

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