自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 mysql-全局锁和表锁

MYSQL之全局锁 & 表锁

2022-07-03 12:01:18 170 1

原创 戏说python * 与 **

python参数详解

2022-06-25 21:18:32 146

原创 sysbench安装避坑

sysbench安装避坑本章主要介绍sysbench安装的错误如何解决,并不教学如何安装sysbench本文的方法适用于安装sysbench前后1. sysbench运行出现:error while loading shared libraries: libluajit-5.1.so.2: cannot open解决方法:yum -y install lua*2. 运行出现 sysbench: error while loading shared libraries: libck.so.0:

2022-03-21 21:06:58 1479

原创 快速掌握AsyncIO---新手入门

Python AsyncIOasyncio是从Python 3.4+开始引入的标准库,从而支持async IO,协程(coroutine)。举个例子:假设有1个洗衣房,里面有10台洗衣机,有一个洗衣工在负责这10台洗衣机。那么洗衣房就相当于1个进程,洗衣工就相当1个线程。如果有10个洗衣工,就相当于10个线程,1个进程是可以开多线程的。这就是多线程!那么协程呢?先不急。大家都知道,洗衣机洗衣服是需要等待时间的,如果10个洗衣工,1人负责1台洗衣机,这样效率肯定会提高,但是不觉得浪费资源吗?明明1

2022-03-04 21:28:58 1625

原创 你知道FreeRTOS的故事吗?

你知道FreeRTOS的故事吗?RTOS系统的核心就是任务管理,FreeRTOS也例外。1. 多任务系统​ ✨51、AVR、STM32单片机裸机(未使用系统)一般都是在main函数的while(1)一个大循环里完成所有的操作,即应用程序是一个无限的循环,循环中调用相应的函数完成所需的处理。有时候我们也需要中断完成一些处理。相当于多任务而言,这就是单任务系统,也称作前后台系统,中断服务函数作为前台程序,大循环while(1)为后台程序。前后台系统实时性差,前后台系统各个任务都是排队等着轮流执

2021-05-19 21:55:52 197

原创 Python---笑谈多继承以及MRO顺序

Python—笑谈多继承以及MRO顺序1. 单独调用父类的方法# coding=utf-8print("******多继承使⽤类名.__init__ 发⽣的状态******")class Parent(object): def __init__(self, name): print('parent的init开始被调⽤') self.name = name print('parent的init结束被调⽤')class Son1(Parent): def __init__(

2021-05-13 12:37:32 62

原创 咱们聊聊深拷贝和浅拷贝---你品!你细品!!!

咱们聊聊深拷贝和浅拷贝—你品!你细品!!!1. 浅拷贝浅拷贝是对于一个对象的顶层拷贝通俗理解:拷贝了应用,并没有拷贝内容2. 深拷贝深拷贝是对于一个对象所有层次的拷贝(递归)进一步理解深拷贝3. 拷贝的其他方式分片表达式可以赋值一个序列字典的copy方法可以拷贝一个字典4. 注意点4.1 浅拷贝对不可变类型和可变类型的copy不同copy.copy对于可变类型,会进行浅拷贝copy.copy对于不可变类型,不会拷贝,仅仅只是指向In [88]: a =

2021-05-09 17:28:05 63

原创 细谈HTTP,唯我独尊

细谈正则,唯我独尊1. 正则是什么?正则表达式(Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。支持正则表达式的程序如:locate |find| vim| grep| sed |awk2. 正则能干什么

2021-05-06 20:37:26 214

原创 Python-----笑谈协程

Python-----笑谈协程1. 协程​ 协程又称微线程,迁程。Coroutine​ 协程是python中另外一种实现多任务的方式,只不过比线程占用更小的执行单元。​ 在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定2. 协程和线程的差异​ 实现多任务时,线程切换从系统层面远不止保存和恢复CPU上下文这么简单。操作系统为了程序运行的高效性,

2021-05-05 21:12:49 242 10

原创 Python---戏说迭代器

Python—戏说迭代器迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退1. 可迭代对象​ 我们已经知道可以对list、 tuple、 str等类型的数据使用for…in…的循环语法从其中依次拿到数据进行使用, 我们把这样的过程称为遍历, 也叫迭代>>> for i in 100:... print(i)...Traceback (most recent cal

2021-05-04 20:47:18 129 7

原创 Python----使用进程池实现多文件复制并显示进度条

Python----使用进程池实现多文件复制并显示进度条主进程向进程池添加copy文件的内容进程池实现copy通过设置一个消息队列用来实现主进程与子进程的通信,来显示进度条#!/usr/bin/env python# coding=utf-8import os import multiprocessingdef copy_file(q, file_name, old_folder_name, new_folder_name): """完成文件复制""" # print(

2021-05-04 11:25:08 676

原创 Python--使用消息队列实现进程间通信

Python------使用Queue实现进程间通信Queue的使用Queue本身就是一个消息队列程序事例程序#!/usr/bin/env python# coding=utf-8import multiprocessing # 初始化对象时,若括号内没有指定最大可接收的消息数量,默认最大值(内存的尽头)q = multiprocessing.Queue(3)q.put(1)q.put([11,22,33])print(q.full()) # falseq.put("s

2021-05-03 20:45:50 228

原创 Python实现文件下载器

Python—实现文件下载器补充知识点tcp服务器一般情况下都需要绑定,否则客户端找不到这个服务器tcp客户端一般不绑定,因为是出动链接服务器,所以只要确定好服务器的ip、port等信息就好,本地客户端可以随机tcp服务器中通过listen可以将socket创建出来的主动套接字变为被动的,这是tcp服务器时必须要做的当客户端需要链接服务器时,就需要使用connect进行链接,udp是不需要链接的而是直接发送的,但是tcp必须先链接,只有链接成功才可以通信当一个tcp客户端连接服务器时,服务器端

2021-05-02 11:13:32 356

原创 AttributeError: module ‘socket‘ has no attribute ‘AF_INET‘

Python3:AttributeError: module ‘socket’ has no attribute ‘AF_INET’所有的python环境都正常ls查看发现自己的文件名和socket名重名了mv socket.py 01_socket.py总结:给文件命名时不要跟包名同名。

2021-04-30 19:17:16 439 1

原创 写一个自动检测磁盘使用率的脚本,当磁盘使用空间达到90%以上时,需要发送邮件给相关人员

写一个自动检测磁盘使用率的脚本,当磁盘使用空间达到90%以上时,需要发送邮件给相关人员#!/bin/bash#写一个自动检测磁盘使用率的脚本#当磁盘使用空间达到90%以上时,需要发送邮件给相关人员IP=$(ifconfig eth0 | grep broadcast | tr -s ' '| cut -d " " -f3 )STORGE=$(df -hP | awk '{print int($5)}')if [[ $STORGE > 90 ]];then echo "$IP 服

2021-04-26 22:22:58 635

原创 UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x89 in position 14: illegal multibyte sequence

Python read文件时出现“UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x89 in position 14: illegal multibyte sequence”解决方法出现问题场景 for keyword in open(path): self.keywords.add(keyword.strip().decode('utf-8').lower())问题UnicodeDecodeEr

2021-04-22 15:43:34 1404

原创 移植固件库Error: L6218E: Undefined symbol assert_param (referred from misc.o)解决方法

移植固件库Error: L6218E: Undefined symbol assert_param (referred from misc.o)解决方法**方法1:**在“魔法棒”中c/c++中define配置 USE_STDPERIPH_DRIVER方法2:直接在stm32f10x.h总结:一般不建议修改原文件,建议使用方法一,直接配置即可。...

2021-04-22 10:29:05 1235

原创 分布式存储系统

分布式存储系统1.分布式系统1.1基本概念(1)节点:在分布式系统中,将一台服务器或者服务器上运行的一个进程成为一个节点。节点与节点之间通过网络互联。(2)大规模分布式存储的一个核心问题在于自动容错。(3)异常服务器宕机原因:内存错误、服务器停电等。​ 当发生宕机时,节点无法正常工作。称为不可用。服务器重启时,节点将失去所有内存信息。因此,设计存储系统时需要考虑如何通过读取持久化介质(如机械硬盘,固态硬盘)中的数据来恢复内存信息。网络异常原因:消息丢失,消息乱序(如采用UDP方

2021-04-20 10:59:31 3077 2

原创 二叉树程序遍历---框架--应用

二叉树程序遍历也就那样学会二叉树的层序遍历框架。以下题目都可求解。102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的前序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针(等于117)117.填充每个节点的下一个右侧节点指针II102.二叉树的层序遍历层序遍历一个二叉树,就是从左到右一层一层的去遍历二叉树。需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而是用栈先进

2020-11-30 22:55:30 237

原创 只出现一次的数字----快速解法(数学)

只出现一次的数字----快速解法(1)首先我们的数学基本知识:0 ^ x = x;x ^ x = 00异或任何一个数为这个数本身,任何一个数异或自己等于0。(2)分析我们可以遍历一遍数组进行互相异或,出现相同次数的数字最后得0,只出现一次的数字最后异或得这个数本身,也就是答案。代码如下:class Solution{public: int singleNumber(vector<int> &nums){ int ans = 0; for(int i = 0

2020-11-15 17:49:35 250

原创 实现一个没有bug的宏----MAX

实现一个没有bug的宏----MAX分析:(1)首先可以先简写一个有bug的宏。(2)然后根据 gcc -E MAx.c 来进行判断bug(3)可以使用__typeof(a) _a = (a) 进行替换,这样的a++就不会在加了。gcc -E MAx.c 结果如图所示:代码如下:结果如下:...

2020-11-01 23:29:20 88

原创 二分查找实现自己的sqrt函数

二分查找实现自己的sqrt函数分析:1.二分查找适用于单调序列。2.求一个数的开平方,我们可以想象成从0到这个数进行查找 x*x = 这个数。代码如下/************************************************************************* > File Name: binary_search.c > Author: du > Mail: > Created Time: 2020年11月01日 星期日 01

2020-11-01 17:27:59 245

原创 c++值find使用----查找字符串中唯一的“名字”

c++之find()使用这里我只提供一份代码,该代码包含了基本的用法,我会附上运行结果。大家可以进自测试。/************************************************************************* > File Name: 1_find.cpp > Author: > Mail: > Created Time: 2020年10月20日 星期二 05时57分33秒 ***********************

2020-10-20 22:12:25 196

原创 scanf之深度探索

scanf之深度探索(1)输入带有空格的字符串char str[100] = {0};scanf("%[^\n]s",str);^:非,除了。(2)循环输入字符串char str[100] = {0};while( scanf("%[^\n]s", str) != EOF){ getchar(); .....}EOF: end of file 文件结束描述符,等于-1....

2020-10-14 22:54:02 193

原创 链表解决一个稍有改动的“约瑟夫环(Josephus problem)”问题

链表解决一个稍有改动的“约瑟夫环(Josephus problem)”问题计算理工学院有 NN 个同学,围成了一个圆圈,每人被顺序地编了一个序号(分别为 1,2,3… n1,2,3…n),从编号为 KK 的人开始报 11,他之后(顺初始数字增长方向计算序号)的人报 22,以此类推,数到某一个数字 MM 的人出列。出列同学的下一个人又从 11 开始继续报数,数到某一个数字 MM 的人出列。不断重复这一过程,直到所有人都出列为止。你需要根据同学人数 NN 和给出的 KK 和 MM 计算出同学的正确出列顺序。

2020-10-12 15:27:53 206

原创 git push后账号密码输出错误和修改

git push后账号密码输出后图和修改当第一提交到gittee上时,会提示输入账号和密码。但是输错了。每次都会提示error,要想提交成功,必须重新输入账号密码。系统默认把第一次输入的账号密码记住,它是在控制面板->用户账户->凭据管理器->windows凭据进行删除对应的账号密码这样就可以进行git push 了。...

2020-09-26 11:13:59 1061 1

原创 linux环境实现定时器----- itimerval实现

linux环境实现定时器----- itimerval实现分析:实现定时器,通过itimerval结构体以及函数setitimer产生的信号,系统随之使用signal信号处理函数来处理产生的定时信号。从而实现定时器。先看itimerval的结构体struct itimerval { /* Value to put into `it_value' when the timer expires. */ struct timeval it_interval; /* Time t

2020-09-15 20:57:37 1481

原创 linux网络ip添加和删除 ------system进行调用

linux网络ip添加和删除 ------system进行调用使用system系统调用以及strcat函数进行字符串拼接

2020-09-08 22:18:05 130

原创 c语言悬空指针和野指针

悬空指针c语言中的指针可以指向一个块内存,如果这块内存稍后被操作系统回收(被释放),但是指针任然指向这块内存,那么,此时此刻指针就是“悬空指针”。void *p = malloc(size);assert(p);free(p);//现在p是一个悬空指针C语言中的“悬空指针”=会引发不可预知的错误,而且这种错误一旦发生,很难定位。因为在free(p)之后,p指针任然指向之前分配的内存,如果这块内存暂时可以被程序访问并且不会造成冲突,那么之后使用p并不会引发错误。所以实际的c语言开发中,为了避免

2020-09-06 11:39:51 415

原创 c/c++之栈的压入,弹出序列-------测试用例

c/c++之栈的压入,弹出序列-------测试用例// 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是// 否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、// 5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但// 4、3、5、1、2就不可能是该压栈序列的弹出序列。分析:解决这个问题最直接的想法则是建立一个辅助栈。把输入的第一个序列中的数字一次压入该辅助栈,并按照第二个序列的顺序依次从从该栈中弹出数字。综上总结:

2020-09-06 10:56:17 235

原创 c/c++之对称的二叉树---测试用例

c/c++之对称的二叉树—测试用例// 题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。分析:通常我们我们遍历树的算法为前序遍历,中序遍历,后序遍历。一般使用前序遍历(根左右)。如果我们定义一种先遍历根节点,然后遍历右节点,最后遍历左节点。如果前序遍历 == 新定义的遍历。那么则是对称。第一个树:前序遍历:{8,6,5,7,6,7,5},自定义遍历{8,6,5,7,6,7,5} 这两种遍历相等。说明是对称的。第二个树:前序遍历:{8,6,5,7,

2020-09-01 21:47:46 363

原创 c/c++之验证树的子结构-----测试用例

c/c++之验证树的子结构-----测试用例// 面试题26:树的子结构// 题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下struct BinaryTreeNode{ double m_dbValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}如图A中一部分子树的结构和B树中一样,因此B是A树的子结构。分析:由图可以知道2步即可解决。(1)在树A中寻找和B树根节点的值一样的节点R。(2)判断树

2020-08-28 16:56:11 202

原创 c/c++之合并两个排序的链表++++测试用例

c/c++之合并两个排序的链表++++测试用例// 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按// 照递增排序的。例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链// 表3所示。分析:首先分析两个链表的合并过程。链表1的头结点的值小于链表2的头节点的值,因此链表1的头结点是合并后链表的头结点。然后继续合并两个链表中剩下的节点,两个链表中剩下的节点依旧是排序的,所以依旧比较头结点,此时链表2中的头结点小于链表1中的头结点,因此作为合并后链表的节点。依次类

2020-08-25 22:22:56 610

原创 c/c++反转链表---测试用例

c/c++反转链表—测试用例// 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。分析:为了正确的反转链表,我们需要调整链表中指针的方向。我们需要定义三个指针,分别是当前遍到的节点,它的前一个节点,以及后一个节点。反转后链表的头结点即是原始链表的尾结点,自然是m_pNext为nullptr的节点ListNode *ReverseList(ListNode *pHead){ ListNode* pReversedHead = nullptr; ListNode*

2020-08-24 18:08:52 656

原创 查找链表中环的入口节点----测试用例

链表中环的入口几点题目:一个链表中包含环,如何找出环的入口结点?例如,在链表中, 环的入口结点是结点3。分析:(1)首先我们要确定链表是否有环,可以考虑使用双指针来确定。定义两个指针,同时从链表的头部出发,第一个指针走一步,第二个指针一次走二步。如果走的快的指针追上了走的慢的指针,那么就证明链表有环。如果走的快的指针走到了链表的末尾(m_pnext指向NULL)都没有追上第一个指针,那么表示无环。(2)找到环的入口。还是可以用2个指针来解决问题。先定义两个指针p1和p2指向链表的头结点,。如果链表环中

2020-08-22 17:08:03 197

原创 输出链表中倒数第k个节点----鲁棒性分析

链表中倒数的k个节点// 题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,// 本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,// 从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是// 值为4的结点。链表节点定义如下struct ListNode{ int m_nValue; ListNode* m_pNext;};分析:为了得到倒数第k个节点,很自然的想法就是先走到链表的尾端,再从尾端回溯k步。可是从定义

2020-08-21 17:41:27 119

原创 C语言之数值的整数次方--不能使用库函数

数值的整数次方题目:实现函数double Power(double base, int exponent),求base的exponent次方。不可以使用库函数,同时不需要考虑大数问题。#include <stdio.h>#include <stdlib.h>#include <math.h>#include <stdbool.h>double absPower(double base, int exponent);bool InVailed

2020-08-18 16:47:48 586

原创 求旋转数组的最小数字---代码+测试用例

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组 {3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。

2020-08-15 17:36:08 177

原创 两个栈stack1和stack2来实现队列queue

两个栈实现队列题目:用两个栈实现一个队列。队列申明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。template<typename T>class CQueue{public: CQueue(void); ~CQueue(void); void appendTail(const T& node); T deleteHead();private: std::stack<T> st

2020-08-08 17:39:11 351

原创 递增、递减运算符和指针的关系

递增、递减运算符和指针的关系*++pt :指针加一,然后解引用。++*pt:先解引用pt的值,然后将值加一。(*pt)++:首先解引用,得到值,然后将值加一。*pt++:指针加一,后缀原算符++将对原来的地址解引用,所以值还是地址没有加一的值。但是地址指向+1。double arr[5] = { 21.1,32.8,23.4,45.2,37.4 }; double *pt = arr; ++pt; std::cout << "pt=" << *pt <&l

2020-08-07 20:47:20 303

空空如也

空空如也

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

TA关注的人

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