自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SixPence

code long and prosper.

  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 JAVA基础面试——初始化与清理

什么是方法重载?在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载。方法重载什么是重写?重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。方法重写static关键字?简单来说,static修饰方法时,该方法为静态方法,无需创建对象也能调用(这也是main方法是static的原因),并且不能在静态方法中调用非静...

2019-05-04 17:33:35 155

原创 JAVA语法糖引发的血案

奇怪的空指针异常今天在调试的时候,遇到一个很奇怪的bug,表现上呢就是报空指针异常,但是我实在发现不了是哪里为空(我能确定那个引用不指向空),于是我继续仔细检查日志,发现是Long.valueOf()里面报的错,为什么会报这个错呢?java语法糖几乎各种语言或多或少都提供过一些语法糖来方便程序员的代码开发,这些语法糖虽然不会提供实质性地功能改进,但是它们或能提高效率,或能提升语法的严谨性,...

2019-03-21 15:38:23 350

原创 tomcat源码解读之初始化过程

之前我拜读了《How Tomcat Works》这本书,对tomcat的架构与里面的实现有了一定的了解,现在借着tomcat的源码来深入了解这个精巧的艺术品。首先从初始化开始, getServer().init();前面类加载的过程与digester读取xml文件的过程我先跳过,直接来看tomcat是怎么初始化的。在Catalina的load函数中,调用了上述的语句,获取server并...

2018-11-15 22:40:12 420

原创 设计模式之单例模式

单例模式很好理解,就是对象只有一个唯一的实例,实际工程中,有很多例子,比如:线程池、缓存、日志对象等。那么如何实现单例模式呢?我们先来看一下经典的实现方法:public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Sin...

2018-08-01 21:25:38 128

原创 工厂方法模式详解

这一章我们来总结一下工厂方法模式与抽象工厂方法模式,接下来的内容分为这三个部分:工厂方法模式是什么?抽象工厂方法模式是什么?上述两种模式的区别是什么?首先来一个工厂方法模式的定义: 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到了子类。那么工厂方法是具体怎么推迟实例化的呢?下面来看实际的代码 根据上图我们可以看...

2018-07-28 23:59:47 180

原创 装饰者模式详解

让我们首先来看一下装饰者模式的定义: 装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。看到这个定义我们很容易就能想到两个问题:责任是怎么动态地附加在对象上的呢?装饰者模式哪里比继承好?为了得到这两个问题的答案,下面我们就来看看UML图和具体的代码。 从上面的UML图可以看到,concreteComponent和Decorat...

2018-07-27 23:40:34 445

原创 设计模式之观察者模式

这篇文章来总结一下观察者模式,首先,观察者模式的定义: 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 如上图所示,Observer作为观察者,subject主题做为被观察者,打个比方,主题是一家报社,它有注册用户,移除用户,通知用户的功能,而用户作为观察者只需要等待报社定期发报纸就行了(通知)。下面我们结合代码来近...

2018-07-25 20:47:37 136

原创 设计模式之策略模式

看那本《head first desgin pattern》也有一段时间了,是时候整理一下对刚学习到的设计模式了,这里具体的例子就不举了,就是记录一下自己的理解。 书本开篇第一个模式就是“策略模式”,刚开始对继承提出了问题,继承虽然能够复用代码,但是继承了超类的子类的行为就被定死了,出现了书中“橡皮鸭子”也会飞的笑话,然后自然就想到,我们能不能把超类的行为提取出来呢?然后让子类去继承不就得了?没...

2018-07-22 22:31:48 102

原创 《How Tomcat Works》第八章:类加载器

这一章的主要内容分为三大部分,第一个部分讲了jvm的“委派模型”,第二部分与第三部分分别是WebappLoader类与WebappClassLoader类。jvm委派模型 在讲这个类加载器的委派模型之前,我们来思考一个问题?到底什么是类加载器呢?我们可以在书中找到这个答案: 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外...

2018-07-16 16:01:35 168

原创 《How Tomcat Works》第七章:日志记录器

这一章介绍的是一个小组件,日志记录器。首先这个组件是由Logger接口定义的,我们来看一下接口定义的日志级别: /** * Verbosity level constants for log messages that may be filtered * by the underlying logger. */ public static final...

2018-07-10 22:35:22 118

原创 《How Tomcat Works》第六章:生命周期

一个完整的Web容器是由许多组件组成的,在容器启动时,这些组件必须全部要启动,并且初始化,当容器停止时,它们也要清除。(例如servlet要调用destory方法)保持组件启动和停止一致的机制就是通过LifeCycle接口来实现的。 public static final String START_EVENT = "start"; public static final St...

2018-07-09 19:52:23 145

原创 《How Tomcat Works》第五章:容器

上一章讲完了复杂的默认连接器,这一章介绍的是容器。容器呢,是用来处理servlet请求并填充返回对象给web客户端的模块。接口Container定义了容器的形式,容器分为这四种:Engine:表示整个Catalina的serlvet引擎Host:表示一个拥有数个上下文(Context)的虚拟主机Context:表示一个Web应用,包含多个包装器(Wrapper)Wrapper:表示一个...

2018-07-09 11:31:58 151

原创 《How TomCat Works》第四章:默认连接器

上篇文章实现的连接器是十分简陋的,这一章就比较复杂了。首先默认连接器这个名字,现在tomcat用的连接器是Coyote,默认连接器由于性能的问题已经弃用了,但是这个连接器仍然是个很好的学习工具。这一章和前一章最大的区别就是加入了多线程,我会用自己的理解试着阐述清楚这个场景。 首先来看一下UML图: connector.initialize();connector.start();...

2018-07-04 21:03:34 296 1

原创 《How Tomcat Works》第三章:连接器

前面第二章讲的是简单的servlet容器,其中HttpServer类负责等待Http请求,然后构建解析request,response,之后再通过ClassLoader调用servlet的service方法或者说直接调用静态资源。到了第三章,就将上一章中的HttpServer类中的等待接受Http请求与解析request,response两大职责拆分了开来,前者成为了HttpConnector...

2018-07-04 16:16:54 210

原创 Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/ServletContext

一些摸不着头脑的问题就记录下来吧,以后看能不能解决。 //一运行这里就出错 HttpProcessor processor = new HttpProcessor(this); processor.process(socket);出错之后我开始Debug,发现连HttpProcessor的构造器都进不去,还是报标题上那个错,后来百度之后看到,有人说是却包的问题,就加了包进去:...

2018-07-03 10:47:09 653

原创 《How Tomcat Works》第二章:简单的servlet容器

本章呢是讲解如何开发一个简单的servlet容器,首先所有的servlet必须要实现javax.servlet.Servlet接口,如下:public interface Servlet { void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); ...

2018-07-02 23:20:38 290

原创 《How Tomcat Works》第一章:简单的Web容器

TomCat是常用的Web容器,我也使用了快一年了,但是平时出错的时候总是摸不着头脑,错误日志看不懂就抓瞎,所以这次看借着这本经典的书来看一看Tomcat的源码,希望能有所进步。 第一章是搭建一个简单的Web Serverpublic class HttpServer { ... public static void main(String[] args) { ...

2018-07-02 22:15:52 222

原创 谈谈多态

上篇文章我们谈到“向上转型”—-一种把对某个对象的引用视为对其基类型的引用的做法,这篇文章我们就来探究一下站在“向上转型”背后的多态。class Instrument{ void play(){System.out.println("playing instrument~");} static void tune(Instrument i){ i.play(...

2018-06-27 22:25:49 110

原创 JUnit源码解读

JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个开源的单元测试框架。它属于白盒测试,只要将待测类继承 TestCase 类,就可以利用 JUnit 的一系列机制进行便捷的自动测试了。JUnit 的设计精简,易学易用,但是功能却非常强大,这归因于它内部完善的代码结构。 Erich Gamma 是著名的 GOF 之一,因此 JUnit 中深深渗透了扩展性优良的设计模式思...

2018-06-27 21:58:07 1671

原创 继承or组合

在java中,组合和继承都允许在新的类中放置对象,组合是显式地这么做,而继承呢是隐式地做。那么问题来了,如何在这两种技术中选择一种呢?下面我就来介绍一下这两种技术各自的优势。 继承的威力 继承是JAVA的三大特性之一。使用extends关键字,导出类就能获得基类中所有的域和方法,从而达到复用代码的目的。但这并不是继承技术中最重要的方面,其最重要的方面是用来表现新类和基类的关系。这种...

2018-06-27 21:09:41 126

原创 this关键字浅谈

this表面意思是“这个”,在JAVA中表示对“调用方法的那个对象”的引用,只能在方法内部使用,主要的用法有以下几点:返回对当前对象的引用,使得可以在一条语句对同一个对象执行多次。public class Leaf{ int i = 0; Leaf increment(){ i++; 返回对当前对象的引用 return this;

2017-11-29 09:02:38 224 1

原创 Java定制工具库

在think in java里面看到定制工具库的内容,自己也想搞个类库,但是真正上手的时候麻烦重重,最终终于找到了解决方法,这里分享一下步骤。先为你的类库创建一个独一无二的全局名称(一般是域名倒过来) 然后将这个路径添加到CLASSPATH中去,这样你的IDE才能寻找到你的class文件:我这里放到jdk里面去了,其实随便放哪里然后再IDE里编写自己的类库:这里是容易搞错的一步,这里错误的意

2017-11-27 15:30:10 663

原创 位图排序法

问题描述对磁盘内的文件进行排序:输入:一个文件包括n个整数,每个整数都小于n,n = 10^7.文件内没有重复的数字输出:以升序排列的数字序列约束:内存最多使用1M,有充足的磁盘空间,运行时间最多为几分钟,最好控制在10秒钟对于这个问题,书上给了3种方法:使用MergeSort来排序输入文件,但是由于文件中整数过多,还是要花费几天的时间。

2017-03-21 22:14:04 233

原创 Bootstrap内容提要

响应式框架Bootstrap将会根据你的屏幕的大小来调整HTML元素的大小 —— 强调 响应式设计的概念。通过响应式设计,你无需再为你的网站设计一个手机版的。它在任何尺寸的屏幕上看起来都会不错。接下来我来大致总结一下刚刚学到的关于Bootstrap的内容。前提:1.在HTML文件开头添加<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap

2017-02-09 10:27:52 571

原创 javascript最佳实践

在读过《javascript DOM编程艺术》的第五章之后,总结一下影响脚本健壮性的因素,如下: 1.要能够平稳退化 2.把网页的结构和内容与javascript脚本的动作行为分离开来 3.向后兼容性,确保老版本的浏览器也能运行脚本 4.确保脚本的性能最优下面就分开来探究每一点。一,如何做到平稳退化呢? 平稳退化指的是在访问者的浏览器不支持javaScr

2017-02-02 15:59:14 230

原创 c语言实现HACK汇编编译器(一)

汇编编译器: 汇编程序在被计算机执行之前,必须被翻译成计算机的二进制语言。翻译任务是由汇编编译器来完成的。汇编编译器的输入是一串汇编命令,然后产生一串等价的二进制指令作为输出。生成的代码被加载到计算机的内存中然后被硬件执行。

2015-12-02 08:59:22 2037

原创 链表

链表是由一系列不必在内存中相连的结构组成。每个结构均含有表元素和指向包含该元素后继元的结构的指针。

2015-11-29 22:28:59 369

原创 c的指针

关于指针的一些总结。

2015-11-28 20:38:13 183

Head First JavaScript Programming

head first系列图书,很适合入门!

2018-10-09

空空如也

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

TA关注的人

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