Java
文章平均质量分 65
MyHerux
-
现代网络负载均衡与代理
现代网络负载均衡与代理什么是网络负载均衡与代理?负载均衡 vs 代理L4(连接 /session)负载均衡L7(应用层)负载均衡L7 负载均衡和 OSI 模型负载均衡器的功能服务发现健康检查负载均衡粘性 sessionTLS 终端观测性安全性和 DoS 防御配置控制层负载均衡器拓扑结构类型中间代理边缘代理嵌入式的客户端库Sidecar 代...转载 2019-10-17 11:59:21 · 662 阅读 · 0 评论 -
深入浅出分布式缓存的通用方法
深入浅出分布式缓存的通用方法 看到一篇好文,直接转载不方便,用 Markdown 重写了一遍。原文地址:https://mp.weixin.qq.com/s/vc2D2Nrj45Q2QbC00xt6RA缓存编程的具体方法各种分布式缓存如Redis,都提供了不同语言的客户端API,我们可以使用这些API直接访问缓存,也可以通过注解等方法使用缓存。1、编程法编程法指通过...转载 2018-05-20 16:30:00 · 642 阅读 · 0 评论 -
Elasticsearch+Logstash+kibana搭建可视化日志分析平台
Elasticsearch+Logstash+kibana搭建可视化日志分析平台Elasticsearch安装关闭防火墙(开放对应端口也可以) systemctl stop firewalld 安装 JDK8Elasticsearch 需要 Java 8 的环境。# yum -y list java*# yum -y install ...原创 2018-05-11 16:23:53 · 1467 阅读 · 1 评论 -
volatile关键字的作用和原理
volatile关键字的作用和原理关键字作用volatile 保证可见性一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。禁止进行指令重排序。volatile 不能确保原子性public class Volati...原创 2018-04-18 17:19:10 · 3068 阅读 · 0 评论 -
深入理解JVM:内存区域
深入理解JVM:内存区域运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。注:白色 区域为 线程私有(生命周期与线程相同),蓝色 区域为 线程共享。程序计数器(Program Counter Register)程序计数器是一块较小的内存空间,可以被看做是当前线程所执行的字节码的行号指示器。每条线程都需要一个独立...原创 2018-03-29 11:55:17 · 343 阅读 · 0 评论 -
深入分析LinkedHashMap (JDK1.8)
深入分析LinkedHashMap (JDK1.8)类名和继承关系public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{内部存储结构/*** HashMap.Node subclass for normal LinkedHashMap ...原创 2018-03-26 10:46:23 · 559 阅读 · 0 评论 -
Java内存模型(JMM)
Java内存模型(JMM)原子性(Atomicity) 原子性是指一个操作是不可中断的。即使是多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。比如,一个静态全局变量 int i,两个线程同时对它赋值,线程A给他赋值1,线程B给它赋值-1。那么不管两个线程怎么工作,i的值只能是1或则-1.线程A和线程B之间没有干扰。对于 32 位系统的来说, long 类型...原创 2018-03-26 10:44:32 · 276 阅读 · 0 评论 -
ArrayList、Vector、LinkedList分析
ArrayList、Vector、LinkedList分析ArrayList 实质是包装了一个数组,遍历时很快,但是插入、删除时都需要移动后面的元素,效率略差些。add()方法public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elem...原创 2018-03-14 10:53:12 · 242 阅读 · 0 评论 -
线程复用:线程池
线程复用:线程池 为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用。线程池中,总有几个活跃线程。当你需要使用线程时,可以从池中随便获取一个空闲线程,当工作完成时,线程不会关闭而是退回池中。JDK 提供的线程池工厂方法newFixedThreadPool返回固定线程数量的线程池。当有一个新的任务提交时,线程池若有空闲线程,则立即执行。若没有,则新的任务会被暂...原创 2018-03-19 17:27:13 · 777 阅读 · 0 评论 -
锁优化策略
锁优化策略提升锁性能的策略减少锁持有时间 只在需要锁竞争的地方加入锁的操作,减少锁的占有时间,以减少线程间互斥的可能。public synchronized void test(){ code1(); mutextMethod(); code2();}如果 code1() 方法和 code2() 方法不需要做同步控制,则会花费更多的 cup...原创 2018-03-05 16:13:10 · 1111 阅读 · 0 评论 -
深入理解ConcurrentHashMap
深入理解ConcurrentHashMap写在前面前面分析了 HashMap和Hashtable 。在多线程下, HashMap 的链表可能会出现死循环,所以 HashMap 是线程不安全的。 Hashtable 在所有涉及到多线程操作的都加上了 synchronized 关键字来锁住整个 table ,虽然保证了线程安全,但是无疑效率是地下的。针对 HashMap 线程不安全的问...原创 2018-03-02 12:05:22 · 910 阅读 · 0 评论 -
使用函数计算来构建小程序
使用函数计算来构建小程序传统服务器架构 VS Serverless架构Serverless架构Login & Auth 微信登录状态维护语音识别音频格式转换 使用ffpmeg来实现音频转换//使用ffmpeg将mp3转化为wavString bashCommand = String.format("./ffmpeg -y -...原创 2018-03-15 17:33:55 · 887 阅读 · 0 评论 -
深入理解Spring AOP
深入理解Spring AOP基本知识面向切面编程 AOPAOP(Aspect-Oriented Programming), 即 面向切面编程。AOP 术语通知(Advice) Advice 定义了切面是什么以及何时使用前置通知(Before):在目标方法被调用之前调用通知功能;后置通知(After):在目标方法完成之后调用通知,此时不会关心...原创 2018-03-09 10:05:06 · 355 阅读 · 1 评论 -
HashMap与Hashtable探究
HashMap与Hashtable探究HashMap内部存储结构 java8 使用 Node<K,V> 来替换 java7 中的 Entry<K,V>transient Node<K,V>[] table;static class Node<K,V> implements Map.Entry<K,V> {...原创 2018-02-28 15:14:52 · 301 阅读 · 0 评论 -
同步锁,乐观锁,悲观锁
同步锁,乐观锁,悲观锁Synchronized 所有对象都自动含有单一的锁(监视器),当在对象上调用其任意 synchronized 方法的时候,此对象都被加锁。对于某个特定对象来说,其所有synchronized方法共享同一个锁,这可以被用来防止多个任务同时访问被编码为对象内存。对于同步方法,锁是当前实例对象。public synchronized void test(i...原创 2018-02-27 11:25:29 · 1797 阅读 · 0 评论 -
SpringBoot2.x中的应用监控:Actuator+Prometheus+Grafana
Prometheus 是 Cloud Native Computing Foundation 项目之一,是一个系统和服务监控系统。它按给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并且如果观察到某些条件为真,则可触发警报。特性多维度 数据模型(由度量名称和键/值维度集定义的时间序列)灵活的查询语言 来利用这种维度不依赖分布式存储;单个服务器节点是自治的时间序列采集通...原创 2018-06-12 16:36:23 · 11957 阅读 · 5 评论 -
SpringBoot2.x使用Actuator来做应用监控
ActuatorSpring-boot-actuator module 可帮助您在将应用程序投入生产时监视和管理应用程序。您可以选择使用 HTTP 端点或 JMX 来管理和监控您的应用程序。Auditing, health, and metrics gathering 也可以自动应用于您的应用程序。添加依赖,开启监控<dependencies> <depen...原创 2018-06-12 20:16:13 · 9545 阅读 · 2 评论 -
从0到1,完整的CI-CD流程
1. 项目的基本配置OverView项目使用 dev , qa , prod 三套不同的环境,具体可以参考项目代码。2. 完整的Build脚本2.1. 使用maven打包docker-compose-maven.ymlversion: "3.7"networks: build:services: maven: image: maven:3...原创 2019-09-20 16:08:07 · 1860 阅读 · 0 评论 -
使用Jenkins实现自动部署
创建一个简单的 Pipeline新建任务配置一个简单的 Pipelinenode { stage('Clone') { echo "1.Clone Stage" } stage('Test') { echo "2.Test Stage" } stage('Build') { echo "3.B...原创 2019-08-09 20:27:55 · 430 阅读 · 0 评论 -
SpringBoot-CAS在前后端分离中的实践
CasCAS is an open and well-documented authentication protocol. The primary implementation of the protocol is an open-source Java server component by the same name hosted here, with support for a plet...原创 2019-04-24 15:49:37 · 8335 阅读 · 11 评论 -
SpringBoot缓存之Caffeine
SpringBoot缓存之CaffeineSpringboot 对缓存的支持Spring Framework 支持透明地向应用程序添加缓存。从本质上讲,抽象将缓存应用于方法,从而根据缓存中可用的信息减少执行次数。缓存逻辑是透明应用的,不会对调用者造成任何干扰。只要通过 @EnableCaching 批注启用了缓存支持,Spring Boot 就会自动配置缓存基础结构。比如:import o...原创 2019-04-11 12:00:56 · 3247 阅读 · 0 评论 -
Kafka-Streams-Wiondowing
Wiondowing 使您可以控制如何对具有相同键的记录进行分组以进行有状态操作。Note相关操作是分组,它将具有相同密钥的所有记录分组,以确保数据被正确分区(“键入”)以用于后续操作。分组后,窗口允许您进一步对键的记录进行子分组。例如,在连接操作中,窗口状态存储用于存储到目前为止在定义的窗口边界内接收的所有记录。在聚合操作中,窗口状态存储用于存储每个窗口的最新聚合结果。在指定的窗口保留期后...原创 2018-11-30 18:34:53 · 947 阅读 · 0 评论 -
Springboot+Kafka
1. OverviewKafka DocumentationSpring for Apache Kafka2. Kafka 搭建Mac 安装 Kafka3. 初试依赖<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>sp...原创 2018-11-20 14:25:12 · 654 阅读 · 0 评论 -
流式Json数据生成器
Overview在看法流式应用处理时,经常需要一些流式数据来测试,自己生成这些数据比较麻烦,可以使用 json-data-generator 来帮助生成。项目地址Github配置 Kafka 数据jackieChan.config需要生成的 kafka 数据配置。{ "workflows": [{ "workflowName": "jackie...原创 2018-11-21 10:51:17 · 1755 阅读 · 0 评论 -
Mac 安装 Kafka
brew 安装brew install kafka注意:安装会依赖 zookeeperzookeeper -&gt; /usr/local/Cellar/zookeeper/3.4.13kafka -&gt; /usr/local/Cellar/kafka/2.0.0启动background service:brew services start zookeeper...原创 2018-11-15 17:43:12 · 502 阅读 · 0 评论 -
SpringBoot 获取配置文件属性(全5种,附项目Demo)
一. 使用 @PropertySource + Environment@PropertySource 指定配置文件位置, Environment 读取配置文件属性。@Configuration@PropertySource(value = {"classpath:test.properties"})public class TestConfig { @Autowired ...原创 2018-10-30 21:21:34 · 21605 阅读 · 1 评论 -
SpringBoot2.x-Actutor-micrometer-自定义Mertics
前言SpringBoot2.x使用Actuator来做应用监控示例注册 Metrics实现 MeterBinder 接口的 bindTo 方法,将要采集的指标注册到 MeterRegistry@Componentpublic class JobMetrics implements MeterBinder { public Counter job1Coun...原创 2018-08-17 17:40:00 · 5692 阅读 · 1 评论 -
SpringBoot2.x-定时任务
TimerTimer 是 jdk 1.3 之后自带的 java.util.Timer 类。这个类允许你按一定的规则调度一个 java.util.TimerTask 任务。主要是按照一定速率去执行任务,不支持 cron 表达式。示例public class TimerTest { public static void main(String[] args) { ...原创 2018-08-15 15:18:37 · 2620 阅读 · 0 评论 -
Springboot-2.x-scaffold
SpringBoot2.x 脚手架,适用于新项目 init。OverviewSpringBoot 2.x应用监控:ActuatorSwagger 2.8统一异常处理数据库连接池:HikariCPMybatisRedisMongoDB基本概念spring-boot-starter-parent使用 Maven 可以继承 spring-boot-starte...原创 2018-06-19 11:29:34 · 911 阅读 · 0 评论 -
HikariCP配置详解+多数据源
SpringBoot 2.0 开始推 HikariCP ,将默认的数据库连接池从 tomcat jdbc pool 改为了 hikari , HikariCP 在性能和并发方面确实表现不俗(号称最快的连接池)。如果你使用 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa ,会自动添加对 HikariCP 的依赖,也就是说此时使用 ...原创 2018-06-19 11:00:55 · 34134 阅读 · 4 评论 -
使用IDEA自带的 Editor REST Client 来测试 REST API
Overview开发 REST API 的时候,必然少不了测试。测试 API 可以采用以下方式:Chrome 请求不方便构造 POST 请求Postman 等 Post 工具ß需要下载工具,好处是可以记录请求,批量测试Swagger项目集成,方便操作,同时也提供给前端使用Editor REST ClientIDEA自带,操作方便,不需要要切换到浏览器页面...原创 2018-06-13 11:39:29 · 8117 阅读 · 2 评论 -
ThreadLocal的使用及实现
ThreadLocal的使用及实现使用ThreadLocal保证线程安全 ThreadLocal是一个线程的局部变量,只有当前线程可以访问,自然是线程安全的。多线程使用SimpleDateFormat示例:public class ParseDateNormal { private static final SimpleDateFormat sdf = ne...原创 2018-02-09 17:53:10 · 2325 阅读 · 0 评论 -
Java的值传递
1.问题一直在使用线程,但是突然发现一个问题,原始类型的数据不会改变,引用类型的数据会发生改变代码如下:public class thread { public static void main(String args[]) { JSONObject mobileInfo = new JSONObject(); String phone = "111";原创 2016-07-25 20:48:24 · 429 阅读 · 0 评论 -
Drools规则引擎(三)-Drools-Use
Drools应用动态规则动态获取KieSession public KieSession getKieSession(String rules) { KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = kieServices.newKieFileSystem();原创 2017-01-18 18:13:12 · 617 阅读 · 0 评论 -
Drools规则引擎(一)-Drools-Language
Drools应用动态规则动态获取KieSession public KieSession getKieSession(String rules) { KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = kieServices.newKieFileSystem();原创 2017-01-18 18:09:08 · 1328 阅读 · 0 评论 -
Drools规则引擎(二)-Drools-Example
Drools-ExampleHonest Politicianrulepackage com.xu.drools //package指定命名空间:com.xu.droolsimport com.xu.drools.bean.Politician; //import要使用的对象:Politicianimport com.xu.drools.bean.Hope;原创 2017-01-18 18:11:28 · 1178 阅读 · 0 评论 -
使用 Intellij Idea 导出JavaDoc
使用/* …… /来注释代码,解释方法参数,返回参数,类的功能及用法. 常用的注释标签:@author 作者 @version 版本 @see 参考转向@param 参数说明 @return 返回值说明 @exception 异常说明某些标签会不被识别like:@date 导出文档方法:在菜单栏选择Tools->Gerenate JavaDoc;在弹出框内填写输出路径;点击确认;中文乱原创 2016-08-29 23:46:11 · 711 阅读 · 0 评论 -
java注解分析
1.简介注解(annotation)是JDK5之后引进的新特性,是一种特殊的注释,之所以说它特殊是因为不同于普通注释(comment)能存在于源码,而且还能存在编译期跟运行期,会最终编译成一个.class文件,所以注解能有比普通注释更多的功能。2.类型a.java自带的注解@Deprecated 表明当前的元素已经不推荐使用 @Override 表明当前方法是覆盖了父类方法,添加@Overrrid转载 2016-08-18 16:36:10 · 285 阅读 · 0 评论 -
HttpClient的连接池
写在前面HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。一、为什么要用Http连接池1、降低延迟:如果不采用连接池,每次连接发起Http请求的时候都会重新建立TCP连接(经历3次握手),用完就会关闭连接(4次挥手)。2、支持原创 2016-08-16 11:12:57 · 1731 阅读 · 1 评论 -
kafka探究
1.基本Kafka所使用的基本术语: Topic Kafka将消息种子(Feed)分门别类, 每一类的消息称之为话题(Topic). Producer 发布消息的对象称之为话题生产者(Kafka topic producer) Consumer 订阅消息并处理发布的消息的种子的对象称之为话题消费者(consumers) Broker 已发布的消息保存在一组服务器中,称之为Kafka集原创 2016-07-07 15:08:16 · 342 阅读 · 0 评论