自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java序列化和反序列化以及遇到的问题和解决方法

对象序列化(serialization)和反序列化(deserialization)是将对象转化为便于传输的格式进行发送和接收的两个操作。哪些东西可以是字节?图片可以是字节,文件可以是字节,一个字符串也可以是字节,嗯,宇宙间的一切事物都可以用字节表示。当然,对象也可以是字节。java的序列化就是将对象转化为字节流,以便在进程或网络之间进行传输,而在接收方,需要以相同的方式对字节流进行反序列化,...

2019-08-12 11:25:48 9616

原创 gerri push git remote: ERROR: committer email address remote: ERROR: does not match your user accoun

gerri push git remote: ERROR: committer email address remote: ERROR: does not match your user accoun原因如题,git邮箱配置错误1.查看自己 gerrit 个人信息是否配置错误,用户->setting->profile信息无误后,2.git config -l查看本地配置是否...

2019-07-19 16:49:02 2609

原创 repo sync出现错误: permission denied (publickey). fatal: 无法读取远程仓库。

repo sync出现错误: permission denied (publickey). fatal: 无法读取远程仓库。尝试有效:eval "$(ssh-agent -s)"ssh-add

2019-03-29 16:36:39 4818

原创 查找一个字符串中第一个只出现两/一次的字符

题目:查找一个字符串中第一个只出现两/一次的字符一、查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)。分析问题:方法1、O(N^2) 看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果后面出现两次该字符,那

2017-07-26 20:47:39 1558

原创 链表面试题之链表逆置、指定前k个逆置

单链表逆置我们大概很熟悉,但对于链表前k个逆置,可能不大常见,这是一道链表逆置的变种,其中变种的还有链表倒数第k个、链表k个组成一组,组内逆置,在这里我给大家分享一下我的想法。对于单链表的逆置有两种方法可以实现:(1)利用辅助指针基本思想:在遍历结点过程中,设置辅助指针,用于记录先前遍历的结点。这样依次编译的过程中只需修改其后继结点的next域即可。typedef int

2017-07-26 20:17:26 1001

原创 二叉树面试题之二叉树镜像

首先分析,互为镜像,也就是说,一个节点的左右子树互相交换位置,因此采用递归的方法较为简单,且方便理解,即镜像步骤:1)、交换根结点的左右子树节点。2)、交换左子树(以图中10为例)的左右节点。三、交换右子树(以图中6为例)的左右结点。总结上面过程,一颗树的镜像过程:先前序遍历树的每个节点,如果遍历到节点有子节点,就交换它的两个子节点,当交换完所有非叶子节点的左右子节点之后,就得到了

2017-07-26 19:06:09 459

原创 二叉树面试题之判断一棵树是否为另一棵树的子树

判断一棵树是否为另一棵树的子树题目:二叉树的结点定义如下:struct TreeNode{ int m_nValue; TreeNode* m_pLeft; TreeNode* m_pRight;};输入两棵二叉树A和B,判断树B是不是A的子结构。例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一样的,因此B就是A的

2017-07-26 13:10:57 1386

原创 链表面试题之链表相交问题

判断两个链表是否相交以及如果相交则求出交点     首先最容易想到就是分为不带环的链表相交问题和带环链表相交问题不带环链表相交在这里我提供两种种不带环链表判断相交的思路:既然两条链表相交且不带环,      思路1:那么两条链表的最后一个结点必然是同一个结点,我们就可以通过判断两条链表的最后一个结点来判断链表是否相交的问题了, 假设其中一条链表有m个结点而另一条链表有n个结点,

2017-07-25 10:08:29 1053

原创 C++创建一个类(1.只能在堆上创建; 2 只能在栈上创建; 3 不能被继承(堆上和栈上都可以创建))

1 只能在堆上创建对象(不能被继承,不能再栈上创建对象) 将类的构造函数声明为private,但是为了 创建该类的对象,则必须提供创建对象和释放对象的接口, 用static函数成员实现。 #include using namespace std; class HeapOnly { public: static HeapO

2017-07-15 21:55:25 1136

原创 判断单链表是否带环? 若带环, 求环的长度? 求环的入口点?

给定一个单链表,只给出头指针h:判断单链表是否带环? 若带环, 求环的长度? 求环的入口点?* 问题1:判断是否存在环?用快慢指针求,快指针一次两步,慢指针一次一步,如果带环的话那么两指针必定在环内有一个交点,如果快指针fast或者fast->next走到NULL的话,则说明链表不带环。//这里可以返回一个pair类型的值//因为后面求长度还需要用到这个交点pa

2017-07-15 20:59:06 797 1

原创 剑指offer--实现一个Add函数,让两数相加,不能使用+、-、*、/、++、--等四则运算符

分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在。看到的这个题目,首先我们可以分析人们是如何做十进制的加法的,比如是如何得出5+17=22这个结果的。实际上,我们可以分成三步的:第一步只做各位相加不进位,此时相加的结果是12(个位数5和7相加不要进位是2,十位数0和1相加结果是1);第二步做进位,5+

2017-07-14 23:10:00 2618 3

原创 剑指offer---复杂链表复制

剑指offer面试题---复杂链表复制分析此题:1.首先要将链表的每一个节点复制一份,连在被复制节点后面。                   2.将对应的指向关系也对应复制。                   3.分离原链表、复制链表。代码实现:struct ComplexListNode{ int _data; ComplexListNode* _next;

2017-07-13 23:25:37 739

原创 剑指offer--递归非递归合并两个有序链表

面试题:合并两个有序链表,合并之后需要变为有序对于此题,我想到的有两种解法:递归和非递归递归实现://递归Node *MergeList(Node *pHead1, Node*pHead2){ if (pHead1 == NULL) return pHead2; else if (pHead2 == NULL) return pHead1; else {

2017-07-13 23:09:26 890

转载 八大排序算法总结

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。     常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。本文将依次介绍上述八大排序算法。算法一:插入排序插入排序示意图插入排序是一种最简单直观的排序算法,它的工作原

2017-06-30 10:14:05 1882 3

原创 c语言编译过程详解

前言C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程。编写hello world C程序:// hello.c#include int main(){ printf("hello world!\n");}编译过程只需:$ gcc hello.c # 编译$ ./a.out # 执行hello wor

2017-06-29 11:11:52 1128

转载 继承,菱形继承,多态,虚继承、菱形虚拟继承

面的代码主要写了关于:(1).继承和派生的关系(2).6个默认函数的继承(拷贝,拷贝构造,赋值,析构,...)(3).普通菱形继承(4).多重虚继承(5).多态(6).虚表(7).虚菱形继承     其中涉及到了很多C++中的内容,如,, 等等#ifndef INHERIT_H_  #define INHERIT_H_  #include   #inclu

2017-04-16 21:42:02 776

原创 剑指offer--o(1)时间删除链表结点

面试题:在O(1)时间删除链表结点   最常规的想法无非是遍历这个链表,然后删除该结点,但查找的时间复杂度是o(n)显然不符合题目要求估计接触过链表的都会知道常规链表的删除方法,解题思路:       1) 删除节点i之前,先从链表的头节点开始遍历到i前面的一个节点h,再把h的next指向i的下一个节点,删除节点i,记住要把指针置为空,在这要考虑的问题有很多

2017-04-16 20:55:43 463

原创 剑指offer--调整数组顺序使奇数位于偶数前面

面试题:调整数组顺序使奇数位于偶数前面当拿到这个题目,你首先会想到的是遍历这个数组每碰到偶数时,拿出这个数字与其后的数字交换,但这样的话其时间复杂度为O(n*n)若面试官没有时间复杂度的要求,那么这样就可以了但是往往不能体现出你的能力,你还可以优化,我们可以维护两个指针,    1)

2017-04-16 20:33:26 1432

转载 HTTP长连接与短链接以及推送技术原理

HTTP长连接和短连接以及推送服务原理HTTP长连接和短连接11. HTTP协议与TCP/IP协议的关系      HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发

2017-04-04 15:33:51 5139 7

原创 shell脚本初试--至少三个数求最大、最小、平均值

至少三个数求最大、最小、平均值      需要判断 传⼊入的数字是否⾜足够,否则输出警告信息。平均值保留两位⼩小数像这类算法估计以前都接触过,有各种版本可以实现,我想跟大家分享我初学的shell脚本实现实现部分:实现结果: 我输入 6 7 8 三个数这个逻辑比较简单,希望刚接触到shell 的可以练练手

2017-03-28 11:35:07 9473

原创 shell脚本下小程序初试-进度条

相信进度条大家都不陌生,每次下载东西的或软件的时候都会有提示当前下载任务达到多少,当然可以有不同语言来实现,今天我就   用shell脚本实现进度条首先需要知道的是,进度条分为进度、显示百分比,和动态的进度演示(旋转条)一般进度条是一百为单位,所以可以用循环来实现至于动态旋转就可以用可数组来实现实现:分析:  1) lable 数组就是动态旋转部分,(就是这里不能给实现

2017-03-28 11:26:51 1038

原创 剑指offer--两个栈实现一个队列

题目:两个栈实现一个队列分析:方法一:          s1是入栈的,s2是出栈的。入队列,直接压到s1是就行了出队列,先把s1中的元素全部出栈压入到s2中,弹出s2中的栈顶元素;再把s2的所有元素全部压回s1中缺点:有大量元素要push和pop,效率不高方法二:      s1表示入队的,s2表示出队列的,保证所有元素在一个栈中  入队列:如果s

2017-03-16 21:30:36 758

原创 剑指offer--据前序和中序遍历重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析:此时不由得想起前序遍历的顺序是根--左--右#include  #include  #include  using namespace st

2017-03-16 18:55:18 780

原创 剑指offer--指定链表逆序打印

题目:输入一个链表,从尾到头打印链表每个节点的值。            首先分析这个题,如果面试官没有指定说明不允许改变链表结构,首先会想到的是将链表的头部和指针方向改变,但如果面试官说了不能改变链表结构,就得考虑别的方法,此刻你有没有想到一种结构先进后出,对没错,就是栈,如果将链表顺序遍历一遍,将链表中的元素一一PUSH进栈中,然后再将数据一个个拿出来访问,此刻,顺序就逆置了,然而还有优化

2017-03-14 22:58:20 711

转载 存储映射I/O

一个进程拥有独立并且连续虚拟地址空间,在32位体系结构中进程的地址空间是4G。不过,内核在管理进程的地址空间时是以内存区域为单位。内存区域是进程整个地址空间中一个独立的内存范围,它在内核中使用vm_area_struct数据结构来描述。每个内存区域都有自己访问权限以及操作函数,因此进程只能对有效范围的内存地址进行访问。存储映射I/O是一种基于内存区域的高级I/O操作,它将磁盘文件与进程地址空间

2017-03-14 17:29:19 806 1

原创 linux内存映射函数mmap

内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间用户空间两者之间需要大量数据传输等操作的话效率是非常高的。内存映射过程就是依据进程PCB控制块中内容找到内存单元的相应地址通过页表映射到物理内存中,是一个把普遍文件映射到用户空间的内存区域的示意图。

2017-03-14 17:16:27 849 1

原创 了解身边的超线程、双核、双cpu

一、从三者的工作原理和概念理解:   (1)超线程(HT):   超线程(Hyperthreading Technology)技术就是通过采用特殊的硬件指令,可以把两个逻辑内核模拟成两个物理芯片,在单处理器中实现线程级的并行计算,同时在相应的软硬件的支持下大幅度的提高运行效能,从而实现在单处理器上模拟双处理器的效能。其实,从实质上说,超线程是一种可以将CPU内部暂时闲置处理资源充分

2017-03-14 16:52:59 1728 5

原创 浅谈对协程的理解

首先我了解了在linux下线程是轻量级进程,那么我要告诉你,协程是一种用户态的轻量级线程。        从硬件发展来看,从最初的单核单CPU,到单核多CPU,多核多CPU,似乎已经到了极限了,但是单核CPU性能却还在不断提升。server端也在不断的发展变化。如果将程序分为IO密集型应用和CPU密集型应用,二者的server的发展如下:   IO密集型应用: 多进程->多线程->事件驱动

2017-03-14 16:41:00 1024

原创 剑指offer--判断规则二维数组是否存在一个指定数

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:从左至右递增、从上至下在递增      可以以左下角的那个元素为起点,指定个元素与其相比较,做相应移动class Solution {public: bool Find(int targe

2017-03-11 20:31:09 1217

转载 Makefile经典教程

该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,请移步陈浩大神博客:http://blog.csdn.net/haoel/article/details/2886makefile很重要      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和profession

2017-03-08 09:52:47 463

原创 vim命令集合

命令历史以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim 直接启动vimvim filename 打开vim并创建名为filename的文件文件命令打开单个文件vim file同时打开多个文件vim file1 file2 file3 ...在vim窗口中打开一个新文件

2017-03-08 09:16:55 598 2

原创 三次握手和四次挥手

TCP三次握手建立连接TCP四次挥手释放连接

2017-03-07 16:52:21 1208 1

原创 TCP首部中的URG和PSH的区别和联系

1、URG推送位紧急数据的起始点=序号;紧急数据的终止点=序号+紧急指针;(综上,紧急指针就是记录紧急数据的字节数,紧急指针永远为正数)1)在紧急数据后面的数据为普通数据,需要按序缓存2)窗口为0也可以发送紧急数据3)紧急数据都处理完成后,tcp就告诉进程恢复到正常操作例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消程序的运行。

2017-03-06 22:11:19 1162

原创 路由表的建立和形成

以下内容可翻阅第六版谢希仁版的《计算机网路》和《路由与交换技术》书查看具体协议信息首先路由表有以下几项形成•网络号•下一跳地址 •接口 •Metric:跳数、延迟、费用例如:路由表项†特定主机路由 „前缀长度为32比特的路由表项。†网络前缀路由 „前缀长度为1~31比特的路由表项。†缺省路由 „前缀长度为0比特的路由表项。„减少路由表所占用的空间

2017-03-06 21:43:18 22949 1

原创 NAT技术

一、概述     NAT技术,又名为网络地址转换。该技术产生的原因:IPv4地址危机,在Internet上应用广泛的IPv4技术,由于其先天性不足,在九十年代初期时,已经预计到了IPv4地址不足,从而开始开发IPv6技术。但开发IPv6需要足够的时间(需要换较多的网络设备),为了延长IPv4技术的使用时间,产生了NAT技术。 二、工作原理    修改IP数据包中的源IP地址,或目的

2017-03-06 20:16:34 1199

原创 CRC校验

奇偶校验码(PCC)只能校验一位错误,循环冗余校验码(CRC)的检错能力更强,可以检出多位错误1. CRC校验原理    CRC校验原理看起来比较复杂,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这

2017-03-04 23:02:11 1236

原创 创建守护进程为什么fork两次

守护进程(daemon进程)是后台守护进程,有时候也叫精灵进程(agent).linux 下server都是daemon进程。其特点是:  1)其父进程是一号进程,通常以d结尾  2)在后台运行,独立于终端,周期性的以某种任务或等待处理某些发生的事  3)自成进程组,自成会话,不受登陆注销等影响  4)一般是孤儿进程  daemon函数存在的原因是因为控制终端由于某些原

2017-03-04 22:06:24 2115 1

原创 可重入函数与线程安全的区别和联系

•概念重入:即重复调用,函数被不同的执行流调用,有可能会出现第一次调用还没返回时就再次进入该函数开始下一次的调用。可重入:当程序被多个线程反复执行,不会对其结果产生影响(产生的结果正确)。     如果一个函数只访问自己的局部变量或参数,称为可重入函数。不可重入:当程序被多个线程反复调用,产生的结果出错。当函数访问一个全局的变量或者参数时,有可能因为重入而造成混乱,像这样的函数

2017-02-24 11:36:56 660

原创 生产者—消费者模型

首先介绍下单个生产者和消费者模型首先创建一个环,环分为无数格子,其规则是:    消费者永远追不上生产者    生产者永远追不上消费者,更别说套圈  形成两类角色,一个环形buf 假设有n个格子    :生产者的范围是[n,0];                              消费者的范围是[0,n];首先编辑Makefilering.c

2017-02-22 13:31:55 381

原创 Centos 下安装与设置Vim编辑器

我们在安装完Centos后,它默认的是安装了VI编辑器,VIM是没有安装的,所以我们在使用vim test.txt时会提示: vim command not found 。。。 这就是说明我们的Linux环境没有安装vim编辑器,下面我们来说一下如何安装这个编辑器:vim编辑器需要安装三个包:   vim-enhanced-7.0.109-7.el5   vim-minimal-7.0

2017-02-18 21:12:30 580

空空如也

空空如也

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

TA关注的人

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