自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Felix_阳的博客

让学习变成一种习惯

  • 博客(422)
  • 收藏
  • 关注

原创 后端Java常用的linux命令

作者:Java让我变富有链接:https://zhuanlan.zhihu.com/p/460599320来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。对于后端Java开发,我们经常用到的linux命令,不用多学,记住下边的就可以了,如果记不住的小伙伴,就记得收藏一下,后边有啥不会了,打开这篇文章看看。起码要会的操作关机,重启# 关机shutdown -h now# 重启shutdown -r now查看系统,CPU信息# 查看.

2022-01-22 14:45:55 465

原创 flink sql多表join

val createTable = """ |CREATE TABLE nt_sale_order ( | id VARCHAR, | write_date BIGINT, | create_uid INT, | name VARCHAR, | op VARCHAR |) |WITH ( | 'connector' = 'kafka', | 'topic' = 'shopforce....

2021-01-19 17:03:05 1506

原创 protobuf3的语法

本文主要讨论protobuf3在编写proto接口描述文件时的语法,下面是一个proto文件的实例:syntax = "proto3";import "address.proto";package com.study.blog.protobuf;option java_package = "com.study.blog.protobuf";/option java_outer_classname="PersonProto";option java_multiple_files = .

2021-01-13 14:10:43 762

原创 mysql优化

前言今天我们来讲讲如何优化MySQL的性能,主要从索引方面优化。下期文章讲讲MySQL慢查询日志,我们是依据慢查询日志来判断哪条SQL语句有问题,然后再进行优化,敬请期待MySQL慢查询日志篇建表优化一:全部用到索引介绍建立的复合索引包含了几个字段,查询的时候最好能全部用到,而且严格按照索引顺序,这样查询效率是最高的。(最理想情况,具体情况具体分析)SQL 案例优化二:最左前缀法则介绍如果建立的是复合索引,索引的顺序要按照建立时的顺序,即从左到右,如:..

2020-10-26 11:07:49 2597

原创 分布式系统架构常见知识点梳理

这篇文章主要是说在进化的过程中可能会遇到的问题以及如何去解救这些问题。一、客户端缓存优化1、添加CDN缓存CDN 缓存也叫作网络访问的“第一跳”,用户请求先到达的是互联网网络服务商的机房。在机房里面部署 CDN 服务器,提供缓存服务。缓存了一些静态资源。如果存在用户请求的内容,直接通过CDN进行返回;没有的话继续向下请求2、正向代理缓存正向代理缓存保存在客户端,代理客户端访问互联网,比如访问谷歌,直接访问不到,我们就可以使用一个代理服务器,将请求转发给代理服务器,代理..

2020-10-26 10:54:06 2316

原创 Redis知识点全解

说说Redis基本数据类型有哪些吧 字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息,而SDS则保存了长度信息,这样将获取字符串长度的时间由O(N)降低到了O(1),同时可以避免缓冲区溢出和减少修改字符串长度时所需的内存重分配次数。 链表linkedlist:redis链表是一个双向无环链表结构,很多发布订阅、慢查询、监视器功能都是使用到了链表来实现,每个链表的节点由一个listNode结构来表示,每个

2020-10-26 09:37:24 195 1

原创 缓存穿透-缓存击穿-缓存雪崩详解

redis 在项目中用的话,主要就是用作缓存了既然用作缓存,那就肯定会有 缓存穿透/缓存击穿/缓存雪崩 的问题这篇文章就来说说,遇到这种情况时,该如何去处理缓存穿透首先咱们搞明白什么是缓存穿透?这三个词这么像,得把概念搞清楚不是其实只是从字面意思上来看的话,大概也能知道一点儿,缓存穿透嘛,就是直接穿过了缓存,将请求打到了数据库上面去一般情况下,去查询数据的话,缓存里面应该都是有的,但是防不住黑客呀,如果黑客请求查询的是数据库里面根本不存在的数据,数据库里面都没有的数据,缓存里面肯定也

2020-10-14 10:08:59 784

原创 分布式锁常见实现方法

一. 概述1.1 引言当前参与的项目中会遇到一些线程安全问题,由于业务是多节点部署的,Java的单机的并发同步手段synchronized和java.util.concurrent包已经不太够用了,这个时候我们需要分布式锁来保证线程安全问题,所以这里学习总结了几种分布式锁的实现思路。分布式的CAP理论告诉我们任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。一般情况下,

2020-09-27 17:46:06 227

原创 Netty内存管理详解

前言正是Netty的易用性和高性能成就了Netty,让其能够如此流行。而作为一款通信框架,首当其冲的便是对IO性能的高要求。不少读者都知道Netty底层通过使用Direct Memory,减少了内核态与用户态之间的内存拷贝,加快了IO速率。但是频繁的向系统申请Direct Memory,并在使用完成后释放本身就是一件影响性能的事情。为此,Netty内部实现了一套自己的内存管理机制,在申请时,Netty会一次性向操作系统申请较大的一块内存,然后再将大内存进行管理,按需拆分成小块分配。而释放时,Nett

2020-09-27 17:19:16 1771 4

原创 Kafka原理详解

为什么需要消息队列周末无聊刷着手机,某宝网APP突然蹦出来一条消息“为了回馈老客户,女朋友买一送一,活动仅限今天!”。买一送一还有这种好事,那我可不能错过!忍不住立马点了去。于是选了两个最新款,下单、支付一气呵成!满足的躺在床上,想着马上有女朋友了,竟然幸福的失眠了…… 第二天正常上着班,突然接到快递小哥的电话:小哥:“你是xx吗?你的女朋友到了,我现在在你楼下,你来拿一下吧!”。我:“这……我在上班呢,可以晚上送过来吗?“。小哥:“晚上可不行哦,晚上我也下班了呢!”。于是两个人僵持了很久……最后小

2020-09-27 09:55:16 310

原创 Java NIO知识点详解

前言抱歉好久没更原创文章了,看了下上篇更新时间,已经拖更一个多月了。这段时间也一直在学习Netty相关知识,因为涉及知识点比较多,也走了不少弯路。目前网上关于Netty学习资料玲琅满目,不知如何下手,其实大家都是一样的,学习方法和技巧都是总结出来的,我们在没有找到很好的方法之前不如按部就班先从基础开始,一般从总分总的渐进方式,既观森林,又见草木。之前恰巧跟杭州一个朋友小飞也提到过,两者在这方面的初衷是一致的,也希望更多的朋友能够加入一起学习和探讨。(PS:本篇文章是和小飞一起学习整理所得~)

2020-09-25 17:44:55 454

原创 Elasticsearch常用命令和使用

0、背景Elasticsearch 具有一组丰富的易于理解的 REST API,这些 API 均可如下几种方式通过 HTTP 调用进行访问。 Curl Postman head 插件 cerebro 工具 kibana 开发实战环节,我推荐使用:kibana Dev-tools。原因如下: 有提示功能 方便快捷、效率高 不容易出错 本文结合多年实战经验和网络资源,梳理出开发环节最重要的命令清单,希望对你有帮助!.

2020-09-24 16:40:42 434

原创 Elsaticsearch-Scroll查询详解

一、Scroll简介官网地址Scrollscroll查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价。游标查询允许我们 先做查询初始化,然后再批量地拉取结果。 这有点儿像传统数据库中的cursor。游标查询会取某个时间点的快照数据。 查询初始化之后索引上的任何变化会被它忽略。 它通过保存旧的数据文件来实现这个特性,结果就像保留初始化时的索引视图一样。深度分页的代价根源是结果集全局排序,如果去掉全局排序的特性的话查询结果的成本...

2020-09-23 15:26:26 6865

原创 ElasticSearch常用Restful API汇总

索引插入数据PUT test_doctor/_doc/1{ "name1":"樊万虎", "name2":"樊万虎", "nums":"20200915,20200922,20200929"}新建索引MappingPUT /test_doctor/_mapping/_doc{ "_doc": { "properties": { "name1": { "type": "text", "analyzer": "index_

2020-09-23 14:11:37 1863

原创 Elasticsearch持久化过程详解

前言这篇文章主要介绍Elasticsearch的索引工作机制,它是如何利用translog来保证数据的安全,以及我们在生产环境中如何优化translog的参数来最大化性能,主要会介绍到elastic中常见的2个操作:refresh和flush,以及这2个接口是如何保证数据能够被检索到的。一、数据持久化我们把数据写到磁盘后,还要调用fsync才能把数据刷到磁盘中,如果不这样做在系统掉电的时候就会导致数据丢失,这个原理相信大家都清楚,elasticsearch为了高可靠性必须把所有的修改持久化到磁盘

2020-09-23 09:52:45 7556 2

原创 Spring AOP 详解

1. 简介面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的。通过面向对象编程,不同的模板可以相互组装,从而实现更为复杂的业务模块,其结构形式可用下图表示:面向对象编程解决了业务模块的封装复用的问题,但是对于某些模块,其本身并不独属于摸个业务模块,而是根据不同的情况,贯穿于某几个或全部的模块之间的。例如登录验证,其只开放几个可以不用登录的接口给用户使用(一般登录使用拦截器...

2020-06-15 14:04:55 229

原创 JDK1.8并发之synchronized和Lock

什么是线程安全? 线程安全是指保证多线程环境下共享的、可修改的状态的正确性。保证线程安全的两个办法: 封装:将对象的内部状态隐藏、保护起来。 不可变:final变量产生了某种程度地不可变(immutable)效果,可以用于保护只读数据。线程安全需要保证几个基本特性: 原子性:相关操作不会中途被其他线程干扰,一般通过同步机制实现。 可见性:一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解释为将线程本地状态反映到主内存上,volatile就...

2020-05-21 23:32:27 542

原创 Java线程池核心知识详解

  本文所说的“核心线程”、“非核心线程”是一个虚拟的概念,是为了方便描述而虚拟出来的概念,在代码中并没有哪个线程被标记为“核心线程”或“非核心线程”,所有线程都是一样的,只是当线程池中的线程多于指定的核心线程数量时,会将多出来的线程销毁掉,池中只保留指定个数的线程。那些被销毁的线程是随机的,可能是第一个创建的线程,也可能是最后一个创建的线程,或其它时候创建的线程。一开始我以为会有一些线程...

2020-01-06 19:54:20 2548

原创 Elasticsearch7 mapping和setting简介

一、介绍:一句话概述:es是基于lucene分片(shard)存储的近实时的分布式搜索引擎。名词解释:Lucene:使用java语言编写的存储与查询框架,通过组织文档与文本关系信息进行倒排索引,内部形成多个segment段进行存储,是es的核心组件,但不具备分布式能力。segment:Lucene内部最小的存储单元,也是es的最小存储单元,多个小segment可合为一个较大的seg...

2019-12-02 11:04:05 4473

原创 SpringBoot整合log4j2详细教程

首先,认识一下三胞胎log4j是apache实现的一个开源日志组件 logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现 Log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活...

2019-10-28 16:50:46 1021

原创 java自定义线程池详细使用说明

前言线程池想必大家也都用过,JDK的Executors 也自带一些线程池。但是不知道大家有没有想过,如何才是最优雅的方式去使用过线程池吗? 生产环境要怎么去配置自己的线程池才是合理的呢?今天周末,刚好有时间来总结一下自己所认为的'优雅', 如有问题欢迎大家指正。线程池使用规则要使用好线程池,那么一定要遵循几个规则:线程个数大小的设置 线程池相关参数配置 利用Hook嵌入你的行...

2019-10-25 15:27:07 898

原创 log4j2日志配置说明

在项目推进中,如果说第一件事是搭Spring框架的话,那么第二件事情就是在Sring基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是线上Web项目,因为日志可能是我们了解应用如何执行的唯一方式。在18年大环境下,更多的企业使用Springboot和Springcloud来搭建他们的企业微服务项目,此篇文章是博主在实践中用Springboot整合log4j2日志的总结。...

2019-10-24 20:58:17 1010 1

原创 EnumSet基本用法

EnumSet基本用法enum Season { SPRING, SUMMER, FALL, WINTER}public class EnumSetTest { public static void main(String[] args) { //创建一个EnumSet集合,集合元素就是Season枚举类的全部枚举值 EnumSet ...

2019-10-17 12:07:49 1141

原创 Java8 map合并新姿势

1. 介绍本入门教程将介绍Java8中如何合并两个map。更具体说来,我们将研究不同的合并方案,包括Map含有重复元素的情况。2. 初始化我们定义两个map实例 private static Map<String, Employee> map1 = new HashMap<>(); private static Map<Str...

2019-09-20 11:43:23 2588 1

原创 RunTime.getRunTime().addShutdownHook优雅关闭线程池

有时候我们用到的程序不一定总是在JVM里面驻守,可能调用完就不用了,释放资源.RunTime.getRunTime().addShutdownHook的作用就是在JVM销毁前执行的一个线程.当然这个线程依然要自己写.利用这个性质,如果我们之前定义了一系列的线程池供程序本身使用,那么就可以在这个最后执行的线程中把这些线程池优雅的关闭掉.比如我们定义了一个线程池private Exe...

2019-09-16 18:50:24 314

原创 Java 程序员常用资源工具集合(建议收藏)

搜索资源网站学习技术过程我们经常需要使用搜索引擎来检索资料,国内常用的也就是某度了。当然有条件的话,搜索引擎首先还是推荐使用 Google,如果没办法使用,可以使用以下几个作为备用:BingBing 国际版:https://cn.bing.com/比某度好用,之前还被停用了几天,最近可以了。DuckDuckGoDuckDuckGo:https://duckduckgo....

2019-09-10 16:15:18 225

原创 Hbase java API详解

一、几个主要 Hbase API 类和数据模型之间的对应关系:1、 HBaseAdmin关系: org.apache.hadoop.hbase.client.HBaseAdmin作用:提供了一个接口来管理 HBase 数据库的表信息。它提供的方法包括:创建表,删除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。2、 HBaseConfiguration关系: org...

2019-08-31 12:23:50 1031

原创 揭秘阿里百亿级云客服实时分析架构演进之路

淘宝、天猫每天有上亿个不同的买卖家进行对话,产生百亿条聊天记录。对客服聊天记录的实时分析是实现智能客服的基础。本文主要分享云客服的整体架构,包括实时分析的场景、架构、技术难点,以及为何要从 NoSQL 迁移时序数据库和使用心得。网购催生客服职能转型如下图,是国内客服体系发展历程。国内客服体系经历了传统客服、Web 端客户和云客服三个发展阶段。传统客服以呼叫中心为主,主要以电话...

2019-08-28 10:15:27 1029

原创 Kafka数据到Hdfs

找时间总结整理了下数据从Kafka到Hdfs的一些pipeline,如下1> Kafka -> Flume –> Hadoop Hdfs常用方案,基于配置,需要注意hdfs小文件性能等问题.GitHub地址:https://github.com/apache/flume2> Kafka -> Kafka Hadoop Loader ->Had...

2019-08-23 11:03:55 1644

原创 hive读取Hbase的数据

1、文档(不会的直接找文档最方便)HBaseIntegration2、拷贝jar文件2.1 将Hbase/bin目录下面文件拷贝到Hive/bin目录下 cd /home/hbase/lib cp ./* /home/hive/lib 2.2把Hive的lib目录下面的hive-hbase-handler-0.13.1.jar拷贝到Hbase的li...

2019-08-22 20:10:14 1228

原创 Hive学习实例

正文一、求单月访问次数和总访问次数1、数据说明数据字段说明用户名,月份,访问次数数据格式A,2015-01,5A,2015-01,15B,2015-01,5A,2015-01,8B,2015-01,25A,2015-01,5A,2015-02,4A,2015-02,6B,2015-02,10B,2015-02,5A,2015-03,16A,...

2019-08-20 17:06:15 438 1

原创 mysql视图和临时表的区别

视图视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表。数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中。所以基表中的数据如果发生改变,从视图中查询出的数据也随之改变。视图是一个虚表,他是通过执行SQL查询所产生的。视图以select命名存储于数据字典当中。每当SQL查询包含有视图名称的时候,数据库管理系统会执行在视图定义...

2019-08-20 14:35:58 1770

原创 Elasticsearch:跨集群数据迁移之离线迁移

跨集群数据迁移用户在腾讯云上自建的ES集群或者在其它云厂商购买的ES集群,如果要迁移至腾讯云ES,用户可以根据自己的业务需要选择适合自己的迁移方案。如果业务可以停服或者可以暂停写操作,可以参考离线迁移的四种方案。离线迁移离线迁移需要先停止老集群的写操作,将数据迁移完毕后在新集群上进行读写操作。适合于业务可以停服的场景。离线迁移大概有以下几种方式:elasticsearch-dum...

2019-08-13 10:48:27 1891

转载 HashMap哈希算法引出的求余%和与运算&转换问题

1、引出问题  在前面讲解HashMap 的源码实现时,有如下几点:  ①、初始容量为 1<<4,也就是24 = 16    ②、负载因子是0.75,当存入HashMap的元素占比超过整个容量的75%时,进行扩容,而且在不超过int类型的范围时,进行2次幂的扩展(指长度扩为原来2倍)    扩大一倍    ③、新添加一个元素时,计算这个元素在H...

2019-08-06 10:34:36 794

原创 Mqtt Qos 深度解读

1.QoS含义 :Quality of Service,服务质量2.作用域发布者的Qos订阅者的Qos3.等级与作用level 0:最多一次的传输level 1:至少一次的传输,(鸡肋)level 2: 只有一次的传输4.交互过程qos0对于qos1而言,对于client而言,有且仅发一次publish包,对于broker而言,有且仅发一次publish,简而...

2019-08-05 18:19:39 1383 1

原创 TCP协议状态转换详解

、三次握手和四次挥手1、建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器。 (2)服务器端回应客户端的请求,这是三次握手中的第2个报文,这个报文同时带SYN标志和ACK标志。 因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。 (3)客户必须再次...

2019-08-05 15:46:39 1804 1

原创 Flink并行度与slot之间的关系

简介 Flink运行时主要角色有两个:JobManager和TaskManager,无论是standalone集群,flink on yarn都是要启动这两个角色。JobManager主要是负责接受客户端的job,调度job,协调checkpoint等。TaskManager执行具体的Task。TaskManager为了对资源进行隔离和增加允许的task数,引入了slot的概...

2019-08-05 12:17:40 5250

原创 ReenTrantLock详解

首先介绍下各个参数的含义;Node节点的参数含义:关于SIGNAL、CANCELLED、CONDITION、PROPAGATE四个状态,JDK源码的注释中同样有了详细的解读,再用一张表格总结一下:接下来查看源码,以下所有备注都写在代码中,主要本人也没写过什么博客,文字功底比较差,大家见谅。下面说到的源码都采用非公平锁来讲解:首先说下lock()方法1 f...

2019-08-05 10:03:04 337

原创 SkipList算法原理分析

为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB...

2019-08-01 16:58:53 454

原创 CompletableFuture的使用

总的来说,就是 解决future模式的缺点。主要是 a. 为了解决Future虽然可以实现异步获取线程的执行结果,但是future没有提供通知机制,调用方无法得知future什么时候执行完的问题。 b.要么使用阻塞, 在future.get()的地方等待future返回结果,这时会变成同步操作。如果使用isDone()方法进行循环判断,就会消耗cpu资源。 Complet...

2019-07-31 19:02:02 222

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除