- 浏览: 36830 次
最新评论
文章列表
题目:求子数组的最大和
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n) 。
例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5 ,和最大的子数组为 3, 10, -4, 7, 2 ,因此输出为该子数组的和18 。
分析:
如果第一次遇见这样的题目,在时间复杂度为O(n)的条件下,似乎不能做到。而最容易想到的就是穷举法了,元素个数为1的子数组有n个,元素个数为2的子数组有n-1,……这样下去,明显不符合时间复杂度O(n)的要求。该怎么办呢?贪心 ...
- 2014-12-29 11:51
- 浏览 234
- 评论(0)
设计包含min函数的栈:
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素;
要求函数min、push以及pop的时间复杂度都是O(1)。
分析:
要得到当前栈的最小元素,且时间复杂度为O(1),这不但要求知道当前栈中的最小元素值(或其所在位置),而且要知道次小元素,这样才能保证,如果当前栈顶元素为最小元素,被pop后,还能以O(1)的时间复杂度找到
- 2014-12-29 11:49
- 浏览 307
- 评论(0)
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
分析:本题是微软面试100题的第一题,由于树本身定义就属于递归式定义,所以很多与树相关的题目都是用递归的思路来解决,本题亦是如此。下面我们用两种不同的递归思路来分析。
- 2014-12-29 11:46
- 浏览 355
- 评论(0)
为什么要分代
分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。
在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短,比如:String对象,由于其不变类的特性,系统会产生大量的这些对象,有些对象甚至只用一次即可回收。
试想,在不进行对象存活时间区分的情况下 ...
- 2014-12-25 14:31
- 浏览 254
- 评论(0)
如何区分垃圾
上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以,后来实现的垃圾判断算法中,都是从程序 ...
- 2014-12-25 14:29
- 浏览 213
- 评论(0)
可以从不同的的角度去划分垃圾回收算法:
按照基本回收策略分
引用计数(Reference Counting):
比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。
标记-清除(Mark-Sweep):
- 2014-12-25 14:26
- 浏览 293
- 评论(0)
Java对象的大小
基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。
在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:
Object ob = new Object();
这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息。因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的 ...
- 2014-12-25 14:14
- 浏览 253
- 评论(0)
数据类型
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress
引用类型包括:类类型,接口类型和数组。
堆与栈
堆和栈是程序运行的关键,很有必要把他们的关系说清楚。
- 2014-12-25 13:54
- 浏览 243
- 评论(0)
使用xml方式整合三大框架
首先,新建一个web工程项目,整合的项目基本结构如下:(没有加入view层)
第二步,导入ss2h整合所需要的jar包,如下如:
第三步,编写持久层
1.定义好po类
package com.jjyy.ss2h.po;
/**
* @author Administrator--jiangyu--2014-9-12下午8:00:45
* po类
*/
publicclass User {
private Integer
id;
private String
name;
private
- 2014-09-12 18:52
- 浏览 324
- 评论(0)
nio是new io的简称,从jdk1.4就被引入了。现在的jdk已经到了1.6了,可以说不是什么新东西了。但其中的一些思想值得我来研究。这两天,我研究了下其中的套接字部分,有一些心得,在此分享。
首先先分析下:为什么要nio套接字?
nio的主要作用就是用来解决速度差异的。举个例子:计算机处理的速度,和用户按键盘的速度。这两者的速度相差悬殊。如果按照经典的方法:一个用户设定一个线程,专门等待用户的输入,无形中就造成了严重的资源浪费:每一个线程都需要珍贵的cpu时间片,由于速度差异造成了在这个交互线程中的cpu都用来等待。
nio套接字是怎么做到的?
其实,其中的思想很简单:轮询。一 ...
- 2014-09-11 21:13
- 浏览 250
- 评论(0)
1. 基本概念
IO是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。
所有语言运行时系统提供执行I/O较高级别的工具。(c的printf scanf,java的面向对象封装)
2.Java 标准io回顾
Java标准IO类库是io面向对象的一种抽象。基于本地方法的底层实现,我们无须关注底层实现。 InputStream\OutputStream(字节流):一次传送一个字节。 Reader\Writer(字符流):一次一个字符。
3.nio简介
nio是java New IO的简称,在jdk1.4里提供的新api。S ...
- 2014-09-11 21:11
- 浏览 213
- 评论(0)
1.介绍概念
2.环境的搭建
3.一个hello world 的demo。
4.框架的解析
一.什么是MINA
首先,Mina(Multipurpose Infrastructure Networked Applications)是Apache开源组织下的一个高性能的网络应用框架,它可以帮助用户开发高性能和高扩展性的网络应用程序,它提供了一个抽象的、事件驱动的异步API,使得Java NIO(非阻塞式)在各种传输协议下快速高效开发。
总之:我们简单理解它是一个封装底层IO操作,提供高级操作API的通讯框架!
二.环境的搭建
第一步:导入jar包
第二步:日志文件的配 ...
- 2014-09-11 21:04
- 浏览 255
- 评论(0)
原文连接:http://www.blogjava.net/michaellee/archive/2009/11/24/303432.html
延迟加载:
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对 ...
- 2014-09-06 14:35
- 浏览 269
- 评论(0)
随意在博客中逛逛,看到了这篇文章,仔细的读了下,觉得写得挺好的,挺专业的,所以贴过来了。供大家分享吧。
原文链接:点击打开链接
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知道我学习java多线程开发是很难的,直到现在写这篇文章的时候,虽然我对java多线程里的API比以前熟悉更多了,但是如果碰到了生产开发里如何将多线程设计更好,我心里的底气还是不足的,哎,缺乏很有意义的实践,我现在要等待让我实践这部分技术的机会了。
话外话,研 ...
- 2014-09-04 11:28
- 浏览 282
- 评论(0)