- 博客(68)
- 收藏
- 关注
原创 所有Gcc版本对C和C++的支持情况(超详细版本)
在最近接触的新的项目,由于技术使用为C98风格实现,遇到一个问题需要加锁解决,本能反应用lock_gurad+mutex解决,但是没设置CFLAGS为C++11标准,不确定当前gcc编译器默认支持的C和C++标准是什么,索性就一把都研究透彻,方便后面查看和使用。纯手工一个一个查找标准对照的,十分耗时,多谢支持。
2023-04-27 13:34:59 57141 11
原创 达梦数据库DPI接口常用句柄、宏、返回值信息
函数调用的返回信息放在诊断区域中。每一个环境、连接、及描述符句柄都有一个诊断区域。在诊断区域的头字段返回一般的函数执行信息,它的记录字段记录函数调用的错误信息和警告。用户可以指定获取某一个记录的信息从而更准确地判断函数执行的情况。句柄是用于 DPI 函数申请和使用资源的变量。数据类型为数据库中字段类型和 C 语言的数据类型。数据来源达梦在线官方技术手册。
2023-12-26 23:10:34 1394
原创 C++ std::string使用效率优化
字符串操作是任何一个C++开发程序无法绕过的点,很多时候针对字符串的操作需要进行优化,从而达到更优的使用效率和内存利用率。一般会采用标准的std::string替代C字符串,一方面是std::string为一个成熟的类对象,其成员操作基本能满足绝大多数的使用场景,另一个方面是因为string在标准库中已经实现了自动的扩容操作(capacity),不用使用者再为内存空间的分配而做过多的操作,从而减少对内存管理带来的性能开销。针对string的使用,不同的使用方法会带来很大的性能差距。
2023-12-26 23:04:12 2137
原创 std::string多个插入字符方式以及效率对比
往string字符串里插入单个字符时,有多种实现方式,+=、append()、push_back(),这些方式适用于不同的插入场景。适用的插入场景。
2023-12-25 19:52:15 1677
原创 std::string在 Windows MSVC和Linux Gcc 中capacity容量扩容策略的分析和对比
在std::string中,capacity()为当前string占用内存字符的长度,表示当前string的容量,可以理解为一个预分配制度,如果当前的string不断进行扩展操作,则不需要每次都进行内存上的分配,提高程序的运行效率。所以capacity的值会大于等于size,而不是代表当前string的实际大小。
2023-12-25 14:28:40 2190
原创 Oracle客户端版本安装
进入网站下载对应的oracle版本,通常环境所用的包有:basic、sdk、sdkplus三个包。names.initial_retry_tiemout = 300 确定客户端在将请求重新发送到首选服务器列表中的下一个服务器之前等待名称服务器的响应的时间。chown -R oracle11:oinstall /opt/oracle11 将权限转移到oracle11用户下。mkdir -p /opt/oracle11 在opt目录下创建oracle11目录。设置分布式事务的初始重试超时时间的参数。
2023-05-25 11:38:06 2666
原创 Oracle 连接报错ORA-12154
在连接Oracle数据库时,出现连接报错:ORA-12154:TNS:could not resolver the connect identifier specified. 原因一:查看当前用户的.bash_profile文件中是否配置环境变量如果没有设置TNS_ADMIN的环境变量,则需要进行设置,设置的路径为当前环境下oracle客户端安装的目录tsnames.ora的路径然后再使能生效:原因二:如果已经设置了环境变量,则需要排查tsnames.ora中是否已经添加了正确的oracle配置。如果没有自
2023-05-15 17:44:46 10472
原创 算法之路--直接插入排序算法
在介绍插入排序算法之前,先举证一个我们都熟悉不过的例子即可理解插入排序。我们在打牌的时候,由于每次抽到的牌大小不一,为了在出牌时了解自己手里都还剩什么牌型,所以每次对抽到的新牌都会做一个排序,怎么比较呢,就是把新拿到的牌和已有的牌一一比对,按照从小到大进行排列,这恰恰就是插入排序的精髓。这样一讲是不是就很好理解插入排序了[手动狗头]。
2023-05-12 00:37:00 307
原创 算法之路--快速排序算法
由于冒泡算法)每轮都要进行从头到落位之前的每个元素的比较,在执行效率上需要提升,快速排序算法就是对冒泡算法的一种效率上的提升。
2023-05-10 22:07:27 750
原创 算法之路--冒泡排序算法
很早就想系统梳理所接触的所有算法,但是只是存在于一个想法阶段,懒惰使人遗忘不是么。作为一个软件开发人员,绕不开算法与数据结构,既然绕不开,何不逐一分析学习透彻,与君共勉之。冒泡排序算法(Bubble Sort)作为排序算法较为基础的一种,也是比较好理解的,所以先从这里开始总结排序算法。排序算法也根据实际的算法思路分为插入排序、选择排序、交换排序、归并排序,冒泡属于交换排序的一种。
2023-05-10 00:42:42 632
原创 一文搞懂linux的proc文件
最近由于定位问题,频繁查看一些proc的文件信息,所以索性就一文撸到底,把proc翻个底朝天吧。在linux系统/proc目录中一些文件,记录一些系统运行时的信息,比如内存信息、网络信息、cpu信息等,但是要注意的是,这个目录下并不是保存真正的文件或者目录,只是一个伪文件系统。它只是保存在内存中,不是持久化的文件。可以理解为内核开放的一个集中查询系统信息的地方,方便查找使用,符合linux文件系统的习惯。
2023-05-07 13:02:54 4083
原创 Qt面试常见问题
2、 Qt::DirectConnection:信号的发送者与信号的接收者在同一线程中执行,当发出信号后,会马上进入槽函数,看上去就像在信号 发送位置调用了槽函数,在多线程下会比较危险,容易造成崩溃。3、 Qt::QueuedConnection:信号的发送者与信号的接收者不在同一线程中执行,槽函数运行于信号的接收者线程,当发送信号后, 槽函数不会马上被调用,等待信号的接收者把当前函数执行完,进。1、类型安全:需要关联的信号槽的签名必须是等同的,即信号的参数类型与槽的参数类型是一致的。
2023-05-03 20:54:03 1599
原创 Linux内核面试知识总结
在获取某类型消息的时候,若队列中有多条 此类型的消息,则获取最先添加的消息,即先进先出原则。当线程完成后,内核会寻找处于就绪状态相同。4、虽然大部分情况下,物理内存都是够用的,但是总有一些意想不到的状况,比如某个进程需要的内存超过了预期,或者有进程存在内存泄漏等,当内存不够的时候,就会触发内核的 OOM killer,靠软件中断实现的,首先,用户程序为系统调用设置参数,其中一个编号是系统调用编号,参数设置完成后,程序执行系统调用指令,X86上软中断是有int产生的,这个指令会导致一个异常,产生于一个。
2023-04-30 15:37:46 1102
原创 Orcale中OCILogon和OCIServerAttach登录方式的区别分析
几乎每个OCI调用的参数列表中都会包含一个或多个句柄。一个句柄就是一个指向由OCI库分配的存储空间的不透明指针。应用可以使用句柄存储上下文或连接信息,例如环境或服务上下文句柄,也可以存储OCI函数或数据的信息,例如错误或describe句柄。句柄让编程变得简单,因为是使用库来维护数据而非应用来维护数据。大多数OCI应用必须要获取存储在句柄中的信息,所以设计通过set和get属性的OCI调用,OCIAttrGet()和OCIAttrSet()来访问或设置这些信息。
2023-04-26 16:49:55 1050
原创 实现一个linux系统健康诊断插件(通过内存&CPU使用率和网络丢包率)
我们的系统在很多运行情况下,由于内存和CPU使用情况不当,或者网络链路不佳的情况下,会出现一些意想不到的问题,所以设计一个插件实现系统的健康诊断。读取/proc下对应的CPU、内存、网络信息情况,计算出内存和cpu的使用率,以及网络收发包的丢包率,根据这三项情况判断系统的健康情况。设置每项的一个健康阈值,当计算的上述三项超过所设阈值时,判断该项为不健康。net_cal.h/cpp:用于计算网络收发包丢包率。cpu_cal.h/cpp:用于计算CPU使用率。mem_cal.h/cpp:用于计算内存使用率。
2023-04-24 20:57:16 904
原创 malloc的一些知识
除了参数上区别,两者的处理机制也是不同的,malloc不会对当前申请出来的内存进行初始化操作,即动态分配完内存后里面的数据是随机数,所以我们在调试程序时,单步或者断点到刚分配的内存这里是一串霍金都看不懂的东西。也正是因为多了这个初始化的操作,calloc的效率不如malloc,这也就顺带解答了另外一个疑惑,就是为什么工程中用的malloc较多,而不是calloc,因为很多时候的malloc内存并不需要初始化这一步,如果需要加一个memset也就解决了。malloc出来的空间,只是在虚拟内存中是连续的。
2023-04-23 21:31:03 1185
原创 【golang学习笔记】——(五)Go格式化统一代码风格
我们在入职一家新公司的时候,除了要学习公司的流程规范和规章制度,还会做的一件事情就是进行公司编码规范的学习,基于google的C++规范下,做了各自的发散和规范,久而久之就是包罗万象的样子,疲于应付各种规范约束,但是代码的规范统一是有必要的,至少从代码的可读性和干净度上是让人舒适的,否则会很头大。对于go的开发者来说,每次提交开发的源码之前进行一次格式化是一个好的开发习惯。如果接收一个已经开发中或者开发完成的项目,晦涩难读的代码让你很难到达高效的熟悉代码和业务,那先进行gofmt会是一个很好的解决办法。
2023-04-22 21:43:31 894
原创 动态类型语言、静态类型语言、强类型语言、弱类型语言解释
首先要明确这些名词都是针对数据类型展开的各自定义,同样针对数据类型在编译时和运行时会有一些限定或者规则存在。动态类型语言不能等同于弱类型语言,静态类型语言也不能等同于强类型语言。静态类型语言和动态类型语言放到一个维度来进行评价类型系统,而强类型语言和弱类型语言是在另一个维度来评价类型系统。1、静态类型语言和动态类型语言静态类型语言和动态类型语言评价类型系统的维度可以理解为类型的定义。1.1 静态类型语言。
2023-04-22 11:25:36 467
原创 【golang学习笔记】——(四)Go语言的一些特质
简化C/C++中依赖关系,C/C++的头文件include方式,导致越来越多依赖关系使得编译庞大而繁重的工作量,构建大项目时间久,Go采用拥有严格依赖关系检查机制的包模型方式,大大提升编译构建效率,堪比脚本语言和动态语言。,同时为了能让当前的主流语言开发者能更顺手的使用Go,Go是类C语言的语法,但是同时又极大简化了这些语法的使用,使得代码更为简洁干净易读,也就是。Go是第一门完全支持UTF-8的编程语言,可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。
2023-04-22 01:47:18 298
原创 Linux用户管理
输入用户test的密码后会有第二次确认输入密码的确认。在非root用户下要输入root用户密码才能操作。-m:自动建立用户的登入目录。修改test的uid为200。修改test的gid为200。创建用户名为test的用户。
2023-04-21 10:10:48 429 1
原创 Http常用面试知识总结
Last-Modified: Fri, 27 Jul 2018 11:04:55 GMT //是服务器发来的当前资源最后一次修改的时间,下次请求时,如果服务器上当前资源的修改时间大于这个时间,就返回新的资源内容。Cookie:是存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问服务器的时候,浏览器通过HTTP协议,将他们的本地cookie内容也发到服务器上,从而完成验证。强缓存(本地缓存):利用头部的expries和cache-control两个字段来控制的,用来表示资源的缓存时间。
2023-04-20 23:30:59 756
原创 Docker&K8S常见面试知识
每个pod里运行着一个特殊的被称之为pause的容器,也称根容器,而其他容器则称为业务容器;2、一个pod可以包含1个或多个容器,1个容器一般被设计成只运行1个进程,1个pod只可能运行在单个节点上,即不可能1个pod跨节点运行,pod的生命周期是短暂,也就是说pod可能随时被消亡(如节点异常,3、每一个pod都有一个特殊的被称为"根容器"的pause容器,也称info容器,pause容器对应的镜像属于k8s平台的一部分,除了pause容器,每个pod还包含一个或多个跑业务相关组件的应用容器;
2023-04-20 23:26:34 1639
原创 达梦数据库查看所有表
达梦数据库的管理工具用起来习惯有别于navicat,表是在模式下,具体所用的表查看可以模式下的任意一个模式位置右键->生成SQL脚本里随意生成一个脚本,然后删除内容,执行,即可显示所有数据表。
2023-04-19 10:01:50 9237 5
原创 【golang学习笔记】——(二)配置golang vscode开发环境
本次学习采用vscode进行开发,vscode有比较成熟的插件,使用起来比较方便。
2023-04-18 23:58:11 477 1
原创 达梦数据库无启动执行配置,如何启动
一般达梦数据库的管理和操作指导手册或者博客都会说创建一个dmdba用户,然后在当前创建的dmdba用户中进行操作安装~部署~启停操作,不用一些操作需要sudo到root用户执行才行。当前在一台已经安装了DM SQL的环境下,需要启动DM,但是根据博文的说明,要执行DMServiceDMSERVER.service,但是全局搜索了一下,并没有找到DMServiceDMSERVER.service。在这个时候也想过要用dmserver可执行程序直接启动,不过还是执行失败。
2023-04-17 19:47:48 2339
原创 WSL2下ubantu安装C++应用
由于使用的语言是C++,所以安装一些C++的应用,其实WSL2下的ubantu安装应用,和普通ubantu一样。先检测环境是否有cmake,如果有cmake已经安装,则会显示出安装路径。或者通过wget方式获取指定版本安装包,然后进行解压。确认没有安装后,进行安装。
2023-04-15 00:02:41 385
转载 C++ “error LNK1169: 找到一个或多个多重定义的符号” 解决方法
查看头文件包含是不是重复了**可以参考http://blog.csdn.net/m_leonwang/article/details/37598807这是一个连接时候检查到的错误,大概有下面几种情况会引起这个错误。1.变量定义:A.h中声明了变量a(非类成员变量),A.cpp是A.h中所声明的类的实现源代码,B.cpp是主程序文件,包含头文件 A.h。编译能够通过,但链接时出了”...
2020-04-15 19:29:52 840
原创 C++每日一题——字典排序
题目描述给定n个字符串,请对n个字符串按照字典序排列。输入描述:输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。输出描述:数据输出n行,输出结果为按照字典序排列的字符串。示例1输入9captocatcardtwotooupboatboot输出boatbootcapcardcatto...
2020-04-13 19:40:50 1974 1
原创 TortoiseSVN回退到指定版本的方法和注意事项
回退到指定版本的方法:1、首先选中要回退的文件,右键——【TortoiseSVN】——【Show log】,打开【Log Messages】窗口,在这里可以看到该文件的各个版本(revision)的信息2、在【Log Messages】窗体中选择想要回退的版本,鼠标移动到该版本,左键点击。3、此时有两个选择:【Update item to revision】以及【Revert to this...
2020-04-13 16:24:58 15426
原创 C++每日一题——字符串距离计算
给定两个长度相等的,由小写字母组成的字符串S1和S2,定义S1和S2的距离为两个字符串有多少个位置上的字母不相等。现在可以选定两个字母X1和X2,将S1中的所有字母X1均替换成X2。(X1和X2可以相同)希望知道执行一次替换之后,两个字符串的距离最少为多少。字符串的最大长度为50000例如输入:“aabb” “ccdd” 将第一个字符串的a替换为c,则第一个字符串为“ccbb”,距离为2...
2020-04-11 15:19:08 755
原创 C++每日一题——斐波那契数列实现
现在要求输入一个整数n,请你输出斐波那契数列的第n项(从1开始,第1项为1)斐波那契数列形式:1 1 2 3 5 8…例如输入 5 输出5实现关键:递归实现#include<iostream>using namespace std;int cal(int num){ if (num == 1) { return 1; } else if (num == 2)...
2020-04-11 14:36:45 525
原创 C++回调函数的实现和使用场景介绍
什么是回调函数回调函数是一种被主动调用并用来进行相应数据推送的一种函数形式,通常回调函数的编写者只负责进行回调函数的编程实现,不进行主动执行。回调函数的实现方式回调函数通过函数指针的形式实现。函数指针是一个指向特定函数的指针,函数的类型由其参数以及返回类型共同决定,与函数的具体名称没有什么关系。typedef int(*pFunc)(int,int),在该指针前面的int为函数的返回类型,...
2020-04-11 14:21:12 946
原创 C++每日一题——替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。#include <iostream>#include <string>using namespace std;int main(){ std::string str(""); getline...
2020-04-10 17:37:29 141
原创 C++每日一题——水仙花数
求100~999中的。所谓水仙花数是指一个三位数,它的每位数字的立方之和等于该数。例如,因为153=13+53+33,所以153为水仙花数。#include <iostream>#include <math.h>using namespace std;int main(){ for (int i = 100; i < 1000; ++i) { int...
2020-04-10 16:40:12 733
原创 VS附加进程调试
什么是附加进程调试?附加进程调试就是将当前的代码工程附加到一个电脑程序进程中进行调试运行,从而达到调试定位问题的目的。附加进程调试的场景1、软件运行崩溃,无dump或者dump看不出关键信息;2、当前代码工程编译的库不作为启动项,而是作为运行库用附加进程的步骤1、开启需要附加的进程2、打开代码工程,调试-附加到进程3、找到需要附加的进程,点击附加即可。...
2020-04-09 16:00:58 2100
oracle19使用崩溃
2023-08-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人