您的位置:首页 > 职场人生

java 基础面试准备资料 & 面试题

2012-03-13 22:03 387 查看
异常有:NumberFormatException

ClassNotFoundException

ArithmeticException

InterruptException

fileNotfound

XMLparseException

CloneNotSupportedException

classcastExcepion

1.局部变量,成员变量,类变量(static)

2.类中只能访问静态属性及方法

3.局部变量覆盖实例变量

private statice int x;

public static void name(int x){

x++;

}

//局部变量覆盖了类变量

public static void name(int y){

x++;

}

//方法中使用的是类变量

4.实例成员包括:实例成员变量+实例成员方法+实例常量/类常量

5.类成员包括:类成员变量+类成员方法+类常量

6.局部变量使用前必须初始化

7.整数除以整数结果为整数,且除数不为零;浮点数除以零结果为Infinity

8.取模运算的结果与被除数的符号相同

9.X的n次幂

public class Square{

public static void main(String []args){

double result = 0;//累計結果

int power = args[1];//幂数

double bootom = args[0];//底数

for(int i = 0 ; i < power ; i ++ ){

if( result != 0){

result = result * bootom ;//积幂

}else{

result = bootom;//第一次赋底值

}

}

}

}

10.^异或 ; ~取反 ; |或 : &与 : << 带符号左移 : >> 带符号右移 : >>> 无符号右移

11.右移越界则为零

12.三目运算符(exp ? true :false )

a > b ? "a 大于 b" : " a 小于 b "

13.进制表示

十进制 正常

八进制 以0 开头

十六进制 0X 开头

14.char 类型的取值范围:0~65535

short 类型的取值范围:-32768~+32767

15.引用传递+值传递

引用传递(fianl 不可改变引用 不加final 则可以改变引用)

static void use(final int x,int y,final int[]z ,int n){

x++;//错的 x的引用不可以变

}

值传递(将值复制加以使用 ,属局部变量)

可变参数:

function(int ...x){

for(int param :x){

sum += x;

}

}

function(int ...x){

for(int i = 0; i < x.length;i++){

sum += x[i];

}

}

16.default values

byte 0

short 0

int 0

long 0

char ‘\U0000'--汉字正则表达式 String rule = "[\u4e00-\u9fa5]";

float 0.0f

double 0.0d

boolean false

object reference null

17.int a[][] = new int [4][6] 表示的二维数组为 4个长度为6的一维数组

a[3][4] 表示第四个一维数组的第五个元素

18.String 类是final类 不能够改变与继承

19.String 有length()方法 Array 有length 属性

20.Throwable

error (系统+硬件决定)

exception (programmer)

runtimeException

检查异常(编辑器能够识别的)

21.运行时异常与一般异常的区别/

异常表示程序运行过程中可能出现的非正常状态、运行时异常表示虚拟机的通常操作中可能遇到的异常,

是一种常见的运行错误,java 编辑器要求方法必须声明抛出可能发生的非运行时异常,

但是并不要求必须声明未捕获的运行时异常

22.try - catch - finally 配套使用

try - catch / try - finally 也可配套使用(不能起到捕获异常的作用,而是异常交给系统处理)

throws :声明异常是指一个方法不处理它产生的异常,而是向上传递调用此方法的方法处理

throw exception(new Exception ())

23.System.gc()仅为请求,对几个垃圾回收算法加权,使回收容易发生

24.finalize()+ toString()+ equals() 都是Object的方法

25.super.finalize();最后一句话,从下到上实现finalize的调用

26.Stream

1.字节流

InputStream

方法有:available();

close();

mark();

marksupported();

read();

read(byte[]b);

reset();

skip(long n);

OutputStream

方法有:close();

flush();

write(byte [] b);

2.字符流

Reader

Writer

3.InputStreamReader(Inputstream is)

OutputStreamWriter(OutputStream os)

4.bufferedReader(readline())

bufferedWriter

27.system.out 是个字节流

28.抽象:过程抽象+数据抽象

继承:子类首先自动调用父类的无参构造器(其目的是为了继承父类的成员进行初始化)

但不会继承父类中特定的构造函数

29.封装:目的就是打包,每个类的数据和方法都可以定义为private 或 public private起到了封装的作用

多态:重写

重载

接口回调:将实现接口的类的实例的引用赋值给接口变量

Exp:

interface i = new imple_class();

30.水仙花: 407 = 4*4*4 + 0*0*0 + 7*7*7

31.跳出多重循环的方法有;

1.标号 ok:

2.内层数据能够控制外部循环条件

32.9*9乘法则

方法一:

flag: for(int i = 1; i <= 9 ; i ++){

for(int j = 1; j <= 9 ; j ++){

if( j>i ){

Sytem.out.println();

continue flag;

}

System.out.print(i * j + " ");

}

}

方法二:

for(int i = 1; i <= 9 ; i ++){

for(int j = 1 ; j <= 9 ; j ++){

if(j > i ) {

System.out.println(" ");

break;

}

System.out.print(i * j + " ");

}

}

33.阶乘

方法一:

for(int i = 1; i <= 10 ; i ++){

int j = 1;

int sum = 1;

while(true){

sum *= j;

j++;

if(j > i){

break;

}

}

System.out.println(i +"!=" +sum);

}

方法二:

for(int i = 1; i <= 10 ; i ++){

int j = 1;

int sum = 1;

loop :while(true){

sum *= j;

j++;

if(j > i){

break loop;

}

}

System.out.println(i +"!=" +sum);

}

34.String 类(String 是内存池中的一个常量【String pool】)

String str = "abc"

String str = new String ("abc")

方法有:

char charAt(int dex)

int compareTo(String anotherString)

int compareToIngoreCase(String str)

String conCat(String str)

int indexof(int ch)

int indexof(String str)

int length()

String replace(char oldchar,newchar)

String subString(int beginIndex,int endIndex)

String toLowerCase()/toUpperCase()

char[] tocharArray()

String [] split("XXX")

35.StringBuffer(为了提高效率,节省空间,选择StringBuffer)

36.线程与进程

A.相同点:

0.进程和线程都是实现并发的一个基本单位

1.进程常被看做是系统资源的分配单元和独立运行的基本单元,一个任务就是一个进程;

2.线程则是一个比较新的概念,也是具有提高系统资源利用率、改善用户之间同喜效率等有显著作用,

因为一个进程中可能存在一个或多个线程,所以可以看出两者之间具有多少的相似之处;

B.不同点:

1.进程中可以含有多个线程

2.每个进程都有一个专用的内存区域,一个进程崩溃后,在保护模式下不会对其他的进程产生影响,

线程是进程内部的单一的一个顺序控制流,没有单独的地址空间,线程共享内存单元(包括代码和数据)

通过共享内存单元实现数据交换、实时通信与必要的同步操作。

3.进程是程序一次动态执行过程,他经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本省从产生、发展到最终消亡的过程,

多进程的(多任务)的操作系统能够同时运行多个进程(任务==程序),由于CPU具备分时机制,所以每个进程都能循环获得自己的CPU时间片,

由于CPU执行速度非常快,是的所有程序好像同时运行一样,

4.线程是比进程更小的能独立运行的基本单位,所谓多线程是一个进程在执行过程中可以产生多个线程,这些线程可以同时存在,同时运行,

形成多条执行线索,线程自己基本上不拥有系统资源,但是它可以与同属一个进程的其他线程共享进程所有的全部资源,

5.进程可以独立运行(每个进程都有一个程序的入口、顺序执行序列和程序的出口);而线程不能够单独的执行,必须依存在应用程序中;

37.线程同步

1.同步代码块

Synchronized(this){

同步代码……

}

2.同步方法

public synchronized void fun(){}

38.yield是指暂停当前正在执行的线程对象,并执行其他线程,暂停执行是指当前线程放弃所分得的CPU资源,并不是是线程处于阻塞状态,

即线程仍处于可执行状态,随时可能再次分得CPU,调用yield的效果等价于调度程序认为该线程已执行了足够的时间,从而转到另一线程

39.package 必须声明在 import 之前 且一个.java文件只能有一个public类

40.System类的所有成员都是静态的

41.Random 类,可以产生 float double boolean 等数据类型

Math.random()方法只能产生 0.0 <= x < 1.0

42.Date

1.calendar 对象 = Calendar.getInstance()

2.DateFormat --->SimpleDateFormat

Calendar rightNow = Calendar.getInstance();

Date d = rightNow.getTime();

43.Object类

Object()

clone()

equals(Object o)

finalize()

getClass()

hashCode ---返回值 为int

notify()

notifyAll()

toString()

wait()

wait(long timeout)

wait(long timeout,int nanos)

44.如果对象的类没有实现cloneable接口,则抛cloneNotSupportException

45.doulbe ceil()

int round()

double floor()

46.Iterator 接口

47.Conllection 是所有集合类的顶级接口(Map接口没有继承Conllection接口)

List ----扩展Conllection去处理序列

Set ----扩展Conllection去处理集合

SortedSet ---扩展set去处理排序

48.Conllection接口的方法有:

boolean add(Object o)

boolean addAll(Object o)

boolean clear()

boolean contains(Object o)

boolean containsAll(Conllection c)

boolean equals(Object o)

int hashCode()

boolean isEmpty()

boolean remove(Object o)

Iterator iterator()

boolean removeAll(Conllection c)

boolean retainAll(Conllection c)

Object [] toArray()

Object toArray(Object array[])

49.List接口的使用方法有:-----有序 可重复

void add(int index,Object o)

boolean addAll(int index,Conllection c)

Object get(int index)

int indexof(Object o)

int lastIndexof(Object o)

ListIterator listIterator()

ListIterator listIterator(int index)

Object set(int index,Object obj)

List sumList(int start,int end)

50.Set接口的使用方法有; -----无序 不可重复 (只含一个null)

int size()

boolean isEmpty()

boolean contains(Object o)

boolean add(E o)

Iterator iterator()

Object[] toArray()

boolean remove(Object o)

boolean containsAll(Conllection c)

boolean addAll(Conllection c)

boolean removeAll(Conllection c)

boolean equals(Object o)

int hashCode()

51.SortedSet接口 ---保证迭代器按元素递增顺序遍历

Comparator comparator

Object first()

Object last()

SortedSet headSet(Object end)

SortedSet subSet(Object start,Object end)

SortedSet tailSet(Object start)

52.Iterator 接口

boolean hasNext()

Object next()

void remove()

53.Conllections 与 Conllection 的区别

Conllections 是集合类的一个辅助类,实现搜索、排序、线程安全等操作

Conllection 是类集的顶级接口

54.Conllection

List

LinkedList 线程非安全 能够实现堆栈 、队列 、双向队列

ArrayList 线程非安全 自增数组存储方法时

Vector 线程安全 自增数组存储方法时

Stack 线程安全 后进先出

Set

HashSet

TreeSet

Map

HashMap

hashtable

LinkedHashMap

SortedMap

TreeMap

55.List接口的实现类有:

1.LinkedList ---双向链表存储,按序号索引数据,需要进行向前或向后遍历--- 能够实现堆栈 、队列 、双向队列

constructor:

LinkedList()

LinkedList(Conllection c)

functions:

addFirst()

addLast()

getFirst()

getLast()

removeFirst()

removeLast()

注意:LinkedList是非同步的,必须使用外同步

List list = Conllections.synchronizedList(new LinkedList(……))

2.ArrayList 是对象引用的一个变长数组,非同步unsynchronzied

constructor:

ArrayList()

ArrayList(Conllection c)

ArrayList(int capacity)

注意:为非同步,必须使用外同步

3.Vector 类似ArrayList 但是是同步的,同步时抛出concurrentModificationException

constructor:

Vector()

Vector(int size)

Vector(int size ,int incr) incr 自增率

Vector(Conllection c)

functions:

addElement()

removeElement()

firstElement()

lastElement()

indexof()

lastIndexof()

4.Stack 栈类----继承了Vector,实现一个后进先出的堆栈,Stack仅仅定义了创建空堆栈的默认构造方法,

Stack提供了5个额外的方法,使得Vector被当做堆栈使用。

constructor:

Stack()

functions;

push()

pop()

peek()

search(Object o)

empty()

56.Set接口实现类:

1.hashSet

constructor:

HashSet()

HashSet(Conllection c)

HashSet(int capacity)

HashSet(int capacity,float fillRatio)

functions:

boolean add(E e)

如果此 set 中尚未包含指定元素,则添加指定元素。

void clear()

从此 set 中移除所有元素。

Object clone()

返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。

boolean contains(Object o)

如果此 set 包含指定元素,则返回 true。

boolean isEmpty()

如果此 set 不包含任何元素,则返回 true。

Iterator<E> iterator()

返回对此 set 中元素进行迭代的迭代器。

boolean remove(Object o)

如果指定元素存在于此 set 中,则将其移除。

int size()

返回此 set 中的元素的数量(set 的容量)。

注意:HashSet并非按add的顺序存储

57.TreeSet 是使用树结构来进行存储的Set接口提供了工具对象按升序存储,访问和检索速度快,

在存储大量需要快速检索的排序信息的情况下,TreeSet是一个很好的选择

constructor:

TreeSet()

TreeSet(Conllection c)

TreeSet(Comparator comp)

TreeSet(SortedSet ss)

注意:对象按升序存储的

A BOY WORD def ni o

58.Map接口(未继承Conllection接口)

它提供了key 到 value 的映射,Map中不能包含相同的key ,每个key只能映射一个value ,map中的内容被看做一个key集合

functions:

remove()

values()

equals(Object o)

K getKey()

V getValue()

int hashCode()

V setValue(V value)

59.Map实现类

1.Hashtable

constructor:

Hashtable()

Hashtable(int size)

Hashtable(int size,fillRatio)

functions:

put()

get()

Enumeration er = Hashtable对象.keys();

while(er.hasMoreElement){

Object o = er.nextElement();

Object v = hh.get(0);

sysout(0+"="+v);

}

注意;Hashtable 是同步的 而 HashMap是非同步的,所以HashMap的效率要高于Hashtable

2.HashMap

constructor:

HashMap()

HashMap(int capacity)

HashMap(int capacity,float fillRatio)

HashMap(Map m)

functions:

boolean containsKey(Object key)

boolean containsVaule(Object value)

V get(Object key)

V put(K key,V value)

V remove(Object o)

60.Hashtable与HashMap的区别

HashMap是Hashtable的轻量级实现,都完成了Map接口,主要区别在于HashMap允许null,由于非线程安全,效率上可能高于Hashtable,

HashMap把Hashtable的contains方法分为containsKey 和 containsValue ,Hashtable是继承Dictionary类,而HashMap则实现了Map接口

Hashtable 同步 HashMap 非同步

61.heap 与 stack

栈是有一个线性集合,是自动分配变量及函数调用时所使用的一些空间,地址由高向低减少的,栈接口后进先出的方式处理,

堆是由malloc之类的函数分配的空间所在地,地址有低到高增长

*************************************************

**************************************************************************************************

************DATABAS ############################ DATABASE*******************************************************************************************

**************************************************************************************************

*************************************************

Second Part--- Database

1.

CREATE DATABASE databasename

2.创建表创建数据库

CREATE TABLE tablename(

field-1 Datatype [(size)] [NOT NULL] PRIMARTY KEY,

field-2 Datatype [(size)] [NOT NULL],

……

)

3.建立索引

CREATE TABLE tablename(

field-1 Datatype [(size)] CONSTRAINT indexname OPTION,……)

其中:indexname 是索引名称

OPTION ; 1.UNIQUE

2.PRIMARY KEY

3.FOREIGN KEY

4.更改数据表结构

11.增加字段

ALTER TABLE tablename ADD COLUMN field-add Datatype [(size)]

22.改变字段类型

ALTER TABLE tablename ALTER COLUMN field-modify Datatype[(size)]

33.删除字段

ALTER TABLE tablename DROP COLUMN field-drop,field-drop2……

44.删除索引

ALTER TABLE tablename DROP CONSTRAINT indexname

55.删除数据表

DROP TABLE tablename

66.清空表

TRUNCATE TABLE tablename

5.增加数据

INSERT [INTO] tablename (field-1,field-2……)VALUES(V1,V2……)

INSERT [INTO] tablename VALUES(V1,V2……)

6.更新数据

UPDATE tablename SET newdata_set_expression [WHERE CONDITIONS]

7.删除数据

DELETE FROM tablename [WHERE CONDITIONS]

8.查询数据

SELECT (field-1,field-2……) FROM tablename [WHERE CONDITIONS]

11.表的别名表示

SELECT A.f1,B.f1 FROM tablename_1 AS A,tablename_2 AS B [WHERE CONDITIONS]

22.字段的别名

SELECT name AS 姓名,sex AS 性别 FROM user

33.使用谓词

SELECT DISTINCT FROM tablename

SELECT TOP n FROM tablename ORDER BY field DESC

9.WHERE子句

11.LIKE BETWEEN AND IN NOT AND OR = < > <= >= <> ? * %

注意;BETWEEN AND 用在日期型数据 ,则日期必须用"#"空起来

BETWEEN AND ~~~ MIN <= VALUE <= MAX

EXP: BETWEEN #1987-12-1# AND #2001-12-1#

10.ORDER BY 子句

ORDER BY field-1 (ASC|DESC),field-2(ASC|DESC)……

11.GROUP BY 子句

用于对记录进行分组,有它指定字段中所有值相等的记录会被归为一组,它通常要和汇总函数一起使用

12.统计函数

11.COUNT() 返回指定字段不为NULL的记录个数 COUNT(*) 所有记录

12.SUM() 返回指定数值型字段的总和

13.AVG() 返回指定数值型字段的平均值

14.MAX() 返回指定数值型字段的最大值

15.MIN() 返回指定数值型字段的最小值

13.JDBC PART

11.JDBC 连接数据库的步骤:

a.创建数据源

b.加载驱动程序

c.连接数据源

d.对数据库进行操作

12.加载驱动程序的方式:

JDBC-ODBC 桥接:sun.jdbc.odbc.JdbcOdbcDriver

Oracle 连接:oracle.jdbc.driver.OracleDriver

MySQL 连接:org.git.mm.MySQL.Driver

13.连接数据源

jdbc:<子协议>:<子名称>

jdbc:odbc:数据源名

jdbc:oracle:thin:@数据库服务器主机名:1521:SID

jdbc:MySQL:://localhost/<数据库名称>

14.对数据库的操作

1.DriverManager类

DriverManager是JDBC的管理层,作用于用户和程序之间,它跟踪可用的驱动程序,并验证每个驱动程序,

查看它是否可以建立连接,另外,DriverManager类可以处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。

Connection conn = DriverManager.getConnection(url,"user","password")

getDriver()

getDrivers()

registerDriver()

2.Connection 接口

Connection conn = DriverManager.getConnection(url,"user","password");

Statement s = conn.createStatement();

conn.close();

三种事务处理方法:

11.setAutoCommit(BooleanautoCommit) 设置是否自动提交

22.commit() 提交事务

33.rollback() 回滚事务

3.Statement 接口

ResultSet excuteQuery(String sql) --- SELECT

int excuteUpdate(String sql) --- INSERT UPDATE DELETE

boolean excute(String sql) ---

4.PreparedStatement 接口 继承 statement接口

setXXX()

excuteQuery()

excuteUpdate()

5.ResultSet接口

15.java 访问数据库的步骤如下:

1.注册驱动程序

2.建立连接

3.创建Statement

4.执行SQL语句

5.处理结果集

6.关闭连接

16.视图

1.视图是已存储的查询

2.视图隐藏了数据的复杂性

3.索引与表关联的可选结构

17.SQL Server 的系统数据库

1.master

2.tempdb

3.mode

18.当数据库的某一个表被删除时,约束和触发器也被删除

19.声明游标:DECLARE CUSOUR

20.处理结果集的中文乱码

new String (rs.getString("name")).getBytes("ISO-8859-1");

*************************************************

**************************************************************************************************

************ XML ############################ XML *******************************************************************************************

**************************************************************************************************

*************************************************

XML(xml 不是一种可执行的程序,它只是一种数据的载体,是100%的ASCII文本,用于独立平台间的数据交换)

声明:<?xml version="1.0" ?>

约束:<!DOCTYPE 根元素 “约束文件URL”>

独立:standalone =”yes“

转义字符:& = &;

< = <

> = >

" = "

' = &aops;

css

DTD 设置说明:#REQURED #IPMLIED #FIXED 直接使用默认值

DTD 属性类型:CDATA 普通的文本字符串(特殊字符用转义字符)

ENUMERATED 一组值中的某个(枚举)

实体定义:实体的本质就是为一段文本内容创建一个别名,

以后再XML文档中就可以多次引用这个别名

<!ENTITY 实体名称 ”实体内容“ >

<!ENTITY 实体名称 SYSTEM ”外部XML文档的XML“ >

实体=引用实体+参数实体

引用实体:&实体名称

参数实体:%实体名称

XML schema (定义xml 文档结构)

1.XML schema 与 DTD 的比较

XML schema 为xml文档

DOM、SAX 容易解析出schema的文档内容

XML schema 支持命名空间

XML schema 支持更多的数据类型,并支持用户自己定义数据类型

XML schema 定义约束的能力较强,可以对XML实例文档做出细致的语义限制

XML schema 不能定义实体

XML schema 编写比较繁琐

2.名称空间

URL (Uniform Resource Identifier)

URI (Uniform Resource Locator)

名称空间的声明

xmlns:当前名称="URI"

默认名称空间

xmlns="URI"

XML解析方式:

1.DOM ---将整个xml文件加载到内存中,然后对其节点进行操作 适合小文件 随机访问不同的节点

2.SAX ---动态加载,逐行加载并可使用已加载的内容 (触发式) 适合大文件 不能随机访问

3.STAX

4.XMLpull(android)

解析实现:

factory ---> builder ---> document

1.DOM

try{

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = builderFactory.newDocumentBuilder();

Document document = builder.parse(xmlFile);//获得解析后的xml

Element root = document.getDocumentElement();//获得root元素

String root_element_name = root.getNodeName();//获得root元素的名字

NodeList childNodes = root.getChildNodes();//获得root的子节点的个数

for(int i = 0 ; i < childNodes.getLength(); i++){

Node node = childNodes.item(i);

if("node".equals(node.getNodeName()){

sysout("\r\n找到一篇日记,所属分类:+node.getAttributes().getNamedItem("type").getNodeValue()+".");

NodeList nodeDetail = node.getChildNodes();

for(int j = 0 ; j < nodeDetail.getLength(); j++){

Node detail = nodeDetail.item(j);

if("name".equals(detail.getNodeName()){

sysout("姓名:"+detail.getTextContent());

}else if("sex".equals(detail.getNodeName()){

sysout("性别:"+detail.getTextContent());

}else if("address".equals(detail.getNodeName())){

sysout("地址:"+detail.getTextContent());

}else if("telephone".equals(detail.getNodeName())){

sysout("电话:"+detail.getTextContent());

}else if("email".equals(detail.getNodeName())){

sysout("Email:"+detail.getTextContent());

}else if("body".equals(detail.getNodeName())){

sysout("主题:"+detail.getTextContent());

}

}

}

}catch(Exception e){

e.printStackTrace();

}

2.SAX

factory ---> parser

File xmlFile = new File("d:\\memo.xml);

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

parser.parse(xmlFile,new MySaxListener());

*************************************************

**************************************************************************************************

************ UML ############################ UML *******************************************************************************************

**************************************************************************************************

*************************************************

UML 是一种标准的图形化建模语言,它不是一种可视化的程序设计语言,而是一种可视化的建模语言。

UML 贯穿在系统开发的5个阶段

1.需求分析 ---------- 用例图---表示客户的需求

2.分析 ---------- 逻辑视图和动态视图 (类图==系统的静态结构、协作图、状态图、序列图、活动图)

3.设计 ---------- 将分析阶段的结果扩展成技术解决方案

4.实现 ---------- 在构造或程序设计阶段,把设计阶段的类转换成某种面向对象程序设计语言的代码

5.测试 ---------- 对系统的测试分为单元测试、集成测试、系统测试和接受测试几个不同级别fsdf

UML 的图有:

1.用例图

2.类图

3.对象图

4.状态图---展示了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移,若需要描述跨越多个用例的单个对象的行为,使用它最为合适。

5.协作图---强调上下层次关系

6.活动图---强调的是对象间的控制流,显示工作流中的步骤和决策点,及完成每一步的角色和对象

7.组件图

8.展开图

9.序列图---用于按时间顺序对控制流建模,强调时间和顺序

10.交互图=序列图+协作图

注意:用例图=参与者+系统边界+用例

关联:——>

依赖:-->

继承:——|>

实现:--|>

聚合:——<>

开-闭原则:让设计的系统应当对扩展开放,对修改关闭

*************************************************

**************************************************************************************************

************ MVC ############################ MVC *******************************************************************************************

**************************************************************************************************

*************************************************

MVC 是把应用的输入、处理、输出按照Model、view、controller的方式进行分离

MVC 的核心部件

1.模型对象(MODEL):是应用程序的主体部分,主要进行数据和业务规则的处理,如EJB

2.视图(VIEW):是应用程序中负责生成用户界面的部分,如:Flash 、jsp 、html

3.控制器(controller):是根据用户的输入、控制用户界面数据显示的更新model对象状态部分,如:servlet

应用层 telnet 、ftp 、Email

传输层 TCP UDP

网络层 IP ICMP IGMG

链路层 设备驱动程序和接口卡

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

HTTP 80

FTP 21

TELNET 23

POPS 110

SMTP 25

*************************************************

**************************************************************************************************

************ 面试题 ############################ 面试题 *******************************************************************************************

**************************************************************************************************

*************************************************

1.爱因斯坦的阶梯

有一个长阶梯,

每步上 2阶 剩1阶

3 2

5 4

6 5

7 0

code:

public class stairs {

public static void main(String[] args) {

int x = 7;

for (int i = 1; i < 50; i++) {

if ((x % 2 == 1) && (x % 3 == 2) && (x % 5 == 4) && (x % 7 == 0)) {

System.out.println(x);

break;

}

x = 7;

x = x * i;

}

}

}

2.单例模式:

方法一:

public class Singleton {

private Singleton(){

}

private static final Singleton instance = new Singleton();

public static Singleton getInstance(){

return instance;

}

}

方法二:

public class Singleton{

private Singleton(){

}

private static Singleton instance = null;

public static synchronized Singleton getInstance(){

if(instance==null)

instance = new Singleton();

return instance;

}

}

3.判断是否为汉字的正则表达式:String rule = "[\u4e00-\u9fa5] ";

string.match(rule);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: