自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++ 重载 [] 运算符

最后一个节点的指针域是nullptr 如果指针指向nullptr则表示到头了。曾固步自封的认为[] ,理应是访问数组的一种方式。index=1 指针指向下个节点 返回其数据域。天真快乐的同时,认为[]只是一个无情的标识!曾因会使用a[0]访问数组元素而沾沾自喜。当我们写下a[0]时,究竟是为了什么?index=0 指针不动 返回其数据域。我从未想过[]下居然有逻辑!重载[]运算符有何应用场景?是为了找到a[0]对应的值。那么如何能找到它对应的值?首先要找到它对应的地址。如何确保指针不出界?

2024-04-27 16:52:43 38

原创 谈谈成为程序员后对职业的认知和定位,以及如何提升自身的职业价值和发展空间

**深度**:选择一个领域成为专家,如前端、后端、云计算、数据科学等。- **广度**:了解其他领域的基础知识,这可以帮助你在团队中更加多才多艺,能够与不同的技术栈的开发者有效合作。- 参与开源项目不仅可以帮助你学习新技术,还可以让你的工作得到更广泛的认可。- **项目管理**:学习如何管理时间、预算和项目风险,这些能力对于高级职位尤其重要。- **沟通能力**:有效地与团队成员、管理层以及非技术团队沟通是非常关键的。- **团队协作**:能够在团队环境中有效工作,理解并促进团队合作的技能。

2024-04-27 16:19:18 68

原创 分享AIGC技术在各个领域的应用情况,以及对未来社会的影响和可能发展方向

AIGC(人工智能生成内容)技术正逐渐成为推动各行各业创新的重要力量。这种技术利用人工智能来生成文本、图像、视频、音乐等内容,已经开始在多个领域显示出其独特的应用潜力和对未来社会的广泛影响。以下是AIGC技术在几个关键领域的应用情况,以及对未来可能的影响和发展方向的展望。### 1. 媒体和娱乐在媒体和娱乐行业,AIGC技术被用于自动生成新闻文章、电影剧本、音乐作品等。例如,新闻机构利用AI来自动撰写标准化的财经报告或体育赛事报道。在娱乐领域,AI可以辅助创作音乐和艺术作品,甚至生成整部电影的视觉效果

2024-04-27 16:17:19 66

原创 Avi Wigderson在计算复杂性理论方面的贡献及其对现代计算的影响

这对于理解计算的极限和提高算法效率有重要影响。他的研究不仅拓展了我们对计算理论的理解,也对现代计算产生了深远的影响。总的来说,Avi Wigderson 的研究不仅深化了我们对计算理论的理解,还对现代科技的发展产生了广泛而深远的影响。- **计算机科学教育和研究**:Wigderson 的教学和出版物培养了一代又一代的计算机科学家,推广了计算复杂性理论的深入研究。- **算法设计**:通过优化算法的随机化和交互性,他的研究帮助设计了更高效的算法,这直接影响了大数据和云计算等现代计算领域。

2024-04-26 18:14:18 112

原创 展望AIGC技术在未来的发展方向和潜在可能性,以及对个人和社会的影响和挑战

**更高的自动化与个性化**:AIGC技术可能会继续朝着更高级的自动化和个性化方向发展,能够根据用户的偏好和历史数据产生更加定制化的内容。- **信息真实性的挑战**:AIGC的普及可能加剧虚假信息和误导性内容的传播,需要更强的内容验证和事实核查机制。- **技能发展**:随着AIGC技术的普及,未来的工作力量需要新的技能和知识,以适应快速变化的技术环境。- **教育体系的调整**:教育体系可能需要调整课程和培训方案,以包括AIGC技术的教育和伦理使用。### 2. 社会与文化影响。

2024-04-26 18:11:44 80

原创 成为程序员后你都明白了什么?

成为程序员之后,会逐渐领悟到许多关于技术、职业生涯和生活的真理和见解。

2024-04-25 15:37:39 179

原创 C++ 中容器的种类

这类容器主要用于存储按顺序排列的元素,它们包括:这些容器基于红黑树实现,主要用于存储有序数据,包括:基于哈希表实现,用于快速数据访问,不保持元素顺序:这些容器通过对其他容器类型的封装提供特定的数据结构功能:每种容器都有其特定的用途和优缺点,选择合适的容器可以大大提高程序的效率和性能。

2024-04-25 15:34:07 277

原创 如何看待AIGC技术?

AIGC技术的快速发展带来了许多有趣的机遇和挑战。1. **版权和归属问题**:AIGC技术在生成内容时,可能会涉及到版权和知识产权的问题,例如,AI模型可能在未经授权的情况下使用已有的艺术作品或文本作为训练材料。1. **提高效率**:AIGC可以自动化许多创作过程,从而提高内容生产的效率,尤其是在内容需要大规模生产的场合,如新闻发布、社交媒体内容制作等。3. **伦理和社会影响**:AIGC技术的使用可能会影响传统创作行业的就业,同时,AI生成的内容如何影响公众意见和文化发展也是需要考虑的问题。

2024-04-24 15:01:24 383

原创 成为程序员后你都明白了什么?

成为程序员通常意味着不断学习和适应新技术,同时也会逐渐理解和掌握许多关于编程、技术、团队合作以及问题解决的重要课题。

2024-04-24 14:58:11 342

原创 程序员缓解工作压力的小窍门

4. **优先级和任务管理**:使用任务管理工具,如Trello或Asana,帮助跟踪任务和截止日期。2. **适度运动**:定期进行轻度到中度的运动,如散步、瑜伽或轻松的健身房锻炼。5. **技术升级和自动化**:自动化重复性高的任务,如使用脚本自动处理日常任务,可以节省时间,减少重复劳动的压力。8. **社交和支持**:与同事建立良好的关系,或参与线上社区。9. **兴趣和爱好**:保持和培养个人兴趣和爱好。10. **专业帮助**:如果工作压力导致严重的焦虑或抑郁,寻求专业心理健康服务是非常重要的。

2024-04-23 12:25:39 210

原创 C++ 虚表起源

本文会让看不见 摸不着的虚表(Vtable),虚指针(Vptr)彻底现行。

2024-04-23 12:23:07 1373

原创 C++ 几句话彻底点通虚表

虚表使得C++中的多态成为可能,允许在运行时根据对象的实际类型调用适当的函数。所指对象的内存开始处读取。所指对象的内存开始处读取。调用该地址对应的函数(即。,所以虚表里的指针指向。函数对应的条目(因为。

2024-04-21 19:01:54 341

原创 C++ 中的友元

关于友元关系:在C++中,友元(Friend)功能是一个相对特殊的概念,允许某些特定的函数或其他类访问当前类的私有(private)或受保护(protected)成员。友元功能是C++中用于特定情况下实现类之间数据访问的机制。优点:打破类的封装,广泛应用于操作符重载缺点:破坏了类的封装,类之间互相依赖,代码高度耦合,头文件,类声明,粉墨登场,没有固定设计模式,难以设计友元的4种主要类型:1 友元函数:友元函数可以是任何普通函数。它被允许访问某个类的所有成员(包括私有和受保护)。

2024-04-16 23:48:17 279

原创 Avi Wigderson在计算复杂性理论方面的贡献及其对现代计算的影响

Wigderson 教授在这一领域的贡献,特别是在伪随机数生成和复杂性理论之间的联系上,已成为该领域的基石。通过他对随机性和伪随机性的研究,我们不仅对算法有了更深的理解,而且在保护数据安全、处理大数据以及发展人工智能等方面也取得了实质性的进展。作为理论计算机科学领域的先锋,Wigderson 教授对于理解计算中的随机性和伪随机性的角色做出了突破性的贡献,这些贡献不仅推动了学术界的理论进步,同时也对实际应用产生了深远影响。Wigderson 教授的研究成果中,尤其突出的是他对于 "零知识证明" 的研究。

2024-04-16 16:22:23 145

原创 C++ 中对 const 的浅显理解

【代码】C++ 中对 const 的浅显理解。

2024-04-14 08:08:00 290

原创 C++ 类成员函数 返回值类型 为 指针 引用 或 对象副本 的 区别

返回值类型 : 类名*支持链式调用:通过返回对象的指针,可以使得调用者能够连续调用该对象的其他成员函数,使用箭头操作符 (->)条件性操作:可以根据条件返回对象自身的指针或nullptr,以表示某种状态或条件。

2024-04-11 08:00:24 567

原创 C++ 函数重载歧义

说明无论是微软的msvc 还是gnu的g++都认为int 与 int & 是不同的类型,构成重载。但是如果写成如下这样:提示函数重定义。

2024-04-08 12:30:43 512

原创 C语言终篇--基于epoll ET模式 的 非阻塞IO服务器模型

2 边缘触发(Edge Triggered, ET)模式:epoll事件以边缘触发模式运行,这要求代码必须负责消费所有可用的数据,直到收到EAGAIN或EWOULDBLOCK错误。8 使用whlie()循环,分别包裹ET模式下的accpet(),recv(),send(),确保读尽,写尽,及合适的时机退出。1 epoll事件驱动机制:使用epoll作为IO多路复用的技术,以高效地管理多个socket上的事件。6 调整接收缓冲区为1字节,将接收的数据存在内存的容器中,用于模拟大数据来袭,无法全部接收的情景。

2024-04-03 21:07:53 707

原创 C语言实现 基于poll的 多路复用 TCP echo 服务器模型

5 将server_sockfd 和每一个有效的client_sockfd 都设为poll的监控事件。3 将server_sockfd client_sockfd 设为非阻塞,实现最大io效率。6 有客户端关闭连接时,自动从数组中删除,并调整相应的count值。4 使用套接字选项SO_REUSEADDR 用于测试环境调试。可实现多客户端同时连接,echo收发无感。2 开启服务端后 可无限开启客户端。3 赠送对比用双循环阻塞服务端。1 单线程io多路复用服务端。2 使用poll实现。4 赠送测试用客户端。

2024-04-01 11:04:25 818

原创 I/O密集型任务和CPU密集型任务的理解与对比

例如,对于I/O密集型应用,提高I/O性能和采用非阻塞I/O可能是关键;而对于CPU密集型应用,增加计算资源和使用并行计算策略可能更为有效。在设计和优化应用程序时,理解工作负载的类型(I/O密集型或CPU密集型)对于。针对I/O密集型任务的优化通常集中在减少I/O等待时间上。,从而在数据到达时立即作出响应,提高了程序的整体效率和响应速度。select、poll、epoll带来的好处主要聚焦于I/O优化。I/O密集型任务的主要特征是大部分。,因为它在等待外部I/O操作完成。执行时间花费在等待I/O操作。

2024-03-31 09:03:30 348

原创 C语言TCP服务器模型 : select + 多线程与双循环单线程阻塞服务器的比较

最重要的select判断依据是内核缓存是否有足够空间可写 而不是数据是否准备好。我使用了 接收多路复用+分线程处理数据+处理完毕在线程内直接发送 的模型。但是如果每个连接都要求处理大型数据 则响应时间不确定。什么样的场景收发都适合用select?本来是想接受发送全用select。所以为了数据准备好再send。IO密集型转发服务器。

2024-03-31 03:13:08 644 1

原创 select中fd_set边缘情况的深入探讨

将int fd =0,int fd =1,int fd =2,加入fd_set则表示 第0,1,2位上存在fd 是标准输入,标准输出和标准错误。也可以将int fd=1023加入fd_set,表示fd_set第1023位上存在fd=1023。则在此之后新建的socket返回的fd将无法被加入到fd_set(超出范围)操作系统分配的文件描述符(fd)是连续的并且是按照从小到大的顺序分配的。但是不能将int fd=1024加入fd_set,这将超出表示范围。设 n = 你想要监控的所有文件描述符中的最大值。

2024-03-29 11:18:32 270

原创 关于io多路复用select() 读就绪 写就绪 的浅显理解

3 套接字错误:如果在写操作过程中套接字遇到错误(例如,网络断开),套接字也可能被标记为写就绪,以便应用程序可以尝试写操作来获取错误状态。2 连接建立:对于非阻塞的连接操作(如TCP客户端尝试连接服务器),连接成功建立后,套接字会变为写就绪,表示应用程序可以开始发送数据。2 连接请求:对于监听套接字(如TCP服务器监听客户端的连接请求),有新的连接请求到达,应用程序可以调用accept而不会阻塞。1 数据可用:套接字接收缓冲区中有未读数据,即有新的数据到达,应用程序可以执行读操作而不会被阻塞。

2024-03-29 00:01:50 509

原创 C语言基于TCP的多线程服务器

为了解决这个问题,最佳做法是为每个接受的连接分配一个新的内存空间来存储它的client_sockfd,并将这块内存的指针传递给新创建的线程。accept()返回的client_sockfd 是否可以直接填入pthread_create()作为创建线程的参数?他会不断地更新client_sockfd的值,而传递给pthread_create()是这个值的地址。我们观察到 while(1)中并没有阻塞的函数,假设accept()的速度足够快。3 手动运行客户端 可以无限次开启观察服务器现象。

2024-03-28 09:45:08 512

原创 [C语言]带连接数统计功能的多进程TCP服务器

posix风格的信号量不同于system V,开局直接设0,还可以进程间共享,每当一个连接加入就加1,每当一个连接处理完进程退出就减1,用完就关上,重开代码先unlink。2 在子进程中 关闭socket返回的fd,在父进程中关闭accept返回的fd,防止资源泄露及不可预知的风险。每连接一个客户端,计数器加1 ,处理完成计数器减1,但使用什么可以完成这种效果?3 父进程中忽略子进程结束信号,等于自动回收,防止变僵尸。当有了一个主体结构可以运行,如何观察这种并发的效果?1 使用if判断函数的返回值。

2024-03-27 22:45:52 470

原创 C语言实现广播Echo通信

主要用于带有gnu_c 的unix-like系统 其他系统可能要对代码进行改造。2 服务端设置超时等待10秒 如果没有收到回复 则再次广播。4 客户端收到广播后 处理3秒 echo 服务器一条消息。3 客户端启动后 将永久阻塞等待接听广播。可复制多个客户端 观察现象。5 服务器打印出这条消息。

2024-03-26 08:32:34 656

原创 C语言多服务器多播组网框架

开启操作系统多播广播功能,关闭系统防火墙,使用物理路由还需在路由开启广播多播功能。UDP ipv4 禁止本地回环 允许端口复用 超时等待 限制跳点 Echo。任意endpoint可主动发送多播,也可以收到信息后自动多播。发送端和接收端运行不分先后 可无限复制多个接收端模拟集群。

2024-03-25 23:24:42 494

原创 C语言UNIX域套接字CS模型

2 传统udp在首次sendto时系统临时分配端口,在套接字关闭|程序终止|显式解绑时端口生命周期结束,而unix域套接字则需要手动绑定,否则客户端无法收到服务器的回信。3 可以观察到CS两端的完整启动退出流程,为了实现这一目标仅进行一次通信。3 复制文件路径时,sun_path的长度无法更改,容易出现越界的情况。2 实现基于数据报的unix域套接字通信cs模型。1 实现基于流的unix域套接字通信cs模型。1 使用unlink避免地址冲突 清理资源。

2024-03-24 10:22:20 723

原创 C语言UDP基础CS模型

5 运行路径:客户端发射一条消息->服务器收到消息后回射给客户端一条消息->客户端打印出消息。服务器: socket->bind->recvfrom->sendto->close。4 使用SO_REUSEADDR选项消除了测试环境下服务器短时间内无限重启的顾虑。1 未使用更先进的服务器模型,用基础单线程阻塞(recvfrom)作为演示。客户端: socket->sendto->recvfrom->close。2 服务器使用while循环接收客户端消息。3 适用于同一网段的不同主机间通信。

2024-03-23 16:33:04 840

原创 C语言TCP通信基础CS模型

4 客户端进程的结束取决于服务器的处理速度,当服务器send全部数据后会close socket,客户端会收到0个字节后结束进程。服务器:socket->bind->listen->accept->recv->send->close 共7步。3 如果服务器和客户端都使用whlie(recv)的结构会造成类似死锁的现象,所以必须有一端缓冲区足够大。客户端:socket->connect->send->recv->close 共5步。当客户端连接上服务器后,会输出已连接字样,并打印收到的数据。

2024-03-22 16:29:58 316

原创 C语言pthread使用互斥锁及条件变量的跨进程多生产多消费模型

4 对生产者按ctrl+c,生产消费都会清理资源并结束,输出all done。在唤醒后执行检查 只有仓库全满 或 仓库全空 才就继续执行生产消费逻辑。使用pthread的互斥锁和条件变量对共享资源进行保护。该模型同时还提供了一个监控线程 用于观察仓库情况。将此线程间模型 分为两个进程(两个main函数)直到生产满 或 消费空 才使用条件变量通知对方。该模型使用粗粒度锁 将整个生产或消费过程锁住。格局要打开,进程也要打开,看看进程外的世界。使用互斥锁及条件变量的线程间生产消费模型。否则依然是通知对方并等待。

2024-03-14 12:48:25 950

原创 C语言pthread互斥锁与条件变量应用逻辑的简单示例

4 当线程队列中只有1条处于wait状态的线程,调用pthread_cond_signal,可以将其唤醒。消费者消费后发现仓库为空,将要调用pthread_cond_wait之际,系统调度到生产者线程。3 初始化条件变量后 调用pthread_cond_wait 线程状态为S 睡眠,且释放了互斥锁。5 唤醒后pthread_cond_wait不是立即返回,而是获得互斥锁后才返回。7 使用pthread_cond_broadcast可以唤醒全部等待线程。三秒后,signal释放锁,wait返回成功,全剧终。

2024-03-12 17:40:38 549

原创 C语言演示多线程编程条件下自旋锁和屏障的使用

unix-like系统 或 GNU_C库 或 同等条件 可以在IDE集成环境下也可以编译后在终端单独运行。

2024-03-11 18:01:10 804

原创 C语言pthread读写锁特性展示

在函数threads_20_init()中包括10个线程调用write_f2()函数进行写操作,10个线程调用read_f2()函数进行读操作。一个线程写入的时候,其他线程无论读取还是写入都会被阻塞,而当一个线程在读取的时候,其他线程如果是读取则不会被阻塞,如果是写入则会被阻塞。在write_f2()函数中,线程首先打开或创建文件,“上写锁”,然后将内容写入文件并打印日志,最后“解锁”。在read_f2()函数中,线程首先打开文件,“上读锁”,然后读取文件内容并打印日志,最后“解锁”。

2024-03-10 18:33:11 294 1

原创 C语言真假之争

假(即“非真”或“非零”)

2024-03-10 12:27:12 608 1

原创 C语言pthread互斥锁(mutex)和可重入锁(递归锁recursive)的演示

1 一旦共享资源被互斥锁锁定,则其余线程想访问共享资源必须等待,直到锁被释放。使用mutex的属性,开启递归锁(可重入锁),解决同一线程可重入问题。2 使用normal属性的互斥锁,一旦发生重入逻辑,则阻塞,成为死锁。需要将属性改为recursive 成为可重入的,递归的。unix-like操作系统 gnu_c或兼容c库。演示未使用可重入锁对资源的重入访问。演示使用互斥锁后 线程的执行顺序。1 命令行传参 1 model=1。2 命令行传参 2 model=2。3 命令行传参 3 model=3。

2024-03-09 17:33:42 655

原创 pthread()异步非阻塞交替打印示例

4 线程回收使用分离非阻塞技术,主进程可以进行自己的逻辑而不必等待线程回收。3 使用信号量和信号保证线程运行结束 主进程再结束。1 演示异步非阻塞交替打印 竞态条件 不上锁。2 演示线程的启动顺序 结束顺序。

2024-03-06 23:58:37 384 1

原创 使用fork()函数,父子进程代码执行逻辑的经典示例

1 如果将execlp(任意exec*函数族)开启并成功执行,代码段将立即从此处立即被替换。3 fork后的代码,因子子进程复制了父进程的代码段,所以父子进程各执行一次。也就是说after fork语句和exit后的子进程代码都不会执行。2 如果将exit在子进程中开启,代码段将立即从此处截断并返回父进程。也就是说after fork语句和后面的子进程代码都不会执行。2 fork后子进程中的代码{},只由子进程执行。fork后父进程的代码{},只由父进程执行。1 fork前的代码,只由父进程执行一次。

2024-03-06 13:53:57 462 1

原创 C语言posix风格mq_notify的经典示例

进程a还可以捕获由kill -2(Ctrl+C)发送的信号 这将导致进程a在运行清理函数后退出。发现消息队列有消息进入,会由mq_notify发送sigusr1信号给宿主进程a,以下两个程序 必须编译后由独立终端开启 不可以在IDE直接运行,因为涉及到信号。3一个可以向消息队列中发送消息的程序 和 一个可以发送kill命令的控制台。进程a先试探性的获取消息队列中的消息 然后一直在运行。宿主进程a捕获信号后,接受消息队列中的消息。观察现象:第一篇代码的终端有响应。观察现象:第一篇代码的进程终止。

2024-03-02 15:29:22 529 1

原创 c语言 system v风格 使用共享内存及信号量进程间通信示例

第一篇进程会创建共享内存 减少2值信号量 并按下暂停模拟处理大文件。必须在独立shell中编译运行 不能在集成IDE环境中 没有效果。在新的命令窗口使用 kill -ALRM pid唤醒 第一篇。第二篇也想访问共享内存 然,由于信号量为0被阻塞。第二篇正常处理并退出 删除共享内存及信号量集。给第一篇发信号 表示处理完了 释放信号量。使用ipcs命令查看 如果都为空表示没问题。再编译运行第二篇会因为信号量的关系会阻塞。先编译运行第一篇会暂停。

2024-02-25 18:28:14 392 1

空空如也

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

TA关注的人

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