- 博客(34)
- 资源 (6)
- 收藏
- 关注
原创 垃圾回收
垃圾回收一、判断对象是否存活1.引用计数法对每个对象O,记录其被引用的数目。若多一个对象指向O,则O的引用值加一。若指向O的对象被回收或不再指向O,则O的引用值减一。若数目大于0,就说明该对象被其他对象使用中,不能被回收;若引用数目=0,则该对象可以被回收了。引用计数法存在一个问题就是,循环引用。a指向b,b指向a,那么a和b都无法被回收。但是引用计数法在Python及其他地方是有被用到的,那么Py
2016-11-15 19:50:59 936
原创 String.intern()
String.intern()最近看java内存模型,提到String的intern()方法,发现还蛮纠结的,所以稍微整理一下。一、String在内存中的位置Class Test {....String str = “hello";....}String的常用方式如上,"hello"这种形式称为字面量。编译生成class文件时,字面量存在class文件的常量池中。运
2016-11-15 19:41:47 450
原创 Tomcat源码解析(十):启动和关闭
之前一直说,catalina是tomcat的一个重要组成。Server、connector、container都归Catalina来管理,它的主要功能就是,在启动的时候读取server.xml文件,创建server对象,也就创建了server管理的connector、container。在应用程序关闭的时候,它进行一些善后的工作。shutdown应用程序关闭的时候,需要做一些清理现场的工作。如果程序
2016-09-14 14:49:36 1206
原创 Tomcat源码解析(九):配置文件读取
Tomcat源码解析:配置文件读取一、文件解析工具Digesterapache commons-digester.jar,本来是Struts中用来读取struts-config.xml的一个组件,后来独立出来。tomcat中就是用digester来解析xml文件。具体是怎么解析的呢?digester的使用xml文件如下:<?xml version="1.0" encoding="ISO-8859-1
2016-08-25 18:46:23 907
原创 Tomcat源码解析(八):Host
host的作用是啥?之前我们学习了context,它表示一个独立的web应用。当我们一台机器上只有一个web应用的时候,只需要把context当做最上层的容器就可以了。可是通常我们希望在一个机器上部署多个应用,就需要有多个context。这时候怎么将不同的请求匹配到不同的context呢?就由host来解决这个问题啦。context管理wrapper,同样地,host来管理context。主流程ho
2016-08-25 18:43:57 989
原创 tomcat源码解析(七):server和service
server和service的作用是什么?Catalina主要包括connector和container两个模块,connector负责接收请求,传递给container,而container负责处理请求。service的作用是统一管理connector和container,一个service可以包括多个connector和一个container。而server的作用是,管理所有的service,一
2016-08-25 18:35:43 3894
原创 Tomcat源码解析(六):类加载器
一、loader的作用是什么?loader是根据请求加载对应的类。jvm有自带的loader,而tomcat中没有直接用java自带loader,是为了安全和重载。安全:jvm自带loader载入的servlet和类,能访问当前jvm的classpath环境变量下所有的类,这样不安全。一般只允许加载的类访问/WEB-INF/classes及其子目录和/WEB-INF/lib中的类。catalina中
2016-08-14 17:03:16 740
原创 Tomcat源码解析(二):Connector
Connector的作用是什么?它主要实现了什么功能?tomcat中Catalina包括Connector和Container,Connector主要功能是接收请求、将请求交给container进行处理。下面看一下Connector的主要功能。一、Connector功能初始化调用open方法,创建socket。private ServerSocket open() throws IOExce
2016-08-14 17:01:21 494
原创 Tomcat源码解析(四):session管理
session是什么?我们访问某个很多网站时,第一次进入需要登陆,但进入下一个页面时就不需要再登陆了,否则这个网站的可用性就是零啦~~在第二次访问时,我们想让服务端识别出请求来自同一个客户。要怎么做呢?其中一个方法就是用session来实现。首先,session是存储在服务端的数据。一个请求到来时,服务端首先看请求中有没有sessionId,若没有,就新建一个session,并将sessionId传
2016-08-14 16:58:52 499
原创 Tomcat源码解析(三):StandardContext
StandardContextCatalina主要包括Connector和Container,StandardContext就是一个Container,它主要负责对进入的用户请求进行处理。实际来说,不是由它来进行处理,而是交给内部的valve处理。 一个context表示了一个外部应用,它包含多个wrapper,每个wrapper表示一个servlet定义。/** * Standard impl
2016-08-14 16:56:30 2616
原创 Tomcat源码解析(一):wrapper
读Tomcat源码:wrapperWrapper的作用StandardWrapper同StandardContext一样,继承自ContainerBase,Wrapper表示了一个servlet定义,一个servlet类对应一个wrapper。wrapper的parent container必须是context,而wrapper不能有child container。 定义如下:public fin
2016-08-14 16:53:38 1435
原创 Tomcat源码解析(五):安全性控制
读Tomcat源码:安全性控制Tomcat安全性控制流程包括哪几个部分?Authenticatorhttp有几种身份认证方式,包括Basic认证、摘要认证等。其中基本认证,是把用户名和密码用BASE64加密,在request中传给服务端,这样服务端就可以确定用户的身份了。主要校验流程如下:public boolean authenticate(HttpRequest request,
2016-07-12 19:05:42 646
原创 java动态代理
java动态代理动态代理是java的一个重要功能,也是Spring AOP等的实现基础。代理是什么?它的作用是什么?代理是在已有类的基础上加了一个中间层,可以在方法调用的前后进行一些附加操作,如请求过滤、参数变化、日志记录等。这样就可以在不修改已有类的情况下,增加或改变一些功能。
2016-06-08 18:26:16 527 1
原创 java web:excel文件上传与解析
0.前言项目中需要解析用户上传的excel文件,校验单元格格式,并数据入库。在实现的过程中遇到了不少问题,并一一解决了,所以总结一下,希望对大家有所帮助。1.页面传递文件这里实现了最简单的形式,注意将enctype设为multipart/form-data,提交方式为post。如果需要在上传时利用控件限制文件类型和大小,可以用前端控件plupload等实现。<form action="uploadF
2015-08-23 15:17:17 14785 6
原创 判断一个单向链表上是否有环
判断一个单向链表上是否有环的方法有哪些呢?方法1:用一个指针数组A,存储已访问过的节点。用一个指针p,每次在链表上移动一步,然后与指针数组A比较,若数组中没有指针与p相同,说明第一次访问p,将p放入数组中;若有指针与p相同,则存在环路,且第一次相同的节点就是环的入口点。链表长度为n,则需要空间o(n),且每次要与指针数组比较,时间复杂度为 O(n^2)。方法2:在节点上
2013-09-02 20:36:47 1403
转载 C++中的字符串基础知识
C++中的字符串有两种,第一种称为C-Style string,来自C语言,另一种基于string类库的方法。C-风格的字符串是以一个'\0'结尾的char数组,所以声明一个C-风格的字符串数组可以这样写:1 char charry[5] = {'c','a','t','s','\0'};或者用两外两种更简便的方法来声明:1 char charry[10] = "cat
2013-08-27 22:20:07 763
转载 LeakDiag使用手记
LeakDiag是微软一款检测memory leak的工具,使用比较简单首先去下载一个ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag/安装好,默认是在c:/leakdiag然后写一个测试程序来测试#include stdio.h>#include windo
2013-03-18 21:33:24 1039
转载 Windows has triggered a breakpoint in xxx.exe
看到这个错误就可以推测是内存使用错了,但是这种错误很隐蔽。所以昨天花了一整天找到这个错误,最后发现是一个全局变量指针指向了一个非全局类实例的一个成员。当文档关闭时,这个类就销毁了,但是全局的指针还在,这个时候变成了野指针。而下一次打开文档时接着使用了,所以异常。pageheap.exe工具帮了不少忙,在打开它后错误基本就能定位到了。在没用它之前,每次跳出异常的地方不确定,在各种new的地方
2013-03-18 21:32:45 1685
转载 模版的特化与偏特化
Partial Template Specialization能够让你在模板(Template)的所有可能的实体中特化出一组子集. 1.模板的特化(template specialization): 例如,定义如下的一个模板: template class Widget { ... 泛化实现代码 ... }; 然后你可
2013-01-14 16:39:42 479
原创 【算法Ⅰ~Ⅳ(C++实现)】习题3.1 寻找int float double能表示的最大最小值
包含头文件limits.hnumeric_limits::max() 求某数据类型的最大值(min()则求最小值)浮点数的最小值是能表示的最小正数 cout.setf( ios::showbase|ios::uppercase ); cout ::min() ::min() << endl; cout.unsetf( ios::hex );
2013-01-12 21:42:43 1681
转载 JNI 资源释放
JNI 编程实现了 native code 和 Java 程序的交互,因此 JNI 代码编程既遵循 native code 编程语言的编程规则,同时也遵守 JNI 编程的文档规范。在内存管理方面,native code 编程语言本身的内存管理机制依然要遵循,同时也要考虑 JNI 编程的内存管理。本章简单概括 JNI 编程中显而易见的内存泄漏。从 native code 编程语言自身的内存管理,
2013-01-10 15:19:01 13936
转载 使用 Java Native Interface 的最佳实践2
2.正确性缺陷5 大 JNI正确性缺陷包括:· 使用错误的JNIEnv· 未检测异常· 未检测返回值· 未正确使用数组方法· 未正确使用全局引用2.1使用错误的JNIEnv执行本机代码的线程使用JNIEnv发起 JNI方法调用。但是,JNIEnv并不是仅仅用于分派所请求的方法。JNI规范规定每个JNIEnv对于线程来
2013-01-10 14:45:08 943
转载 使用 Java Native Interface 的最佳实践
本文介绍 JNI 用户最常遇到的 10 大编码和设计错误。其目标是帮助您认识到并避免它们,以便您可以编写安全、高效、性能出众的 JNI 代码。本文还将介绍一些用于在新代码或已有代码中查找这些问题的工具和技巧,并展示如何有效地应用它们。JNI 编程缺陷可以分为两类:· 性能:代码能执行所设计的功能,但运行缓慢或者以某种形式拖慢整个程序。· 正确性:代码有时能正常运行,但不
2013-01-10 14:44:40 615
转载 JNI完全手册
JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。 JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口
2013-01-09 21:58:06 658
转载 jni编程进阶
JNI一直以来都很少去关注,但却是我心中的一个结,最近这几天刚好手头有点时间,因此抽空看了一下这方面的东西,整理了一份文档,JNI技术的出现主要是基于三个方面的应用需求: 1. 解决性能问题Java具有平台无关性,这使人们在开发企业级应用的时候总是把它作为主要候选方案之一,但是性能方面的因素又大大削弱了它的竞争力。为此,提高Java的性能就显得十分重要。Sun公司及Java的支
2013-01-09 21:28:40 489
转载 JNI编程注意事项
整理项目文档时, 忽然发现当年的一篇以前公司里关于JNI编程 的标准化文档。做为收藏,就贴在这里吧。注:关于JNI, 现在好像有一个OpenSource项目jace可以帮助进行JNI的开发。另外, 推荐IBM Developerworks网站上的一个教程《用jni进行java编程》JNI编程注意事项:1、 JNI的函数声明:JNI函数声明方法为JAVA_Pac
2013-01-09 21:27:29 579
转载 较详细的介绍JNI
JNI其实是Java Native Interface的简称,也就是java本地接口。它提供了若干的API实现了和Java和其他语言的通信(主要是C&C++)。也许不少人觉得Java已经足够强大,为什么要需要JNI这种东西呢?我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,所以在多数时间我们是不需要JNI的,但是假如你遇到了如下的三种情况之一呢? 你
2013-01-09 21:17:28 660
原创 C++ primer:重载操作符与转换
1、重载箭头操作符:class Obj {public: Obj( Screen *p): ( new Scptr( p) ) {} ScPtr operator->(){ return *ptr;} const ScPtr operator->(){ return *ptr; }private: ScPtr *ptr;}
2012-11-24 21:17:29 637
原创 JNI 传递字符串和结构体
用c写的程序,要生成dll供java调用,现学现用JNI。字符串的调用还比较简单,有现成的语句,传递结构体把俺累的半死,因为结构体里有一维和二维数组。看了不少博文,终于弄出来了,总结一下,希望有助他人。c和c++的写法略有不同,以下为c++版本。传递结构体如下:struct mystruct{float array1[M];float array2[M][N];};以下重点
2012-11-22 21:57:52 8118 3
原创 算法导论22.2-6:好选手、坏选手问题
Q:有两种类型的职业摔跤选手:一种是好“选手”,一种是坏“选手”。对于任意一对摔跤职业选手来说,他们中可能有,也可能没有比赛。假定有n位摔跤职业选手,并且有一份清单,上面列出了r对参加比赛的摔跤手。试给出一个o(n+r)时间的算法,它能否确定是否指定某些摔跤手为好选手,而将余下的摔跤手指定为坏选手,从而使得每一场比赛都是在一个好选手与一个坏选手之间进行。如果有可能做出这样的指定,你的算法就应该将它
2012-11-20 21:46:51 2913
原创 算法导论15.4-6:最长单调递增子序列
参考资料:《编程之美》2.16http://blog.pfan.cn/rickone/13086.htmlhttp://chriszeng87.iteye.com/blog/1054321题目:给出一个O(nlogn)的算法,使之能够找出一个n个数的序列中最长的单调递增子序列。O(n2)的比较好理解,没有仔细研究,研究了下O(nlogn)的解答和好多大神的分析才
2012-11-20 21:43:47 5737 2
原创 贪心算法简单实现
没有排序,因为考虑到排序要花的时间也挺多,不比这种直接寻找法快多少。void select( int s[], int f[], int f0){int ff = 18+1;//the biggest finishing time+1int flag = 0;for( int i=0; iif( s[i]>=f0 && f[i]{flag = i;ff=f[i]
2012-10-18 21:05:49 623
原创 vs2010下创建win32应用程序
学习《零起点学通C++》,第15章跟着做迷宫游戏的时候,发现vc6.0和vs2010还是有不少差别的,摸索着慢慢做,过程中遇到几个问题:1、添加类创建窗口时,ClassWizard的不同添加数组变量时,会报错,用下图方法即可。为什么呢? 2、运行中出现:无法从“char [8]”转换为“LPCWSTR”解决:project->properties
2012-08-08 22:25:59 3131
MATLAB简明电子ppt教程
2012-07-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人