自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

左雪菲的专栏

微信公众号:高性能服务器开发,分享超级编程技术干货。

  • 博客(299)
  • 资源 (20)
  • 收藏
  • 关注

原创 你什么时候开始觉得你的代码能力明显上升了一个档次?

后来,我去武汉光谷软件园找实习,人家直接丢给我一个完整的 MFC 程序让我逆向,结果实习也没找到。在苦闷了好多天后,我开始硬着头皮去翻一些开源软件的源码,认真看了三四个月,一边调试,一边记笔记,最后感觉整个人都不一样了。我是地质工程专业,上学的时候,我痴迷 C++ 编程,可是呢,我学的不是计算机专业,身边没啥能交流的人,那个时间知识付费也不像现在这么流行,所以总体上来说没什么可以请教的人。

2023-12-06 21:45:00 364

原创 如何写好 Git commit log?

介绍下目前字节跳动开发中使用的 git commit log 规范,内容与下列规范基本一致。Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。上面代码的-m参数,就是用来指定 commit mesage 的。如果一行不够,可以只执行git commit,就会跳出文本编辑器,让你写多行。基本上,你写什么都行(和但是,一般来说,commit message 应该清晰明了,说明本次提交的目的。目前,社区有多种 Commit message 的。本文介绍。

2023-12-05 21:18:44 924

原创 聊聊程序员常见的职业问题

Q23 我报了一个薪水之后,HR 爽快的答应了,我是不是报低了?我能不能再找他们提高一点?Q15 我是一名 Java 程序员,天天增删改查数据库,我如何实质性的提高自己?Q30 钱不够花,作为一名只会写代码的码农,我如何赚点外快呢?Q28 入职时人事说月薪低一点,年终奖多很多,我要不要同意?Q2 作为一个程序员,是进入大厂好,还是进入创业公司好?Q29 结婚有娃了,生活压力大,工资入不敷出,如何改变?Q3 我专科(或二本)毕业,学历不行,如何进大厂工作?Q21 技术面试中,面试官问我薪资,我该不该告诉他?

2023-12-05 20:29:55 768

原创 WebSocket一般会用在什么实际的场合?

WebSocket 是通信协议,其基于 TCP/IP 的应用层协议(改造后的 HTTP 协议),所以本质上就是 Socket 通信,每一个客户端会至少占用一个连接,和适不适合高并发没关系,高并发和 WebSocket 协议和通信技术本身没关系。》,这本书同时兼顾 Windows 和 Linux 两个平台,使用的是 C 语言和操作系统的 Socket API,通过这本书你能学会常用的操作系统 Socket API 和常用的网络模型,认真学完之后,你不会再纠结同步异步、阻塞非阻塞等概念。

2023-12-05 20:27:07 809

原创 一个 WebSocket 服务器是如何开发出来的?

对端收到该包时,如果发现标志 FIN = 0 或 OpCode = 0,将该包包体的数据暂存起来,直到收到 FIN = 1,OpCode ≠ 0 的包,将该包的数据与前面收到的数据放在一起,组装成一个完整的业务数据。需要注意的是,在使用 zlib 的 deflate 函数进行压缩时,压缩完毕后要将压缩后的字节流末尾多余的 4 个字节删掉,这是因为 deflate 函数在压缩后会将内容为 00 00 ff ff 的特殊标志放入压缩后的缓冲区中去,这个标志不是我们需要的正文内容。

2023-12-05 20:23:03 827

原创 Modern C++ 智能指针详解

默认情况下,智能指针对象在析构时只会释放其持有的堆内存(调用 delete 或者 delete[]),但是假设这块堆内存代表的对象还对应一种需要回收的资源(如操作系统的套接字句柄、文件句柄等),我们可以通过自定义智能指针的资源释放函数。假设现在有一个 Socket 类,对应着操作系统的套接字句柄,在回收时需要关闭该对象,我们可以如下自定义智能指针对象的资源析构函数,这里以。

2023-12-05 20:04:12 822

原创 作为程序员的你,第一份工作月薪多少?

让我印象深刻的是某天写了一封情意绵绵的邮件给当时某个创业公司的负责人,他回复了我,我立马很开心地回复了他,我以为我看到了希望,但是他再也没回复我了,我当时真的挺伤心的。下午茶时间,老领导买来饮料和水果拉我们组的小伙伴一起喝茶聊天,期间玩了个游戏,输掉的人被其他人轮流问一个问题,我们当中有男有女,有工作多年的大叔阿姨,也有刚毕业的年轻后生,油条老司机喜欢问一些“你第一次是什么时候、在哪里”这样的问题,有点让后生们尴尬或者脸红心跳。我的本科学的地理科学,你没听错,培养高中地理老师那种,硕士学的是地质。

2023-12-05 19:55:43 857

原创 程序员自己做的项目可以算作项目经验吗?

关于项目经验,许多面试者认为一定要是自己参与的项目,,当然,也包括你自己的项目啦。举个例子,我去喜马拉雅听书面试的时候,整个面试过程下来,就聊了 Redis,从 Redis 应用到源码。很多同学可能纠结大学或者研究生期间要不要跟着导师做一些项目。当然,如果这些项目是课程要求,那么你必须得参加;如果这些项目是可以选择性的,尤其是一些仅仅拿着第三方的库进行所谓的包装和加工,那么建议可以少参加一些。

2023-12-04 21:12:51 482

原创 非科班出身,如何成为程序员?

现在的生活,平静如水,我也继续积累和沉淀着。现在对自己的期许是做好当下事,莫问前程。要喜爱技术,兴趣在任何时候都是最好的动力,作为一名开发人员,一定要把技术学好,它是你吃饭的家伙,提高你的技能,能让你在职场上和收入上有立竿见影的效果;提高自己实质性的东西,在职场中成为某些职位无可替代者;踏踏实实做技术,不要附庸风雅地整各种技术名词,弄懂技术背后的原理;精益求精反复总结,你需要定期总结和提炼你的技术知识。职业规划要趁早,明确自己想要什么,成为什么样的人;

2023-12-03 17:31:34 1342

原创 使用epoll时需要将socket设为非阻塞吗?

本文是回答一位知友的提问:在APUE中介绍select和poll中说“一个描述阻塞与否并不影响select是否阻塞。也就是说,如果希望读一个非阻塞描述符,并且以超时值5s调用select,则select最多阻塞5s。”我看到有些程序使用epoll时,使用fcntl将描述符置为非阻塞。这个和上面描述的有冲突没?一、结论提出这个问题说明对网络编程的一些基础原理未搞明白,先说下结论:一个 socket 是否设置为阻塞模式,只会影响到 connect/accept/send/recv 等四个 so

2023-12-03 14:15:31 851

原创 有一定基础的 C++ 学习者该如何学习 Windows 编程?

我的回答:我曾经和你一样困惑,直到我遇到了两本书,这两本也改变了我的人生轨迹。

2023-12-02 21:43:48 806

原创 有哪些不错的 Golang 开源项目?

目前人在字节做 Go 开发。如果你也想来字节写 Go,我可以帮你内推(也可以提供简历修改建议),当然内推非开发岗也是可以的,内推请戳下面这个链接:需要内推大厂的同学看这里(含内推联系方式)​mp.weixin.qq.com/s/t4LubRFFBBFvSaQT3NkVQw​编辑。

2023-12-02 21:41:33 772

原创 如何系统学习 MySQL?

高级开发除了以上要求还要熟悉高可用 MySQL、主从同步、读写分离、分表分库等技术,这些技术的细节一定要清楚,它们是你成为技术专家或者高级架构的必备知识。我们在实际面试时,在讨论高可用服务服务方案时,很多面试者也会和我们讨论到这些技术,但是不少面试者只知道这些技术的大致思想,细节往往说不清楚,细节不会就意味着你的高可用方案无法落地,企业需要可以落地的方案。(2)稍微高级一点的 SQL 操作(如 Group by,in,join,left join,多表联合查询,别名的使用,select 子语句等)

2023-12-02 21:39:38 898

原创 作为程序员,你有哪些正在做的个人项目?张小方张小方​

我一直维护着开源版本的即时通讯 Flamingo,目前也有几家公司基于这个做二次开发,你可以看下:https://github.com/balloonwj/flamingo我知道的是一些同学通过学习此项目拿到了 Linux C/C++ 开发的 offer,为了帮助大家学习,我录制了 3 部高清讲解 Flamingo 的学习视频,下载链接:

2023-12-02 21:38:13 357

原创 开发岗位怎么跟 HR 谈薪资?

其次,很多公司年终奖还有其他的一些规定,比如年终奖的比例按你当年在公司工作的实际天数来算,也就是说,假设你是6月1日入职的,正好是半年,你的年终奖只能拿一半,这就是所谓的年终奖 = 预先设定的金额 * n / 365,n 是你当年实际工作的自然日。一般与HR谈薪的过程中,即要展示自己对求职的职位有很大的兴趣,但又不要暴露自己想尽快找到工作的想法,尤其是在你手头上没有offer 、且已经离职的情况下,这样会让自己很被动,你迫切需要一份工作,而现在又无多余的选择,这样HR就会使劲压制你的薪资。

2023-12-02 21:37:00 1254

原创 TCP中已有SO_KEEPALIVE选项,为什么还要在应用层加入心跳包机制?

计算机必看经典书籍(含下载方式)​mp.weixin.qq.com/s/JcaLLTBWiRKlfzZIyilNIQ​编辑本文解释了 SO_KEEPALIVE 选项,和为什么要在应用层加入心跳包机制,以及心跳包机制如何设计的方方面面,希望对您有帮助。: 一个客户端连接服务器以后,如果长期没有和服务器有数据来往,可能会被防火墙程序关闭连接,有时候我们并不想要被关闭连接。

2023-12-02 21:23:14 1070

原创 程序员面试,面试官最后说,你还有什么要问的吗?该怎么回答?

许多年前,我作为面试者面试的时候,面试官问我,你还有什么想问的;许多年后,我作为面试官,每次面试快结束的时候,最后一个问题也是问面试者:你还有什么要问的吗?^_^ 人生有时候真的是一个循环啊。很多人给出的答案带有戏虐性质的,其实把握好这个问题可能是面试者的一次机会。

2023-12-02 20:47:53 1246

原创 Modern C++有哪些能真正提升开发效率的语法糖?

类方法被 override 关键字修饰,表明该方法重写了父类的同名方法,加了该关键字后,编译器会在编译阶段做相应的检查,如果其父类不存在相同签名格式的类方法,编译器就会给出相应的错误提示。既然有强制让编译器生成构造函数、析构函数、拷贝构造函数、 operator=的语法,那么也应该有禁止编译器生成这些函数的语法,没错,就是 =delete。当 C++11 的编译器发布之后(Visual Studio 2013、g++4.8),我第一时间更新了我的编译器,同时把我们的项目使用了 C++11 特性进行了改造。

2023-12-02 20:44:01 953

原创 《C++服务器开发精髓》签名版请签收

如果你是个学生,将来想做 C/C++ 后台开发,或者你做了几年 C/C++ 后台开发后,还没形成自己的技术体系或者技术认知,强烈推荐这本书,除了数据库部分没用,其他部分我都介绍的很详细。本书最大的特点就是用了非常细粒度的示例,娓娓道来,解释清楚各个技术原理,详述哪些是重点和难点,且这些示例都来自实际开发。我是一线开发,所以书中的内容全部是实战经验,我这个人不喜欢讲一些假大空的技术术语,喜欢追求能落地的技术,所以全书虽然很厚,但是每一章节的内容都是实实在在地剖析技术背后的原理,教你知其然更知其所以然。

2023-12-02 20:35:47 956

原创 我的新书《C++服务器开发精髓》终于出版啦

亲爱的各位读者,我的新书《C++ 服务器开发精髓》终于终于终于与大家见面了,图书如下:图书的封面设计很精美,当然内容一定不负众望。因出版社老师要求提供一张照片放到封面上,今年的 6 月 1 日儿童节去拍了一张,照片拍出来放在下面大家自己看吧。人到中年,生活不易,没有少年时代那种懵懂与青涩,多了一份厚实与坚定了。一些想做的事情却一步步把它做成了,成为现实。昔日戏言身后事,明朝都到眼前来。所以,梦想还是要有的,还是要坚持的,即使这世界有那么多不完善,生活有那么多不如意,因为万一实现了呢?关于这本书,我写了三年,

2023-12-02 20:26:01 906

原创 Linux 的 epoll 使用 LT + 非阻塞 IO 和 ET + 非阻塞 IO 有效率上的区别吗?

我学习和使用 C/C++ 开发快 13 年了,目前在大厂做架构,深知新手学习 C/C++ 的困难,因此特地给 C/C++ 开发的同学精心准备了一份优质学习资料————CppGuide,内容从 C/C++ 语言、网络编程、操作系统原理到完整的项目源码分析,同时这份资料也包括 C/C++ 学习方法、推荐的阅读书籍、简历指导和求职技巧等。CppGuide 学习资料​mp.weixin.qq.com/s/Oej6y-pYcv20YGo6cCyLwg​编辑https://link.zhihu.com/?target=

2023-12-02 14:29:56 908

原创 C++ 游戏服务器开发有什么推荐的学习资料或者书籍?

不建议看《C++ Primer》这样的大部头,掌握 C++ 常用语法就可以了。这是一款类似英雄联盟的 5V5 实时对战游戏,服务器端使用 C/C++ 开发,同时支持 Linux 和 Windows 系统部署;总结起来,熟悉 C++ 游戏服务器开发,建立在熟悉 C++、网络通信、服务器开发常用套路上,其次才是游戏服务器本身的特性。如果你需要实战的话,我这里有一套完整的可以编译、调试和部署的 MOBA 游戏的源码。如果你不是对游戏开发特别感兴趣,建议谨慎地选择这个行业!

2023-12-02 14:23:13 507

原创 分享下电驴(eMule)的源码

电驴的代码虽然设计上不是最好的,但从代码风格和命名来说绝对是非常优良的,尤其是其变量、类名、函数等命名风格,真的是赏心悦目。电驴的源码也开源了,迅雷抓住这个机会分析了电驴的下载协议(Kademlia),所以现在的迅雷也能解析电驴的下载协议,凡是能用电驴下载的链接,也能用迅雷下载。我目前在大厂做架构,面试和指导千人成功找到满意的 C/C++ 岗位,在学习 C/C++ 开发的过程中踩过一个又一个坑,深知新手学习 C/C++ 的困难,因此特地给 C/C++ 开发的同学精心准备了一份优质学习资料————

2023-12-02 11:53:05 878

原创 分享一款 ftp 软件 —— filezilla的源码

注意: 客户端使用 C++11 开发,而之所以服务器端的 filezillaserver 和 filezillaserver 选择使用较新的 VS2015,是因为服务器端的代码使用了 C++14 的一些特性,而 VS2013 是不支持 C++14 的所有的特性的。3. 编译filezillaserverinterface用VS2015打开filezillaserverinterface\filezillaserver\filezillaserverinterface.sln编译即可。

2023-12-02 11:49:01 1021

原创 从零实现一款12306抢票软件(三)

具体的实现代码就不在文章中贴出来了,您可以下载我的代码。下载地址在微信公众号『easyserverdev』中回复『12306源码』即可得到下载地址,当然,由于12306的接口经常发生改变,当你拿到代码时,可能12306服务器的接口已经稍微发生了改变,您可以按上面介绍的原理做响应的修改。其他接口就不一一介绍了,所有的原理都是一样的,作者可以自行探索。最后当您实现了基本的登录和购票功能后,你就可以不断模拟某些请求去进行刷票了。从零实现一款12306抢票软件(二)

2023-12-02 11:36:39 557

原创 从零实现一款12306抢票软件(二)

但是在购票以及查询常用联系人这些需要在已经登录的情况下才能进行的操作,我们必须带上这个数据,这是服务器给你的token(验证令牌),而这个令牌是在刚进入12306站点时,服务器发过来的,你后面的登录等操作必须带上这个token,否则服务器会认为您的请求是非法请求。12306的图片验证码一般由八个图片组成,像上面的“龙舟”文字,也是图片,这两处的图片(文字图片和验证码)都是在服务器上拼装后,发给客户端的,12306服务器上这种类型的小图片有一定的数量,虽然数量比较大,但是是有限的。先说下,拉取验证码的接口。

2023-12-02 11:33:54 883

原创 从零实现一款12306抢票软件(一)

举个例子,如12306的查票接口目前的url是:https://kyfw.12306.cn/otn/leftTicket/query,可能过几天就变成了https://kyfw.12306.cn/otn/leftTicket/queryX,再过几天又可能变成https://kyfw.12306.cn/otn/leftTicket/queryY,然后一个星期后又可能变成https://kyfw.12306.cn/otn/leftTicket/queryZ,这些笔者都见过。

2023-11-30 21:46:54 1110

原创 服务器编程心得(四)—— 如何将socket设置为非阻塞模式

只要将accept4()最后一个参数flags设置成SOCK_NONBLOCK即可。3. 除了创建socket时,将socket设置成非阻塞模式,还可以通过以下API函数来设置:参考:),linux下如果调用fcntl()设置socket为非阻塞模式,不仅要设置O_NONBLOCK模式,还需要在接收和发送数据时,需要使用MSG_DONTWAIT标志,即在recv,recvfrom和send,sendto数据时,将flag设置为MSG_DONTWAIT。

2023-11-30 21:21:16 1080

原创 服务器开发中网络故障排查经验漫谈

通过上面的分析,我们得出结论,shutdown函数并不会要求操作系统底层回收套接字等资源,真正会回收资源是close函数,这个函数会要求操作系统回收相关套接字资源,并释放对ip地址与端口号二元组的占用,但是由于tcp四次挥手最后一个阶段有个TIME_WAIT状态(关于这个状态下文介绍tcp三次握手和四次回收时会详细介绍),导致与该socket相关的端口号资源不会被立即释放,有时候为了达到释放端口用来复用,我们会设置套接字选项SOL_REUSEPORT(关于这个选项,下文会介绍)。

2023-11-30 21:12:10 888

原创 金山卫士开源代码

自从金山卫士的代码部分开源以来,基于它出现了各种软件,有侧重界面库的,如SOUI,有侧重电脑安全管理的,下面是我维护的版本的部分截图:主界面垃圾清理ARP防火墙隐私保护器对于广大开发者尤其是广大做Windows安全方面的朋友来说,这套代码具有很大的借鉴意义,至少我们可以知道那些所谓的“电脑管家”到底对我们的电脑做了什么事情。

2023-11-30 20:42:35 373

原创 Gh0st源码分析(一)——Ghost简介和编译

全部编译成功后,在gh0st\Output\Debug\bin目录下会生成Gh0st.exe和svchost.exe,先启动Gh0st.exe,再启动svchost.exe就可以对运行了svchost.exe的机器进行远程控制了。虽然,很多做法在新的操作系统中已经过时或者没有必要,但是其软件的架构原理、过杀毒软件的设计思路和许多经典的做法,非常值得我们学习,尤其是对Windows客户端开发的朋友来说,绝对是提高内功的优秀学习资料。注意的是:这是一款类似于木马性质的软件,请勿作任何非法用途,否则后果自负!

2023-11-30 20:41:53 552

原创 一位10年Java工作经验的架构师聊Java和工作经验

我目前从事分布式服务架构的设计与开发工作,在阿里的大数据平台上进行应用程序开发。我们整个系统架构采用了“前后端分离”的思想,前端关注数据展现,后端关注数据生产,通过 REST服务将前后端整合起来,所有的应用都是无状态的,可以做到水平扩展。我们将整个系统拆分成许多“微服务”,服务之间通过统一的接口来调用,每个服务是通过容器技术进行隔离,此外服务可发布到统一的服务管理平台上,可通过该平台监控每个服务的运行状态与生命周期事件,并为服务调用者提供了服务发现的能力,可对服务进行平滑升级。

2023-11-30 20:40:56 879

原创 服务器端编程心得(八)——高性能服务器架构设计总结——以flamigo服务器代码为例

这篇文章算是对这个系列的一个系统性地总结。我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序。所谓高性能就是服务器能流畅地处理各个客户端的连接并尽量低延迟地应答客户端的请求;所谓高并发,指的是服务器可以同时支持多的客户端连接,且这些客户端在连接期间内会不断与服务器有数据来往。这篇文章将从两个方面来介绍,一个是服务器的框架,即单个服务器程序的代码组织结构;另外一个是一组服务程序的如何组织与交互,即架构。

2023-11-30 20:39:20 923

原创 服务器端编程心得(七)——开源一款即时通讯软件的源码

flamingo服务器端代码使用cmake + makefile编译,使用了纯C++11开发,运行于linux系统下(我的系统是CentOS7.0),为了支持C++11,你的gcc版本至少要大于4.7,我的版本是4.8.5。另外,使用了mysql数据库,我的数据库版本是5.7.17。1.用VS2013打开程序目录下的:Flamingo.sln,你可以使用其他的VS版本,但是至少不低于VS2013,因为客户端代码也使用了大量C++11语法和库,VS2013及以上版本才能较好的支持C++11的语法。

2023-11-30 20:37:38 848

原创 服务器端编程心得(六)—— 关于网络编程的一些实用技巧和细节

这些年,接触了形形色色的项目,写了不少网络编程的代码,从windows到linux,跌进了不少坑,由于网络编程涉及很多细节和技巧,一直想写篇文章来总结下这方面的心得与经验,希望对来者有一点帮助,那就善莫大焉了。本文涉及的平台包括windows和linux,下面开始啦。我们知道用connect()函数默认是阻塞的,直到三次握手建立之后,或者实在连不上超时返回,期间程序执行流一直阻塞在那里。那么如何利用connect()函数编写非阻塞的连接代码呢?

2023-11-30 20:34:23 672

原创 服务器编程心得(五)—— 如何编写高性能日志

我目前的做法是参考陈硕的muduo库的做法,使用一个队列,需要写日志时,将日志加入队列中,另外一个专门的日志线程来写日志,我给出下我的具体实现代码,如果需要查看muduo库的做法,请参考陈硕的书《Linux多线程服务端编程:使用muduo C++网络库》关于日志章节。不知道读者有没有注意上,上述日志类实现,是在调用者线程中直接进行IO操作,相比较于高速的CPU,IO磁盘操作是很慢的,直接在某些工作线程(包括UI线程)写文件,程序执行速度太慢,尤其是当日志数据比较多的时候。二、日志里面应该写些什么?

2023-11-30 20:20:59 822

原创 服务器编程心得(四)—— 如何将socket设置为非阻塞模式

只要将accept4()最后一个参数flags设置成SOCK_NONBLOCK即可。3. 除了创建socket时,将socket设置成非阻塞模式,还可以通过以下API函数来设置:参考:),linux下如果调用fcntl()设置socket为非阻塞模式,不仅要设置O_NONBLOCK模式,还需要在接收和发送数据时,需要使用MSG_DONTWAIT标志,即在recv,recvfrom和send,sendto数据时,将flag设置为MSG_DONTWAIT。

2023-11-30 20:16:53 1903 1

原创 服务器端编程心得(三)—— 一个服务器程序的架构介绍

读到这里,你可能觉得工作线程所做的工作也不过就是调用handle_io_events()来接收网络数据,其实不然,工作线程也可以做程序业务逻辑上的一些工作。现在来说问题3,业务层的数据产生后,经过TcpSession装包后,需要发送的话,产生任务丢给工作线程的do_other_things(),然后在相关的Channel里面发送,因为没有监测该socket上的可写事件,所以该数据可能调用send()或者write()时会阻塞,没关系,sleep()一会儿,继续发送,一直尝试,到数据发出去。

2023-11-30 20:15:41 831

原创 服务器端编程心得(二)—— Reactor模式

因为如果采取水平触发模式的话,主线程检测到某个客户端socket数据可读时,通知工作线程去收取该socket上的数据,这个时候主线程继续循环,只要在工作线程没有将该socket上数据全部收完,或者在工作线程收取数据的过程中,客户端有新数据到来,主线程会继续发通知(通过pthread_cond_signal())函数,再次通知工作线程收取数据。如果不加上这一行,正常运行服务器程序,程序中要打印到控制台的信息都会打印出来,但是如果用gdb调试状态下,程序的所有输出就不显示了。

2023-11-30 20:00:57 785

原创 C++ 惯用法 CRTP 简介

答案也很简单:让 CRTP 的模板类继承一个非模板的基类——这相当于这个非模板的基类会有多个平级的不同的子类。文章开头的第一段,我们提到多态是个很好的特性,但是动态绑定比较慢,因为要查虚函数表。为了在编译时绑定,我们就需要放弃 C++ 的虚函数机制,而只是在基类和子类中实现同名的函数;同时,为了在编译时确定类型,我们就需要将子类的名字在编译时提前传给基类。这种特性,使得我们能够用基类的指针,访问子类的实例。指向对象的类型在运行时才确定(而不是在编译时就确定),所以这种方式称为动态绑定(或者运行时绑定)。

2023-11-23 16:29:12 126

文章《用Android Studio进行NDK编程》配套资源

文章《用Android Studio进行NDK编程》配套资源,本来不想要积分的,可是现在CSDN规则改成资源至少是两分 - -!

2018-04-17

Gh0st全套源码

Gh0st是一款优秀的远程控制软件,其可以实现对被控制端诸如文件管理、远程桌面、进程管理、视频监控等操作。

2018-02-15

安卓版TeamTalk客户端源码

安卓版TeamTalk客户端源码,开发环境: IDE使用Android-studio java 1.7 gradle 2.2.1

2017-05-25

TeamTalk pc客户端源码

TeamTalk pc客户端源码,用VS2013直接打开即可编译调试。

2017-05-25

封装了WinInet的HttpClient库

封装了WinInet的HttpClient库,提供多个http接口,强大稳定。

2017-05-19

蘑菇街TeamTalk源码

蘑菇街 TeamTalk 源码 IM 即时通讯

2017-05-05

TeamTalk源码和redis-3.2.8安装程序

蘑菇街开源的即时通讯软件TeamTalk

2017-05-05

即时通讯flamingo服务器端代码

这是即时通讯flamingo服务器端代码,目前即时通讯软件实现了如下功能: 注册 登录 查找好友、查找群 添加好友、添加群 好友列表、群列表、最近会话 单人聊天功能(包括发文字、表情、窗口抖动、离线文件) 群聊功能(包括发文字、表情) 修改密码 修改个人信息(自定义昵称、签名、个性头像等个人信息) 自动升级功能 包括聊天服务器和文件服务器,同时也是一款通用的C++11网络框架。

2017-04-06

即时通讯flamingo客户端

目前即时通讯软件实现了如下功能(这里只列举网络相关的功能,其他客户端已经实现的功能不统计在列,请自行发现): 注册 登录 查找好友、查找群 添加好友、添加群 好友列表、群列表、最近会话 单人聊天功能(包括发文字、表情、窗口抖动、离线文件) 群聊功能(包括发文字、表情) 修改密码 修改个人信息(自定义昵称、签名、个性头像等个人信息) 自动升级功能

2017-04-06

myreactor项目C++11版本源代码

一个用C++写的echo服务器,运行在linux平台,使用epoll ET模式,支持多个客户端连接和收发消息,纯C11代码。包括C++11新的变量初始化方式、for循环、auto关键字、线程、互斥体、条件变量等C++11常用的技术。

2016-12-04

myreactorserver项目源码

myreactorserver项目源码,实现echo功能,使用epoll ET模式,运行在linux平台,支持多个客户端连接。

2016-12-04

JavaScript设计模式与开发实践.pdf

JavaScript设计模式与开发实践.pdf 高清 有目录

2016-11-04

UNIX环境高级编程(中文第三版).pdf

UNIX环境高级编程(中文第三版).pdf 有目录 清晰度勉强可以看

2016-11-04

编译系统透视:图解编译原理.pdf

编译系统透视:图解编译原理.pdf 高清 但是 没有目录

2016-11-04

Linux高性能服务器编程.pdf

Linux高性能服务器编程.pdf 高清带详细目录

2016-11-04

空空如也

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

TA关注的人

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