自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 问答 (1)
  • 收藏
  • 关注

原创 日期国际化探究

最近在工作中遇到一个问题,就是日期国际化的问题,因为我们的网站是面向全世界的,当不同国家不同时区的人访问我们的网站时希望看到的是本地的日期,而不是中国的日期。网上大部分教程都是针对中国进行日期转换,而没有考虑过国际化的情况下日期应该怎么显示。日期国际化传输和存储网上一直没有一个明确的方案,大部分都是国内的日期转换,这样转换会丢失掉一部分日期信息。其实spring boot自带的日期处理已经可以...

2019-05-22 16:33:31 614

转载 《Scalable IO in Java》笔记

Scalable IO in Javahttp://gee.cs.oswego.edu/dl/cpjslides/nio.pdf基本上所有的网络处理程序都有以下基本的处理过程:Read requestDecode requestProcess serviceEncode replySend replyClassic Service Designs简单的代码实现:cl...

2019-05-09 20:23:53 275

原创 第二章:寄存器

CPU主要有有运算器,控制器,寄存器,三部分组成,这些器件由内部总线相连。运算器进行信息处理寄存器进行信息存储控制器控制各种器件进行工作内部总线连接各种器件,在它们之间进行数据传送8086 CPU有14个寄存器,AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES通用寄存器8086所有寄存器都是16位的,可以存放2个Byte即字节,16位二进制数通...

2019-04-13 10:09:29 701

转载 汇编指令机器码对应列表

指令集依照机器操作码、汇编助记符和汇编操作数来描述指令,遵循下列约定:l reg8: 8位寄存器。l reg16: 16位寄存器。l mem8: 8位内存数值。l mem16: 16位内存数值。l immed8: 8位立即数值。l immed16: 16位立即数值。l immed32: 32位立即数值...

2019-04-03 21:22:47 3682

原创 第一张:基础知识

汇编指令和机器指令一一对应,有编译器翻译识别,计算机无法直接识别一个存储单元等于1字节 1字节等于8位1KB=1024Byte(字节)1Byte=8bit(位)CPU中,指令和数据都是二进制形式存在磁盘的数据,CPU无法直接使用,只能读到内存中,才能被CPU使用CPU可以使用的数据,是在存储器中存储器被划分为很多存储单元,以0开始编号一个单元存储一字节,即8...

2019-03-31 20:14:51 258

原创 elasticsearch 使用词干提取器处理英语语言

es默认的语言分析器standard只能对英语语言进行简单处理,无法将变形后的单词还原为词干。es中提供了很多词干提取器:譬如基于算法的 Porter stemmer,基于算法和内置词典的kstem和基于外置词典的hunspell在使用language analyzers的英语分析器时默认就是使用的porter stemmer。不过该词干提取器效果并不是很好。有两种方案修改:使用kstem tok...

2018-06-23 14:27:03 2145

原创 符号表的概念与实现

基本概念符号表最主要的目的就是将一个键和一个值联系起来。 定义:符号表是一种存储键值对的数据结构,支持插入(put)和查找(get)操作,即给定建得到相应的值。每个键只对应一个值向符号表中插入键值对,如果已存在就会替换原有的值/** * 有序数组符号表 * @author yuli * */public class SymbolTable<K extends Comparable<

2018-03-24 15:56:20 6321

转载 分布式系列文章——Paxos算法原理与推导

Paxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难。网上有很多讲解Paxos算法的文章,但是质量参差不齐。看了很多关于Paxos的资料后发现,学习Paxos最好的资料是论文《Paxos Made Simple》,其次是中、英文版维基百科对Paxos的介绍。本文试图带大家一步步揭开Paxos神秘的面纱。Paxos是什么Paxos算法是...

2018-03-18 14:57:56 280

原创 插入排序

基本概念从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置重复步骤3,直到找到已排序的元素小于或者等于新元素的位置将新元素插入到该位置后重复步骤2~5分类 ————- 内部比较排序(in-place) 数据结构 ———- 数组 最差时间复杂度 —- 最坏情况为输入序列是降序排列的,此时时

2018-03-09 07:55:38 183

原创 选择排序

基本概念选择排序算法是原地排序(in-place)平均复杂度是O(n^2)假定有A,B两个数组,A数组没有元素,B数组充满元素。选择排序就是每次将B数组里最小的元素放入(add)A数组中。到最后A数组充满了有序的元素,B数组元素为空。这和排序扑克牌有点像。选择排序动图代码实现/** * 选择排序 * @author yuli * */public class SelectionSort exten...

2018-03-08 21:43:35 217

原创 Mysql order by 优化

以前一直以为在order by的字段上加上索引就行了,网上搜也是,实际上使用的时候在查询中如果使用了ORDER BY 语句,如果在select中有未加入索引的字段,使用order by以后就不会走索引,而会进行全表扫描。单表的话可以在from字段后加入FORCE INDEX(key)字段,就能强制使用索引。使用前+----+-------------+-------+------+--------...

2018-03-07 10:05:28 220

原创 记一次JVM内存溢出造成的tomcat假死排查

今天中午公司老官网挂了,无法访问。领导让我帮同事排查。首先NGINX没有问题,其他网站都能访问。然后telnet访问tomcat端口。发现端口已经无法访问。但应用仍在服务器上运行。初步判断是tomcat假死造成的。而能造成tomcat假死的多半就是jvm出问题了。马上在tomcat启动文件中加入jvm的rmi监控命令和gc日志打印命令。应用重启之后,立马发现了端倪。cpu和内存消耗居高

2018-02-02 19:38:37 13052 3

原创 从零编写日志分析系统之logstash

概述logstash是负责采集和解析日志的,将日志解析成需要的格式存储在elasticsearch或者其他地方。logstash提供了很多非常强大的插件,这些插件可以有效的把日志信息转换成需要的格式。一:安装首先取官网下载logstash安装包,这次版本选择最新的6.1.1 安装:wget https://artifacts.elastic.co/downloads/logstash/logsta

2017-12-22 10:45:59 3300

原创 jvm探秘十一:虚拟机执行子系统之方法调用

概述方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。在程序运行时,方法调用是最普遍和频繁的操作。Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于直接引用)。Java方法调用需要在类加载期间,甚至是运行期间才能

2017-12-17 20:48:45 336

原创 jvm探秘十:虚拟机字节码执行引擎之栈帧

概述执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器,硬件,指令级和操作系统层面上的,而虚拟机的执行引擎是由自己实现的,因此可以自行制定指令集与指令集的体系结构,并且能够执行那些不被硬件直接支持的指令格式。Java虚拟机执行引擎在执行Java代码的时候会有解释执行(通过解释器执行)和编译执行(通过

2017-12-10 21:20:17 365

原创 jvm探秘九:类加载机制之类加载器

概述虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。一:类与类加载器类加载器的作用:首先类加载器可以实现最本质的功能即类的加载动作。同时,它还能够结合java类本身来确定该类在Java虚拟机中的唯一性。用通俗的话来说就是:比较两个类是否相等,只有这

2017-12-06 21:20:25 256

原创 jvm探秘八:类加载机制之类加载过程

概述java中类加载的全过程,就是加载,验证,准备,解析和初始化5个阶段执行的具体动作。一:加载“加载”是“类加载”中的一个阶段(两个名词不要弄混了),这个阶段通常也被称作“装载”。 在加载阶段,虚拟机需要完成以下三件事(虚拟机规范对这三件事的要求并不具体,因此虚拟机实现与具体应用的灵活度相当大):通过“类全名”来获取定义此类的二进制字节流虚拟机规范对于“通过“类全名”来获取定义此类的二进制

2017-12-06 20:16:00 233

原创 jvm探秘七:类加载机制之类加载时机

概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行检验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类加载时机从类被加载到虚拟机内存中开始,到卸载出内存为止,类的生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Us

2017-12-04 19:49:51 246

原创 jvm探秘六:字节码指令集

概述java虚拟机的指令有一个字节长度的,代表某种特定的操作含义的数字(操作码)以及跟随其后的零至多个代表此操作所需参数(操作数)构成。 由于java虚拟机采用面向操作数栈而不是寄存器的架构,大多数指令都不含操作数,只有一个操作码。Java虚拟机的操作码长度为一个字节,即0~255。do { 自动计算 PC 寄存器的值+1; 从 PC 寄存器指定的位置,从字节码流中取出操作码; i

2017-12-03 21:11:19 286

原创 jvm探秘二:对象的创建

概述创建对象在java源码中只是一个new的关键字而已,而在虚拟机中对象是怎么创建的呢,以下只讨论java对象,不包括数组和Class对象。一:对象的创建当虚拟机遇到一个new指令时,会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类的加载过程。1为对象分配内存 对象所需内存的大小在类加载完成后便完全

2017-12-03 20:22:22 215

原创 jvm探秘五:Class类文件结构之属性表

概述在Class文件、字段表和方法表都可以携带自己的属性信息,这个信息用属性表进行描述,用于描述某些场景专有的信息。与Class文件中其它数据项对长度、顺序、格式的严格要求不同,属性表集合不要求其中包含的属性表具有严格的顺序,并且只要属性的名称不与已有的属性名称重复,任何人实现的编译器可以向属性表中写入自己定义的属性信息。虚拟机在运行时会忽略不能识别的属性,为了能正确解析Class文件,虚拟机规范中

2017-12-03 11:17:46 1909

原创 jvm探秘四:class类文件结构

概述一:class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,包含多个数据项目(数据项目的顺序,占用的字节数均由规范定义),各个数据项目严格按照顺序紧凑的排列在Class文件中,不包含任何分隔符,使得整个Class文件中存储的内容几乎全部都是程序运行的必要数据,没有空隙。当遇到需要占用超过8位字节以上空间的数据项目时,会按照高位在前的方式分割为多个8位字节进行存储。 class

2017-11-28 20:55:17 325

原创 vue2使用keep-alive缓存多层列表页

vue关于列表页和详情页的展现比较让人头疼,在列表页面点击进详情页返回以后,列表页会重新刷新。假如在第五页找到的数据,点击修改后返回又跳回第一页了,这个时候就需要用到keep-alive缓存页面数据,但keep-alive缓存的页面一直不会发生改变,特别是列表页层级很多的情况下,更加复杂。 譬如我后台的一个管理页面,因为数据关联很复杂,所以做了三层列表页嵌套,上一层点击管理就可以进行下一层的数据展

2017-11-21 10:34:49 5208

原创 jvm探秘三:垃圾回收

概述c和c++语言中,每次内存的使用需要申请和归还,而java中并不需要这么做,归根结底是因为jvm有一套完整的内存管理策略,内存的申请和释放都有jvm完成了,编程人员再也不需要关注于内存的使用,只需要专注于业务逻辑的实现就行了。一:对象存活的判断引用计数算法:给对象中添加一个引用计数器,每有一个地方引用时计数器就加1,引用失效时就减1,计数器为0时就是不可能在被使用的。但对象相互嵌套引用时会造成会

2017-11-20 20:35:02 280

原创 jvm探秘一:java内存模型

一:Java内存规范java虚拟机在执行java程序的时候会把管理的内存划分为多个内存区域,每个区域都有各自的用途,根据java虚拟机规范。Java虚拟机会把内存划分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 程序计数器(Program Counter Register)程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执

2017-11-18 11:15:55 333

原创 elasticsearch通过组合使用自定模板和动态模板来映射logstash数据

logstash传输给es的数据会自动映射为5索引,5备份,字段都为text的的索引。这样基本上无法进行数据分析。 所以必须将logstash的数据按照既定的格式存储在es中,这时候就要使用到es模板技术了。在es中可以定义了自定义模板和动态模板,之后es会自动将相关索引映射为模板规定的格式。模板格式如下:{ "template": "tomcat*", "settings": {

2017-11-17 13:52:53 3482

原创 filebeat采集数据的几个痛点的解决方案

1.行转列filebeat采集多行日志的时候会把日志分开来采集,这样传递到logstash的时候就无法正确解析了,所以用把多行日志统一采集。 这时候可以使用:multiline配置选项。multiline:适用于日志中每一条日志占据多行的情况,比如各种语言的报错信息调用栈。这个配置的下面包含如下配置:pattern:多行日志开始的那一行匹配的pattern negate:是否需要对patter

2017-11-17 10:05:06 16519 5

原创 logstash通过codec将完整的数据发送到kafka

业务需求,通过logstash解析日志后,需要发送一个份到kafka中。但在实际操作的时候发现一个很蛋疼的问题。就是logstash发送到kafka的数据竟然只是一个message。。对就是一个大括号包裹的message,其他什么都没有。。网上到处搜都没搜索相关问题,然后取官网看了看,发现一个codec插件很强大,用了一下果然能行。具体代码如下 kafka { codec =>

2017-11-16 16:22:50 1919 3

原创 使用es构建全自动搜索系统

相信每一个使用lucene或者solr的程序员最深恶痛觉的就是为每一个文档(document)创建索引,特别是lucene,一些复杂一点的索引需求会写半个屏幕的查询语法。但是有了es,这些问题都迎刃而解了。通过es的特性,只需要做一个后台管理页面,让业务人员录入索引规则就可以自动索引和搜索啦,再也不用我手动写索引程序啦!全自动,不需要管理! 下面我来讲讲具体实现。首先是建表,创建一个属性(prop

2017-11-16 16:15:54 1504

原创 二叉堆的基本概念与实现

基本概念二叉堆又名堆,或者优先队列。一般实现在堆顶的元素总是最小的。 二叉堆是一颗用数组实现的完全二叉树。 要实现二叉堆必须满足以下条件: 1堆有序,二叉树中每一个子树的父节点不大于(大根堆)两个子节点。 2树的父节点的两个子节点位置为 2k和2k+1(不使用数组的0号索引),如果使用0号索引,两个子节点的位置为2*k+1和2*k=2。 要实现堆有序,主要依靠上浮(swim)和下沉(sni

2017-09-18 21:16:43 709

原创 spring boot 接受ajax数组

最近在用spring boot + vue.js作后台,在做批量删除的时候出现了异常jackson报的错org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not deserialize instance of java.lang.String[] out of

2017-09-14 11:25:52 3776

原创 最短路径之Dijkstra算法的概念与实现

基本概念要找出最短路径,其实就是从起点遍历所有能到达的顶点,然后计算他们的权重。Dijkstra算法核心在于边的松弛(relax),可以想象成一根绷紧的橡皮筋,让它放松下来。即是计算源点(s)经过当前点(v)到目标点(w)的权重,如果比目标点(w)之前的权重要小,就替换掉。最终的结果就是生成一颗最小路径树。这个算法和prim算法非常相似,甚至就是prim即时算法的变种。如果加权无向图和加权有向图的边

2017-09-11 20:34:54 1225

原创 最短路径的概念与基本数据结构

概念最短路径最直接的例子就是导航软件的,从一个地方到另一个地方的路径。要实现最短路径算法,一般使用一个加权有向图。即找到一个顶点到另一个顶点权重最小的有向路径。基本的数据结构带权有向图的数据结构和带权无向图差不多,只是添加边的时候不添加一条双向的边。/** * 加权有向图 * @author yuli * */public class EdgeWeightedDiGraph { p

2017-09-11 20:17:41 1375

原创 最小生成树之kruskal算法概念与实现

概念最小生成树的kruskal算法非常简单了,原理和prim算法差不多,然而kruskal并不是从源点开始层次考察的,而是直接用优先队列存储所有边,通过贪心算法的思想,用权重最小的边组成最小生成树。需要注意的是要通过并查集过滤掉组成环的边。实现/** * 最小生成树,克鲁斯卡尔算法 * @author yuli * */public class KruskalMst ...

2017-09-10 09:23:02 291

原创 从零编写日志分析系统之filebeat安装配置

filebeat和logstach都是日志采集工具,不过logstach可以进行数据清洗。在应用服务器上直接安装Logstash比较消耗性能,所以需要安装filebeat来获取数据,再转发到logstash进行数据清洗。filebeat安装filebeat很小巧,只有8M,通过配置yum源就能安装。不过我是在官网下载的安装包。 官网下载地址:https://www.elastic.co/downl

2017-09-05 14:28:10 754

原创 从零编写日志分析系统之nginx日志配置

配置nginx日志文件nginx原有的配置文件包含的信息比较少,可以修改nginx.conf得到更多的数据。nginx日志文件输出形式有三种形式,最常见的就是通过空格区分字段输出。还有通过自定义json形式输出,通过syslog直接输出到远端服务。通过空格区分输出log_format main '$remote_addr $remote_user [$time_local] "$reques

2017-09-05 10:28:49 598

原创 最小生成树之prim算法概念与实现

基本概念prim算法是以顶点为视角的,每一步都会为生长中的树添加一条边。从初始顶点出发,然后找到顶点周围最小的边,然后移动到最小边的另一个端点,继续找到顶点周围最小的边,直到得到最小生成树。所以prim算法的轨迹是一颗从初始顶点不断蔓延的树。prim算法懒惰实现prim算法的懒惰实现很简单,将需要考察的顶点的边放进一个优先队列中,并考察边的顶点是否存在于最小生成树中或者是否形成一个环。如果都没有,就

2017-09-04 22:03:22 459

原创 从零编写日志分析系统之elasticsearch5.5.2环境搭建

去官网找到下载地址 官网地址:https://www.elastic.co/downloads/elasticsearch在服务器里下载安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz下载完成后解压 tar -zxvf https://artifacts.ela

2017-09-04 11:10:56 365

原创 从零编写日志分析系统之linux用户创建

服务器使用root用户不好,还是要建个新用户。添加一个新的用户组groupadd alms添加一个新的用户并分配alms用户组useradd alms_admin -g alms设置密码passwd alms_admin分配sudo权限,并设置无密切换修改/etc/sudoers添加一行alms_admin ALL=(ALL) NOPASSWD: ALL这样,用户和用户组就创建

2017-09-04 10:08:48 337

原创 从零编写日志分析系统之需求分析

前言最近在公司架设一个日志分析平台,记录一下相关技术的研究和步骤。技术架构前端技术采用vue.js作为前端基础组件。 采用elementUI作为表单UI 采用echarts图表工具进行实时数据展现。 采用kibana作为数据展现。后端技术采用java语言编写。 使用filebeat进行应用服务器日志采集。 使用logstash进行日志解析和日志转发。 自定义sdk作为系统内数据采

2017-09-04 09:39:38 2912

空空如也

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

TA关注的人

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