• 高并发场景下锁的使用技巧

    锁类别不同的应用场景对锁的要求各不相同,我们先来看下锁都有哪些类别,这些锁之间有什么区别。悲观锁(synchronize)Java 中的重量级锁 synchronize数据库行锁乐观锁Java 中的轻量级锁 volatile 和 CAS数据库版本号分布式锁(Redis锁)乐观锁就好比说是你是一个生活态度乐观积极向上的人,总是往最好的情况去想,比如你每次去获取共享数据的时候会认为...

    Java 2020年04月13日 1289 0
  • Java多线程并发工具类-信号量Semaphore对象讲解

    Java多线程并发工具类-Semaphore对象讲解通过前面的学习,我们已经知道了Java多线程并发场景中使用比较多的两个工具类:做加法的CycliBarrier对象以及做减法的CountDownLatch对象并对这两个对象进行了比较。我们发现这两个对象要么是做加法,要么是做减法的。那么有没有既做加法也做减法的呢?当然有了。Semaphore这个工具类就可以实现One out ...

    Java 2020年04月12日 1440 0
  • 深入分析线程池的实现原理

    一.概述线程池,顾名思义就是存放线程的池子,池子里存放了很多可以复用的线程。如果不用类似线程池的容器,每当我们需要执行用户任务的时候都去创建新的线程,任务执行完之后线程就被回收了,这样频繁地创建和销毁线程会浪费大量的系统资源。因此,线程池通过线程复用机制,并对线程进行统一管理,具有以下优点:降低系统资源消耗。通过复用已存在的线程,降低线程创建和销毁造成的消耗;提高响应速度。当有...

    Java 2020年04月11日 2012 0
  • 高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

    前言很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目中,就更别提如何构建高并发系统了!究竟什么样的系统算是高并发系统?今天,我们就一起解密高并发业务场景下典型的秒杀系统的架构,结合高并发专题下的其他文章,学以致用。电商系统架构在电...

    Java 2020年04月11日 1341 0
  • SpringBoot 处理跨域请求

    什么是跨域?由于安全原因,浏览器都遵循着同源原则,拦截了不同域名之间的请求。跨域请求,是指能让不同域名之间,可以相互发送请求。 当它请求的一个资源是从一个与它本身提供的第一个资源的不同的域名时,一个资源会发起一个跨域HTTP请求(Cross-site HTTP request)。 比如说,域名A ( http://domaina.example ) 的某 Web 应用程序中通过...

    Java 2020年04月11日 1485 0
  • google要求的java规范

    Google Java 编程规范(中文版)1.1 术语说明在本文档中,除非另有说明:1. 术语class可表示一个普通类,枚举类,接口或是annotation类型( @interface )2. 术语comment只用来指代实现的注释(implementation comments),我们不使用"documentation comments"一词,而是用Javadoc。其他的术...

    Java 2020年04月11日 1409 0
  • API网关:API 网关从入门到放弃

    前言假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等。那么这里就会遇到一个问题,APP/Browser怎么去访问这些后端的服务? 如果业务比较简单的话,可以给每个业务都分配一个独立的域名(http://service.api.company.com),但这种方式会有几个问题:每个业务都会需要鉴权、限流、权限校验等逻辑,如果每个业务都各自...

    Java 2020年04月11日 1228 0
  • ffmpeg的使用,通过Java来进行对视频的转码和截图

    1.配置ffmpeg的环境变量2.代码如下import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStreamReader;/** * @Author LinXin * 1.设置视频输出目录 * 2.获取上传视频的路径以及文件名 * 3.截取...

    Java 2020年04月11日 1517 0
  • SpringBoot 发送邮件和附件(实用版)

    基础知识什么是SMTP?SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。什么是IMAP?IMAP全称为Internet Message Access Protocol(...

    Java 2020年04月11日 1344 0
  • IntelliJ IDEA 2020.1 正式发布,官方支持中文了

    1. 前言今天 IntelliJ Idea 2020.1 正式发布了!最大的一个亮点莫过于开始支持中文了。相信很多英语不好的同学已经期盼已久了。但是感觉登录界面感觉变丑了!建议把文章看完再去升级。2. 汉化体验先来看看我的效果,首先要告诉你这是官方汉化包,并不是第三方!我大致看了一圈,个别还没有汉化完毕,可能没有找到合适的描述词汇吧,但是绝大部分已经完成了。这下很多同学可以更方...

    Java 2020年04月10日 2795 0
  • Java中轻松搞定XML和对象之间的互转,就它了!

    前言在微信订阅号和支付宝生活号日常开发中,我们会涉及到对象和XML之间的相互转换。比如我们可以利用StringBuilder去直接拼接来构造XML    /**     * 构造基础的响应消息     *  &...

    Java 2020年04月10日 1383 0
  • 京东通天塔前端性能优化实践

    通天塔是京东内部的一个快速搭建活动页面的平台,用户可以通过在可视化平台上选择需要的模板及配置对应数据,来生成对应的原生、H5及PC活动页面。模板样式丰富,操作灵活,在京东被大量使用,用户流量也呈现出了非常迅猛的增长。但随着项目的迭代,功能越来越复杂,模板越来越多,前端和Node中间层性能问题也逐渐暴露出来,其中,前端首屏加载时间TP75性能要大于2秒,而Node中间层单核QPS...

    Java 2020年04月10日 2399 0
  • Java 开发者必备的两个神器:Maven国内镜像和Spring国内脚手架

    虽然目前越来越多的国产优秀技术产品走出了国门,但是对于众领域的开发者来说,依然对于国外的各种基础资源依赖还是非常的强。所以,一些网络基本技能一直都是我们需要掌握的,但是速度与稳定性问题一直也都有困扰着大家。所以,今天就给众 Java 开发者推荐两个提速神器:Maven的国内镜像和Spring的国内脚手架!Maven的国内镜像官网地址: http://maven.aliyun.c...

    Java 2020年04月10日 1420 0
  • Java+Spring+MyBatis实现多数据源的动态切换

    在实际的项目开发过程中,我们经常会遇到一个项目需要使用多个数据源的情况,而多数据源又可分为固定多数据源和动态多数据源。固定多数据源:是指在项目中需要使用多个数据源,但数据源的个数是确定的,不会改变,如我们的项目需要使用订单库和商品库这两个数据源,项目中所有的业务逻辑都只需要操作这两个库。动态多数据源:是指在项目需要使用多数据源,但是数据源的个数不确定,可能会随着项目的需要动态的...

    Java 2020年04月10日 1512 0
  • 为什么SpringBoot的 jar 可以直接运行?

    SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包成一个可执行的jar包。在pom文件里加入这个插件即可:<build> <plugins> <plugin> <groupId>org.springframework.boot</grou...

    Java 2020年04月10日 1320 0
  • JAVA 排查姿势简介

    java 排查姿势简介Greys-anatomygreys-anatomy 是一款很优秀的 java 诊断工具, 由阿里的一位工程师开发维护,并开源到 github 上。安装github 上的文档说明的很详细了, 而且是中文文档, 阅读基本无障碍。linux 环境, 通过curl -sLk http://ompc.oss.aliyuncs.com/greys/install.s...

    Java 2020年04月09日 1407 0
  • 让我们一起来跟随大佬步伐探究JVM调优的优雅舞步

    现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock Contention)Java进程消耗CPU过高......这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的J...

    Java 2020年04月08日 1917 0
  • Java中异常处理的15条原则

    见过很多人在进行异常处理的时候,直接一个 e.printStackTrace() 就完成了,这是一种非常粗陋的做法,首先会导致应用日志的大量错误信息,而很多时候你都不知道这些错误信息因何发生;再者,反应到用户端将直接导致用户无法获取操作的结果以及失败的原因。以下 15 条异常处理的原则来自国外的博客:不用使用异常来管理业务逻辑,应该使用条件语句。如果一个控制逻辑可通过 if-e...

    Java 2020年04月08日 1399 0
  • 我来打脸了!谁说Java不能用文件批量导入导出?

    1、介绍Java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下。目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出。另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了。2、P...

    Java 2020年04月08日 1322 0
  • 从REST到gRPC:性能如何优化

    "打破整体"。 这些是我在以前的实习过程中多次听到的话。 各地的公司都在意识到构建基于微服务的体系结构的好处。 从更低的成本,更好的性能到更少的停机时间,微服务相对于其先前的整体设计提供了无数的好处。 现在,所有这些微服务每秒都会互相交谈数千次,因此它们之间的通信需要快速而可靠。 执行此操作的传统方法是JSON支持的HTTP / 1.1 REST通信。 但是,诸如gRPC之类的...

    Java 2020年04月08日 2948 0
  • 超详细的Tomcat性能监控及调优教程

    一、下载地址https://tomcat.apache.org/download-80.cgi二、安装步骤将安装包 apache-tomcat-8.5.39.tar.gz 上传至服务器 /usr/local 目录下,再执行如下步骤:[root@admin local]# cd /usr/local[root@admin local]# tar -zxvf apache-tomc...

    Java 2020年04月08日 1487 0
  • 成就架构师之路,你不得不知的Netty核心知识

    1. Netty 基础Netty 是一个高性能、异步事件驱动的 NIO 框架,它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。它是一个网路应用框架。2. Netty 高性能之道2.1. RPC 调用的性...

    Java 2020年04月07日 1375 0
  • 谷歌开源的高性能 RPC 框架gRPC

    gRPC概述gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go。gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP...

    Java 2020年04月07日 2118 0
  • 聊聊小程序运行机制的那些事(图文结合)

    小程序的由来在小程序没有出来之前,最初微信WebView逐渐成为移动web重要入口,微信发布了一整套网页开发工具包,称之为 JS-SDK,给所有的 Web 开发者打开了一扇全新的窗户,让所有开发者都可以使用到微信的原生能力,去完成一些之前做不到或者难以做到的事情。但JS-SDK 的模式并没有解决使用移动网页遇到的体验不良的问题,比如受限于设备性能和网络速度,会出现白屏的可能。因...

    Java 2020年04月07日 2247 0
  • 连接池的基本工作原理

    连接池的基本工作原理1、基本概念及原理由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需...

    Java 2020年04月07日 1978 0
  • Spring Boot 2.3 终于要来了!

    2020/04/06日消息:https://spring.io/blog/2020/04/03/spring-boot-2-3-0-m4-available-nowSpring团队正式发布了 Spring Boot 2.3 的第 4 个里程碑版本,现在可以从 Spring 的里程碑仓库获取了:https://repo.spring.io/milestone/这个版本主要关闭了 ...

    Java 2020年04月06日 3693 0
  • 惊呆了,Spring Boot居然这么耗内存!

    Spring Boot总体来说,搭建还是比较容易的,特别是Spring Cloud全家桶,简称亲民微服务,但在发展趋势中,容器化技术已经成熟,面对巨耗内存的Spring Boot,小公司表示用不起。如今,很多刚诞生的JAVA微服务框架大多主打“轻量级”,主要还是因为Spring Boot太重。JAVA系微服务框架No1-Spring Cloud介绍有Spring大靠山在,更新、...

    Java 2020年04月06日 1335 0
  • springboot整合netty替代websocket

    步骤 1 先写好基本的Netty客户端和Netty服务的代码。参考文章【netty技术基础入门】2.搭建好基本的Springboot项目。3.将Netty服务端代码的启动代码和关闭代码分离,服务端加上@Component注解,交由Spring管理实例。4.Springboot启动时,将Netty服务给启动;同时Springboot停止时,将Netty服务销毁。 实现 Nett...

    Java 2020年04月02日 3544 0
  • netty技术基础入门

    简介 官网简介 Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients. Netty是一个异步事件驱动的网络应用程序框架,...

    Java 2020年04月02日 1402 0
  • ElasticSearch安装详解及采坑

    ElasticSearch是一个分布式的,高性能,高可用的,可伸缩的搜索和分析系统(1)可以作为大型分布式集群(数百台服务器)技术,处理PB级的数据,服务大公司;也可以运行在单机上服务于小公司(2)Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES:lucene(全文检索),商用的数据分析软件,分布式数据库(...

    Java 2020年04月02日 3136 0