自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 手写SpringMVC实战,从Spring底层源码分析与设计

课程内容:1,三分钟熟悉Spring底层源码,你只需准备好鲜花即可;2,Spring源码很可怕?那是因为你没听过James的课;3,快速熟悉源码基础,洞析SpringMVC与Spring框架关系;4,@Controller,@Service这些注解算什么,一通百通;5,从Spring源码到手写SpringMVC流程分析,你一定能懂;6,手写SpringMVC实战;7,tomcat...

2018-08-30 18:10:28 870

原创 java封装实现Excel建表读写操作

对 Excel 进行读写操作是生产环境下常见的业务,网上搜索的实现方式都是基于POI和JXL第三方框架,但都不是很全面。小编由于这两天刚好需要用到,于是就参考手写了一个封装操作工具,基本涵盖了Excel表(分有表头和无表头)的创建,并对它们进行读写操作。为方便大家,有需要者可以点击文后点解下载直接使用哦,当然也可以根据自己需求举一反三自己定制,相信对于聪明的你也不是什么难事。话不多说,直接贴源码...

2018-08-28 15:51:13 932

原创 Java虚拟机16:Metaspace

被废弃的持久代想起之前面试的时候有面试官问起过我一个问题:Java 8为什么要废弃持久代即Metaspace的作用。由于当时使用的Java 7且研究重心不在JVM上,一下没有回答上来,今天突然想起这个问题,就详细总结一下这个问题。首先我们看一张JVM内存布局的图:注意到里面有一块METHOD AREA,它是一块线程共享的对象,名为方法区,在HotSpot虚拟机中,这块METHOD ...

2018-08-21 16:05:33 370

原创 JavaScript数组方法总结篇

方法在数组的尾部添加一个或多个元素,并返回数组的长度参数: item1, item2, …, itemX ,要添加到数组末尾的元素let arr = [1,2,3];let length = arr.push('末尾1','末尾2'); // 返回数组长度console.log(arr,length)// [1, 2, 3, "末尾1", "末尾2"] 5返回值: 数组的...

2018-08-18 20:43:32 282

原创 架构师细说 NGINX 的配置及优化

最近感觉很多东西在运用到一定的程度之后,会发现原来是自己了解到的不够。一方面限于实际运用到的不多,一方面可能是因为一开始没有进行全面认识。遂这里搜集整理了一番NGINX。一、nginx启动和关闭centos平台,源码安装的/usr/local/nginx/nginx # 启动/usr/local/nginx/nginx -s reload # 平滑重启/usr/local/ng...

2018-08-16 16:22:59 265

原创 JAVA消息确认机制之ACK模式

JMS API中约定了Client端可以使用四种ACK模式,在javax.jms.Session接口中:AUTO_ACKNOWLEDGE  = 1    自动确认 CLIENT_ACKNOWLEDGE  = 2    客户端手动确认    DUPS_OK_ACKNOWLEDGE  = 3    自动批量确认 SESSION_TRANSACTED  = 0    事务提交并确认此外Aci...

2018-08-16 16:17:37 4299

原创 八、 Java程序初始化的顺序

今天在写构造器方法的时候,遇到了一个小问题,由这个问题引发了一连串的思考,在一个Java类中变量与类的初始化执行顺序是什么样的呢?## 发现问题class Student{ private String name; void setName(String name){ this.name = name; } String getName(){...

2018-08-16 16:14:29 198

原创 Java动态代理-实战

只要是写Java的,动态代理就一个必须掌握的知识点,当然刚开始接触的时候,理解的肯定比较浅,渐渐的会深入一些,这篇文章通过实战例子帮助大家深入理解动态代理。说动态代理之前,要先搞明白什么是代理,代理的字面意思已经很容易理解了,我们这里撇开其他的解释,我们只谈设计模式中的 代理模式什么是代理模式(Proxy)定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用在代理模式...

2018-08-16 16:12:19 326

原创 Java并发编程笔记之ConcurrentHashMap原理探究

在多线程环境下,使用 HashMap 进行 put 操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用 ConcurrentHashMap 代替 HashMap。HashTable是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占,相当于所有线程进行读写时都去竞争一把锁,导致效率非常低下。ConcurrentHashM...

2018-08-15 17:31:35 224

原创 Java HashMap类源码解析

作为重要的常用集合,HashMap主要是提供键值对的存取,通过key值可以快速找到对应的value值。Hash表是通过提前设定好的规则计算一个元素的hash值来找到他在数组中的存储位置进行快速定位,假设有一个大小为10的数组,可以设定简单的计算规则为元素转为int后mod 10,由此元素的hash值一定会落在大小为10的数组内。由于不同元素可能会计算出相同的hash值,如例子中1和11都应该在下标...

2018-08-13 14:43:45 163

原创 Javascript 模块化指北

前言随着 Web 技术的蓬勃发展和依赖的基础设施日益完善,前端领域逐渐从浏览器扩展至服务端(Node.js),桌面端(PC、Android、iOS),乃至于物联网设备(IoT),其中 JavaScript 承载着这些应用程序的核心部分,随着其规模化和复杂度的成倍增长,其软件工程体系也随之建立起来(协同开发、单元测试、需求和缺陷管理等),模块化编程的需求日益迫切;JavaScript 对模块...

2018-08-11 18:37:50 140

原创 Java注解处理器使用注意事项

Java注解处理器使用注意事项目录[TOC]注解元注解@Target用于标记可以应用于哪些类型上.类型说明元素类型 适用场合 ANOTATION_TYPE 注解类型声明 PACKAGE 包 TYPE 类,枚举,接口,注解 METHOD 方法 CONSTRUCTOR 构造方法 FIELD 成员域,枚举常...

2018-08-07 21:21:25 513

原创 Spring Boot与Spring Cloud是什么关系?

SpringBoot先于Spring Cloud问世。SpringBoot相当于脚手架,借助他可以快速搭建房子,它本身不具备任何功能属性,值是普通房间,没有其他任何功能。什么是Spring BootSpring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,...

2018-08-06 17:42:13 354

原创 Java并发(4)- synchronized与CAS

引言上一篇文章中我们说过,volatile通过lock指令保证了可见性、有序性以及“部分”原子性。但在大部分并发问题中,都需要保证操作的原子性,volatile并不具有该功能,这时就需要通过其他手段来达到线程安全的目的,在Java编程中,我们可以通过锁、synchronized关键字,以及CAS操作来达到线程安全的目的。synchronized在Java的并发编程中,保证线程同步最为程...

2018-08-01 17:17:01 200

原创 Java String类源码解析

String直接继承Object含有一个char[] value,还有一个int hash默认值为0new String()的构造产生的是一个值为””的字符数组String( char value[], int offset, int count)当count=0且offset<=value.length时构造一个值为””的字符串。offset>0且offset+count...

2018-08-01 17:13:09 208

原创 SpringCloud微服务实战---服务的注册和发现(Eureka)

一、Spring Cloud简介Spring Cloud是基于SpringBoot的,为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。二、创建服务注册中心在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。Eureka:...

2018-07-30 20:14:16 1080

原创 如何优雅的使用和理解线程池

前言平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条:   可见线程池的重要性。简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建。 解耦作用;线程的创建于执行完全分开,方便维护。 应当将其放入一个池子中,可以给其他任务进行复用。线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把...

2018-07-30 17:24:01 625

原创 分布式唯一ID的几种生成方案

前言在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十分重要的。下面我们一一来列举一下,不一定全部适合,这些解决方案仅供你参考,或许对你有用。正文分布式ID的特性唯一性:确保生成的ID是全网唯一的。有序递增性:确保生成的ID是对于某个用户...

2018-07-30 16:14:15 1943

原创 Redis的使用

redis是干啥用的不用解释吧,要使用redis需要安装redis。说是安装其实就是解压而已,地址:https://github.com/MicrosoftArchive/redis/tags选择合适的下载,解压后如下所示:双击redis-server.exe就启用了redis服务。接下来是安装redis的可视化工具RedisDesktopManager,地址:https://...

2018-07-27 16:08:25 193

原创 深入理解java序列化机制

序列化是指对象通过写出描述自己状态的数值来记录自己的过程,即将对象表示成一系列有序字节,Java提供了将对象写入流和从流中恢复对象的方法。对象能包含其它的对象,而其它的对象又可以包含另外的对象。Java序列化能够自动的处理嵌套的对象。对于一个对象的简单域,writeObject()直接将其值写入流中。当遇到一个对象域时,writeObject()被再次调用,如果这个对象内嵌另一个对象,那么,wri...

2018-07-25 17:21:23 1391

原创 架构师教你Redis如何实现高可用架构

一、背景公司的业务在大量的使用redis,访问量大的业务我们有在使用codis集群,redis 3.0集群,说到redis 3.0集群,我们线上已经跑了半年多了,集群本身没有出现过任务问题,但是由于我们这个业务是海外的,集群建在aws的ec2上,由于ec2的网络抖动或者ec2本身的原因,导致主从切换,目前aws的技术正在跟进,这个集群目前的QPS 50w+,集群本身已经做到了高可用和横向扩展,...

2018-07-25 17:02:13 497

转载 架构师眼里的高并发架构

前言高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案。在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过来有着不少的血泪史,这里进行的总结,作为自己的归档记录,同时分享给大家。服务器架构...

2018-07-23 19:43:10 247

原创 面试 12:玩转 Java 快速排序

终于轮到我们排序算法中的王牌登场了。快速排序由于排序效率在同为 O(nlogn) 的几种排序方法中效率最高,因此经常被采用。再加上快速排序思想——分治法也确实非常实用,所以 在各大厂的面试习题中,快排总是最耀眼的那个。要是你会的排序算法中没有快速排序,我想你还是偷偷去学好它,再去向大厂砸简历。事实上,在我们的诸多高级语言中,都能找到它的某种实现版本,那我们 Java 自然不能在此缺席。...

2018-07-23 15:45:57 1643

原创 深入理解java虚拟机之垃圾收集策略与算法

程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而对于 Java 堆和方法区,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的正是这部分内存。判定对象是...

2018-07-22 20:25:32 131

原创 Java并发编程(1)-Java内存模型

本文主要是学习Java内存模型的笔记以及加上自己的一些案例分享,如有错误之处请指出。一 Java内存模型的基础1、并发编程模型的两个问题在并发编程中,需要了解并会处理这两个关键问题:1.1、线程之间如何通信?通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种: 共享内存和消息传递 。a) 在 共享内存 的并发模型里, 线程之间共享程序的公共状态,...

2018-07-22 20:20:10 192

原创 详解SQL性能优化十条经验

1.查询的模糊匹配尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用.解决办法:其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列...

2018-07-22 19:39:50 123

原创 使用 Redis 实现分布式锁

分布式锁是一个在很多环境中非常有用的原语,它是不同进程互斥操作共享资源的唯一方法。有很多的开发库和博客描述如何使用Redis实现DLM(Distributed Lock Manager),但是每个开发库使用不同的方式,而且相比更复杂的设计与实现,很多库使用一些简单低可靠的方式来实现。这篇文章尝试提供更标准的算法来使用Redis实现分布式锁。我们提出一种算法,叫做Relock,它实现了我们认为比...

2018-07-21 20:42:10 164

原创 MySQL集群安装与配置

MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。MySQL Cluster 能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但在 Cluster 级别上的存储引擎上做这个最简单。下面我们简单介绍MySQL Cluster如何安装与配置。基本设定管理(...

2018-07-21 20:25:06 713

原创 深入了解springmvc框架

1、springmvc简介1.1、mvc架构     MVC 是一种著名的设计模式,特别是在 Web 应用程序领域。模式全都是关于将包含业务数据的模块与显示模块的视图解耦的。这是怎样发生的?视图(例如,JSP 页面)怎样能够与其模型(例如,包含数据的 JavaBean)解耦?记得这句格言么?一个层次的重定向几乎可以解决计算机业中的所有问题。确实,在模型和视图之间引入重定向层可以解决问题。此...

2018-07-19 15:27:18 269

原创 浅谈Nginx服务器的内部核心架构设计

前言Nginx 是一个 免费的 , 开源的 , 高性能 的 HTTP 服务器和 反向代理 ,以及 IMAP / POP3代理服务器。 Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 是一个 Web 服务器,也可以用作 反向代理 , 负载均衡器 和 HTTP 缓存 。很多高知名度的网站都使用 Nginx ,如: Netflix , GitHub , S...

2018-07-18 21:01:44 2679

原创 JAVA NIO原理剖析

模型解释:BIO场景下,客户端(Client)发起连接请求,服务端接收到请求后,会分配一个业务线程处理这次访问,执行业务处理,写入响应流。无论是服务端还是客户端,数据的读写都是阻塞的。比如,服务端收到客户端的请求,想要获取客户端传过来的请求参数,就会执行读操作,此时,如果由于网络原因导致客户端写入数据慢或者服务端接收数据慢,这个过程会非常耗时,此时应用线程就只能阻塞等待数据可读,这个过程会...

2018-07-18 19:48:06 1693

原创 Redis的使用总结

安装下载好redis-2.8.12.tar.gz放在/usr/local下tar zxvf redis-2.8.12.tar.gz 解压缩cd /usr/local/redis-2.8.12makecd srcmake install默认的配置文件redis.conf,拷贝到固定的目录下mkdis /etc/redis 系统配置存放于/etc下cp red...

2018-07-18 19:41:31 138

原创 Dubbo的架构及用法

1. 介绍Dubbo |ˈdʌbəʊ| 是阿里下的一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案的开源框架。1.1. RPC需要解决的问题1.1.1. 通讯问题主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。...

2018-07-17 17:41:02 223

原创 10 个面试技巧帮你找到最好的工作 !

在开发者工作面试上,并没有大量的建议。我发现很多有才华的开发者都会在工作面试上存在困难,这是因为他们都把自己大部分时间花在他们所热爱的技术和开发上,而没有锻炼他们的面试技巧。,这是不幸的,因为拥有好的面试技巧,通过给你不熟悉领域上可能得不到的一些机会,真的能帮助你提高你的职业生涯。1.聘请专家为你创建简历我之前就说过该想法,但它如此重要,所以我再说一遍。除非你以写简历谋生,否则你不...

2018-07-17 14:04:13 250

原创 java程序员如何编写更好的单元测试?

在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。首先,让我们先来了解一下所谓的“代码覆盖率”。我找来了所谓的定义:代码覆盖率 = 代码的覆盖程度,一种度量方式。上面...

2018-07-16 18:04:36 424

原创 从java的NIO版hello world看java源码,我们能看到什么?

public class NBTimeServer { public static void main(String[] args) { try { Selector acceptSelector = SelectorProvider.provider().openSelector(); //创建一个新的server s...

2018-07-16 17:59:32 288

转载 阿里分布式服务框架Dubbo的架构总结

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。...

2018-07-14 20:48:25 242

原创 基于ZK实现分布式锁

引言ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它...

2018-07-14 20:34:21 341

原创 一个资深Java程序员从码农到大牛的进阶之路

在未来,我们享受良好的服务的同时,也会为别人提供更良好的服务,需要在技能上还是服务质量上的要求会更高更严格。平时要注意提高自己,不要被时代淘汰掉。在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变的职业大牛,这是一个涉及到自身专业知识储备和选择的大难...

2018-07-12 17:39:16 4313 2

原创 Nginx总结

What is NginxNginx(发音:engine X)是一款由俄罗斯程序设计师Igor Sysocy开发的,基于C语言的轻量级的HTTP服务器(相比于Apache、Lighttpd而言),同时是一个高性能的HTTP和反向代理服务器。Nginx 应用场景http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。虚拟主机。可以实现在一台服务器虚拟出多个网站。例...

2018-07-11 16:37:01 189

阿里P7大牛一对一教你如何手写SpringMVC框架

看后不过瘾?想学更多架构技术知识?那么请联系我

2018-10-10

空空如也

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

TA关注的人

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