- 博客(32)
- 收藏
- 关注
转载 品Spring源码:对@PostConstruct和@PreDestroy注解的处理方法
在bean的实例化过程中,也会用到一系列的相关注解。如@PostConstruct和@PreDestroy用来标记初始化和销毁方法。平常更多的是侧重于应用,很少会有人去了解它背后发生的事情。今天就来看下它们的源码,这样它们对你来说就不再是黑盒子了,而且学习源码对每个技术人来说都是必经之路。人们对事物的认知以及自己的做法,往往分为三个阶段:1、最初看一个事物,非常复杂,简直没有...
2019-09-16 17:20:14
240
转载 基于HTTP协议的几种实时数据获取技术
HTTP协议HTTP协议大家都很熟悉了,开始本文之前,首先简单回顾一下HTTP协议。HTTP协议是建立在TCP协议上的应用层协议,协议的本质是请求----应答:即对于HTTP协议来说,服务端给一次响应后整个请求就结束了,这是HTTP请求最大的特点,也是由于这个特点,HTTP请求无法做到的是服务端向客户端主动推送数据。但由于HTTP协议的广泛应用,很多时候确实又想使用HTTP协...
2019-09-12 17:51:17
217
转载 你居然还不知道Mysql存储引擎InnoDB分为内存架构、磁盘架构?
关于MySQL对于后端程序员的重要性不言而喻,而InnoDB也已经是MySQL默认的存储引擎。作为我们每天打交道的存储引擎,我们对它可能需要对它有更多的了解。这样对于很多灵异事件,才能从容应对。本次文章的内容大部分来自MySQL8.0的官方文档,之所以没有选择现成的资料,而去挑战自己的弱点——英语。是因为最近意识到,学习知识应该到知识的源头,可能最开始会很吃力,但我相信对于后...
2019-09-11 17:55:56
184
转载 如何基于 MySQL 主从模式搭建上万并发的系统架构?
一、主从复制基础概念在了解主从复制之前必须要了解的就是数据库的二进制日志(binlog),主从复制架构大多基于二进制日志进行。1.1 二进制日志管理说明二进制日志在哪?如何设置位置和命名?在my.cnf文件中使用 log-bin = 指定;命名规则为 mysql-bin.000000 (后为6位数字)二进制日志位置:mysql>showvariableslike...
2019-09-10 16:37:34
191
转载 应用集成mycat,实现mycat的高可用与mysql的读写分离
前情回顾通过前面的两篇博文:Mycat - 实现数据库的读写分离与高可用 和 Mycat - 高可用与负载均衡实现,满满的干货!,我们完成了如下图所示的组件部署组件结构图一SQL请求发给VIP,keepalived完成VIP的映射,并通过lvs将请求转发mycat,mycat根据SQL请求类型(DML SQL还是SELECT SQL,亦或是强制指定db节点)将SQL分发到具体...
2019-09-09 17:54:20
106
转载 不敢相信?System.currentTimeMillis()存在性能问题
System.currentTimeMillis()是极其常用的基础Java API,广泛地用来获取时间戳或测量代码执行时长等,在我们的印象中应该快如闪电。但实际上在并发调用或者特别频繁调用它的情况下(比如一个业务繁忙的接口,或者吞吐量大的需要取得时间戳的流式程序),其性能表现会令人大跌眼镜。直接看代码publicclassCurrentTimeMillisPerfDem...
2019-09-05 17:06:27
926
转载 mybatis多数据源踩坑,数据库连接经常断开问题
问题最近某项目上出现一个奇怪的问题,就是数据库经常隔几小时就报连接已关闭即使是加了如下配置也依然不行,网上也没找到什么文章解释这个坑test-on-borrow:truetest-while-idle:truevalidation-query:select1fromdual排查网上查不到,那就只能自己推敲猜测了。因为是mybatis多数据源的配置,所以每个db...
2019-09-04 15:46:11
1001
转载 没想到Spring Boot居然这么耗内存,有点惊讶
Spring Boot总体来说,搭建还是比较容易的,特别是Spring Cloud全家桶,简称亲民微服务,但在发展趋势中,容器化技术已经成熟,面对巨耗内存的Spring Boot,小公司表示用不起。如今,很多刚诞生的JAVA微服务框架大多主打“轻量级”,主要还是因为Spring Boot太重。JAVA系微服务框架No1-Spring Cloud介绍有Spring大靠山在,更新...
2019-09-02 17:46:11
5622
转载 通向架构师的道路——漫谈架构与设计文档的写作技巧
前言:这篇是一篇番外篇,没有太多代码与逻辑,完全是一种”软“技巧,但是它对于你如何成为一名合构的架构设计人员很重要。在此要澄清一点,架构师本身也是”程序员“,不是光动嘴皮子的家伙们,如果你不是一名程序虽出身那你根本谈不上也不可能成为一名架构师。那么架构师还有哪些是作为一名程序员来说不具备的呢?其中有一项能力就叫做”文档写作能力“。一、Soft Skill与Hard Skill...
2019-08-29 17:48:13
176
转载 如何在分布式系统中正确的使用缓存?别给你的项目带坑
作者:ZacharyZF来源:跨界架构师(公众号)“先写DB还是缓存” ?只要你开始运用缓存,这会是你第一个要认真思考的问题,否则在前方等待你的就是灾难。。。先写DB还是缓存?一个程序可以没有缓存,但是一定要有数据库。这是大家的普遍观点,所以数据库的重要性在你的潜意识里总是被放在了第一位。先DB再缓存如果不细想的话你可能会觉得,数据库操作失败了,自然缓存也不用操作了;数据库操...
2019-08-26 17:36:08
272
转载 我这样回答了Spring 5的新特性,面试官对我刮目相看
最近,有一个小伙伴拿到了自己满意的Offer,和他交谈的过程中得知他面试官问他关于Spring的问题比较多,其中最让面试官满意的就是自己回答关于Spring 5的知识点回答的不错。Spring5于2017年9月发布了通用版本,它是自2013年12月以来第一个主要的Spring版本。它提供了一些人们期待已久的改进,还采用了一种全新的编程范例,以反应式原则为基础。这个版本是很长时...
2019-08-23 16:02:13
102
转载 MySQL 性能调优技巧
技巧#1:确定MySQL的最大连接数对于MySQL的最大连接数,一次最好是发送5个请求到Web服务器。对Web服务器的5个请求中的一部分将用于CSS样式表,图像和脚本等资源。由于诸如浏览器缓存等原因,要获得准确的MySQL到Web服务器的请求比率可能很困难; 要想得到一个确切的数字,就需要分析Web服务器的日志文件。例如,可以手动访问Apache的“access_log”日志...
2019-08-21 16:39:43
86
转载 如何设计抗住100亿次请求的抢红包系统?(附GitHub代码)
1. 前言前几天,偶然看到了 《扛住100亿次请求——如何做一个“有把握”的春晚红包系统”》一文,看完以后,感慨良多,收益很多。正所谓他山之石,可以攻玉,虽然此文发表于2015年,我看到时已经过去良久,但是其中的思想仍然是可以为很多后端设计借鉴。同时作为一微信后端工程师,看完以后又会思考,学习了这样的文章以后,是否能给自己的工作带来一些实际的经验呢?所谓纸上得来终觉浅,绝知此...
2019-08-20 15:45:41
777
转载 一个天天用消息队列的人,不知道为啥用 MQ,这就有点尴尬
1、为什么要使用消息队列?分析:一个用消息队列的人,不知道为啥用,有点尴尬。没有复习这点,很容易被问蒙,然后就开始胡扯了。回答:这个问题,咱只答三个最主要的应用场景(不可否认还有其他的,但是只答三个主要的),即以下六个字:解耦、异步、削峰(1)解耦传统模式:传统模式的缺点:系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需...
2019-08-19 16:55:34
106
转载 三面蚂蚁金服,分享面试经历总结(已拿offer)
一面HashMap链表长度大于8后一定会转化为红黑树吗如场景是,HashMap初始数组长度为8,只有第一个元素中有值,且有八个都在一条链表上,其他数组其他七个位置都是空的,这时候为什么要转化为红黑树而不是存放到数组中呢?ConcurrentMashMap分段锁之间加了什么锁,读写之间是互斥的吗?三次握手后如果一直不连接会怎样volatile的实现原理是怎么样的,它是怎么实现从...
2019-08-16 17:52:30
226
转载 跨域问题,解决方案-Nginx反向代理
跨域问题,解决之道跨域问题,在日常开发过程中,是一个非常熟悉的名词。今天的话题,结合我之前的项目场景,讨论下《跨域问题,解决之道》。跨域是什么跨域问题,是由于JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。换句话说,只有JavaScript存在跨域问题。什么情况下会出现跨域不同源访问,就算是跨域了哟。那什么才算同源呢?一般来说,同源,即同一来源,包括主机...
2019-08-15 15:24:15
146
转载 超全面详解Java开发环境搭建(看完收藏)
在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必须阶段,只有开发环境搭建好了,方可进行开发,良好的开发环境搭建,为后续的开发工作带来极大便利。对于大公司来说,软件开发环境搭建工作一般是由运维来做,然而,对于小公司来说,这个工作就交给开发人员来做了,如开发经理。不管这个工作是交给运维人员做,还是交给开发人员做,能确定的是:做这件事的人,一定是个资深的人,如此,方可让开...
2019-08-13 15:47:21
322
转载 通过源码告诉你,阿里的RocketMQ事务消息到底牛逼在哪?
“得益于MQ削峰填谷,系统解耦,操作异步等功能特性,在互联网行业,可以说有分布式服务的地方,MQ都往往不会缺席。”由阿里自研的RocketMQ更是经历了多年的双十一高并发挑战,其中4.3.0版本推出了事务消息的新特性本文对RocketMQ 4.5.0版本事务消息相关的源码跟踪介绍,通过阅读可以知道:事务消息解决什么样的问题事务消息的实现原理及其设计亮点1、解决什么问题假设我所...
2019-08-12 16:10:00
124
转载 不敢相信,相同SQL下Mybatis查询结果和数据库竟然不一样!
一、问题描述mybatis查询无结果, 数据库运行相同sql查询出结果, 如下这是数据库记录image.png这是mybatis查询出的结果, 记录条数0image.png这是直接将控制台一模一样的sql查询语句放到Navicat执行的结果, 记录条数1image.png二、解决办法将where条件后的username = '${username}'和and password...
2019-08-08 15:37:45
1187
转载 Java程序员必备软素质:如何优雅的设计系统接口?
在设计接口时,有很多因素要考虑:接口的业务定位接口的安全性接口的可扩展性接口的稳定性接口的跨域性接口的协议规则接口的路径规则接口单一原则接口过滤及接口组合本篇文章将简要分析这些因素。一、规范性建议1.职责原则在设计接口时,必须明确接口的职责,即接口类型,接口应解决什么业务问题等2.单一性原则在明确接口职责的条件下,尽量做到接口单一,即一个接口只做一件事,而非两件以上。很多非资...
2019-08-06 16:39:18
243
转载 如何将Spring Boot应用跑在Docker容器中
日常的Rest服务开发我都会首选SpringBoot,因为它本身的易用性以及自带的各种方便功能、生态等,今天就简单讲一下如何将Spring Boot应用跑在Docker容器中项目搭建首先打开Idea,选择初始化一个Spring Boot应用,然后一路回车下去,待Idea下载完依赖,开始编码这里写一个简单的接口:@RestController@SpringBootApplic...
2019-08-05 15:42:47
92
转载 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题
UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器。而且,它非常适合虚拟环境,比如:Docker。另外,它通过消费未来时间克服了雪花算法的并发限制。UidGenerator提前生成ID并缓存在RingBuffer中。 压测结果显示,单个实例的QPS能超过6000,000。依赖环境:JDK8+MySQL(用于分配WorkerId)s...
2019-08-04 16:12:45
89
转载 redis分布式锁解决集群服务器定时任务重复执行问题
问题描述将带有定时任务的项目部署在单台测试环境上,完全没问题。生产上是两台集群服务器,项目部署上去发现定时任务的模块同时在两台机器上各执行了一遍,这将会导致其他意外的发生。解决方案----redis分布式锁使用redis分布式锁,为定时任务唯一指定的key加锁,并设置锁超时时间。当触发定时任务时,一台服务的任务进入切面,通过setNX(key,value)方法为唯一的key加...
2019-08-03 15:57:42
341
转载 关于并发框架 Java原生线程池原理及Guava与之的补充
使用Java中成型的框架来帮助我们开发并发应用即可以节省构建项目的时间,也可以提高应用的性能。Java对象实例的锁一共有四种状态:无锁,偏向锁,轻量锁和重量锁。原始脱离框架的并发应用大部分都需要手动完成加锁释放,最直接的就是使用synchronized和volatile关键字对某个对象或者代码块加锁从而限制每次访问的次数,从对象之间的竞争也可以实现到对象之间的协作。但是这样手...
2019-08-02 16:59:44
134
转载 Spring 里那么多种 CORS 的配置方式,到底有什么区别
作为一个后端开发,我们经常遇到的一个问题就是需要配置 CORS,好让我们的前端能够访问到我们的 API,并且不让其他人访问。而在 Spring 中,我们见过很多种 CORS 的配置,很多资料都只是告诉我们可以这样配置、可以那样配置,但是这些配置有什么区别?CORS 是什么首先我们要明确,CORS 是什么,以及规范是如何要求的。这里只是梳理一下流程,具体的规范请看 这里。COR...
2019-07-30 15:57:28
277
转载 为什么阿里巴巴要求程序员谨慎修改serialVersionUID 字段的值
序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。类通过实现java.io.Serializable 接口以启用其序列化功能。在我的博客中,其实已经有多篇文章介绍过序列化了,对序列化的基础知识不够了解的朋友可以参考以下几篇文章:Java对象的序列化与反序列化深入分析Java的序列化与反序列化单例与序列化的那些事儿在这几篇文章中,我分别介绍过了序列化涉及到的类和...
2019-07-29 17:52:22
107
转载 在Java的反射中,Class.forName和ClassLoader的区别
前言最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。解释在java中Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来...
2019-07-26 17:17:34
69
转载 Redis:解决分布式高并发修改同一个Key的问题
本文是通过watch(监控)+mutil(事务)实现应用于在分布式高并发处理等相关场景。下边先通过redis-cli.exe来测试多个线程修改时,遇到问题及解决问题。高并发下修改同一个key遇到的问题:1)定义一个hash类型的key,key为:lock_test,元素locker的值初始化为0。2)实现高并发下对locker元素的值递增:定义64个多线程,并发的对lock_...
2019-07-25 17:23:46
262
转载 springboot配合maven打成可执行jar,构建镜像部署到docker容器中
本篇文章将介绍springboot应用如何打成jar包,并将jar构建为docker镜像部署到docker中应用打包需要配合spring-boot-maven-plugin打包,将以下代码放到应用pom文件中<plugin><groupId>org.springframework.boot</groupId><artifac...
2019-07-24 14:31:43
211
转载 一文带你深入了解JVM性能调优以及对JVM调优的全面总结
目录JVM调优概念基本垃圾回收算法垃圾回收面临的问题分代垃圾回收详述1分代垃圾回收详述2典型配置举例1典型配置举例2新一代的垃圾回收算法调优方法反思一、JVM调优的一些概念数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身...
2019-07-23 15:55:56
107
转载 10张图带你深入理解Docker容器和镜像
这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别。当我对Docker技术还是一知半解的时候,我发现理解Docker的命令非常困难。于是,我花了几周的时间来学习Docker的工作原理,更确切地说,是关于Docker统一文件系统(the union file system)的知...
2019-07-22 15:31:57
81
转载 为什么大型互联网都需要网关服务?
前言假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等。那么这里就会遇到一个问题,APP/Browser怎么去访问这些后端的服务? 如果业务比较简单的话,可以给每个业务都分配一个独立的域名(https://service.api.company.com),但这种方式会有几个问题:每个业务都会需要鉴权、限流、权限校验等逻辑,如果每个业务都...
2019-07-18 15:36:31
146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人