- 博客(28)
- 收藏
- 关注
原创 cmdb平台
cmdb代表管理数据库,configuration management database,通常用于存储有关构成IT基础架构的组件的信息。CMDB的核心功能之一就是支持服务管理流程,主要包括:整合、调和、同步、映射和可视化和一般数据库的区别CMDB软件侧重于信息的管理,数据库侧重于信息的无力存储,两者是密切联系的。CMDB的功能需要专门的CMDB管理软件,很难在传统数据库上直接完成。CMDB的作用。
2023-01-23 21:48:59
590
原创 c++专选课笔记
c++运用技巧积累c++11标准多出来好用的新特性具体参考链接1)使用非成员函数begin(x)和end(x)(不是x.begin()和x.end()),因为begin(x)和end(x)是可扩展的,能同所有容器类型一块工作——甚至数组也可以——并不是只针对提供了STL风格的x.begin()和x.end()成员函数的容器。如果你正在使用一个非STL集合类型,这个类型提供迭代器但不是STL风格的x.begin()和x.end(),你可以对他的非成员函数begin()和end()进行重载,这样你就
2023-01-23 21:47:31
159
1
原创 华中科技大学操作系统1-1、2-1、3-1基础解析
本文依赖于华中科技大学操作系统PKE实验代码,为lab1_challenge1、lab2_challenge1、lab3_challenge1的实验解析。
2023-01-07 20:36:08
2108
原创 软件工程总结——Websocket学习
websocket协议的基本原理理解。和http的区别和联系。go语言使用开源仓库实现简单的websocket通信。
2022-11-22 11:06:12
1101
原创 MIT 6.824学习笔记(1)——go routine 和 go channel的协作递归
采用深度优先的方式进行爬取,由于子程序采用goroutine的方式,所以为了防止共享数据的访问冲突。该程序完成一个递归爬虫爬取页面的任务(此处进行简化处理)。一个url页面下面可能会有很多个新的url,该程序需要爬取到所有的url后,才进行返回。此时需要coordinator进行任务调度处理,以此让所有空闲的worker进行并行工作。在完成单个任务下发到worker,然后worker进行处理完成的阶段后。要想完成lab1此阶段的任务,需要熟悉以下Go语言的知识。下面以一个简单的例子进行学习演示。...
2022-08-02 15:00:19
107
原创 mysq多表事务(question)
mysql里面要把两个不同的数据库的操作规定到一个事务里面。现在有两个数据库Db_A和Db_B。Db_A中有两个表Node和manager;Db_B中有两个表user和appkey_to_user。现在接口的需求是:由于两个数据库中的四个表之间的一些字段是对应的,在进行删表和增表的时候,为了保证原子性,需要开启mysql中的事务操作。问题是:能否用两个db,分别开两个事务进行操作,这样是否也可以保证原子性?(示例代码如下,用gorm操作数据库)这种写法总感觉不符合“将整个操作统一起来的”的原子性要求。而且
2022-07-14 15:12:18
543
原创 gorm中Schema源码解析
下面文章解析下面两条语句的详细过程首先需要理解gorm带来了什么方便的地方:它将我们定义的结构体User和数据库中的User表对应起来。避免进行逐个变量一一赋值的操作依赖于DB结构体中的Statement字段DB和Statement中几个比较重要的字段在下面列出在gorm进行解析的时候(详见下文),会将User结构的详细内容都保存到Statement.Schema中。Model的值通过.Model(value interface{})方法进行赋值。Model属性暂时保存User类型,为后面进行解析提供方
2022-07-13 16:05:20
622
原创 go mod tidy拉取依赖包bug
go mod tidy拉取缺少的模块,同时移除不用的模块该命令会调用go get,然后go get会调用git的命令,拉取代码go语言其他环境变量GOSUMDB:Go checksum database 的缩写,含义如其名字,用于在拉取模块版本时保证拉取到的模块版本数据未经过篡改,若发现不一致,也就是可能存在篡改,将会立即中止。如果设置为"off",则禁止Go在后续操作中校验模块版本GONOPROXY / GONOSUMDB / GOPRIVATE如果当前项目依赖了私有模块,则配置会涉及这三个
2022-05-11 13:03:44
1936
原创 2021年华中科技大学dian团队春招实习题目
BlockChainPracticeDian_BlockChainPractice区块链组实习题目日志10/1区块链的应用根据区块链中存储的信息的不同,区块链所应用的场所也不尽相同。(比如比特币中所应用的区块中就是存储的用户交易信息)例如:建立食物链。区块链网络类型分为四种类型:公有区块链、私有区块链、联盟区块链、许可区块链。主要研究共有区块链技术,另外三种只是部分不同,大体一致。由于Go语言支持语言层次上的并发操作,所以Go语言非常适合分布式系统(可以简单理解为具有很多个服务器的一个
2021-10-08 08:18:09
197
原创 算法——双指针
leetcode15.三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。func threeSum(nums []int) [][]int { n := len(nums) sort.Ints(nums) ans := make([][]int, 0) // 枚举 a for first := 0; first < n; firs
2021-09-27 16:51:40
55
原创 算法——动态规划
1)思想(注意与常规的回溯法区分开):动态规划通过找到衡量题目量的状态、状态转移的变化和最优子结构,从而写出状态转移方程。其中,核心是状态和状态转移方程leetcode:最大子序和题目描述:也就是在一列数中找到最大的连续和1)动态规划(线性结构)class Solution{public: int maxSubArray(vector<int>& nums){ for(int i = 0; i < nums.size()-1; i++){ if(nums[i]
2021-09-27 16:50:31
265
原创 算法——递归与递推
leetcode二叉树的最近祖先1)递归算法核心思想:找到对应的子问题:左右子树中是否含有p或者q结点。然后再设计递归出口,最后实现递归函数深度优先遍历解决问题。class Solution {public: //递归算法关键:寻找核心子问题 TreeNode* ans; bool dfs(TreeNode* T, TreeNode* p, TreeNode* q){//T的左右子树中是否有p或者q if(!T) return false; b
2021-09-27 16:49:57
384
原创 算法——选择与排序
leetcode75颜色分类——堆排序采用最小堆进行处理func sortColors(nums []int) { n := len(nums) b := n-1 for i:=0; i <= b; i++{ MinHeap(nums, i, b) }}func MinHeap(nums []int, a int, b int){//将nums数组中从a到b的元素看作一个最小堆,进行处理 n := b - a + 1 for
2021-09-27 16:49:26
107
原创 常用高级数据结构
线段树1)线段树用于求解区间和以及区间最值问题,其算法复杂度为O(logn)。每一个节点代表一个区间,结点的权值代表最值或者区间和。线段树的思想:线段树的每个叶子节点都是单个元素信息,而每个父节点是其叶子节点信息的整合。即线段树实际上是将信息进行了二进制化处理。(也可以看成分块思想的树化)可以联系分块算法的处理方式进行同步考虑,分块本身就是一种优雅的暴力算法。2)线段树的基本操作:线段树的构建、定点删除、定点查询、区间删除、区间查询。#include<iostream>using n
2021-09-27 16:48:49
572
2
原创 数据结构——图
洛谷P1551亲戚问题1)知识点:数据结构中的并查集问题(《啊哈!算法》中出现过)并查集:分为init()、find()、merge()。三个主要函数主要思想:用一个集合中的主要元素(帮主)来代表整个集合中的所有元素。其实就是在维护一个森林。int fa[n];//表示每个元素所在帮派的帮主是谁inline void init(){ for(int i = 0; i < n; i++) fa[i] = i;//开始是自己为帮主}int find(int x){ if(fa[x]
2021-09-27 16:48:18
442
原创 数据结构——树
洛谷SP14932 LCA问题1)LCA(Lowest Common Ancester)问题有很多解决方案。例如树链、倍增、Tarjan等等。本题采用倍增算法。链式前向星数据结构存储树!(数组模拟邻接表)2)基本思想:用一个二维数组f[a][b]记录 a 结点的 2 的 i 次方级祖先。因此有以下迭代关系。利用这个迭代关系就可以结合动态规划思想求出所有的 f 值f[a][b] = f[f[a][b-1]][b-1];首先要利用 dfs ,先得到每一个节点的深度以及初始化 f[i][0]的值
2021-09-27 16:47:48
112
1
原创 数据结构——栈、堆以及队列
洛谷P1981 表达式求值1)涉及栈的知识点不太多,主要是栈的进栈和出栈操作。注意在c++中,pop() 没有返回值,一般和 top() 结合起来使用!一些细节:c++ 的 cin 会根据输入的类型自动进行判断读取,不必像 c 语言那么僵硬的一直用字符类型进行处理。c++ 里面的 cin/cout 效率不如 scanf()/printf() ,所以在数据很大的时候最好还是使用后者。洛谷P5788单调栈1)单调栈概念:栈中元素递增或者递减。2)应用:单调栈内存储的元素一般都为下标,而不是真正
2021-09-27 16:47:17
394
原创 数据结构——数组的妙用
分块算法(优雅的暴力)1)分块算法一般将一列数划分为 根号n,同时用一个数组来记录每一个元素的归属块。后续处理都是尽量按照组为单位进行处理,进而节约时间开销。下面只是展示初始化代码,区间查询和区间修改代码参见洛谷P3372线段树(分块)题目代码void _init(int n){//先对分块进行初始化操作 int q = sqrt(n);//q个分组 for(int i = 1; i <= q; i++){//确定每一组的起始元素和结尾元素 st[i] = n/q
2021-09-27 16:46:33
409
原创 华中科技大学2021秋学年课程设计
预备知识了解变元、文字、子句、CNF范式等概念变元:不二变元,可以取真假值文字:布尔变元及其非称为文字子句:若干个文字的或运算被称为子句CNF范式:若干个子句的合取被称为CNF范式,即合取范式DPLL算法1)全称:Davis-Putnam-Logemann-Loveland2)思想:基于树/二叉树的回溯搜索算法,主要基于两种策略。单子句规则:如果一个CNF范式中存在单子句L(含有一个文字的子句),取L为真值。通过L的值,遍历其他的子句:如果某个子句中含有L,则将这个子句从范式中去
2021-09-16 19:48:35
571
原创 《essential c++》笔记
概述本博客主要记录一些学习c++中的一些心得体会输入与输出//1、整形int a = 0;cout << "请给整数a赋值:" << endl;cin >> a;cout << "整型变量a = " << a << endl;//2、浮点型float f = 3.14f;cout << "请给浮点型变量f赋值" << endl;cin >> f;cout <<
2021-05-01 15:57:29
360
原创 图解c语言单链表插入操作常见误区
纲领:注意先为下一个节点分配内存再进行数据域的赋值错误示例:student* insert_list(student *head, int n){ student *p = head; int i; while(p) p = p->next;//错误点一 p = (student*)malloc(sizeof(student)); scanf("%s%s", p->credit, p->name); p = p->next; //上面操作有误! for(i
2020-12-29 10:27:23
440
1
原创 malloc函数实现无多余内存分配(妙)
循环实现对大量数对无冗余存储#define N 3#include<stdio.h>#include<stdlib.h>int main(){ int i; char *s[N]; for(i = 0; i < N; i++) { char t[80]; fgets(t, 80, stdin); s[i] = (char*)malloc(strlen(t)+1); strcpy(s[i], t); } ... return 0;}.
2020-12-16 17:53:30
114
2
原创 零巫_的c语言笔记
getchar() 和putchar()它们一般是预处理的宏,而不是真正的函数。只读取字符,所以不用进行转换说明。技巧:可以习惯把读取和测试表示为一个表达式,更加简约。ch = getchar(); /* 读取一个字符 */while (ch != '\n') /* 当一行未结束时 */{ ... /* 处理字符 */ ch = getchar(); /* 获取下一个字符 */}例如这种替换(经典 )w
2020-11-07 22:05:30
540
3
原创 Python个人学习小结
列表的操作函数操作列表添加:.append()插入:.insert()删除(运算符):del + 列表名以及pop()删除names.insert(0,'name') #插入del names[0] #删除names.pop([numbers]) #可以删除并且返回其删除的值组织列表排序:永久排序(.sort())以及临时排序(.sorted())倒着打印列表:reverse()确定列表的长度:len()print(sorted(names)) names.reverse
2020-10-29 19:01:23
681
原创 萌新(小白)之面试经验
第一次冰岩的面试经验:1,要做好准备,不要猝不及防。2,对于群面,你应该踊跃的发言,而不是静静地听着别人有条不紊的讲话,因为你们是在竞争。3,在别人发言时,自己应该思考自己接下来要说些什么,而不是只是听着别人的发言。这样才能在别人发言完毕后,自己再畅所欲言。不然当面试官问你有什么想法的时候,你只能再次的听着别人发言。4,发言时应该口齿清晰,语速合适,从容不迫。5,自己应该广泛学习一点专业的知识,不管是不是与自己的专业有关系。当你的知识储备充足了,你才能拓展自己的思维,发散出去。6,可以结合自己听
2020-09-29 23:15:44
200
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人