Java
文章平均质量分 76
大G哥
Java技术分享
展开
-
分布式锁(redis/mysql)
单台机器所能承载的量是有限的,用户的量级上万,基本上服务都会做分布式集群部署。很多时候,会遇到对同一资源的方法。这时候就需要锁,如果是单机版的,可以利用java等语言自带的并发同步处理。如果是多台机器部署就得要有个中间代理人来做分布式锁了。常用的分布式锁的实现有三种方式。基于redis实现(利用redis的原子性操作setnx来实现)基于mysql实现(利用mysql的innodb的行锁来实现,有...原创 2018-04-15 23:08:55 · 2216 阅读 · 0 评论 -
Java常用算法原理剖析
用Java实现的所有算法(用于教育)这些只是为了演示的目的。在Java标准库中有许多不同类型的实现,由于性能原因这些要好得多。排序算法气泡从维基百科气泡排序,叫做下沉排序,是一种简单的排序算法,反复遍历要排序的列表,比较每一对相邻的项目,并在排序错误的情况下交换。遍历列表将被重复,直到不需要交换,这表明列表已被排序。特性最差情况下的性能O(n^2)最佳案例表现O(N)平均病例性能O(n^2)查看算...原创 2018-05-17 17:55:58 · 337 阅读 · 0 评论 -
Java锁优化
Java锁优化应用程序在并发环境下会产生很多问题,通常情况下,我们可以通过加锁来解决多线程对临界资源的访问问题。但是加锁往往会成为系统的瓶颈,因为加锁和释放锁会涉及到与操作系统的交互,会有很大的性能问题。那么这个时候基于锁的优化手段就显得很重要了。一般情况下,可以从两个角度进行锁优化:对单个锁算法的优化和对锁粒度的细分。1. 单个锁的优化自旋锁: 非自旋锁在未获取锁的情况会被阻塞,之后再唤醒尝试...转载 2018-06-02 20:26:41 · 182 阅读 · 0 评论 -
Spring-Mybatis运行机制概括
前言本篇是继上篇MyBatis原理概括延伸的,所以如果有小伙伴还没看上篇博文的话,可以先去看下,也不会浪费大家太多的时间,因为本篇会结合到上篇叙述的相关内容。好,切入正题,这篇主要讲一个点,就是我们在结合spring去使用mybatis的时候,spring为我们做了什么事。还是老套路,我们只讲过程思路,具体细节还望各位小伙伴找时间去研究,如果我全讲了,你们也都看懂了,那你们最多也就是感到一种获得感...转载 2018-06-04 16:09:22 · 874 阅读 · 0 评论 -
spring提供的关于bean生命周期的接口
先看一张图:spring4.x 企业实战spring版本:4.3.171、bean自身的生命周期接口1.1、实现 InitializingBean、DisposableBean 接口这2个接口,会要求你实现2个方法@Componentpublic class BeanSelf implements InitializingBean, DisposableBean { @Override...转载 2018-06-05 13:37:36 · 1524 阅读 · 0 评论 -
阿里架构师眼里JVM可以说的那些事
前言对于C语言开发的程序员来说,在内存管理方面,必须负责每一个对象的生命周期,从有到无。对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄露和内存溢出等问题也不太容易出现,不过也正是因为把内存管理交给了虚拟机,一旦运行中的程序出现了内存泄露问题,给排查过程造成很大困难。所以只有理解了Java虚拟机的运行机制,才能够运筹帷幄于各种代码。本文以HotS...原创 2018-06-05 13:48:28 · 542 阅读 · 0 评论 -
重构-改善既有代码的设计-简化函数调用
Rename Method 函数改名问题函数的名称未能揭示函数的用途。方法修改函数名称。动机好的函数需要有一个清晰的函数名。保证一看就懂Add Parameter 添加参数问题某个函数需要从调用端得到更多信息。方法为此函数添加一个对象参数,让该对象带进函数所需信息。动机如果发现缺少参数,当然就需要添加参数。但是在添加之前,先思考是否一定要添加。或者实用参数对象Remove Parameter 移除...原创 2018-06-12 17:39:25 · 219 阅读 · 0 评论 -
Spring IOC 容器源码分析
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。阅读建议:读者至少需要知道怎么配置 Spring,了解 Spr...原创 2018-06-05 19:40:49 · 197 阅读 · 0 评论 -
设计模式之策略模式
策略模式即设计不同的策略应用于不同的实现上。代码实现如下://动物public abstract class Animal{ private Behavior behavior;//让animal和behavior组合起来 //可调用set方法来给每种不同的动物加不同的行为 public void setBehavior(Behavior behavior){ ...原创 2018-06-20 20:26:45 · 157 阅读 · 0 评论 -
为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 Spring Boot 之时,我自己也在思考: Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot? 传统企业使用 Spring Boot 会...原创 2018-06-13 15:11:27 · 329 阅读 · 0 评论 -
MySQL常见的两种存储引擎:MyISAM与InnoDB的那些事
一 MyISAM1.1 MyISAM简介MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了Inn...原创 2018-06-06 16:39:53 · 338 阅读 · 0 评论 -
MySQL海量数据处理及优化
什么是mysqlMySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。为什么是mysqlMySQL是一种关系数据库管理系统,关系数据库将...原创 2018-06-06 16:43:46 · 1548 阅读 · 0 评论 -
Spring AOP 源码分析——创建代理对象
1.简介与筛选合适的通知器相比,创建代理对象的过程则要简单不少,本文所分析的源码不过100行,相对比较简单。在接下里的章节中,我将会首先向大家介绍一些背景知识,然后再去分析源码。那下面,我们先来了解一下背景知识。2.背景知识2.1 proxy-target-class在 Spring AOP 配置中,proxy-target-class 属性可影响 Spring 生成的代理对象的类型。以 XML ...原创 2018-06-21 19:39:06 · 566 阅读 · 0 评论 -
重构-改善既有代码的设计--重构,第一个案例
什么是重构在不改变代码外在行为的前提下,对代码做出修改以改进程序内部的结构简单地说就是在代码写好后改进它的设计谁该阅读这本书专业程序员(能够提高你的代码质量)资深设计师和架构规划师(理解为什么需要重构,哪里需要重构)阅读技巧带着疑问去读:如果你想要知道重构是什么。第1章够了如果你想要知道为什么要重构,第1,2章如果你想知道该在什么地方重构,第3章如果你想进行重构,第1,2,3,4章。并根据目录选读...原创 2018-06-07 16:16:43 · 291 阅读 · 0 评论 -
Java集合之HashMap源码解析
HashMapHashMap 是 Map 的一个实现类,它代表的是一种键值对的数据存储形式。大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。HashMap最多只允许一条记录的键为null,允许多条记录的值为null。不保证有序(比如插入的顺序)、也不保证序不随时间变化。jdk 8 之前,其内部是由数组+链表来实现的,而 jdk 8 对于链表长度超过 8 的链表将转...原创 2018-06-07 16:20:05 · 227 阅读 · 0 评论 -
spring异常处理
还是上次数据不能为空的问题,写到了C层测试。先写一行测试代码,先期待一个200,但是我们是知道的,因为没有学科类别,这肯定会抛出异常,我们就是想看看Spring捕获这个异常之后给出的反馈是什么状态码。@Testpublic void saveTest() throws Exception { logger.debug("基础测试数据准备"); MeasurementUnitCat...原创 2018-06-07 16:32:28 · 435 阅读 · 0 评论 -
Dubbo服务消费者调用过程
上图是服务消费的主过程:首先通过ReferenceConfig类的private void init()方法会先检查初始化所有的配置信息后,调用private T createProxy(Map<String, String> map)创建代理,消费者最终得到的是服务的代理, 在createProxy接着调用Protocol接口实现的<T> Invoker<T>...原创 2018-06-14 16:46:45 · 14549 阅读 · 1 评论 -
【springboot-01】整合quartz
1、什么是quartz? quartz是一个开源的定时任务框架,具备将定时任务持久化至数据库以及分布式环境下多节点调度的能力。当当的elastic-job便是以quartz为基础,结合zookeeper开发出来的一款产品。 2、整合springboot示例 项目使用springboot提高开发效率,并将定时任务持久化到mysql数据库中。2.1)引入quartz依赖 1 <depende...原创 2018-06-07 22:14:11 · 204 阅读 · 0 评论 -
SpringCloud-微服务配置统一管理SpringCloud Config
前言:对于应用,配制文件通常是放在项目中管理的,它可能有spring、mybatis、log等等各种各样的配置文件和属性文件,另外你还可能有开发环境、测试环境、生产环境等,这样的话就得一式三份,若是传统应用还好说,如果是微服务呢,这样不光配置文件有可能冗余而且量大,繁重复杂,不好维护,这样的话就需要一个配置文件的统一管理了。一、SpringCloud Config简介 SpringCloud C...原创 2018-06-22 15:42:45 · 251 阅读 · 0 评论 -
分布式工具的一次小升级⏫
前言之前在做 秒杀架构实践 时有提到对 distributed-redis-tool 的一次小升级,但是没有细说。其实主要原因是:秒杀时我做压测:由于集成了这个限流组件,并发又比较大,所以导致连接、断开 Redis 非常频繁。最终导致获取不了 Redis connection 的异常。池化技术这就是一个典型的对稀缺资源使用不善导致的。何为稀缺资源?常见的有:线程数据库连接网络连接等这些资源都有共同...原创 2018-06-08 14:29:01 · 253 阅读 · 0 评论 -
成为Java高级程序员需要掌握哪些?
section 11、Core Java,就是Java基础、JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不足够,知其然还要知其所以然,JDK的源代码写的非常好,要经常查看,对使用频繁的类,比如String,集合类(List,Map,Set)等数据结构要知道它们的实现,不同的集合类有什么区别,然后才能知道在一个具体的场合下使用哪个集合类更适合、更高效,这些内容直接看源代码就OK了2、多线程并发...原创 2018-06-08 14:38:06 · 468 阅读 · 0 评论 -
Mybatis面试题
Mybatis常见面试题#{}和${}的区别是什么?{}和${}的区别是什么?在Mybatis中,有两种占位符#{}解析传递进来的参数数据${}对传递进来的参数原样拼接在SQL中#{}是预编译处理,${}是字符串替换。使用#{}可以有效的防止SQL注入,提高系统安全性。当实体类中的属性名和表中的字段名不一样 ,怎么办 ?当实体类中的属性名和表中的字段名不一样 ,怎么办 ?第1种: 通过在查询的sq...原创 2018-06-08 21:41:11 · 451 阅读 · 0 评论 -
MySQL 内核深度优化
MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务型)、存在多个分支、读写效率瓶颈等问题。所以如何用好MYSQL变得至关重要,一方面需要通过MYSQL优化找出系统读写瓶颈,提高数据库性能;另一方面需要合理涉及数据结构、调整参数,以提高用...原创 2018-06-24 21:11:07 · 237 阅读 · 0 评论 -
Java Map 通过 key 或者 value 过滤
今天写根过滤的时候一下子有点愣眼,先是想到用 Java 原生的 map 循环查出来,但是觉得太 low, 后面思考了一下可以用 Java8 的 Lambda,写完了,又发现 Google Guava 有现成的方法,这里一一列出来,供参考使用。首先提示,如果照搬我的代码的话别忘了引这些依赖<dependencies> <dependency> ...原创 2018-06-29 15:57:40 · 3592 阅读 · 0 评论 -
Netty-ChannelHandler-ChannelPipeline
ChannelHandlerChannel生命周期状态描述ChannelUnregisteredChannel已经被创建,但未注册到EventLoopChannelRegisteredChannel已经被注册到了EventLoopChannelActiveChannel处于活动状态(已经连接到它的远程节点)。现在Channel可以接受和发送数据ChannelInActiveChannel没有连接到...原创 2018-06-10 19:21:17 · 222 阅读 · 0 评论 -
RocketMQ负载均衡特性
Producer生产者ProducerGroup用来表示一个发送消息应用,一个 Producer Group 下包含多个 Producer 实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个 Producer 对象。一个 Producer Group 可以发送多个 Topic 消息。Producer Group 作用如下:(1)标识一类 Producer(2)可以通过运维工具查询...原创 2018-06-10 21:08:57 · 1604 阅读 · 0 评论 -
Java面试通关要点汇总集
框架篇SpringBeanFactory 和 ApplicationContext 有什么区别Spring Bean 的生命周期Spring IOC 如何实现说说 Spring AOPSpring AOP 实现原理动态代理(cglib 与 JDK)Spring 事务实现方式Spring 事务底层原理如何自定义注解实现功能Spring MVC 运行流程Spring MVC 启动流程Spring 的单...原创 2018-06-10 22:50:14 · 164 阅读 · 0 评论 -
Collection Framework的Iterator实现
在比较HashMap和ConcurrentHashMap的不同之处发现了一个细节——关于Iterator的实现的不同,其实HashMap和ConcurrentHashMap还有更多不同的地方,这也是面试经常问到的问题,有一篇文章我觉得讲的很好了,Java进阶(六)从ConcurrentHashMap的演进看Java多线程核心技术。Iterator是一种设计模式,在Java Collection F...原创 2018-06-19 14:36:00 · 204 阅读 · 0 评论 -
Redis源码剖析——客户端和服务器
Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接。这篇文章将通过源码看看客户端和服务器的底层数据结构和工作过程在Redis这种一对多的服务模式下,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用由I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进...原创 2018-06-19 15:33:05 · 210 阅读 · 0 评论 -
阿里分布式服务框架Dubbo的架构总结
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。总...原创 2018-06-26 16:46:23 · 187 阅读 · 0 评论 -
分布式事务及其一致性协议
一:什么是事务。事务是由一系列对系统中的数据进行访问和更新的操作所组成的一个程序执行逻辑单元。狭义上的事务指的就是数据库的事务。二:事务(ACID)的特性。事务具有四个特性:1.一致性(Consistency):事务的操作需要从一个一致性状态到另一个一致性状态。如果一次事务中,有些操作更新成功,有些操作更新失败,这就是不一致的。2.原子性(Automicity):指事务是一个原子操作序列单元。一个...原创 2018-07-01 22:46:04 · 325 阅读 · 0 评论 -
并发——读写锁初探
适用场景读操作频发,写操作不频繁。两个线程同时读取同一个共享资源没有任何问题如果一个线程对共享资源进行写操作,此时就不能有其他线程对共享资源进行读写条件分析写操作的优先级高于读操作,在读操作频繁的场景下,如果写操作没有高于读操作的优先级,就会导致写操作线程“饿死”的情况发生读操作触发条件:没有线程正在执行写操作没有线程在等待执行写操作写操作触发条件:没有线程正在执行读写操作代码实现public c...原创 2018-07-09 17:20:51 · 227 阅读 · 0 评论 -
15个顶级Java多线程面试题及答案
在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的。他们会问面试者很多令人混淆的Java线程问题。面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面。1. 现在有T1、T2、T3三个线程...原创 2018-06-27 22:48:09 · 175 阅读 · 0 评论 -
Java程序员最喜欢的五大神器
程序员留给大家的印象,不修边幅,沉默寡言。但程序员对于自己使用的神器,相当舍得花钱。今天咱们梳理下程序员最喜欢五大神器。分享之前我推荐下我自己建的Java学习群:Java进阶群:766529531,欢迎进阶中的Java小伙伴进群交流学习。1.Mac电脑Mac电脑在一定程度上体现了极致,高品质,这点和优秀程序员内在气质是吻合的,程序员对于自己代码都会一直不停在优化,重构以期望做到做好。苹果电脑在设计...原创 2018-07-10 17:12:17 · 2118 阅读 · 2 评论 -
技术变化那么快,程序员如何做到不被淘汰?
中国有很多年轻人,他们18,9岁或21,2岁,通过自学也写了不少代码,他们有的代码写的很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错误的认识和观点左右,缺乏对系统,对程序的整体理解能力,这些人,一个网上的朋友说得很好,他们实际fans,压根没有资格称为程序员,但是据我所知,不少小网络公司的Cfans,拿着吓人的工资,做着吓人的项目,项目的结局通常也很吓人。 程序员基本素质: ...原创 2018-07-10 17:43:35 · 428 阅读 · 0 评论 -
Java面试题总结
1. JAVA 的基本数据类型有哪些 ? String 是不是基本数据类型 ?Java 有 8 种基本数据类型: byte int short long double float Boolean charbyte int short long 都属于整数类型.Double float 属于浮点类型.Boolean 为布尔类型Char 为字符型String 不是基本数据类型....转载 2018-07-16 20:42:11 · 166 阅读 · 0 评论 -
一个两年Java工程师的面试总结
前言16年毕业到现在也近两年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要特别感谢点我达的领导及HR,真的非常非常好,很感谢他们一直的关照和指导。面试整体事项简历要准备好,联系方式一定要正确清晰醒目,项目经历按照时间倒序阐述,注意描述自己在项目中承担的职责,简历...原创 2018-07-16 22:07:42 · 1406 阅读 · 0 评论 -
打包SpringBoot -- 可执行Jar包
最近开始学习SpringCloud,想给项目里的模块单独打包,方便多次部署。可是在网上找了很多的解决方案,都没有操作成功的。最后查看官网的文档才找到解决方案,顺便把成功的打包方式贴出来吧。首先,修改pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/...原创 2018-07-03 22:34:41 · 298 阅读 · 0 评论 -
Java应用性能调优
性能诊断工具性能诊断一种是针对已经确定有性能问题的系统和代码进行诊断,还有一种是对预上线系统提前性能测试,确定性能是否符合上线要求。本文主要针对前者,后者可以用各种性能压测工具(例如 JMeter)进行测试,不在本文讨论范围内。针对 Java 应用,性能诊断工具主要分为两层:OS 层面和 Java 应用层面(包括应用代码诊断和 GC 诊断)。OS 诊断OS 的诊断主要关注的是 CPU、Memory...原创 2018-06-28 16:51:06 · 225 阅读 · 0 评论 -
Java程序员进阶全过程
学习Java,书籍是必不可少的学习工具之一,尤其是对于自学者而言。废话不多说,下边就给大家推荐一些Java进阶的好书。第一部分:Java语言篇1.《Java编程规范》 适合对象:初级、中级介绍:这本书的作者是被誉为Java之父的James Gosling,入门者推荐阅读,对基础的讲解很不错。2.《Java编程思想》 适合对象:初级、中级介绍:豆瓣给出了9.1的评分,全球程序员广...原创 2018-07-17 14:11:13 · 7212 阅读 · 0 评论