自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

StarSky_Ye的博客

学习、记录、积累、整合

  • 博客(32)
  • 收藏
  • 关注

原创 gdb输出日志记录

gdb日志记录在实际工作中,常常会使用gdb命令,有时为了后续查看方便,可以将gdb的输出信息打印到特定文件中。具体操作如下:(gdb) set logging file 设置文件名,文件默认生成在运行gdb命令的目录下;(gdb) set logging on 启动日志记录;(gdb) set height 0 这样gdb需要多行输出时,就会全部输出,中间不会暂停;(gdb) set print elements 0 这样gdb在打印时就没有默认为200个元素的长度限制;(gd

2022-04-08 19:34:09 2232

原创 C++编程技巧之Pimpl手法

一、Pimpl是什么Pimpl全称是point to implementation,译为指向实现的指针;是一种c++程序技巧。其具有如下基本形式:class widget { // 其它部分private: struct impl; // 前置申明一种变量类型 impl* pimpl_; // 定义该类型的指针或引用,用这个pimpl_来隐藏类widget的一些实现细节};二、为什么需要Pimpl技术我们知道,在C/C++中,声明变量是不占用

2022-03-28 20:31:55 1883

原创 二叉树的基本概念和类型

前言本文主要记录二叉树的一些基本概念和说明一些特殊的二叉树类型一、基本概念概念名定义二叉树每个节点最多有两个子树的树结构,如上图所示根节点二叉树的最顶上的节点,如上图的节点0父、子节点父子节点是相对而言的,如果一个节点下面存在其它节点 ,则称该节点为其它节点的父节点,其它节点为该节点的子节点。如上图中,节点0是节点1和节点2的父节点,节点6是节点14的父节点兄弟节点具体相同父节点的节点互为兄弟节点,如节点1和节点2互为兄弟节点,其有共同父节点0

2021-08-22 17:14:43 326

原创 数据结构--图

文章目录前言一、相关概念二、使用步骤1.引入库2.读入数据总结前言本文主要是介绍图的一些基本概念、表示方法和应用场景;本文所涉及的知识点,主要是从网点:https://visualgo.net/zh学习记录所得。本文介绍时,主要基于如下图形:一、相关概念图按大类可分为简单图形和特殊图形。在简单图形中,节点没有从节点自身指向自身的边,且相邻节点之间也不存在多条边。0二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdi

2021-08-15 13:26:27 602

原创 python之collections库

文章目录前言一、相互比较独立的,满足特定场景的功能1.1 collections.ChainMap(*maps)1.2 collections.Counter([iterable-or-mapping])1.3 collections.deque([iterable[, maxlen]])1.4 collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)二、特定功能的字典2.1 coll

2021-07-31 20:06:52 2073

原创 二叉树的前序、中序、后序遍历

文章目录前言一、用递归法实现遍历1.1 前序遍历1.2 中序遍历1.3 后序遍历二、用迭代法实现遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历2.3.1 后序解法一2.3.2 后序解法二三、测试验证 前言本文主要记录二叉树的遍历方法,文章的主要知识点来源为:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/leetcodesuan-fa-xiu-lian-dong-hua-yan-shi-xbia

2021-07-24 22:33:11 5417 2

原创 gnugk5.5源码分析(8)之路由策略RoutingPolicy

一、前述在gnugk的源码实现中,关于路由策略相应的配置主要是集中在Routing Configuration章节中。仔细阅读gnugk的使用手册,首先可以了解以下几点主要内容:对于Gnugk实现来说,路由意味着对每一路通话找一个合适的目的IP路由策略的应用时机是对每一路通话的第一个消息生效;而所谓的通话的第一个消息具体情况是指,对于注册终端是ARQ消息;对于未注册终端是Setup消息;对于GK的友邻(neighbors)是LRQ消息;对于其它GK转发的带有ForwardOnFacility原因的F

2021-03-06 17:13:14 437 4

原创 gnugk5.5源码分析(6)之H245代理实现

一、前述对于H323协议来说,H460协议主要是用来完成网络穿透功能,而其中使用更多的是H460.18和H460.19协议,H460.18主要是完成信令上的协商穿透,其中就包括了H225信令和H245信令;而H460.19主要是完成媒体上的穿透。因此,本文在讲述gnugk的H245时,也会区分有H460协议过程和无H460协议过程。二、gnugk相关配置项gnugk对于H245协议的控制配置项,主要是由H245Routed控制,但是如果配置了EnableH46018且终端支持H460协议,或者Prox

2021-01-03 16:47:29 720

原创 gnugk5.5源码分析(5)之H225代理实现

一、gnugk的代理模式对于gnugk的实现,依据配置项,可以有不同的信令代理行为;具体来说,有下面这几种:呼叫信令(signaling messages)由终端之间直接交互,即gnugk完全不代理转发任何的呼叫信令;gnugk仅代理转发h225协议相关的信令,而不代理转发h245信令和媒体数据流(RTP/RTCP);gnugk代理转发h225和h245相关的信令,但不代理转发媒体数据流;gnugk代理转发h225和h245相关的信息,并且代理转发媒体数据流,包括T120的通道数据;这时gnug

2020-11-29 11:50:45 972

原创 gnugk5.5源码分析(4)之ras相关消息处理实现

一、ras消息类型在h225.h中,H225_RasMessage有定义了H323协议上的各类ras消息。 enum Choices { e_gatekeeperRequest, e_gatekeeperConfirm, e_gatekeeperReject, e_registrationRequest, e_registrationConfirm, e_registrationReject, e_unregist

2020-11-22 21:57:15 636

原创 gnugk5.5源码分析(3)之模板工厂

前言如果按前面第二节的内容,这节应该是接着讲Ras或者H225的socket收到包后,怎么去处理的事项。但是在开始讲如何数据包之前,我想先讲一下gnugk的模板工厂定义与实现。之所以要这样,是因为在接下来的很多地方都会用到这个实现,所以感觉应该先讲讲。简单来说,gnugk的模板工厂定义,就是定义了四类工厂方法,不带参数、带1个参数、带2个参数、带3个参数的的工厂,这里讲到的工厂,是一种设计方法,工厂可以构造生成产品;而采用模板,可以更加灵活的定义工厂的类型。在gnugk中这个实现被定义在factory.

2020-11-19 23:15:39 196

原创 gnugk5.5源码分析(2)之网络监听

前言gnugk本身是作为服务器的角色,那么就必然少不了网络监听,而网络监听整体上就大概分为UDP消息监听和TCP连接的监听。对于H323协议,其UDP相关的消息,主要是RAS消息,即GRQ/RRQ/LRQ等,而TCP相关的消息,主要是H.225.0 消息和H.245消息;因此对于gnugk的实现来说,主要也是有监听UDP和TCP两种连接的消息。一、角色划分由于是充当服务器,因此对于网络连接请求是需要监听并建立连接的。对于UDP协议,本质就是创建一个网络套接字,等待接收UDP数据包即可;而对于TCP协议

2020-11-15 22:08:24 479

原创 gnugk5.5源码分析(1)之多线程模型

前言gnugk是对H323协议的一个应用程序,其主要是实现了H323协议账号注册、呼叫代理转接等功能,其源码采用的编程语言是C++;本系列文章主要是希望分析以功能实现为划分,分析其源码实现,所采用的源码版本是5.5版本。一、多线程角色划分在gnugk5.5中,为了实现对特定的任务进行多线程执行,其内部实现了一个多线程模型。按角色划分为Agent(代理)、Worker(执行者)、Job(具体的任务),这三个角色;其相互之间的关系是Agent管理Worker,而Worker执行Job,其中Worker继承

2020-11-15 12:04:19 403

原创 pthread_setschedparam 返回 EPERM 异常

在工作中遇到使用 pthread_setschedparam时,返回了EPERM 异常,该异常是说没有权限。程序运行的环境是,ssh 连接到一台linux环境下,sudo su切换到root用户。这似乎是一个系统bug。详细的过程见:https://github.com/coreos/bugs/issues/410从该issue中,提供了两种方法:第一:更改 kernel.sched_rt_runtime_us 值为 -1.操作:sysctl kernel.sched_rt_runtime_us,

2020-11-11 19:54:45 1385 1

原创 Tornado6.0.3-源码分析之Application

一、回顾联结HTTPServer从前面上一节对HTTPServer的源码分析,我们知道Application类需要满足继承至HTTPServerConnectionDelegate类,并实现其start_request方法,该方法返回一个HTTPMessageDelegate类的实例,从而后续HTTPServer可以把相应的http的请求提交给HTTPMessageDelegate类相关的实例去做逻辑处理;二、Application的类间关系通过查看源码,可以知道,Application并不是直接继承

2020-08-16 17:25:20 395

原创 word文档中添加打勾、打叉的实现

1、打勾   输入2611 -> 选中2611 -> 按alt+x2、打叉   输入2612 -> 选中2612 -> 按alt+x

2020-06-18 08:41:18 725

原创 高cpu进程排查方法

有时候对于C或者C++程序来说,会比较高的占用电脑cpu。而且程序一般运行在linux环境下,刚好之前排查过这类问题,作个简单的记录。一般采用三个步骤,可大致定位问题位置:(1)使用 top 命令查看cpu占用较高的前几位程序,确定相应的进程。(2)对于高占用cpu的程序,依次分析。使用 top -H -p PID,进一步查看该进程内,哪些线程在高占用cpu。将目标缩小到线程级别。(3)使用strace -p 线程ID,进一步查看线程内,哪个函数调用在高占cpu。这样可以基础对照着代码查看。本人

2020-06-15 19:57:18 565

原创 Tornado6.0.3-源码分析之HTTPServer

一、前述在开始正篇之前,先简单了解下http协议。http协议是基于客户/服务器模型,面向tcp连接的协议。典型的http事务处理过程如下:(1)客户端与服务器建立连接;(2)客户端向服务器提出请求;(3)服务器接受请求,并根据请求返回对应的响应;(4)客户端与服务器关闭连接。Tornado在实现http协议时,有一种代理模式的味道。所谓代理,就是在中间起一个沟通协调作用的主体;以二手车交易来说,在买家和卖主之间的中间商,就是一个代理的作用,负责不断把信息在买家和卖主之间传递,起一个桥梁作用。

2020-05-29 22:55:10 607

原创 Tornado-6.0.3源码分析之TCPServer

一、前述在IOStream之上,区分为服务端和客户端的不同实现,对于服务端,实现方向是TCPServer–> HTTPServer --> web应用实现;对于客户端,实现方向是TCPClient --> HTTPClient;在本系列的源码分析上,优先以服务器方向为准。TCPServer类的使用方法是,继承该类并实现其中的handle_stream方法,这个handle_s...

2020-05-10 21:31:39 368

原创 Tornado-6.0.3源码分析之IOStream类

一、前述前面讲到的IOLoop类是可以实现对套接字相关的网络读写状态的监听和回调处理。在Tornado的实现里面,对于网络的数据的读写操作,进行了一层封装,以IOStream类,对上提供相应的操作接口。IOStream类并不是实时进行网络数据的读写操作,而是维持有一个内存缓冲区的操作,当需要读取数据时,先在内存缓冲区内查找是否满足读取条件,若满足,则直接从内存缓冲区中将数据读取提交给上层处理;若...

2020-04-25 20:06:57 355

原创 Tornado-6.0.3源码分析之IO Event 事件的IOLoop类及其子类

一、前述通过上一篇的Configurable类的相关介绍,这里再进一步说明IOLoop类。为了方便查看IOLoop类相应的类关系。这里也放置一张类图。从轷

2020-04-12 22:22:26 515

原创 Tornado-6.0.3源码分析之IO Event 事件的Configurable类

一、前述要想理解tornado的io event实现,主要是要学习熟悉python 标准库的asyncio库。对于这个库的API的,python在规划是分为两个层次的,如果是为了理解Tornado库,至少要先理解下,Asyncio库的Future相关知识和Event Loop相关知识。讲解说明Asyncio库,不在这篇文章的范围内。二、结构说明对于Tornado的IOLoop的整体实现,所涉...

2020-04-07 23:07:25 332

原创 Tornado-6.0.3源码分析之前述

闲言之语许久没有想起写博客了,之前尝试写了几遍,但是都没有好好坚持下来。以致于,很多自己遇到的问题,自己想到的解决方案没有被记录下来。如今回想起来,竟也是几乎全忘光了,突然感觉这种状态不能这么继续下去。如今,在学习python的一个web框架库tornado,感觉自己应该需要不断整理输出自己的思路,记录自己的学习历程;对自己而言,也是一种学习方式,对他人而言,也是一种交流方式;本人使用的是tor...

2020-04-06 14:19:02 486

原创 C#学习之旅之属性和方法

属性和方法是c#程序中的两个重要组成部分。其中,属性提供灵活的机制来读取、编写或计算私有字段的值,而方法则以一部分代码构成代码块的形式存在,用来实现一部分特定的功能。

2017-12-03 10:59:54 210

原创 C#学习之旅之数组与集合

常说,三天不念口生,三天不做手生。没有坚持下来,感觉学习起来也是蛮吃劲的,最主要的原因是会忘记了原有的知识点。 今天学习了一个数组与集合,对于数组主要是熟悉下基础的概念,基本的用法,而集合是一个新的学习概念,感觉比较新颖。在学习过后,基本整理下知识点,方便后面复习。通过xmind工具来进行分类整理是一件不错的选择。

2017-12-02 11:12:57 208

原创 C#学习之旅(3)-字符与字符串

在文字的处理方面,大多都是通过字符和字符串的操作来实现。在C#中,主要用Char类、String类、StringBuild类来实现。 (1)Char类 这里的Char类常用功能,跟c标准库的一些函数是相同的,主要是对字符的大小写转换,字符判断,特殊字符判断等。

2017-09-25 23:40:05 222

原创 C#学习之旅(2)--变量与常量

基本上学习任何一门语言,都会简单学习一下变量和常量的概念。这个相当于要书写优美的诗句,必须先掌握基本字词一样。只有先积累一些最基本的单元的概率,才能组合出优秀的代码。这里在学习过程中,并不详细讲解每一个概率,只是想较为全局的熟悉变量和常量的概率,同时对比于c语言的主要差异,以达到对比学习,加深记忆的效果。 1、变量类型 C#中的变量类型根据定义可以分为两种:一种是值类型,另一种就是引用类型。这两

2017-09-18 22:47:27 424

原创 C#学习之旅(1)

从学习C语音,到需要稍微学习一下C#基本知识。我认为这是一个编程思维的转变的过程,C语音更多的是面向过程,而C#是面向对象。并不是想说完全熟练两种语音,只是不想让自己的思维模式变局限。刚好可以借助工作之需,来学习另外一种语音。本次学习之旅,主要是学习《C#从入门到精通(第3版)》,通过在学习中记录重要知识点和记录自己的理解,来达到强化自身记忆,增进知识熟悉度的目的。 学习第一站:环境安装与基本概念

2017-09-17 19:11:01 233

原创 偶然小问题记录

在工作中常常会遇到非技术性的小问题,如果不解决,则影响自己的工作效率,同时影响心情。本文章的主要目的是在于记录所遇问题与解决方法,而这个解决方法可能是网上查找资料并验证通过,或者是自己探索发现。只是希望自己不会在同一个地方,花费时间,解决相同问题。(1)远程操作时,发现远程的显示屏太小。 比如自己电脑有个拓展屏,再去远程一个电脑时,发现电脑显示大小,不能在拓展屏上满屏。 这时只需在

2017-09-16 12:51:10 225

原创 知识点整理----输入/输出函数

输入与输出函数汇总整理

2016-11-08 22:02:27 313

原创 函数指针

函数指针使用技巧:回调函数和转移表的实现

2016-10-16 23:07:30 243

原创 程序的优化和简化技巧之一

记录学习《c和指针》过程中感触比较深的地方。

2016-10-15 17:39:14 722

空空如也

空空如也

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

TA关注的人

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