
后台开发
文章平均质量分 74
后台服务器开发
这个作者很懒,什么都没留下…
展开
-
一文带你彻底理解高性能无锁队列
一文带你彻底理解高性能无锁队列目前,大部分软件设计都在追求高性能,快速处理,耗时低,仿佛已经是行业中必不可少的一部分。作为互联网从业人员,我们也必须适应时代的潮流,彻底掌握这种高性能编程。问题引入:一个生产者,多个消费者的队列,如果是你,你回怎么设计?想必拿到这个问题,更多的人脑海中已经浮现了一把锁;我也是的,那我们就从浅入深的来看看高性能的无锁队列是怎么一步一步的演化开来的。1、低效的实现队列编写多线程的时候,往往会发生资源竞争的现象,导致我们不得不加锁去保护变量,但在这个的同时也对性能原创 2021-04-11 16:52:10 · 1099 阅读 · 0 评论 -
带你彻底理解 Redis 持久化
带你彻底理解 Redis 持久化一、前言redis作为内存数据库,在我们后端开发中应用是非常多的,尤其是在大流量背景下,redis作为缓存数据库就必不可少了。想了解redis使用场景可以移步至redis使用场景。redis 作为内存数据库,就会存在一个致命的问题,比如宕机、停电、自然灾害等等导致redis停止服务,那么内存中的数据就会丢失,对于不重要的数据还好,但是一旦涉及到核心数据,这个是万万不能接受的。为此,redis也为我们提供了两种持久化方式,AOF和RDB持久化,既然两种持久化方式是同时提供原创 2020-12-13 08:50:59 · 336 阅读 · 0 评论 -
镜像制作大法
镜像制作大法一、前言上一节《程序员背锅救星-docker》中,我们讲述了docker最基本的概念以及镜像、容器以及仓库的概念和使用,还包含了实践内容,我们通过拉取centos镜像,创建容器并且进入容器对linux系统进行操作;但是那只是利用了仓库中的镜像,然后创建容器进行操作的,那我们如果需要自己的镜像改怎么做呢?这次就和大家一起看看镜像是怎么制作的~二、制作镜像一般制作镜像有两种方式,一种是基于commit命令,另外一种是基于dockerfile创建镜像;过程如下图所示:对于这两种创建镜像原创 2020-11-14 20:17:17 · 1684 阅读 · 0 评论 -
程序员背锅救星-docker
程序员背锅救星-docker一、前言本篇内容带大家走进docker的世界,从基础到实战,从头到尾讲述docker的概念和使用docker进行环境部署等等一系列“骚”操作~二、docker概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 就如上述你看到的图片一样,容器的设计理念由码头上的集装箱而来,通过集装箱原创 2020-11-07 13:13:04 · 297 阅读 · 1 评论 -
大道至简—循环队列
大道至简—循环队列一、前言 队列可能是大家学习linux通讯时接触到的知识,当然也是我们在编程中使用较多的一个点,其中最主要的一方面用来降低程序之间的耦合度,还有异步操作; 前段时间在公司写了一个小的服务,同样使用了队列对服务进行了异步操作,知识队列没有使用现有的一些大型库,自己使用了原生的STL队列中的接口,进行了简单的封装,当前对代码调优不够,后来才发现有很多的漏洞影响着性能;其中就有一条是引发今天这篇文章的元素——在程序中,需要不断的申请释放内存,这样就影响了程序的性能; 使原创 2020-09-18 08:00:26 · 281 阅读 · 0 评论 -
windows程序崩溃调试终极武器
windows程序崩溃调试终极武器—dump文件一、前言前不久开发了一款windows程序,目前已经是测试跑了,对于windows程序熟悉的童鞋,应该都知道一个事,就是他运行时有一个黑框,如果崩溃的就是下面这种情形~[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QBnXE8go-1599873016190)(https://imgkr2.cn-bj.ufileos.com/3d8c2beb-b08a-4fc2-9486-3486f2ea1a9c.png?UCloudPu原创 2020-09-12 09:11:21 · 563 阅读 · 0 评论 -
常见的网络编程面试题汇总
常见的网络编程面试题汇总一、前言上篇文章为大家介绍先目前后台开发岗位的一些要求,请查看:后端开发岗位要求汇总,希望能帮助到大家;今天这篇常见网络面试题是不对前面介绍岗位的网络部分的一个补充,这些面试题都是收集与网络,答案如果错误,请及时联系我进行修正,免的维大家造成知识的错误二、网络面试题tcp和udp的区别(1) TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接(2) TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不原创 2020-08-23 08:55:18 · 1009 阅读 · 0 评论 -
GDB 多线程之旅
GDB 多线程之旅前言首先,我来说下为什么写多线程吧!作为一个工作几年的小老鸟,接触到的最多的编程,就是多线程编程!在多线程的世界中,每一个变量,每一把锁都是至关重要,稍微一个不小心,就会冲突或者异常;此时,调试代码就是重中之重了!Windows就不说了,主要有界面,打断点,查变量等等操作简直容易的不要不要的了!Linux下的多线程调试就比较骚气了,由于没有界面的“光环”加持,所以我们必须要借助强大的辅助工具----GDB,熟练使用GDB调试程序,是一个linux程序员必备的技能之一;这里我原创 2020-08-08 09:35:45 · 280 阅读 · 0 评论 -
掌握这个技能,你可以畅游github
掌握这个技能,你可以畅游github一、前言 github,被戏称为全球最大的同性交友网站,主要汇集了大量的程序猿,是程序员的汇集地;在github上有大量的开源项目供广大程序猿参考和学习,但是很过人都不知道怎么去使用github去获取自己想要的资料和项目; 福音来了!这篇文章带你去一探究竟!二、畅游githubGitHub Trend 与 GitHub TopicGitHub Trend总结了每天/每周/每月周期的热门 Repositories 和 Developers原创 2020-05-30 09:44:12 · 301 阅读 · 0 评论 -
异步日志文件模块实现
异步日志文件模块实现前先时间,在公司做的一个项目,当时并没有觉得有什么问题;但是后来发现,在写日志的时候,每次都是同步在写,尤其是写文件,这个是比较耗时的,所以就想优化一下;优化方案:异步读写这里的异步是利用队列来做每个模块都将日志写入队列,不关心写入成功还是失败;创建线程专门用于读取队列中的日志信息,进行写日志文件情景图[外链图片转存失败,源站可能有防盗链机制,建议将...原创 2020-02-29 09:17:49 · 736 阅读 · 0 评论 -
Seesion在C++服务端是怎么使用的?
Seesion在C++服务端是怎么使用的?前面介绍了cookie和session两种机制的产生和使用过程(可以关注CPP后台服务器公众号查看),但是,似乎在我们C++后台开发过程中遇见的很少;那session在我们服务端是怎么使用的呢?首先,我们看一个需求: 客户第一次设置登陆后,以后再次登陆的时候,想要使用快捷登陆或者是一键登陆,比如我们使用指纹登陆,即可获取我们的账户信息 ...原创 2020-02-23 11:24:35 · 1351 阅读 · 0 评论 -
session与cookie
session与cookie首先,先来看一下会话的概念;想必大家都听说过HTTP协议吧。这里不做过多的表述,不同自行百度即可;说一下HTTP协议的最突出的特点就是一种无状态的协议,一旦数据交换完毕,就会关闭连接,如果需要再次交换新的数据,就需要重新建立连接,这样服务器端是无法跟踪上一次的会话,服务端会把它作为新的客户端来处理,那么会出现以下的场景: A 买了商品A,B买...原创 2020-02-22 09:18:15 · 252 阅读 · 0 评论 -
GDB不同文件断点调试
GDB不同文件断点调试作为一个linux下C/C++开发人员,调试工具是必不可少的一项技能,在windows平台,会有很多工具给我们用,比如VS,自带很强大的调试工具。当然,linux平台夜市毫不逊色,GDB工具是一个非常强大的代码调试工具。今天主要介绍的是GDB在多文件中的调试方法,不会一一介绍基础命令的。一、同一个目录中的文件现在,有三个文件,分别为main.cpp、test1.cp...原创 2019-12-22 21:41:28 · 715 阅读 · 0 评论 -
linux coredump调试
linux coredump调试一、概念coredump:Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。该文件也是二进制文件,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的m...原创 2019-12-21 21:25:04 · 341 阅读 · 0 评论 -
C++11 async
C++11异步 async一、简介**std::async()**是一个接受回调(函数或函数对象)作为参数的函数模板,并有可能异步执行它们.函数原型:template<class Fn, class... Args>future<typename result_of<Fn(Args...)>::type> async(launch policy, F...原创 2019-10-13 14:54:40 · 190 阅读 · 0 评论 -
厉害了,监控程序
厉害了,监控程序在程序员的生活中,往往会见识到很多高大上的程序;这两天做项目,需要做一个监控C++程序是否运行的,并且程序挂掉后需要自动重启程序;第一个想到的方案是监控进程,但是重新启动程序,却并不是那么容易;好在我们平时一直接触一门强大的“胶水”语言——python,可以完美的完成这两个任务,监控可重启。思路:1.启动定时线程2.检测进程是否存在3.不存在则启动程序接下来,我们...原创 2019-09-09 22:07:01 · 879 阅读 · 0 评论 -
进程篇:循环创建N个子进程
进程篇:循环创建N个子进程标签:fork();N个子进程从前面的进程篇——fork()可以了解到fork函数会创建父进程和子进程,并且他们在执行的时候,怎么来控制说是先创建父进程,还是先创建子进程呢?其实根据计算机原理来说,父子进程抢占cpu,谁先得到就谁先执行,其实也有一种说法,是父进程先执行的可能性比较大,但是没有理论依据。好了,费话不多说,我们来看代码。 首先,我们先看这样的一...原创 2018-05-14 00:00:00 · 5253 阅读 · 1 评论 -
进程篇—exec函数族
进程篇—exec函数族关键字:exec函数族首先,我们来看一下什么是exec函数族? 所谓exec函数族,就是以exec开头的函数,比如execl函数、execlp函数等,所以称它为exec函数族。 在exec函数族中,一般是由fork创建子进程后,在子进程中执行,也就是替换子进程中的东西,进程中的空间代码完全被新程序代替,但是调用exec程序不会创建新进程,进程ID也没有发生变化...原创 2018-05-14 13:32:58 · 2784 阅读 · 1 评论 -
守护进程?竟然这么简单
守护进程 在linux系统中,我们会发现在系统启动的时候有很多的进程就已经开始跑了,也称为服务,这也是我们所说的守护进程。 守护进程是脱离于终端并且在后台运行的进程,脱离终端是为了避免在执行的过程中的信息在终端上显示,并且进程也不会被任何终端所产生的终端信息所打断。 守护进程一般的生命周期是系统启动到系统停止运行,当人,什么都敌不多人,也可以通...原创 2019-02-15 22:30:25 · 624 阅读 · 0 评论 -
内存检测王者之剑—valgrind
记得在大学的刚开始学习C/C++的时候,对于内存问题一点也没有关心过,其实也是关心比较少,知道后来才慢慢注意起来,当时排查是否有内存泄漏全靠手,去看看malloc和free或者new和delete是否对应起来,这也是一种比较简单的查询是否有内存泄漏的办法,后来老师提供了一种用程序来检测是否有内存泄漏,其实就是重载new和delete的方法。 今天,我们一起来学习一...原创 2019-02-12 19:13:59 · 390 阅读 · 0 评论 -
Redis从入门到使用
初识Redis Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。 Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原...原创 2019-03-03 13:25:53 · 221 阅读 · 0 评论 -
mysql->redis同步
hello,大家好,今天看到一篇redis相关的文章,我自己专门把代码搞到跑了一下,还是不错的,对于我们平时使用redis和mysql同步还是很不错的,工作中也是可以去使用的,因为这个确实会比我们去使用代码的方式去读取数据库再次插入到redis中,效率会高的多。1.开发环境开发环境:linxu开发语言:C/C++ mysql使用的库:hiredis2.redis通信协议(1...原创 2019-06-16 21:34:36 · 1023 阅读 · 0 评论 -
crontab使用方法
如果你“假装”对工作感兴趣,这种态度往往会使你的兴趣弄假成真。这种态度还能减少疲劳、紧张和忧虑。 除了身体的运动,我们更需要的是精神、心智上的运动,以便促使我们付诸行动。 每天时时跟自己交谈,可以引导自己思考什么是勇气和幸福,什么是平安和力量;每天跟自己谈些需要感谢的事,这样,你的心灵就会海阔天空,快乐欢畅。 去假装,或者怎样。从中体会到其中的趣味才是关键。——戴尔·卡耐基《人性的弱...原创 2019-06-17 22:30:58 · 653 阅读 · 0 评论 -
sql坑不等于使用
sql存储过程的坑一、存储过程做过开发的都应该清楚,尤其是服务端开发,必然要和数据库有很深的渊源,尤其是很多业务需要操作数据库来完成,那么存储过程就是程序员必备的一项技能了。这篇文章中不去介绍存储过程的语法等是怎么去写,这个对于数据其他语言的人来说,很快就会上手二、遇到的坑最近编写存错过程的时候,遇到一个坑,虽然很简单,但是很多人可能开没注意到。我们知道存储过程中也有if…else的...原创 2019-06-28 13:11:49 · 2511 阅读 · 0 评论 -
GDB不同文件断点调试
GDB不同文件断点调试作为一个linux下C/C++开发人员,调试工具是必不可少的一项技能,在windows平台,会有很多工具给我们用,比如VS,自带很强大的调试工具。当然,linux平台夜市毫不逊色,GDB工具是一个非常强大的代码调试工具。今天主要介绍的是GDB在多文件中的调试方法,不会一一介绍基础命令的。一、同一个目录中的文件现在,有三个文件,分别为main.cpp、test1.cp...原创 2019-08-03 09:04:18 · 3670 阅读 · 0 评论 -
后端开发工程师必备技能——wireshark抓包
抓包原理wireshark这篇文章主要是用来记录一下wireshark原理和使用方法,包括一些功能。一方面分享,一方面给自己做个笔记,而且作为一个后台开发人员,掌握抓包工具是必备的技能之一。一、wireshark简介Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCA...原创 2019-07-27 18:05:50 · 1565 阅读 · 0 评论 -
boost库function与bind
boost库function与bind一、function头文件:boost/function.hppfunction更合适的说法我觉得是一种回调函数的表现方式。boost::function是一个函数对象的“容器”,概念上像是C/C++中函数指针类型的泛化,是一种“智能函数指针”。它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调用对象。在声明 functio...原创 2019-08-17 18:21:03 · 307 阅读 · 0 评论 -
数据库连接池
数据库连接池前言:在后端开发过程中,有很多技能是必备的,比如我们今天说到的数据库;后端人员与数据库打交道是最多的;当然,数据库连接并不是我们所想的那么简单,知识单纯的连接一下就OK了,其实在这其中还有很多的坑等着我们去踩,我这里提出来几个点,大家可以思考一下:1.数据库连接后,怎么防止断开,断开会又是怎么重连的2.数据库带宽打满后,数据库超时,我们需要怎么处理3.数据库异常,我们又改怎么...原创 2019-09-01 17:28:50 · 497 阅读 · 0 评论 -
flask+nginx+uwsgi
首先,我们来理理这三者之间的关系:总括来说,客户端从发送一个 HTTP 请求到 Flask 处理请求,分别经过了 web服务器层,WSGI层,web框架层,这三个层次。不同的层次其作用也不同,下面简要介绍各层的作用图1:web服务器,web框架与 WSGI 的三层关系Web服务器层对于传统的客户端 - 服务器架构,其请求的处理过程是,客户端向服务器发送请原创 2017-08-14 18:22:59 · 484 阅读 · 0 评论