[置顶] 新书预售《Tomcat内核设计剖析》

鄙人的新书《Tomcat内核设计剖析》已经在京东预售了,有需要的朋友可以通过文末的连接进行预定。感谢各位朋友。本书特色? 深入剖析Tomcat的每一个设计要点,使读者知其然,更知其所以然; 拒绝没营养的直接贴代码分析,而是升华到对Tomcat设计思想的剖析; 通篇采用大量插图来辅助文字解释,降低读者的理解门槛; 层次分明,脉络清晰,由浅入深,循序渐进,确保知识讲解的连贯性和普适性。 通过本书能快速建...
阅读(1565) 评论(12)

[置顶] 机器学习的监督学习在研究什么

什么是监督学习简单来说,监督学习是对给定的输入输出样本进行学习并建立一个模型,该模型能对任意输入做出好的输出预测。 监督学习核心思想 所有可能的模型函数的集合称为假设空间,$H=\left \{ f|Y=f(X) \right \}$。 对于所有的模型函数集合,可能不知道是该用用逻辑回归模型、或贝叶斯模型、或神经网络模型还是用支持向量机模型。这个过程通常是一个不断迭代的过程,只有在不断地尝试比较才...
阅读(1501) 评论(0)

[置顶] 分布式系统调用链监控

分布式系统调用链监控 应用架构由集中式向分布式演进后,整个调用关系变得复杂。 分布式架构由复杂且较大规模集群构成,各个应用之间相当独立,可能由不同团队、不同语言实现。 系统一个完整的调用过程可能横跨多个服务及数据中心。 复杂的调用导致系统出问题后难以定位问题。 无法准确知道整体系统性能及运行情况。 全链路性能监控一个请求完整的调用链可能如下图...
阅读(8366) 评论(14)

[置顶] 从操作系统内核看Java非阻塞IO事件检测

非阻塞服务器模型最重要的一个特点是,在调用读取或写入接口后立即返回,而不会进入阻塞状态。在探讨单线程非阻塞IO模型前必须要先了解非阻塞情况下Socket事件的检测机制,因为对于非阻塞模式最重要的事情是检测哪些连接有感兴趣的事件发生,一般会有如下三种检测方式。应用程序遍历socket检测如图所示,当多个客户端向服务器请求时,服务器端会保存一个socket连接列表,应用层线程对socket列表进行轮询尝...
阅读(4784) 评论(5)

[置顶] 分布式内存网格Hazelcast源码导读

Node是节点的抽象,里面包含节点引擎、客户端引擎、分区服务、集群服务、组播服务、连接管理、命令管理、组播属性、节点配置、本地成员、tcp地址、组播地址、连接者、节点初始化器、管理中心、安全上下文、Config类,包含GroupConfig、NetworkConfig、MapConfig、TopicConfig、QueueConfig、MultiMapConfig、ListConfig、SetCo...
阅读(10343) 评论(0)

[置顶] 如何设计一个数据库中间件(支持百亿级别数据存储)

继《如何设计开发一个可用的web容器》之后又一如何系列文章,《如何设计一个数据库中间件》...
阅读(9127) 评论(4)

[置顶] web安全认证机制知多少

如今web服务随处可见,成千上万的web程序被部署到公网上供用户访问,有些系统只针对指定用户开放,属于安全级别较高的web应用,他们需要有一种认证机制以保护系统资源的安全,本文将探讨五种常用的认证机制及优缺点。Basic模式HTTP协议规范中有两种认证方式,一种是Basic认证,另外一种是Digest认证,这两种方式都属于无状态认证方式,所谓无状态即服务端都不会在会话中记录相关信息,客户端每次访问...
阅读(10888) 评论(0)

[置顶] tomcat集群实现源码级别剖析

随着互联网快速发展,各种各样供外部访问的系统越来越多且访问量越来越大,以前Web容器可以包揽接收-逻辑处理-响应整个请求生命周期的工作,现在为了构建让更多用户访问更强大的系统,人们通过不断地业务解耦、架构解耦将web容器的逻辑处理抽离交由其他中间件处理,例如缓存中间件、消息队列中间件、数据存储中间件等等。Web容器负责的工作可能越来越少,但是它确实必不可少的部分,它负责接收用户请求并分别调用各个服...
阅读(2953) 评论(2)

[置顶] 如何设计一个web容器

开发一个web容器涉及很多不同方面不同层面的技术,例如通信层的知识,程序语言层面的知识等等,且一个可用的web容器是一个比较庞大的系统,要说清楚需要很长的篇幅,本文旨在介绍如何设计一个web容器,只探讨实现的思路,并不涉及过多的具体实现。把它分解划分成若干模块和组件,每个组件模块负责不同的功能,下图列出一些基本的组件,并将对每个组件进行介绍。 连接接收器主要的职责就是监听是否有客户端套接字连接并接...
阅读(10032) 评论(8)

[置顶] tomcat集群机制剖析及其生产部署选型

为什么要使用集群?为什么要使用集群?主要有两方面原因:一是对于一些核心系统要求长期不能中断服务,为了提供高可用性我们需要由多台机器组成的集群;另外一方面,随着访问量越来越大且业务逻辑越来越复杂,单台机器的处理能力已经不足以处理如此多且复杂的逻辑,于是需要增加若干台机器使整个服务处理能力得到提升。集群难点在哪?如果说一个web应用不涉及会话的话,那么做集群是相当简单的,因为节点都是无状态的,集群内各...
阅读(9729) 评论(14)

[置顶] 如何让你的传输更安全——NIO模式和BIO模式实现SSL协议通信

对于SSL/TLS协议,如果要每个开发者都自己去实现显然会带来不必要的麻烦,正是为了解决这个问题Java为广大开发者提供了Java安全套接字扩展——JSSE,它包含了实现Internet安全通信的一系列包的集合,是SSL和TLS的纯Java实现,同时它是一个开放的标准,每个公司都可以自己实现JSSE,通过它可以透明地提供数据加密、服务器认证、信息完整性等功能,就像使用普通的套接字一样使用安全套接字...
阅读(3387) 评论(0)

[置顶] 集群RPC通信

RPC即远程过程调用,它的提出旨在消除通信细节、屏蔽繁杂且易错的底层网络通信操作,像调用本地服务一般地调用远程服务,让业务开发者更多关注业务开发而不必考虑网络、硬件、系统的异构复杂环境。先看看集群中RPC的整个通信过程,假设从节点node1开始一个RPC调用,①先将待传递的数据放到NIO集群通信框架(这里使用的是tribes框架)中;②由于使用的是NIO模式,线程无需阻塞直接返回;③由于与集群其他...
阅读(4051) 评论(0)

[置顶] 从单机到集群会话的管理之集群模式二(更大的集群)

《从单机到集群会话的管理之集群模式一》中讲到的全节点复制的网络流量随节点数量增加呈平方趋势增长,也正是因为这个因素导致无法构建较大规模的集群,为了使集群节点能更加大,首要解决的就是数据复制时流量增长的问题,下面将介绍另外一种会话管理方式,每个会话只会有一个备份,它使会话备份的网络流量随节点数量的增加呈线性趋势增长,大大减少了网络流量和逻辑操作,可构建较大的集群。下面看看这种方式具体的工作机制,集群...
阅读(2723) 评论(0)

[置顶] web容器的会话机制

基本所有web应用开发的朋友都很熟悉session会话这个概念,在某个特定时间内,我们说可以在一个会话中存储某些状态,需要的时候又可以把状态取出来,这整个过程的时间空间可以抽象成“会话”这个概念。尽管你对session的使用已经很熟悉了,但你未必真正理解session是什么。因为你只是使用了request.getsession().setAttribute("users", username)把某...
阅读(2882) 评论(1)

[置顶] 内存数据网格hazelcast的一些机制原理

hazelcast使用文档可以直接看官方文档,但机制原理相关的资料基本没有,本人硬撸源码写的一些东西,跟大家分享一下。...
阅读(2561) 评论(1)

kmeans实现文本聚类

需求拿到的需求是输入n个文本,对文本进行聚类,由于这些输入不能通过历史数据进行训练,所以这个主要就是用无监督学习来解决。kmeans谈到聚类就会想到kmeans,它的核心思想是给定的K值和K个初始质心将样本中每个点都分到距离最近的类簇中,当所有点分配完后根据每个类簇的所有点重新计算质心,一般是通过平均值计算,然后再将每个点分到距离最近的新类簇中,不断循环此操作,直到质心不再变化或达到一定的迭代次数。...
阅读(222) 评论(0)

从JDK源码角度看Boolean

Java的Boolean类主要作用就是对基本类型boolean进行封装,提供了一些处理boolean类型的方法,比如String类型和boolean类型的转换。主要实现源码如下:public final class Boolean implements java.io.Serializable, Comparable { private final boolean value;...
阅读(241) 评论(0)

开源一个文本分析项目

Githubhttps://github.com/sea-boat/TextAnalyzerTextAnalyzera text analizer that can analyze text. so far, it can extract hot words in a text segment by using tf-idf algorithm,at the same time using a sc...
阅读(414) 评论(0)

谈谈Java基础数据类型

Java的基本数据类型 类型 意义 取值 boolean 布尔值 true或false byte 8位有符号整型 -128~127 short 16位有符号整型 -pow(2,15)~pow(2,15)-1 int 32位有符号整型 -pow(2,31)~pow(2,31)-1 long 64位有符号整型 -pow(2,63)~p...
阅读(627) 评论(1)

怎么用弱引用实现内存泄漏检测

在Java中,引用分为强引用、软引用、弱引用和虚引用四种。 强引用,代码中普遍存在的形式,例如常见的普通类new出对象后的引用。GC不会回收强引用的对象。 软引用,软引用对象会在内存溢出异常之前进行回收,也就是说在内存富裕的情况下GC不回收软引用。它可通过SoftReference类实现。 弱引用,弱引用对象会在下一次GC时被回收,也就是说不管内存富不富裕,当GC时都会回收弱引用。它可通过WeakR...
阅读(216) 评论(0)

如何用机器学习对文本分类

需求使用监督学习对历史数据训练生成模型,用于预测文本的类别。样本清洗主要将重复的数据删除掉,将错误无效的数据纠正或删除,并检查数据的一致性等。比如我认为长度小于少于13的数据是无效的遂将之删掉。def writeFile(text): file_object = open('result.txt','w') file_object.write(text) file_object.c...
阅读(266) 评论(0)

注解的原理又是怎么一回事

Java内置的注解以及自定义一个注解大家都比较熟悉的了,现在来看看注解实现的原理,看看Java的体系下面是如何对注解的支持的。在讨论前先看一个自定义注解的例子,自定义实现这样一个注解:通过@Test向某类注入一个字符串,通过@TestMethod向某个方法注入一个字符串。① 创建Test注解,声明作用于类并保留到运行时,默认值为default。@Target({ElementType.TYPE})...
阅读(2384) 评论(3)

SBT构建工具

SBTSimple Build Tool. A interactive build tool.installwindows可直接到http://www.scala-sbt.org/0.13/docs/Installing-sbt-on-Windows.html下载安装,但网速实在是太慢,我这是直接用chocolatary管理软件,所以直接一个命令choco install sbt安装,很快。comm...
阅读(360) 评论(0)

机器学习之神经网络

多层神经网络前面说到的感知器是一种最基础的神经网络,他只有输入层和输出层,感知器只能处理线性可分问题,而对于非线性问题就需要多层神经网络。一般如下图所示,有多个层,比如左边的包含输入层、隐层和输出层,而右边的则包含了两个隐层。每层的神经元与下一神经元全互连,同层之间的神经元不会相连,输入层用于接收输入,经过隐层加工后再到输出层加工并输出。如何训练多层网络对于多层网络我们常用误差逆传播算法来训练,而我...
阅读(449) 评论(0)

如何对热词进行提取

热词简单地理解热词就是某文档中出现频率高的且非无用的词语。朴素的想法文档由若干词(term)组成,那么很朴素的想法就可以认为文档中某个term出现的次数越多就越可能是高频热词。这样的统计策略就叫Term Frequency,即TF。干扰项 标点符号,一般标点符号没有价值,去掉。 停词,停词没有特别的意义,一般也要去掉,比如“是”,“的”,”the”,”that”,”this”等。 词权重现在可能还存...
阅读(298) 评论(0)

Java内存模型

在多核时代,如何提高CPU的性能成为了一个永恒的话题,而这个话题的讨论主要就是如何定义一个高性能的内存模型,内存模型用于定义处理器的各层缓存与共享内存的同步机制及线程和内存交互的规则。 Java的世界也有属于它自己的内存模型,Java内存模型,即Java Memory Model,简称JMM。由于Java被定义成一种跨平台的语言,所以在内存的描述上面也要能是跨平台的,Java虚拟机试图定义一种统一的...
阅读(867) 评论(0)

方便Lucene高版本使用IKAnalyzer分词

whyIKAnalyzer是个很不错的中文分词工具,但已经不维护了,但只支持低版本的Lucene,为了兼容Lucene6.x版本,这里是小改动了一些然后放到github上,方便有需要的人使用。也对Lucene源码比较熟,后面有必要再自己重新建个分词工具。changes Lucene的Analyzer抽象类有变。 Lucene的Tokenizer抽象类有变。 Lucene的BooleanQuery有变...
阅读(236) 评论(0)

机器学习之感知器

感知器在讲神经网络前先说说感知器,感知器是一种二分类的线性分类模型,输出值取-1或1。感知器是最基础的神经网络,理解好感知器对后面的各种神经网络模型是很有帮助的。如下图, 它可以有多个输入$(x_1,x_2,...x_n)$,每个输入对应有一个权重$(w_1,w_2...w_n)$,除此之外还有一个偏置项$w_0$。则输出为o(x) = \left\{\begin{matrix} 1, & if...
阅读(330) 评论(0)

机器学习之k近邻

核心思想KNN算法假设给定的训练集中的实例都已经分好类了,对于新的实例,根据离它最近的k个训练实例的类别来预测它的类别。即这k个实例大多数属于某个类别则该实例就属于某个类别。比如k为5,离新实例a最近的5个样本的情况为,3个样本属于A类,1个样本属于B类,一个样本属于C类,那么新实例a属于A类。常用距离 欧氏距离 d(x,y)=∑ni=1(xi−yi)2−−−−−−−−−−−−√d(x,y) =...
阅读(484) 评论(0)

TensorFlow训练Logistic回归

Logistic回归在用线性模型进行回归训练时,有时需要根据这个线性模型进行分类,则要找到一个单调可微的用于分类的函数将线性回归模型的预测值关联起来。这时就要用到逻辑回归,之前看吴军博士的《数学之美》中说腾讯和谷歌广告都有使用logistics回归算法。如下图,可以清晰看到线性回归和逻辑回归的关系,一个线性方程被逻辑方程归一化后就成了逻辑回归。.Logistic模型对于二分类,输出y∈{0,1}y...
阅读(2101) 评论(0)

TensorFlow训练单特征和多特征的线性回归

线性回归线性回归是很常见的一种回归,线性回归可以用来预测或者分类,主要解决线性问题。相关知识可看“相关阅读”。主要思想在TensorFlow中进行线性回归处理重点是将样本和样本特征矩阵化。单特征线性回归单特征回归模型为:y=wx+by = wx + b构建模型X = tf.placeholder(tf.float32, [None, 1]) w = tf.Variable(tf.zeros([1,...
阅读(629) 评论(0)

机器学习之朴素贝叶斯分类

朴素贝叶斯分类所有贝叶斯分类都是基于贝叶斯定理,朴素贝叶斯分类是贝叶斯分类中运用广泛简单的一种,另外,它还基于特征条件独立假设。贝叶斯定理贝叶斯定理是计算条件概率的公式,条件概率即是事件B发生的前提下事件A发生的概率,记作$P(A|B)$,叫做事件B发生的情况下A的条件概率。公式为:$P(B|A) = \frac{P(A|B)P(B)}{P(A)}$公式大致推导: 如图,有$P(A|B) = \f...
阅读(1212) 评论(0)

全文搜索怎么给查询语句与文档相关性打分

朴素想法用户输入一个查询query,query由若干词(term)组成,文档也由若干词(term)组成。那么怎么评判查询和文档的相关性的高低。很朴素简单的想法就是文档中包含的term与查询query中包含的term,两者越多相同的则说明越相关。比如query为”animal cat”,文档一内容为”cat dog bird animal”,文档二内容为”cat dog bird tiger”,则认为...
阅读(1730) 评论(0)

开源一个简易轻量的reactor网络框架

githubhttps://github.com/sea-boat/net-reactornet-reactorit’s a simple and easy net framework with nio mode written by javareactor modelhow-tojust simply like:public class MyHandler implements Handler {...
阅读(1639) 评论(1)
258条 共13页1 2 3 4 5 ... 下一页 尾页
    博主的书

    支持作者,欢迎购买博主的书

    打赏作者

    如果您觉得作者写的文章有帮助到您,您可以打赏作者一瓶汽水(*^__^*)

    作者

    笔名:seaboat 汪洋之舟

    github:https://github.com/sea-boat

    微信:



    公众号:

    个人资料
    • 访问:669122次
    • 积分:9623
    • 等级:
    • 排名:第1712名
    • 原创:251篇
    • 转载:5篇
    • 译文:1篇
    • 评论:237条
    博客专栏
    最新评论