- 博客(75)
- 收藏
- 关注
原创 Ajax重定向无效
问题背景以前写response.sendRedirect("/login.jsp");是成功的,今天用到ajax请求,发送给后台,希望直接跳转,发现无效,首先要深入了解ajax请求和response.sendRedirect的机制response.sendRedirect的机制这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对...
2019-01-17 11:30:24 1931 1
原创 对象是否存活和引用分类
垃圾收集器所关注的内存是java堆,和方法区 1、判断对象是否存活? 1)引用计数法:给对象添加一个计数器,当有一个地方引用它就计数器加1,当引用失效计数器减1,当计数器为0表示这个对象不能再被使用,引用计数法实现简单但是他很难解决对象之间互相循环引用的问题 2)可达性分析算法:这个算法的基本思想是通过一系列的GCRoot对象做为起始点,从这些节点开始向下搜索,搜索所走过的路径就称为引用链,...
2018-09-08 14:29:12 347
原创 OOM
1、除了程序计数器外,java虚拟机栈 本地方法栈 java堆 方法区都会产生内存溢出异常 2、那么为什么会产生内存溢出,怎么检测,内存溢出怎么办Java堆异常 1、原因:对象占用空间达到最大堆的容量限制就会产OOM 2、异常栈信息:“java.lang.OutOfMemoryError”后面会提示“Java heap space” 3、怎么处理:  ...
2018-09-08 14:22:42 395
原创 JVM运行时数据区域划分
1、分为5个区域,分别是程序计数器,虚拟机栈,本地方法栈,还有堆和方法区2、他们各自有什么特点,存放什么数据 1)堆和方法区是所有线程共享的区域而程序计数器,虚拟机栈,本地方法栈是线程私有的 2)接下来讲他们自己的存储的什么数据 a/程序计数器是一块较小的内存空间,他的作用相当于当前线程的所执行字节码的行号指示器,如果当前线程执行的是本地方法那么程序计数器的值为空 b/...
2018-09-08 14:21:51 239
原创 JVM对象创建过程
问题:在语言层面,通过new一个关键字就可以创建一个对象,那么在底层jvm是如何进行一个对象的创的?? 1)首先程序计数器在收到这个new得到指令时候,先到方法区的常量池检查有没有这个类的符号引用,然后检查类是否加载解析初始化过没有就进行类加载 2)类加载完成后,JVM就要在java堆上为对象分配内存,这个内存大小是在类加载的时候就确定的,从java堆中分配内存有两种方式一个指针碰撞,一个空闲...
2018-09-08 14:21:01 1391
原创 垃圾收集算法
1、垃圾回收主要发生在java堆和方法区,一般java堆的对象被分为新生代和老年代,方法区的数据被称为永久代 2、永久代主要回收:废弃常量和无用的类,那么一个类被判定位无用的类要满足3个条件 1)该类的所有的实例都被回收 2)加载该类的classLoader也被回收 3)该类对应的java.lang.Class对象没有在任何地方被引用,无法通过反射访问该类的方法 ...
2018-09-08 14:19:40 153
原创 类加载
1.1 加载 加载主要是将.class文件(并不一定是.class。可以是ZIP包,网络中获取)中的二进制字节流读入到JVM中。 在加载阶段,JVM需要完成3件事: 1)通过类的全限定名获取该类的二进制字节流; 2)将字节流所代表的静态存储结构转化为方法区的运行时数据结构; 3)在内存中生成一个该类的java.lang.Class对象,作为...
2018-09-08 14:18:25 141
原创 G1垃圾收集器&CMS收集器
G1是一款面向服务端的垃圾收集器,他的特点 1)并行并发,并行是指G1利用服务端多核优势缩短stop the world的时间,并发是指G1可以使GC线程和用户线程并发执行 2)分代收集,G1虽然还保存分代收集概念,但是G1 可以管理整个java堆不需要其他收集器配合 3)空间整合:从总体看G1是采用标记清除算法,局部看是采用复制算法,这样就不会产生内存碎片 4)可预测停顿:G1和CMS相...
2018-09-08 14:14:06 511
原创 Servlet执行流程
整体概图servlet 执行流程局部图 补充说明: 1、当Servlet第一次被调用的时候会触发init函数,该函数会把servlet实例加载到内存。该函数只会被调用一次 2、web服务器把接收到的http请求封装成一个Request对象,作为service函数的参数传递进去。 3、service函数会被调用多次,每访问一次Servlet,它的service函数就会被调用一次 ...
2018-07-28 16:40:34 12148 1
原创 重建二叉树
题目 知道二叉树的前序和中序遍历序列,这棵二叉树没有重复的数据解题思路 1)知道一颗二叉树的前序和中序序列可以唯一确定一棵二叉树 2)递归,对数组分成一段一段的 应该注意的点 1)给定的序列不能含有重复的数字 2)给定的序列必须是正确的正确的序列 测试用例 斜二叉树,普通二叉树,空二叉树 解法 遇到了两种解法 1)就是比较常见的,传递数组引用/** * Defi...
2018-04-16 20:43:49 245
原创 数据结构与算法——有序链表合并
要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。#include <stdio.h>#include <stdlib.h>typedef int ElementType;typedef struct Node *PtrToNode;struct Node { ElementType Data; PtrToNode ...
2018-03-24 20:23:26 632
原创 链表的应用——广义表、多重链表
广义表 1、所谓广义表就是线性表的推广,怎么说呢,以前线性表存的是一个数据元素,现在呢是线性表的结点可以指向另一个线性表,这就是广义表啦typedef struct GNode *GList;typedef struct GNode{ //可以设置tag为0,union单元存的就是数据,为1存的就是指向另一广义表的指针 int tag; union{ ...
2018-03-22 20:30:31 5010 1
原创 线性表的应用——一元多项式的存储
捕捉一元多项式的描述要点 一元多项式有多个数据项,每个数据项的关键点是变量的指数,变量的系数顺序存储,一维数组进行存储 对应关系:数组下标0-n-1,和变量系数对应,数组的数据单元可以存储变量的系数 优点: 数组适合随机存取,利用它存储多项式,做加减法运算很方便 缺点: 若非零项少,浪费存储空间顺序存储:利用结构数组只存储非零项数据 1、结构数组,就是可以存...
2018-03-22 20:09:04 3855
原创 数据结构与算法——计算程序段的执行时间&&多项式求值
计算程序段的执行时间 1、计算某一段程序执行的时间,单位秒 2、CLK_TCK:机器每秒的打点数 3、要引入头文件’time.h’#include<stdio.h>#include<time.h>void printNByRecursion(int n){ if(n){ printf("%d\n",n); printNB...
2018-03-20 22:30:49 587
原创 数据结构与算法——循环队列链式队列
队列 1、也是一种操作受限的线性表,规定只能在一端插入,一端删除,有先进先出的特点。 2、顺序队列,队首指针指向队首元素,队尾指针指向队尾元素的前一个元素,此时队列为空的判定条件是Q.front == Q.rear == 0;2、顺序队列会有假溢出的现象,为此设计了循环队列。 1)为了区分队满和队空的条件,循环队列往往采用少用一个单元进行入队队满判定条件:(Q.rear+...
2018-03-20 11:19:23 5859
原创 数据结构和算法——栈
栈 1、线性表的一种,特点是规定只能在一端进行插入删除操作,元素后进先出。 2、栈用顺序栈和链栈,分别是线性存储和链式存储,链式存储有头结点和无头结点是有差别的 3、共享栈,是顺序栈的一种,就是两个顺序栈共享一个一维空间,两个栈底分别在共享空间的两端,两个栈顶向共享空间中间延伸 4、注意这里演示和说明的栈的栈顶指针都是指向栈顶元素,而不是下一个元素。 5、共享栈,栈1的栈顶指针指向-1,...
2018-03-19 21:20:39 450
原创 Linux——基础知识
Linux的特性 1、开放性,多用户,多任务,良好的移植性,对硬件要求很低,自由定制交换分区 1、这是linux下独有的,作用是在物理内存不够用,在磁盘开辟一个分区做为虚拟内存,当然访问虚拟内存比物理内存慢得多。 2、一般物理内存小于2G,物理内存可以是其2倍,若大于2G,那就在此基础上加上2G就是应当分配的交换分区的大小。 3、Linux下可以创建两种类型的交换空间,一种是s...
2018-03-19 09:32:04 353
原创 C语言进阶——字符串
C语言中的字符串 1、字符串:被引号引起的一串字符,就是字符串,系统会自动在这段字符末尾加上结束标志‘\0’ 2、C语言中并没有定义字符串变量,所以C语言中字符串是以常量存在,存储在进程空间的data区的ro区域 3、编译时候处理成指向常量字符串的指针,不能改变字符串的内容,不能改变指向const char * const //字符串的指针类型4、如果要改变字符串内容,则要把它放...
2018-03-18 09:58:00 591
原创 C语言进阶——基于数组的查找
二分查找——迭代方式 1、前提:数组元素有序#include<stdio.h>#include<stdlib.h>#include<time.h>#define len 10typedef enum{ EROOR,SUCCESS}STATUS; //迭代二分查找 int search(int *p,int low,int high,...
2018-03-15 23:41:17 374
原创 C语言进阶——基于数组的排序
普通选择排序 1、实现原理和思想(升序): 1)在未排序的数组中,选择首元素与其后元素进行比较,若其后元素比首元素大,则两元素交换,直至比较到最后一个元素,这是第一轮比较,得到首元素有序。 2)接下来从第2个,第3个元素…重复1)的步骤,直至剩下最后一个元素,则最后一个元素也是有序,是本组元素的最大值。#include<stdio.h>#include<stdli...
2018-03-15 21:43:20 426
原创 C语言进阶——函数指针
函数名称即是指针 1、声明函数指针注意,要声明的函数的返回值 ,参数#include<stdio.h>#include<stdlib.h>#include<string.h>void printfX(){ printf("xxxxxxxx\n"); printf("xxxxxxxx\n"); printf("xxxxxx...
2018-03-15 16:34:23 586
原创 C语言进阶——把文件内容读取到内存
编程思想 1、利用二级指针构建二维空间,这样做目的是为了节约内存空间。 2、分析图 下图是文件内容的抽象形式,现在要把蓝色部分的文字读取到内存 下图右边蓝色部分表示从文件读取出来的一行行内容,再过来绿色框的一级指针指向这些内容的地址,每个指针指向一行,然后再使用一个二级指针来指向这个一级指针数组 实现代码//把文件读到内存#include<stdio.h>...
2018-03-14 22:35:18 10051 3
原创 C语言进阶——const
const 1、const可以取代宏,const有类型,宏没有类型 2、const修饰的变量称为常变量 3、合理使用const修饰变量,可以增强程序的健壮性。const的3种修饰 const的位置和int的位置无关 1、修饰普通变量int main(void){ const int a = 1; a = 2; //编译不过 printf("%...
2018-03-14 22:23:52 265
原创 c语言进阶--二级指针
指针 1、指针是一种数据类型,在32位机下是4个字节,64位机子下是8个字节 2、二级指针是指向一级指针的指针,也就是二级指针的存储内容是一级指针的地址 3、一级指针的声明:int * p = NULL;二级指针的声明:int **q = &p;4、定义指针的数据类型表示指针的寻址能力,指针只会记录数据类型的低地址。 比如,int数据类型有4个字节,那么p的...
2018-03-13 21:48:10 1033 1
原创 java编程思想第4版初始学习
前言 1、看过这部分内容,首先我了解到作者通过和其他程序语言的比较强调了java程序设计对复杂性的优势。 2、 以作者原话,这本书的诞生是因为java语言的升级,“这本书基本可以称为‘只限javaSE5/6’”,而我现在使用的大多是javaSE7/8,会有些差别。 3、 作者还提到他内建的测试框架,该框架由Python编写。 4、作者还推荐了几款工具,UML工具:Spar...
2018-03-11 13:43:14 587
原创 数据结构-线性表(顺序表+链表)
线性表 1、线性表是一种逻辑结构,表示一种一对一的逻辑关系,除首节点和尾节点,每个结点只有一个前驱结点和一个后继结点 2、两种实现的物理结构:顺序存储,链式存储顺序表 1、定义:用一组地址连续的存储单元,一次存储线性表中的元素,使得逻辑位置相邻的元素物理位置也相邻。 2、特点: 顺序表元素的位序从1开始 顺序表可以随机访问,通过首地址和序列号找到指定元...
2018-03-11 13:02:06 445
原创 C语言进阶-ifndef的用法
1、ifndef是 if not define 的缩写 2、用法#ifndef x //先测试x是否被宏定义过#define x程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1#else程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1。#endif//终止if3、作用 条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。...
2018-03-08 15:30:25 6517
原创 软件工程----过程模型、敏捷开发
软件的概念 软件是在计算机系统支持下能够完成特定功能和性能的程序、数据和相关文档 软件 = 知识+程序+数据+文档软件危机 软件危机是指落后的生方式无法满足迅速增长的计算机需求,从而导致软件开发和过程维护出现一系列严重问题的现象。软件工程的概念 软件工程定义的第一部分内容要求,软件开发、维护、和运行的过程是系统的规范的 软件工程的第二部分说明软件工程...
2018-03-07 11:38:08 2305
原创 C语言进阶之数组
一维数组 相关概念 1、数组的特点:存储相同的数据类型,内存空间连续,数组也是一种数据类型。 2、数组三要素:一个数组如何确定需要3个属性,起始地址,步长,范围。 数组的声明 int a [] 数组的初始化 int a [10] = {1,2,3}//部分初始化 int a[10] = {0};//清零 数组名称做为整体使用的情况 ...
2018-03-07 09:18:49 502
原创 C/C++进阶之进程空间(二)
进程空间 首先认识进程和程序的区别 1、程序:源文件经过编译,生成可执行文件,一般window下是*.exe文件,linux下是a.out。程序是静态的。程序包含3个区域,text,inial data, uinial data。 2、进程:被操作系统加载到内存至运行结束的过程。进程是动态的。进程包含5个区域,text,inial data, uinial data,heap,...
2018-03-05 21:58:38 1289
原创 C/C++常识(一)
c语言的引用如何使用 首先引用是C++的内容不属于C。malloc函数malloc的库函数是'<stdlib.h>'这是c标准库的普通函数,用来分配内存空间,和free函数结合使用,free函数是释放空间 1、原型: void * malloc(unsigned int number_bytes) 2、void*表示未确定类型的指针,在c/c++中可以强制转换成任...
2018-03-04 22:11:21 290
原创 C语言进阶(一)
1、内存是线性的。 2、数据类型分类:基本数据类型,构造数据类型。 基本数据类型分为:整型,实型。 整型分为:char,short,int,long int, 实型分为:float,double,long double。构造数据类型分为:结构体,共用体,数组,枚举,指针,构造类型。补码 1、同样是1个字节8个位,原码表示数值范围是0-255,补码表示范围是-128-127,这...
2018-03-04 22:10:18 17715 3
原创 centOS网络不能通信尝试解决办法
事件起因 需要安装centOS 6.5 32位虚拟机,有两种安装方式,一种是光盘映像ISO文件,一种是利用之前安装过的vmdk文件,本地没有ISO文件,ISO文件有3个g要到网上下载比较麻烦,之前有安装过这个系统,在安装目录下找到centOS.vmdk文件,所以采用第二种方式。解释一下vmdk文件 这个文件是VMware虚拟机创建的,解释过来就是虚拟硬盘格式,下面这个链接提供安装的步骤...
2018-02-21 15:36:47 404
原创 在虚拟机中安装centOS6.6 32位系统
准备材料虚拟机一台centOS6.6 32系统映像文件安装过程要点 注意这里省略一些步骤,只说明安装过程的一些要点,其他内容比较容易,保持默认设置,点击下一步即可 1.新建虚拟机,选择典型(推荐)方式 2.选择稍后安装 3. 选择centOS 默认是32位,不要选择cenOS 64位,因为我们要装的32位系统 4. 5.选择将虚拟磁盘分成多个文件 ...
2018-02-21 14:24:02 5929 2
原创 使用maven构建项目遇到的问题
为什么要用Tomcat插件启动web工程 1.为什么不用图片添加的方式添加web工程到Tomcat,因为会面临同时运行多个项目的需求,此时需要更改Tomcat的端口号,如果使用图1的方式要更改3处端口号,相对麻烦,如果采用插件方式只要在pom文件配置即可。2.选中待运行的项目右击,运行方式,第二个maven build,第一个maven build是之前运行的命令历史纪录,在弹出框输入命令,...
2018-02-21 13:51:34 1485
原创 mybatis逆向工程
逆向工程的作用 根据数据库表,生成对应的po类,配置文件,接口方法,注意这里只生成单表增删改查方法,多对多关联的接口和配置要自己在配置文件添加逆向工程使用步骤在数据库建表新建一个java工程在工程目录下新建lib文件夹,准备导包导包:mybatis包,mybatis-generator-core包,数据库驱动包,导包完成后,选中所有包,右键配置构建路径,添加至构建路径在工程...
2018-02-17 15:20:31 476
原创 在eclipse使用maven构建web项目遇到的问题
要不要跳过骨架 选择不跳过骨架,就是把下面单选框勾上,之所以跳过骨架是因为这样创建出来的项目目录比较完整 缺失web.xml文件报错 做为一个web项目,没有web.xml文件,pom.xml文件会报错,这时只要webapps下面添加WEB-INF文件夹然后新建web.xml文件就可以了 在源码新建servlet报错 错误提示:找不到javax.servlet.api包 ...
2018-02-14 22:18:20 1041
原创 装虚拟机装Oracle数据库
装虚拟机注意的几个点 本次装载版本的:12.0 1.点击setup.exe就可以开始安装了,开始安装向导 2.硬件兼容,我们选择低配5.x就可以了 3.安装硬盘,选择稍后安装 4.选择安装的系统类型,选择windows XP profession,因为我们后面选择的镜像文件是这个版本的 5.分配内存设置为2048M 6.网络配置,选择主机模拟网络 7.使用现有硬盘,选择已经下载好...
2018-02-13 20:38:54 6150 2
原创 数据库表结构设计
为什么要学习数据表结构设计 实际开发中,需要根据需求,将实际模型转换成物理表结构,这时需要考虑几个问题,表名称如何命名,表中需要哪些字段,各个字段的命名规范,字段的数据类型,字段的长度,和其他表的联系,这些都是需要考虑的。推荐使用的工具 PowerDesigner这个工具,可以做UUML图帮助分析数据关系,最重要的是可以把设计好的表结构转换成你使用的数据库的命令语句,方便在数据库中使用...
2018-02-13 14:33:02 27811 2
原创 SSH框架:多对多数据表处理
多对多案例 一个用户有多个角色,一个角色也可以有多个用户,多对多进行双向关联的时候:必须有一方去放弃外键维护权,如图, User.javapublic class User { private Long user_id; private String user_code; private S...
2018-02-09 20:01:42 732
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人