面试题总结

直接干货

1.面向对象的特征:继承,多态,封装
2.web请求中,get请求和post请求的区别:
web开发中Post和Get的区别,主要有这么几点
1).Get是从服务器上获取数据,Post是向服务器传送数据。
2).Get是把参数数据队列加到提交表单的Action属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。
Post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML header内一起传送到Action属性所指向的URL地址。用户看不到这个过程。
3).对于Get方式,服务器端用Request QueryString获取变量的值,
对于Post方式,服务器端用Requst Form获取提交的数据。
4).Get传送的数据量较小,不能大于2KB。
Post传送的数据量较大,一般被默认为不受限制。但理论上,IIS中的最大量为80KB,IIS5中位100KB。
5).Get安全性比较低,Post安全性较高。但是执行效率却比Post方法好。
建议:
1.Get方式的安全性较Post方式要差些,包含机密信息的话,建议使用Post数据提交方式;
2.在做数据查询时,建议用Get方式;而在做数据添加;修改、删除时,建议使用Post方式;
3.java中int是什么类型的,integer是什么类型?他们有什么区别
int 是基本数据类型 基本类型
Integer是其包装类 引用类型
Integer是java为int提供的封装类。
int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,
int则无法表达出未赋值的情况
4.java中String和StringBuffer有什么区别
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.

StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
注意:不能通过赋值符号对它进行付值.
区别:
1)String的联合+方法与StringBuff的append方法的区别:
String的+运算符在进行字符串运算时,首先将当前的字符串对象转换为StringBuff 类型,调用其append方法,最后再将生成的StringBuff 对象通过其toString 方法转换为String类型的字符串,所以其效率要低。
但是在可读性上,还是String的连接运算符要高。
2)StringBuff是线程安全的
String是线程是非安全的
3)String是不可以修改的字符串对象,而StringBuff是可以修改的。
5.请说明操作系统中线程和进程的概念和区别
进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。
而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。
   线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
   线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退 出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数 器、一组寄存器和栈)。
6.请列举出java中的容器,说明他们的特点和使用场合
http://www.cnblogs.com/zhenjing/archive/2013/04/25/java_Container.html
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│└Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
http://blog.csdn.net/wwww1988600/article/details/8646191
7.heap和stack有什么区别
1.heap是堆,stack是栈。
2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。
3.stack空间有限,heap的空间是很大的自由区。
4.在Java中,若只是声明一个对象,则先在栈内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。
举例:数据类型 变量名;这样定义的东西在栈区。如:Object a =null; 只在栈内存中分配空间new 数据类型();或者malloc(长度); 这样定义的东西就在堆区如:Object b =new Object(); 则在堆内存中分配空间
8,请说明jvm中gc的原理和作用
http://blog.csdn.net/tonytfjing/article/details/44278233
9.值传递和引用传递的概念,java代码举例:
Java中只有传值
void method1(){
int x=0;
this.change(x);
System.out.println(x);
}

void change(int i){
i=1;
}
在mothod1中执行了change(x)后,x的值并不会因为change方法中将输入参数赋值为1而变成1,也就是说在执行change(x)后,x的值z依然是0。这是因为x传递给change(int i)的是值。这就是最简单的传值。
10.java语言中用于异常处理的关键字有哪些
throws是获取异常
throw是抛出异常
try是将会发生异常的语句括起来,从而进行异常的处理,
catch是如果有异常就会执行他里面的语句,
finally不论是否有异常都会进行执行的语句。
11.final,finally,finalize的区别
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
12.什么是mvc
MVC包括三类对象。Model是应用对象,View是它在屏幕上的表示,Controller定义用户界面对用户输入的响应方式。
模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。
1、模型(Model)
模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑.
2、视图(View)
视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。
3、控制器(controller)
控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。
13.sleep()和wait()有哪些区别
sleep指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。
wait指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不增加时间限制。
14.sql:查询出每门课都大于80分的学生名字
先查出低于80分的学生名单,然后再用姓名作为条件对比,排除刚才查到的学生
SQL Server:
select distinct [Name] from [表] where [Name] not in (
select [Name] from [表] where [fengshu]<=80
)
15.不正确,去掉{}
抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。
16,不正确,去掉final
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;
如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
17.编译错误
在非静态方法中不可以定义静态变
18。输出 0
2
19.输出
parent static code
***********
child static code
parent constructor
parent a =10
child constructor
child a =20
20.将俩个有序数组(从小到大)进行合并

public int[] getArraySort(int[] m,int[] n){
int im = 0; //数组m的起始位置,用于数组m下标计数
int jn = 0;
int[] mn = new int[m.length + n.length]; //排序后新数组大小

while(im < m.length && jn <n.length){
if(m[im]<=n[jn]){
mn[im + jn] = m[im];
im++;
}else{
mn[im + jn] = n[jn];
jn++;
}
}
//其中一个数组最后的元素值小于第二个数组的某个元素值,遍历第二个数组剩余元素值加入新数组
while(im < m.length){
mn[im + jn] = m[im];
im++;
}
while(jn < n.length){
mn[im + jn] = n[jn];
jn++;
}
return mn;
}
21将字符串的单词顺序进行反转
String reverse(String str){
char[] splits = ", ".toCharArray();
Set<Character> splitCharSet = new HashSet<Character>();
for(char split:splits){
splitCharSet.add(split);
}
StringBuilder reverseStr = new StringBuilder();
StringBuilder rsIndex = new StringBuilder();
Character indexChar;
for(int i=str.length()-1;i>-1;i--){
indexChar = Character.valueOf(str.charAt(i));
if(!splitCharSet.contains(indexChar)){
rsIndex.append(indexChar);
}else{
reverseStr.append(rsIndex.reverse()).append(indexChar);
rsIndex.delete(0, rsIndex.length());
}
}
reverseStr.append(rsIndex.reverse());
return reverseStr;
}
22设计模式
http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

你可能感兴趣的:(面试题总结)