- 博客(44)
- 收藏
- 关注
原创 MySQL笔记:查询缓存,索引,优化器,explain,redo日志,undo日志,事务隔离级别,锁等
开局一张图这张图是重点!!!咱要先对MySQL有一个宏观的了解,知道他的执行流程。一条SQL语句过来的流程是什么样的?那就follow me。哈哈哈哈,皮一下很开心。1.当客户端连接到MySQL服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过SSL证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。2.在正式查询之前,服务器会检查查询缓存,...
2020-01-09 15:00:57
335
原创 Lombok 使用详解,简化Java编程
前言在 Java 应用程序中存在许多重复相似的、生成之后几乎不对其做更改的代码,但是我们还不得不花费很多精力编写它们来满足 Java 的编译需求比如,在 Java 应用程序开发中,我们几乎要为所有 Bean 的成员变量添加 get() ,set() 等方法,这些相对固定但又不得不编写的代码浪费程序员很多精力,同时让类内容看着更杂乱,我们希望将有限的精力关注在更重要的地方。Lombok ...
2019-11-29 19:26:21
195
原创 读写分离很难吗?springboot结合aop简单就实现了
前言在研究代码的过程中,发现项目里用到了Spring Aop来实现数据库的读写分离,本着自己爱学习(我自己都不信...)的性格,决定写个实例工程来实现spring aop读写分离的效果。开始项目首先,毫无疑问,先开始搭建一个SpringBoot工程,然后在pom文件中引入如下依赖:<dependencies> <dependency> ...
2019-11-29 19:23:49
170
原创 Java 线程池 ThreadPoolExecutor 八种拒绝策略浅析
前言谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。ThreadPoolExecutor是一个典型的缓存池化设计的产物,因为池子有大小,当...
2019-11-29 17:10:50
154
原创 阿里p7带你解读redis分布式锁的发展史和正确实现方式
前言近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Zookeeper,其中基于Redis的分布式锁的使用更加广泛。但是在工作和网络上看到过各个版本的Redis分布式锁实现,每种实现都有一些不严谨的地方,甚至有可能是错误的实现,包括在代码...
2019-11-29 16:50:01
219
原创 全面解析50种设计模式(Design pattern)和六大原则
前言设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 ...
2019-11-28 17:35:42
224
原创 java架构之路——Redis的高性能和持久化(Redis专题)
前言 在我们现有的redis中(5.0.*之前的版本),Redis都是单线程的,那么单线程的Redis为什么还会有那么高的效率呢?因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换中性能损耗的问题,正因为Redis是单线程,所以我们要小心使用Redis指令,对于那些耗时的指令(比如keys),我们一定要谨慎使用。在并发环境中,我们Redis的单线程并不是...
2019-11-28 17:09:02
366
原创 成为架构师,都应该做哪些准备?学好哪些技术和知识?
写在前面 如果你打算成为一个java架构师,前提你必须是一个高级java攻城尸,熟练使用各种框架,并知道它们实现的原理。比如:懂得jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池;java反射技术,写框架必备的技术,但是有严重的性能问题,替代方案java字节码技术;nio,没什么好说的;值得注意的是"直接内存"的特点,使用场景;ja...
2019-11-28 16:44:28
332
原创 服务治理之服务注册与发现——微服务设计学习篇
前言 在微服务大行其道的今天,服务的粒度被拆分得非常细,随之而来的是服务数量的迅速增长。在云原生的浪潮中,服务治理更多情况下与容器调度平台结合,共同形成一站式的自动化调度治理平台。当然无论是否使用基于容器的调度系统,服务治理的原理和范畴都不会发生改变,只是实现方式不同而已。服务治理主要包括服务发现、负载均衡、限流、熔断、超时、重试、服务追踪等。我们今天要讲的,就是服务发现...
2019-11-28 15:58:06
325
原创 关于服务的集成——微服务设计学习篇
前言微服务之间如何集成应该可以说是微服务相关技术中最重要的知识之一。具体可以表示成服务之间的调用方式、通信协议、序列化协议等。 如果服务集成做得好,你的微服务可以最大程度地保持自治,你可以独立地修改和发布,相反,前期考虑得不周全的话,会给你带来灾难。一、对于集成技术的期望服务集成的方式方法如此非常的多样化,我们如何在纷杂的技术中选出最适合的?首先,我们要知道我们想要从这些集成技术中...
2019-11-28 15:50:03
515
原创 Spring Cloud Ribbon:负载均衡的服务调用
摘要Spring Cloud Ribbon 是Spring Cloud Netflix 子项目的核心组件之一,主要给服务间调用及API网关转发提供负载均衡的功能,本文将对其用法进行详细介绍。Ribbon简介在微服务架构中,很多服务都会部署多个,其他服务去调用该服务的时候,如何保证负载均衡是个不得不去考虑的问题。负载均衡可以增加系统的可用性和扩展性,当我们使用RestTemplate来调...
2019-11-27 17:15:40
121
原创 SpringCloud整体架构概览
什么是SpringCloud目标协调任何服务,简化分布式系统开发。简介构建分布式系统不应该是复杂的,SpringCloud对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性、可靠、协调的应用程序。 SpringCloud是在SpringBoot的基础上构建的,使开发者可以轻松入门并快速提高工作效率。 SpringCloud为开发人员提供了快速构建分布式系统架构的工具...
2019-11-27 17:11:25
281
原创 Java 老矣,尚能饭否?
22 岁,对于一个技术人来说可谓正当壮年。但对于一门编程语言来说,情况可能又有不同。各类编程语言横空出世,纷战不休,然而 TIOBE 的语言排行榜上,Java 却露出了明显的颓势。这个老牌的语言,未来会是怎样?1.写在前面从 1995 年第一个版本发布到现在,Java 语言已经在跌宕起伏中走过了 22 年,最新的 Java 版本也已经迭代到 Java 9。当年 Java 语言的跨平台优势如...
2019-11-27 17:07:58
221
原创 java创建对象过程
1.类加载检查虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已经被加载过,解析和初始化过,如果没有那么必须先执行相应的类加载过程2.分配内存类加载通过后,接下来虚拟机将为新生对象分配内存,内存大小在类加载检查之后就可以获取得到,分配内存主要是将一块完整的内存从java堆中划分出来,分配方式有“指针碰撞”和...
2019-11-27 16:48:29
139
原创 Java工程师的职业规划(最全版本)
第一篇:- 1 -初级程序员:做一些静态的界面;程序员:做一些增删改查的小模块;中级程序员:做逻辑较复杂的模块;高级程序员:做核心模块;项目经理:系统的整体架构;部门经理:多项目的管理;总裁:多部门以及企业的发展规划。- 2 -如果刚毕业,就多花几年积累经验,不可能靠一门绝技吃遍天下,不要指望java 赚钱多还是c++ or .NET 赚钱多。太早。 积累经验为主。积累...
2019-11-27 16:30:36
2552
原创 如何在 Spring/Spring Boot 中做参数校验?
数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。本文结合自己在项目中的实际使用经验,可以说文章介绍的内容很实用,不了解的朋友可以学习一下,后面可以立马实践到项目上去。下面我会通过实例程序演示如何在 Java 程序中尤其是 Spring 程序中优雅地的进行参数验...
2019-11-25 19:32:47
221
原创 Spring Cloud Alibaba Sidecar 多语言微服务异构
Spring Cloud Alibaba Sidecar 介绍自 Spring Cloud Alibaba 2.1.1 版本后增加了 spring-cloud-alibaba-sidecar 模块作为作为一个代理的服务来间接性的让其他语言可以使用spring cloud alibaba等相关组件。通过与网关的来进行路由的映射,从而可以做到服务的获取,然后可以使用Ribbon间接性调用。...
2019-11-25 19:21:53
1761
原创 Redis持久化的几种方式——深入解析RDB
Redis的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。Redis 持久化也是 Redis和 Memcached 的主要区别之一,因为 Memcached是不具备持久化功能的。1.持...
2019-11-25 19:19:44
116
原创 2019年一线大厂JVM面试100问详细解析!
前言JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭、飞机的场景(面试)不懂JVM的你,会被面试官虐的体无完肤!面对这一大波JVM面试题,你真的Hold的住吗?描述一下 JVM 加载 Class 文件的原理机制?在面试java工程师的时候,这道题经常被问到,故...
2019-11-25 19:17:04
143
原创 Java I/O体系从原理到应用,这一篇全说清楚了
基础概念在介绍I/O原理之前,先重温几个基础概念:(1) 操作系统与内核操作系统:管理计算机硬件与软件资源的系统软件 内核:操作系统的核心软件,负责管理系统的进程、内存、设备驱动程序、文件和网络系统等等,为应用程序提供对计算机硬件的安全访问服务2 内核空间和用户空间为了避免用户进程直接操作内核,保证内核安全,操作系统将内存寻址空间划分为两部分: 内核空间(Ke...
2019-11-23 19:09:01
197
原创 《提升能力,涨薪可待》-Java并发之AQS全面详解
前言是不是感觉在工作上难于晋升了呢?是不是感觉找工作面试是那么难呢?是不是感觉自己每天都在996加班呢?在工作上必须保持学习的能力,这样才能在工作得到更好的晋升,涨薪指日可待,欢迎一起学习【提升能力,涨薪可待】系列在找工作面试应在学习的基础进行总结面试知识点,工作也指日可待,欢迎一起学习【面试知识,工作可待】系列最后,理论知识到准备充足,是不是该躬行起来呢?欢迎一起学习【实战...
2019-11-23 18:56:51
154
转载 高性能秒杀系统的设计思考,超详细!
前言秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题。整体思考首先从高维度出发,整体思考问题。秒杀无外乎解决两个核心问题,一...
2019-11-23 16:46:08
217
原创 Docker 构建脚本 Dockerfile 指令全解析
1. 前言Dockerfile 是用来构建自定义 Docker 镜像的文本文档。我们通过docker build 命令用于从Dockerfile 文件构建镜像。 如果你要构建自定义镜像,Dockerfile 是你必须学会的技能之一。2. Dockerfile 的基本结构Dockerfile 一般分为:基础镜像、镜像元信息、镜像操作指令和容器启动时执行指令,# 为 Dockerfile ...
2019-11-22 16:55:23
142
原创 一步一步带你入门MySQL中的索引和锁
索引索引常见的几种类型索引常见的类型有哈希索引,有序数组索引,二叉树索引,跳表等等。本文主要探讨 MySQL 的默认存储引擎 InnoDB 的索引结构。InnoDB的索引结构在InnoDB中是通过一种多路搜索树——B+树实现索引结构的。在B+树中是只有叶子结点会存储数据,而且所有叶子结点会形成一个链表。而在InnoDB中维护的是一个双向链表。你可能会有一个疑问,为...
2019-11-22 16:53:18
110
原创 手把手教你MySQL查询优化分析
前言MySQL是关系性数据库中的一种,查询功能强,数据一致性高,数据安全性高,支持二级索引。但性能方面稍逊于非关系性数据库,特别是百万级别以上的数据,很容易出现查询慢的现象。这时候需要分析查询慢的原因,一般情况下是程序员sql写的烂,或者是没有键索引,或者是索引失效等原因导致的。这时候MySQL 提供的 EXPLAIN 命令就尤其重要, 它可以对 SELECT 语句进行分析, 并输出 SE...
2019-11-22 16:34:09
215
1
原创 手写Spring框架,加深对Spring工作机制的理解!
前言 在我们的日常工作中,经常会用到Spring、Spring Boot、Spring Cloud、Struts、Mybatis、Hibernate等开源框架,有了这些框架的诞生,平时的开发工作量也是变得越来越轻松,我们用 Spring Boot 分分钟可以新建一个Web项目。 记得自己刚开始工作的时候还是在用Servlet写Web项目,自己写数据库连接池,用原生JDB...
2019-11-22 15:30:11
146
原创 Spring 中异常处理的各种姿势
1. 前言统一的异常处理对于应用的重要性不言而喻。今天我们来介绍一下 Spring 如何来进行统一的 Rest 异常处理。同时我们也会简单比较一下它们之间的优劣。2. @Controller 结合 @ExceptionHandler在控制器中声明一个方法然后用 @ExceptionHandler 注解标记即可: @Controller @RequestMapping("/tes...
2019-11-22 15:21:37
133
原创 架构师大门在此为你打开
最近学习了一些关于架构设计的知识想分享给大家。俗话说得好,不想当架构师的程序员不是好厨子。那么如何成为一名架构师呢?接下来就聊一聊我的一些想法。什么是架构师之前有同学问我,做了几年技术,应该转管理还是转架构师?对于这位同学,我给他的答案是,你要先踏踏实实做好现在的工作。因为就他提的问题来看,应该是刚入行不久或者是在校学生。专心做技术的,都想做架构师。但架构师并不...
2019-11-21 16:32:50
124
原创 相当架构师? 先把这100多技术学会先!
前言 本篇内容涵盖14个方面,涉及上百个框架和工具。会有你喜欢的,大概也会有你所讨厌的家伙。这是我平常工作中打交道最多的工具,大小公司都适用。如果你有更好的,欢迎留言补充。一、消息队列二、缓存三、分库分表四、数据同步五、通讯六、微服务七、分布式工具八、监控系统九、调度十、入口工具十一、OLT(A)P十二、CI/CD十三、问题排查十四、本地工...
2019-11-21 16:28:34
133
原创 Redis 分布式锁的正确打开方式
前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的...
2019-11-21 16:21:16
149
1
原创 用Redis 实现“附近的人”这个功能的最全详解
前言 针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高的运行效率。本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。 要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能...
2019-11-21 16:19:44
339
原创 Redis持久化的几种方式——深入解析RDB
Redis的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。Redis 持久化也是 Redis和 Memcached 的主要区别之一,因为 Memcached是不具备持久化功能的。1.持...
2019-11-21 16:04:02
188
原创 如何通过Nginx日志实时封禁风险IP
前言本文分享了自动化采集、分析Nginx日志并实时封禁风险IP的方案及实践.阅读这篇文章你能收获到:日志采集方案. 风险IP评估的简单方案. IP封禁策略及方案.阅读本文你需要:熟悉编程. 熟悉常用Linux命令. 了解Docker.背景分析nginx访问日志时, 看到大量404的无效请求, URL都是随机的一些敏感词. 而且近期这些请求越来越频繁, 手动批量封禁了...
2019-11-19 19:41:40
730
原创 2019年一线大厂JVM面试100问详细解析!
前言JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭、飞机的场景(面试)不懂JVM的你,会被面试官虐的体无完肤!面对这一大波JVM面试题,你真的Hold的住吗?描述一下 JVM 加载 Class 文件的原理机制?在面试java工程师的时候,这道题经常被问到,故...
2019-11-19 19:37:45
361
原创 MyBatis开发入门学习
1. MyBatis简介 MyBatis本是Apache的一一个开源项目一iBatis, 2010 年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为MyBatis。 MyBatis是-一个基于Java的持久层框架。MyBatis提供的持久层框架包括SQLMaps和Data Access Objects (DAO),它消除...
2019-11-19 17:50:11
296
原创 Redis 的命令详解 - Sorted Set 篇
Sorted Set 命令详解跟 SET 相关的命令一共有 25 种,这里只介绍常用的ZADD : 添加成员起始版本 : 1.2.0时间复杂度 : O(log(N)),其中N是有序集合中的元素数。向有序集合(sorted set)中,添加 分数/成员(score/member)对,可以同时指定多个分数/成员(score/member)对。分数值是一个带符号带双精度浮点型数...
2019-11-18 21:04:41
835
原创 Redis 的命令详解 - SET 篇
SET 命令详解跟 SET 相关的命令一共有 15 种,这里只介绍常用的SADD : 添加成员起始版本 : 1.0.0时间复杂度 : O(N),N为要添加的成员的个数如果key不存在,则在添加前先创建一个set,如果指定成员在set中已存在,该成员将被忽略。语法SADD key member1 [member2 ...]返回值已添加到集合中的成员数量,不包括已...
2019-11-18 19:32:20
384
原创 Redis 的命令详解 - Key 篇
Key 的命令详解跟 key 相关的命令一共有 24 种,这里只介绍常用的。KEYS : 查找 key起始版本 : 1.0.0时间复杂度 : O(N),其中N为数据库中密钥的数目。尽管操作的时间复杂度为O(N),但恒定时间却很短。例如,运行在入门级笔记本电脑上的Redis可以在40毫秒内扫描一百万个key。注意:`KEYS` 命令,在生产环境中使用时要格外小心。在大型数据库...
2019-11-18 19:29:51
255
原创 Redis 的命令详解 - String 篇
SET : 添加一个键值对起始版本:1.0.0时间复杂度:O(1) 假设附加值很小,并且已经存在的值具有任意大小,则摊销时间复杂度为O(1),因为Redis使用的动态字符串库会使每个重新分配上的可用空间加倍。SET 执行时,如果 key 已存在,无论其 value 是什么类型,value 都会被覆盖,先前与 key 关联的生存时间将被丢弃。语法SET key value [E...
2019-11-18 19:24:20
141
原创 Redis 的命令详解 - Hash 篇
Hash 命令详解跟 Hash 相关的命令一共有 15 种,这里只介绍常用的。想查看全部命令请参考官网说明 : 由于 reids 的 Hash 类型的格式如下,为了方便区分,里层的 key 我称呼为字段。key :{key1 : value1,key2 : value2...}HSET : 添加 hash 类型的键值对起始版本 : 2.0.0 时间复杂度 : 添加一个字段-...
2019-11-16 19:53:25
228
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人