自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(220)
  • 资源 (7)
  • 收藏
  • 关注

原创 Gee cache

相关概念分布式缓存GeeCache特性●单机缓存和基于 HTTP 的分布式缓存●最近最少访问(Least Recently Used, LRU) 缓存策略●使用 Go 锁机制防止缓存击穿●使用一致性哈希选择节点,实现负载均衡●使用 protobuf 优化节点间二进制通信1.LRUmap和双向链表实现...

2021-09-20 17:04:30 371

原创 go自动化测试、覆盖率

整理自https://liumiaocn.blog.csdn.net/article/details/54922394go程序测试例子自动化测试basicfunc.gopackage basicfuncfunc GetGrade(score int) string { switch { case score < 60: return "D" case score <= 70: return "C" case score <= 80: return "B"

2021-05-31 20:01:33 576

原创 go select多路复用

select语法select {case <-ch1: // ...case x := <-ch2: // ...use x...case ch3 <- y: // ...default: // ...}例1:火箭点火火箭点火倒计时10秒,如果键盘输入任意字符就打断点火,如果没有就10s后起飞。package mainimport ( "fmt" "os" "time")func main() { abort := ma

2021-05-22 17:08:26 289 1

原创 go并发循环

并发打印●错误代码这个代码不会打印任何东西,因为main没等到pnt返回就直接返回了package mainimport ( "fmt" "time")func pnt() { time.Sleep(2 * time.Second) fmt.Println("hello world!!!")}func main() { for i := 0; i < 5; i++ { go pnt() }}●正确代码让5个goroutine向共享的channel中发送事件

2021-05-17 16:58:59 443

原创 三、go语言函数、方法、接口(go语言圣经笔记)

函数声明func name(parameter-list) (result-list){ body}递归多返回值语法// 用逗号隔开return a, bbase return如果返回值变量名在函数体内出现,return可以省略操作数。错误Go使用if和return处理异常,出现异常就返回函数值函数拥有类型,可以被赋值给其他变量,函数类型的0值是nil,不能调用值为nil的函数匿名函数5.6可变参数5.7deferred函数defer后面的函数会被延迟执行。直到

2021-05-17 15:15:20 265

原创 Goroutines和Channels

goroutine可以简单类比作一个线程main goroutine当一个程序启动时,其主函数即在一个单独的goroutine中运行,我们叫它main goroutine。创建新goroutine新的goroutine会用go语句来创建。f() // call f(); wait for it to returngo f() // create a new goroutine that calls f(); don't wait并发的Clock服务去掉go只能一个客户端接收到时间,

2021-05-17 15:15:07 88

原创 二、go语言数据类型(go语言圣经笔记)

基础类型整型int、int8、int16、int32、int64uint、uint8、uint16、uint32、uint64uintptr:容纳指针浮点数float32:6个十进制的精度float64:15个十进制数的精度复数complex64、complex128对应float32和float64两种浮点数精度布尔型true和false字符串不可改变的字节序列s[i]返回第i字节的字节值,越界会出现异常s[i:j]:以s中[i:j)生成的新字符串,i不写就为0,j不写就为l

2021-05-04 14:54:29 122

原创 一、go语言基本语法与概念(go语言圣经笔记)

hello world// 表示该文件属于哪个包package main// 导入包import "fmt"func main() { fmt.Println("Hello, 世界")}基本语法命名小写字母开头,驼峰式命名,区分大小写(大写字母用于导出)声明变量语法// var 变量名字 类型 = 表达式s := "" // 简短声明:类型自动推导,要用:= 简短变量声明语句中必须至少要声明一个新的变量var s stringvar s = ""va

2021-05-03 20:37:56 227 1

原创 vscode go环境配置(GOPROXY两行代码解决)

解决vscode无法下载go插件问题:在cmd输入下面两行代码,输完后可以通过go env来查看是否成功go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn在vscode中使用Ctrl+Shift+P,输入>go:install,下面会自动搜索相关命令,我们选择Go:Install/Update Tools这个命令,选中所有插件,点击确定进行安装。(2021/4/26亲测可行)...

2021-04-26 22:18:41 1235

转载 MySQL多版本并发控制MVCC

作用InnoDB通过实现提交读和可重复读这两种隔离级别。未提交读隔离级别总是读取最新的数据行,要求很低,无需使用 MVCC。串行化隔离级别需要对所有读取的行都加锁,单纯使用 MVCC 无法实现。思想MVCC 利用了多版本的思想,写操作更新最新的版本快照,而读操作去读旧版本快照,没有互斥关系,这一点和 写时复制 类似。MVCC 规定只能读取已经提交的快照。当然一个事务可以读取自身未提交的快照,这不算是脏读。在 MVCC 中事务的修改操作(DELETE、INSERT、UPDATE)会为数据行新增一个版本

2021-04-17 15:05:46 88

原创 MySQL索引

一、索引B树与B+树MySQL索引B+Tree索引

2021-04-10 20:03:20 76

原创 protobuf c++ example

defines messagesaddressbook.proto.person类型内定义了枚举PhoneType和PhoneNumber类型,PhoneNumber类型使用PhoneType类型syntax = "proto2";// 防止命名冲突package tutorial;message Person { // optional 0个或1个 optional string name = 1; optional int32 id = 2; optional strin

2021-04-07 10:41:02 332

原创 protobuf

https://github.com/protobuf-c/protobuf-c/wiki/Examplesamessage.proto文件message AMessage { required int32 a=1; optional int32 b=2;}生成.h 和.c文件protoc-c --c_out=. amessage.proto 链接-lprotobuf-cSerialize/packconstruct message :AMESSAGE_INITb是否存在(

2021-04-06 17:39:51 131

原创 MySQL关系模型

主键主键:能够通过主键唯一区分出不同的记录,不能使用业务相关的字段作为主键,所以一般把这个字段命名为id这张表中,如果用name作为主键,就没法存储同名同学,因为主键不能重复。联合主键:尽量不用通过多个字段唯一标识记录,两个或更多的字段设置为主键,这种主键称为联合主键。外键在students表中,通过class_id的字段,可以把数据与另一张表关联起来,这种列称为外键外键约束将class_id作为外键约束,那么就可以保证无法插入无效的数据(如果classes表不存在id=99的记录,

2021-04-05 21:13:31 348

原创 二、InnoDB存储引擎

InnoDB体系结构后台线程有多个 不同的后台线程,负责处理不同的任务。1.Master Thread核心的后台线程,负责将缓冲池中的数据异步刷新到磁盘,保持数据一致性,包括脏页的刷新、合并插入缓冲(INSERT BUFFER)、回收UNDO页。2.IO ThreadInnoDB大量使用AIO(异步IO)来处理IO请求,性能好。IO Thread工作是负责IO请求的回调处理。3.Purge Thread负责回收已使用并分配的undo页(本来由Master完成,减轻Master负担)4.P

2021-04-05 20:56:39 68

原创 ITK配准踩坑

卡了挺久的东西终于弄好了fixed与moving得到的transform是把fixed的点映射到moving点的变换仿射变换仿射变换可以由matrix、center、translation确定,也可以由matrix、offset确定。itk中observer输出的transform的matrix和offset是在世界坐标系下。坐标系世界坐标系:图像坐标系:都是正整数,就是像素的index,可以由(世界坐标 - origin)/spacing得到物理坐标系(?不知道是不是叫这个):图像坐

2021-04-05 19:20:29 807 2

原创 一、MySQL体系结构和存储引擎

数据库和实例**数据库:**物理操作系统文件或其他形式文件类型的集合。MySQL数据库中,数据库文件可以是frm、MYD、MYI、ibd结尾的文件。NDB引擎中数据库文件可能存放在内存之中。**实例:**数据库实例真正用于操作数据库文件。MySQL数据库实例在系统上的表现就是一个进程。一个数据库可能被一个或多个实例使用。区别:数据库由一个个文件组成,要对数据库操作不能简单操作文件,而是要通过数据库实例完成对数据库的操作。MySQL数据库体系结构特点:插件式的表存储引擎,存储引擎是基于表的。In

2021-04-05 16:46:34 73

原创 剑指offer Leetcode 38. ?字符串的排列

解法:回溯思想:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/solution/mian-shi-ti-38-zi-fu-chuan-de-pai-lie-hui-su-fa-by/固定用于排列方案的去重,set用于每一位的去重(字符串本身有重复)代码class Solution {public: vector<string>res; vector<string> permuta.

2021-04-01 11:11:10 69

原创 事务

概念事务:多条语句作为一个整体进行操作。要么全部成功,要么不执行。(单条语句自动作为一个事务,称为隐式事务)-- 从id=1的账户给id=2的账户转账100元-- 第一步:将id=1的A账户余额减去100--必须全部执行UPDATE accounts SET balance = balance - 100 WHERE id = 1;-- 第二步:将id=2的B账户余额加上100UPDATE accounts SET balance = balance + 100 WHERE id = 2;

2021-04-01 11:10:39 64

原创 Mysql常用语句

登录:mysql -u root -p查询查询所有数据:SELECT * FROM <表名>条件查询:SELECT * FROM <表名> WHERE <条件表达式> 条件表达式可以用AND、OR、NOT,可以用()查询某些列:SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM ... 别名可以去掉排序:ORDER BY 列名

2021-04-01 10:53:22 79

原创 剑指offer Leetcode 排列、组合、子集总结

解法一:DFS思想:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/solution/mian-shi-ti-13-ji-qi-ren-de-yun-dong-fan-wei-dfs-b/其中证明了只要往右和下走就能访问所有可达解。复杂度分析:时间复杂度:O(MN),最差情况下,机器人遍历矩阵所有单元格,此时时间复杂度为O(MN)空间复杂度:O(MN)代码:class Solution {public.

2021-03-19 16:20:50 105

原创 剑指offer Leetcode 12.矩阵中的路径

回溯法:思想https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/solution/mian-shi-ti-12-ju-zhen-zhong-de-lu-jing-shen-du-yo/其中的ppt很清楚复杂度递归的空间复杂度是递归的深度*每次压栈所需的空间个数代码class Solution {public: bool exist(vector<vector<char>>& .

2021-03-19 16:20:06 56

原创 剑指offer Leetcode 59 - II. 队列的最大值

解法:思想:​ 本质是求滑动窗口最大值的问题。队列可以看成是一个滑动窗口,入队就是将窗口的右边界右移,出队就是将窗口的左边界右移。复杂度:​ 操作均摊都是O(1)代码:class MaxQueue {public: //正常的队列 queue<int>queue; //非严格递减的双端队列,头部就是最大值 deque<int>deque; MaxQueue() { } int max_value() .

2021-03-19 16:19:30 62

原创 剑指offer Leetcode 59 - I. 滑动窗口的最大值(deque单调队列)

解法1:暴力法思想:​ 遍历每个滑动窗口,找出其中的最大值复杂度:​ ●时间:O((N - k + 1)k) = O(Nk),每个窗口k个数,总共有N - k + 1个窗口​ ●空间:解法2:单调队列https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/solution/mian-shi-ti-59-i-hua-dong-chuang-kou-de-zui-da-1-6/思想:​ 用deque维护一.

2021-03-19 16:17:06 115

原创 剑指offer Leetcode 57 - II. 和为s的连续正数序列

解法:滑动窗口思想:​ 维护一个左闭右闭的滑动窗口,左右边界只能增加,不能减小。根据和与target的关系来移动left与right,右移right是新增一个数,右移left是减去一个数。复杂度:​ ●时间:O(N),遍历​ ●空间:O(1)代码注意点(不看注释想出原因):●while循环的条件为?●left和right初值?●left和right增和加/减的顺序●找到一组答案后怎么继续遍历?代码:注意右移right是先增再加,右移left是先减再增class Solution .

2021-03-19 16:16:22 52

原创 剑指offer Leetcode 53-II 0~n - 1中缺失的数字

解法:二分思想:​ ●初始化:区间[0, nums.size() - 1]​ ●循环二分:​ 1.计算中点mid​ 2.如果nums[mid] == mid,则 “右子数组的首位元素” 一定在[mid + 1, right]中,所以left = mid + 1​ 3.如果nums[mid] != mid,则“左子数组的末位元素” 一定在[left, mid - 1]中,所以right = mid - 1​ ●返回值:跳出时,left和right分别指向"右子数组的首位元素"和"左子.

2021-03-19 16:14:50 62

原创 剑指offer Leetcode 53 - I. 在排序数组中查找数字 I

解法:二分法思想:​ 二分查找通常用于查找单个数,所以用在此题需要改变一下。​ 定义一个函数,返回target右边的数的索引,结果可以通过find(target) - find(target - 1)得到过程:​ ●初始化:在区间[0, nums.size() - 1]中查找,令left和right为左右边界​ ●定义左右区间:左区间小于等于target, 右区间大于target​ ●循环二分:​ 1.计算中点mid​ 2.如果nums[mid] <= target,说明右子数.

2021-03-19 16:14:19 64

原创 剑指offer Leetcode 63. 股票的最大利润(买卖一次)

注意:​ 一定要明确转移方程解法:动态规划思想:●状态定义:​●转移方程:​ 前i日的最大利润 = max(前i - 1日的最大利润, 第i日价格 - 前i日最低价格)​ dp[i] = max(dp[i - 1], prices[i] - min(prices[0 : i])),前i日最低价格用一个变量来维护我的理解:​ 前i天的最大利润要么就是第i天不操作,即前i - 1天最大利润。​ 要么就是第i天操作即卖出●初始状态:​ dp[0] = 0,即首日利润为0.

2021-03-19 16:13:43 85

原创 剑指offer Leetcode 60.n个骰子的点数

解法:动态规划思想:​ 可以把n个骰子的点数分解为n - 1个骰子的点数加上1个骰子的点数。根据1的概率数组求出2的概率数组,根据2求出3…直到求出n的点数。●状态定义:tmp[]为n个骰子的概率数组,pre[]为n - 1个骰子的概率数组,1个骰子的概率数组显然是6个1/6●初始状态: vectorpre = {1.0 / 6, 1.0 / 6, 1.0 / 6, 1.0 / 6, 1.0 / 6, 1.0 / 6};●状态转移方程:tmp[x + y] += pre[x] * num[y];.

2021-03-19 16:12:58 59

原创 剑指offer Leetcode 49.丑数

解法:思想:●丑数:​ 一个丑数乘以2,3,5之后,一定还是一个丑数。●丑数序列:​ 计算丑数序列其实就是合并三个有序序列。//即丑数序列乘以2,3,5nums2 = {1*2, 2*2, 3*2, 4*2, 5*2, 6*2, 8*2...}nums3 = {1*3, 2*3, 3*3, 4*3, 5*3, 6*3, 8*3...}nums5 = {1*5, 2*5, 3*5, 4*5, 5*5, 6*5, 8*5...}●逻辑​ 丑数序列乘以2,3,5得到三个序列,这三个序列合.

2021-03-19 16:11:22 68

原创 剑指offer Leetcode 47.礼物的最大价值

解法:动态规划(非原地修改)思想:​ ●状态定义:dp[i][j]为以grid[i - 1][j - 1]为结尾的路径的最大值​ ●转移方程:到当前点只能从上面和左边来,所以选两者中最大的。​ dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];​ ●初始状态:新建双层vector比grid大一行一列,在上边和左边加了一排0,所以dp[i][j]对应着grid[i - 1][j - 1]​ ●返回值:返回dp[m].

2021-03-17 12:54:34 64

原创 剑指offer Leetcode 46. 把数字翻译成字符串

**一刷12.14 **二刷12.15解法:动态规划思想:​ ●状态定义:dp[i]代表以Xi为结尾的数字的翻译方案数量​ ●转移方程:​ 若Xi和Xi-1两位数字可以合在一起被翻译,那么dp[i] = dp[i - 1] + dp[i - 2],因为两位连起来翻译和Xi单独翻译得到的结果是完全不同的,所以可以相加。​ 否则dp[i] = dp[i - 1],必须单独翻译当前位,所以没有变化​ ●初始状态:dp[0] = dp[1] = 1,即无数字和第一位数字的翻译方法为1​ .

2021-03-17 12:53:43 62

原创 剑指offer Leetcode 42.连续子数组的最大和

解法1:贪心思想:​ 如果当前和为负,就抛弃当前和,从下一个数开始。如果当前和为正,就继续使用。每遇到一个数就更新一次最大和。复杂度:​ 时间:O(n)​ 空间:O(1)代码:class Solution {public: int maxSubArray(vector<int>& nums) { int maxsum = INT_MIN; int sum = 0; for(int i : nums){ .

2021-03-17 12:52:56 50

原创 剑指offer Leetcode 13. 机器人的运动范围

解法1:贪心class Solution {public: int cuttingRope(int n) { if( n <= 3) return n - 1; long long res = 1; while(n > 4){ n -= 3; res = res * 3 % 1000000007; } return res * n .

2021-03-17 12:52:04 61

原创 剑指offer Leetcode 14-I 剪绳子

解法1:动态规划思想:dp[n]代表长度为n的绳子剪完后长度乘积的最大值,长度123不剪比剪要更大,所以不剪,4开始就肯定是剪后>=剪前,所以dp[i] = max(dp[i], dp[j] * dp[i - j]);复杂度时间复杂度:O(n^2),两次循环空间复杂度:dp数组占据O(n)空间代码class Solution {public: int cuttingRope(int n) { //n <= 3时,数字要求至少分为两部分,实际结果的最大值为.

2021-03-17 12:51:33 85

原创 剑指offer Leetcode 10.斐波那契数列

解法1:效率低的解法复杂度速度十分缓慢,重复计算太多代码//未考虑溢出和取模class Solution {public: int fib(int n) { if(n <= 0) return 0; if(n == 1) return 1; return fib(n - 1) + fib(n - 2); }};解法2:复杂度:时间复杂度O(n)代码class So.

2021-03-17 12:50:34 53

原创 剑指offer Leetcode 10 II.青蛙跳台阶问题

思想:也是斐波那契数列,n级台阶的跳法 = n - 1级的跳法 + n - 2级的跳法。即f(n) = f(n - 1) + f(n - 2),但是要注意起始条件n = 0时为1,n= 1时为1,n = 2时为2

2021-03-17 12:49:55 50

原创 剑指offer Leetcode 10 I .斐波那契数列

解法1:效率低的解法复杂度速度十分缓慢,重复计算太多代码//未考虑溢出和取模class Solution {public: int fib(int n) { if(n <= 0) return 0; if(n == 1) return 1; return fib(n - 1) + fib(n - 2); }};解法2:复杂度:时间复杂度O(n)代码class So.

2021-03-17 12:49:12 55

原创 剑指offer 17. 打印从1到最大的n位数

Leetcode上的题目简化了,没有意义。题目: 输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999陷阱 这道题看起来很简单,但是要想到会不会n输入太大,n位数用int或者long long都会溢出?也就是说我们需要考虑大数问题。解法一:迭代如何表示出大数? 想到用字符串或者数组表达大数。本题使用字符串来表示。具体流程 将字符串每个字符都初始化为’0’,然后每一次为字符串表示的数字加一,再打印出来。所以需要做两件事:一是在字符串表达的数

2021-03-17 12:48:13 61

原创 剑指offer Leetcode 16. 数值的整数次方

解法1:快速幂注意: ●要考虑各种边界条件,如x为0且n为负数的情况,如x为0且n为0的情况。 ●要注意double的判等不能用==思想:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/solution/mian-shi-ti-16-shu-zhi-de-zheng-shu-ci-fang-kuai-s/有二分法的思想在里面:复杂度: ●时间:二分法思想O(logn) ●空间:常数空间O(1)代码.

2021-03-17 12:47:06 60

2017 c++讲义、笔记、代码

黑马2017 c++基础讲义、笔记、代码,与视频同步,很好的c++学习资源,视频b站有.

2020-07-13

Spreadsheet.zip

C++.GUI.Qt.4编程中三四两章中Spreadsheet的源码,更改了一些,可以在Qt5中运行,且能实现相应的功能。

2019-07-23

C++.GUI.Qt.4编程.pdf 有书签,很清晰

《C++GUIQt4编程》(第2版)详细讲述了用最新的Qt版本进行图形用户界面应用程序开发的各个方面。前5章主要涉及Qt基础知识,后两个部分主要讲解Qt的中高级编程,包括布局管理、事件处理、二维/三维图形、拖放、项视图类、容器类、输入/输出、数据库、多线程、网络、XML、国际化、嵌入式编程等内容。对于《C++GUIQt4编程》(第2版)讲授的大量Qt4编程原理和实践,都可以轻易将其应用于Qt4.4、Qt4.5以及后续版本的Qt程序开发过程中。

2019-07-08

带书签英文版 C++ GUI Programming with Qt 4, Second Edition.pdf

Qt [1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

2019-07-07

opnet12个经典的例子-Lab08-TCP.pdf

只有8到12了,前面的找不到了。 OPNET就是一个网络仿真技术软件包,它能够准确的分析复杂网络的性能和行为,在网络模型中的任意位置都可以插入标准的或用户指定的探头,以采集数据和进行统计。通过探头得到的仿真输出可以以图形化显示、数字方式观察、或者输出到第三方的软件包去。其产品结构有三个模块组成,能为用户提供一系列的仿真模型库,在电信、军事、航天航空、系统集成、咨询服务、大学、行政机关等方面被广泛应用。

2019-07-03

OPNET物联网仿真 [陈敏 著] 2015年版.pdf

OPNET物联网仿真是华中科技大学陈敏教授编写的基于OPNET的物联网的仿真的专业书籍,书中介绍了物联网的演进,详细讲解了一个成熟的基于OPNET Modeler的物联网仿真模型IOT_Simulation,以及基于该模型基础上的物联网其他仿真模型。

2019-06-23

空空如也

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

TA关注的人

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