[置顶] 谈谈Tomcat内核

========广告时间========鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。为什么写《Tomcat内核设计剖析》=========================欢迎关注:...
阅读(408) 评论(0)

[置顶] JVM层对jar包字节码加密

githubhttps://github.com/sea-boat/ByteCodeEncrypt需求拿到的需求是要对某特定的jar包实现加密保护,jar包需要提供给外部使用,但核心逻辑部分需要保护以免被简单反编译即能看到。几个思路大致想到以下几种方式: 1. 混淆器,将jar包混淆后反编译出来的东西看起来就很眼花,但如果耐心一点也是可以看出来的。 2. 对jar包进行加密,然后在Java层重写...
阅读(1186) 评论(3)

[置顶] 开源一个文本分析项目

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...
阅读(765) 评论(0)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[置顶] 集群RPC通信

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

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

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

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

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

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

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

GRU神经网络

前面已经详细讲了LSTM神经网络(文末有链接回去),接着往下讲讲LSTM的一个很流行的变体。GRU是什么GRU即Gated Recurrent Unit。前面说到为了克服RNN无法很好处理远距离依赖而提出了LSTM,而GRU则是LSTM的一个变体,当然LSTM还有有很多其他的变体。GRU保持了LSTM的效果同时又使结构更加简单,所以它也非常流行。GRU模型回顾一下LSTM的模型,LSTM的重复网络模...
阅读(451) 评论(0)

从JDK源码角度看Integer

概况Java的Integer类主要的作用就是对基本类型int进行封装,提供了一些处理int类型的方法,比如int到String类型的转换方法或String类型到int类型的转换方法,当然也包含与其他类型之间的转换方法。除此之外还有一些位相关的操作。继承结构--java.lang.Object --java.lang.Number --java.lang.Integer主要属性第一部分pu...
阅读(4170) 评论(3)

谈谈谷歌word2vec的原理

word2vec在NLP领域中,为了能表示人类的语言符号,一般会把这些符号转成一种数学向量形式以方便处理,我们把语言单词嵌入到向量空间中就叫词嵌入(word embedding)。谷歌开源的word2vec则是这么一种词嵌入工具,它能生成词向量,通过词向量可以很好地度量词与词之间的相似性。word2vec采用的模型包含了连续词袋模型(CBOW)和Skip-Gram模型。通过它可以在大数据量上进行高效...
阅读(1327) 评论(0)

LSTM神经网络

LSTM是什么LSTM即Long Short Memory Network,长短时记忆网络。它其实是属于RNN的一种变种,可以说它是为了克服RNN无法很好处理远距离依赖而提出的。我们说RNN不能处理距离较远的序列是因为训练时很有可能会出现梯度消失,即通过下面的公式训练时很可能会发生指数缩小,让RNN失去了对较远时刻的感知能力。∂E∂W=∑t∂Et∂W=∑tk=0∂Et∂nett∂nett∂st(∏t...
阅读(520) 评论(0)

从JDK源码角度看Short

概况Java的Short类主要的作用就是对基本类型short进行封装,提供了一些处理short类型的方法,比如short到String类型的转换方法或String类型到short类型的转换方法,当然也包含与其他类型之间的转换方法。继承结构--java.lang.Object --java.lang.Number --java.lang.Short主要属性public static fin...
阅读(706) 评论(0)

循环神经网络

RNN是什么循环神经网络即recurrent neural network,它的提出主要是为了处理序列数据,序列数据是什么?就是前面的输入和后面的输入是有关联的,比如一句话,前后的词都是有关系的,“我肚子饿了,准备去xx”,根据前面的输入判断“xx”很大可能就是“吃饭”。这个就是序列数据。循环神经网络有很多变种,比如LSTM、GRU等,这里搞清楚基础的循环神经网络的思想,对于理解其他变种就比较容易了...
阅读(403) 评论(0)

卷积神经网络

什么是卷积首先看卷积公式y(t)=f(t)∗g(t)=∫∞−∞f(u)g(t−u)duy(t)=f(t)*g(t)=\int_{-\infty} ^{\infty} f(u)g(t-u)du它是通过两个函数 f(t) 和 g(t) 来生成第三个函数的一种数学算子。从负无穷到正无穷遍历全部 u 值,把 g(t-u) 的值乘以 f(u) 的值之后再进行累加,得到关于该累加操作的关于 t 的函数。从另一...
阅读(412) 评论(0)

《Tomcat内核设计剖析》京东评论过百

到京东看了下《Tomcat内核设计剖析》评论都一百多了,上个月也第二次印刷了,这里看下好评、中评和差评。好评:中评对于中评,请看 为什么《写Tomcat内核设计剖析》,就当是回复吧。差评这个物流慢应该打给东哥。...
阅读(911) 评论(0)

softmax的多分类

关于多分类我们常见的逻辑回归、SVM等常用于解决二分类问题,对于多分类问题,比如识别手写数字,它就需要10个分类,同样也可以用逻辑回归或SVM,只是需要多个二分类来组成多分类,但这里讨论另外一种方式来解决多分类——softmax。关于softmaxsoftmax的函数为P(i)=exp(θTix)∑Kk=1exp(θTkx)P(i)=\dfrac{exp(\theta_i^Tx)}{\sum_{k=...
阅读(567) 评论(0)

Java调用本地方法又是怎么一回事

JNIJNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少量汇编编写,在执行Java字节码时如果遇到有某个方法标明为Native的则从JVM中找到对应的C/C++函数,一般本地方法对应的函数会被注册到JVM中。使用JNI能让Java与本地语言交互,但一般也意味着...
阅读(1041) 评论(2)

从JDK源码角度看Byte

Java的Byte类主要的作用就是对基本类型byte进行封装,提供了一些处理byte类型的方法,比如byte到String类型的转换方法或String类型到byte类型的转换方法,当然也包含与其他类型之间的转换方法。主要实现代码如下:public final class Byte extends Number implements Comparable { public stati...
阅读(978) 评论(0)

神经网络的交叉熵损失函数

常见损失函数 0-1损失函数 L(Y,f(X))={1,0Y != f(X)Y = f(X)L(Y,f(X))=\begin{cases}1,& \text{Y != f(X)}\\0& \text{Y = f(X)}\end{cases} 平方损失函数 L(Y,f(X))=(Y−f(X))2L(Y,f(X))=(Y-f(X))^{2} 绝对损失函数L(Y,f(X))=|(Y−f(X))|L(Y...
阅读(719) 评论(0)

为什么写《Tomcat内核设计剖析》

三四年前更多地还是做web业务开发,基本不关心web层以下的东西,但是每次出故障时面对现象都不能从脑子里形成由底层到应用层的完整的逻辑,往往只能分析到Web应用就无法继续往下,Web容器完全就是一个黑盒,对于问题更多的是靠猜。举个简单的例子,应用突然就不服务了,此时如果对Web容器模型熟悉就可以直接jstack打印虚拟机的栈进行分析。我个人接受不了这种用非完整性逻辑去分析事物的感觉,于是想着还是把T...
阅读(1734) 评论(2)

《Tomcat内核设计剖析》勘误表

《Tomcat内核设计剖析》勘误表 书中第95页图request部分印成了reqiest。 书中第311页两个tomcat3,其中一个应为tomcat4。 书中第5页URL应为URI。 书中前言第13行,借签应为借鉴。...
阅读(702) 评论(2)

从JDK源码角度看Object

Java的Object是所有其他类的父类,从继承的层次来看它就是最顶层根,所以它也是唯一一个没有父类的类。它包含了对象常用的一些方法,比如getClass、hashCode、equals、clone、toString、notify、wait等常用方法。所以其他类继承了Object后就可以不用重复实现这些方法。这些方法大多数是native方法,下面具体分析。主要的代码如下:public class O...
阅读(1592) 评论(2)

kmeans实现文本聚类

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

从JDK源码角度看Boolean

Java的Boolean类主要作用就是对基本类型boolean进行封装,提供了一些处理boolean类型的方法,比如String类型和boolean类型的转换。主要实现源码如下:public final class Boolean implements java.io.Serializable, Comparable { private final boolean value;...
阅读(690) 评论(0)
275条 共14页1 2 3 4 5 ... 下一页 尾页
    打赏作者

    赞作者(*^__^*)



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

    作者

    笔名:seaboat 汪洋之舟

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

    微信:



    公众号:

    个人资料
    • 访问:759372次
    • 积分:10714
    • 等级:
    • 排名:第1514名
    • 原创:269篇
    • 转载:5篇
    • 译文:1篇
    • 评论:272条
    博客专栏
    最新评论