自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(216)
  • 资源 (3)
  • 收藏
  • 关注

原创 svn 按照指定格式列出出版本号、提交者、日期、注释

svn log -l 100 | tr "\n" " " | sed 's/[\-]\{72\}/\n/g' | awk -F "|" '{OFS="\t";print $1,$2,$3,$4}'svn log:查看svn的提交日志信息tr :用于转换或删除文件中的字符,如te “\n” " " ,即把换行改成空格sed 's/[\-]\{72\}/\n/g':把72个 - 替换成 \nsed 's/A/B/g':表示把所有A替换成B[0-9]{0,9}:正则表达式,表示长度为0到9的数字字符

2020-09-11 14:39:17 702

原创 svn 根据提交的日志的关键字筛选出相关的版本号

svn log -r {2019-2-10}:{2019-5-25} | grep "姓名" -A 1 -B 2 | grep "^r[0-9]\+" | awk -F"|" '{print $1}' > a.txtsvn log:查看svn提交的日志信息-r:筛选指定时间段内的数据-A:即after,后面多少行数据-B:before,之前多少行数据awk -F’|’:即指定按照 | 分割数据...

2020-09-11 14:18:44 1331

原创 Linux 下使用 mtrace 检测是否有内存泄漏

一般使用mtrace检测在堆上创建的对象是否被正常销毁,如果没有被销毁就会造成内存泄漏。设置环境变量, mtrace保存位置两种方式:一种直接在shell命令行设置export MALLOC_TRACE=malloc-trace.log一种在代码中设置setenv("MALLOC_TRACE", "malloc-trace.log", "1");代码中引入 mtrace#include <mcheck.h> // 头文件int main(){ // 开始检测

2020-08-29 17:21:16 624

原创 Trie树 字典树 前缀树

字典树通过共享字符串的公共前缀来达到节省空间的目的。比如 “abc” 和 “ab” 和 “d”,构建的字典树如下表示,红色表示一个串的结束。比如我们做一个26个字母的字典树每个节点下都有26种可能的分支。因此定义每个节点的结构TrieNode如下:#include <iostream>#include <stdlib.h>#include <stdio.h>#include <memory.h>#include <mche

2020-08-29 17:04:46 253

原创 36-Leetcode 二叉搜索树与双向链表

文章目录思路法一:递归法二:借助栈题目二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。要求不能创建任何新的节点,只能调整树中节点指针的指向。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。思路我们知道二叉搜索树的特点就是,左孩子节点的值 < 根节点的值 < 右孩子节点的值所以按照 左根右 的顺序进行遍历,即可实现从

2020-07-14 20:02:39 192

原创 33-LeetCode 二叉搜索树的后序遍历序列

文章目录题目题目二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树:5/ \2 6/ \1 3示例 1:输入: [1,6,3,2,5]输出: false思路:后序遍历: 左             &n

2020-07-14 15:51:31 180

原创 26-LeetCode

文章目录题目法一:递归题目树的子结构。输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ \4 5/ \1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。法一:递归先在A树中找到和B树根节点相同的节点找到相同的根节点后,从根节点开始判断A是否包含B树当B为空,说明B已匹配完成,返回true当A为空

2020-07-14 14:58:35 167

原创 27-LeetCode 二叉树的镜像

文章目录题目法一:迭代题目二叉树的镜像。请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:     4    / \   2 7  / \ / \1 3 6 9镜像输出:    4   /   \  7   2  / \   / \9

2020-07-14 11:15:22 217

原创 106-LeetCode 从中序与后序遍历序列构造二叉树

文章目录题目法一:递归题目从中序与后序遍历序列构造二叉树。根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:3/ \9 20    / \  15 7法一:递归思路:中序遍历: 左 根 右后序遍历: 左 右 跟根据 后序序列 得到

2020-07-10 10:42:48 204 1

原创 105-LeetCode 根据前序+ 中序序列构造二叉树

文章目录题目法一:递归题目从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ \9 20/ 15 7 法一:递归思路根据前序遍历可以知道根节点,根据根节点可以在中序序列中得到左子树 和 右子树 的中序序列我们可以得到如下信息:先序序列------根节

2020-07-09 19:29:03 303

原创 32-LeetCode 从上到下打印二叉树

文章目录题目题目从上到下打印二叉树:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7返回:[3,9,20,15,7]思路:从上-往下打印二叉树—相当于层序遍历从上往下,从左往右。我们知道都是按顺序的,顺序结构,可以借助队列来帮助实现先把根节点放入队列队列不为空,取出队列中的一个节点,左孩子节点(不为空)入队,右孩子节点(不为空)入队一次重复第

2020-07-08 19:41:38 250

原创 145-LeetCode 二叉树的后序遍历

[toc]题目二叉树的后序遍历 给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]1\2/3输出: [3,2,1]代码如下:#include <stdio.h>#include <stdlib.h>#include <iostream>#include <stack>#include <vector>using namespace std;struct TreeNode{

2020-07-08 17:50:12 183

原创 94-LeetCode 二叉树的中序遍历

文章目录题目法一:借助栈法二:递归版本法三:莫里斯遍历 ---- 线索二叉树题目二叉树的中序遍历:给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]1\2/3输出: [1,3,2]法一:借助栈中序遍历: 左 根 右我们可以借助栈来完成。我们知道左 跟 右,那就是要把左子树全部处理完了,即一直往左下一直走到头,然后在一层一层向上出来 - - - 再去处理根节点 - - - 再去处理右节点具体思路:根节点入栈 - - - 根节点的所有左节点依次

2020-07-07 19:49:10 161

原创 144-LeetCode 二叉树的先序遍历

文章目录题目一:借助栈实现借助栈实现---优化版本二:递归实现题目二叉树的前序遍历:给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3]1\2/3输出: [1,2,3]一:借助栈实现我们知道,先序遍历是按照 根左右 的顺序进行遍历的。即 根 左子树 右子树我们知道栈的特点是后进先出。可以借助栈来实现:先把根节点入栈栈不为空。弹出栈顶元素 A栈顶元素 A 的右节点入栈(若不为空)栈顶元素 A 的左节点入栈(若不为空)重复上述操作直

2020-07-06 20:13:12 322

原创 堆排序

预处理器是在编译之前执行的一段程序,可以部分地改变我们所写的程序。 预处理器可以确保头文件多次包含但仍能安全工作。头文件保护符 #define:指令把一个名字设定为预处理器变量。 #ifdef:当且仅当变量已定义时为真 #ifndef:当且仅当变量未定义时为真 一旦检查结果为真,则执行后续操作直至遇到#endif指令为止

2020-06-20 17:02:55 136

原创 二叉堆的构建、插入、删除等操作

共享内存就是两个或者多个进程共享的一块区域。只要一个进程改变了这块地址中的内容的时候,其他进程便会察觉到改变的内容。(1)创建共享内存 int shmget(key_t key, int size, int shmflg) (2)将共享内存映射到自己的内存空间 void* shmat(int shmid, const void* shmaddr, int shmflg) shmi...

2020-06-20 15:51:59 2138

原创 选择排序

选择排序是一种灵巧的算法,但其速度不是很快。具体规则如下:1:从未排序元素中找到最小(大)元素,存放到排序序列的起始位置。(我们以最小值举例)2:再从剩余的未排序元素中继续寻找最小元素,然后放到已排序序列的末尾(通过交换元素值实现,如果最小元素比第一个未排序元素小,那就交换他们的值)3:重复第二步,直到所有元素排序完成时间复杂度:O(n^2)要遍历n次,即针对每个元素,对他们进行排...

2020-04-24 11:30:10 185

原创 C 和 C++ 关于 const 的比较

C 语言中 const 修饰符:const 修饰的变量不是真正意义上的常量,而是一个常变量无法直接修改,但是可以间接修改变量的值。会分配内存空间,因此可以通过指向其地址空间的指针去修改其内容。const int b = 10; int * p = (int *)&b;*p = 30;printf("%x\n" , &b); // 313b1df4prin...

2020-04-18 17:58:36 230

原创 LeetCode-155 最小栈

文章目录题目思路辅助栈和数据栈同步操作辅助栈只存储最小值题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:MinStack minStack = new MinStack();...

2020-04-07 20:30:52 185

原创 垃圾回收 GC

文章目录垃圾回收(Garbage Collection,缩写为GC)收集器实现引用计数收集器跟踪收集器。回收算法1:标记-清除2:标记-压缩3:复制4:增量回收器5:分代垃圾回收(Garbage Collection,缩写为GC)自动的存储器管理机制。当某个程序占用的一部分内存空间不再被这个程序访问时,这个程序会借助垃圾回收算法向操作系统归还这部分内存空间。收集器实现引用计数收集器...

2020-04-07 16:49:23 193

原创 redis 配置文件

redis.conf配置重要字段详解1、redis的日志级别: redis的日志级别分为debug、verbose、notice、waining。在redis.conf中通过loglevel来配置redis的日志等级。只记录level级别大于配置文件中配置的等级。#define REDIS_DEBUG 0#define REDIS_VERBOSE 1#define REDIS_NOT...

2019-11-23 14:31:58 187

原创 游戏设计 MMORPG类九宫格视野

文章目录地图分块坐标点定位玩家所在地图块视野块玩家视野玩家九宫格中的视野数据如何取舍在游戏中地图是以 X 轴, Z 轴为水平面的(游戏中都以cm为单位)。假设地图大小是256m * 256m,下面都是按照这个大小进行讨论。地图上每个位置都会有对应的actor对象(玩家或者npc等),如何获取当前地图的所有玩家?当玩家走到某个位置如何更新玩家的视野信息,获取当前玩家周围的其他actor对...

2019-11-05 14:51:42 3023 1

原创 struct 结构体 所占字节数的计算

定义结构体类型,只能说明该类型的组成情况,并没有分配内存空间。只有当定义属于结构体类型的变量时,系统才会分配空间给该变量。

2019-10-17 16:10:18 15101 1

原创 c++ 指针常量、常量指针、函数指针等详解

指针(1)指针本身就是个对象,允许对指针赋值和拷贝。生命周期内它可以先后指向几个不同的对象。(2)指针无需在定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。(3)指针存放某个对象的地址。可以使用取地址符 & 来获取地址(4)如果指针指向了一个对象,可以使用解引用符 * 来访问该对象(5)void* 可以存放任意对象的地址。但是我...

2019-10-06 19:01:04 456

原创 strcpy和memcpy的区别

(1)复制内容不同strcpy 只能复制字符串,除了复制字符串内容外,还会复制字符串的结束符memcpy 可以复制任意内容,例如字符数组、整型、结构体、类等。(2)复制的方法不同strcpy 不需要指定长度,遇到被复制字符串的串结束符 '\0’才结束,所以容易溢出memcpy 对于需要赋值的内容没有限制...

2019-08-10 11:03:22 140

原创 c++ 预处理

#预处理:编译之前的处理。不做语法检查,宏定义不分配内存宏宏替换的本质------文本替换(1)宏名一般大写,宏名和参数的空格间不能有空格,宏定义末尾不加分号。如: #define BASE 4(2)宏只做替换,不做语法检查,不做计算,不做表达式求解#define FUNC(x) x*xint a = 3,b = 4;FUNC(a+b) = a+b*a+b = 3+4*3+4 ...

2019-05-06 11:45:35 282

原创 Linux sort用法

首先编写个测试文件,内容如下:danni@vm-xxx-18:/home/danni/study/shell $ cat a.txt 23122312334411223344cat a.txt | sort | uniq -cuniq -c:合并相邻的重复记录,并统计重复计数。由于 uniq -c 只会合并相邻的记录,所以在使...

2019-01-14 20:19:49 367

原创 tmux的使用

(1)进入上帝模式: ctrl + b(2)调换窗口:首先进入上帝模式,然后 ctrl + o(3)调换内置布局:首先进入上帝模式,然后按 空格键(4)横向分割窗口:首先进入上帝模式,然后 &amp;amp;amp;amp;amp;amp;quot;(5)纵向分割窗口:首先进入上帝模式,然后 %(6)打开所有的会话列表:首先进入上帝模式,然后按 s 键(7)查看所有的 tmux 会话:tmux list-session 或者 tmux ls...

2019-01-12 14:48:14 1259

原创 -1 对256求模的值为255?

把-1赋值给一个8位的uinsigned char,结果是255?#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt;using namespace std;int main(){ unsigned

2019-01-09 14:17:15 1750 2

原创 shell 把以空格分隔的变量 分割后的每个字段赋值给变量

继承继承中有两个概念。基类和派生类。直接或者间接继承基类的类称为派生类。一般我们在基类中定义一些共同拥有的成员,在派生类中定义各自特有的成员。 对于某些函数,我们希望派生类对于各自的类具有不同的实现方式。在这种情况下,我们可以把这些函数声明成虚函数。 如果派生类没有覆盖它继承的虚函数,则该虚函数的行为类似于其他普通成员,派生类会直接继承其在基类中的版本。 派生类对象不能直接初始化基类的成

2018-11-24 18:00:18 32671

原创 expect 基础语法学习 及 简单使用

基本语法:send:接收一个字符串参数,将参数发送到进程expect:和send相反,根据进程输出的反馈,再发送(send)对应的交互命令spawn:启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互interact:允许用户交互。退出自动化,进入人工交互。编写一个简单的expect例子:[danni@vm-xxx-18 expect5.45...

2018-11-24 11:08:05 907

原创 linux find之exec用法

find命令之exec-exec参数后面跟的是command命令,它是以 ; 为结束标志,由于各个系统中分号会有不同的意义,因此在前面加上反斜杠。{} 代表前面find查找出来的文件名[danni@vm-xxx-18 study]$ find ./ -type f -exec ls -l {} \;-rwxrwxr-x. 1 danni danni 939 Sep 20 18:52 ./t...

2018-10-12 16:45:14 12875

原创 linux 环境变量详解

全局环境变量和局部环境变量全局环境变量:对于shell会话和它生成的所有子shell都是可见的。局部环境变量:只在创建他们的shell中可见。全局和局部变量是否可以用我们编程语言中的父类和子类来帮助了解?查看全局变量的值:(1) printenv :查看所有全局变量的值,printenv 变量名:查看指定变量名的全局变量的值(2) env :只能查看所有,不能查看单个(3) ech...

2018-10-12 11:09:59 547

原创 linux 当修改服务器上的时间,导致文件时间和当前时间不符合的时候,把文件时间恢复到当前服务器时间

递归修改当前目录下所有文件/文件夹:find ./ * -exec touch {} \;

2018-10-11 17:04:23 2292

原创 linux 查找被删除但是未被释放空间的文件 并释放资源

查看已删除但是未释放空间的文件:lsof | grep deleted删除已删除但是未释放空间的文件:lsof | grep deleted | awk '{print $2}' | xargs -I {} kill -9 {}

2018-10-10 17:08:39 5011

原创 linux xargs命令用法

xargs命令:读取输入数据重新格式化后输出,将标准输入数据转换成命令行参数输出。定义一个测试文件:[danni@vm-xxx-18 study]$ cat test.txt a b c d ef g h i j kl m n o p q rs t u v w x y zxargs默认命令是echo,空格是默认定界符。默认情况下,多行输入通过xargs实现了单行输出。[dan...

2018-10-10 11:56:41 419

原创 Shell 脚本 基础知识点、入门必备

(1)命名:Shell脚本以 .sh为后缀 (2)

2018-09-30 15:00:04 487

原创 linux下一些常用的svn命令

查看当前修改的文件:svn status -q筛选出有冲突的文件:svn st -q | grep ^C查看未加入到版本里面的文件:svn status | grep -e ^?根据提交的时间段和提交的用户筛选svn的提交记录:https://blog.csdn.net/qq_36748278/article/details/82842345...

2018-09-30 14:48:56 394

原创 linux下操作svn,实现根据时间段查看某个指定用户提交的记录

svn log -v -r {2018-9-10}:{2018-9-25} | sed -n '/danni/,/--$/ p'

2018-09-25 17:29:31 7054

原创 shell脚本 数组的使用

一: 数组的定义shell 只支持一维数组(不支持多维数组)shell 数组初始化的时候不需要定义数组的大小,数组元素的下标由0开始,shell数组用括号来表示,元素之间用空格分隔开可以使用@或*获取数组中的所有元素#数组myarray=(123 &amp;amp;amp;quot;bb&amp;amp;amp;quot; &amp;amp;amp;quot;ccc&amp;amp;amp;quot; &amp;amp;amp;quot;dddd&

2018-09-20 11:46:31 5656

mybatis generator

mybatis generator可以提高开发速度,这个Eclipse插件可以自动生成Domain、Dao、Map文件。将该工具解压,拷贝features和plugins文件夹到eclipse的安装目录下,重新启动Eclipse即可。

2017-10-10

使用eclipse创建struts2项目所需的jar包

这是创建struts项目所需的jar包。 使用的时候直接复制到项目的WEB-INF文件夹下的jar目录下即可使用。

2017-09-16

fastjson.jar

本资源是一个java的json解析jar包。上传给大家分享一下。 .

2017-09-01

空空如也

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

TA关注的人

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