自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 吞吐量(TPS)、QPS、并发数、响应时间(RT)概念

开发的原因,需要对吞吐量(TPS)、QPS、并发数、响应时间(RT)几个概念做下了解,查自百度百科,记录如下:1. 响应时间(RT)  响应时间是指系统对请求作出响应的时间。直观上看,这个指标与人对软件性能的主观感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间。由于一个系统通常会提供许多功能,而不同功能的处理逻辑也千差万别,因而不同功能的响应时间也不尽相同,甚至同一功能在不同输入数据的情况下响应时间也不相同。所以,在讨论一个系统的响应时间时,人们通常是指该系统所有功能的平均时间或者所有.

2020-12-21 00:16:19 517

原创 一篇文章搞懂Java反射

    什么是反射? 反射就是在程序运行的过程中,可以动态的获取类信息,以及类的相关方法,反射的用处很多,比如Spring中bean的加载过程,动态代理等都用到了反射。既然有反射,那肯定有正射,正射就是我们平时通过new的方式创建一个对象的过程。一、反射的思想及作用    为什么需要反射,其实还是为了我们平时写代码的灵活性,假设我们现在要对一个班的同学进行排名,可以根据学习成绩来排,也可以根据年龄,体重,身高等来排序,对于不同的场景,我们的排序方式可能会不同,如果要评选三好学生,可能会根据学习成绩来排名

2020-08-30 16:41:54 287

原创 Java的输入输出流

一、输入输出流     读入一个字节序列的对象叫做输入流,写入一个字节序列的对象叫做输出流抽象类InputStream和OutputStream是Java输入输出流的基础,字节相关操作的对象都继承自这两个。     InputStream和OutputStream有两个抽象的方法,由此衍生出来的类都实现了这两个方法,分别为:abstarct int read();abstarct int write();    很多时候,我们需要处理Unicode形式的存储信息,因为各国文字的差异,Unico

2020-08-24 11:43:05 620

原创 Java对象序列化详解

一、什么是序列化和反序列化序列化:将对象的状态信息转换成可以存储或者传输的二进制格式的过程。反序列化:将二进制存储形式转换成对象的过程。二、为什么需要序列化和反序列化    对象序列化是指对于实现了Serializable接口的对象,可将它们转换为一系列字节,在需要的时候可以将它们复原,这些字节可以在网络中传输,意味着序列化可以弥补不同操作系统之间的差异,我们平时用到的RPC框架就需要将对象序列化后在传输,如果系统之间序列化出问题,将会影响系统服务的可靠性。三、序列化/反序列化1、序列化/反

2020-08-20 14:01:29 729

原创 Java读写txt文件

平时经常需要跑一些本地数据进行测试,对Java的文件操作比较陌生,这里记录下来供后边查询学习读取txt文件 public static void main(String[] args) throws IOException { String pathname = "C:\\Users\\likanghai\\Desktop\\rank.txt"; File file = new File(pathname); InputStreamReader input

2020-08-13 10:21:36 840

原创 【项目】文件的压缩与解压

项目平台Windows     VS2013    Beyond Compare4项目技术Huffman树优先级队列项目描述统计文件中每个字符出现的次数,根据优先级对列,构建Huffman树,出现次数多的编码短,出现次数少的编码常根据构建好的Huffman树,对文件进行压缩在对压缩好的文件进行解压,判断争取行。项目原理Hffman树...

2018-08-19 11:42:08 1023

原创 【C++学习笔记】容器迭代器

1、迭代器(Iterator)的介绍背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。 定义:迭代器是一种检查容器内元素并遍历元素的数据类型。迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。 迭代器(Iterator)是指针(pointer)的泛化,它允许程序员用相同的方式处理不...

2018-08-17 11:10:18 751

转载 【C++学习笔记】C++中的异常安全性

一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源;2.不允许破坏数据。 我们先通过两个反面的例子开始。1、第一个是造成资源泄漏的例子。一个类Type,内含一个互斥锁成员 Mutex mutex,以及一个成员函数void Func()。假设Func函数的实现如下所示:void Type::Func(){ Lock(&mute...

2018-08-07 18:35:49 323

原创 【C++学习笔记】类

一、类的概念在C语言中,“数据”和“函数”是分开的,为了支持“数据和函数”的关联性,C++里引入类,让所有的数据有一组“分布在各个以功能为导向的函数中”,它们处理的是共同的外部数据。类的关键字是class。class className{ //类体:由函数和变量组成};class为定义类的关键字className为类的名字{}为类的主体类中的数据称为类的属性或者类的...

2018-07-15 10:55:03 261

原创 【C++学习笔记】C++和C的混合编译

在C++中将一个函数按照C风格来编译#ifdef __cplusplusextern "C"{ //n个函数描述 int Add(int a, int b) { return a + b; } //...}#endifint main(){ Add(10 , 20);}...

2018-07-15 00:29:44 238

原创 【C++学习笔记】函数重载

1、什么是函数重载C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。int Add(int a, int b){ return a + b;}double Add(double a, double b){ return a + b;}int main()...

2018-07-15 00:07:31 258

转载 【C++学习笔记】计算函数运行时间的七种方法

目前,存在着各种计时函数,一般的处理都是先调用计时函数,记下当前时间tstart,然后处理一段程序,再调用计时函数,记下处理后的时间tend,再tend和tstart做差,就可以得到程序的执行时间,但是各种计时函数的精度不一样.下面对各种计时函数,做些简单记录.方法1,利用time()函数time()获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从C...

2018-06-12 10:35:35 10401 1

原创 【C++学习笔记】获取函数运行时间的两种方法

1.GetTickCount()GetTickCount是windows下的API函数,检索自系统启动以来经过的毫秒数,最多为49.7天。//头文件#include <windows.h>//函数原型DWORD WINAPI GetTickCount(void);//返回值: 系统启动后经过的毫秒数。测试代码:#include <iostream&...

2018-06-12 10:22:06 656

原创 【Linux学习笔记】动态库、静态库的生成

什么是动态库、静态库?静态库(.a): 程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。动态库(.so): 程序在运行的时候才去链接动态库的代码,多个程序共享使用的代码。动态链接和静态链接的区别静态链接(Static Linking): 在链接阶段,将源文件中用到的库函数与汇编生成的目标文件.o合并生成可执行文件。通常具有内存扩大,但具有...

2018-06-11 20:46:53 225

原创 【Linux学习笔记】标准IO缓冲:行缓冲、全缓冲、无缓冲

首先介绍一下UNIX里面关于标准IO的几种缓冲机制全缓冲 :全缓冲指的是系统在填满标准IO缓冲区之后才进行实际的IO操作;注意,对于驻留在磁盘上的文件来说通常是由标准IO库实施全缓冲。行缓冲 :在这种情况下,标准IO在输入和输出中遇到换行符时执行IO操作;注意,当流涉及终端的时候,通常使用的是行缓冲。无缓冲 :无缓冲指的是标准IO库不对字符进行缓冲存储;注意,标准出错流stderr通常是...

2018-06-11 01:00:55 4759 2

原创 【Linux学习笔记】文件描述符

文件描述符文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。0&1&2Linux进程默认情况下会有三个缺省打开的文件描述符,分别是标准输入0,标准输出1,标准错误2。0,1,2对应的物理设备一般是:键盘,显示器,显示器。 ...

2018-06-11 00:28:13 442

原创 【Linux学习笔记】文件相关系统调用接口

我们在C语言中学习了很多文件相关的接口,如fopen,fclose,fwrite,fread等等。并且,C会默认打开三个输入输出流u,分别是stdin,stdout,stderr。这三个流的类型都是*FILE,文件指针。接下来我们看一下文件相关的系统调用接口,看看它和C语言的文件接口有什么关系。文件相关系统调用接口open#include <sys/types.h>#...

2018-06-10 23:51:27 370

原创 【Linux学习笔记】僵尸进程、孤儿进程

僵尸进程僵尸状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程没有读到子进程 退出的返回代码时就会产生僵尸进程。僵尸进程会 以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。我们创建一个维持30s的僵尸进程#include <stdio.h>#i...

2018-06-10 16:33:17 221

原创 【Linux学习笔记】进程间的调度算法

一、先来先服务和短作业(进程)优先调度算法1.先来先服务调度算法(FCFS)先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先...

2018-06-10 00:36:40 366

转载 【Linux学习笔记】linux进程描述符task_struct详解

struct task_struct {//这个是进程的运行时状态,-1代表不可运行,0代表可运行,>0代表已停止。 volatile long state; /*flags是进程当前的状态标志,具体的如:0x00000002表示进程正在被创建;0x00000004表示进程正准备退出;0x00000040 表示此进程被fork出,但是并没有执行exec;0x0000040...

2018-06-10 00:10:06 359

原创 【C++学习笔记】引用及引用的本质

代码运行环境:Win10 32bits Vs2013 引用的概念及用法1.引用的概念引用不是新定义一个变量,而是给已存变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间, 类型&引用变量名(对象名)= 引用实体int a = 10;int &ra = a; //类型必须和引用实体是同种类型2.引用特性...

2018-06-09 23:50:47 353

原创 常见的排序算法—— 非比较排序

计数排序计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用操作步骤:统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 代码如下:基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”...

2018-06-07 16:29:49 1499

转载 【Linux学习笔记】阻塞和非阻塞、同步和异步的区别

同步和异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)同步 同步就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。 换句话说,就是由调用者主动等待这个调用的结果。异步 调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异...

2018-06-07 15:23:57 257

原创 常见的排序算法——归并排序

基本思想将待排序的元素序列分成两个长度相等的子序列,对每一个子序列排序,然后将他们合并成一个序列。合并两个子序列的过程称为二路归并。 归并排序核心步骤:分组归并 代码如下递归void _MergeData(int array[], int left, int mid, int right, int *temp){ //左闭右开区间 int l...

2018-05-29 16:50:54 445

原创 常见的排序算法——交换排序

交换排序利用交换元素的位置进行排序的方法称作交换排序。 常见的交换排序的方法:冒泡排序和快速排序。冒泡排序基本思想比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素就是是最大的数。针对所有的元素重复以上的步骤,除了最后一个。 -持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数...

2018-05-29 16:38:40 4892

原创 CSDN编辑器markdown字体、颜色与字号的设置

内嵌HTML首先我们需要明白markdown里面的标记语言可以使用标签对来实现对文本文字颜色大小信息的控制。下面给出几个实例:<font face="黑体">黑体字示例</font><font face="微软雅黑">微软雅黑示例</font><font face="STCAIYUN">华文彩云

2018-05-29 01:08:32 2685

原创 哈希之海量数据面试题

哈希切割TopK问题给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 1) 我们首先想到的是对文件进行切割,把它分成1000等份,每一份差不多100M左右。但是在切割时要注意,不能随便切割。如果我们随便进行切割,统计出每个文件中出现次数最多的IP地址,这不一定是整个文件出现次数最多的IP地址。假设,一个IP地址,在第一个文件...

2018-05-29 01:01:18 370 1

原创 常见的排序算法——选择排序

选择排序基本思想每一趟在后面 n - i 个待排序的数据元素集合中选择出关键码最小的数据元素,作为有序元素序列的第i个元素。待 到第 n - 2 趟做完,待排序元素集合中只剩下一个元素,排序结束。直接选择排序在元素集合array[i]—-array[n-1]中选择关键码最大(小)的数据元素若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)...

2018-05-28 23:46:34 502

原创 常见的排序算法——插入排序

插入排序a. 基本思想每一次将一个待排序的元素,按其排序码的大小,插入到前边以排好序的合适位置上,直到元素全部插完为止。直接插入排序当插入第 i 个元素时,前边的 i - 1 个元素已经排好序,此时用第 i 个元素和 i - 1、i - 2、…..的元素比较,找到插入位置即将第i个元素插入,原来的位置上的元素顺序后移。 代码如下:void InsertSo...

2018-05-28 23:13:37 644 1

原创 排序的基本概念(及常见的排序算法)

排序的概念排序排序就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。排序码通常数据元素有多个属性域,其中有一个属性域可用来区分元素,作为排序依据,该域即为排序码。按主排序码进行排序,排序的结果是唯一的。按照次排序码进行排序,排序的结果不是唯一的。排序算法稳定性如果在元素序列中有两个元素R[i]和R[j],他们的排序码K[i]==K[j],且在排序之前,...

2018-05-28 21:47:13 3572 1

原创 【Linux学习笔记】进程间通信之管道

在了解管道之前,我们先来了解下进程之间为什么需要通信。1、进程间通信的目的数据传输: 一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件: 一个进程需要向另一个或一组进程发送消息,通知它发什么了某种事件进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个所有陷入和异常,并能够及时知道它的状态。那么为什么进程不直接...

2018-05-27 17:56:11 243

原创 【Linux学习笔记】Linux系统下的几种文件类型

Linux系统不同于window系统,两者文件类型也有很大的差异。Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。Linux文件类型有七种:普通文件、目录、字符设备文件、块设备文件、sock...

2018-05-27 15:57:34 5512

原创 注释转换(C to C++)

在写代码之前,我们先来看一个概念,即有限转状态机(Finite-state machine, FSM)。什么是有限状态机有限状态机是一种数学模型,从字面意思理解,就是有有限个状态的机器。 我们可以想象一条传送带,上边有指示灯,比如说,这条传送带,是将产品的良品和次品分开,那么良品和次品就是产品会出现的两种状态,它只有这两种状态,要么是良品,要么是次品。这就是有限个状态。 有限状态机就表...

2018-05-27 00:05:44 194

原创 哈希之开散列

HashBucket.c#pragma once#include <assert.h>#include <stdio.h>#include <stdlib.h>#include <malloc.h>//#include "Common.h"#define size_t uns

2018-05-22 02:10:48 236

原创 哈希之闭散列(线性探测/二次探测)

HashTable.h#include <assert.h>#include <stdio.h>#include <malloc.h>#include "Common.h"//哈希表位置的状态typedef enum State{ EMPTY, //当前位置为空 EXIST, //当前位置有元素

2018-05-22 01:52:11 690

原创 浅谈搜索结构之哈希

待写

2018-05-22 01:45:08 404

原创 C语言的I/O操作(及简单的mycpy)

一、I/O的概念流就C语言而言,所有的I/O操作就是简单的从程序移进、移出字节的事情,因此这种字节流被称为流。 绝大多数的流都是完全缓冲的。“读取”和“写入”都是在一块被称为:缓冲区的内存区被来回复制数据。从内存中来回复制数据是特别快的,用于输出流的缓冲区只有被写满的时候才会被刷新到设备或文件。因为一次性把放满的缓冲区数据写入和逐片把程序产生的数据写入相比较效率高。显示器刷新方式为行...

2018-05-21 01:20:43 2984

原创 【Linux学习笔记】进程的概念

一、进程1、进程的概念程序:为了实现特定任务的一系列指令的有序合集进程: 从用户角度看:进程是程序的一次动态执行过程。从操作系统角度看: 进程是系统分配CPU,内存,时间片等系统资源的基本单位。也是系统分配资源的最小单位。每个进程都有自己独立的地址空间和运行状态。2、PCB进程是程序的一次执行过程,那操作系统就需要有相关的数据结构来保存一个进程的一系列信息,C语言就...

2018-05-18 16:43:12 264

原创 二叉搜索树(递归&非递归)

1、二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树。若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有的节点的值都大于根节点的值它的左右子树也分为二叉搜索树 此二叉树的中序遍历结果为: 0,1,2,3,4,5,6,7,8,9;2、二叉搜索树的基本操作完整源代码在此1.初始化二...

2018-05-14 21:18:52 2604

原创 堆的简单应用——TopK

海量数据top k问题100亿个数中找出最大的前K个数,我们可以遍历K次找到,但是时间复杂度就很大为 O(KN);因此,我们可以用堆来实现,只需遍历一次,思路如下:如果要找前K个最大的数,我们用小堆,每次用堆顶元素和遍历的数比,如果堆顶元素小,则让堆顶元素的值等于它,然后向下调整如果要找前K个最小的数,我们用大堆,每次用堆顶元素和遍历的数比,如果堆顶元素大,则让堆顶元素的值等于它,然后...

2018-05-14 00:47:41 3227

空空如也

空空如也

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

TA关注的人

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