1. JVM的内存结构 JVM的内存结构主要是指Java程序在运行时的数据区的划分. 它主要由虚拟机栈, 本地方法栈, Java堆, 方法区, 程序计数器这五部分组成. 这五部分, 虚拟机栈/本地方法栈/程序计数器是线程私有的, Java堆和方法区是线程共享的. 下面我们就来逐一介绍一下这五部分. (1) 虚拟机栈 虚拟机栈是线程私有的, 所以它的生命周期与线程相同. 在Java程序的执行过程中, 每调用一个方法, 就会创建一个栈帧. 栈帧是描述Java方法执行的内存模型, 它用于存储局部变量表, 操作数栈, 动态链接, 方法出口等信息. 而每一个方法的调用到结束, 都对应着一个在虚拟机栈中从入栈到出栈的过程. 在虚拟机栈中, 最重要的就是局部变量表. 局部变量表 局部变量表存放了编译器可知的八种基本数据类型, 对象引用(引用类型), returnAddress类型(指向了一条字节码指令的地址). double和long类型的数据会占用两个局部变量空间, 其余的数据类型只占1个. 局 继续阅读 >>


祝一迪 18/02/07 00:04:03
观察者模式是JDK中使用最多的设计模式之一. 在学习观察者模式之前, 我在网上也找了很多博客, 这些博客都是的讲解都是基于 head first 设计模式 这本书的. 如果看书的话, 很简单就能学会这个设计模式, 但是将书上的内容些成博客, 其实是不太容易理解的. 所以在这篇博客中, 我将用我自己的方式以示例的方式来讲解这个设计模式. 1. 观察者模式是什么? 它解决了什么问题? (1) 观察者模式是什么? 观察者模式由两个端组成, 分别是通知者(speaker)和观察者(listener). 观察者也可以称为监听者. speaker和Listener是一对多的关系. 当speaker的状态发生改变时, 可以将这种改变通知给它所有的Listener. (2) 解决了什么问题? 假如现在speaker里面做了某些操作后, 它需要将这些操作的结果(或者某些数据)告诉它所有的listener, 最容易想到的办法就是通过方法调用来实现, 但是这样就使得这多个listener和spea 继续阅读 >>


祝一迪 18/02/05 00:30:20
本文主要是从我写Java网络编程时使用BufferedInputStream和BufferedOutputStream的时候遇到的bug, 来分析BufferedInputStream和BufferedOutputStream的工作机制和简单的源码分析. 1. bug描述 最近在写一个Java网络编程的程序, 其中涉及文件的传输问题, 选择使用BufferedInputStream和BufferedOutputStream来作为网络通信读取数据的方式. 在进行测试的时候, 大文件(几百兆甚至上G)是没有问题的, 但是偶然间测试小文件(十几B)总是失败. 大文件传输成功, 小文件传输不成功, 这说明并不是代码逻辑上的问题, 而应该是某个细节的问题. 经过一番仔细考虑, 去看了看BufferedOutputStream和BufferedInputStream的源码, 终于发现是缓冲区的问题. 小伙伴在看了这博客之后说, 只描述bug对一个陌生人来说不具有太大的参考意义. 所以在这里 继续阅读 >>


祝一迪 18/02/01 12:30:34
1. bug描述 今天写代码的时候出现了一个问题, 前端页面的一些小图标不见了, F12之后, 发现报错信息如下: Failed to decode downloaded font: http://localhost:8080/font-awesome-4.7.0/fonts/fontawesome-webfont 当然这只是其中的一条, 因为由好几个图标都不能显示, 所以有好几条这样的报错信息. 2. bug解决 我先google了一下这个错误信息, 并没有找到正确的解决方案, 但是有一个博主说是因为工程中使用了Maven, 没有在pom.xml设置过滤信息, 从而导致了bug, 具体解释点击这里. 然而这并没有解决我的问题, 因为我的pom.xml和他的格式不一样, 并且没有设置任何拦截. 但是这位博主给了我一个重要的提示, 那就是查看我的过滤器!!! 果然问题出现在过滤器中, 在过滤器中的非过滤URI字段数组中, 我只添加了css/js/img等, 而没有添加这个用于显示图标的” 继续阅读 >>


祝一迪 17/12/23 00:26:07
1. bug描述 今天在合前端和后台的代码的时候出现了让人头大的问题, 前端页面乱码, 并且css/js格式不能显示出来. 前端页面是大壮写好的HTML页面, 我合后台代码的时候直接将后缀改为了.jsp, 就出现了乱码. 2. bug原因 首先前端页面出现乱码可以分为两种情况, HTML和JSP. (1) HTML乱码解决 HTML乱码的原因是网页源代码的编码与网页中的中文编码不同导致, 这样就会导致浏览器无法对网页中的中文进行正确解析, 所以一般要在HTML页面的头部加上下面的代码来设置编码: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> (2) JSP乱码解决 如果你是正正经经地创建一个JSP页面, 并且在头部加了上面HTML中设置编码的代码之后, 一般就不会出现什么问题. 但是我今天就是在JSP中已经加了上面的代码, 但是乱码问题还是没有得到解决. 原因是 继续阅读 >>


祝一迪 17/12/13 17:31:44
今天Java上机的时候有一道题是这样的: 本题目要求定义一个长度可变的整型数组IntArray,数组初始长度为5,当输入的数组元素个数超过数组长度时,数组就自动增加5个元素的容量,即数组长度增加5。 也就是说实现一个类似于ArrayList的自动扩容int型的数组. 既然类似于ArrayList, 那不妨来看看ArrayList是如何动态扩容的. ArrayList是集合类List基于数组的一个实现, 也就是说, ArrayList底层实质上就是一个Object[]数组. 但是数组是定长的, 而我们在使用ArrayList的时候之所以不会有这样的感受就是因为它封装了内部的数组扩容操作, 所以ArrayList如何安全的实现扩容就成了我们的关注点. 1. ArrayList底层数组容量的初始化 在ArrayList初始化的时候, 是可以通过参数initialCapacity来指定底层数组的初始大小. 其构造方法源码节选如下: // ArrayList的默认容量为10 priva 继续阅读 >>


祝一迪 17/11/29 23:02:56
emmm, 最近把Spring框架也学的差不多了, 因为最近要开始迭代小组图书管理系统2.0, 不太有时间再总结Spring In Action的学习笔记了, 所以把Spring学习笔记先放一段时间啦~ 1. bug描述: 在写Spring代码的时候, 启动Tomcat时报错. 2. bug信息: Connected to server [2017-11-16 09:28:36,551] Artifact Spring_10:war exploded: Artifact is being deployed, please wait... Nov 16, 2017 9:28:37 PM org.apache.catalina.loader.WebappClassLoaderBase validateJarFile INFO: validateJarFile(/home/dela/IdeaProjects/Spring/Spring_10/out/artifacts/Spring_10 继续阅读 >>


祝一迪 17/11/16 22:03:54
本系列博客为spring In Action 这本书的学习笔记 终于学完了Spring的核心基础, 要开始学习web中的Spring了!!! Spring MVC(Model-View-Controller)是Spring的一个web框架, 在正式开始学习Spring MVC的Controller之前, 我们先来简单了解一下Spring MVC的工作机制. 一. 跟踪Spring MVC的请求 要想了解Spring MVC, 我们可以通过一个请求从客户端发起, 经过Spring MVC的各组件, 最终又返回客户端的过程为契机, 来看一下Spring MVC的各组件之间是如何相互协作的. 每当用户在浏览器里面点击链接或者提交表单的时候, 请求就开始工作了, 一个请求会经过很多站点并在站点留下或带走一些信息, 最终又返回客户端. 下图展示了请求使用Spring MVC所经历的所有站点: 接下来就上面这张图, 我们来进行详细的分析. 1. DispatcherServlet 继续阅读 >>


祝一迪 17/11/01 21:52:41
关于数据链路层我只是大概翻看了一下, 可能总结的不是很系统, 就将看到的点暂且记录下来. 一. 数据链路的作用 这里的数据链路层是将TCP/IP模型中的数据链路层的数据链路部分单独拿出来进行分析. 计算机中以二进制0/1序列来表示信息, 然而实际的通信媒介之间处理的却是电压的高低/光的闪灭以及电波的强弱等信号. 物理层的作用就是将0/1序列和这些信号进行转换. 而数据链路层处理的数据就不仅仅是单纯的0/1序列了, 而是将数据集合为一个叫做”帧”的块进行传输. 数据链路层的相关技术有: MAC寻址(物理寻址), 介质共享, 分组交换, 环路检测, VLAN, 非公有网络等. 数据链路层有多种传输方式的数据链路, 比如以太网, WLAN(虚拟局域网), PPP(点对点协议)等. 下面就上面提到的这些内容来进行逐一介绍. 二. 数据链路相关技术 1. MAC寻址 (1) MAC地址 在数据链路层传输数据时, 通过MAC地址来识别发送端和接收端. 所以MAC地址就是用来识别数据链路 继续阅读 >>


祝一迪 17/10/26 22:08:06
本系列博客为spring In Action 这本书的学习笔记 在上一篇博客中, 我们了解了AOP的基本概念和Spring中的AOP, 那么本篇博客就来实际操练一下, 看看在Spring中如何创建一个切面. 一. 编写切点 通知和切点是切面的最基本的元素. 那么要创建一个切面, 我们就从定义切点开始吧. 切点定义了在哪些连接点来应用通知. 在Spring AOP中, 要使用AspectJ的切点表达式语言来定义切点. Spring仅支持AspectJ切点指示器的一个子集, 下面的表格列出了Spring AOP所支持的AspectJ切点指示器: AspectJ指示器 描述 arg() 限制连接点匹配参数为指定类型的执行方法 @arg() 限制连接点匹配参数由指定注解标注的执行方法 execution() 用于匹配是连接点的执行方法 this() 限制连接点匹配AOP代理的Bean引用为指定类型的类 target 继续阅读 >>


祝一迪 17/10/23 21:52:09