自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql基础知识

一、mysql 语句规范二、mysql 常用命令(1)show warnings; 查看上一步操作产生的警告信息(2)排序:order by 默认从低到高 order by 列名 DESC 从高到低 且只能放在where查询语句后面(3)分页:实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT <M> OFFSET <N>子句实现 limit 3 off...

2024-02-28 15:12:10 928 1

原创 Ordering类-greatestOf

Ordeing是Guava类库提供的一个强大的比较器工具,可以构造复杂的comparator,然后用在容器的比较、排序等操作中。其本质上来说是一个特殊的Comparator实例。1、greatestOf greatestOf(Iterable iterable, int k):返回指定的第k个可迭代的最大的元素,按照这个从最大到最小的顺序。是不稳定的。还是先看一下函数的使用:...

2019-04-04 18:53:03 429

原创 collect.Lists类

1、reverse 反转Lists.reverse(Arrays.asList(1, 2, 3)) 结果是:3,2,1那看下面的源码发现:reverse方法方法并不是真的把list reverse一下, public ImmutableList.Builder<E> addAll(Iterable<? extends E> elements) {...

2019-03-31 17:15:42 582

原创 Joiner类&Stopwatch类

1.Joiner类将字符串数组按指定分隔符连接起来,或字符串串按指定索引开始使用指定分隔符连接起来public final String join(Iterator<?> parts) { return this.appendTo((StringBuilder)(new StringBuilder()), (Iterator)parts).toString();}...

2019-03-24 17:45:37 319

原创 HTTP请求和应答

1、请求方法:    GET:是请求方法,表示客户端以只读的方式来申请资源。不对服务器产生任何其他影响。    POST:客户端向服务器提交数据的方法,这种方法会影响服务器:服务器可能根据收到的数据动态创建新的资源,也可能更新原有的资源 GET http://www.baidu.com/index.html HTTP/1.0 //以只读的方式申请资源User-Agent:wge...

2018-09-04 16:00:43 694

原创 模式之单例模式

 单例模式:要求一个类有且只有一个实例(对象) 那首先先说一下访问限定符:public:    可以在类中(本类、子类、其他类)、类外访问protected:    可以在本类、以及子类中访问    private:         只可以在本类类中访问那么我的理解是:如果只能有一个对象,那么肯定与构造函数有关,所有对象的初始化都要经过构造函数,那么对构造函数的访问设定权限控制...

2018-08-09 16:24:11 215

原创 函数调用堆栈(2)

在上一篇函数调用堆栈(1)中,我们知道了函数调用堆栈的大致过程,我们先来回顾一下:int sum(int a,int b){ int tmp=0; tmp=a+b; return tmp;}int main(){ int a=10; int b=20; int ret=0; ret=sum(a,b); prin...

2018-08-09 13:24:13 240

原创 C++四种强制类型转换

四种强制类型转换:static_cast                        const_cast                        dynamic_cast                    reinterpret_cast1、static_cast  完成编译器认可的隐式类型转换例如: int a=10; double b=static_...

2018-08-09 12:09:09 217

原创 实现一个排序算法(要求通用、能控制排序方式、函数对象可以被绑定或取反)

 下面是以冒泡排序算法为例:#include&lt;iostream&gt;#include&lt;vector&gt;#include&lt;list&gt;#include&lt;functional&gt;#include&lt;algorithm&gt;using namespace std;template&lt;typename T&gt;class Greate...

2018-08-04 21:31:27 444 2

原创 map代码示例详解

 map是{键,值}对组成的集合:以下代码示例map 的插入方法和查找:#include&lt;iostream&gt;#include&lt;map&gt;using namespace std;//map 是{键(key),值}对组成的集合class Man{public: Man(string name="",int id=0):_name(name),_id(id)...

2018-08-04 20:53:09 1576

原创 MySQL数据库中的事物

Mysql数据库的事务:事务就是一组原子性的SQL查询,是一个独立的执行单元。事务内的语句,要么全部执行成功,要么全部执行失败。1、事务的标准特征一个运行良好的事务处理系统,必须具备原子性、一致性、隔离性、持久性。原子性:一个事务必须被视为一个不可分割的最小工作单元,这个事务的所有操作要么全部提交成功,要么全部失败回滚。一致性:数据库总是从一个一致性的状态转换到另外一个一致性状...

2018-08-04 00:02:22 274

原创 C++类中的6个默认函数

C++中的6个默认函数分别是:1、构造函数2、拷贝构造函数3、析构函数4、赋值运算符重载函数5、取地址操作运算符的重载函数6、带有const的取地址运算符重载函数系统给出的函数:1.公用的2.内联的对于这6个默认函数,我们分别看一下:1、构造函数(专门用于对象的初始化)  构造函数主要做两个工作: 1.分配对象内存空间     2.调用对象的构造函数...

2018-08-03 23:56:10 327

原创 链表面试题集

1、链表的反转     注意:1、输入的链表头指针为NULL或者整个链表只有一个结点时                 2、反转后链表会不会断裂                 3、返回的反转之后的头节点是否为原始链表的尾节点   Code:          Node *Reverse(Pnode node){ Node* ReverHead=NULL; N...

2018-07-27 15:52:08 196

原创 二分查找

二分查找的思想:选取中间的值作为比较关键字,减少查找序列的长度,采用分而治之的思想,但必须是在数据有序的情况下使用二分查找二分查找过程:取中间的值作为比较关键字,如果中间的arr[mid]==key,就返回mid,如果大于key,就在数据的左边区间查找,否则在右边区间查找int find(int *arr,int n,int key){ int pos=-1; if(a...

2018-07-27 09:17:14 217

原创 C语言复习1---逻辑运算符

1、设x,y,z ,t  均为int 型变量,执行以下语句后,t的值为: int  main(){   int x,y,z ;   x=y=z=1;   int t=++x||++y&amp;&amp;++z;   cout&lt;&lt;x&lt;&lt;y&lt;&lt;z&lt;&lt;t&lt;&lt;endl;}在VS运行后,结果如图所示: 如果把   int t=++x||++y&am...

2018-07-15 22:06:11 771

原创 红黑树的插入过程(图解)

红黑树是一种自平衡的二叉查找树它具有以下5个性质:1、节点颜色必须是红色或者黑色2、根节点是黑色3、每个叶子节点(NIL节点、空节点)是黑色的4、每个红色节点的两个子节点都是黑色5、从任一节点到每个叶子的所有路径都包含数目相同的黑色节点上图就是一颗红黑树,所有的空节点都指向最后这个黑色节点,称它为哨兵节点,从根节点沿任一路径出发到达哨兵节点,路径上的黑色节点总数是相同的。了解完红黑树的基本性质,我...

2018-07-15 21:05:25 17348 4

原创 C++的new和delete

一、new和delete1、在C++中堆内存的分配和释放是通过new和delete 来操作的,他们和C语言的malloc和free有什么区别呢?new的底层也是通过malloc来开辟内存的,new比malloc 多一项功能,就是开辟完内存,还可以进行初始化操作,如:int* p=new int(10);上面是new的基本操作,10代表堆上开辟的整型内存的初始值,如果是自定义类类型的话,如下:Tes...

2018-06-21 21:13:12 337

原创 指针和数组的区别

1、大小不同,     指针在32位平台4字节,在64位平台8字节,     数组为:   sizeof(arr)/sizeof(arr[0])2、访问权限不同     数组名永远指向数组的开头元素,不能移动,指针p的值可以发生改变     arr++  ;  //error     p++;     //correct3、访问方式不同      数组和指针在很多情况下可以互换,例如  :   a...

2018-05-29 21:53:12 342

原创 树-后序遍历(3种解法)

树:                                                      后序遍历:左-右-根   CEFDBHGA1、递归typedef char ElemType;树的数据结构:typedef struct BtNode{ BtNode *leftchild; BtNode *rightchild; ElemType data;}BtNode,...

2018-05-28 21:30:24 7081 1

原创 TCP三次握手和四次挥手

吃撒v

2018-05-16 19:00:21 241

原创 斐波纳契数列--递归,循环,消除递归重复次数

斐波那契的定义如下:f(n)=    0                        n=0           1                        n=1           f(n-1)+f(n-2)      n&gt;1解法1:循环  long long fun(unsigned n){ int ar[2]={1,1}; if(n&lt;2) return ar...

2018-05-15 21:27:08 565

原创 Linux常用命令

Linux常用命令:1、windows系统口令配置文件是:  \windows\system32\config\SAM2、查看本系统支持shell类型的配置文件是:/etc/shells3、bash环境中挂起当前进程的方式是 ctrl+z4、停止程序: ctrl+c5、发送一个exit 信号: ctrl+D6、Linux 的fsync : 同步文件的修改内容(脏页),还会同步文件的描述信息(met...

2018-04-13 16:32:07 224

原创 快速排序及其优化(C++)

快速排序:是对冒泡排序思想的一种改进基本思想:分治法。选择一个基准数,比它小的数据放到它的左边,大的放到右边。以基准来切分数组,对切分数组独立排序,直到数据不能再分 (只剩一个数字)。 适用场景:无序且数据量较大                                                          快排大致流程图1、普通快排的最坏情况代码如下:int partition...

2018-04-10 22:07:41 1901

原创 fork源码剖析

fork是复制进程,那么首先要清楚进程是什么? 进程是一个正在运行的程序,是资源分配的最小单位,系统管理进程是依靠对进程控制块(PCB)的管理完成的,每个进程的产生分两步,一是:分配PCB,二是准备进程实体,如分配内存空间等。fork() 创建进程,1、fork()调用一次,返回2次,子进程的返回值是0,父进程的返回值是新子进程的进程ID。2、文件共享 在fork之前父进程打开的文

2018-01-14 22:37:09 4176

原创 I/O复用的系统调用select、poll、epoll

多进程、 多线程、 进程池、 线程池每一个执行序列在同一时刻只能处理一个socket(监听、 链接)。 以线程池为例: 如果创建N个线程, 同一时刻只能处理一个N的客户连接。I/O复用: 在一个进程或者一个线程中, 同时监听多个socket。 当有socket上有事件发生时, 程序才会接受数据。    也就是服务器并不会阻塞在recv,当客户端发送数

2017-11-23 15:41:47 431

原创 页式内存管理和写时拷贝技术

基本的内存管理方法:固定加载地址的内存管理、固定分区的内存管理、非固定分 区的内存管理、交换内存管理 这几种内存管理方式: 1、固态分区的形式浪费内部的空间,造成内部碎片。有大的空间,小的进程只能在队列中等待。 2、非固态分区可以解决内部碎片,但是不利于程序增长。 3、交换内存管理是最灵活的,解决了程序所需空间增长而无法运行的问题。 随着程序在内存和磁盘之间的交换,内存

2017-11-13 19:04:25 760

原创 网络通讯TCP和UDP的编程流程

我们知道我们的电脑是小端,小端指什么呢?小端就是内存主机字节序和网络字节序:

2017-11-07 16:35:46 1436

原创 C和C++的区别(一)

1、带有默认值的函数  形参默认值从右向左看#includeint sum(int a,int b=20);int main(){ int a=10; int b=20; sum(a,b); return 0;}int sum(){ int temp; temp=a+b;}

2017-11-07 14:33:15 487

原创 深入编译链接和运行

虚拟内存

2017-11-04 22:01:03 447 1

原创 进程间通讯之总结篇

我们再来回顾一下进程间通讯是什么吧?进程间通讯:       每个进程都有自己的用户地址空间,一个进程的quan

2017-11-03 18:05:34 226

原创 进程间通讯—共享内存

共享内存,额从名字上来看,就是我能用的,你也能用呗。共享内存就是允许两个不相关的进程访问同一个逻辑内存。特点:共享内存是最快的一种IPC,开辟内存在各个进程都有指针直接指向开辟内存区域,访问时当做本进程中的一个内存。如图:1:    int shmget(key_t key,size,int shmflg)

2017-11-03 12:57:18 309

原创 进程间通讯—消息队列

消息队列:   消息:由数据  && 类型 组成   队列:学过数据结构我们知道,队列的特点是先进先出。   消息队列:是种临时存储消息的队列,完成进程间数据传送,可以按照队列的特点和消息的类型优先传送数据。   特点:(1)与信号量相比,都以内核对象来确保多进程访问同一个消息队列,信号量控制进程间同步,而消息队列发送数据。(2)与管道相比,管道发送的数据没有类型,

2017-10-30 14:08:37 383

原创 函数调用堆栈(1)

函数调用:我们先来看看底下的这一段代码:int sum(int a,int b){ int tmp=0; tmp=a+b; return tmp;}int main(){ int a=10; int b=20; int ret=0; ret=sum(a,b); printf("%d\n",ret); r

2017-10-28 20:38:24 1046

原创 进程间通讯——信号量

信号量:我们先不要把信号和信号量混在一起,信号是系统预先定义好的一些特定的事件。                而信号量是对于一个资源能被几个进程同时访问的计数器。举个生活中的例子便于理解这个计数器:就好比一个停车场,门口会有个停车计时系统,进程就好比车子,假设停车场的容量只有100辆车,那我们把这个容量当成可以占用的资源,停一辆车,资源就会被占用,计数器就减1。所以如果停车场已经

2017-10-25 15:21:18 341

原创 进程间通讯—管道

进程间通讯:       每个进程都有自己的用户地址空间,一个进程的全局变量在另一个进程中是看不到的,如果两个进程想要交换信息,就需要通过内核,在内核中开辟一块缓存区,把进程1里的数据拷到内核,进程2从内核读走。内核提供的这种机制就是进程间通讯。      本质:让不同的进程访问同一块系统资源。          1、进程间通讯机制——管道              从

2017-10-20 13:37:55 236

原创 KMP算法

如果我们有两个字符串,分别是S和P,要找出P在S中的位置,该怎么查找呢? 这种匹配方式成为暴力匹配,BF算法,当 S[i]==P[j] 匹配成功,i++,j++ 例如遇到这样的两个字符串:                              代码如下:#include#include#includeint BF(const char *str,char *sub)

2017-10-08 21:12:18 368

原创 Fork函数

在学习fork 函数的时候觉得特别有意思,就写下来和大家分享。 1、创建新进程:pid_t fork(void) 获得ID号: pid ——–pid_t getpid();   ppid——–pid_t getppid(); fork 函数调用一次,返回2次(返回2个值) (就像女人结一次婚就可能会得到丈夫

2017-09-21 20:03:58 1837

原创 循环链表

循环链表:循环链表的尾结点指向的是头节点的地址,如图:那么我们需要注意的是:与单链表的不同,单链表的结点最后一个节点指向的是NULL;基本的插入,删除,毁坏,清除函数只是在遍历的时候不一样。    如果只是遍历链表,那么循环代码  for(CNode *p=clist;p->next!=clist;p=p->next);    如果只是遍历链表中的数据,那么循环代码   for(CNode *p

2017-09-18 22:20:19 648

原创 单链表的插入,删除,查找,清除,毁坏,逆置函数

#includestdio.h>#includeassert.h>#includestdlib.h>typedef struct Node{ int data; struct Node* next;}Node,*List;void initlist(List plist){ assert(plist!=NULL); if(plist==NULL)

2017-09-09 13:59:41 634

原创 静态库和动态库(共享库)

库:从本质上来说是一种可执行代码的二进制文件,可以被载入内存中执行。                           库分为:静态库和动态库(共享库)    我们先看一下.C和.Cpp文件如何变成可执行文件的:      1.静态库和动态库的区别:                 静态库          动态库在windows下命名          .lib       

2017-08-25 13:35:21 394

空空如也

空空如也

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

TA关注的人

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