
Java
文章平均质量分 81
鹿‘s
以技术为驱动,以结果为导向。欢迎加入我的技术QQ群:895244712
展开
-
互联网常用设计模式——通往架构师的第一步
什么是设计模式?Christopher Alexander 说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。简单来说就是:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠...原创 2018-11-24 15:16:22 · 699 阅读 · 0 评论 -
【经典揭秘】集中式架构怎么升级为分布式架构?
前言由于历史原因,集中式架构多用于传统银行、电信等行业。主机资源集中在大型主机或小型机上。集中式架构下,包括操作系统,中间件,数据库等“基础软件” 均为闭源商用系统。集中式架构的典型案例是 IOE(IBM, Oracle,EMC)提供的计算设备、数据库技术和存储设备共同组成的系统。近年来,分布式架构在 Google、 Amazon、Facebook、阿里巴巴、腾讯等互联网公司广泛应用基础上...原创 2018-11-15 17:39:56 · 529 阅读 · 0 评论 -
大型网站架构之分布式消息队列——RabbitMQ
Message Broker与AMQP简介Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景:消息路由到一个或多个目的地 消息转化为其他的表现方式 执行消息的聚集、消息的分解,并将结果发送到他们的目的地,然后重新组合相应返回给消息用户 调用Web服务来检索数据 响应事件或错误 使用发布-订阅模式来提供内容或基于主题的消息路由AMQ...原创 2018-11-15 16:45:13 · 455 阅读 · 0 评论 -
【1024程序员节】话说,你学编程的初衷是什么?
前言今天是1024程序员节,中国500w+的程序员今天可以享受一天专属的节日,网络上也有各种庆祝方式:一些公司祭出了“程序员鼓励师” 一些公司给程序员放了个“假”还有公司出了张“海报”都是玩的很嗨,套路一波接一波,看来在1024这天程序员收到的“关怀”不可谓不深啊! 初衷 在这个重要的节日,不知道你是否还记得学编程的...原创 2018-10-24 14:41:28 · 408 阅读 · 0 评论 -
分布式下的远程通信技术(RPC)的一些理解
前言为什么需要RPC,而不是简单的HTTP接口?刚开始还是菜鸟的时候,时常把RPC和HTTP搞混淆,本身概念还没理解清楚,心里就浮躁的不行,导致闹出了不少笑话。什么是RPC?RPC(Remote Promote Call) 一种进程间通信方式。允许像调用本地服务一样调用远程服务。RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式(TCP或者...原创 2018-10-26 16:35:01 · 2961 阅读 · 0 评论 -
明天面试?吓得我赶紧手写了一个Spring
引言几乎每个面试的程序员都会碰到Spring相关的面试问题,或浅或深。你都是如何回答面试官的问题的?——我不知道,我一般会通过手写一个Spring来加深自己的印象。目标人见人爱的Spring已然不仅仅只是一个框架了。如今,Spring已然成为了一个生态。但深入了解Spring的却寥寥无几。这里,我带大家一起来看看,我是如何手写Spring的。我将结合对Spring十多年的研究经验,用不...原创 2018-10-29 18:06:31 · 200 阅读 · 0 评论 -
程序员只钻研技术其实是很蠢的
前言程序员一门心思钻研技术其实是一件很蠢的事情。因为大部分人并不是那1%的天才,也完全没办法做到十年如一日地钻研技术,至于光靠兴趣驱动,未免太过理想。正文那么,如果我们没有足够的信念和能力可以走出一条自己的技术路,那么总有一天会遇到真正的“35岁中年危机”,如果你等到30岁才意识到问题,或许已经为时已晚。为了避免“脱发”“加班”和“焦虑”,以下是我给大家总结的几条建议:...原创 2018-10-29 15:58:31 · 694 阅读 · 0 评论 -
烂大街的Spring AOP的工作原理你真的了解吗?
前言大家应该知道AOP编程首先要选择它感兴趣的连接点----即切入点(Point cut),那么,AOP能对切入点做什么样的编程呢? 我们先将代理模式下的某个连接点细化,你会看到如下这个示意图所表示的过程:为了降低我们对Spring的AOP的理解难度,我在这里将代理角色的职能进行了简化,方便大家理解。(注意:真实的Spring AOP的proxy角色扮演的只能比这复杂的多,这里只是简化...原创 2018-10-23 17:27:35 · 1043 阅读 · 0 评论 -
啥叫K8s?啥是k8s?
•Kubernetes介绍1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境2.什么是kubernetes 首先,他是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Googl...转载 2018-10-25 16:59:24 · 190647 阅读 · 16 评论 -
为什么你要使用这么强大的分布式消息中间件——kafka
为什么是kafka?上面我们知道我们有必要在数据处理系统中使用一个消息系统,但是我们为什么一定要选kafka呢?现在的消息系统可不只有kafka。话说阿里中间件团队和LinkedIn团队都做了一个Kafka、RabbitMQ、RocketMQ的三者对比。实际结果可以参考以下两篇博文:阿里测试:http://jm.taobao.org/2016/04/01/kafka-vs-rabbit...原创 2018-10-25 14:40:16 · 2869 阅读 · 0 评论 -
【十年磨一剑】我们能从阿里架构师的身上学到什么?
前言做技术的,一定不能放弃技术。在精进技术的同时完善其他方面的能力,十年如一日。不忘初心,方得始终。正文本文是看到阿里巴巴系统架构师黄勇的采访记录有感而发,如有侵权,请联系我。下面就一起来看看阿里架构师的十年架构路。和大家介绍下我目前所从事的工作:我目前从事分布式服务架构的设计与开发工作,在阿里的大数据平台上进行应用程序开发。我们整个系统架构采用了“前后端分离”的思想,...原创 2018-10-20 18:01:41 · 578 阅读 · 1 评论 -
mybatis自动生成代码
前言记得多年前用ibatis的时候,写配置文件还是蛮费劲的,而且容易出问题,这两天看mybatis,代码都可以自动生成了。利用mybatis-generator插件,可以自动生成对应的model、dao和mapper(复杂sql手动编写),很大程度上减少了手动编码的时间,而且还能一定程度上避免配置错误问题。下面就Maven插件的方式(还有命令行、eclipse插件两种实现方式)做详细说明,ma...原创 2018-10-20 15:02:17 · 492 阅读 · 0 评论 -
Web Api 基于Zookeeper的服务注册与发现
差异基于Nginx的服务提供和消费 基于zookeeper的服务注册和发现 zk的负载均衡是可以调控,nginx只是能调权重,其他需要可控的都需要自己写插件;但是nginx的吞吐量比zk大很多,可以根据业务选择用哪种方式。服务端注册1.创建WEB API 程序,使用NuGet下载ZookeeperNet安装包 2.WEB API ...原创 2018-11-18 17:42:51 · 658 阅读 · 0 评论 -
传统行业程序员的深度焦虑?——快来互联网行业吧!
前言不少在传统行业摸爬滚打的程序员越来越焦虑了,有些甚至睡不着觉。为什么?传统行业的程序员们每天进行的都是业务代码的编写,接触不到更新更好的技术;公司的效益并不好,如未达到目标收益,只能进行“瘦身”,技术人员也很恐慌;看到BAT等互联网企业飞速发展,程序员的待遇也水涨船高,难免眼红,但是如何转型却一头雾水。下面就几个方面和大家谈谈传统行业的技术人员如何转型互联网。传统行业和互联网行...原创 2018-11-14 18:05:08 · 2591 阅读 · 0 评论 -
程序员,你怎么对待常见的数据一致性问题?
现象应用系统中的关键服务绝大部分都会是对数据库的依赖。 当多个进程同时操作同一个数据,会产生资源争抢,数据一致性的问题。如果只有一个数据库服务器,数据一致性问题也就不存在了。可是,随着系统访问量、数据量的不断增长,数据库出现多个服务器,又出现缓存服务,又要拆分数据库,还要分拆到不同的子应用等等。这样一来,数据一致性问题就会变得越来越突出。 举个栗子我们来看这样...原创 2018-11-16 14:32:57 · 934 阅读 · 0 评论 -
Java NIO 核心组件学习笔记
背景知识同步、异步、阻塞、非阻塞首先,这几个概念非常容易搞混淆,但NIO中又有涉及,所以总结一下。同步:API调用返回时调用者就知道操作的结果如何了(实际读取/写入了多少字节)。 异步:相对于同步,API调用返回时调用者不知道操作的结果,后面才会回调通知结果。 阻塞:当无数据可读,或者不能写入所有数据时,挂起当前线程等待。 非阻塞:读取时,可以读多少数据就读多少然后返回,写入...转载 2018-11-18 15:23:29 · 184 阅读 · 0 评论 -
数据结构与算法之二叉树
前面我们介绍数组的数据结构,我们知道对于有序数组,查找很快,并介绍可以通过二分法查找,但是想要在有序数组中插入一个数据项,就必须先找到插入数据项的位置,然后将所有插入位置后面的数据项全部向后移动一位,来给新数据腾出空间,平均来讲要移动N/2次,这是很费时的。同理,删除数据也是。 然后我们介绍了另外一种数据结构——链表,链表的插入和删除很快,我们只需要改变一些引用值就行了,但是查...原创 2018-11-19 17:47:40 · 375 阅读 · 0 评论 -
深入理解Java中的volatile关键字
出处: <http://www.cnblogs.com/chengxiao/>内存可见性 volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自...转载 2018-11-19 17:24:24 · 402 阅读 · 0 评论 -
工作两年的程序员们应该懂的Java虚拟机工作原理
首先我想从宏观上介绍一下Java虚拟机的工作原理。从最初的我们编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件,然后JRE加载Java字节码文件,载入系统分配给JVM的内存区,然后执行引擎解释或编译类文件,再由即时编译器将字节码转化为机器码。主要介绍下图中的类加载器和运行时数据区两个...原创 2018-11-19 16:58:23 · 598 阅读 · 0 评论 -
Spring 、SpringMVC 、Struts2之间的区别
一、Spring与SpringMVC的区别: spring是一个开源框架,是为了解决企业应用程序开发,功能如下: 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 1、轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可...原创 2018-11-19 16:40:11 · 292 阅读 · 0 评论 -
ConcurrentHashMap实现原理及源码分析
本文出处: <http://www.cnblogs.com/chengxiao/>ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHa...转载 2018-11-19 16:27:41 · 207 阅读 · 0 评论 -
看十年编程经验大神详解Spring IOC
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IOC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解首先要分享的是Iteye的开涛这位技术牛人对...原创 2018-11-19 16:15:20 · 255 阅读 · 0 评论 -
怎么更好地理解Spring AOP
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnblogs.com/xrq730/p/4919025.htmlAOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Ori...转载 2018-11-19 16:04:42 · 227 阅读 · 0 评论 -
MySQL知识总结
本文是之前我学习MySQL笔记整合的。这篇文章理论偏多,对于其中比较比较难理解知识点写些Demo,权当个人理解。这个算是概要总结版,适合学习了mysql最后要点总结或者有其他数据库基础的看,不然一时间内容太多。一、SQL基础SQL语句分类1.DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用...原创 2018-11-19 15:52:53 · 511 阅读 · 0 评论 -
Spring Bean详细讲解 什么是Bean?
什么是Bean?Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。Spring 容器会自动完成@bean对象的实例化。创建应用对象之间的协作关系的行为称为:装配(wiring),这就是依赖注入的本质。Spring 三种配置方案1.在XML中进行显示配置2.使用Java代码进行显示配置3.隐式的bean发现机制和自动装配推荐方式: 3>2...原创 2018-11-19 15:45:37 · 99501 阅读 · 7 评论 -
浏览器缓存是什么?它的机制又是什么?
对于浏览器缓存,相信很多开发者对它真的是又爱又恨。一方面极大地提升了用户体验,而另一方面有时会因为读取了缓存而展示了“错误”的东西,而在开发过程中千方百计地想把缓存禁掉。那么浏览器缓存究竟是个什么样的神奇玩意呢?什么是浏览器缓存:简单来说,浏览器缓存就是把一个已经请求过的Web资源(如html页面,图片,js,数据等)拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下...原创 2018-11-16 17:45:28 · 8944 阅读 · 0 评论 -
Spring动态注册多数据源
前言最近在做SaaS应用,数据库采用了单实例多schema的架构,每个租户有一个独立的schema,同时整个数据源有一个共享的schema,因此需要解决动态增删、切换数据源的问题。在网上搜了很多文章后,很多都是讲主从数据源配置,或都是在应用启动前已经确定好数据源配置的,甚少讲在不停机的情况如何动态加载数据源,所以写下这篇文章,以供参考。使用到的技术Java8 Spring + S...原创 2018-10-20 14:45:02 · 821 阅读 · 0 评论 -
Redis 事务与过期时间详细介绍
Redis 事务与过期时间详细介绍一、Redis事务:Redis中支持事务,事务即为当我们需要执行几条命令时,要么这几条命令都不执行,要么都执行:1、开始事务写入: 1 multi 2、然后写入命令,注意写完事务要执行的每条命令之后回车即可,命令会自动入队: 1 2 lpush art:1 h...原创 2018-10-20 14:19:15 · 494 阅读 · 0 评论 -
这几个SpringBoot 实用的小技巧你了解吗?
前言最近分享的一些源码、框架设计的东西。我发现大家热情不是特别高,想想大多数应该还是正儿八经写代码的居多;这次就分享一点接地气的: SpringBoot 使用中的一些小技巧。算不上多高大上的东西,但都还挺有用。屏蔽外部依赖第一个是屏蔽外部依赖,什么意思呢?比如大家日常开发时候有没有这样的烦恼:项目是基于 SpringCloud 或者是 dubbo 这样的分布式服务,你需要依...转载 2018-10-15 13:54:42 · 755 阅读 · 0 评论 -
Dubbo入门——搭建一个最简单的Demo框架
Dubbo背景和简介Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本。 缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护 垂直应用框架(MVC) 垂直应用架构解决了单一应用架构所面临的扩容问题,流...转载 2018-10-14 21:45:50 · 212 阅读 · 0 评论 -
微服务中 Dubbo 和 Spring Cloud 架构技术路线对比
本文主要围绕微服务的技术选型、通讯协议、服务依赖模式、开始模式、运行模式等几方面来综合比较Dubbo和Spring Cloud 这2种开发框架。架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台,以此稳妥地实施项目的微服务化改造或开发进程。微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,...转载 2018-10-14 21:42:04 · 679 阅读 · 0 评论 -
Dubbo分布式服务框架
Dubbo是是一个高性能,基于Java的RPC框架,由阿里巴巴开源。一个分布式的服务框架。可以实现SOA(面向服务的架构)架构。 Dubbo使用的公司:京东、当当、阿里巴巴、中国电信等等。分布式服务架构的由来以下式架构演变过程(以下案例纯粹为了说明问题,跟业务本身无关):早期,电信只有座机的时候,系统只有一个打电话的功能和一个计费的功能。因为业务单一,所以只有一个系统。 单一业务...转载 2018-10-14 21:38:28 · 338 阅读 · 0 评论 -
一个基于 Dubbo 的微服务改造实践
微服务的理论已经够多,今天不妨看一个实战案例。基于微服务或者 SOA 的自动化测试系统每个公司都有自己的特有的,我今天就主要介绍一下,我们研发的一套 mock 测试系统。目前面临的问题1、测试人员面临的测试问题我公司目前用的是基于 Dubbo 的微服务改造,服务之间的调用链路冗长,每个服务又是单独的团队在维护,每个团队又在不断的演进和维护各个服务,那么对测试人员将是非常大的挑战...转载 2018-10-14 21:31:07 · 1035 阅读 · 0 评论 -
Spring 中的统一异常处理
来源:Frapples ,frapples.github.io/articles/2018-09-01-ecbc.html在具体的SSM项目开发中,由于Controller层为处于请求处理的最顶层,再往上就是框架代码的。因此,肯定需要在Controller捕获所有异常,并且做适当处理,返回给前端一个友好的错误码。不过,Controller一多,我们发现每个Controller里都有...转载 2018-10-14 21:18:41 · 219 阅读 · 0 评论 -
IO与Netty了解一下!网络通信框架是这样构成的!
随着互联网应用对高并发、高可用的要求越来越高,传统的垂直架构由于其自身的局限性逐渐被分布式、弹性伸缩的微服务架构替代。微服务将单体应用拆分为多个独立的微服务应用,每个应用独立运行,每个服务间通过远程调用(RPC)进行通信,此时高性能的通信方式就显得尤为重要,实现RPC通信的底层框架Netty由于其稳定性、拓展性以及框架成熟度的优秀表现,在RPC框架领域应用广泛,著名的Hadoop、Dubbo、...转载 2018-10-14 20:52:42 · 650 阅读 · 0 评论 -
作为Java高级工程师的你们,是如何一步步从筑基修炼到飞升的?
做为Java高级工程师的你们,是如何理解:点、线、面、体的?作为Java高级工程师的你们,是如何一步步从筑基修炼到飞升的?前言:想写一写"点线面体"有一段时间了,但一直未动笔,怕说不好。我发现我最近经常也在说某某是点状的模式,没有形成体系。那么对于自己也不够那么清晰的内容做一下梳理还是非常有必要的。知之为知之,不知为不知,是知也!聊聊点、线、面、体点、线、面、体,每一个定位背后...原创 2018-09-28 15:55:00 · 629 阅读 · 0 评论 -
你应该知道的JVM的那些事儿
前言对于C语言开发的程序员来说,在内存管理方面,必须负责每一个对象的生命周期,从有到无。对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄露和内存溢出等问题也不太容易出现,不过也正是因为把内存管理交给了虚拟机,一旦运行中的程序出现了内存泄露问题,给排查过程造成很大困难。所以只有理解了Java虚拟机的运行机制,才能够运筹帷幄于各种代码。本文以...转载 2018-09-28 15:46:52 · 232 阅读 · 0 评论 -
怎么回答“分布式架构”才能让面试官满意?
简介作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝,如若无人,让不懂技术的妹子看你时眼神迷离,就好想落霞与孤鹜齐飞!分布式架构是一个非常复杂的体系,任何技术都不是孤立的存在,任何技术都无法适应所有场景。作为一名分布式系统架构或者资深研发人员,我们必须尽可能多的学习与...原创 2018-09-27 16:36:17 · 5034 阅读 · 0 评论 -
项目经验不丰富、技术不突出的程序员怎么打动面试官?
前言相信不少的程序员都有过类似的困惑:如果我没有大型的项目经历,也不能靠技术征服面试官,那我要怎么才能给面试官留下一个好印象呢?按照本人的面试经验来说,面试主要看几点:项目经验+基本技术+个人潜力关于项目经验我认为并发编程网的创始人方腾飞老师讲的一段话非常好:介绍产品时面试官会考察应聘者的沟通能力和思考能力,我们大部分情况都是做产品的一个功能或一个模块,但是即使是这样,自己...原创 2018-10-11 22:04:31 · 623 阅读 · 0 评论 -
SpringCloud微服务基础
单点系统架构传统项目架构传统项目分为三层架构,将业务逻辑层、数据库访问层、控制层放入在一个项目中。优点:适合于个人或者小团队开发,不适合大团队开发。 分布式项目架构根据业务需求进行拆分成N个子系统,多个子系统相互协作才能完成业务流程子系统之间通讯使用RPC远程通讯技术。优点:1.把模块拆分,使用接口通信,降低模块之间的耦合度。2.把项目拆分成若干个子项目,不...转载 2018-09-29 17:36:33 · 372 阅读 · 0 评论