如何实现一个Web Server

2017-12-08
阅读 4 分钟
3.6k
最近重构了去年造的一个轮子 Vino。Vino 旨在实现一个轻量并且能够保证性能的 Web Server,仅关注 Web Server 的本质部分。在重构过程中,Vino 借鉴了许多优秀开源项目的思想,如 Nginx、Mongoose 和 Webbench。因此,对比上一个版本的 Vino,现在的 Vino 不仅性能得到提升,而且设计也更为优雅、健壮 :D。

如何实现一个分布式RPC框架

2017-07-04
阅读 2 分钟
8.9k
远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。RPC的主要目标是让构建分布式应用更加容易,在提供强大的远程调用能力的同时不损失本地调用的语义的简洁性。

如何实现一个Java Class字节解析器(Golang版)

2017-03-28
阅读 4 分钟
5.5k
最近在写一个私人项目,名字叫做SmallVM,SmallVM的目的在于通过实现一个轻量级的Java虚拟机,加深对Java虚拟机的认知和理解。在Java虚拟机加载类的过程中,需要对Class文件进行解析,我曾经单独实现过一个Java版的Class字节解析器ClassAnalyzer,相比于Java版,新版(Golang版)更加健壮,思路也更加清晰。本文即阐述我...

自己动手实现一个Java Class解析器

2017-02-12
阅读 4 分钟
6.4k
最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解。主体框架与基本功能已经完成,还有一些细节功能日后再增加。实际上JDK已经提供了命令行工具javap来反编译Class文件,但本篇文章将阐明我实现解析器的思路。

自己动手实现一个 Unix Shell

2017-01-10
阅读 2 分钟
4.5k
这个实验通过实现一个支持作业控制的Unix Shell,让我们对进程控制和信号控制更加熟悉。课程Lab已经帮助我们搭建起了Shell的整体框架,并实现了与本次实验不太相关的代码,核心部分需要我们自己完成。

HashMap源码分析

2016-12-05
阅读 9 分钟
4k
本文针对HashMap的源码分析基于JDK 7,JDK 8在HashMap的实现上有着较大幅度的改进和优化,这部分优化我将另起一篇来阐述。另外,本文仅分析HashMap众多方法中最常用的方法,其余方法有需要时再研究 。

Java对象内存布局解析

2016-11-30
阅读 2 分钟
5.4k
JVM将内存划分为程序计数器(Program Counter Register)、虚拟机栈(VM Stack)、本地方法栈(Native Method Stack)、堆(Heap)以及方法区(Method Area)。作为开发者,我们最关注的是虚拟机栈以及堆这两块区域。虚拟机栈所需要的内存空间在编译期间即可明确,而堆内存所需要的空间需要在运行时才可确定。堆内存用于...

Linux C 线程池实现

2016-11-17
阅读 2 分钟
6.9k
学习网络编程时,自己动手实现一个Web Server是一个很有意思的经历。大多数Web Server都有一个特点:在单位时间内需要处理大量的请求,并且处理这些请求的时间往往还很短。《深入理解计算机系统》 (CSAPP) 在讲解网络编程时实现了一个经典的Web Server,这个Web Server不仅满足了静态请求,同时还满足了动态请求 (CGI)。...

Java泛型总结

2016-10-03
阅读 6 分钟
3.5k
Java泛型是JDK5引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用的时候使用具体的类型来替换。泛型最主要的应用是在JDK5中的新集合类框架中。对于泛型概念的引入,开发社区的观点是褒贬不一。从好的方面上说,泛型的引入可以解决之前的集合类框架在使用过程中通常会出...

I/O重定向和管道

2016-08-19
阅读 5 分钟
5.6k
所有的Unix工具都使用文件描述符0、1和2。如下图所示,标准输入文件的描述符是0,标准输出的文件描述符是1,标准错误输出的文件描述符则是2。Unix假设文件描述符0、1和2都已经被打开,可以分别进行读、写和写的操作。

TCP拥塞控制

2016-08-14
阅读 1 分钟
2k
文章地址 ☞ TCP拥塞控制

目录与文件属性:编写ls

2016-07-30
阅读 1 分钟
1.8k
文章地址:目录与文件属性:编写ls

用机器指令和汇编指令编程(三)

2016-06-26
阅读 1 分钟
1.8k
阅读请移步 ☞ 用机器指令和汇编指令编程(三)

用机器指令和汇编指令编程(二)

2016-06-26
阅读 1 分钟
2k
阅读请移步 ☞ 用机器指令和汇编指令编程(二)

用机器指令和汇编指令编程(一)

2016-06-26
阅读 1 分钟
3.1k
阅读请移步 ☞ 用机器指令和汇编指令编程(一)

Spring IoC Context启动过程解析

2016-06-21
阅读 1 分钟
2.7k
阅读请移步→ Spring IoC Context启动过程解析

LinkedList源码分析

2016-06-11
阅读 1 分钟
1.9k
文章地址:[链接]

ArrayList源码分析

2016-05-28
阅读 1 分钟
2.3k
ArrayList源码分析

Why String is Immutable or Final in Java

2016-05-15
阅读 1 分钟
1.9k
博客已经迁移到: Why String is Immutable or Final in Java

Spring MVC + Hibernate + MySQL + Maven集成

2016-04-23
阅读 1 分钟
4k
Spring MVC + Hibernate + MySQL + Maven集成

前端入门小结

2015-09-14
阅读 8 分钟
1.7k
今年暑假大部分时间是在要学校,前一阶段一直在学习Scala和理解Spark,但是苦于没有实际上手的项目,尽管看了不少论文和书,但不敢说自己理解的有多深刻,所以我打算暂时搁置这一部分的内容。后一阶段是出于导师的需要要解决针对海量数据进行频繁的模糊搜索带来的性能问题,其实一些关系型数据库比如MySQL有自带的Full I...

Scala:协变点和逆变点

2015-08-29
阅读 2 分钟
5.8k
要解释这个问题,需要理解协变点和逆变点的概念。我们可以考虑这样一种情况来解释程序为什么报错,既然A的类型参数T是协变的,那么A[AnyRef]是A[String]的父类,A[AnyRef]对应的func为func(AnyRef),A[String]对应的func为func(String),我们定义father是一个A[AnyRef]实例,child是A[String]实例。当我定义了另一个函数g...

Scala:统一的对象模型

2015-08-28
阅读 1 分钟
2.9k
图片展示了Scala的类层次结构。每一个类都继承自scala.Any,Any的子类可以划分为两个主要的范畴:值类型,继承自scala.AnyVal;引用类型,继承自scala.AnyRef。每一种Java的基本数据类型对应于值类型,通过预定义的类型别名进行映射,而AnyRef则对应于Java环境中的根类:java.lang.Object。

Scala类型参数

2015-08-27
阅读 4 分钟
13.2k
类型界定的语法为T<: UpperBound,T>: LowerBound,T<% ViewBound,T: ContextBound 。

Elasticsearch数据

2015-08-27
阅读 1 分钟
2.5k
对象(Object)是一种语言相关,为了记录在内存中的数据结构。为了在网络间发送,或者存储它,我们需要一种标准的格式来表示它。JSON是一种可读的以文本来表示对象的方式。它已经成为NoSQL世界中数据交换的一种事实标准。当对象被序列化为JSON,它就成为JSON文档(JSON document)了。

Elasticsearch总体介绍

2015-08-27
阅读 2 分钟
6.3k
主节点(Master Node):集群中的一个结点会被选为主节点,它负责整个集群的变化,比如创建索引或者删除索引,以及对集群中结点的增加和删除。主节点不需要参与到文档级别的变化或者搜索中,这就意味着主节点不会因为流量的增大而成为瓶颈。任何结点都可以成为主节点。

Elasticsearch添加中文分词

2015-08-16
阅读 2 分钟
11.9k
然后使用mvn命令,编译出jar包,elasticsearch-analysis-ik-1.4.0.jar,这个过程可能需要多尝试几次才能成功

Elasticsearch同步MySQL

2015-08-16
阅读 1 分钟
12.2k
花了一个晚上+一个上午,终于将MySQL中的数据同步到Elasticsearch,做个简单的记录。 整个过程需要用到MySQL的river插件,GitHub上有installation可以参考。 虽然最后的配置过程很简单,但我在配置的过程中遇到了不少的问题,可能是因为ES版本的原因吧。可以参考... 环境:Ubuntu + JDK7 配置过程如下: step 1. 下载ES...