自定义博客皮肤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)
  • 收藏
  • 关注

转载 Kafka 原理

消息队列内部实现原理两种消息传输方式Kafkakafka 简介kafka 集群角色Kafka 工作流程分析Kafka 生产过程分析写入方式分区(partition)副本(replication)写入数据Broker 保存消息存储方式存储策略ZooKeeper 存储结构Kafka 消费过程分析高级 API低级 API消费者组消费方式...

2019-07-22 11:00:00 191

转载 这可能是最简单易懂的 ZooKeeper 笔记

分布式架构CAP 与 BASE 理论一致性协议初识 ZookeeperZookeeper 介绍Zookeeper 工作机制Zookeeper 特点Zookeeper 数据结构Zookeeper 应用场景统一命名服务统一配置管理统一集群管理服务上下线软负载均衡Zookeeper 内部原理选举机制节点类型监听器原理写数据流程自我小结...

2019-07-21 15:42:00 162

转载 gRPC 本地服务搭建

RPCRPC 原理主流 RPC 框架gRPC概述特点服务端创建定义服务生成 gRPC 代码服务端实现客户端实现踩坑记录源码RPCRPC 原理RPC 框架的目标就是让远程服务调用更加简单、透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的...

2019-07-19 20:05:00 1187

转载 Java 新特性总结——简单实用

lambda表达式简介lambda 表达式的语法变量作用域函数式接口内置函数式接口默认方法Stream(流)创建 streamFilter(过滤)Sorted(排序)Map(映射)Match(匹配)Count(计数)Parallel Stream(并行流)Collector 和 CollectorsMap 新方法新的日期与时间 API参考...

2019-07-17 21:52:00 116

转载 学Redis这篇就够了

Redis 简介Redis 优势Redis 数据类型stringhashlistsetZset小总结基本命令发布订阅简介实例发布订阅常用命令事务实例Redis 事务命令持久化RDB 持久化AOF复制连接过程主从链哨兵分片Redis 简介Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - ...

2019-07-14 21:01:00 488

转载 110. 平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4...

2019-06-09 23:06:00 212

转载 N 叉树的层序遍历

给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个3叉树:返回其层序遍历:[ [1], [3,2,4], [5,6]]说明:树的深度不会超过1000。树的节点总数不会超过5000。/*// Definition for a Node.class Node...

2019-06-09 20:14:00 136

转载 559. N 叉树的最大深度

给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个3叉树:我们应返回其最大深度,3。说明:树的深度不会超过1000。树的节点总不会超过5000。题解:遍历每一颗子树即可class Solution { public int maxDepth(Node roo...

2019-06-09 19:36:00 40

转载 ConcurrentHashMap源码刨析(基于jdk1.7)

看源码前我们必须先知道一下ConcurrentHashMap的基本结构。ConcurrentHashMap是采用分段锁来进行并发控制的。其中有一个内部类为Segment类用来表示锁。而Segment类里又有一个HashEntry<K,V>[]数组,这个数组才是真正用来存放我们的key-value的。大概为如下图结构。一个Segment数组,而Segment数组每个...

2019-06-07 13:57:00 61

转载 1021. 删除最外层的括号

有效括号字符串为空("")、"(" + A + ")"或A + B,其中A和B都是有效的括号字符串,+代表字符串的连接。例如,"","()","(())()"和"(()(()))"都是有效的括号字符串。如果有效字符串S非空,且不存在将其拆分为S = A+B的方法,我们称其为原语(primitive),其中A和B都是非空有效括号字符串。给出一个...

2019-06-02 23:05:00 100

转载 703. 数据流中的第 K 大元素

设计一个找到数据流中第 K 大元素的类(class)。注意是排序后的第 K 大元素,不是第 K 个不同的元素。你的KthLargest类需要一个同时接收整数k和整数数组nums的构造器,它包含数据流中的初始元素。每次调用KthLargest.add,返回当前数据流中第 K 大的元素。示例:int k = 3;int[] arr = [4,5,8,2];K...

2019-06-02 22:29:00 69

转载 1046. 最后一块石头的重量

有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果...

2019-06-02 21:41:00 56

转载 234. 回文链表

请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解答:将链表的前半部分入栈,然后再从链表的后半部分开始遍历,遍历一个出栈一次,如果相等继续遍历,不等就说明不是回文串,返回false即可。class Solution { public boole...

2019-06-02 18:53:00 47

转载 203. 移除链表元素

删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5解法:没什么好说的,直接删即可class Solution { public ListNode removeElements(ListNode head,...

2019-06-02 18:39:00 54

转载 160. 相交链表

编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释...

2019-06-02 18:28:00 99

转载 83. 删除排序链表中的重复元素

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3解法一:使用一个map或者set来记录已经出现过的节点。然后在遍历的过程中如果发现该节点在map里就删除,否则就添加进map...

2019-06-02 17:26:00 80

转载 922. 按奇偶排序数组 II

给定一个非负整数数组A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当A[i]为奇数时,i也是奇数;当A[i]为偶数时,i也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。提示:...

2019-06-01 22:09:00 98

转载 1002. 查找常用字符

给定仅有小写字母组成的字符串数组A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案。示例 1:输入:["bella","label","roller"]输出:["e","l","l"]示例 2:输入:["co...

2019-06-01 20:58:00 123

转载 561. 数组拆分 I

给定长度为2n的数组,你的任务是将这些数分成n对,例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到n 的 min (ai, bi) 总和最大。示例 1:输入: [1,4,3,2]输出: 4解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).提示:n是正整数...

2019-06-01 20:13:00 55

转载 832. 翻转图像

给定一个二进制矩阵A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转[1, 1, 0]的结果是[0, 1, 1]。反转图片的意思是图片中的0全部被1替换,1全部被0替换。例如,反转[0, 1, 1]的结果是[1, 0, 0]。示例 1:输入: [[1,1,0],[1,0,1],[...

2019-06-01 19:26:00 59

转载 JUC线程池深入刨析

JDK默认提供了四种线程池:SingleThreadExecutor、FiexdThreadPool、CachedThreadPool、ScheduledThreadPoolExecutor。本文会先从前三个线程池的使用开始讲解,然后过度到线程池参数、拒绝策略等方面进行全面讲解,最后自己根据参数构造一个线程池。SingleThreadExecutor publi...

2019-05-29 12:16:00 85

转载 CountDownLatch、CyclicBarrier、Samephore浅谈三大机制

CountDownLatch、CyclieBarrier与SamePhore都可用来控制线程的执行,那么他们之间有什么区别呢CountDownLatchCountDowenlatch可以看成一个线程等待多个线程,当多个线程执行完毕后最后线程才会执行话不多说。直接上代码/** * 一个线程等待多个线程,当多个线程都执行后 * 等待的线程才会执行 * @aut...

2019-05-27 10:09:00 200

转载 深入理解Atomic原子类

Atomic是基于unsafe类和自旋操作实现的,下面以AtomicInteger类为例进行讲解。要理解Atomic得先了解CASCASCAS全程Compare And Swap ,是条并发原语,功能是判断内存中某个值是否与预期值相等,相等就用新值更新旧值,否则不更新。Java中CAS是基于unsafe类实现的,所有的unsafe类中的方法都是native类修饰的,直接调...

2019-05-25 11:52:00 188

转载 浅谈volatile关键字

volatile是一种轻量级的同步机制。它可以保证内存可见性以及防止指令重排序,但是不保证原子性volatile和JMM机制是不可分割的,在谈volatile的时候有必要先了解以下JMMJMM(Java内存模型)JMM是一种抽象的概念模型,实际上并不存在。JMM主要可以将内存看成两块,一块是主内存,用于存放共享变量,线程间共享。一块是线程私有的工作内存,存放变量副本。每次...

2019-05-24 13:24:00 70

转载 web应用启动的时候SpringMVC容器加载过程

<!-- 配置DispatcherServlet --> <servlet> <servlet-name>springmvc</servlet-name> <!-- DispatcherServlet类的全限定类名 --> <servlet-class&g...

2019-05-20 11:34:00 122

转载 MySQL锁机制

本篇开始前先眼熟一些概念排他锁(X锁):排他锁也称写锁,一个排他锁会阻塞其他排他锁和共享锁共享锁(S锁):共享锁也称读锁,共享锁不会阻塞其他共享锁,但是会阻塞排他锁意向排他锁(IX锁):事务想要获得某一表中的某几行的排他锁。意向共享锁(IS锁):事务想要获得某一表中的某几行的共享锁。排他锁和共享锁好理解,在这里简单介绍下意向锁:意向锁是表级别的锁,当某个事务想要...

2019-05-15 11:24:00 69

转载 TCP拥塞控制

基本概念在讲拥塞控制之前,先眼熟几个概念rwnd(接收窗口)、cwnd(拥塞窗口)、ssthresh(慢启动门限)我们都知道,TCP是通过每次在首部设置接收窗口的大小来控制流量传输而不导致接收缓存溢出的。而拥塞控制则是加了个拥塞窗口来维护,拥塞窗口只是个状态量,并没有在TCP首部。而TCP的发送窗口取决与拥塞窗口和接收窗口的。发送窗口就是拥塞窗口和接收窗口的最小值。...

2019-05-12 19:19:00 125

转载 HTTPS的加密流程(通俗易懂,不可错过)

为什么要有HTTPS都说进技术的产生就是为了解决旧技术的一些弊端。HTTP具有相当优秀的一面,但是凡事有利也有弊,在HTTP进行高速通信的过程中可能产生以下几个问题:HTTP采用明文传输。明文传输在一些需要保护个人隐私的场景是大忌,比如银行卡卡号和密码的输入,个人信息的录入等。才用明文传输分分钟钟被不法分子截取下来,可能第二天我们就发现我们银行卡里的钱不翼而飞,我们的...

2019-05-11 16:41:00 881

转载 Spring之IOC核心模块详解

Spring IOC简述IOC称为控制反转,也有一种说法叫DI(依赖注入)。IOC也是spring最核心的模块,Spring的所有工作几乎都围绕着IOC展开。什么是控制反转呢?简单的说,控制反转就是把我们要做的事情交给别人来做,就像是招了个小弟专门为我们做事情,我们需要做好的东西时直接去找小弟拿。这里要做的事情就是new 一个对象。我们不再自己去new对象然后使用,而是spr...

2019-05-10 10:52:00 149

转载 Spring概述

Spring是什么?Spring是春天,Spring的产生给程序员带来了春天!Spring是一款轻量级开发框架,以IOC和AOP为内核,提供了展示层、持久层、以及业务事务层事务管理等一站式企业级应用。Spring有什么用?Spring很大的一个程度是为了解耦,感觉所有Spring涉及到的操作都跟应用解耦有关。使用Spring可用无缝整合各种框架,简化加快程序开发,并且程序结构...

2019-05-09 10:37:00 79

转载 多线程开发之终结任务(中断)

中断一个线程在执行完毕之后会自动结束,如果在运行过程中发生异常也会提前结束一个线程可能处于以下四种状态之一:新建就绪阻塞死亡一个任务进入阻塞状态可能有以下原因:调用sleep()使任务进入休眠状态,这种情况下,任务在指定的时间内不会运行调用wait()使线程挂起。直到线程得到了notify()和notifyAll()消息,线程才会进入就绪状...

2019-03-14 18:14:00 172

转载 多线程开发之基本线程机制

Thread.yield():对静态方法 Thread.yield() 的调用声明了当前线程已经完成了生命周期中最重要的部分,可以切换给其它线程来执行。该方法只是对线程调度器的一个建议,而且也只是建议具有相同优先级的其它线程可以运行。/** * Thread.yield() * */public class test1 implements Runnable{...

2019-03-14 17:13:00 88

转载 多线程开发之三种使用线程的方法

当我们使用线程的话有三种办法:实现 Runnable 接口;实现 Callable 接口;继承 Thread 类实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以说任务是通过线程驱动从而执行的。实现Runnable接口:需要实现run方法,通过Thr...

2019-03-14 16:15:00 147

转载 简单工厂设计模式

简单工厂设计模式:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。实现方式:简单工厂模式的UML类图简单工厂实际上是由一个工厂类(Factory...

2018-12-12 15:45:00 66

转载 策略设计模式

策略设计模式定义:创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,称为策略设计模式。策略就是传递进去的参数对象,它包含要执行的代码。策略模式应用场景:1.如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。2.一个系统需要动态地在几种算法中选择一种。3.如果一个对象有很多的行为,如果不用恰当...

2018-12-11 23:52:00 72

转载 设计并编写代码自动格斗类游戏。

1) 角色类CRole为基类:构造函数、析构函数;成员变量:头像、HP(血量)、ATK(攻击力)、DEF(防御力)、Lv(等级),EXP(经验值);成员函数:武器攻击、跳跃。2)英雄类CHero继承于CRole类构造函数、析构函数;英雄类新增技能踢腿(成员函数)、抱摔(成员函数),给对方造成伤害具体值由学员自己进行设定;3)敌人类CEnemy继承于CRole类...

2018-07-30 14:43:00 830

转载 C++编写双向链表

创建双向链表类,该类有默认构造函数、类的拷贝函数、类的、实现链表添加数据、升序排序、查找链表中某个节点及删除链表中某个节点的操作代码实现:#include<iostream>#include<string.h>using namespace std;typedef int ElemData;struct node{ //节点类...

2018-07-30 11:00:00 136

转载 C++编写字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载...

编码实现字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载,需实现以下“=”运算符、“+”运算、“[]”运算符、“<”运算符及“>”运算符及“==”运算符以下为各个运算符的运算效果的详细说明:a) 字符串“=”重载运算符CNStringstr1("abc ");CNString str2 = str1;b) ...

2018-07-30 10:47:00 193

转载 c++编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。...

#include<iostream>#include<stdio.h>using namespace std;int i=0;char *itostr (int n,char *String){ String[i]=(n%10)+48; i++; if(n/10==0) return Stri...

2018-07-30 10:34:00 728

转载 计算机中位、字长、字的区别

位是最小的存储单位,每一个位存储一个1位的二进制码,一个字节由8位组成。而字通常为16、32或64个位组成。所谓位,是最基本的概念,在计算机中,由于只有逻辑0和逻辑1的存在,因此很多东西、动作、数字都要表示为一串二进制的字码例如: 1001 0000 1101等等。其中每一个逻辑0或者1便是一个位。例如这个例子里的1000 1110共有八个位,它的英文名字叫(bit),是计算机中最基...

2018-05-20 20:40:00 1597

空空如也

空空如也

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

TA关注的人

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