自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (4)
  • 收藏
  • 关注

原创 HanLp的应用 - 真实使用

背景:用户将自己的诉求,通过文字形式,或者语音形式进行描述,描述后,希望系统自动检测出该系统已经存在的 功能,并且对功能进行分组处理,自动展示到前端页面;例如: 用户提出订单管理系统诉求描述:订单管理系统目的 目的:将上文中的专业词语,根据分词,和自定义的词性匹配出来。例子代码public class CSNDDemoSegment{ public ...

2021-08-04 14:18:22 735

原创 HanLp的应用 - 转自GitHub开源代码介绍

HanLP是一系列模型与算法组成的NLP工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。内部算法经过工业界和学术界考验,配套书籍《自然语言处理入门》已经出版。目前,基于深度学习的HanLP 2.x已正式发布,次世代最先进的NLP技术,支持包括简繁中英日俄法德在内的104种语言上的联合任务。HanLP提供下列功能:中文分词 HMM-Bigram(速度与精度最佳平衡;一百兆内存) 最短路分词、N-最短路分词 由字构词

2021-08-04 10:28:20 976

原创 java 设计模式

1、创建型模式 : 共五种:工厂方法模式、抽象工厂模式、单例模式、建造者(生成器)模式、原型模式。2、结构型模式 : 共七种:适配器模式、装饰者(器)模式、代理模式、外观模式、桥接模式、组合模式、享元模式。3、行为型模式 : 共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:设计模式的本质目的:使软件工...

2020-07-04 14:19:27 266

原创 CountDownLatch 深度解析 由浅入深的了解高并发编程

AbstractQueuedSynchronizer,简称AQS。是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效地构造出来,如常用的ReentrantLock、Semaphore、CountDownLatch等。基于AQS来构建同步器能带来许多好处。它不仅能极大地减少实现工作,而且也不必处理在多个位置上发生的竞争问题。在基于AQS构建的同步器中,只可能在一个时刻发生阻塞,从而降低上下文切换的开销,并提高吞吐量。Doug Lea 大神在设计AQS时也充分考虑了可伸缩性,因此ja...

2020-06-03 23:03:32 624 2

原创 JVM垃圾收集器基准报告 – Ionuț Baloșin 如何选择适合你的垃圾回收器

本文使用一组不同的模式描述了一系列Java虚拟机(JVM)垃圾收集器(GC)微基准及其结果。对于当前问题,我包括了AdoptOpenJDK 64位服务器VM版本13(内部版本13 + 33)中的所有垃圾收集器:串行GCParallel / ParallelOld GC(启动Java 7u4 ParallelGC和ParallelOld GC基本上是同一收集器)并发标记扫描CMS GC(目前不建议使用,它将根据JEP 363在Java 14版本中删除)垃圾优先G1 GCShenandoah

2020-05-30 18:24:36 596 2

原创 深入理解java虚拟机—— 虚拟机 新型垃圾收集器 Shenandoah GC, ZGC

(1)、内存:在内存占用、吞吐量和延迟这三项指标里,延迟的重要性日益凸显,越发备受关注。其原因是随着计算机硬件的发展、性能的提升,我们越来越能容忍收集器多占用一点点内存;(2)、吞吐量:硬件性能增长,对软件系统的处理能力是有直接助益的,硬件的规格和性能越高,也有助于降低收集器运行时对应用程序的影响,换句话说,吞吐量会更高。(3)、延迟:对延迟则不是这样,硬件规格提升,准确地说是内存的扩大,对延迟反而会带来负面的效果,这点也是很符合直观思维的:虚拟机要回收完整的1TB的堆内存,毫无疑问要比回收1GB的

2020-05-30 17:04:49 1217 2

原创 深入理解java虚拟机—— 超详细虚拟机垃圾收集器原理,GC 垃圾收集器算法的深度解析,项目中如何选择合适的垃圾收集器

有7中收集器 -- Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1。从JVM区域结构看,可将这些区域划分为“静态内存”和“动态内存”两类。程序计数器、虚拟机栈、本地方法3个区域是“静态”的,因为这几个区域的内存分配和回收都具备确定性,都随着线程而生,随着线程而灭。但Java堆和方法区不一样,内存分配都存在不确定性,只有在程序处于运行期间才能知道会创建哪些对象,这部分内存和回收都是动态的,垃圾收集器所关注的是这

2020-05-30 01:10:04 785 2

原创 深入理解java虚拟机—— 虚拟机 深扒垃圾回收器,再也不怕BAT面试

在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。jvm中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的.为什么需要了解垃圾回收目前内存的动态分配与内存

2020-05-27 23:40:33 382 3

原创 深入理解java虚拟机—— 一张万能的JVM虚拟机架构图看懂了虚拟机也就没什么了

辛辛苦苦树立了整整一个晚上,只要有价值就是值得的。希望大家留下宝贵意见。1、前篇介绍了【JAVA虚拟机堆内存结构以及堆内存作用对象回收机制】,主要包含四部分 一、堆区(Heap) 二、对象的内存布局 三、对象的访问定位 四、Java堆的内存划分2、前篇博文已将对JVM虚拟机内存中的 方法栈 【JAVA虚拟机内存结构之虚拟机栈(JVM Stack)】做了详细的介绍,栈的四大部分:虚拟机栈主要用于存储四部分内容栈帧(Stack Frame)...

2020-05-26 23:11:33 449

原创 深入理解java虚拟机——JAVA虚拟机程序计数器深度解析这一篇就够了

开篇介绍1、前篇介绍了【JAVA虚拟机堆内存结构以及堆内存作用对象回收机制】,主要包含四部分 一、堆区(Heap) 二、对象的内存布局 三、对象的访问定位 四、Java堆的内存划分2、前篇博文已将对JVM虚拟机内存中的 方法栈 【JAVA虚拟机内存结构之虚拟机栈(JVM Stack)】做了详细的介绍,栈的四大部分:虚拟机栈主要用于存储四部分内容栈帧(Stack Frame) ------局部变量表 --...

2020-05-25 22:25:17 977 1

原创 深入理解java虚拟机——堆区,学习java内存分布这一篇就够了

在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”(Bump The Pointer)但如果Java堆中的内存并不是规整的,已被使用的内存和空闲的内

2020-05-24 17:11:47 2590 2

原创 ARM处理器 CISC(复杂指令集)与RISC(精简指令集)

博文背景:最近想学习一些树莓派的知识,便看了一本书《树莓派开始,玩转Linux》,在阅读此书的时候,顺便把其中不懂的知识重新梳理一些,算是作为自己的读书笔记了。 有感兴趣的同学,可以一起研究学习。毕竟软件搞久了,真是有点无聊了,接触一些硬件的知识,反而感觉新颖,真是别有一番滋味了。毕竟一切软件的载体都是这是硬件,了解一些底层说不定可以收获到意想不到的见解。你知道iOS、WindowsPhone、Android这3大平台的手机共通点是什么吗?除了都可以打电话、传简讯、安装App之外,...

2020-05-24 01:15:07 8169

原创 高并发编程 -- Java中CAS详解

在JDK 5之前Java语言主要依靠synchronized关键字保证同步,这会导致有锁。一、锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。二、volatile机制volatile到底如何保证可见性和禁止指令重排序的。“观察加入volatile关键字和没有加入volatile关.

2020-05-23 14:23:56 309 2

原创 深入理解java虚拟机——java内存结构之虚拟机栈(JVM Stack)线程私有区域如何调度方法

虚拟机栈(JVM Stack)的介绍与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。  局部变量表中存储着方法的相关局部变量,包括各种基...

2020-05-20 22:51:39 1062

原创 深入理解java虚拟机—— java虚拟机内存结构虚拟机的内存模型架构解析

学习目标:由 JVM 引发的故障问题,无论在我们开发过程中还是生产环境下都是非常常见的,所有掌握好jvm,可以帮我本排查故障。 OutOfMemoryError(OOM) 内存溢出问题,Tomcat 容器中加载项目过多导致的 OOM 问题。 定位JVM哪里发生内存溢出了,为什么会内存溢出呢?如何监控 JVM运行。 JVM性能调优,JVM的内存区域划分,内存分配比例,并且可以通过JVM参数来反向定位代码问题,优化代码结构。 从JVM本质上了解线程并发安全的实现原理,以及与操作系统如何结合...

2020-05-19 23:15:42 353

原创 深入理解java虚拟机——如何下载hotspot、jdk源码

为什么要学习jvm学习JVM对于一个Java程序员的好处大概可以概括为下8点:了解java的发展历程,以及计算机语言的历史发展进程。 垃圾回收算法与原理 类字节码规范与执行引擎 内存模型与线程 类加载机制 编译器 高效并发,线程安全与锁优化 性能监控以及jvm调优可以从java语言运行的底层来了解java的运行原理首先我们看一下如何下载jdk源码、hotspot源码1. 进入网址:,这个网http://hg.openjdk.java.net址下面列出了所...

2020-05-18 23:14:55 1546

原创 Tomcat 9 源码解析 -- 请求如何经过tomcat到达servlet

前面几篇文章讲解了Tomcat如何启动的,如何通过NIO,开启一个ServerSocket服务监听。最后用户通过浏览器就可以直接访问到想要的资源。下图中Connector部分:一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户。 Tomcat有两个典型的Connector: - 一个直接侦听来自browser的http请求 - 一个侦听来自其它WebServer的请求 Coyote Http/1.1 Connec.

2020-05-17 10:16:19 1057

原创 Tomcat 9 源码解析 -- 与SpringMvc如何结合在一起

Tomcat启动项目的方式下,如何加载SpringMvc 中的 DispatcherServletSpringBootServletInitializer类public abstract class SpringBootServletInitializer implements WebApplicationInitializer { protected Log logger; // Don't initialize early private boolean register...

2020-05-15 00:06:37 461

原创 Tomcat 9 源码解析 -- tomcat框架设计(源码层次解析)

Tomcat 9 源码解析 -- tomcat框架设计前文已经从架构层次讲解了tomcat框架设计,以及tomcat使用,以及每个模块的作用,以及各功能模块之间的关系。下面是Tomcat 9 架构的一个启用的架构流程图:...

2020-05-12 23:26:57 482

原创 Tomcat 9 源码解析 -- tomcat框架设计

Tomcat整体架构与重要组件1.Tomcat整体架构如果你浏览过Tomcat源码相关文章,你一定对此图不陌生.Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载servlet的,但,当使用一些MVC框架时,如spring MVC、strusts2,可能就找不出servlet在哪里?其实spring MVC框架就是一整个servlet,在web.xml中

2020-05-11 23:43:23 558

原创 Tomcat 9 源码解析 -- 环境搭建

前言为什么要学习tomcat源码?以我个人来说,为什么我要学习tomcat源码,之前我看过一本书《tomcat源码解析》,讲的十分详细,但是那个是以tomcat 7 为基础进行讲解的。看到tomcat 7 --》 tomcat 9 变化还是不少的,所以自己想再重新了解一下 最新tomcat 源码的原理。1、 学习最新tomcat源码知识。2、了解tomcat运行原理浏览器 --》tomcat 然后再返回给 --》浏览器 的过程。3、了解代码设计模式。4、性能调优。因为项目..

2020-05-10 18:34:14 404

原创 Tomcat 9 源码解析 -- Connector组件(2)

Tomcat 9 源码解析 -- Connector组件上文中已经分析到了processKey()方法。Poller #run() 在run方法最后调用了 processKey(sk, attachment); // 处理SelectKey/** processKey()这个方法主要通过调用processSocket()方法创建一个SocketProcessor,然后丢到Tomcat线程池中去执行。每个Endpoint都有自己的SocketProce...

2020-05-10 00:06:14 547

原创 Tomcat 9 源码解析 -- Connector组件

<Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /></Service>1、首先.

2020-05-08 23:30:18 561

原创 Tomcat 9 源码解析 -- StandardContext

StandardContext 类介绍StandardContext 和其他 Container 一样,也是重写了 startInternal 方法。由于涉及到 webapp 的启动流程,需要很多准备工作,比如使用 WebResourceRoot 加载资源文件、利用 Loader 加载 class、使用 JarScanner 扫描 jar 包,等等。因此StandardContex...

2020-05-07 23:47:38 1004 1

原创 Tomcat 9 源码解析 -- ServletContainerInitializer

最近一直在死磕Tomcat 9 的源码,在此写下一些自己的学习心得,大家可以一起学习,互相讨论。本文主要是关于 Tomcat中 ServletContainerInitializer 初始化的部分。先看一张截图:1. 左侧为方法调用栈信息2.中间部分是一个loader加载器获取资源路径信息此处贴出源码:此处的源码是说明 tomcat 加载定义的ServletContai...

2020-05-06 23:31:22 732

原创 Maven项目中使用tomcat启动

最近学习Tomcat源码,平时新建maven项目的时候,使用springboot内嵌tomcat启动,现在需要使用外部tomcat启动,以便于学习tomcat和spring代码之间的执行关系。 添加完外部tomcat后突然发现无法将 maven项目的web项目添加到tomcat中。就是通过下图添加maven的 web项目,如过在JavaEE窗口下,项目中没有Deployment Desc...

2020-05-02 15:44:17 5579

原创 java SPI 机制 在Tomcat,spring-mvc启动及servlet3.0中的应用

写本篇博客原由: 最近本人在学习Tomcat源码,在研读StandardContext的时候,其中有一个关键类ContextConfig,也就是下面代码:processServletContainerInitializers(); 方法的调用地方,发现其内部在加载处理 javax.servlet.ServletContainerInitializer,把对象实例保存到 Conte...

2020-04-28 23:20:59 2312

原创 java SPI机制

1.什么是SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI的作用就是为这些被扩展的API寻找服务实现。2.SPI和API的使用场景 API (Application Programming Interface)在大多数情况下,都是实现方制定接口并完成对接口...

2020-04-28 22:33:55 486

原创 mysql语句--分组查询

给定一个时间段,按照时间分组, 分组后,求分组的个数,应答率,平均等待时长(秒),平均通话时长(分钟)SELECT     tmp1.dateTime,tmp1.total ,ifnull(tmp2.total, 0) as answer,ROUND(ifnull(tmp2.total, 0)/tmp1.total*100,1),tmp1.answeravg ,tmp1.calltimeavgFR...

2018-06-27 09:28:30 252

原创 深入理解Tomcat(1) ------ 超文本传输协议(HTTP)

超文本传输协议(HTTP) HTTP是一种协议,允许web服务器和浏览器通过互联网进行来发送和接受数据。它是一种请求和响应协议。 客户端请求一个文件而服务器响应请求。HTTP使用可靠的TCP连接–TCP默认使用80端口。第一个HTTP版是HTTP/0.9,然后被HTTP/1.0所替代。正在取代HTTP/1.0的是当前版本HTTP/1.1,它定义于征求意见文档(RFC) 2616,可以从http...

2018-03-26 14:40:26 378

原创 ActiveMQ配置使用

介绍 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。ActiveMQ的特性 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, P

2018-03-16 14:26:02 5130

原创 2.Add Two Numbers

package letcode.com;/**You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add th

2018-03-15 16:14:05 189

原创 LetCode 算法题 TwoSum

package letcode.com;import java.util.HashMap;import java.util.Map;/** * 1. twoSum Given an array of integers, return indices of the two numbers such that they add up to a specific target. Yo

2018-03-14 14:45:35 253

原创 悲观锁,乐观锁,行锁,表锁,页锁,共享锁,排他锁

最近在看 大数据量下高并发同步问题,然后看到了悲观锁,乐观锁,然后又看到了其他的锁,有点懵,然后就查资料学习。悲观锁:  顾名思义,很悲观,就是每次拿数据的时候都认为别的线程会修改数据,所以在每次拿的时候都会给数据上锁。上锁之后,当别的线程想要拿数据时,就会阻塞,直到给数据上锁的线程将事务提交或者回滚。传统的关系型数据库里就用到了很多这种锁机制,比如行锁,表锁,共享锁,排他锁等,都是在做操作之前先

2018-02-27 11:29:05 202

原创 java正则表达式 分段解析字符串使用(.*?)(?=)

例子:package com.h3c.pattern;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test { public static void main(String[] args) { /*String filetext = "//@张小名: 25分//@李小花

2018-02-06 09:19:18 1609

原创 EasyUi 分页 展示注意

*前台页面展示* 表格使用EasyUI datagrid展示分表 使用formatter做一些特殊的操作处理 :显示值得时候应注意传值格式 否则不能成功传值:显示到表格中的各种操作:

2018-02-03 12:55:46 237

原创 Disruptor高性能缓存队列

例子一: 一个生产者多消费者 共同消费产品package com.h3c.disruptor02;public class TestEvent { private String line; public String getLine() { return line; } public void setLine(String line)

2017-12-29 13:38:07 897

原创 Huawei设备配置syslog

快照解析命令收集 华三命令 华为命令 display current-configuration display current-configuration display version display version display transceiver interface display transceiver display transceiver manu

2017-12-08 14:04:08 25969 1

原创 思科设备syslog支持

1.2 快照命令收集 华三命令 思科命令 display current-configuration show running-config display version show version display startup show startup-config

2017-12-08 13:50:31 1989

原创 POI提供API给Java程序对Microsoft Office格式档案读和写的功能

Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。 HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft

2017-12-07 10:13:31 1231

jd-guijava反编译工具

JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse.一款纯绿色的java反编译软件,压缩完仅586KB。解压可用,强大的反编译功能,可以把class文件编译成java文件,而且支持层级关系,在打开子类的情况下,直接点击父类名称,即可进入父类文件 轻巧方便~是我使用过最好的反编译软件~~ 还等什么呢

2017-08-11

Dubbo分布式项目例子

1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架 其核心部分包含: 1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。 2. Dubbo能做什么? 1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载

2017-08-08

netWorkProtocol_网络协议

网络协议,网络七层协议结构图2017版

2017-08-04

w安装程序开发

slfhoashf98hsaopdfhasiohfd

2014-08-15

空空如也

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

TA关注的人

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