随笔普通文章
文章平均质量分 81
zhousenshan
现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞
展开
-
你手写过阻塞队列吗?
jdk其实已经帮我们提供了实现方案,java5增加了concurrent包,concurrent包中的BlockingQueue就是堵塞队列,我们不需要关心BlockingQueue如何实现堵塞,一切都帮我们封装好了,只需要做一个没有感情的API调用者就行。4.BlockingQueue如何使用?BlockingQueue本身只是一个接口,规定了堵塞队列的方法,主要依靠几个实现类实现。4.1 BlockingQueue主要方法1.插入数据 (1)offer(E e):如果队列没满,返回t转载 2021-07-17 20:18:30 · 60 阅读 · 0 评论 -
分布式定时任务调度系统技术选型--转
我们先思考下面几个业务场景的解决方案:支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清算 电商整点抢购,商品价格8点整开始优惠 12306购票系统,超过30分钟没有成功支付订单的,进行回收处理 商品成功发货后,需要向客户发送短信提醒类似的业务场景非常多,我们怎么解决?为什么我们需要定时任务很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务...转载 2019-10-17 22:11:33 · 277 阅读 · 0 评论 -
使用 VisualVM 进行性能分析及调优
VisualVM 是一款免费的\集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。本文主要介绍如何使用 VisualVM 进行性能分析及调优。概述开发大型 Java 应用程序的过转载 2016-04-14 23:03:48 · 351 阅读 · 0 评论 -
Docker的镜像和容器的区别
Docker的镜像和容器的区别作者:chszs,版权所有,未经同意,不得转载。博主主页:http://blog.csdn.net/chszs一、Docker镜像要理解Docker镜像和Docker容器之间的区别,确实不容易。假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改转载 2016-04-14 23:41:26 · 889 阅读 · 0 评论 -
JAVA使用POI如何导出百万级别数据
经常使用Excel的人应该都能知道excel2007及以上版本可以轻松实现存储百万级别的数据,但是系统中的大量数据如何能够快速准确的导入到excel中这好像是个难题,对于一般的web系统,我们为了解决成本,基本都是使用的入门级web服务器tomcat,jdk在32为系统中支持的内存不能超过2个G,但是在64为中没有限制,但是在64位的系统中,性能并不是太好,所以为了解决上诉问题,我们要针对我们的代转载 2016-09-15 08:35:22 · 707 阅读 · 0 评论 -
拼组SQL中,Oracle插入超4000字节的CLOB字段的处理方法
我们可以通过创建单独的OracleCommand来进行指定的插入,即可获得成功,这里仅介绍插入clob类型的数据,blob与此类似,这里就不介绍了,下面介绍两种办法 在通过拼组sql语句来实现数据插入的应用中,我们很有可能会遇到需要插入大型数据的情况,例如,在oracle中需要插入字节数超过4000的字段内容时,我们如果通过简单的拼组sql语句来实现插入,显然就会出现问题,而在转载 2016-09-04 20:11:20 · 3928 阅读 · 0 评论 -
JavaWeb动态导出Excel可弹出下载
由于项目需求,需要将数据导出成Excel表格,并且可选择导出项,可下载。项目使用的Spring+Mybatis+SpringMVC框架,利用Apache POI导出Excel。POI具体使用请自行百度。话不多说,上代码。ExportExcelUtil代码?1234567891转载 2016-09-18 22:22:58 · 2712 阅读 · 5 评论 -
分布式锁的三种实现方式
首先说明一下什么是分布式锁,维基百科的说明为:分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。写在前面在进行大型网站技术架构设计以及业务实现的转载 2016-08-27 00:22:07 · 1266 阅读 · 0 评论 -
Google Guava 库用法整理
参考: http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports-part-1/(2,3,4) http://blog.publicobject.com 更多用法参考http://ajoo.iteye.com/category/119082转载 2016-09-06 23:31:04 · 1513 阅读 · 1 评论 -
浅谈jsp、freemarker、velocity区别
以前做web开发页面层用的基本就是就是,最近公司Java项目页面层用的技术是velocity。听说jsp要淘汰,也不知道是真是假,但本人还是比较喜欢jsp的,下面是网上查找的javaweb项目页面3种技术的区别。在java领域,表现层技术主要有三种:jsp、freemarker、velocity。jsp是大家最熟悉的技术优点:1、功能强大,可以写java代码2、支持转载 2016-10-21 21:11:24 · 298 阅读 · 0 评论 -
Spring Boot——开发新一代Spring应用
Spring官方网站本身使用spring框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系。随着Spring 3.0的发布,Spring IO团队逐渐开始摆脱XML配置文件,并且在开发过程中大量使用“约定优先配置”(convention over configuration)的思想来摆脱Spring框架中各类繁复纷杂的配置(即时是Java Con转载 2016-10-21 21:24:57 · 672 阅读 · 0 评论 -
RPC原理及RPC实例分析
在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。123456publicclass Test { publicstatic void main(String[] a转载 2016-10-23 21:08:04 · 2235 阅读 · 0 评论 -
Java线程面试题 Top 50
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用转载 2016-10-23 21:17:45 · 1397 阅读 · 0 评论 -
AAA如何插入几十万条数据 PL/SQL 调试存储过程简单实例
oracle用户数据库中,procedures就是存储过程,这是创建脚本最简单的例子create or replace procedure MyDemo(dateLine in varchar2) IS --类型定义 cursor cc is select * from tuser t; --定义一个游标变量 ccrec cc原创 2016-06-17 23:33:30 · 2041 阅读 · 0 评论 -
Java 多线程同步的五种方法
一、引言前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊。闲话不多说,进入正题。二、为什么要线程同步因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举 个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程转载 2016-10-24 23:28:18 · 297 阅读 · 0 评论 -
PostgreSQL 性能调优
from http://www.mutouxiaogui.cn/blog/?p=413批量导入性能优化关闭自动提交在批量插入数据时,如果每条数据都被自动提交,当中途出现系统故障时,不仅不能保障本次批量插入的数据一致性,而且由于有多次提交操作的发生,整个插入效率也会受到很大的打击。解决方法是,关闭系统的自动提交(SET AUTOCOMMIT = OFF),并且在插入开始之前,显式转载 2017-04-18 22:54:07 · 10995 阅读 · 0 评论 -
使用CXF开发RESTFul服务
相信大家在阅读CXF官方文档(http://cxf.apache.org/docs/index.html)时,总是一知半解。这里向大家推荐一本PacktPub.Apache.CXF.Web.Service.Development。目前,这本书是没有中文版的,为此笔者简单的写了一些经验总结。CXF官方文档(http://cxf.apache.org/docs/index.html)时,总是一转载 2017-05-02 22:13:35 · 599 阅读 · 0 评论 -
PostgreSQL 表空间与数据库
PostgreSQL中表空间的创建有点像Oracle在裸设备上创建表空间,也就是说它只有表空间的名称与数据库文件的目录,而没有具体的大小。在PostgeSQL中,它没有数据文件的概念,只是一个数据目录。下面,我们来看例子。postgres=# create tablespace ts_demo location '/home/pgsqladmin/pgdata01';转载 2017-05-20 23:53:51 · 3042 阅读 · 0 评论 -
ServletContextListener使用详解
在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListene转载 2017-05-20 23:58:48 · 1996 阅读 · 0 评论 -
TCP客户端 长连接策略
不久前,我的Socket Client程序遇到了一个非常尴尬的错误。它本来应该在一个 socket 长连接上持续不断地向服务器发送数据,如果 socket 连接断开,那么程序会自动不断地重试建立连接。 有一天发现程序在不断尝试建立连接,但是总是失败。用netstat查看,这个程序竟然有上千个socket连接处于CLOSE_WAIT状态,以至于达到了上限,所以无法建立新的转载 2017-06-07 15:20:49 · 4935 阅读 · 0 评论 -
浅谈sql中的in与not in,exists与not exists的区别
1、in和existsin是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;例如:表A(小表),表B(大表)select * fr转载 2017-06-14 21:15:36 · 831 阅读 · 0 评论 -
AAAspring事件驱动模型--观察者模式在spring中的应用
spring中的事件驱动模型也叫作发布订阅模式,是观察者模式的一个典型的应用,关于观察者模式在之前的博文中总结过,http://www.cnblogs.com/fingerboy/p/5468994.html 这里主要讲一下Spring中的观察者模式的应用.spring事件驱动模型的结构. 首先明确几个spring提供的类的概念 1.Application转载 2017-07-16 22:22:20 · 439 阅读 · 0 评论 -
(十)装饰器模式详解(与IO不解的情缘)
LZ到目前已经写了九个设计模式,回过去看看,貌似写的有点凌乱,LZ后面会尽量改进。 那么本章LZ和各位读友讨论一个与JAVA中IO有着不解情缘的设计模式,装饰器模式。 定义:装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。转载 2017-09-03 20:22:42 · 240 阅读 · 0 评论 -
Java中hashCode的作用
以下是关于HashCode的官方文档定义:[plain] view plain copyhashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。 hashCode 的常规协定是: 在 Java 应用程序执行期间,在同一对象上多次调用 has转载 2017-11-11 23:03:25 · 187 阅读 · 0 评论 -
在Windows系统下搭建ELK日志分析平台
再记录一下elk的搭建,个人觉得挺麻烦的,建议还是在linux系统下搭建,性能会好一些,但我是在windows下搭建的,还是记录一下吧,像我这种记性差的人还是得靠烂笔头简介:ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风...转载 2018-07-11 22:29:45 · 277 阅读 · 0 评论 -
elasticsearch的索引自动清理及自定义清理
一、 手动删除rm -rf *2017-03-*二、api删除curl -XDELETE 'http://127.0.0.1:9200/logstash-2016-07-*'清理掉了所有 3月份的索引文件,我发现curl 删除比rm删除要快出很多三、脚本加api删除(推荐) cat es-index-clear.sh#/bin/bash #指定日期(...转载 2018-07-18 22:18:55 · 711 阅读 · 0 评论 -
Logstash输出到Elasticsearch笔记
output配置中elasticsearch配置actionindex 给一个文档建立索引delete 通过id值删除一个文档(这个action需要指定一个id值)create 插入一条文档信息,如果这条文档信息在索引中已经存在,那么本次插入工作失败update 通过id值更新一个文档。更新有个特殊的案例upsert,如果被更新的文档还不存在,那么就会用到upsert示例:action =>...转载 2018-07-12 23:03:42 · 11675 阅读 · 0 评论 -
ELK日志中心分布式架构的逐步演化
原文链接:https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html#deploying-and-scaling概述当Logstash的使用场景逐步演进时,我们之前的架构也将随之发生改变。本文讨论了在复杂度逐渐递增下的Logstash架构一系列的演变过程。我们先从一个最简单的架构开始,然后在此架构上来逐渐增...转载 2018-07-12 23:52:59 · 2284 阅读 · 0 评论 -
bat批处理删除指定N天前的文件
Windows下bat批处理,自动获取文件的最后修改时间,然后将指定多少天之前的文件删除,需要Windows支持forfiles命令,XP及以上系统都自带forfiles命令。 删除指定目录下7天前的文件(目录为C:\test):forfiles /p "c:\test" /s /m *.* /d -7 /c "cmd /c del @path" 删除批处...转载 2018-07-18 23:21:54 · 766 阅读 · 0 评论 -
ELK日志处理之使用logstash收集log4J日志
介绍一下如何从Java工程中导出log4J日志到Logstash。一、log4j基础不能免俗的官方介绍:Log4j 是一个使用 Java 语言编写的,可靠、快速、灵活的日志框架(API),使用 Apache Software License 授权。它被移植到 C、C++、C#、Perl、Python、Ruby 和 Eiffel 语言中。Log4j 是高度可配置的,在运行期使用外部的配置文件对其进行...转载 2018-07-13 22:28:27 · 578 阅读 · 0 评论 -
ELK-windows使用过程中遇到的一些坑
kibana-4.2.0-windows安装一定要是jdk8,否则会报各种问题logstash这个最坑了,配置文件容易出错,使用的时候一定要cd 到bin目录,然后先手工打开一下,查看是否启动正常,然后再关闭,通过服务方式启动,我就是TCP延迟参数改错了,造成系统一直time_wiat,下一次一定要谨慎修改配置参数。学习的时候一些参数配置可以参考官方文档https://www.elas...原创 2018-07-14 10:42:46 · 836 阅读 · 0 评论 -
elasticsearch的索引自动清理及自定义清理
近发现elasticsearch近期索引文件大的吓人,清理了下之前的索引文件,发现服务器性能大大的减轻了一半,想一直保留近一个月的索引文件,但是又不想每个月手动清楚,在此写了一个小脚本查询索引:curl -XGET 'http://127.0.0.1:9200/_cat/indices/?v'一、 手动删除rm -rf *2017-03-*二、api删除curl -XDELETE 'http://...转载 2018-07-15 14:16:26 · 6046 阅读 · 0 评论 -
windows下安装filebeat
简介:windows下安装filebeat,并且初次使用1.PowerShell安装 Filebeat此处只介绍 Windows 下面的安装,至于其他系统, 请参考: 官方文档下载并解压后,有两种方式运行,一种是注册为 Windows 服务,另一种是直接通过命令行运行;下面分别介绍两种方式。1.1 注册为 Windows 服务前提:系统必须有 PowerShell,因为官方安装包中提供的脚本只能在...转载 2018-07-15 16:12:46 · 4285 阅读 · 1 评论 -
ELK+Filebeat 集中式日志解决方案详解
ELK Stack 简介ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack。根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案。Elasticsearch:分布式搜索...转载 2018-07-15 16:51:42 · 777 阅读 · 1 评论 -
分布式实时日志分析解决方案 ELK 部署架构
一、概述ELK 已经成为目前最流行的集中式日志解决方案,它主要是由Beats、Logstash、Elasticsearch、Kibana等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决方案。本文将会介绍ELK常见的架构以及相关问题解决。Filebeat:Filebeat是一款轻量级,占用服务资源非常少的数据收集引擎,它是ELK家族的新成员,可以代替Logstash作为在应用服...转载 2018-07-21 08:51:21 · 206 阅读 · 0 评论 -
Spring之事件监听
spring的监听事件模型应该是观察者模式。本人项目里的应用在process方法按日期同步某个库的数据,在方法最后publish一个event事件,这个事件用于后续同步过来的数据处理。事件处理采用了spring的监听模型.这样可以做到process方法与event可以异步分离执行。(注:这个事件模型缺省使用SyncTaskExecutor来执行listener的注册event,所有该listene...转载 2018-08-15 22:53:33 · 1234 阅读 · 0 评论 -
Elasticsearch Java API之删除索引
package com.nerve.core.test; import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.util.Properties; import org.elasticsearch.action.admin.cluster.state.ClusterSt...转载 2018-08-30 23:05:22 · 4540 阅读 · 0 评论 -
Guava并发:RateLimiter限制资源的并发访问线程数
RateLimiter类似于JDK的信号量Semphore,他用来限制对资源并发访问的线程数。RateLimiter limiter = RateLimiter.create(4.0); //每秒不超过4个任务被提交limiter.acquire(); //请求RateLimiter, 超过permits会被阻塞executor.submit(runnable); //提交任务也可...转载 2018-09-02 18:14:02 · 2210 阅读 · 0 评论 -
spring学习之三 数据库操作jdbcTemplate
概念 jdbcTemplate就Spring对数据库持久化技术的实现,通过它可以对数据库进行CRUD等操作。JDBCTemplate和代码实现public void jdbcadd() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); ...转载 2018-10-18 22:47:29 · 182 阅读 · 0 评论 -
第一次有人把“分布式事务”讲的这么简单明了
又或者在网上购物明明已经扣款,但是却告诉我没有发生交易。这一系列情况都是因为没有事务导致的。这说明了事务在生活中的一些重要性。有了事务,你去小卖铺买东西,那就是一手交钱一手交货。有了事务,你去网上购物,扣款即产生订单交易。事务的具体定义事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行...转载 2018-11-17 10:54:29 · 378 阅读 · 0 评论