- 博客(15)
- 收藏
- 关注
原创 编译Telegram Desktop
Telegram 是一款全球广泛使用的即时通讯软件,以其强大的隐私保护、跨平台同步和丰富的功能而闻名。它支持一对一聊天、群组(最多20万成员)和频道(无限订阅者),并提供端到端加密,确保用户消息的安全性。Telegram 还具备语音通话、视频通话、文件共享(单文件最大2GB)和自定义贴纸等功能。此外,它通过机器人和频道为用户提供自动化服务和内容订阅,广泛应用于个人沟通、品牌推广和社区建设。凭借其简洁的界面和强大的功能,Telegram 已成为全球超过10亿用户的首选即时通讯工具之一。
2025-03-07 17:25:41
1271
原创 静态链接和动态链接
大家都知道,一段程序的编译全过程,也就是程序运行的四个阶段,分为,不清楚的可以看我之前写的文章,。我在这里简单讲一下链接的概念,参考黑皮书《深入理解计算机系统》(csapp),现在有一个简单的hello程序,这个程序经过之后生成可重定位目标文件(hello.o),也是一个二进制文件,,假如hello程序调用了printf函数,它是每个C编译器都提供的标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.0程序中。
2024-11-30 20:05:25
5296
5
原创 面向对象编程的 SOLID 设计原则
SOLID原则是五个面向对象设计原则的首字母缩写,它们旨在提高软件的可维护性和可扩展性。这些原则是由罗伯特·C·马丁(Robert C. Martin)在20世纪90年代提出的,分别是单一职责原则(S)、开放封闭原则(O)、里氏替换原则(L)、接口隔离原则(I)、依赖倒置原则(D)。
2024-11-30 16:36:47
5702
6
原创 Unicode、ASCII、UTF-8编码关系和底层原理
Unicode是一个字符集标准,ASCII则是Unicode的一个子集,包含最基本的字符,而UTF-8、UTF-16和UTF-32是实现Unicode这个标准的不同编码方式,UTF-8的底层原理参考上面我推荐的文章,我这里就不做详细的解释了。
2024-11-20 20:34:10
2225
原创 C++多线程编程lock_guard和unique_lock
public:// 禁止复制private:// 互斥量// 多线程操作的变量i < 10000;++i) {// 申请锁// 作用域结束后会析构 然后释放锁t1.join();t2.join();return 0;
2024-11-20 19:37:27
2249
原创 MVVM框架详解
MVVM,自上到下分析,view层负责UI展示,定义结构、布局等等,ViewModel层负责处理业务,监听view层的变化以及通知去更新,Model层负责提供源数据给ViewModel使用。即通过清晰的分层和双向数据绑定机制,使得开发人员可以更加专注于业务逻辑的实现,而不必担心UI的更新,从而达到解耦的目的。1.各层之间的双向数据绑定怎么去实现,这个是使用扩展和扩展点机制实现的,扩展和扩展点机制本质就是一些类似于宏的名称,去相互协作达到插排和插头的一个效果。
2024-09-05 13:05:18
2458
2
原创 计算机专业简历模版
推荐大家使用第二种markdown的模版和第三种typst编写简历,这两种方式都体现了你的文档编辑能力,也能体现一定的代码功底和自我扩展学习能力,让面试官拿到简历有一个好的印象。
2024-09-05 13:03:56
5289
2
原创 计算机简历投递,面试总结,技术分享,实习感悟
简历尽量一页,主要为五大部分,教育背景、荣誉奖项、专业技能(技术栈)、实习经历、项目经验。实习经历很重要,有就写,没有就不用写,我认识很多大佬,大二就有中厂实习经历了, 大三找实习乱杀,求职岗位意愿可以放到教育背景里边,专业技能和项目经验这两部分尽量和公司的方向一致,项目少的话就写的详细一点,简历上你写到的东西,必须得会,尤其是技术栈和项目,不会就不要写。然后就是多投简历,慢慢打磨简历,多请教大佬指点你的简历,建议直接分享在牛客上,会有很多大佬指点,如果足够优秀,也会有很多hr走内部渠道帮给你投简历,渠道的
2024-06-01 00:41:17
4588
3
原创 面试手搓单例模式C++
3.DestructorLazy called 和 DestructorHungry called:析构函数按照与构造函数相反的顺序被调用。2.ConstructorLazy called:懒汉式单例在第一次调用 getinstance() 时初始化。1.ConstructorHungry called:饿汉式单例在类加载时初始化。
2024-03-03 21:57:28
937
1
原创 原码,反码,补码,移码的表示范围以及数据溢出
假设二进制机器字长是n+1位,且为整数原码表示的范围: −(-1)≤ x ≤-1反码表示的范围: −(-1)≤ x ≤-1补码表示的范围: −≤ x ≤-1移码表示的范围: −≤ x ≤-1移码的符号位中0表示负数,1表示正数,简单来说,原码的补码数值位不变,符号位取反就是移码。对于8位寄存器:原码表示范围为 -127-127,即1111 1111~0111 1111反码表示范围为 -127-127,即1000 0000~0111 1111补码表示范围为 -128
2023-12-19 22:54:49
22098
3
原创 C++中find函数以及各个迭代器返回值解释
返回值:如果查找,它返回一个指向与键target关联的元素的迭代器,可使用此迭代器通过->first或者->second,查不找,返回mp.end():表示末端元素的下一个元素,这个迭代器起一个哨兵的作用,表示已经处理完所有的元素。返回值:如果查找成功,返回其在向量中的位置,可使用此迭代器通过it-nums.begin()表示下标,*it表示其下标对应的值(方法与lower_bound和upper_bound相似),查不到,则返回nums.end()
2023-08-21 10:40:59
2602
1
原创 对于递归的理解
而Sum(1)已经返回1,因此Sum(2)返回2+1=3,Sum(2)执行完毕,开始执行Sum(3)未执行完的内容…递归的方式就是自己调用自己,而在有返回值的函数中,上一层的函数还没执行完就调用下一层,因此,当达到递归终止条件时,首先return的是最底层调用的函数,return之后,继续执行上一层调用该函数之后的代码,此时我们看到的是上一层的情况,当上一层剩余的代码执行完之后,表示上一层的函数也结束,此时再返回上上一层,执行递归代码之后的代码,如此往复循环,直到返回到最上层,结束整个递归过程。
2023-07-25 19:46:50
778
原创 C/C++编译过程
预处理器指令以#号开头,预处理器执行宏替换(比如 #define)、条件编译(比如#if、#elif、#else、#endif、#ifdef、#ifndef)以及包含指定的文件(比如#include)。将.s文件翻译成.o文件,汇编器将.s文件翻译成机器语言指令,即.o文件,hello.o 文件:可重定位目标文件(机器码文件),是二进制文件,由汇编文件经过汇编操作生成,该文件不可直接执行。hello(.out) 文件:二进制可执行目标文件(也是一个目标文件),由机器码文件进一步链接生成。
2023-07-25 19:25:58
1434
原创 公路村村通
随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。Kruskal算法其实就是并查集思想,如果你不了解并查集思想,可以看这篇文章,讲的超级详细,要是简单就想把这道题过了,只需要看这篇文章的前一小部分就可以了。这个题有两种解法,分别为Prim算法 和 Kruskal算法,Prim算法是归并点,Kruskal是归并边,我的做法是Kruskal算法,也就是归并边。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。以下是我的代码,有详细的注释。
2023-06-04 13:03:16
851
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人