自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 分布式事务总结

分布式事务总结

2023-03-01 12:15:23 588 1

原创 Spring Cloud之容错组件Hystrix

1. Hystrix介绍1.1 初识HystrixHystrix是Netflix开源的容错框架,这是Netflix对其的简短介绍:Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party lib...

2019-08-01 16:56:20 301

原创 消息中间件入门解析

消息队列属于大型网站系统中间件的重要组件,主要解决了应用耦合、异步消息、流量削峰等问题,对于网站实现高性能、可伸缩的架构有很大的帮助。1. 常用的消息队列ActiveMQApache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可运行。RabbitMQRabb...

2019-04-02 16:20:37 269

原创 RabbitMQ集群架构搭建与高可用性实现

当你的RabbitMQ服务器遇到诸如内存崩溃或者断电等极端情况时,单节点是不能应对这些故障的。因此需要多节点集群部署来弹性应对故障。另外可以通过多节点部署,来扩展消息通信的吞吐量。1. 集群搭建首先,我们不用关心RabbitMQ的集群策略、节点类型等问题,可以先手动把RabbitMQ的集群搭建好,再一步步地了解其原理。1.1 准备两个节点搭建的详细过程就不再叙述,具体可参考Rabbi...

2019-04-02 16:19:36 354

原创 RabbitMQ镜像队列原理分析

对于RabbitMQ的节点来说,有单节点模式和集群模式两种,其中集群模式又分为普通集群模式和镜像队列集群模式,在《RabbitMQ集群架构搭建与高可用性实现》文中,介绍了RabbitMQ的集群创建步骤方法。而镜像队列集群模式的搭建步骤和普通集群模式是基本相同的,唯一不同的是,镜像队列集群模式,多了一步配置policy的步骤。本文主要介绍镜像队列的原理及实现。1. 创建镜像队列模式注意,到...

2019-04-02 16:17:17 2568 5

原创 RabbitMQ实体关系介绍

首先认识以下RabbitMQ中的实体:1. 发布者/生产者(producer)发布消息的应用程序。2. 交换机(exchange)连接发布者和队列的中间组件。接收生产者发送的消息,并根据Bingding规则将消息发送到队列中,ExchangeType决定了Exchange路由消息的行为。3. 绑定(Binding)是一种方式,表明Exchange和Queue是如何联系的。生产者在将消...

2019-04-02 16:16:32 323

原创 基于消息中间件RabbitMQ实现简单的RPC服务

RPC(Remote Procedure Call,远程过程调用),是一种计算机通信协议。对于两台机器而言,就是A服务器上的应用程序调用B服务器上的函数或者方法,由于不在同一个内存空间或机器上运行,因此需要借助于网络通信。1. RPC框架我们首先通过一张图理解RPC的工作流程:因此,实现一个最简单的RPC服务,只需要Client、Server和Network,本文就是利用消息中间件R...

2019-04-02 16:13:58 422

原创 Intellij Idea创建基于Maven的SpringMVC+MyBatis项目

前言:SpringMVC是一款轻量级的Web开发框架,非常有利于新手上手,对于持久化层,目前可选择的是Hibernate和Mybatis,而Mybatis的学习曲线较为平整,因此本文介绍了利用Intellij Idea创建基于Maven的SpringMVC/MyBatis的项目,该项目实现了简单的用户插入和导出,其实什么项目无所谓,主要目的还是供大家掌握MyBatis和SpringMVC的实现过程

2017-06-09 18:11:28 3319 7

原创 Resin4和Tomcat8容器下部署基于Maven的SpringMVC项目

Resin和Tomcat都是目前极其出色的Web容器,本文介绍了Linux环境下使用Resin和Tomcat部署SpringMVC+Maven项目。一、Resin4部署Maven项目1. 下载Resin官网下载并解压到你的Linux机器的某个目录:tar -zxvf resin-4.0.52.tar.gz2. 修改配置文件cd XX/resin-4

2017-06-09 18:07:22 1349 1

原创 多客户端通信的Java套接字程序

这次设计了一个支持多客户端的通信小程序,实现服务端和客户端的实时通信,主要思想是利用Java套接字技术和线程池。服务端的程序如下:import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util

2016-06-07 16:05:00 993

原创 Intellij Idea 14使用Maven创建SpringMVC项目

LZ平时在学校和公司用习惯了Intellij写Java,一开始学习Java的时候用的也是Eclipse,后来接触到了这款IDE,顿时爱不释手。强大的代码补全能力,美观的UI设计,对各种项目的快速支持能力,用在其中简直难以自拔啊!安利了这么多,赶紧进入正题吧,这篇博客的科普性更强,目的是帮助Web开发的小白能快速建立自己的第一个项目。        从建项目开始吧!        首

2016-01-27 22:35:49 8348 6

原创 删除链表中的重复节点

这里的删除是只要有重复就要全部删除,如1->2->2->3,删除之后就是1->3.#include#includestruct ListNode { int val; struct ListNode *next;};struct ListNode* deleteDuplicates(struct ListNode* head) { if(NULL==he

2015-06-28 16:15:06 1107

原创 判断是否是有效的IP地址

#include#includebool isValidIp(char *s){ int len=strlen(s); int i=0; if(len<7) return false; for(i=0;i<len;i++) { if(('0'<=s[i]&&s[i]<='9')||(s[i]=='.')) continue; else return fal

2015-06-24 20:00:26 2252

原创 用链表实现两个数相加

说明:使用链表实现两个数的和,数的高位存储在链表的头部,最后输出结果。注:使用了翻转链表的功能。#include#includestruct Node{ int value; Node *next;};Node *reverseList(Node *head){ Node *pCur=head; Node *pPre=NULL; Node *rHead=NULL; wh

2015-06-16 19:43:22 791

原创 插入排序/希尔排序/快速排序C语言实现

#include#include#includevoid swap(int *a,int *b){ int tmp=*a; *a=*b; *b=tmp;}void insertSort(int *a,int n){ int tmp,i,j; for(i=1;i<n;i++) { tmp=a[i]; for(j=i;j>0&&tmp<a[j-1];j--)//f

2015-06-16 16:28:03 963

原创 leetcode第53题-Maximum Subarray

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [−2,1,−3,4,−1,2,1,−5,4],Maximum Subarray

2015-06-15 19:35:31 627

原创 leetcode第38题-Count and Say

The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...1 is read off as "one 1" or 11.11 is read off as "two 1s" or 21.21 is read off as 

2015-06-14 10:51:27 770

原创 leetcode第137题-Single Number II

#include#includeint singleNumber(int* nums, int numsSize) { int count[32]={0}; int i,j,number=0; for(i=0;i<numsSize;i++) { for(j=0;j<32;j++) count[j]+=((nums[i]&(1<<j))!=0); } for(i=0;i

2015-06-04 15:10:29 813 1

原创 C语言 全排列

#include#include#includevoid swap(int *a,int *b){ int tmp; tmp=*a; *a=*b; *b=tmp;}void permutation(int nums[],int i,int n){ int j=0; if(i==n) { for(j=0;j<n;j++) printf("%d ",nums[

2015-06-03 16:17:37 765

原创 leetcode第136题-Single Number

题目要求:给出一个数组,只有一个数字出现一次,其他的都出现两次,找出那出现一次的数字,要求用线性的时间解出题目!分析:因为题目要求的是用线性时间,所以类似于那种暴力解决的方法会超时,如下面这种:int singleNumber2(int *nums,int n){ int i,j; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(nu

2015-06-02 16:07:34 658

原创 二叉树的创建与遍历(C语言实现)

#include#includetypedef struct TreeNode//二叉树节点声明{ int value; TreeNode* left; TreeNode* right;}*PtrNode;void CreatTree(PtrNode *root)//先序建立一个树{ int tmp; scanf("%d",&tmp); if(tmp==-1) *r

2015-05-26 20:46:49 2599 1

原创 顺时针打印矩阵(C语言代码)

#include#includevoid printMatrix(int **matrix,int columns,int rows,int start){ int x=columns-start-1; int y=rows-start-1; int i; for(i=start;i<=x;i++)//先打印一行 printf("%d ",matrix[start][i]);

2015-05-26 10:27:31 4150

原创 反转链表-C语言实现

题目要求:在O(n)的时间内反转链表,并返回反转后链表的头指针。分析:求解链表问题首先一定要考虑非空问题,而且要注意终止的位置。                                                如图所示,反转的时候定义三个节点,pCur代表当前节点、pNext代表指向的下一个节点、pPre代表前一个节点。有了这三个节点就可以从前往后遍历,而且保证链表不会断

2015-05-19 14:34:37 1765

原创 调整数组使奇数位于偶数前面

如果考虑暴力解决的话,就每次从前往后扫面,遇到偶数就放在最后,这样时间复杂度就是O(n*n),对于这种问题明显过高了,我们考虑扫描一遍,用两个指针,一个从前往后,另一个从后往前,碰到前偶后奇的时候就交换,这样算法复杂度只有O(n)。#include#includevoid reset(int a[],int n){ int i=0,j=n-1,tmp=0; while(i<j) {

2015-05-05 20:03:55 572

原创 查看两个int数的二进制有几位不同

题目:查看两个int(32位)数的二进制有几位不同。    分析:要理解该题目的意思,就要明白C语言中关于位的一些操作符。    1)“&",按位与操作符,从低位到高位对两个数的每位进行与操作,如1001&1101=1001,都为1则取1;    2)"|",按位或操作符,有一个是1就取1;    3)"^",异或,不同则取1;    4)"~",非操作符,用来对一个二进制数按

2015-04-25 14:39:34 1297

原创 leetcode第203题-Remove Linked List Elements

题目要求:从一个链表中删除指定的元素。分析:首先要考虑链表的非空问题,我想这应该是判断链表和数组问题最首先要考虑处理的问题。其次是如果前几个元素都是与指定元素相同,也要做一次处理,使head指向(在非空的情况下)与指定元素不相等的第一个元素。注意:在这里我碰到了一个很可笑的问题,就是while里面循环的判断条件,应该让head!=NULL在前面,这样就能保证head->val的值的问题,一直在

2015-04-24 10:14:53 793

原创 leetcode第202题-Happy Number

说实话,如果不看别人的解答的话,这道题我也是没有思路,不知道该循环几次,也不知道循环的终止条件,后来才知道,【2-6】这个范围内的数字都不是happy number所以就有了终止条件,n>6就是终止条件,当n跳进这个范围内的时候就终止循环,最后就能判断是否是happy number了#include#includebool isHappy(int n) { while(n>6)

2015-04-23 16:09:03 912

原创 leetcode第88题-Merge Sorted Array

题目的意思:合并两个有序的数组到第一个数组中,使合并之后的数组仍然有序,且假设第一个数组有足够的空间。解题思路:一开始遇到这个题目,我也是不顾一切的从头开始遍历,结果很麻烦,总是有一两个位置走不对,数组并不像链表那样插入一个节点这么简单,我们要解决的就是插入节点的位置问题。所幸,上网查了一下其他人的做法,突然想到了可以从后往前遍历,因为每个数组都是有序的,比较两个数组的最后一个位置的元素大小就

2015-04-22 15:44:17 1061

原创 leetcode第83题-Remove Duplicates from Sorted List

这道题与实现数组中的删除重复元素类似。我们来看一下具体的过程,首先要判断是否为空(在这个上面吃了大苦头),删除下一个相同的元素的时候要定义一个tmp元素,再free掉即可。#include#includestruct ListNode{ int val; ListNode *next;};ListNode *deleteDuplicates(ListNode *head

2015-04-22 09:45:44 928

原创 leetcode第70题-Climbing Stairsd

题目的意思是有n个台阶,每次只能上1或2个台阶,求出总共有几种上台阶的方法。分析:因为每次都只能+1或+2,最后的每一个n就是由1或2的组合组成。但是换一种思路, 我们对比一些斐波那契数列,1、2、3、5、8、、、、,即f(n)=f(n-1)+f(n-2)。如果第一步走了1个台阶,剩下的组合是f(n-1),如果第一步走2个台阶,则剩下的组合f(n-2),从而得到递推式f(n)=f(n-1)+f

2015-04-21 19:14:24 733

原创 leetcode第26题-Remove Duplicates from Sorted Array

本题也属于easy模式,题意是说去掉一个有序数组中的重复部分,而且不需要额外的开销,只能在初始数组中做文章。这种题目就有一种固定的套路,就是使用两个指标,一个向前走,一个断后,我定义的i就是取到数组中的每一个数,pos是去掉重复之后的位置。最后多说一句,一定要注意判断原数组是否为空啊,粗心马虎真的不可取,谨记!#include#includeint removeDuplicates(int

2015-04-21 15:55:16 771

原创 leetcode第27题-Remove Element

#include#includeint removeElement(int A[], int n, int elem) { if(n==0) return 0; int len=n; for(int i=0,pos=0;i<n;i++) { if(A[i]==elem) len--; else A[pos++]=A[i]; } return len;

2015-04-20 16:56:25 704

原创 leetcode第21题-Merge Two Sorted Lists

本题目是意思是把两个有序的链表合成一个有序的链表,考察了归并算法和链表的操作。代码也相对比较简单,简单说一下归并函数里三个指针的作用,sum是返回的第一个指针,cur是所要返回的链表里走到的位置,put是对于取到的l1或l2里的某一个指针节点。全部的可运行代码如下:#include#include#includestruct ListNode{ int value; ListNod

2015-04-16 17:09:27 763

原创 打印1到最大的n位数

题目:输入数字n,按顺序打印从1到最大的n位十进制数,比如输入3,就打印从1到999.    分析:首先不可能定义int型的数,当输入的n稍微大一点就溢出了,所以一般要考虑用字符串模拟数字的解法。我们一共用了三个函数,第一个函数print用来打印某一个数字,Increment用来自增,但是要加上防溢出的机制,printMaxDigit是实现函数。总的代码如下:#include#include

2015-04-14 18:50:04 568

原创 leetcode第19题-Remove Nth Node From End of List

本题比较简单,主要考察了单链表的创建与删除。    但是有一个问题需要着重的考虑,如何快速定位链表的倒数第n个节点。这就需要两个辅助节点,一个节点先走到正数第n个位置,然后两个辅助节点一块往后走,最后后面的节点的位置就是我们需要的倒数第n个节点。#include#includestruct ListNode//定义节点{ int value; struct ListNode *ne

2015-04-12 21:15:53 632

原创 leetcode第168题-Excel Sheet Column Title

本题目与前面的把序列字母转换为数字的题目正好相反,是把数字转化为对应的序列字母。首先是步骤:根据逐步求商先确定字母有多少个,再动态申请空间避免内存浪费*(s+size-i)就对应于s[size-i],从后往前逐步的给每个字母赋值即可。#include#include#includechar *convertToTitle(int n) { char *s; int fac=

2015-03-30 22:07:54 717

原创 leetcode第171题-Excel Sheet Column Number

这道题是把字符串类型的类似于表格的字母对应到数字,题目意思很简单,我一开始还很把每个字母映射到数字,后来看到别人用这个方法计算每个字母的值s[i]-'A',这么简单的方法不用简直是可惜。int titleToNumber(char *s) { int sum=0,i; int len=strlen(s); for(i=0;i<len;i++) sum=sum*26+(s[i]-'A

2015-03-30 14:20:40 775

原创 leetcode第12题-Integer to Roman

这是数字转换的第一道题,要求是把阿拉伯数字转换为罗马数字,基本的思想与罗马数字转换为阿拉伯数字差不多,就是提取几个关键的数字作为比较即可。#include#include#includechar *link(char *s1,char *s2){ int len1=strlen(s1); int len2=strlen(s2); for(int i=len1;i<len1+len2

2015-03-30 14:15:00 562

原创 leetcode第9题-Palindrom Number

这是leetcode的第九题,相对来说比较简单,目的很简单,就是判断一个int型的数是不是回文数。但是有几点需要考虑:负数应该没有回文数,要加判断!要注意额外的空间申请问题。判断是否是回文数势必要对一个数进行反转,反转的时候就要考虑溢出的问题。实现的代码如下:#includebool isPalindrom(int x){ if(x<0) return false; el

2015-03-28 18:39:16 1117

原创 leetcode第13题-Roman to Integer

这道题是把罗马数字转换为阿拉伯数字,转换的方法是:首先把每一个关键字母映射为阿拉伯数字,即I是1、V是5、X是10、L是50、C是100、D是500、M是1000.然后每一位的阿拉伯数字与其后面的(假如有的话)比较,如果不小于,则加上当前的数字,如果小于后面的数字,则加上两者的差,代码如下:#include#include#includeint romanToInt(char *s){

2015-03-28 09:43:21 773 1

U盘管理系统(使用socket通信机制)

本系统是基于socket通信机制的移动存储介质管理系统,有客户端和服务端,客户端只要一使用U盘就能发消息给服务端。

2014-12-14

ios通讯录个人简历

ios通讯录个人简历

2014-11-12

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

TA关注的人

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