
Java
小牛教育
这个作者很懒,什么都没留下…
展开
-
MyBatis一级缓存的笔记及记录
一、概述: 一级缓存是MyBatis天然自带的,是默认开启且没有关闭的地方,1级缓存只能作用于查询回话中,所以也叫会话缓存;这里举个例子: 订单表存在一对多的关系,为了尽可能的减少join的查询,进行了分阶段查询; 先查询出订单表,在根据订单的用户ID查询用户信息表,最后将数据进行整合。如果订单表中存在重复的用户ID,就会出现很多没有必要的重复查询。 1级缓存解决了这个问题(1个语...转载 2019-09-25 17:33:01 · 98 阅读 · 0 评论 -
Java线程池-浅析
线程池做的主要工作是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等待,等其他线程执行完毕,再从队列中取任务来执行。Executor 线程池的顶级接口。 Executors 线程池相关的工具类。线程池的主要特点为:线程复用;控制最大并发数;管理线程降低资源消耗。通过重复利用已创建的线程,降低线程创建和销毁造成...转载 2019-09-25 18:14:55 · 166 阅读 · 1 评论 -
SpringBoot(六) SpringBoot整合Swagger2(自动化生成接口文档)
一:在上篇文章pom增加依赖: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2....转载 2019-09-25 18:52:49 · 527 阅读 · 0 评论 -
JVM从入门开始深入每一个底层细节
1 官网1.1 寻找JDK文档过程www.oracle.com -> 右下角Product Documentation -> 往下拉选择Java ->Java SE documentation-> Previous releases -> JDK 8 -> 此时定位到:https://docs.oracle.com/javas...1.2 Th...转载 2019-09-25 22:23:44 · 150 阅读 · 0 评论 -
JAVA数据处理的常用技术
背景在实际开发中,数据的处理有五种:获取、传输、存储、分析、转换。每种各对应一些常用的技术。序列化和反序列化序列化是将对象的信息转换为可传输或可存储形式的过程。反序列化就是反过来让这些可传输的、可存储的信息变回对象。传输的序列化除了安全性的考虑,因为涉及到和第三方通信,所以还有重要的一点是可读性和不变性。而存储的链路短,可控,所以更讲究效率。传输最常用的序列化手段是JSON这样人眼...转载 2019-09-25 22:27:31 · 100 阅读 · 0 评论 -
Spring Boot 2使用Servlet、Listener和Filter配置
开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8新建一个名称为demo的Spring Boot项目。一、使用Servlet配置1、修改启动类 DemoApplication.cs 代码,加入注解ServletComponentScan,它用于扫描Servlet组件,包括使用@WebServlet、@WebFilter和@WebListe...转载 2019-09-25 22:31:44 · 277 阅读 · 0 评论 -
淘宝双11促销背后采用什么架构技术来实现网站的负载均衡
一 应用无状态(淘宝session框架)俗话说,一个系 统的伸缩性的好坏取决于应用的状态如何管理。为什么这么说呢?咱们试想一下,假如我们在session中保存了大量与客户端的状态信 息的话,那么当保存状态信息的server宕机的时候,我们怎么办?通常来说,我们都是通过集群来解决这个问题,而通常所说的集群,不仅有负载均衡,更重要的是要有失效恢复failover,比如tomcat采 用的集群节点广...转载 2019-09-25 22:34:08 · 268 阅读 · 0 评论 -
Spring Cloud 系列之 Spring Cloud Stream
Spring Cloud Stream 是消息中间件组件,它集成了 kafka 和 rabbitmq 。本篇文章以 Rabbit MQ 为消息中间件系统为基础,介绍 Spring Cloud Stream 的使用。如果你没有用过消息中间件,可以到 RabbitMQ 的官网看一下,或者参考这个 http://rabbitmq.mr-ping.com/。理解了消息中间件的设计,才能更好的使用它。...转载 2019-09-25 22:37:06 · 236 阅读 · 0 评论 -
了解Java线程优先级,更要知道对应操作系统的优先级,不然会踩坑
Java 多线程系列第 6 篇。这篇我们来看看 Java 线程的优先级。Java 线程优先级Thread类中,使用如下属性来代表优先级。private int priority;我们可以通过setPriority(int newPriority)来设置新的优先级,通过getPriority()来获取线程的优先级。有些资料通过下面的例子就得出了一个结论:Jav...转载 2019-09-26 21:35:57 · 167 阅读 · 0 评论 -
RabbitMQ六种工作模式的对比与实践
最近学习RabbitMQ的使用方式,记录下来,方便以后使用,也方便和大家共享,相互交流。RabbitMQ的六种工作模式:1、Work queues2、Publish/subscribe3、Routing4、Topics5、Header 模式6、RPC一、Work queues多个消费端消费同一个队列中的消息,队列采用轮询的方式将消息是平均发送给消费者;特点...转载 2019-09-26 21:24:15 · 283 阅读 · 0 评论 -
【Java基础】关于枚举类你可能不知道的事
目录谈谈枚举 1. 枚举类的定义 2. 枚举类的底层实现 3. 枚举类的序列化实现 4. 用枚举实现单列 5. 枚举实例的创建过程是线程安全的 谈谈枚举如果一个类的对象个数是有限的而且是不变的,我们通常将这样的类设计成枚举类。1. 枚举类的定义枚举类有如下特点:枚举类默认是使用final关键字修饰的,所以枚举类不能被继承; 枚举类的构造函数默认是使用p...转载 2019-09-26 21:30:33 · 220 阅读 · 1 评论 -
Java8 Streams 让集合操作飞起来
前言接上篇文章java8 新特性由于上篇过于庞大,使得重点不够清晰,本篇单独拿出 java8 的 Stream 重点说明 ,并做了点补充。基本说明Stream 是基于 java8 的 lambda 表达式的,如果不清楚 lambda 表达式,可以查看我的上篇文章Lambda 表达式和函数式接口快速理解 Stream 把要处理的元素看做一种流,流在管道中传输,可以在管道的节点...转载 2019-09-26 21:33:33 · 156 阅读 · 0 评论 -
Java String 对象,你真的了解了吗?
String 对象的实现String对象是 Java 中使用最频繁的对象之一,所以 Java 公司也在不断的对String对象的实现进行优化,以便提升String对象的性能,看下面这张图,一起了解一下String对象的优化过程。1. 在 Java6 以及之前的版本中String对象是对 char 数组进行了封装实现的对象,主要有四个成员变量: char 数组、偏移量 offset、...转载 2019-09-26 21:35:39 · 88 阅读 · 0 评论 -
Spring入门(十三):Spring MVC常用注解讲解
在使用Spring MVC开发Web应用程序时,控制器Controller的开发非常重要,虽然说视图(JSP或者是Thymeleaf)也很重要,因为它才是直接呈现给用户的,不过由于现在前端越来越重要,很多公司都开始采用前后端分离的开发模式,所以我们暂时可以将精力放在开发控制器上。使用Spring MVC开发控制器主要使用以下7个注解:@Controller @RequestMapping...转载 2019-09-26 21:38:06 · 121 阅读 · 0 评论 -
Spring Cloud异步场景分布式事务怎样做?试试RocketMQ
一、背景在微服务架构中,我们常常使用异步化的手段来提升系统的吞吐量和解耦上下游,而构建异步架构最常用的手段就是使用消息队列(MQ),那异步架构怎样才能实现数据一致性呢?本文主要介绍如何使用RocketMQ的事务消息来解决一致性问题。RocketMQ是阿里巴巴开源的分布式消息中间件,目前已成为Apache的顶级项目。历经多次天猫双十一海量消息考验,具有高性能、低延时和高可靠...转载 2019-09-26 21:40:18 · 153 阅读 · 0 评论 -
让人头大的各种锁,从这里让你思绪清晰
这次我们来看锁说到了锁我们经常会联想到生活中的锁,在我们日常中我们经常会接触到锁。比如我们的手机锁,电脑锁,再比如我们生活中的门锁,这些都是锁。锁有什么作用呢?说了这么多还是不清楚锁到底有什么用处?这一点就要深思我们为什么要使用锁,我们用手机锁是为了保障我们的隐私安全,使用门锁是为了保障我们的财产安全,准确的来说我们使用锁就是为了安全。那么在生活中我们可以加锁来保障自己的隐私和财产安...转载 2019-09-26 21:41:59 · 96 阅读 · 0 评论 -
Spring Boot核心(基本配置)
上一篇Spring Boot我们简单讲了如何快速创建一个SpringBoot项目。大家都知道SpringBoot非常强大,可以轻松与各种工具集成,但是我们知其然,也必须知其所以然。今天开始就和大家一起学习一下SpringBoot核心,核心由于过于重要,需要分成好几章,今天我们先来看看基本配置。入口类和@SpringBootApplication使用过或者瞄过一眼Spring Boot...转载 2019-09-26 21:43:58 · 189 阅读 · 1 评论 -
最近学习到的Lambda表达式
紧接着学了一下Java的函数式编程,给大家整理了一下,一起学习!一、Lambda用法之前写Optional这个类的时候,简单说了一下Lambda是怎么用的,这里再跟大家一起回顾一下,Lambda的语法是这样的:以Lambda语法创建线程和匿名内部类创建线程的区别(显然代码少了很多!):public static void main(String[] args) { /...转载 2019-09-26 21:45:50 · 86 阅读 · 0 评论 -
1小时让你掌握响应式编程,并入门Reactor
我看同步阻塞“你知道什么是同步阻塞吗”,当然知道了。“那你怎么看它呢”,这个。。。在同步阻塞的世界里,代码执行到哪里,数据就跟到哪里。如果数据很慢跟不上来,代码就停在那里等待数据的到来,然后再带着数据一起往下执行。可以说是,代码执行和数据是结伴而行,不离不弃。执子之手与子偕老。让人老感动了。如果还不太理解的话,可以认为代码执行其实就是一些行为动作,这些行为动作的目的就是为了获取/操作数...转载 2019-09-27 08:21:18 · 181 阅读 · 0 评论 -
java8 新特性精心整理(全)
前言越来越多的项目已经使用Java 8了,毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本。这个版本包含语言、编译器、库、工具和 JVM 等方面的十多个新特性。在本文中我们将学习这些新特性,并用实际的例子说明在什么场景下适合使用。引用:本文参考了这两篇文章,加以自己的理解,整理成一份最容易理解的 Java8 新特性文章,有少部分章节可能内容一致,但...转载 2019-09-27 08:21:58 · 93 阅读 · 0 评论 -
聊一聊大厂内部的安全管理机制
聊一聊大厂内部的安全管理机制工作了两个月了体会到了很多之前做外包小项目没有的东西,不得不说大厂的还是有自己一套的完善的体制,不会像B站那样泄露自己整个后台的源码这种事情发生。电脑办公比如说在使用电脑办公这方面,刚入职那天每个人都会领一台电脑(MAC和Windows都有看工作需要),每个人领的电脑上都装有度管家,度管家是百度自研的一款软件,可以负责连接百度内网,回到家以后也可以通过度管家...转载 2019-09-27 08:22:38 · 266 阅读 · 0 评论 -
Jenkins把GitHub项目做成Docker镜像
本文是《Jenkins流水线(pipeline)实战》系列的第三篇,前面已对Jenkins流水线有了基本认识,也试过从GitHub下载pipeline脚本并执行,今天的实战是编写一段pipeline脚本,该脚本的作用是从GitHub下载一个Java项目(Maven构建的),然后编辑构建此项目,并将构建结果制作成Docker镜像并且推送到私有镜像仓库;系列文章地址《Jenkins流水线(pi...转载 2019-09-27 08:24:00 · 388 阅读 · 0 评论 -
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?
面试题如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?面试官心理分析这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费和幂等性问题。不能少,就是说这数据别搞丢了。那这个问题你必须得考虑一下。如果说你这个是用 MQ 来传递非常核心的消息,比如说计费、扣费的一些消息,那必须确保这个 MQ 传递过程中绝对不会把计费消息给弄丢。...转载 2019-09-27 08:24:39 · 118 阅读 · 0 评论 -
带你入门SpringCloud服务发现 | Eurka搭建和使用
前言服务注册与发现是微服务中最为基础的环节,而 Eureka 就是一个可以帮助你实现服务注册与发现的选择之一。如果你对 Eureka 和服务发现了解甚少,那么该篇博客将会帮助到你。文中通过具体操作带你了解如下内容:什么是服务注册与发现 什么是 Eureka SpringCloud Eureka 单台环境搭建 SpringCloud Eureka 高可用环境搭建 SpringClou...转载 2019-09-27 08:25:50 · 102 阅读 · 0 评论 -
高频面试知识点总结,看看你能答对多少
事务1、什么是事务?事务的特性(ACID)什么是事务:事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败)。事务特性分为四个:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)简称ACID。1、原子性:事务是数据库的逻辑工作单位,...转载 2019-09-27 08:27:22 · 166 阅读 · 0 评论 -
Spring入门(十二):Spring MVC使用讲解
1. Spring MVC介绍提到MVC,参与过Web应用程序开发的同学都很熟悉,它是展现层(也可以理解成直接展现给用户的那一层)开发的一种架构模式,M全称是Model,指的是数据模型,V全称是View,指的是视图页面,如JSP、Thymeleaf等,C全称是Controller,指的是控制器,用来处理用户在客户端(浏览器)发起的请求。Spring MVC就是基于MVC模式实现,能够帮你构...转载 2019-09-27 08:28:12 · 120 阅读 · 0 评论 -
SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码)
准备工作#环境准备#JAVA版本Copyjava version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)ES版本Copy{ "na...转载 2019-09-27 08:29:55 · 307 阅读 · 0 评论 -
SpringBoot 2.0 + Nacos + Sentinel 流控规则集中存储
前言Sentinel 原生版本的规则管理通过API 将规则推送至客户端并直接更新到内存中,并不能直接用于生产环境。不过官方也提供了一种 Push模式,扩展读数据源ReadableDataSource,规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。这里我们通过配置 Nacos 来实现流控规则的统...转载 2019-09-27 08:30:29 · 260 阅读 · 0 评论 -
深入理解JVM内存分配策略
理解JVM内存分配策略三大原则+担保机制#JVM分配内存机制有三大原则和担保机制具体如下所示:优先分配到eden区 大对象,直接进入到老年代 长期存活的对象分配到老年代 空间分配担保对象优先在Eden上分配#如何验证对象优先在Eden上分配呢,我们进行如下实验。打印内存分配信息#首先代码如下所示:Copypublic class A { publ...转载 2019-09-28 09:22:28 · 206 阅读 · 0 评论 -
SpringBoot 整合mybatis 多数据源以及分库分表
前言说实话,这章本来不打算讲的,因为配置多数据源的网上有很多类似的教程。但是最近因为项目要用到分库分表,所以让我研究一下看怎么实现。我想着上一篇博客讲了多环境的配置,不同的环境调用不同的数据库,那接下来就将一个环境用到多个库也就讲了。所以才有了这篇文章。我们先来看一下今天项目的项目结构,在上篇博客的基础上进行了一定的增改,主要是增加了一个 config 文件,在dao 中分了两个子包mapp...转载 2019-09-28 09:24:51 · 530 阅读 · 0 评论 -
如何保证消息的顺序性?
面试题如何保证消息的顺序性?面试官心理分析其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。面试题剖析我举个例子,我们以前做过一个 mysqlbinlog同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(my...转载 2019-09-28 22:07:55 · 95 阅读 · 0 评论 -
ZooKeeper学习之集群搭建
ZooKeeper原理篇一、 ZooKeeper 简介#顾名思义 zookeeper 就是动物园管理员,他是用来管 hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper:是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目。它提供的...转载 2019-09-28 22:10:11 · 512 阅读 · 0 评论 -
Java性能之synchronized锁的优化
synchronized / Lock1.JDK 1.5之前,Java通过synchronized关键字来实现锁功能synchronized是JVM实现的内置锁,锁的获取和释放都是由JVM隐式实现的2.JDK 1.5,并发包中新增了Lock接口来实现锁功能提供了与synchronized类似的同步功能,但需要显式获取和释放锁3.Lock同步锁是基于Java实现的,而synchro...转载 2019-09-28 22:11:41 · 169 阅读 · 0 评论 -
带你入门SpringCloud服务发现 | Eurka搭建和使用
服务注册与发现是微服务中最为基础的环节,而 Eureka 就是一个可以帮助你实现服务注册与发现的选择之一。如果你对 Eureka 和服务发现了解甚少,那么该篇博客将会帮助到你。文中通过具体操作带你了解如下内容:什么是服务注册与发现 什么是 Eureka SpringCloud Eureka 单台环境搭建 SpringCloud Eureka 高可用环境搭建 SpringCloud Eu...转载 2019-09-28 22:13:13 · 148 阅读 · 0 评论 -
如何使用WEBSOCKET实现前后端通信
websocket通信是很好玩的,也很有用的的通信方式,使用方式如下:第一步由于springboot很好地集成了websocket,所以先在在pom.xml文件中引入依赖<dependency> <groupId>org.springframework.boot</groupId> <arti...转载 2019-09-28 22:14:12 · 1020 阅读 · 0 评论 -
【SpringBoot】整合日志框架
一、日志框架概述 1.1 日志框架的产生 1.2 市面上的日志框架 二、SLF4j 使用与整合 2.1 如何在系统中使用SLF4j 2.2 如何整合日志框架 2.3 SpringBoot中的日志关系 三、日志使用 3.1 默认配置 3.2 日志格式 3.2 指定配置 四、切换日志框架一、日志框架概述1.1 日志框架的产生假想,你是某一公司的大型...转载 2019-09-28 22:15:17 · 128 阅读 · 0 评论 -
以商品超卖为例讲解Redis分布式锁
本案例主要讲解Redis实现分布式锁的两种实现方式:Jedis实现、Redisson实现。网上关于这方面讲解太多了,Van自认为文笔没他们好,还是用示例代码说明。一、jedis实现该方案只考虑Redis单机部署的场景1.1 加锁1.1.1 原理jedis.set(String key, String value, String nxxx, String expx, ...转载 2019-09-28 22:20:19 · 244 阅读 · 0 评论 -
给入门程序员的一些学习建议(一定要看)
之前有一些人问我java怎么学?其实我第一个建议是:“敲代码!敲代码!不光要看,更要干!”,很多人光看不练,视频收藏了一堆,就是不看,或者看了一堆视频,就是不敲。这种学习方式:没用!只有你敲了代码之后,这个内容才是你的。 当你学编程的时候,要看看你的键盘,以敲坏键盘为人生目标!什么时候你通过敲代码把键盘敲坏了,你就离高手不远了。当然啦,如果键盘比较好的话,根本敲不坏。 如果想要具备...转载 2019-09-28 22:22:01 · 220 阅读 · 0 评论 -
学Redis这篇就够了
学Redis这篇就够了Redis 简介Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库Redis 与 其他 key - value 缓存产品有以下三个特点:Redis 支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis 不仅仅支持简单的 key - value 类型的数据,同时还提供 lis...转载 2019-09-29 21:46:24 · 78 阅读 · 0 评论 -
每秒100W请求,12306秒杀业务,架构如何优化?
如《同样是高并发,QQ/微博/12306的架构难度一样吗?》一文所述,同样是高并发场景,三类业务的架构挑战不一样:QQ类业务,用户主要读写自己的数据,访问基本带有uid属性,数据访问锁冲突较小微博类业务,用户的feed主页由别人发布的消息构成,数据读写有一定锁冲突12306类业务,并发量很高,几乎所有的读写锁冲突都集中在少量数据上,难度最大那么对于秒杀类业务,系统上和业务上分别能如何优化...转载 2019-09-29 21:42:48 · 149 阅读 · 0 评论