【JAVA】综合
文章平均质量分 88
JAVA前线
微信公众号「JAVA前线」
展开
-
MySQL深分页问题原理与三种解决方案
本文第一介绍深分页问题表现和原因。第二介绍深分页问题三种解决方法,方案一是从业务维度优化,方案二是使用覆盖索引进行优化,方案三是使用Id分页。第三展示MyBatis相关代码原创 2023-05-03 12:34:52 · 1531 阅读 · 0 评论 -
复杂任务处理三部曲:系统性思维、结构化思维、流程化管理
在面对复杂任务时,系统性思维核心是明确目标,结构化思维核心是拆解任务,流程化管理核心是及时抛出风险,可以使用三张表格管理项目进度原创 2023-03-05 20:15:18 · 721 阅读 · 0 评论 -
六个思考维度:DDD + SpringBoot工程九层结构图解与实战
微服务和九层结构表述的是不同维度概念。微服务重点描述系统与系统之间交互关系,九层结构重点描述一个工程不同模块之间交互关系原创 2023-02-03 09:48:30 · 6669 阅读 · 1 评论 -
微服务之变化多端:入口要灵活、服务要稳定
第一点上图所有应用都可以使用九层结构。第二点中台应用承载核心逻辑,暴露核心接口,中台并不要理解所有端数据结构,而是通过client接口暴露相对稳定的数据。第三点针对面向B端、面向C端、面向运营三种端,各自拆分出一个应用,在此应用中进行转换、适配和裁剪,并且处理各自业务。第四点什么是大中台、小前台思想?中台提供稳定服务,前台提供灵活入口。第五点如果后续要做秒杀系统,那么也可以理解其为一个前台应用(seckill-front)聚合各种中台接口原创 2023-02-03 09:47:25 · 267 阅读 · 0 评论 -
使用分布式锁一定注意两个坑
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习原创 2023-02-03 09:44:45 · 238 阅读 · 0 评论 -
五个分层维度:SpringBoot工程分层实战
分层优点是每层只专注本层工作,可以类比设计模式单一职责原则,或者经济学比较优势原理,每层只做本层最擅长的事情原创 2022-12-05 22:57:44 · 1410 阅读 · 0 评论 -
服务端技术方案应该具有哪些章节
本文展示了一篇技术方案需要具备的章节,需要说明根据需求复杂度,并不是所有章节都必须。如果一个需求复杂度不高,可以只选取其中几个章节原创 2022-11-30 21:35:51 · 375 阅读 · 0 评论 -
异步性能不如同步?通过压测讨论应该如何设置线程数
结合不同线程池配置进行压测,如果线程池选择不合适,异步执行性能不如同步,所以要配置合适线程数原创 2022-09-11 16:10:31 · 180 阅读 · 0 评论 -
通过一款插件动态观察ES分片如何分布
第一本文介绍了ES基本概念并提出了两个问题,第二本文为了回答这两个问题搭建了ES集群,第三本文通过六个维度回答了第一个问题,第四本文通过五个维度回答了第二个问题原创 2022-08-22 08:52:52 · 649 阅读 · 0 评论 -
性能问题从发现到优化一般思路
技术系统有一个发展过程,在业务初期主要是实现业务功能和目标,由于数据和访问量都不大,所以性能问题并不作为首要考虑。但是随着业务发展,随着数据和访问量增大甚至激增,造成例如首页五秒钟才能展示等问题,这种不佳体验会造成用户流失,此时性能就是必须面对之问题。早期:主要实现业务需求,性能非重点考虑中期:性能问题注解显现,影响业务发展后期:技术迭代性能与业务必须同时考虑如何发现性能问题,并且最终如何解决性能问题就是本文讨论之要点。...原创 2022-08-08 08:29:57 · 180 阅读 · 0 评论 -
通过实例讲清楚MongoDB九种聚合操作
第一介绍了MongoDB与关系型数据库关系,并且准备本文需要的测试数据,第二介绍了聚合语法和聚合管道相关概念,第三通过实例介绍了如何使用聚合操作原创 2022-07-02 11:02:01 · 303 阅读 · 0 评论 -
《结合DDD讲清楚编写技术方案的七大维度》再讨论
第一章节回顾《结合DDD讲清楚编写技术方案七大维度》这篇文章并且提出扩展两个维度:概念映射与代码结构,第二三四章节对应扩展第一个维度概念映射,第五章节对应扩展第二个维度代码结构...原创 2022-06-19 14:37:16 · 230 阅读 · 0 评论 -
MySQL自增主键用完报什么错?有什么建议?
MySQL自增主键用完报什么错?有什么建议?原创 2022-06-04 14:58:59 · 280 阅读 · 0 评论 -
多图详解:七种具体方法增强代码可扩展性
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习1 六大原则在设计模式中有六大设计原则:单一职责原则:一个类只做一件事里式替换原则:子类可以扩展父类依赖倒置原则:面向接口编程接口隔离原则:高内聚低耦合迪米特法则:最少知道原则开闭原则:关闭修改,开放新增我认为在这六个原则中开闭原则最为重要,开闭原则是可扩展性的重要基石。第一个原因是需求变化时应该通过新.原创 2022-05-08 08:52:55 · 2392 阅读 · 2 评论 -
自定义validation注解:解决动态多字段联动校验问题
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习1 文章概述javax.validation是基于JSR-303标准定义的一组接口,目的是使开发者简洁地校验参数,hibernate-validator实现了这一组接口,可以作为工具独立引用。<dependency> <groupId>javax.validation</groupI.原创 2022-05-03 17:22:33 · 7144 阅读 · 1 评论 -
一文讲清楚SpringBoot六种读取配置方式
本文梳理了SpringBoot六种读取配置方式,大家在项目中可以进行灵活组合和应用,希望本文对大家有所帮助原创 2022-04-23 19:41:40 · 783 阅读 · 0 评论 -
OAuth2.0原理图解:第三方网站为什么可以使用微信登录
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习1 文章概述假设小明开发了一个A网站,需要支持微信登陆和淘宝账号登陆。如果你是微信或者淘宝开发人员,你会怎么设计这个功能?本文结合淘宝开放平台官方文档以淘宝账号为例。从最简单视角去思考,用户在网站A输入淘宝用户名和密码,网站A调用淘宝接口校验输入信息,校验通过则登陆成功,整体流程如下图:上述思路存在什么问题?最显.原创 2022-02-20 17:11:56 · 664 阅读 · 0 评论 -
长文图解七种负载均衡策略
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习1 三组概念负载均衡、集群容错、服务降级这三个概念在DUBBO中非常重要,同理其它分布式框架也都有相同或者相近之概念。从调用顺序角度分析,调用顺序依次是负载均衡、集群容错、服务降级。从解决问题角度分析,负载均衡解决了「选哪一个」问题,集群容错解决了「换哪一个」问题,服务降级解决了「全错怎么办」问题。假设有1个服务消费者面.原创 2022-02-03 20:45:24 · 1978 阅读 · 0 评论 -
多图详解:二叉堆原理并手写一个优先队列
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习1 优先队列应用队列是一种先进先出的数据结构,先放入队列的元素会先出队列。但是有这样一种场景,我们希望出队列顺序不是根据放入队列顺序,而是根据元素本身具有的优先级,例如元素优先级高则先出队列,这时就要使用优先队列。1.1 应用一我们设想这样一种发送消息的业务场景:消息具有优先级属性,在同一个队列中优先发送优先级高的消.原创 2022-01-03 09:44:16 · 415 阅读 · 0 评论 -
消息积压问题优化思路探讨
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,欢迎大家加我微信「java_front」一起交流学习0 文章概述在使用消息中间件时消息积压是我们必须面对的问题,无论这种问题是生产消息过快还是消费者消费能力不足导致的。本文我们以RocketMQ为例分析消息积压问题通用处理思路。1 不处理消息积压一定要处理吗?我认为在不影响业务情况下,消息积压可以不处理,等待积压消息逐渐被消化即可,因为消息积压本质上是对消费者的保护。我们不妨.原创 2021-04-24 10:20:12 · 318 阅读 · 0 评论 -
从SLF4J源码角度分析阿里开发手册日志规约
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,欢迎大家加我微信「java_front」一起交流学习1 日志规约阿里巴巴开发手册日志规约章节有一条强制规定:应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API。使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一:import org.slf4j.Logger;import org.slf4j.LoggerFac.原创 2021-03-14 14:31:37 · 336 阅读 · 2 评论 -
长文图解:单张表数据量太大问题怎么解决?请记住这六个字
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习1 文章概述在业务发展初期单表完全可以满足业务需求,在阿里巴巴开发手册也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时就分库分表。但是随着业务的发展和深入,单表数据量不断增加,逐渐成为业务系统的瓶颈。这是为什么呢?从宏观层面分析任何物体都必然有其.原创 2020-12-19 18:29:02 · 6031 阅读 · 2 评论 -
深入分析缓存穿透和击穿问题解决方案
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎加我微信「java_front」一起交流学习1 文章概述在互联网场景中缓存系统是一个重要系统,为了防止流量频繁访问数据库,一般会在数据库层前设置一道缓存层作为保护。缓存是一个广义概念,核心要义是将数据存放在离用户更近的地方,或者是将数据存放在访问更快的介质。缓存对应到实际应用中可以分为内存缓存、远程缓存。内存缓存常见工具例如Guava、Ecache等,远程缓存常见系统例.原创 2020-12-04 18:28:45 · 303 阅读 · 0 评论 -
面试官问一个数据表字段怎么表示多种业务含义?我愣了五分钟
欢迎关注公众号【JAVA前线】查看精彩文章1 需求背景在系统中用户一共有三种角色:普通用户,管理员,超级管理员,现在需要设计一张用户角色表记录这类信息。我们不难设计出如下方案:idnamesuperadminnormal101用户一100102用户二010103用户三001104用户四111我们使用1表示是,0表示否,那么观察上表不难得出,用户一有用超级管理员角色,用户二具有管理员角色,用户三具有普通用户角色,用户四.原创 2020-09-18 20:16:23 · 694 阅读 · 1 评论 -
JAVA8核心语法梳理(1)Lambda表达式、函数式接口、方法引用
1 文章概述JAVA13已经面世一段时间了,但是追根溯源一些新特性例如Lambda表达式、函数式接口、StreamAPI首次还在是出现在JAVA8。这些新特性有些开发者使用并不习惯,尤其链式编程感觉没有代码断句,可读性不强。但是JAVA8之所以逐渐流行确实是因为确实有许多优点:代码优雅易于并行StreamAPIOptional减少空指针现在项目代码中越来越多出现JAVA8语法,为了读懂代码也需要我们熟悉JAVA8语法,本文介绍JAVA8如下重要特性,streamAPI我们下一篇文章再详细介绍原创 2020-09-18 19:52:26 · 287 阅读 · 0 评论 -
为什么阿里不建议在返回对象中使用枚举
1 文章概述在阿里巴巴开发手册中有这样一条强制规定值得大家关注:【强制】二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用枚举类型或者包含枚举类型的POJO对象。我们在日常开发中服务生产者会提供二方包给消费者引用,在返回对象中属性不能包含枚举类型,这是一个强制要求。我们通过一个实例分析:为什么阿里巴巴开发手册中会有这样一条强制要求。2 生产者实例服务生产者提供1.0版本二方包public class StudentDTO implements Seriali.原创 2020-06-07 21:03:18 · 733 阅读 · 0 评论 -
线程间共享数据
一、每个线程做执行的代码相同若每个线程执行的代码相同,共享数据就比较方便。可以使用同一个Runnable对象,这个Runnable对象中就有那个共享数据。public class MultiThreadShareData1{ public static void main(String[] args) { SaleTickets sale = new SaleTicket原创 2014-02-07 10:48:42 · 7454 阅读 · 3 评论 -
Java如何正确关闭IO流
一、错误示例1public void fileCopy(){FileReader fr = null;FileWriter fw = null;try{fr = new FileReader("c:\\xy1.txt"); // ①fw = new FileWriter("c:\\xy2.txt"); // ②char[] charBuffer = new ch原创 2014-04-12 18:04:54 · 17586 阅读 · 2 评论 -
WebService报错javax.xml.ws.soap.SOAPFaultException: javax.xml.ws.WebFault.messageName()
一、发现问题JAX-WS规范是一组XML web services的JAVA API。JAXWS-RI是其的一个包。用jaxws-ri-2.2.5.zip做webservice,将jaxws-ri-2.2.5.zip中lib内容拷贝到web project的lib中,运行时使用该包时抛出异常:javax.xml.ws.soap.SOAPFaultException: javax.xml.w原创 2013-11-06 19:51:42 · 62606 阅读 · 2 评论 -
Java中的匿名内部类
通常通过继承某个类或实现某个接口的方式来编写代码,但是有时候某一些代码只使用一次,就没有必要写专门写一个子类或实现类了,可以采用匿名内部类的写法。最常用的场景是线程方面的应用。一、不使用匿名内部类①继承abstract class Player{public abstract void play();}public class FootBallPlayer ex原创 2014-06-14 17:24:32 · 4127 阅读 · 0 评论 -
JAVA线程中的生产者和消费者问题
生产者消费者问题是研究多线程时绕不开的问题,描述的是有一块生产者和消费者共享的有界缓冲区,生产者往缓冲区放入产品,消费者从缓冲区取走产品,这个过程可以无休止的执行,不能因缓冲区满生产者放不进产品而终止,也不能因缓冲区空消费者无产品可取而终止。解决生产者消费者问题的方法有两种,一种是采用某种机制保持生产者和消费者之间的同步,一种是在生产者和消费者之间建立一个管道。前一种有较高的效率并且可控制转载 2014-06-23 07:05:54 · 1602 阅读 · 0 评论 -
Java中取某一个范围的随机数
一、取模操作public static void main(String[] args){for (int i = 1; i {int j = i % 11;System.out.println(i + "%11的结果——" + j);}}1%11的结果——12%11的结果——23%11的结果——34%11的结果——45%11的结果——56%原创 2013-12-08 21:37:14 · 22479 阅读 · 4 评论 -
大小端模式
1 什么大小端大小端在计算机业界,Endian表示数据在存储器中的存放顺序。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作转载 2016-12-25 22:21:52 · 2785 阅读 · 0 评论 -
Java中的位运算
Java提供的位运算符有:左移(>)、无符号右移(>>>)、位与(&)、位或(|)、位非(~)、位异或(^),除了位非( ~)是一元操作符外,其它的都是二元操作符。1 左移 ( System.out.println(5步骤1:将5转为2进制表示形式,java中int类型4个字节32位步骤2:左移2位后低位补00000 0000 0000 0000 0000 00转载 2016-12-25 21:35:03 · 608 阅读 · 0 评论 -
Spring中BeanPostProcessors【1】简单预处理
1 概述有时我们希望在Spring IoC容器初始化受管Bean前、属性设置后对该Bean先做一些预处理,或者在容器销毁受管Bean之前自己释放资源。Spring IoC为我们提供了多种方法来实现受管Bean的预处理和后处理。Spring中定义了BeanPostProcessors接口:package org.springframework.beans.factory.config;im转载 2017-01-13 09:04:55 · 3262 阅读 · 0 评论