
Java
文章平均质量分 77
东境物语
欢迎访问!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Eureka 原理与实践全攻略
Eureka 在微服务架构中具有举足轻重的地位。它作为服务注册与发现的核心组件,为分布式系统中的服务管理提供了关键支持。Eureka 的主要功能包括服务注册、服务发现、服务健康监测和自我保护机制。服务注册功能使得服务提供者能够在启动时将自身的信息,如服务名称、IP 地址、端口等,注册到 Eureka 服务器上,方便后续被其他服务发现和调用。服务发现功能则允许服务消费者从 Eureka 服务器获取所需服务的实例列表,从而实现服务之间的通信和协作。服务健康监测是 Eureka 保障系统稳定性的重要手段。原创 2024-08-20 21:09:06 · 3304 阅读 · 0 评论 -
谁是 JDK8 中最快的 GC
我们都知道 OpenJDK8 有好几个垃圾回收算法,比如 ParallelGC,CMS,还有 G1,那么哪个才是最快的?如果 GC 算法从 Java8 中默认的 ParallelGC 切换到 G1 会发生什么(JDK9 就是把默认 GC 从 ParallelGC 切到了 G1)?原创 2023-04-12 21:53:04 · 1041 阅读 · 0 评论 -
布隆过滤器
本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构,特点是高效地插入和查询,用来告诉我们“某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。拥有极高的性能,无论写入操作还是读取操作,时间复杂度是O(1)。用途: 解决Redis缓存穿透 在爬虫时,对爬虫网址进行过滤,已经存在布隆中的网址,不在爬取。 垃圾邮件过滤,对每一个发送邮件的地址进行判断是否在布隆的黑名单中,如果...原创 2022-04-24 18:34:53 · 1644 阅读 · 0 评论 -
微服务时代组件化和服务化的抉择
随着业务系统的复杂性越来越高,系统之间的调用也越来越多,在微服务拆分和迭代过程中,是不断的拆分出新的独立的服务还是封装独立的组件以jar包依赖的方式提供服务是我们经常需要面对的问题,本文将详细探讨这两种不同的方式区别、各自的优劣势及适用的场景,希望能够对大家有所启发。一、组件化&服务化定义随着公司互联网业务发展越来越迅速,系统的复杂性越来越高,系统之间的调用也越来越多,在微服务拆分和迭代过程中,经常会遇到两种场景问题: 自己系统内部的一些公共功能模块到底以什么形式提供服原创 2021-12-09 16:47:20 · 1370 阅读 · 0 评论 -
Java压缩算法性能比较
前言游戏开发中,经常在玩家进入游戏的时候进行必要的信息初始化,往往这个初始化信息数据包是相对来说还是比较大的,一般在30-40kb左右,还是有必要进行压缩一下再发送消息,刚好前段时间看过,里面列举了一些常用的压缩算法,如下图所示:是否可切分表示是否可以搜索数据流的任意位置并进一步往下读取数据,这项功能在Hadoop的MapReduce中尤其适合。下面对这几种压缩格式进行简单的介绍,并进行压...原创 2019-12-24 16:13:05 · 1636 阅读 · 0 评论 -
JVM安全退出(如何优雅的关闭java服务)
为了保障应用重启过程中异步操作的执行,避免强制退出JVM可能产生的各种问题,我们可以采用关闭钩子、自定义信号的方式,主动的通知JVM退出,并在JVM关闭前,执行应用程序的一些扫尾工作,进一步保证应用程序可以安全的退出。原创 2021-04-01 21:43:18 · 978 阅读 · 0 评论 -
文件下载中文文件名不显示
使用response.setHeader("Content-Disposition","attachment;filename="+fName)下载文件,中文文件名无法显示的问题今天遇到这么一个情况,在Controller代码中进行文件下载: 其中file_name是中文,然后通过如下代码下载response.setContentType("application/octet-st...原创 2015-11-17 17:49:35 · 11859 阅读 · 3 评论 -
高性能 Java 缓存库 — Caffeine
在本文中,我将介绍Caffeine— 一个高性能的 Java 缓存库。缓存和 Map 之间的一个根本区别在于缓存可以回收存储的 item。回收策略为在指定时间删除哪些对象。此策略直接影响缓存的命中率 —— 缓存库的一个重要特性。Caffeine 因使用了回收策略,提供了一个近乎最佳的命中率。原创 2020-07-17 09:50:00 · 2581 阅读 · 0 评论 -
PV统计
本文主要描述PV统计的方法。原创 2015-02-25 11:16:30 · 847 阅读 · 0 评论 -
代码检查又一利器:ArchUnit
Code Review总是让人又爱又恨,它可以帮助我们在提测之前发现很多代码中比较“丢人”的问题,但是,Code Review通常会比写代码更加耗费精力,因为你需要理解别人的代码,而为了这一目的,往往需要很多次的沟通。人们常说“见字如面”。我认为代码也是一样,看到一个人的代码,就会对这个人有一个大概的印象。例如,当你看到一段代码写的非常随意,随意的格式、随意的命名、随意的封装,然后又没有单元测...原创 2020-04-30 15:38:48 · 772 阅读 · 0 评论 -
validation自定义注解校验枚举类型
java validation内没有对枚举的校验工具,但是离散的枚举值校验确实是有必要的。javax.validation包提供了方便的自定义校验的入口,就是javax.validation.ConstraintValidator,故可以通过自定义校验枚举类型方式实现。一、定义一个校验注解,类似于@NotNull @Size等等那样import javax.validat...原创 2020-02-21 09:16:49 · 4668 阅读 · 3 评论 -
PowerMock使用详解
1. PowerMock是什么? 2. PowerMock包引入 3. 重要注解说明 4. 示例1. PowerMock是什么?PowerMock是一个Java模拟框架,用于解决测试问题。举个例子,你在使用Junit进行单元测试时,并不想让测试数据进入数据库,怎么办?这个时候就可以使用PowerMock,拦截数据库操作,并模拟返回参数。2. PowerMock包引入<...原创 2020-02-07 21:57:20 · 5556 阅读 · 0 评论 -
UML序列图总结
序列图主要用于展示对象之间交互的顺序。序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。时序图中包括如下元素:角色,对象,生命线,激活期和消息。 消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中...原创 2014-12-08 14:06:39 · 2150 阅读 · 1 评论 -
Spring Security 保护 Web 应用的安全
本文介绍Spring Security保护Web应用的安全。 在 Web 应用开发中,安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题,就可能陷入一个两难的境地:一方面,应用存在严重的安全漏洞,无法满足用户的要求,并可能造成用户的隐私数据被攻击者窃取;另一方面,应用的基本架构已经确定,要修复安全...原创 2014-12-19 13:53:10 · 854 阅读 · 0 评论 -
Java网络编程
网络编程网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习。在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的。首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨...原创 2014-12-23 12:00:22 · 730 阅读 · 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 · 1826 阅读 · 0 评论 -
基于 REST 的 Web 服务
代表性状态传输(Representational State Transfer,REST)在 Web 领域已经得到了广泛的接受,是基于 SOAP 和 Web 服务描述语言(Web Services Description Language,WSDL)的 Web 服务的更为简单的替代方法。原创 2015-06-10 16:00:43 · 805 阅读 · 0 评论 -
阿里开源Nacos配置中心
什么是 Nacos?Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用...原创 2019-09-18 17:34:44 · 1690 阅读 · 1 评论 -
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 · 949 阅读 · 1 评论 -
高并发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 · 2542 阅读 · 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 · 43612 阅读 · 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 · 965 阅读 · 0 评论 -
Maven仓库理解和优先级
前言使用 maven 也有一段时间了,有时候在配置 repository,mirror,profile的时候,总会导致 jar 拉取不到。所以认真的分析了 maven 获取 jar 包时候的优先级。Maven 仓库的分类仓库分类:本地仓库和远程仓库。Maven根据坐标寻找构件的时候,它先会查看本地仓库,如果本地仓库存在构件,则直接使用;如果没有,则从远程仓库查找,找到后,下载到本地。...原创 2019-06-19 14:28:57 · 10767 阅读 · 1 评论 -
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 · 4033 阅读 · 1 评论 -
使用 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 · 4208 阅读 · 1 评论 -
用hashmap实现redis有什么问题
缓存分为本地缓存和分布式缓存。以java为例,使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着jvm的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。使用redis或memcached之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持redis或memcached服务的高可用...原创 2019-03-26 10:37:01 · 2442 阅读 · 0 评论 -
nginx 获取自定义head 头部信息
为了排查线上的bug,需要在nginx的日志中,打印客户端上传上来的header头部信息,同时头部信息是自定义的。在尝试多重方案后,找到解决方法:log_format json '{"@timestamp":"$time_iso8601",' '"groupID":"$http_groupID",' '"pv":"$http_p.原创 2018-12-18 17:50:48 · 3328 阅读 · 0 评论 -
WebSocket介绍和Socket的区别
WebSocket介绍与原理WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。——百度百科目的:即时通讯,替代轮询网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。HTTP协议是非持久化的,单向的网...原创 2017-01-17 14:43:55 · 110796 阅读 · 19 评论 -
Nginx非80端口配置
如果nginx的监听端口不是默认的80端口,改为其他非80端口后,后端服务tomcat中的request.getServerPort()方法无法获得正确的端口号,仍然返回到80端口。在response.sendRedirect()时,客户端可能无法获得正确的重定向URL。所以正确的配置:server { listen 8080; server_name localhost; ...原创 2016-04-11 18:57:51 · 21440 阅读 · 1 评论 -
CRC32使用
1、用于校验 其特点是:检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CR...原创 2018-03-09 17:54:16 · 4740 阅读 · 0 评论 -
一致Hash算法
一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。 因此,引入了一致性哈希算法: 把数据用hash函数(如MD5...原创 2015-07-19 09:15:43 · 1938 阅读 · 0 评论 -
ehcache、redis应用场景比较
应用场景:ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。原创 2018-02-01 15:32:14 · 3302 阅读 · 1 评论 -
HttpURLConnection实现HttpClient工具类(get/post请求,文件上传)
本博客简单介绍一下HttpURLConnection实现的POST和GET请求以及文件上传,还有文件上传的服务器代码实现。import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.Input原创 2017-11-29 11:48:52 · 890 阅读 · 0 评论 -
Spring @PostConstruct 和 @PreDestroy
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作第二种是:通过 在xml中定义init-method 和 destory-method方法第三种是: 通过bean实现InitializingBean和 Disposab原创 2017-10-17 12:06:49 · 678 阅读 · 0 评论 -
logback实现每个用户一个独立的日志文件
本文介绍如何使用logback的Mapped Diagnostic Context (MDC)和SiftingAppender实现每个线程一个独立的日志文件。MDC 参考手册http://logback.qos.ch/manual/mdc.html1、logback.xml配置文件示例 ${SERIOUS_PATTERN}原创 2017-10-12 14:26:55 · 5009 阅读 · 0 评论 -
logback mdc
logback内置的日志字段还是比较少,如果我们需要打印有关业务的更多的内容,包括自定义的一些数据,需要借助logback MDC机制,MDC为“Mapped Diagnostic Context”(映射诊断上下文),即将一些运行时的上下文数据通过logback打印出来;此时我们需要借助org.sl4j.MDC类。 MDC类基本原理其实非常简单,其内部持有一个InheritableT原创 2017-10-12 10:21:12 · 761 阅读 · 0 评论 -
Java如何实现对Mysql数据库的行锁
场景如下: 用户账户有余额,当发生交易时,需要实时更新余额。这里如果发生并发问题,那么会造成用户余额和实际交易的不一致,这对公司和客户来说都是很危险的。那么如何避免: 1、使用行级锁 当需要变更余额时,通过代码在事务中对当前需要更新的记录设置for update行锁,然后开始正常的查询和更新操作 这样,原创 2017-08-24 20:15:39 · 17650 阅读 · 3 评论 -
eclipse中使用Lombok
windows环境1.下载lombok.jar包https://projectlombok.org/download.html2.运行Lombok.jar:Java-jar D:\software\lombok.jarD:\software\lombok.jar这是windows下lombok.jar所在的位置 数秒后将弹出一框,以确认eclipse原创 2017-08-03 10:21:35 · 375 阅读 · 0 评论 -
tengine安装
Tengine官网:http://tengine.taobao.org/tengine安装一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。1.选定源码目录可以是任何目录,本文选定的是/usr/local/srccd /usr/local/src2.安装PCRE库ftp://ftp.csx.cam.ac.uk原创 2016-02-18 17:13:39 · 2075 阅读 · 0 评论 -
ApplicationContextAware使用理解
一、这个接口有什么用?当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。二、怎么用?举个例子吧:例如我有一个方法类AppUtil,这个方法类中需要使用到的ApplicationContext中的某个原创 2017-03-19 11:02:23 · 7732 阅读 · 2 评论