- 博客(17)
- 收藏
- 关注
原创 多线程线程数设计
1.计算密集型线程池cpu使用率较高(也就是一些复杂运算,逻辑处理),所以线程数一般只需要cpu核数的线程就可以了。 这一类型的在开发中多出现的一些业务复杂计算和逻辑处理过程中。数量一般为 N+1个 N为CPU核心数2.IO密集型cpu使用率较低,程序中会存在大量I/O操作占据时间,导致线程空余时间出来,所以通常就需要开cpu核数的两倍的线程, 当线程进行I/O操作cpu空暇时启用其他线程继续使用cpu,提高cpu使用率 通过上述可以总结出:线程的最佳数量: 最佳线程数目 = ((线程等..
2021-08-19 11:34:04 235
原创 c++11智能指针使用
智能指针是c++很重要的一项技术,面试经常会问,诸如以下几个问题:1.shared_ptr的原理是什么?2.shared_ptr是线程安全的吗?3.如何把一个已存在的指针交给已存在的shared_ptr管理?4.什么情况下使用unique_ptr?5.如何将unique_ptr对象的所有权转移给另外一个unique_ptr?6.weak_ptr解决了什么样的问题?智能指针管理的是动态内存的指针,是new出来的,那么什么情况下需要使用动态内存呢?有以下几点:1.程序不知道自
2020-11-30 14:17:37 258
转载 c++自己实现shared_ptr
#include <memory>#include <iostream>using namespace std; template<typename T>class smart{private: T* _ptr; int* _count; //reference countingpublic: //构造函数 smart(T* ptr = nullptr):_ptr(ptr){ if (_ptr){ .
2020-09-09 14:58:04 630
原创 c++服务器开发之性能优化
为什么要写这篇文章?聊技术的时候,谈到内存问题、CPU问题、效率问题的时候,无疑是考量一个工程师的实战水平,作为c++开发工程师,没有自己解决以上问题的专业手段,或许就是缺陷。我之所以写这个文章,主要是为了记录、分享我的办法。我之前写过内存泄漏的一篇文章(https://blog.csdn.net/yl175510/article/details/107384317),其实也是一种手段,如果为你所用,聊技术的时候绝对可以加分。之前一个同事在线上出问题的时候,竟然用gdb和valgrind去调试,当时
2020-09-02 11:47:53 564
原创 面试题:求二叉树节点间的最大距离
本文用c++写,主要思路是使用递归求得所有节点的左右子树的深度,求左右深度的和,最后更新最大的width。代码如下:#include <iostream>typedef struct tNode{ tNode(int data){ this->data = data; left = right = NULL; } int data; struct tNode* left; struct
2020-08-26 14:05:53 138
原创 国产化Linux应用发布
目前在国产化操作系统实现应用发布,从技术上是比较棘手的,首先要非常熟悉rdp与x11协议,其次是协议代理的工作量以及细节,包括加密、兼容性等,再就是前端化集成。最早的应用发布,都是基于windows的remoteApp的形式完成,但是国产化,是不允许存在windows的。目前国产化操作系统有麒麟和UOS,它们的内核基本是ubuntu,本质上还是linux。本人在去年负责搞国产化的项目,遇到的坑还是比较多的,但都迎难而上,最终都解决了,我写这文章不会涉及商业机密,只是说说发展形势。业界目前大部
2020-08-19 22:27:54 912 5
原创 linux模块开发初探
新手入门,绕不开HelloWord,本章写一个最简单的helloword模块,从编译到加载,再到验证,没有问题。第一步创建hello.c文件,代码如下:#include <linux/module.h> /* Needed by all modules */#include <linux/kernel.h> /* Needed for KERN_INFO */#include <linux/init.h>int __init hello_mo
2020-07-28 17:00:27 216
原创 堡垒机xrdp/guacamole协议代理
堡垒机,就是运维审计系统,它和防火墙几乎是一个时期的东西,最近两年等级保护政策让它又值钱了,包括腾讯云、华为云以及阿里云都在做。堡垒机的底层开发是基于ssh/rdp/vnc/x11/sftp/telnet等协议的研究,目前有开源项目,像guacamole/xrdp/freerdp都是非常优秀的c语言开源项目,本人研究改造源码有两年了。xrdp的代码架构很优秀,能代理rdp/vnc/xorg,但...
2020-07-16 16:50:21 2826 7
原创 c/c++程序内存泄漏跟踪总结
描述最近一段时间,服务器频繁出现内存增长严重,导致服务器性能极具下降,由于服务器代码比较庞大,而且是线上问题,所以处理起来比较棘手,好在我通过一些手段定位到了bug的具体位置,故以记录之。由于是线上问题,所以像valgrind、gdb、memstack基本不适用,就算你是gdb高手,通过gdb adb attach pid 和gdb dump memory 也是不能很准确定位,而valgrind本身的消耗会影响别人测试或者调试。c/c++程序的内存泄漏,个人认为有几种情况:1、malloc、
2020-07-16 16:48:17 988 2
原创 linux文件加锁与解锁
废话少说,贴两个函数,加入到你的项目中,能用。#include <fcntl.h>intg_file_lock_wait(int fd, int start, int len){ struct flock lock; lock.l_type = F_WRLCK; lock.l_whence = SEEK_SET; lock.l_start = start; lock.l_len = len; if (fcntl(fd, F_SET...
2020-07-09 17:25:20 664
原创 c语言写归并排序
直接贴出代码#include <stdio.h>#include <string.h>/**func:合并被middle分割的两个数组,以下称为左右两部分*input:data数组,开始位置,中间位置,结束位置*output:void*/void merger(int *data,int start,int middle,int end){ int i = start; int j = middle+1; int len = end-
2020-05-18 00:13:46 261
原创 c语言写快速排序
对于c/c++开发者而言,掌握快速排序,不单为了工作面试,更多的是在实际开发当中能够使用它,并且能够根据分治思想解决其他的复杂问题。这是我个人认为学习快排的意义。在标准c库中提供的快排声明是这样的:#include <stdlib.h>void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));void qsort_r(v
2020-05-10 17:40:57 206
原创 Nginx流数据转发之代理远程桌面
一、下载nginxwget http://nginx.org/download/nginx-1.17.10.tar.gz二、解压、编译、安装tar xzvf nginx-1.17.10.tar.gz tar xzvf nginx-1.17.10.tar.gzcd cd nginx-1.17.10/./configure --with-streammakemake inst...
2020-05-03 13:08:19 7925 8
原创 用c语言实现的epoll服务器
在linux后台开发实战操作中,epoll服务器,是必备技能。我今天就写了一个最简单的TCP server,你稍微改改就可以用于简单的数据通信。如果要实现别的功能,比如ET,非阻塞,数据缓存,那都要围绕读写函数改了。主要的系统API:int epoll_create(int size);int epoll_wait(int epfd, struct epoll_event *...
2020-04-16 19:35:59 976
原创 automake与autoconf
在linux c开发,对于小项目,写一个简单的Makefile就可以构建程序了,但是如果写一个自由软件的Makefile呢?我们经常用到的是automake和autoconf,就可以使用./configure,make,make install安装程序了。一、安装工具软件centos:#sudo yum install autoconf automake libtool -y...
2020-03-24 23:01:51 359
原创 c语言创建文件、文件夹、判断文件内容是否为空
linux c开发一定会遇到创建文件,废话少说,代码如下,不足之处请多指教!#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdbool.h>#include <stdio.h>...
2020-02-16 16:26:11 2700
原创 select函数使用细节
linux c/c++开发的同志们一定要掌握select函数,因为它简单高效。以下是本人开发中遇到的几个问题。一、函数原型int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);参数解析:nfds:最大监听fd数,一般是最大文件号加1re...
2020-02-16 16:03:40 645
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人