自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (3)
  • 收藏
  • 关注

原创 Q14--顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。例如:如果输入矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印数字1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10代码实现import java.util.ArrayList; public class PrintMatrixClockWis

2016-09-30 23:26:51 226

原创 数组中只出现一次的数字

题目描述一个整形数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。解题思路1、如果只有一个数字出现一次,别的出现两次,那么将所有的数异或的结果就是只出现一次的数。 2、如果有两个数字出现一次,我们的想法就是把它分成两组,每一组只包含一个只出现一次的数。所有数异或的结果肯定不为0,二进制表示中至少包含一个1,那么可以找

2016-09-30 20:45:30 200

原创 Q12--合并两个排序的链表

题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。解题思路1、要有边界判断,判断链表为空的情况 2、采用递归的思路/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/pu

2016-09-30 16:24:18 182

原创 两个字符串的最大公共子字符串

/* * 两个字符串的最大子字符串 */public class maxSubString { public static void main(String[] args){ String str1 = "abcdefgh"; String str2 = "dbcdefjjj"; System.out.println(findSubStr

2016-09-30 15:25:19 628

转载 final关键字

参考自:http://www.cnblogs.com/dolphin0520/p/3736238.html一、final的基本用法1、修饰类当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。在使用final修

2016-09-29 18:32:14 171

原创 会话管理机制:Cookie和Session

Cookie与Session都可以进行会话跟踪,但是实现的原理不太一样。一般情况下二者均可以满足需求,但有时候不可以使用Cookie,有时候不可以使用Session。一、Session与Cookie的比较 1、 从存取方式上比较Cookie中只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要进行UTF-8,GBK或者BASE64等方式的编码。Cookie中也不能直接存取Ja

2016-09-27 23:47:09 1142

原创 Servlet技术详解

一、Servlet的概念sun提供的一种动态web资源开发技术.本质上就是一段java小程序.可以将Servlet加入到Servlet容器中运行。Java Web应用程序中所有的请求-响应都是由Servlet来完成的。Servlet是Java Web的核心程序,所有的网址最终都交给Servlet来处理。Servlet并没有main之类的执行方法。当用户访问服务器的时候,Tomcat是通过调用Serv

2016-09-27 21:16:27 329

原创 XML两种解析思想:DOM和SAX

一、什么是XML英文全称为Extensible Markup Language,翻译过来为可扩展标记语言。现实生活中存在着大量的数据,在这些数据之间往往存在一定的关系,我们希望能在计算机中保存和处理这些数据的同时能够保存和处理他们之间的关系。XML就是为了解决这样的需求而产生数据存储格式。在XML语言中,它允许用户自定义标签。每一个标签用于描述一段数据; 一个标签可以分为开始标签和结束标签,在开始

2016-09-27 18:31:36 3689

转载 数据库的范式

参考自 http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html在实际开发中最为常见的设计范式有三个:1.第一范式(确保每列保持原子性)第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性

2016-09-22 23:14:12 657

转载 并发编程:Callable、Future、FutureTask

一、为什么会有Callable接口创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。

2016-09-22 22:25:21 327

转载 阻塞队列

一、几种不同的阻塞队列自从Java 1.5之后,在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个:  ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。并且可以指定公平性与非公平性,默认情况下为非公平的,即不保证等待时间最长的队列最优先能够访问队列。  LinkedBlockingQu

2016-09-22 17:22:40 399

原创 字符流中第一个不重复的字符

第一种解法:import java.util.Scanner;import java.util.HashMap;/* * 用HashMap记录字符出现的次数,然后重新遍历一次,算法比较简单,但是空间复杂度和时间复杂度很高 */public class CharStatistics2 { public static void main(String[] args){

2016-09-20 14:43:00 449

原创 求某个正整数范围内的所有素数

import java.util.List;import java.util.Scanner;import java.util.ArrayList;public class Main{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); while(

2016-09-19 23:22:45 1739

原创 n!末尾有多少个0

import java.util.Scanner;/**n!=n*(n-1)*(n-2)*....3*2*1,*而如果要出现0,必须得有2和5出现,但是明显n!中5的因子个数少于2的因子个数,*即转化为求 n!中因子5的个数*/public class NumerOfZero { public static void main(String[] args){ Sca

2016-09-19 22:27:06 337

原创 大数的阶乘问题

可以用java的Decimal类import java.math.BigDecimal;import java.util.Scanner;public class Factorial { public static void main(String[] args){ Scanner scan = new Scanner(System.in); while(s

2016-09-19 22:05:19 195

转载 I/O模型

一、什么是同步?什么是异步?同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行; 异步:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时等待。例如有一个任务包括两个子任务A和B,对于同步来说,当A在执行的过程中,B只有等待,直至A执行完毕,B才能执行;而对于异

2016-09-18 14:42:54 245

转载 同步工具类:CountDownLatch、CyclicBarrier和Semaphore

一、CountDownLatch用法CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。二、CyclicBarrier用法字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待

2016-09-17 23:28:54 336

转载 并发容器

同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5.0开始针对多线程并发访问设计,提供了并发性能较好的并发容器,引入了java.util.concurrent包。并发容器主要解决了两个问题: 根据具体场景进行设计,尽量避免synchronized,提供并发性。 定义了一些并发安全的复合操作

2016-09-17 22:59:10 410

转载 Thread类

一、线程的状态一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。当需要新起一个线程来执行某个子任务时,就创建了一个线程。但是线程创建之后,不会立即进入就绪状态,因为线程的运行需要一些条件(比如内存资源,在前面的JVM内存区域划分一篇博文中知道程序计数器、Java栈、本

2016-09-17 21:11:11 380

转载 Java如何有效避免OOM:利用软引用和弱引用

一、进一步认识软引用和弱引用对于强引用,我们平时在编写代码时经常会用到。而对于其他三种类型的引用,使用得最多的就是软引用和弱引用,这2种既有相似之处又有区别。它们都是用来描述非必需对象的,但是被软引用关联的对象只有在内存不足时才会被回收,而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。  在SoftReference类中,有三个方法,两个构造方法和一个get方法(WekReference类似)

2016-09-17 15:59:43 265

原创 i++递增操作是否具有原子性

i++的操作不是原子的,因为它不会作为一个不可分割的操作来执行。它实际包含了三个独立的操作,读取i的值,将值加1,然后将计算结果写入i。这是一个读取—修改—写入的操作序列,并且其结果状态依赖于之前的状态。 volatile的语义不足以确保递增操作的原子性,除非你能确保只有一个线程对变量执行写操作。1、可以通过使用线程安全类,如 private final AtomicInterger i = ne

2016-09-14 17:23:04 2365

转载 泛型和泛型擦除

一、泛型泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全和运行时更小的抛出ClassCastException的可能。泛型,即“参数化类型”。 创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。二、泛型擦除Java编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。 泛型擦除可以简单的理解为将

2016-09-14 16:14:55 727

原创 public, private, protected访问修饰符

public在任何地方都能访问; private只有在本类中才能访问; protected在同包内的类及包外的子类能访问; 默认不写在同包内能访问,不同包的类不能访问。

2016-09-14 01:50:32 238

转载 HTTP与HTTPS的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTT

2016-09-14 01:32:27 178

原创 面向对象和面向过程的区别

面向过程:procedure oriented programming POP 面向对象:object oriented programming OOP

2016-09-14 01:29:11 210

转载 override和overload的区别

一、override(重写,覆盖)1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 二、overload(重载,过载)1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和

2016-09-14 01:20:40 195

原创 java出现死锁的一个例子

public class TestDeadLock{ public static void main(String[] args){ Thread t1 = new Thread(new Test(true)); Thread t2 = new Thread(new Test(false)); t1.start(); t2.s

2016-09-13 22:59:50 249

原创 实现多线程的两种方式

继承java.lang.Thread,并重写它的run()方法,将线程的执行主体放入其中。实现java.lang.Runnable接口,实现它的run()方法,并将线程的执行主体放入其中。这两种实现方式的区别并不大。继承Thread类的方式实现起来较为简单,但是继承它的类就不能再继承别的类了,因此也就不能继承别的类的有用的方法了。而使用是想Runnable接口的方式就不存在这个问题了, 而且这

2016-09-11 21:36:16 237

转载 内部类

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。一、成员内部类成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员

2016-09-11 17:19:54 164

原创 翻转单词顺序

题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点 符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出”student. a am I”。并尽可能减少空间消耗。Java代码实现public class ReverseSentence { public static void main(String[] args){

2016-09-10 23:18:47 307

原创 try catch finally,try里有return,finally还执行么

首先看个例子:public class TestReturn { public int test(){ int x = 1; try{ return ++x; } catch(Exception e){ }finally{ ++x; }

2016-09-10 15:29:43 2655 1

原创 Collection接口和Collections类的区别

Collection接口和Collections类都在java.util包下,前者是接口,后者是类。 1、java.util.Collection是集合类的顶级接口。它提供对集合对象进行基本操作的通用接口方法。它的直接继承接口有List,Set和Queue. 2、java.util.Collections是一个包装类。此类完全由在 collection 上进行操作或返回 collection 的

2016-09-10 15:07:41 2649

原创 String、StringBuffer与StringBuilder的区别

1)String对象是不可变的。字符串是常量,它们的值在创建之后不能更改。String对象是不可变的,所以可以共享。每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。你可以给一个String对象加任意多的别名。因为String对象具有只读特性,指向它的任何引用都不可能改变它的值。不可变性会带来一定的效率问题。在+的过程会产生需要垃圾回

2016-09-09 14:51:05 289

转载 ArrayList、LinkedList、Vector的区别

这三者都实现了List 接口.所有使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率。ArrayList 是一个可改变大小的数组。当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组。LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性

2016-09-09 14:18:13 209

转载 Hashcode的作用

在Java的Object类中有一个方法:public native int hashCode();根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。一、hashcode方法的作用hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。为什么这么说呢?

2016-09-09 11:26:58 818

原创 Java常见的四种引用

一、为什么要有这么多种类型的引用JDK1.2之前引用的定义:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表一个引用。这个定义很纯粹,也比较狭隘,一个对象在这种定义下只有被引用和没有被引用两种状态。对于如何描述一些“食之无味,弃之可惜”的对象就显得无力。我们希望能够描述一类对象:当内存空间还足够的时候,能保留在内存中,如果内存空间在垃圾收集后还很紧张,就可

2016-09-09 10:42:40 390

原创 equals和==的区别

对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。对于equals方法,注意:equals方法不能作用于基本数据类型的变量。如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

2016-09-08 23:22:28 835

原创 Switch语句的参数是什么类型的?

在Java5以前,switch(expr)中,exper只能是byte,short,char,int类型。从Java5开始,java中引入了枚举类型,即enum类型。从Java7开始,exper还可以是String类型。

2016-09-08 23:04:36 1489

原创 Java基本数据类型

基本数据类型和封装类的区别: 1、基本数据存储在栈中,直接存储值;封装类的引用存储在栈中,对象在堆中创建。基本数据类型由于在栈中,效率会比较高,但是可能会存储在内存泄漏问题。 2、某些情况下,数据必须作为对象出现,这时候必须用封装类将简单类型封装成对象。比如使用List来保存数据值,由于List只能添加对象,所以要将数据封装到封装类中再加入到List中。或者某些参数是Object类型变量的函数,

2016-09-08 22:47:25 238

原创 字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 思路分析这题可以用递归的算法来做。 把字符串分为两个部分,一部分是字符串的第一个字符,另一部分是第一个字符以后的所有字符。,可以把第一个字符和它后面的字符逐个交换,是第一个字符的所有情况。第一

2016-09-08 21:57:29 214

High Performance Switches and Routers(高性能交换机和路由器)

H.Jonathan Chao and Bin Liu,HIGH PERFORMANCE SWITCHES AND ROUTER, John Wiley &SONS,2007 全书完整清晰版

2015-07-17

计算机网络实验指导书

计算机网络基础实验的指导书,包括基于RS-232串口通信协议、局域网组网技术及TCP/IP协议的配置等。

2013-06-11

空空如也

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

TA关注的人

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