![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 90
王卫东
这个作者很懒,什么都没留下…
展开
-
谁是 JDK8 中最快的 GC
我们都知道 OpenJDK8 有好几个垃圾回收算法,比如 ParallelGC,CMS,还有 G1,那么哪个才是最快的?如果 GC 算法从 Java8 中默认的 ParallelGC 切换到 G1 会发生什么(JDK9 就是把默认 GC 从 ParallelGC 切到了 G1)?转载 2023-04-12 21:53:04 · 697 阅读 · 0 评论 -
布隆过滤器
本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构,特点是高效地插入和查询,用来告诉我们“某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。拥有极高的性能,无论写入操作还是读取操作,时间复杂度是O(1)。用途: 解决Redis缓存穿透 在爬虫时,对爬虫网址进行过滤,已经存在布隆中的网址,不在爬取。 垃圾邮件过滤,对每一个发送邮件的地址进行判断是否在布隆的黑名单中,如果...原创 2022-04-24 18:34:53 · 1378 阅读 · 0 评论 -
微服务时代组件化和服务化的抉择
随着业务系统的复杂性越来越高,系统之间的调用也越来越多,在微服务拆分和迭代过程中,是不断的拆分出新的独立的服务还是封装独立的组件以jar包依赖的方式提供服务是我们经常需要面对的问题,本文将详细探讨这两种不同的方式区别、各自的优劣势及适用的场景,希望能够对大家有所启发。一、组件化&服务化定义随着公司互联网业务发展越来越迅速,系统的复杂性越来越高,系统之间的调用也越来越多,在微服务拆分和迭代过程中,经常会遇到两种场景问题: 自己系统内部的一些公共功能模块到底以什么形式提供服转载 2021-12-09 16:47:20 · 956 阅读 · 0 评论 -
Java压缩算法性能比较
前言游戏开发中,经常在玩家进入游戏的时候进行必要的信息初始化,往往这个初始化信息数据包是相对来说还是比较大的,一般在30-40kb左右,还是有必要进行压缩一下再发送消息,刚好前段时间看过,里面列举了一些常用的压缩算法,如下图所示:是否可切分表示是否可以搜索数据流的任意位置并进一步往下读取数据,这项功能在Hadoop的MapReduce中尤其适合。下面对这几种压缩格式进行简单的介绍,并进行压...转载 2019-12-24 16:13:05 · 1115 阅读 · 0 评论 -
JVM安全退出(如何优雅的关闭java服务)
背景用户:货都到了,购物车里怎么还有刚买的东西,what?产品:有用户反映,提单完成了,怎么没清购物车,研发赶紧看看是不是有bug啊?研发:恩,我看看,!@#¥%……&*()一顿狂查,搜嘎,当时在上线,重启应用,异步任务丢了……产品:能不能行,上线你就丢任务,丢不丢人啊!研发:…………上线!重启!你还在为丢失任务而烦恼么?看这里看这里,从此不再丢任务,JVM可以安全退出的在交易流程中,为了提升服务的性能,我们做了一些异步化的优化,比如更新用户最近使用的收货地址、提单完成后通过转载 2021-04-01 21:43:18 · 752 阅读 · 0 评论 -
蓝绿部署、金丝雀发布(灰度发布)、A/B测试的准确定义
说明蓝绿部署、A/B测试、金丝雀发布,以及灰度发布、流量切分等,经常被混为一谈,影响沟通效率。 根本原因是这些名词经常出现,人们耳熟能详能够熟练地谈起,对这些术语的理解却没有达成一致。下面是从Blue-green Deployments, A/B Testing, and Canary Releases中整理出来的定义。蓝绿部署蓝绿部署的目的是减少发布时的中断时间、能够快速撤回发布。It’s basically a technique for releasing your applic转载 2021-03-01 20:31:51 · 466 阅读 · 0 评论 -
如何把百万级别的订单根据金额排序
前面「码哥字节」介绍了一些经典排序算法,它们的时间复杂度最好是 O(nlogn),那 如何把百万级别的订单根据金额排序?是不是觉得可以按照之前学的归并排序、快速排序实现?功能是可以完成,但是效率太低了。今天「码哥」带大家一起玩转特殊场景下的排序算法,在 O(n) 时间复杂度的情况下实现排序。「码哥」带大家学习的算法类比「超跑型赛车」,用于特殊场景能实现飞快速度。快排、归并是经济实用型小轿车。而桶排序、计数排序、基数排序则是赛道上的跑车竞速,也叫做线性排序。来不及解释了,快上车!今天先来桶排序压压惊。转载 2021-02-23 18:12:33 · 465 阅读 · 0 评论 -
文件下载中文文件名不显示
使用response.setHeader("Content-Disposition","attachment;filename="+fName)下载文件,中文文件名无法显示的问题今天遇到这么一个情况,在Controller代码中进行文件下载: 其中file_name是中文,然后通过如下代码下载response.setContentType("application/octet-st...原创 2015-11-17 17:49:35 · 11683 阅读 · 3 评论 -
高性能 Java 缓存库 — Caffeine
1、介绍在本文中,我将介绍 Caffeine — 一个高性能的 Java 缓存库。缓存和 Map 之间的一个根本区别在于缓存可以回收存储的 item。回收策略为在指定时间删除哪些对象。此策略直接影响缓存的命中率 —— 缓存库的一个重要特性。Caffeine 因使用了 Window TinyLfu 回收策略,提供了一个近乎最佳的命中率。2、依赖我们需要在 pom.xml 中添加 caffeine 依赖:<dependency> <groupId>c转载 2020-07-17 09:50:00 · 1975 阅读 · 0 评论 -
PV统计
本文主要描述PV统计的方法。原创 2015-02-25 11:16:30 · 753 阅读 · 0 评论 -
代码检查又一利器:ArchUnit
Code Review总是让人又爱又恨,它可以帮助我们在提测之前发现很多代码中比较“丢人”的问题,但是,Code Review通常会比写代码更加耗费精力,因为你需要理解别人的代码,而为了这一目的,往往需要很多次的沟通。人们常说“见字如面”。我认为代码也是一样,看到一个人的代码,就会对这个人有一个大概的印象。例如,当你看到一段代码写的非常随意,随意的格式、随意的命名、随意的封装,然后又没有单元测...转载 2020-04-30 15:38:48 · 594 阅读 · 0 评论 -
validation自定义注解校验枚举类型
java validation内没有对枚举的校验工具,但是离散的枚举值校验确实是有必要的。javax.validation包提供了方便的自定义校验的入口,就是javax.validation.ConstraintValidator,故可以通过自定义校验枚举类型方式实现。一、定义一个校验注解,类似于@NotNull @Size等等那样import javax.validat...原创 2020-02-21 09:16:49 · 4300 阅读 · 3 评论 -
PowerMock使用详解
1. PowerMock是什么? 2. PowerMock包引入 3. 重要注解说明 4. 示例1. PowerMock是什么?PowerMock是一个Java模拟框架,用于解决测试问题。举个例子,你在使用Junit进行单元测试时,并不想让测试数据进入数据库,怎么办?这个时候就可以使用PowerMock,拦截数据库操作,并模拟返回参数。2. PowerMock包引入<...原创 2020-02-07 21:57:20 · 4729 阅读 · 0 评论 -
maven:dependencies与dependencyManagement的区别
在上一个项目中遇到一些jar包冲突的问题,之后还有很多人分不清楚dependencies与dependencyManagement的区别,本篇文章将这些区别总结下来。1、DepencyManagement应用场景当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管...转载 2020-02-06 23:19:53 · 362 阅读 · 0 评论 -
技术选型之Docker容器引擎
题外话 最近对Docker和Kubernetes进行了一番学习,前两天做了一次技术分享,回去听了一遍自己演讲的录音,发现单单PPT做好还是远远不够的,没有提前准备好逻辑严谨的讲稿,在讲的时候出现了卡壳、漏掉技术点、逻辑矛盾的问题。为了解决这个问题,我打算以后在做技术分享前,都按着PPT的内容先写成博客,理顺表达逻辑。另外,我觉得每次技术分享使用的PPT都应该尽可能的做好,因为你不知道未来...转载 2019-09-20 09:52:15 · 263 阅读 · 0 评论 -
UML序列图总结
序列图主要用于展示对象之间交互的顺序。序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。时序图中包括如下元素:角色,对象,生命线,激活期和消息。 消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中...原创 2014-12-08 14:06:39 · 1981 阅读 · 1 评论 -
Spring Security 保护 Web 应用的安全
本文介绍Spring Security保护Web应用的安全。 在 Web 应用开发中,安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题,就可能陷入一个两难的境地:一方面,应用存在严重的安全漏洞,无法满足用户的要求,并可能造成用户的隐私数据被攻击者窃取;另一方面,应用的基本架构已经确定,要修复安全...原创 2014-12-19 13:53:10 · 768 阅读 · 0 评论 -
Java网络编程
网络编程网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习。在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的。首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨...原创 2014-12-23 12:00:22 · 668 阅读 · 0 评论 -
Tomcat优化配置
1. 服务器资源 服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。 (1) 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。 (2) 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC...转载 2014-12-01 18:15:20 · 539 阅读 · 0 评论 -
CORS(Cross-Origin Resource Sharing)跨域资源共享
CORS(Cross-Origin Resource Sharing)跨域资源共享 由于浏览器同源策略的影响,跨域问题在我们日常开发中经常遇到,此前有一系列的跨域问题的解决方案,如JSONP、flash、ifame、xhr2等等,本文介绍的CORS是一套AJAX跨域问题的解决方案,CORS支持GET, POST, HEAD, PUT, DELETE请求。jsonp是get形式...原创 2014-12-31 17:00:25 · 1730 阅读 · 0 评论 -
基于 REST 的 Web 服务
基于 REST 的 Web 服务:基础代表性状态传输(Representational State Transfer,REST)在 Web 领域已经得到了广泛的接受,是基于 SOAP 和 Web 服务描述语言(Web Services Description Language,WSDL)的 Web 服务的更为简单的替代方法。 接口设计方面这一转变的关键证据是主流 Web 2.0 服务提供者(包...转载 2015-06-10 16:00:43 · 701 阅读 · 0 评论 -
Java性能优化系列
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难。随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了。现代JVM持续演进,内建了更为成熟的优化技术、运行时技术和垃圾收集器。与此同时,底层的硬件平台和操作系统也在演化。目录:一、Java性能优化系列之一--设计优化二、Java性能优化系列之二--程序优化...转载 2019-09-19 18:12:25 · 406 阅读 · 0 评论 -
fork/join 全面剖析
fork/join作为一个并发框架在jdk7的时候就加入到了我们的java并发包java.util.concurrent中,并且在java 8 的lambda并行流中充当着底层框架的角色。这样一个优秀的框架设计,我自己想了解一下它的底层代码是如何实现的,所以我尝试的去阅读了JDK相关的源码。下面我打算分享一下阅读完之后的心得~。1、fork/join的设计思路 了解一...转载 2019-09-19 17:53:45 · 416 阅读 · 0 评论 -
阿里开源Nacos配置中心
什么是 Nacos?Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用...原创 2019-09-18 17:34:44 · 1591 阅读 · 1 评论 -
JVM运行原理详解
1.JVM简析:作为一名Java使用者,掌握JVM的体系结构也是很有必要的。说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示:Java平台由Java虚拟机和Java应用程序接口搭建,Java语言...转载 2019-05-07 19:29:27 · 151 阅读 · 0 评论 -
Fastjson又被发现漏洞,这次危害可导致服务瘫痪!
报告编号:B6-2019-090501报告来源:360-CERT报告作者:360-CERT更新日期:2019-09-050x00 漏洞背景2019年9月5日,fastjson在commit 995845170527221ca0293cf290e33a7d6cb52bf7上提交了旨在修复当字符串中包含x转义字符时可能引发OOM的问题的修复。360CERT 判断该漏洞危害中。影响...转载 2019-09-10 15:46:02 · 834 阅读 · 0 评论 -
高并发Tomcat7.0配置
高并发Tomcat7.0配置1、tomcat自动部署问题。tomcat6.x跟7.x默认情况下 unpackWARs="true" autoDeploy="true",也就是拷贝war到webapp下面tomcat会自动解压并部署,但是一般情况下是关闭这个的,因为线上不停止服务器而更新容易出现数据错误问题。所以unpackWARs="true" autoDeploy="false",但...转载 2014-12-01 09:56:15 · 2347 阅读 · 0 评论 -
Java POI Excel读取
POI版本3.15pom文件<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.15</version></dependency><dependency&g...原创 2017-12-12 11:54:01 · 43139 阅读 · 13 评论 -
canal demo搭建全记录
一、环境介绍canal是阿里开源的中间件,主要用于同步mysql数据库变更。具体参见:https://github.com/alibaba/canal/releases搭建环境:vmware centos7 部署mysql和canalwindows开发canal client,自动捕获mysql数据库变更二、Centos安装Mysql1、尝试用yum安装mysql...转载 2019-08-01 16:02:26 · 898 阅读 · 0 评论 -
十大经典排序算法
常见经典排序算法常见经典排序非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。时间复杂度&空间复杂度&稳定性时间复杂度&空间复杂度&稳定性...转载 2019-07-18 19:43:29 · 146 阅读 · 0 评论 -
Maven仓库理解和优先级
前言使用 maven 也有一段时间了,有时候在配置 repository,mirror,profile的时候,总会导致 jar 拉取不到。所以认真的分析了 maven 获取 jar 包时候的优先级。Maven 仓库的分类仓库分类:本地仓库和远程仓库。Maven根据坐标寻找构件的时候,它先会查看本地仓库,如果本地仓库存在构件,则直接使用;如果没有,则从远程仓库查找,找到后,下载到本地。...转载 2019-06-19 14:28:57 · 10156 阅读 · 1 评论 -
Java创建对象的过程
Java是一门面向对象的编程语言,在Java程序运行过程中每时每刻都有对象被创建出来。在语言层面上,创建对象通常仅仅是一个new关键字而已,而在虚拟机中,对象的创建又是怎样一个过程呢?一、检测类是否被加载虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过...转载 2019-06-17 14:54:28 · 351 阅读 · 0 评论 -
java EasyExcel集成及工具类使用
EasyExcel简介Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用...转载 2019-06-12 21:28:22 · 3632 阅读 · 0 评论 -
使用 keepalived 设置虚拟 IP 环境
使用 keepalived 设置虚拟 IP 环境准备装备两个机器,IP地址信息如下:host1: 192.168.56.103host2: 192.168.56.104为了测试需要,分别在两个机器上安装apache并启动httpd服务,使下面两个url均可访问-http://192.168.56.103-http://192.168.56.104安装 kee...转载 2019-06-05 19:59:19 · 3936 阅读 · 0 评论 -
重写equals方法的时候为什么需要重写hashcode
一、equals()方法先说说equals()方法。 查看Java的Object.equals()方法,如下:public boolean equals(Object object){ return(this == obj);}可以看到这里直接用'=='来直接比较,引用《Java编程思想》里的一句话:“关系操作符生成的是一个boolean结果,它们计算的是操作数的...转载 2019-05-14 20:13:52 · 141 阅读 · 0 评论 -
hashcode详解
一、hashcode是什么? 1、hash和hash表是什么? 想要知道这个hashcode,首先得知道hash,通过百度百科看一下 hash是一个函数,该函数中的实现就是一种算法,就是通过一系列的算法来得到一个hash值,这个时候,我们就需要知道另一个东西,hash表,通过hash算法得到的hash值就在这张hash表中,也就是说,hash表就是所有的h...转载 2019-05-14 19:51:45 · 244 阅读 · 0 评论 -
哈希表
哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。 对哈希表的使用者一一人来说,这是一瞬间的事。哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快,树...转载 2019-05-14 19:26:13 · 186 阅读 · 0 评论 -
深入浅出MyBatis:MyBatis解析和运行原理
Mybatis工作原理工作原理解析mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件(也可以用Java文件配置的方式,需要添加@Configuration)中构建出SqlSessionFactory(SqlSessionFactory是线程安全的);然后,SqlSessionFactory的实例直接开启一个...转载 2019-04-16 18:42:08 · 359 阅读 · 0 评论 -
入理解分布式调度框架TBSchedule及源码分析
简介 由于最近工作比较忙,前前后后花了两个月的时间把TBSchedule的源码翻了个底朝天。关于TBSchedule的使用,网上也有很多参考资料,这里不做过多的阐述。本文着重介绍TBSchedule的运行机制,架构设计以及优化建议。通过学习别人的经验,来提高自己的技术能力,感受阿里人的智慧,也向阿里空玄,阿里玄难为开源贡献致敬。zookeeper依赖 TBSchedule依赖于ZK...转载 2018-12-25 11:31:55 · 603 阅读 · 0 评论 -
mybatis缓存机制详解
mybatis提供了缓存机制减轻数据库压力,提高数据库性能mybatis的缓存分为两级:一级缓存、二级缓存一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的一级缓存: mybatis的一级缓存是SqlSession级别的缓存,在操作数据库...转载 2019-04-16 17:47:07 · 135 阅读 · 0 评论