自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (1)
  • 收藏
  • 关注

原创 HDFS中的基本概念

HDFS中的基本概念namenode是一个java进程(运行在jvm上的),用来存储HDFS的元数据。什么是元数据?文件存储的目录层级结构,以及目录里有哪些文件。文件被分为了多少个block块,这些block块分别存储在哪些datanode上面的filesystem namespace 说明:hdfs中的数据都是以目录和文件的形式来组织的。hdfs中又很多的目录,比如/a, /b, /c, /a 下面还有 /a/hello, /a/hi 之类的子目录。然后底层的目录还有/a/hello

2021-04-11 19:03:28 322 1

原创 JDK集合源码分析系列(四)——LinkedHashMap

一、概述LinkedHashMap其实是HashMap的一个子类,实现原理其实跟HashMap类似。只不过LinkedHashMap会记录插入key-value的顺序,并且在遍历的时候,会按照插入key-value对的顺序遍历出来。LinkedHashMap底层是基于双向链表来实现的,底层就是双向链表来记录元素添加的顺序的。二、源码分析先看下LinkedHashMap类有哪些属性: ...

2018-12-12 21:33:59 270

原创 JDK集合源码分析系列(三)——HashMap

一、概述HashMap主要是用来存储key-value对的,HashMap中的key必须是唯一的。那么HashMap底层是怎么实现的呢?二、源码分析这里说明下,以下源码分析都是基于jdk1.8的。jdk1.8以前,HashMap的实现跟Jdk1.8有所不同,1.8以前底层使用的是数组+链表的形式,1.8做了改进,如果链表比较长(链表长度大于8),就会把链表转换为红黑树,来增加查找的性能。 ...

2018-12-11 23:33:49 264

原创 JDK集合源码分析系列(二)——LinkedList

一、概述LinkedList底层是基于链表来实现的一种集合。优点 在于基于链表实现,插入 和删除性能很高,不会像ArrayList那样会产生大量的元素移动。缺点 是随机取一个元素时,需要进行链表遍历,性能相对较差些。二、源码分析1. 属性值介绍 transient int size = 0; /** * Pointer to first node. ...

2018-12-10 23:06:50 194

原创 JDK集合源码分析系列(一)——ArrayList

一、概述ArrayList是我们日常开发中最常用的一种集合,原理就是底层是基于数组来实现了。优点:因为是基于数组来实现,所以随机读会很快,list.get(2),list.get(20)这种的会很快,直接可以通过内存地址定位某个元素。缺点:因为Java里的数组是定长的,因此不断的往list里面添加数据的时候,最后就会导致原来的数据容纳不下了,需要一个更大的数据来容纳元素。扩容时需要进行数组的...

2018-12-10 22:43:34 212

原创 netty服务端Chanel注册与线程模型详解(附带源码分析)

一、概述在上一篇博客中,介绍了netty其实是有其背后的理论支撑的——reactor模式,并且详细介绍了reactor模式。而这边博客将会详细介绍netty是怎么运用reactor模式的,代码是怎么设计和封装的。二、服务端代码现在看一段使用netty编写的服务端代码:public class MyServer { public static void main(String[] ...

2018-10-14 13:33:12 1552

原创 reactor模式以及reactor模式在netty中的应用

一、概述在上一篇博客《Java 传统IO和NIO》 中,我讲述了java传统IO与NIO之间的区别以及NIO给我们带来的在网络编程上的性能的提升。然而,Java NIO以及后面要介绍的netty网络框架都是有一套理论在背后支撑的,那就是reactor模式的应用。二、什么是reactor模式?reactor模式翻译过来叫做反应器模式,通常我们都直接叫做reactor模式。reactor模式是...

2018-10-09 08:40:36 3603

原创 Java 传统IO和NIO

一、简介java传统I/0中一个核心的概念是流(Stream),是面向流的编程。而且数据的传输是以字节为单位的。这一块相信大家相对会比较熟悉,就不做详细介绍了。java传统的I/O又叫做阻塞的I/O,这只要是相对于网络编程来说的。java 在1.4引入了NIO。NIO中拥有3个核心概念:Selector,Channel与Buffer。而与传统I/O不同的是,NIO是面向块来编程的,也就是数据的...

2018-10-06 23:51:33 647

原创 谈一谈对spring cloud的宏观理解

最近学习了spring cloud的一些主要组件,大概的看了下这些组件的源码。想着可以写一篇文章来总结一下对于spring cloud的理解。技术细节就不写了,主要是从宏观上来谈谈对spring cloud的理解。一、什么是spring cloud?spring cloud 可以认为是一种分布式服务的框架,它为开发人员提供了快速构建分布式系统的常用模式的一些工具,比如说配置管理、服务的注册...

2018-08-10 00:45:33 5410 1

原创 Java线程池的运行原理以及使用详解

一、 为什么要使用线程池在一些需要使用线程去处理任务的业务场景中,如果每一个任务都创建一个线程去处理,任务处理完过后,把这个线程销毁,这样会产生大量的线程创建,销毁的资源开销。使用线程池能有效的控制这种线程的创建和销毁,而且能够对创建的线程进行有效的管理。二、Java线程池相关的API介绍1. Executor接口主要是用来执行提交的任务。下面是接口定义:public in...

2018-05-13 13:23:56 8342 1

原创 2017年终结

总是不经感慨,时间是真的过得很快。前几天平安夜的晚上,跟以前在广州一起玩的小伙伴语音聊天,聊到去年平安夜,我们一起出去骑行,烧烤,然后晚上回来狼人杀。真的是很怀念那时候,又要感叹下时间过得很快了,然后又到了今年的圣诞,一年就过去了。毕业后有个习惯,就是回去回想一下过去一年,做了那些事,自己有什么成长,过去一年有没有完成上一年里定的计划目标。然后就是想一想,接来下一年,自己应该去做些什么。以前都会写一

2017-12-27 00:26:17 663

原创 解读“个人财务报表”

这几天在看一本书,书里提到一个名词叫“个人财务报表”。刚看到这个词的时候,比较有疑问。一般说财务报表不是讲公司的吗?怎么还有个人财务报表?书里的观点是这样的,一个国家,一个企业,甚至是具体到一个社会个体——人,都可以通过财务报表来分析他的实力情况以及当前运营情况。如果财务报表所表现出来的实例与经营状况不好的话,可以通过政策(或者是决策)来调整,因为财务报表正是政策(或者决策)的结果或者说表现形式。国

2017-12-04 23:29:10 6130 2

原创 跳出“老鼠赛跑”

最近这两天在看一本书,叫做《富爸爸穷爸爸》。书的开篇就提到了一个现金流游戏:游戏板上有两条路,一条在内部,一条在外部。内部那条被称作“老鼠赛跑”,外面那条则叫“快车道”。游戏的目的就是要走出内部,最终来到“快车道”。在“老鼠赛跑”圈内人们为金钱而工作,每月的支出主要靠工资来维持,没有属于自己的资产。当工资不足以维持支出或者维持支出很困难时,人们想到的是更加努力的工作,希望能够升职加薪。而随着不断往后

2017-11-14 23:16:10 1818 2

原创 如何看待马云又唱歌又拍电影

最近商业大佬马云在演艺圈风生水起,又唱歌又拍电影的,很高调。前一段时间,在阿里18周年晚会上,拉风出场,扮起了马克尔.杰克逊。有的人可能会说,作为一个商业大佬,好好经营企业不就好了么,还学人家明星一样混起了演艺圈,完全不符合一个企业家的形象。还有人调侃说,有钱真的能为所欲为。就在刚刚,我也发朋友圈调侃了一番。 虽然我有时候也会去调侃一下,但是我的内心对于马云是极为钦佩的。你会发现总有那么些人,他们

2017-11-03 22:19:22 822

原创 我为什么喜欢跑步

越来越懒了,以前计划的是一个星期写一篇,现在差不多变两个星期一篇了。今天来谈一谈跑步这项运动。其实应该有好多人都在坚持跑步,身边的同事也有好几个也在坚持跑步。而我跑步是从去年的七月份开始的。跑了三个多月后面因为肩膀疼,医生让多休息别运动,就休息了两个月没有跑。后面肩膀好了一些,又跑了起来,基本都是一个星期跑三次的样子。回想过去,好像做过很多的事,好多都是坚持了一段时间然后就放弃了。以前刚去广州的时候

2017-11-03 19:58:17 4727

原创 线上服务运行时间长变慢问题的分析定位

问题最近线上有一个服务,运行个几天,就会变得很慢。这里很慢指的是经常对于请求的响应时间很大,又是甚至有二三十秒,导致别人调接口,经常出现超时问题。这里简单介绍些这个问题的定位方法过程以及最后怎么解决的。 很多时候,我们更应该积累分析问题、解决问题的方法,这也是一个人工作能力的表现吧。当然专业知识的积累也是必不可少的,这是基础。就像本文的分析,要是没有点JVM的知识基础,这个问题肯定是解决不了的。分

2017-10-16 20:52:43 9386 7

原创 跨语言RPC框架Thrift详解

一、 概念Apache的Thrift软件框架,是用来进行可伸缩的、跨语言的服务开发,它通过一个代码生成引擎来构建高效、无缝的服务,这些服务能够实现跨语言调度,目前支持的语言有: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi

2017-10-08 23:32:36 14776

原创 Hadoop简单入门和集群搭建

一、Hadoop是什么?Hadoop是这样一个框架,它可以通过使用简单的编程模型来对跨计算机的集群中的大型数据集进行分布式的处理。它被设计成可以从单个服务器扩展到数千台机器,每个机器都提供本地的计算和存储。与依赖于硬件来保证高可用性不同,该库本身的设计目的是检测和处理应用程序层的故障,因此可以在众多计算机组成的集群的顶部提供一个高可用的服务,但是组成集群的每一个计算机都有可能出现故障。上面是Hado

2017-09-09 23:32:07 619

原创 WebSocket介绍以及netty对于WebSocket的支持

1. 问题可以看看这几个场景应当怎么实现:网页聊天应用扫码登录成功跳转、支付成功跳转网页游戏需要的实时数据交互这些场景都是浏览器与服务端之间的交互,我们最容易想到的就是通过http协议来实现浏览器与服务端之间的交互。但是http协议是基于请求响应的,也就是每次的交互都是客户端发送请求,服务端返回响应。如果是服务端需要向客户端推送数据,http协议就不能够办到了。http要想实现上面的场景,必

2017-08-21 22:40:47 1268

原创 Java8流Stream中间操作、终止操作运行流程源码分析

通过前面的博客的介绍,我们知道Stream有一个源,0个或者多个中间操作,以及一个终止操作。Stream只有遇到终止操作,它的源才开始执行遍历操作,而且只会进行一次遍历,而不是每个操作都执行一次遍历。今天,我们就从源码的层面来分析一下JDK这一块是怎么实现的。首先看下面一段代码,下面将以这一段代码来进行分析:List<Integer> list = Arrays.asList(1, 2, 3, 4,

2017-08-10 00:34:09 8499

原创 Java8的流Stream与收集器Collector详解

流Stream概述Stream可以说是java8的一大亮点。java8中的Stream对集合功能进行了增强。在日常开发中,我们免不了要经常对集合对象进行处理,而在java8以前,对于集合的处理完全是由我们自己来操作,所以代码看起来相对繁杂。而有了Stream以后,对于集合的处理得到了大大的简化。Stream提供了对集合对象的各种非常便利的、高效的聚合操作。集合和Stream,表面看起来很相似,却有着

2017-08-08 23:31:09 11810 5

原创 Java8 lambda表达式、函数式接口、方法引用

一、函数式接口什么是函数式接口呢?函数式接口是Java8新增加的内容。如果一个接口只有一个抽象方法,那么该接口就是函数式接口。我们知道,在Java8以前的版本,接口里面的方法都是抽象的方法,如果接口里只有一个抽象方法,那么该接口就是函数式接口。而在Java8中,接口中不仅仅只有抽象方法了。除了抽象方法,接口中还可以有静态方法和默认方法。例如Comparator接口,Java8以前只有一个 in

2017-07-23 13:42:21 2388 1

原创 SpringMVC 参数绑定详解

概述记得之前跟前端同事联调接口的时候,后端springMVC需要接收数组类型的参数,然后跟前端说需要传数组类型过来。后来前端童鞋传了数组,但是后端接收不成功,联调失败。那时候由于时间关系没有仔细研究这块,当时想了个办法就是前端传一个json字符串,后端换成接收json字符串然后转成需要的数组对象。这显然不是一种好的做法,框架帮我们做好的事我们没有用上,还平白多了两次数据的转换。所以今天花时间研究了下

2017-07-15 23:27:40 2378

原创 请不要抱怨

这段时间有跟刚毕业不久的朋友聊天,包括之前跟一些刚毕业的朋友聊天,发现他们有时候就抱怨,大多都是公司给的工资不高,福利跟其他公司比不够好,公司加班太多,涨工资太慢了。还有在圣思源群里,有时候有个别同学就会抱怨,公司的技术领导怎么样怎么样,公司的架构弄得怎么样怎么样。   给大家说说我的经历吧。我刚毕业的时候是去了合肥的一家做电信行业软件的公司。当时说让我去实习,给400块钱一个月的工资,然后我还屁

2017-07-10 01:07:02 681 1

原创 git分支详解

概述我们首先来回顾下SVN的分支是什么样的。假如说我们现在要开发一个新的功能,需要用到svn的分支,与主分支进行并行开发,我们是怎么做的呢?我们首先要创建一个分支,然后checkout分支,checkout完成后我们会发现分支branch在我们本地其实就是对trunk的一个完全拷贝。我们本地会多出一个branch的文件夹,目录结构跟trunk一模一样。那么怎么样来进行并行开发呢?试想一下,分支在开发

2017-07-08 11:24:11 4991

原创 git分布式版本控制系统原理以及常用命令的使用

概述大家知道,git是一种分布式的版本控制系统。而传统的cvs和svn是一种集中式的版本控制系统。所谓集中式的版本控制系统,就是指在远程有一个版本控制服务器,开发者可以通过远程版本控制器来实现代码的交换同步工作。开发者可以可以从远程服务器检出代码,更新代码,也可以像远程服务器提交代码。这样做有一个好处就是每个人都可以在一定程度上看到项目中的其他人正在做些什么。下面是一个简单的工作模型图: 然而

2017-07-02 16:20:39 830

原创 如何使用跳板机一键登录目标机器

今天主要给大家分享一下ssh客户端怎么配置通过跳板机直接跳转目标机器。  大家知道,在日常的开发中,有可能我们的本机不能够直接连线上的服务器,但是我们本机能有连上跳板机,而跳板机是可以连接线上的服务器的。因此我们只能通过输入命令:’ssh 用户名@主机 -p 端口号’命令来实现跳转过去。显然这么做效率是很低的,每一次访问线上的服务器都必须先登上跳板机然后输入命令跳转。  下面我将介绍一下secure

2017-06-21 15:28:08 22753 2

原创 Netty实现一个基于socket传输程序

概述  上一篇博客介绍了使用netty来实现一个简单的http服务程序。HTTP协议是一个无状态的、短连接的,基于请求响应的一个协议。所谓的无状态,指的是前后两次的请求是毫不相关的,也就是说后一次请求对于前一次请求的数据是完全未知的。所以才会出现使用session、cookie来进行一些数据的存储。所谓的短连接,指的是一次请求响应完成后,链接就会断开(当然,这个对于HTTP 1.1版本不一定正确。这

2017-06-10 15:50:36 6158

原创 Netty构建一个简单的http服务

netty简介  netty是一个异步的基于事件驱动的网络框架,用于快速开发可维护的高性能协议的服务器和客户端。   netty是一个NIO客户端服务器框架,它使得网络框架的开发变得更加快速和简单,例如基于协议的服务端和客户端的开发,极大的简化了例如TCP和UDP socket服务等的网络编程。运行环境mac proItellij Ideagradlejdk 8程序所需jar包sourc

2017-06-10 12:17:50 2563

原创 Twitter的分布式自增ID算法snowflake的JAVA实现以及使用时需要注意的问题

Twitter的分布式自增ID算法snowflake的JAVA实现以及使用时需要注意的问题概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitt

2017-04-09 13:34:19 6305 3

转载 java设计模式之门面模式

外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。1. 外观模式概述      不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶、茶具和开水,如图1(A)所示,而去茶馆喝茶,最简单的方式就是跟茶馆服务员说想要一

2016-09-21 23:03:40 349

转载 java设计模式之命令模式

装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇。在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、排气扇并无直接关系,一个开关在安装之后可能用来控制电灯,也可能用来控制排气扇或者其他电器设备。开关与电器之间通过电线建立连接,如果开关打开,则电线通电,电器工作;反之,开关关闭,电线断电,电器停止工作。相同的开关可以通过不

2016-09-20 22:43:55 318

原创 工厂模式

一、 简单工厂模式先来思考一个问题。我们平时写程序时,会有这种情况,A对象里面需要调用B对象的方法,这时我们使用的一般是new关键字来创建一个B实例,然后调用B实例的方法。这种做法的坏处在于:A类的方法实现直接调用了B类的类名(这种方式也被称为硬编码耦合),一旦系统需要重构:需要使用C类来代替B类时,程序就不得不修改A类代码,如果应用中有100个或者10000个类以硬编码方式耦合了B类,则需要

2016-08-31 23:22:22 345

原创 zookeeper的基本原理和部署

一、Zookeeper 概述(官网翻译)ZooKeeper 通过一个可共享的分层数据注册(称之为znode)命名空间来协调分布部署的各个进程,这与文件系统很相像。与一般的文件不同,ZooKeeper提供给客户端的服务是高吞吐、低延迟、高可用和严格有序的。性能上的特点使得ZooKeeper常被用于大规模分布式集群。它的高可靠性使得它能够避免大型系统中常见的单点故障。严格有序的特点使得客户端可

2016-08-06 11:38:11 1364

转载 Spring MVC 教程,快速入门,深入分析

目录 一、前言二、spring mvc 核心类与接口三、spring mvc 核心流程图四、spring mvc DispatcherServlet说明五、spring mvc 父子上下文的说明六、springMVC-mvc.xml 配置文件片段讲解 七、spring mvc 如何访问到静态的文件,如jpg,js,css八、spring mvc 请求如何映射到具

2015-07-06 11:48:55 376

原创 java反射

什么是java的反射机制:Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和intr

2015-05-13 01:41:04 300

原创 动态代理模式

动态代理比静态代理模式更加强大。它能在程序运行时动态的生成代理对象。所谓动态代理类是在运行时生成的class,在生成它时,你必须提供一组interface给它,则动态代理类就宣称它实现了这些interface。当然,动态代理类就充当一个代理,你不要企图它会帮你干实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作。动态代理的角色和静态代理的角色一样:抽象角

2015-04-23 22:02:17 417

原创 静态代理模式

代理模式,可以通过代理可以在原来的基础上附加一些其他的操作。静态代理模式相对比较简单无需再程序运行时动态的进行代理。静态代理模式的角色:抽象角色:真实对象和代理对象的共同接口。其中声明真实对象和代理对象需要做的事。真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己

2015-04-23 21:42:39 461

原创 装饰模式

装饰模式能在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。JDK中IO的设计就用到了装饰模式,通过过滤流对节点流进行包装来实现功能的扩展。装饰模式的角色的组成:抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加工功能的对象。(InputStream、OutputStream)具体构件(Con

2015-04-23 20:23:26 379

原创 策略模式

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。其中JDK里面的TreeSet类和TreeMap类就用到了策略模式。这两个类是带排序的集合类,其中排序的规则就相当于策略模式里定义的一系列算法,而集合类就相当于是策略模式里的环境类,供用户使用,用只知道TreeSet和TreeMap是带排序的,至于怎么排序的,是由排序的算法决定

2014-11-27 22:22:08 672

空空如也

空空如也

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

TA关注的人

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