5 程序猿进阶

尚未进行身份认证

目前在杭州市工作,希望能够找到一群志同道合的兄弟,一起创业。

等级
TA的排名 1w+

Kafka——消费者

消费者不需要自行管理 offset(分组+topic+分区),系统通过 broker 将 offset 存放在本地。低版本通过 zk 自行管理。系统自行管理分区和副本情况。消费者断线后会自动根据上一次记录的 offset 去获取数据(默认一分钟更新一次 offset),同一个分组中的客户不能同时消费同一个分片。不同的 group 记录不同的 offset,这样不同程序读取同一个 topic 才不会...

2019-12-11 23:58:04

Nginx 虚拟主机

虚拟主机使用的是特殊的软硬件技术,把一台运行在因特网上的服务器主机分成一台台 “虚拟” 的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完成的 Intemet 服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者的角度来看,每一台虚拟主机和一台独立的主机完全一样。利用虚拟主机,可以在同一台服务器,同一组 Nginx 进程上运行多...

2019-06-27 23:14:01

SpringCloud 系列(七)------Config 分布式配置中心

一、概述微服务意味着要将单体应用中的的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量服务。由于每个服务都有配置文件yml,如果系统非常庞大,这些yml不好管理。基于此需求,SpringCloud Config 提供了 ConfigServer 来解决问题。【1】是什么:SpringCloud Config 为微服务架构中的微服务提供集中式的外部配置支持,配置服务器...

2019-12-02 22:25:07

RabbitMQ——消息中间件总结

RabbitMQ 是实现高级消息队列协议(AMQP:Advanced Message Queue Protocol)的开源代理软件,也称为面向消息的中间件。支持多种操作系统、多种编程语言。RabbitMQ 服务器使用 Erlang 语言编写,其集群和故障转移是构建在开放电信平台框架上的。AMQP 是一个面向消息中间件的开放式应用层协议。定义消息方向、消息队列、消息路由、可靠性、安全性等特性。...

2019-11-30 16:26:54

JAVA面试——RPC

一、RPC 服务的原理 【1】Socket 套接字:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端称为 Socket。可以实现不同计算机之间的通信,是网络编程接口的具体实现。Socket 套接字是客户端/服务端网络结构程序的基本组成部分,【2】RPC 的调用过程:实现透明的远程过程调用的重点是创建客户存根(client stub),存根(stub)就像代理(agent)...

2019-11-28 00:48:41

Spring事务——源码分析

事务环境搭建工作:https://blog.csdn.net/zhengzhaoyang122/article/details/89164554一、注解 @EnableTransactionManagement在配置类中添加注解 @EnableTransactionManagement,便开启了事务功能。此注解也是了解Spring事务源码的入口。@EnableTransactionM...

2019-11-23 10:30:32

Redis 分布式锁

分布式应用进行逻辑处理时经常会遇到并发问题,我们首先肯定会想到锁。关于锁大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常我们使用 synchronized 、Lock 来加锁。但是 Java中的锁,只能保证在同一个 JVM进程内中执行。如果在分布式集群环境下呢?一、分布式锁分布式锁的本质与 Java中的锁一样,就是在 Redis里面占了一个“坑”(一...

2019-11-13 20:54:00

归并排序

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。一、归并排序的思想【1】如下图,可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方...

2019-11-03 21:21:24

Hash 表

哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(H...

2019-11-02 23:15:29

链表

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。链表是有序的列表,但是它在内存中是存储如下:【1】链表是以节点的方式来存储,是链式存储;【2】每个节点包含 data 域, next 域:指向下一个节点...

2019-11-02 13:20:26

队列

队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。数组模拟环形队列 【1】队列本身是有序列表,若使用数组的结构来存储队列数据,队列数组的声明如下,其中 maxSize 是该队列的最大容量;【2】因为队列的输入输出是分别从头和尾来处理的,因此需要两个变量 front(头)=0 和 tail(尾)=0 ,tail会随着数据的输入而变化,front 会随着数据的输出而变...

2019-11-02 09:37:36

栈的一个实际需求:请输入一个表达式,计算式:[7*2*2-5+1-5+3-3]点击计算【如下图】请问:计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看这个算式 7*2*2-5..., 但是计算机怎么理解这个算式的(对计算机而言,它接收到的就是一个字符串),就是下面要学习的栈;一、栈的介绍【1】栈的英文为(stack);【2】栈是一个先入后出(FILO-Firs...

2019-10-30 21:49:17

快速排序

快速排序(QuickSort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将需要排序的数据分成独立两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按照此方法对这两组数据分别进行快速排序,这个排序过程可以递归进行,以此达到整个数据变成有序序列。一、基本介绍快速排序是实践中的一种快速的排序算法,在对Java基本类型的排序中特别有用。它的平均运行时间是。该算法之所以特别...

2019-10-29 20:00:31

B树、B+树、B*树——简单介绍

一、为什么是有B树二叉树存在的问题:二叉树的构建是在内存中执行的,需要将磁盘中的文件通过 IO操作进行读取。如果二叉树的节点少,这样也没有问题,但是如果二叉树的节点很多(比如说一个亿),则存在如下问题:【1】在构建二叉树时,需要多次进行 IO操作(海量数据存储在数据库或者文件中),节点海量,构建二叉树时,速度有影响。【2】节点海量,也造成了二叉树的高度很高,会降低操作速度。二、B树(多...

2019-10-25 21:24:33

红黑树

AVL (平衡二叉树:追求"完全平衡")树流行的另一种变种是红黑树(Red-Black-Tree:只要求部分达到平衡)其就是一个二叉查找树。对红黑树的操作在最坏情形下花费 时间。红黑树是具有下列着色性质的二叉查找树:【1】每个节点不是红色就是黑色;【2】根是黑色的;【3】如果一个节点是红色的,那么它的子节点必须是黑色的;【4】从一个节点到一个null节点(叶子节点:都是黑色的) 引用的每一...

2019-10-23 21:30:55

HashMap 与 ConcurrentHashMap 底层实现

一、HashMap 底层源码【1】、JDK7 版本(数组+链表):我们存放的 hashMap 都会封装成一个节点对象 Entry(key,value),然后将此节点对象存放到一个数组中,存放前首先需要确定存放的数组下标:① 通过 hash(key) 算法得到 key 的 hashcode;② 通过 hashcode 与数组的大小取模(hashcode % table.length ) 获取要存...

2019-10-21 21:26:29

Netty 高性能之零拷贝

零拷贝是指避免在用户态(User-space)与内核态(Kernel-space)之间来回拷贝数据的技术。一、传统 IO传统 IO(InputStream/OutputStream)读取数据并通过网络发送数据的流程,如下图:【1】当用户空间使用 read() 询问内核空间时,会进行一次上下文的切换(从用户态切换到内核态)。然后内核空间通过 sys_read() 或等价的方法...

2019-10-07 21:21:03

稀疏数组

一、稀疏数组的定义稀疏(sparsearray)数组:可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组。稀疏数组的应用场景:五子棋程序,有存盘退出和续上盘的功能,将五子棋盘转化成二维数组如下所示:分析上述问题:因为该二维数组默认的地方值为0,因此记录了很多没有意义的数据。当遇到此种情况时,可以使用稀疏数组。当一个数组中大部分元素为0,或者为同一个值...

2019-10-19 15:09:26

Java (强/弱/软/虚)引用

一、整体架构二、强引用(默认支持)当内存不足,JVM 开始垃圾回收,对于强引用的对象,就算是出现了 OOM 也不会对该对象进行回收,死都不收。强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾回收器不会碰这种对象。在Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状...

2019-10-07 11:46:56

Java面试——死锁编码及定位分析

一、概述死锁是指两个或两个以上的进程在执行过程中,因争抢资源而造成的一种互相等待的现象,若无外力干涉它们将无法推进,如果系统资源充足,进程的资源请求能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。死锁产生的原因:【1】系统资源不足;【2】资源分配不当;【3】进程运行推进的顺序不合适;二、代码演示public class TestMian { ...

2019-10-05 15:29:17

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。