spring
文章平均质量分 79
javarrr
分享者java菜
展开
-
在Spring MVC中使用Apache Shiro安全框架
我们在这里将对一个集成了Spring MVC+Hibernate+Apache Shiro的项目进行了一个简单说明。这个项目将展示如何在Spring MVC 中使用Apache Shiro来构建我们的安全框架。 阅读文章前,您需要做以下准备: Maven 3环境 Mysql-5.6+ JDK1.7+ git环境 git.oschina.net帐号 Apache Tomcat 7+ ...原创 2018-09-04 21:15:51 · 396 阅读 · 0 评论 -
RabbitMQ指南(中)
在上一篇文章中,介绍了使用RabbitMQ的Hello World例子, 以及如何创建一个work queue。在work queue的例子中每条消息都只会被传递到一个work queue中。 在这篇文章中我们将会学习另一种完全不同的传递消息的方式——每条消息将会被传递给所有的consumer,这种模式一般被称为“发布/订阅”。发布/订阅(Publish/Subscribe) 为了说明这种模...原创 2018-09-07 19:33:41 · 207 阅读 · 0 评论 -
RabbitMQ指南(下)
在上一小节中我们改进了log系统,由于使用fanout类型的exchange只能进行全局的广播,因此我们使用direct类型的exchange做了代替, 使得我们可以选择性的接收消息。尽管使用fanout exchange改进了log系统,但它仍然有限制——不能基于多个条件做路由。Topics 在log系统中可能不只是基于不同的日志级别作订阅,也可能会基于日志的来源。你也许听过Unix下名为...原创 2018-09-07 20:42:13 · 665 阅读 · 0 评论 -
做一次面向对象的体操:将JSON字符串转换为嵌套对象的一种方法
能不能把这个JSON串转成相应的对象,更易于使用呢? 为了方便讲解,这里重复写下JSON串。{ “item:s_id:18006666”: “1024”, “item:s_id:18008888”: “1024”, “item:g_id:18006666”: “6666”, “item:g_id:18008888”: “8888”, “item:num:18008888”:...原创 2018-09-11 20:14:17 · 224 阅读 · 0 评论 -
【MyBatis源码分析】环境准备
前言 之前一段时间写了【Spring源码分析】系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章【MyBatis源码分析】,在【MyBatis源码分析】文章的基础之上,可以继续分析数据库连接池、Spring整合MyBatis源码、Spring事物管理tx等等。【MyBatis源码分析】整个文章结构相较【Spring源码分析】稍微改一改,后者会在每一部...原创 2018-09-05 21:46:35 · 163 阅读 · 0 评论 -
Java程序员月薪三万,需要技术达到什么水平?
最近跟朋友在一起聚会的时候,提了一个问题,说Java程序员如何能月薪达到二万,技术水平需要达到什么程度?人回答说这只能是大企业或者互联网企业工程师才能拿到。也许是的,小公司或者非互联网企业拿二万的不太可能是码农了,应该已经转管理。还有区域问题,这个不在我的考虑范围内,因为除了北上广深杭,其他地方也很难达到。还有人提到这个水平不止2w,其实工资是跟面试表现有关的,也跟其他综合水平有关,比如你是9...原创 2018-09-16 15:17:13 · 2834 阅读 · 0 评论 -
RabbitMQ指南(上)
RabbitMQ是一个消息中间件,在一些需要异步处理、发布/订阅等场景的时候,使用RabbitMQ可以完成我们的需求。 下面是我在学习RabbitMQ的过程中的一些记录,我将会用三篇文章来从RabbitMQ的Hello World介绍起,到最后的通过RabbitMQ实现RPC调用, 相信看完这三篇文章大家应该会对RabbitMQ的基本概念和使用有一定的了解。说明:由于RabbitMQ支持许...原创 2018-09-06 20:33:31 · 171 阅读 · 0 评论 -
从 MVC 到前后端分离
本文首先描述 MVC 模式是什么,然后针对 MVC 的不足发表了作者的个人观点,随后引出了基于 REST 架构实现前后端分离的方案,最后使用了 Java 的 Spring 框架搭建了一个简单的 REST 框架。全文从原理到实战,希望对于想了解如何实现前后端分离架构的朋友有所帮助。由于篇幅有限,且个人水平不足,难免会出现一些遗漏或不足之处,恳请大家提出宝贵意见或建议,谢谢!1 理解 MVC M...原创 2018-09-12 16:35:13 · 336 阅读 · 0 评论 -
MySQL常用30种SQL查询语句优化方法
1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。如:select id from t where num is ...原创 2018-09-17 15:31:38 · 134 阅读 · 0 评论 -
Spring 核心:FactoryBean
我们先简单分析一下mybatis starter的编写,然后再编写自定义的starter。mybatis中的autoconfigure模块中使用了一个叫做MybatisAutoConfiguration的自动化配置类。这个MybatisAutoConfiguration需要在这些Condition条件下才会执行:@ConditionalOnClass({ SqlSessionFacto...原创 2018-09-10 20:49:31 · 167 阅读 · 0 评论 -
Java异常处理的9个最佳实践
无论你是新手还是资深程序员,复习下异常处理的实践总是一件好事,因为这能确保你与你的团队在遇到问题时能够处理得了它。在 Java 中处理异常并不是一件易事。新手觉得处理异常难以理解,甚至是资深开发者也会花上好几个小时来讨论是应该抛出抛异常还是处理异常。这就是为何大多数开发团队都拥有一套自己的异常处理规范。如果你初进团队,你也许会发现这些规范和你曾使用的规范大相径庭。尽管如此,这里还是有一...原创 2018-09-10 21:21:29 · 131 阅读 · 0 评论 -
深入Java内存模型
你可以在网上找到一大堆资料让你了解JMM是什么东西,但大多在你看完后仍然会有很多疑问。happen-before是怎么工作的呢?用volatile会导致缓存的丢弃吗?为什么我们从一开始就需要内存模型?通过这篇文章,读者可以学习到足以回答以上所有问题的知识。它包含两大部分:第一部分是硬件层次的大体架构,第二部分是深入OpenJdk源代码和实现。因此,即使你没有太深入Java,你可能也会对第一部分...原创 2018-09-13 15:10:46 · 200 阅读 · 0 评论 -
阿里Java架构师浅谈Java微服务架构设计
微服务架构模式(Microservice Architect Pattern)。近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体...原创 2018-09-18 21:50:07 · 240 阅读 · 0 评论 -
几句话了解Zookeeper工作原理
1、Zookeeper的角色领导者(leader),负责进行投票的发起和决议,更新系统状态。学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目...原创 2018-09-19 16:22:08 · 159 阅读 · 0 评论 -
Golang工程经验
Golang工程经验作为一个C/C++的开发者而言,开启Golang语言开发之路是很容易的,从语法、语义上的理解到工程开发,都能够快速熟悉起来;相比C、C++,Golang语言更简洁,更容易写出高并发的服务后台系统转战Golang一年有余,经历了两个线上项目的洗礼,总结出一些工程经验,一个是总结出一些实战经验,一个是用来发现自我不足之处Golang语言简介Go语言是谷歌推出的一种全新的编程...原创 2018-09-25 15:56:04 · 746 阅读 · 1 评论 -
记一次MySQL迁移并从MySQL5.6升级到5.7后查询慢了几十倍的问题
起因因为生产环境数据量越来越大,客户越来越多,项目功能也越来越多,项目本身也越来越多,导致之前的服务器内存、硬盘都已经渐渐的不够用了,当时出现了2种解决方案,增加服务器配置和新购服务器,但是就算是新增硬盘,也需要对数据库进行迁移,所以就采用了新购服务器的方案,并且因为之前是高效云盘,出现过IO占满的情况,所以对于新购的服务器采用了SSD硬盘,理论上速度会飞起来了,实际上我在新服务器上安装MySQ...原创 2018-09-25 19:31:43 · 1299 阅读 · 0 评论 -
JavaScript 数据类型检测终极解决方案
JavaScript 的数据类型检测是我们平时开发中经常会遇到的场景,小到基本数据类型大至各种引用数据类型的检测,都是我们需要掌握的知识点。本章会详细讲解 JavaScript 中各种不同数据类型的检测方法以及最后会实现一个数据类型检测的终极方法。红宝石书告诉我们,JavaScript 中的数据类型有 Undefined、Null、Boolean、Number、String、Object,其中前...原创 2018-09-20 14:48:07 · 135 阅读 · 0 评论 -
深度解析Java线程池的异常处理机制
前言今天小伙伴遇到个小问题,线程池提交的任务如果没有catch异常,那么会抛到哪里去,之前倒是没研究过,本着实事求是的原则,看了一下代码。正文小问题考虑下面这段代码,有什么区别呢?你可以猜猜会不会有异常打出呢?如果打出来的话是在哪里?: ExecutorService threadPool = Executors.newFixedThreadPool(1); threadP...原创 2018-09-26 17:46:19 · 221 阅读 · 0 评论 -
MySQL 8.0用户和角色管理
MySQL8.0新加了很多功能,其中在用户管理中增加了角色的管理,默认的密码加密方式也做了调整,由之前的sha1改为了sha2,同时加上5.7的禁用用户和用户过期的设置,这样方面用户的管理和权限的管理,也增加了用户的安全性。MySQL8.0中,mysql库中表的文件合并到数据根目录中的mysql.ibd中(MySQL8.0 Innodb引擎重构)。同时MySQL8.0可以使用SET PERSIST...原创 2018-10-11 16:29:54 · 1154 阅读 · 0 评论 -
深入理解Java中的底层阻塞原理及实现
谈到阻塞,相信大家都不会陌生了。阻塞的应用场景真的多得不要不要的,比如 生产-消费模式,限流统计等等。什么 ArrayBlockingQueue、 LinkedBlockingQueue、DelayQueue 等等,都是阻塞队列的实现啊,多简单!阻塞,一般有两个特性很亮眼:1. 不耗 CPU 等待;2. 线程安全;额,要这么说也 OK 的。毕竟,我们遇到的问题,到这里就够解决了。但是有没有想过...原创 2018-10-11 19:30:02 · 1195 阅读 · 0 评论 -
你真的会写java吗?
文章核心其实,本不想把标题写的那么恐怖,只是发现很多人干了几年java以后,都自认为是一个不错的java程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做java的同行们,只是希望读者看到此骗文章后,可以和我一样,心平气和的争取做一个优秀的程序员。讲述方向由于一直从事移动互联网相关工作,java开发中经常和移动端打交道或者做一些后端的工作,所以本篇文章更可能涉及...原创 2018-09-21 16:09:10 · 260 阅读 · 1 评论 -
HashMap深度分析
这次主要是分析下HashMap的工作原理,为什么我会拿这个东西出来分析,原因很简单,以前我面试的时候,偶尔问起HashMap,99%的程序员都知道HashMap,基本都会用Hashmap,这其中不仅仅包括刚毕业的大学生,也包括已经工作5年,甚至是10年的程序员。HashMap涉及的知识远远不止put和get那么简单。本次的分析希望对于面试的人起码对于面试官的问题有所应付** 一、先来回忆下我的面...原创 2018-09-22 14:53:36 · 257 阅读 · 0 评论 -
你不知道的京东数据库运维自动化体系建设之路
运维自动化来源于工作中的痛点,京东数据库团队面对的是商城成千上万的研发工程师,这种压力推动我们不断变革,然而变革不是一蹴而就,也经历过从手工到脚本化、自动化、平台化、智能化的艰难转变,所以说是需求在驱动运维体系的建设,而运维自动化的真谛在于解放运维人员,促进人率提升,减少人为故障,要学会培养自己“懒”这个好习惯。京东的自动化运维体系建设始于2012年,下面从两个方面进行介绍。京东数据库智能运维...原创 2018-10-05 16:00:44 · 983 阅读 · 0 评论 -
JVM难学?那是因为你没认真看完这篇文章
一:虚拟机内存图解JAVA程序运行与虚拟机之上,运行时需要内存空间。虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理。虚拟机管理内存数据区域划分如下图:数据区域分类:方法区: (Method Area)虚拟机栈 : (VM Stack)本地方法栈 : (Native Method Stack)堆: ...原创 2018-09-22 19:22:11 · 339 阅读 · 0 评论 -
HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!
前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍...原创 2018-09-27 19:49:19 · 196 阅读 · 0 评论 -
HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!
前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍...原创 2018-09-27 19:49:47 · 169 阅读 · 0 评论 -
Springboot应用缓存实践之:Ehcache加持
概述在如今高并发的互联网应用中,缓存的地位举足轻重,对提升程序性能帮助不小。而3.x开始的 Spring也引入了对 Cache的支持,那对于如今发展得如火如荼的 Spring Boot来说自然也是支持缓存特性的。当然 Spring Boot默认使用的是 SimpleCacheConfiguration,即使用ConcurrentMapCacheManager 来实现的缓存。但本文将讲述如何将 E...原创 2018-10-12 17:12:57 · 163 阅读 · 0 评论 -
深入分析JavaWeb Item6 — servletConfig 与servletContext详解
一、ServletConfig讲解首先看ServletConfig API文档1.1、配置Servlet初始化参数在Servlet的配置文件web.xml中,可以使用一个或多个标签为servlet配置一些初始化参数。例如: ServletConfigDemo1 gacl.servlet.study.ServletConfigDemo1 ...原创 2018-10-06 20:18:02 · 164 阅读 · 0 评论 -
Java HTTP 组件库选型看这篇就够了
最近项目需要使用 Java 重度调用 HTTP API 接口,于是想着封装一个团队公用的 HTTP client lib. 这个库需要支持以下特性:连接池管理,包括连接创建和超时、空闲连接数控制、每个 host 的连接数配置等。基本上,我们想要一个 go HTTP 标准库自带的连接池管理功能。域名解析控制。因为调用量会比较大,因此希望在域名解析这一层做一个调用端可控的负载均衡,同时可以对每个服...原创 2018-09-28 18:43:17 · 373 阅读 · 0 评论 -
分布式中几种服务注册与发现组件的原理与比较
前言在云计算和容器化技术发展火热的当下,对于微服务架构,服务注册与发现组件是必不可少的。在传统的服务架构中,服务的规模处于运维人员的可控范围内。当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定。在微服务应用中,服务实例的数量和网络地址都是动态变化的,这对系统运维提出了巨大的挑战。因此,动态的服务注册与发现就显得尤为重要。解决的问题在一个分布式系统中,服务注册与发现组件主要解决...原创 2018-10-07 17:56:05 · 657 阅读 · 0 评论 -
徒手撸框架--实现 RPC 远程调用
微服务,已经是每个互联网开发者必须掌握的一项技术。而 RPC 框架,是构成微服务最重要的组成部分之一。趁最近有时间。又看了看 dubbo 的源码。dubbo 为了做到灵活和解耦,使用了大量的设计模式和 SPI机制,要看懂 dubbo 的代码也不太容易。按照《徒手撸框架》系列文章的套路,我还是会极简的实现一个 RPC 框架。帮助大家理解 RPC 框架的原理。广义的来讲一个完整的 RPC 包含了很...原创 2018-09-29 16:25:32 · 594 阅读 · 0 评论 -
Java中如何模拟真正的同时并发请求?
有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了。Java 中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了。但是,这种请求,一般会存在启动的先后顺序了,算不得真正的同时并发!怎么样才能做到真正的同时并发呢?是本文想说的点,Java 中提供了闭锁 CountDownLatch, 刚好就用来做这种事就最合适了。只需要:开...原创 2018-10-15 14:13:47 · 196 阅读 · 0 评论 -
java集合框架:浅谈如何使用LInkedList实现队列(Queue)和堆栈(Stack)
Java中的LinkedList 是采用双向循环列表实现的。利用LinkedList 可以实现栈(stack)、队列(queue)感兴趣的可以加群:854393687下面写两个例子学生类:int stuId;public int getStuId() {return stuId;}public void setStuId(int stuId) {this.stuId = stu...原创 2018-10-08 20:59:04 · 382 阅读 · 0 评论 -
谈谈微信支付曝出的漏洞
一、背景昨天(2018-07-04)微信支付的SDK曝出重大漏洞(XXE漏洞),通过该漏洞,攻击者可以获取服务器中目录结构、文件内容,如代码、各种私钥等。获取这些信息以后,攻击者便可以为所欲为,其中就包括众多媒体所宣传的“0元也能买买买”。二、漏洞原理XXE漏洞此次曝出的漏洞属于XXE漏洞,即XML外部实体注入(XML External Entity Injection)。XML文档...原创 2018-09-29 20:28:04 · 475 阅读 · 0 评论 -
Kafka Controller Redesign方案
Kafka Controller 是 Kafka 的核心组件,在前面的文章中,已经详细讲述过 Controller 部分的内容。在过去的几年根据大家在生产环境中应用的反馈,Controller 也积累了一些比较大的问题,而针对这些问题的修复,代码的改动量都是非常大的,无疑是一次重构,因此,社区准备在新版的系统里对 Controller 做一些相应的优化(0.11.0及以后的版本),相应的设计方案见...原创 2018-10-15 17:07:50 · 162 阅读 · 0 评论 -
【干货】JDK动态代理的实现原理以及如何手写一个JDK动态代理
动态代理代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位。代理模式从类型上来说,可以分为静态代理和动态代理两种类型。在解释动态代理之前我们先理解一下静态代理:首先你要明白静态代理的作用我们有一个字体提供类,有多种实现(从磁盘,从网络,从系统)public interface FontProvider {Font...原创 2018-10-18 19:16:28 · 336 阅读 · 0 评论 -
分布式服务框架之远程通讯技术及原理分析
感兴趣的可以加群:854393687在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制...原创 2018-10-09 21:06:05 · 197 阅读 · 0 评论 -
JDK源代码学习-ArrayList、LinkedList、HashMap
ArrayList、LinkedList、HashMap是Java开发中非常常见的数据类型。它们的区别也非常明显的,在Java中也非常具有代表性。在Java中,常见的数据结构是:数组、链表,其他数据结构基本就是这两者的组合。复习一下数组、链表的特征。数组:在内存中连续的地址块,查找按照下标来寻址,查找快速。但是插入元素和删除元素慢,需要移动元素。链表:内存中逻辑上可以连接到一起的一组节点。每...原创 2018-10-16 19:37:24 · 127 阅读 · 0 评论 -
CentOS6.6下解压安装-5.7.10-linux-glibc2.5-i686.tar.gz
mysql-5.7.10-linux-glibc2.5-i686.tar.gz是目前最新版,二进制发布包,适合各种32为版本的发型版Linux,由于只有一个包,解压后配配就行,很方便,比较符合我的风格。环境:centos6.6 x861、下载 http://dev.mysql.com/downloads/mysql/http://dev.mysql.com/get/Downloads/MyS...原创 2018-10-10 17:38:43 · 1707 阅读 · 0 评论 -
shiro源码shiro的session的查询、刷新、过期与删除,你值得拥有
SecurityManager是shiro的核心,负责与shiro的其他组件进行交互;SessionManager是session的真正管理者,负责shiro的session管理;SessionsSecurityManager的start方法中将session的创建委托给了具体的sessionManager,是创建session的关键入口。SimpleSession是shiro完完全全的自己实...原创 2018-10-19 21:16:06 · 6729 阅读 · 1 评论