• KMP算法

    今天新开一个 tag,专门用来聊一些算法,我们第一篇讲一讲相当注明的字符串匹配算法,这个算饭解决的是如下的问题: 对于任意一个字符串 s,给定另一个字符串 m,请判断 m 是否为 s 的子串,即 s 中是否包含 m,并指出 s 中出现 m 的具体位置例如对于 abc,我们称 ab,a 等字符串为其子串 我们能想到的最简单的算法就是通过两个循环嵌套来解决问题了,我们认为这种算法的复杂度为 ...
  • 互联网结构与网络通信协议

    这一篇我们从互联网的结构开始梳理一下网络世界的通信到底是怎样实现的。 网络模型我们首先从 OSI 模型讲起,在这个模型中互联网的结构被分成了七层: 应用层(Application Layer) 功能:直接与最终用户交互,为应用程序提供网络服务。 常见协议:HTTP, FTP, SMTP, SNMP, DNS, Telnet。 我们常见的各种应用程序,都是工作在应用层 表示层...
  • 网络通信

    今天我们来聊聊网络通信的部分,我们知道的是Spring框架使用的是一个名为DispatchServlet的类作为网络通信的处理器,而这个类实际上来自于TomCat中的Servlet,我们先一层层推进看看这些东西到底是怎么实现的 DispatchServlet分析从流程上看,首先存在一个简单的服务器用于监听端口,一般是TomCat,在TomCat发现请求后会转发给DisPatchServlet...
  • NIO体系

    理论上来说下一步应该是实现一些SpringWeb中的相关功能了,比如基本的HTTP通信实现,但是要实现Spring中的效果需要用Java的异步IO体系,这一部分比较复杂,且网上我也没找到太多比较好的资料,所以就有了这一篇,我们专门来讨论一下NIO体系的相关知识 缓冲区相信大家都使用过BufferedReader等带缓冲的输入输出流,这些自带缓冲区的输入输出流主要被用于在数据量比较大的时候的数...
  • 多线程与线程池

    今天我们来稍微了解一下线程与线程池的相关知识 多线程的基本操作我们首先从最基本的Thread类讲起。我们知道多线程的基本使用方法大概如下 12345678public class Main { public static void main(String[] args) { Thread thread = new Thread(() -> ...
  • IDEA中VIM插件的使用

    今天我们讲一讲关于idea中vim插件的使用。其实网上一直有这样两波人,一批人在疯狂的吹嘘vim到底有多好用,甚至看不起平时使用IDE的人;另一批人却将vim的使用者称之为装。 从我个人的使用感受上来说,vim确实是个好东西,唯一的问题就是不怎么好上手,在习惯以后确实能够大大提高编码效率。但是真的完全用vim写代码,需要做各种繁琐的配置,给vim安装各种各样的插件,还不一定能百分百达到完...
  • JSON解析

    既然要手写一个可用的spring框架,那么网络通信部分是必不可少的,既然涉及到了网络通信,那么显然json解析能力是必须具备的,所以我们今天来试着手写一个json解析器吧 JSON的规则首先我们研究以下JSON解析的问题,开始之前我们可以先看看JSON的标准 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成...
  • Java的反射与代理

    最近比较闲,所以来整点活,让我们从0到1手写一个Spring框架吧(只使用Java SE部分的相关内容,不使用任何依赖),不过在正式开始之前,我们要去了解一些基础知识(如果你确信了解了这些知识,可以直接跳过)。 我们今天来讲一讲反射与代理相关的知识。 首先我们从Java的类加载机制讲起 Java的类加载机制我们都知道对于Java来说万物皆对象,所以你猜猜类是什么?类当然是对象了,所有的类在J...
  • Docker入门

    最近忙着写项目,好久没更新内容了。而且就在昨天,重装系统的时候我居然忘了把博客的本地文件保存一份!!!现在我已经失去了前面博客的所有内容,不得不花费大量时间重新把前面的内容整理一次,孩子心里苦啊。 闲话就聊到这里,今天我们来了解一下Docker技术.Docker可以帮助我们快速的实现项目依赖环境的完整打包.方便我们将项目快速的部署到不同的设备上去. 由于Windows上没有原生的Docker...
1