java
文章平均质量分 81
John_like521
你若盛开,清风自来!
展开
-
Elasticsearch提供的多种查询方式
Elasticsearch提供了丰富的查询类型,可以根据你的具体需求选择合适的查询方式。每种查询都有其特定的应用场景,了解它们的特点可以帮助你更有效地构建搜索和过滤逻辑。如果还有其他问题或需要进一步的帮助,请随时告诉我。原创 2024-08-15 17:05:59 · 656 阅读 · 0 评论 -
CompletableFuture异步编排在多任务并行执行中的使用
通过异步编排实现多任务并行的场景的执行优化,手动配置线程池可以让我们根据具体业务,更好的设置线程池的参数。CompletableFuture的介绍和相关API。原创 2024-07-31 10:41:50 · 445 阅读 · 0 评论 -
精选面试题
并发编程一.Executor为什么使用线程池:手动创建线程耗费性能,不利于管理。首先创建线程池有两种方式:使用Executors工厂来创建ThreadPoolExecutor这类自定义线程池。1. 使用Executors工厂来创建Executors是一个类,用来创建线程池,常用的有四种线程池1.newFixedThreadPool 创建一个可重复固定的线程数的线程池2.newCachedThreadPool 创建一个可缓存的线程池,调用execute将重复用以前构造的线程(如果当原创 2021-06-01 17:18:18 · 268 阅读 · 0 评论 -
消息队列设计精要
消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等。本文不会一一介绍这些消息队列的所有特性,而是探讨一下自主开发设计一个消息队列时,你需要思考和设计的重要方面。过程中我们会参考这些成熟消息队列的很多重要思想。本文首先会阐述什么时候你需要一个消息队列原创 2020-05-13 14:30:03 · 437 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解...原创 2020-04-28 14:45:24 · 219 阅读 · 0 评论 -
后端业务域性能优化指南
环境准备操作系统JVM与应用服务器周边依赖系统数据库拓扑根据扩展性原则考虑: 垂直拆分:按业务将表拆分到不同的库。 水平拆分:水平分库分表。 读写分离:在业务允许的情况下,在从库读取非实时数据。 海量数据表的定期归档:主要有利于DDL变更及数据备份。查询时如命中索引差别不大 Schema:数据库DDL SQL 遵循DBA的MySQ...原创 2020-05-08 11:31:11 · 272 阅读 · 0 评论 -
@Transactional和Propagation的使用
@Transactional事务几点注意这里面有几点需要大家留意:A. 一个功能是否要事务,必须纳入设计、编码考虑。不能仅仅完成了基本功能就ok。B. 如果加了事务,必须做好开发环境测试(测试环境也尽量触发异常、测试回滚),确保事务生效。C. 以下列了事务使用过程的注意事项,请大家留意不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactiona...原创 2020-03-27 14:44:58 · 3463 阅读 · 1 评论 -
MQ使用问题
一、如何保证消息的幂等性?业务系统在收、发MQ消息时都启用了确认机制,所以返回发送成功的消息至少会被消费一次(at-least-once), 需要消费端业务逻辑满足幂等性。幂等性是指,同一个消息被消费多次产生的结果与只消费一次的结果是相同的。x为某集合内的任意数, 如果满足f(x)=f(f(x)), 那么我们称f运算为具有幂等性。举个例子,下面的 Example 类的 close() 方法...原创 2019-12-23 17:19:31 · 612 阅读 · 0 评论 -
线程池相关
https://www.jianshu.com/p/210eab345423对线程池的理解,项目中哪个地方使用了,如何使用的,用的Excutor框架中的哪个实现类,为什么用这个?一、为什么要用线程池?1、创建和销毁线程伴随系统的开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率线程池缓存线程,可用已有的闲置线程来执行新任务2、线程并发数量过多,抢占系统资源从而导致阻塞...原创 2019-12-17 16:07:23 · 180 阅读 · 0 评论 -
一次分表踩坑实践的探讨
前言之前不少人问我“能否分享一些分库分表相关的实践”,其实不是我不分享,而是真的经验不多????;和大部分人一样都是停留在理论阶段。不过这次多少有些可以说道了。先谈谈背景,我们生产数据库随着业务发展量也逐渐起来;好几张单表已经突破亿级数据,并且保持每天 200+W 的数据量增加。而我们有些业务需要进行关联查询、或者是报表统计;在这样的背景下大表的问题更加突出(比如一个查询功能需要跑好几分...转载 2019-12-03 11:04:49 · 187 阅读 · 0 评论 -
Tomcat 源码分析(转)
Tomcat源码分析(一)--服务启动1.Tomcat主要有两个组件,连接器和容器,所谓连接器就是一个http请求过来了,连接器负责接收这个请求,然后转发给容器。容器即servlet容器,容器有很多层,分别是Engine, Host,Context,Wrapper。最大的容器Engine,代表一个servlet引擎,接下来是Host,代表一个虚拟机,然后是Context,代表一个应...转载 2019-11-27 15:23:40 · 1156 阅读 · 0 评论 -
平时碰到系统CPU飙高和频繁GC,你会怎么排查?
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,...转载 2019-11-21 11:52:48 · 250 阅读 · 0 评论 -
关于 HTTP 中 状态码解读
HTTP协议简介HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。(暂不介绍HTTP2)协议协议规定了通信双方必须遵循的数据传输格式,这样通信双方按照约定的格式才能准确的通信。无状态无状态是指两次连接通信之间是没有任何关系的,每次都是一个新的连接,服务端不会记录前后的请求信息。...原创 2019-11-06 11:27:30 · 215 阅读 · 0 评论 -
分布式核心要点摘要学习
现在的业务发展进度,单体应用基本要进博物馆了!分布式系统,从设计、到开发、到运维,都让人头大!微服务的理念也越来越普及,对于没有自我研发底层基础设施的中小型企业来说,当前Spring Cloud是个很好的选择。这里就不细究分布式、SOA、微服务这些概念了。先从提到分布式时经常碰到的一些概念说起,进行一个粗略的整理。个人习惯,XMind搞起!1. 分布式相关概念2. 分布式数据...转载 2019-10-30 16:30:54 · 321 阅读 · 0 评论 -
高并发访问解决方法
经过查资料,方案如下所示。 1 从最基础的地方做起,优化我们写的代码,减少必要的资源浪费。 a、避免频繁的使用new对象,对于整个应用只需要存在一个实例的类,我们可以使用单例模式。对于String连接操作,使用 StringBuffer或StringBuilder,对于工具类可以通过静态方法来访问。 b、避免使用错误的方式,尽量不用instanceof做条件判...原创 2018-03-09 16:06:35 · 2408 阅读 · 0 评论 -
IntelliJ IDEA常用快捷键汇总
在使用IntelliJ Idea的时候,使用快捷键是必不可少的。掌握一些常用的快捷键能大大提高我们的开发效率。有些快捷键可以熟练的使用,但是还有另外一些快捷键虽然很好用,但是由于因为没有形成使用习惯或者没有理解快捷键的用法,甚至之前对一些快捷键根本没有概念,导致不会去使用。对于这些快捷键,如果能够用好,编辑代码的效率必能提高一个水平。所以在此梳理出来,加强自己的使用,形成习惯。(注:有些操作的...原创 2018-11-23 17:07:01 · 178 阅读 · 0 评论 -
RabbitMQ入门使用
RabbitMQ(Rabbit Message Queue),即消息队列系统,它是一款开源消息队列中间件,采用Erlang语言开发,RabbitMQ是AMQP(Advanced Message Queueing Protocol)的标准实现。 AMQP是一个公开发布的异步消息的规范,是提供统一消息服务的应用层标准高级消息队列协议,为面向消息的中间件设计,消息中间件主要用于组件之间的解...原创 2018-11-07 17:29:32 · 2253 阅读 · 0 评论 -
MyBatis在insert插入操作时返回主键ID的配置
很多时候,在向数据库插入数据时,需要保留插入数据的id,以便进行后续的update操作或者将id存入其他表作为外键。但是,在默认情况下,insert操作返回的是一个int值,并且不是表示主键id,而是表示当前SQL语句影响的行数。。。接下来,我们看看MyBatis如何在使用MySQL和Oracle做insert插入操作时将返回的id绑定到对象中。MySQL用法:<inser...原创 2018-10-26 09:45:42 · 557 阅读 · 0 评论 -
MyBatis实现模糊查询的几种方式
在学习MyBatis过程中想实现模糊查询,可惜失败了。后来上百度上查了一下,算是解决了。记录一下MyBatis实现模糊查询的几种方式。 数据库表名为test_student,初始化了几条记录,如图: 起初我在MyBatis的mapper文件中是这样写的: <select id="searchStudents" resultType="com.exam...转载 2018-09-05 15:56:06 · 732 阅读 · 0 评论 -
sharding-jdbc分库分表
当当开源的sharding-jdbc,官方网址:https://github.com/dangdangdotcom/sharding-jdbc好了,看了这么多的介绍,感觉还是很高大上的,注意点有:①对JDBC API进行了原生态的分装,这是与cobar-client不一样的地方,这就是他可以支持多个第三方ORM框架的关键②可支持=,BETWEEN,IN等操作,说明,JDBC返回结果...原创 2018-12-12 16:59:21 · 368 阅读 · 0 评论 -
zookeeper知识图谱
原创 2019-07-03 14:38:37 · 349 阅读 · 1 评论 -
canal概述
概述canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。起源:早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获...转载 2019-05-17 14:33:59 · 2296 阅读 · 0 评论 -
浅析DNS域名解析过程
对于每一个HTTP请求发起过程中,都有很重要的一个步骤——DNS解析,本篇文章将跟着DNS解析过程来分析域名是如何解析的。一、DNS域名解析步骤下图是DNS域名解析的一个示例图,它涵盖了基本解析步骤和原理。下面DNS解析步骤进行讲解,后面将采用命令行的形式来跟踪DNS解析过程。当用户在地址栏键入www.baidu.com并敲下回车键之后,域名解析就开始了。第一步:检查浏览...转载 2019-04-16 11:45:17 · 1723 阅读 · 0 评论 -
maven打包之resource配置
一、简介构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。src/main/java和src/test/java这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。...原创 2019-03-26 16:13:26 · 1796 阅读 · 0 评论 -
(转)数据可视化之美:经典案例与实践解析
随着 DT 时代的到来,传统的统计图表很难对复杂数据进行直观地展示。这几年数据可视化作为一个新研究领域也变得越来越火。成功的可视化,如果做得漂亮,虽表面简单却富含深意,可以让观测者一眼就能洞察事实并产生新的理解。可视化(visualization)和可视效果(visual)两个词是等价的,表示所有结构化的信息表现方式,包括图形、图表、示意图、地图、故事情节图以及不是很正式的结构化插图。基本的可...转载 2019-03-21 16:00:27 · 1779 阅读 · 0 评论 -
MQ业务消息执行顺序问题
问题背景: 单机架构下MQ队列本身具有先进先出的有序特性,但在分布式架构下,消费的顺序受服务实例和网络的影响而无法继续保持有序特性。 由于业务消息的执行具有先后关系,无序的执行会导致业务处理异常。 以上BUG消费端采用业务逻辑兼容的方案(比如:先收到取消指令,会自动创建订单),会增加程序处理复杂度,方案上需要优化方案一:消费端增加消息记录表,暂存不满足业务条件的消息,并采用定时器进行补偿处...原创 2019-02-19 15:51:49 · 3620 阅读 · 0 评论 -
Idea常用快捷键
搜索类文件ctrl+shift+alt+N查找类中的方法和属性ctrl+F12快速查找类或方法在整个项目中的位置:按住Ctrl键再点击类或方法会出现所有用到过的文件对象 Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L 格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如get,set方法,构造函数等)Ctr...原创 2019-01-23 14:53:04 · 174 阅读 · 0 评论 -
常用的几种大数据架构剖析
大数据 架构数据分析工作虽然隐藏在业务系统背后,但是具有非常重要的作用,数据分析的结果对决策、业务发展有着举足轻重的作用。随着大数据技术的发展,数据挖掘、数据探索等专有名词曝光度越来越高,但是在类似于Hadoop系列的大数据分析系统大行其道之前,数据分析工作已经经历了长足的发展,尤其是以BI系统为主的数据分析,已经有了非常成熟和稳定的技术方案和生态系统,对于BI系统来说,大概的架构图如下: ...转载 2018-08-31 17:11:32 · 61735 阅读 · 3 评论 -
dubbo找不到dubbo.xsd报错
构建dubbo项目的时候会遇到:Multiple annotations found at this line:- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dubbo:application'.- schema_re转载 2017-12-19 14:08:27 · 254 阅读 · 0 评论 -
高并发&高可用系统应对策略的一些思考
解耦神器:MQMQ是分布式架构中的解耦神器,应用非常普遍。有些分布式事务也是利用MQ来做的。由于其高吞吐量,在一些业务比较复杂的情况,可以先做基本的数据验证,然后将数据放入MQ,由消费者异步去处理后续的复杂业务逻辑,这样可以大大提高请求响应速度,提升用户体验。如果消费者业务处理比较复杂,也可以独立集群部署,根据实际处理能力需求部署多个节点。需要注意的是:需要确认消息发送MQ成功比如RabbitMQ...转载 2018-03-16 10:30:18 · 472 阅读 · 0 评论 -
Java趣谈——如何构建一个高效且可伸缩的缓存
本集概要:怎样构建一个线程安全而又高效、可伸缩的缓存?怎样利用设计模式,把缓存做成通用的工具?除了synchronize和volatile,我们还能使用哪些工具来开发线程安全的代码?前情回顾: Volatile趣谈——我是怎么把贝克汉姆的进球弄丢的大雄开发的门线传感器在曼联和阿森纳的比赛中一鸣惊人,越来越多的客户向公司订购这款软件……糙版缓存一天,哆啦对大雄说,“大雄,你看我们后台这个统计用户消费...转载 2018-03-02 14:02:30 · 290 阅读 · 0 评论 -
java中集合总结
一:Collection1、List(有序,可重复) 1.1、ArrayList 数组、查询快、增删慢、线程不安全、效率低1.2、LinkedList链表、查询慢、增删快、线程不安全、效率低1.2、Vector数组、查询快、增删慢、线程安全、效率高2、Set(无序、唯一)2.1、TreeSet红黑数、有序两种排序方法: 自然排序(元素具备比较性) ...原创 2018-03-10 14:19:40 · 179 阅读 · 0 评论 -
《深入理解mybatis原理》 Mybatis数据源与连接池
对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池。 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的。紧接着将分类介绍UNPOOLED、POOLED和JNDI类型的数据源组织;期间我们会重点讲解POOLED类型的数据源和其实现的连接...转载 2018-03-22 14:21:28 · 216 阅读 · 0 评论 -
大数相乘问题(java版)
将两个大数保存到字符串中,他们相乘的结果也保存到字符串中,那么无论多大的数,都能够用这种方法去解决。首先看下我们数学上怎么去计算两个数字相乘的: 如果我们用程序把上面的过程写出来,那么这个问题就解决了。java代码如下:package com.zyk.model;import java.util.Scanner;public class BigNumMuti { public st...转载 2018-03-13 14:04:10 · 998 阅读 · 0 评论 -
Hibernate总结
1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的?为什么要使用①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 ②.Hibernate 是一个基于JDBC的主流持久化框架,是一个优秀的ORM 实现。他很大程度的简化DAO层的编码工作 ③.hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数...原创 2018-03-06 11:34:55 · 200 阅读 · 0 评论 -
springmvc和struts2比较
springmvc流程图;struts2访问调用流程图:依照上图,我们可以看出一个请求在struts的处理大概有如下步骤:客户端初始化一个指向Servlet容器(例如Tomcat)的请求;这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)...原创 2018-03-19 16:38:48 · 422 阅读 · 0 评论 -
Java中判断两个lang类型是否相等问题
开发中有遇到Long类型比较是否相等,比如Long A和Long B判断是否相等,当时习惯性的直接A==B;自测的话确实么有问题,但是测试那边测试就有问题,当时郁闷了一下然后换成了A.equals(B)或A.longValue()==B.longValue()都是正确的; 改完bug,觉得需要看看是为什么,通过看Long.class,可以看出原创 2018-02-03 11:41:55 · 2803 阅读 · 0 评论 -
HashMap遍历的四种方法
方法1:使用For-Each迭代entries这是最常见的方法,并在大多数情况下更可取的。当你在循环中需要使用Map的键和值时,就可以使用这个方法Map map = new HashMap();for(Map.Entry entry : map.entrySet()){ System.out.println("key = " + entry.getKey() + ", valu原创 2018-01-22 09:43:13 · 111988 阅读 · 5 评论 -
s:if在<s:iterator>中的使用
未关联 已关联 ${tablepath==null?'否':'是'}原创 2018-01-22 17:35:04 · 564 阅读 · 0 评论 -
java设计模式系列-装饰者模式
定义:装饰者模式:指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。特点:优点:1、装饰者和被装饰者继承或实现同一个装饰类或接口2、装饰模式可以提供比继承更高的灵活性3、可以通过一种动态的功能来扩展一个类的功能,在运行时选择不同的装饰器,从而实现不同的行为。4、组合具体的装饰类,可以创建很多不同行原创 2018-01-15 10:44:24 · 241 阅读 · 0 评论