自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yangzijiangtou

Coding changes the world!

  • 博客(151)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 软件工程之结构化设计篇

完成了需求分析,回答了软件系统能“做什么”的问题后,软件的生命周期就进入了设计阶段。软件设计阶段,研发人员将集中精力研究如何把需求规格说明书里归纳的分析模型转换成功可行的设计模型,将解决方案记录到相关的设计文档中。软件设计是回答“怎么做”才能实现软件系统的问题。即把软件系统能做什么的逻辑模型转换成怎么做的物理模型。软件设计在开发中处于核心地位。

2022-10-17 13:35:20 947 1

原创 c++多线程:原子操作

1、原子变量声明头文件#include <atomic> // std::atomic, std::atomic_flag, ATOMIC_FLAG_INIT原子操作:对一个变量的访问操作,原来会分为好几个指令,由于多线程程序中,可能会存在数据竞争,可能导致对变量的操作不是原子性,那么从编译实现角度,将原本几个指令的操作变成一个指令来执行,可以在无锁情况下实现原子操作,从而避免数据竞争。std::atomic::atomicdefault (1) atomic()

2022-03-14 17:21:26 1802

原创 C++忘记返回值导致异常bug

问题在C++函数实现时,定义一个函数如下:bool MCUSerialImpl::InitDevInfo(){ _devInfo = std::make_shared<MCUInfo>(); if(!_devInfo) { LOG_ERROR << "_mcuInfo is null"; return false; } Wrapper::TryClearCache<std::string>(_v

2022-02-28 21:01:24 1543 1

原创 git合并多次提交为一次提交

**背景**有时候新人在git上提交代码时,如果不符合要求,会出现反复修改,导致提交次数过多,无法形成有效提交和回退,因为可能中间提交的版本有问题。所以查找一下是否有合并多次提交为一次有效提交的命令,果然很强大,像一个穿越时空机一样,可以任意修改已提交的版本。合并过程1、查找要历史提交版本git log2、查找要合并的几个提交id,并要找到最早要合并的提交id的父commit-id。git rebase -i commit-id //(commit-id是需要合并的提交中最早的提交的前一个

2022-02-22 15:28:09 12794

原创 虚拟机上Ubuntu搭建gitlab全过程

手把手教你再ubuntu搭建gitlab

2022-02-13 22:03:36 921

原创 git高频使用的命令

git pull origin dev-1.1.0 远端合并到本地分支git diff xxx/xxx.cpp 文件查看差异git checkout xx/xx.cpp 还原到原始版本git status . 查看状态git checkout -b feature/PA 创建远端分支git submodule update --init --recursive 更新子模块git add . //添加所有文件git add xxx/xxx.cpp 添加文件git commit -

2022-01-22 09:44:14 306

原创 git同步远程分支列表到本地

背景一段时间没有使用git,发现服务端的分支和本地不一致,需要同步远程分支列表本地,使用下面的命令即可更新git remote update origin --prune

2022-01-22 09:40:33 3759

原创 安装MSYS详细过程

MSYS2的安装流程

2021-12-19 23:35:44 4364

原创 Linux下安装搜狗拼音输入法(Ubuntu18.04.2 LTS)

1.环境系统:Ubuntu 18.04.2 LTS宿主机:虚拟机Vmware2.下载打开 Firefox 浏览器,在地址栏输入 https://pinyin.sogou.com/linux/ 这个地址,可以看到下面画面:选择下载64位3.安装安装完毕后,打开 设置-》区域和语言-》管理已安装的语言-》添加或删除语言选中中文简体:切换键盘输入法系统为:fcitx (Flexible Input Method Framework)即小企鹅输入法,它是一个以 GPL 方式发布的输入法平台

2021-12-10 15:34:26 2288

原创 socat的下载和交叉编译安装

背景1.下载http://www.dest-unreach.org/socat/download本人这里使用的版本是socat-1.7.3.4.tar.gz,并非最新的包。2.解压//解压到当前目录$ tar -xvf socat-1.7.3.4.tar.gz//进入解压后的目录$ cd socat-1.7.3.43.安装//编译hisi600./configure --host=x86_64 CC=arm-hisiv600-linux-gccmake -j8make i

2021-11-06 17:04:17 2413

原创 FFmpeg学习详细笔记(一)

FFmpeg1.FFmpeg简介1.1 FFmpeg的定义FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口,提供了多种媒体格式的封装和解封装,包括多种音视频解码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等;FFmpeg框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。FF:Fast Forward,Fast Free,Fast Fourier。mpeg:Moving

2021-10-24 17:44:55 2940

原创 牛客网NC105二分查找(查找第一个匹配数据)

题目题目描述请实现有重复数字的升序数组的二分查找给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1示例1[1,2,4,4,5],4返回 2说明从左到右,查找到第1个为4的,下标为2,返回2解题思路二分法:如果判断相等的话,需要判断当前是否是第一个匹配到的数,如果下标是0,则直接返回,如果不是,则判断是否大于前面一个数,是则返回,否则继续缩小右边范围进行下一轮查找。时间复

2021-04-06 20:11:38 224

原创 牛客网NC61《两数之和》数组+哈希

题目题目描述 给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解 例如: 给出的数组为 {20, 70, 110, 150},目标值为90 输出 index1=1,index2=2示例1输入[3,2,4],6返回值[2,3]解题思路暴力法:数组中每个数字相加,然后判断和是否与目标值相等,时间复杂度O

2021-04-06 19:33:36 232

原创 力扣33. 搜索旋转排序数组(二分查找)

整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为[nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …,nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数 t.

2021-03-21 22:45:57 200

原创 力扣1115. 交替打印FooBar(多线程)

我们提供一个类:class FooBar { public void foo() {for (int i = 0; i < n; i++) {print(“foo”);} }public void bar() {for (int i = 0; i < n; i++) {print(“bar”);} } } 两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个线程将会调用 bar() 方法。请设计修改程序,以确保 “foob.

2021-03-21 22:43:22 299

原创 SQLServer数据库登录问题 Login failed for user ‘sa‘. (Microsoft SQL Server, Error: 18456)

1.登录失败的原因,是因为SQLServer默认只使用了Windows验证,没有设置以windows和Sql Server混合的登录方式;操作:Windows验证登录后-》右键服务器选择属性-》安全性-》Sql Server和windows身份验证模式-》确定2.重启SqlServer服务即可右键服务器-》重新启动...

2021-02-19 16:29:12 12242

原创 从零开始学python之继承

继承:定义一个类Animal(动物),这个类中需要两个方法:run() sleep()class Animal: def run(self): print('动物会跑') def sleep(self): print('动物睡觉')定义一个类Dog(狗)class Dog: def run(self): print('狗会跑')

2021-01-14 21:46:20 1023

原创 从零开始学python之封装

封装定义:封装是面向对象的三大特性之一(封装,继承,多态)封装指的是隐藏对象中一些不希望被外界所访问到的属性或方法如何隐藏一个对象中的属性?将对象的属性名,修改为一个外部不知道的名字,防君子不防小人如何获取(修改)对象中的属性?需要提供一个getter和setter方法是外部可以访问到属性getter获取对象中的指定属性(get_属性名)setter用来设置对象的指定属性(set_属性名)使用封装,缺失增加了类的定义的复杂程度,但是它也确保了数据的安全性

2021-01-12 23:59:48 126

原创 从零开始学python之类与对象

类(class)我们目前所学习的对象都是python内置的对象但是内置对象并不能满足所有的需求,所以要求我们在开发中经常需要自定义一些对象类,简单理解它就相当于一个图纸,在程序中我们需要跟进类来创建对象。我们也称对象是类的实例(instance)如果多个对象是通过一个类创建的,我们称这些对象是一类对象像int(),float(),bool(),str(),list(),dict()都是类a = int(10) #创建一个int类的实例,相当于a=10.我们自定义的类都需要使用大写字母开头,

2021-01-11 00:26:53 123

原创 数据结构与算法之并查集

一、概念并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。二、操作初始化把每个点所在集合初始化为其自身。通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。for(int i=0;i<n;i++) f[i] = i;查找查找元素所在的集合,即根节点。当节点i和f[i]相等时,表明找到集合的代表人,否则将继续向上查找f[f[i]],直到f[i]==i,返回i为代表人。 int

2021-01-10 23:14:47 286

原创 LeetCode 5652. 交换链表中的节点(双指针求倒数第K个节点)

题目给你链表的头节点 head 和一个整数 k 。交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。示例 1:输入:head = [1,2,3,4,5], k = 2 输出:[1,4,3,2,5] 示例 2:输入:head = [7,9,6,6,7,8,3,0,9,5], k = 5 输出:[7,9,6,6,8,7,3,0,9,5] 示例 3:输入:head = [1], k = 1 输出:[1] 示例 4:输入:head = [1,2],

2021-01-10 20:57:27 432

原创 LeetCode 5649. 解码异或后的数组(利用异或性质a ^ b ^ b = a)

解码异或后的数组未知 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i +1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。示例 1:输入:encoded = [1,.

2021-01-10 20:41:38 218

原创 LeetCode 5650 执行交换操作后的最小汉明距离(并查集)

执行交换操作后的最小汉明距离给你两个整数数组 source 和 target ,长度都是 n 。还有一个数组 allowedSwaps ,其中每个 allowedSwaps[i] = [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi(下标从 0 开始)的两个元素。注意,你可以按 任意 顺序 多次 交换一对特定下标指向的元素。相同长度的两个数组 source 和 target 间的 汉明距离 是元素不同的下标数量。形式上,其值等于满足 source[i] != targe.

2021-01-10 20:28:33 217

原创 从零开始学python之对象简介

对象(Object)什么是对象?对象是内存中专门用来存储数据的一块区域对象中可以存放各种数据(比如:数字、布尔值、代码)对象由三部分组成:对象的标识(id)对象的类型(type)对象的值(value)面向对象(oop)python是一门面向对象的编程语言所谓的面向对象的语言,简单理解就算语言中的所有操作都是通过对象来进行的。面向过程指将我们的程序的逻辑分解为一个一个的步骤,通过对每个步骤,来完成程序。例子:孩子上学妈妈起床妈妈上厕所妈妈洗漱妈妈

2021-01-10 12:40:55 59

原创 从零开始学python之装饰器

装饰器创建几个函数def add(a,b): ''' 求任意两个数的和 ''' print("计算开始..") r = a+b print("计算结束...") return rdef mul(a,b) ''' 求任意两个数的积 ''' return a*b希望函数可以在计算前,打印开始计算,计算结束后打印计算完毕我们可以直接通过修改函数中的代码来完成这个需求,但是会产生以下

2021-01-09 21:45:38 173

原创 从零开始学python之闭包

闭包将函数作为返回值返回,也是一种高阶函数def fn(): a = 10 #函数内部再定义一个函数 def inner(): print("我是fn2",a) #将内部函数inner作为返回值返回 return innerr是一个函数,是调用fn()后返回的函数这个函数是在fn()内部定义,并不是全局函数所以这个函数总能范文fn()函数内的变量r = fn()r()10例子:求多个数的平均值nums = [50,

2021-01-09 20:42:49 81 1

原创 从零开始学python之sort与sorted函数

sort()该方法用来对列表中的元素进行排序sort()方法默认是直接比较列表中的元素的大小,在sort()可以接收一个关键字参数,key;key需要一个函数作为参数,当设置了函数作为参数,每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素的大小l = ['aa','bbb','cccc','fffff']l.sort(key=len)sorted()这个函数和sort()用法基本一致,但是sorted()可以对任意的序列进行排序,并且使用sorted()排序

2021-01-09 20:32:38 101

原创 从零开始学python之匿名函数

一、filter()filter()可以从序列中过滤出符合条件的元素,保存到一个新的序列中参数:函数,根据该函数来过滤序列(可迭代的结构)需要过滤的序列(可迭代的结构)返回值:过滤后的新序列(可迭代的结构)fn是作为参数传递给filter()函数中而fn实际上只有一个作用,就是作为filter()的参数,filter调用完毕后,fn就已经没有用匿名函数:lambda 函数表达式语法:lambda 参数列表:返回值匿名函数不会影响到全局函数,原则是实现功能简单,且使用的地方很

2021-01-09 01:00:52 132

原创 从零开始学python之高阶函数

函数式编程:在python中,函数是一等对象一等对象一般都会具有如下特点:对象是运行时创建的能赋值给变量或作为数据结构中的元素能做为参数传递能作为返回值返回高阶函数:实际将函数那段代码作为参数传进目标函数-高阶函数至少要符合以下两个特点中的一个接收一个或多个函数作为参数将函数作为返回值返回def fn1(n): if n%2 == 0: return True return Falsedef fn2(n):

2021-01-09 00:27:53 122 2

原创 从零开始学python之递归

递归:举个栗子:尝试求10的阶乘(10!)1! = 12! = 1*2 = 23! = 123 = 64! = 123*4 = 24创建一个变量保存结果: n = 10 #使用循环计数 for i in range(1,10): n *= i print(n)#创建一个函数,可以求任意数的阶乘def factorial(n): ''' 该函数用来求任意数的阶乘 参数: n要求阶乘的数字 '''

2021-01-08 23:49:24 281

原创 从零开始学python之命名空间

python命名空间(namespace)一、定义:命名空间指的是变量存储的位置,每一个变量都需要存储到知道的命名空间当中,每一个作用域都会有一个它对应的命名空间全局命名空间,用来保存全局变量,函数命名空间用来保存函数中的变量命名空间实际上就是一个字典,是一个专门用来存储变量的字典locals()用来获取当前作用域的命名空间如果在全局作用域中调用locals()获取全局命名空间,如果在函数中调用locals()获取函数中的命名空间,返回的是一个字典二、用法scope

2021-01-08 22:49:42 246

原创 VS2017编译文件遇到fatal error C1010: 在查找预编译头时遇到意外的文件结尾的解决办法

背景错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “stdafx.h””?分析分析:属性项预编译设置了使用预编译头,但是实际文件中并没有添加该头文件,因为项目使用了MFC相关类,所以如果不使用预编译头文件,将导致每次编译时间过长,查了下资料,如果某个cpp文件没有使用预编译头文件,那么单独将该文件属性项选择不使用预编译头即可。参考:https://www.cnblogs.com/dcybook/p/8558261.htm

2020-11-14 10:13:25 3346

原创 Winsock2.h编译报错重定义冲突的解决方案

开发环境编译器:VS2008OS:Windows 10报错信息1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\ws2def.h(91) : warning C4005: “AF_IPX”: 宏重定义1> C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(460) : 参见“AF_IPX”的前一个定义1>C:\Program

2020-10-13 09:07:01 3430 3

原创 机器学习实战之Logistic回归-详细笔记

概念最优化算法回归:用一条直线对点(多个数据)进行拟合,(该线条称为最佳拟合直线)这个拟合过程就称作回归主要思想:根据现有数据对分类边界线建立回归公式,以此进行分类过程:收集数据准备数据,数值型,结构化数据格式最佳分析数据训练算法,大部分时间用于训练,目的是为了找到最佳回归系数。测试算法使用算法,首先输入一些数据,转换成对应的结构化数值,接着基于训练好的回归系数,就可以对这些数值进行简单的回归计算,判断它们属于哪个类别,在这之后,我们就可以在输出的类别上做一些其他分析工作。优点,代

2020-08-23 00:09:31 237

原创 力扣199场比赛 5473. 灯泡开关 IV

房间中有 n 个灯泡,编号从 0 到 n-1 ,自左向右排成一行。最开始的时候,所有的灯泡都是 关 着的。请你设法使得灯泡的开关状态和 target 描述的状态一致,其中 target[i] 等于 1 第 i 个灯泡是开着的,等于 0 意味着第 i 个灯是关着的。有一个开关可以用于翻转灯泡的状态,翻转操作定义如下:选择当前配置下的任意一个灯泡(下标为 i )翻转下标从 i 到 n-1 的每个灯泡翻转时,如果灯泡的状态为 0 就变为 1,为 1 就变为 0 。返回达成 target 描述的状态所需

2020-07-26 22:55:36 158

原创 力扣199场比赛 5474. 好叶子节点对的数量

给你二叉树的根节点 root 和一个整数 distance 。如果二叉树中两个 叶 节点之间的 最短路径长度 小于或者等于 distance ,那它们就可以构成一组 好叶子节点对 。返回树中 好叶子节点对的数量 。示例 1:输入:root = [1,2,3,null,4], distance = 3输出:1解释:树的叶节点是 3 和 4 ,它们之间的最短路径的长度是 3 。这是唯一的好叶子节点对。示例 2:输入:root = [1,2,3,4,5,6,7], distance = 3输

2020-07-26 22:41:07 557

原创 动态规划 力扣 97. 交错字符串

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”输出: true示例 2:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbbaccc”输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/interleaving-string著作权归领扣网

2020-07-18 13:18:18 176

原创 力扣15. 三数之和

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/3sum著作权归领扣网络所有

2020-07-17 13:25:24 139

原创 UEFI和传统引导的区别有哪些

背景前两天装机时,用U盘启动进行安装系统时,发现还原ghost系统后怎么也进入不了windows10开机界面,一直显示:在U盘中去使用引导修复,也失败了,后来重新将系统盘进行分区,变成MBR格式,再次安装win10 32位系统,就正常了,非常不解其中的原因,今天网上查找资料,才发现之前应该是UEFI模式下装了32位系统所致开不了机。而UEFI只能装64位系统,下面是UEFI和传统引导的区别详细:两者区别:理论上操作上早出来的主板,都是legacy+mbr引导的,也就是我们常说的

2020-07-17 08:36:51 5186

原创 力扣 13. 罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况

2020-07-16 13:14:54 270

QHttpDemo.rar_解压rar

基于QT4.7.0+OpenSSL实现的Https客户端,并使用了DES/3DES加密过程,可适合初学者熟悉Http/Https客户端建立过程,以及使用加密工具进行数据加密。

2020-12-23

解决Qt中QSettings在断电时参数丢失问题

QSettings在存取配置文件时,存在写延时问题,有时断电会出现参数丢失,先改用封装Windows下的WritePrivateProfileStringA函数来替代QSettings的相关操作。

2018-11-08

设计模式之解释器

解释器模式,主要用于语言的文法规则,算术规则等

2015-09-22

Source Insight

Source Insight具有很强的代码编辑功能和函数查找功能

2014-11-06

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

TA关注的人

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