二.java技术方面的常见问题?
1.String是基本数据类型么?
答:不是基本数据类型,基本数据类型有8种,byte,int,char,long,float,double,boolean和short。
引用数据类型包括:类,数组,借口等(简单来说就是除了基本数据类型之外的所有类型),所有呢String是引用类型。
2.int 和 Integer 有什么区别?
答:int 是基本数据类型
Integer是其包装类,注意是一个类。
为什么要提供包装类呢???
一是为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化。
比如,现在int要转为String
int a=0;
String result=Integer.toString(a);
在java中包装类,比较多的用途是用在于各种数据类型的转化中。
我写几个demo
//通过包装类来实现转化的
int num=Integer.valueOf("12");
int num2=Integer.parseInt("12");
double num3=Double.valueOf("12.2");
double num4=Double.parseDouble("12.2");
//其他的类似。通过基本数据类型的包装来的valueOf和parseXX来实现String转为XX
String a=String.valueOf("1234");//这里括号中几乎可以是任何类型
String b=String.valueOf(true);
String c=new Integer(12).toString();//通过包装类的toString()也可以
String d=new Double(2.3).toString();
再举例下。比如我现在要用泛型
List<Integer> nums;
这里<>需要类。如果你用int。它会报错的
3.JAVA中几种集合(List、Set和Map)的区别?
答:
list和set是继承collection接口
list里面包含arraylist和linkedlist,
这里给你举个linkedlist的例子吧:
LinkedList array = new LinkedList();
Integer i = -1;
array.add("The");
array.add("woods");
array.add("Lovely");
array.add("deep");
array.addFirst(i);
如果你指的第一个和第三个分别是-1和woods的话就是这样的
array.remove(1-1);
array.remove(3-1);
如果是the和lovely的话就是这样的
array.remove(1);
array.remove(3);
map里面包含hashmap和treemap,hashtable.
set里包含hashset和linkhashset。
List特点:元素有放入顺序,元素可重复 。
arraylist添加删除费劲linkedlist查询费劲
set特点:元素无放入顺序,元素不可重复,eg:
Set set=new HashSet();
set.add(new Date()); //向列表中添加数据
set.add("apple"); //向列表中添加数据
map特点:键值对,键不能重复
4.list和arraylist区别?
答:arraylist是一个类实现了list接口里边定义的方法,Arraylist采用的是数组形式来保存对象的,这种方式将对象在连续的位置中,所以最大的缺点就是插入删除时非常麻烦,
linklist采采用的是将对戏那个存放在独立的空间中,而且在每一个空间中还保存下一个连接的索引,但是缺点就是查找起来非常的麻烦,要从第一个索引开始查询。
5.HashMap和Hashtable的区别?
答:都属于map接口的类,键值对的方式存储数据,
Hashmap让存null,
Hashtable不让存放null.
hashtable.put(1,"女神");
6.hashmap中添加和提取数据,删除数据?
答:添加:put(),
获取:get(索引,值),
删除:remove(索引);
7.list中常用的方法?
答:
循环遍历的三种:
(1)List<Integer> list=new ArrayList<Integer>(); while(it.hasNext())
{
System.out.println(it.next());
}
(2).for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
(3).for(Object o:list)
{
System.out.println(o);
}
8.&和&&,||,|的区别?
答:&&并且的意思判断第一个是true在判断第二个,&两边都要判断。eg:
.当使用&&(短路与)时,则相反,当前面的表达式结果为假时则不会再执行后面的表达式,直接得出FALSE的结果,代码如下
当使用|时,若前面的表达式为真时,程序会继续执行后面的表达式,然后在得出TRUE的结果,代码如下:
当使用||(短路或)时,若前面的表达式结果为真,则程序不会再执行后面的表达式,直接得出TRUE的结果,代码如下:
9.public,friendly,protected,private的区别?
答:
public权限最大
protect不同包的其他类不可用
friendly子类不能调用(什么都不写的时候)
private只能本类调用
10.方法重载和重写的区别?
答:这是两个东西,
重载在一个类里面方法名相同,参数不同的两个方法
重写是在不同类里面的而且必须是集成关系,返回值类型和参数必须相同
11.接口和抽象类的区别是什么?
答:当你父类方法不确定的时候,那个就推出了抽象方法,
抽象类是继承,接口是被实现的。
java中一个类不能直接继承两个类比如说这样: class A extends B,C 不能这样写,因为java不支持多继承,一个子类只能有一个父亲,子类会继承父类的所有属性和方法,除了构造方法和私有的属性和方法。 但是你可以像下面这样实现继承多个类 class A extends B class C extends A 这样C就同时继承了B和A两个类
这个时候就引入接口,接口是多继承的
12.堆和栈的区别?
答:java中为了提高效率,就对数据进行了不同空间的分配,一下五个区域
(1)栈存储局部变量,局部变量有那些:在方法定义中或者在方法声明上定义的变量都称为局部变量
(2)堆存储new出来的东西,
(3)方法区
(4)本地方法区(和系统相关)
(5)寄存器(cpu使用)
13.hashcode是干什么用的?
答:hashcode 生成一个对象的码,equals可以比较两个对象内容相等,hashcode可以判断两个对象是否是一个对象,
所以判断两个对象是否相等必须同时判断equals和hashcode相等。
(1)对象相等则hashcode一定相等
(2)hashcode相等对象未必一定相等。
14.equals方法跟==有什么区别?
答:表示地址和值
15.静态变量和实例变量的区别?
答:static
类的静态变量在内存中只有一个,而实例变量取决于类的实例。
每创建一个实例,就会生成一个实例变量,而且生命周期也不同。
16.final,finally,finalize,friend的区别?
答:friend表示在碧昂辆中没有任何修饰符
final是一个关键字,定义完变量就不能改变了,
finally是处理 异常用到的,
finalize是一个垃圾回收器准备释放内存方法。
17.String能否被继承?
答:不能被继承,因为它是final,常量
18.Final类有什么特点?
答:
属性常量
方法不可以overridding
类不可以继承
19.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其
它类,是否可以implements(实现)interface(接口)?
答:不能被继承,一个内部类可以做为接口,由另一个内部类实现。
eg:接口内部类:我没有实现这个接口,但是我想用调用它里面的方法,又称只为回调,这个方法只会被使用一次的时候,
重写了接口里的抽象方法,然后这接口就能new了
:
20.什么时候用assert?
答:assert表示断言,assert 接boolean表达式。boolean是true程序
继续执行,是false抛出一个异常并输出后面的语句
21.GC是什么? 为什么要有GC? (基础)
答:不用担心内存管理,垃圾回收器会自动进行管理,要请求垃圾回
收
就调用下面的方法
system.gc();
Runtime.getRuntime().gc();
22.Collection 和 Collections的区别?
答:
Collections是个java.util下的类,它包含有各种有关集合操作的静
态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
(collections.sort(集合或者数组)排序)
23.数组有没有length()这个方法? String有没有length()这个方法?
答:数组有length属性,String有length方法。
24.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
答:Set里的元素是不能重复的,那么用迭代器iterator()方法来区分。
25.常见的异常有那些?
答:一般Exception结尾
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
。数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException
26.异常和错误的区别?
答:
Error表示系统级的错误和程序不必处理的异常,
Exception表示需要捕捉或者需要程序进行处理的异常。
27.常见的错误error有那些?
答: 内存资源不足,系统崩溃, 方法调用栈溢出
一般以Error结尾把。
28.“static”关键字是什么意思?java中是否可以覆盖(override)一个private或者是static的方法?
答:static是静态的意思,一旦将什么东西类方法属性也好,设为了static就不会同那个类或者对象实类联系到一起,不创建这个类的对象也能调用这个方法,如果在这个东西statci前面加上private,就会给他加上一个范围,比如在这个类里面的函数定义了一个private那么别的类就不能调用了,static方法是可以被覆盖的。
29.构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被
重载Overloading。
30值传递和引用传递的区别?
答:java中数据类型分俩大类,基本类型和对象类型,相对应的变量也有两种类型,基本类型和引用类型,基恩类型的变量保存原始值,即它代表的值是数值本身;
而引用类型的变量保存引用值,“引用值”指向内存空间的地址,代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所在的地址的位置。
基本类型包括:byte,short,int,long,char,float,double,boolean,returnAddress,
引用类型包括:类类型,接口类型和数组。
引用传递值会发生变化的,值传递不会发生变化的
31.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答:对象当参数在方法中传递时候,值发生了变化是值传递,java语言中传递参数只有值传。
32.super()与this()的区别?
答:this调用本类的对象,super()调用父类的对象。
33.在JAVA中,如何跳出当前的多重嵌套循环?
答:用break; return 方法。
34.笔试题中常遇到的基本数据类型的问题?
答:一些问题是越界,转换异常等:
当然如果还是不够那么还有一个类叫BigDecimal
不同进制:2,8,16进制的不同写法
long a=123(这里的123是int类型) long a=123L(这里的123就是long类型)
long a=10000000000000//就会报错因为超出了int类型范围了。
35.排序都有哪几种方法?请列举。用JAVA实现一个快速排序?
答:冒泡排序:
for(int i=0;i<n-1;i++)
{
for(int j=i;j<n-1;j++)
{
选择排序:就是我们学的擂台排序法。
插入排序:插入排序的原理是对数组中的第i个元素,认为它前面的
i-1个已经排序好,然后将它插入到前面的i-1个元素中。插入排序对
少量元素的排序较为有效.
int []a ={1,2,3,4,5,6};
int []b=new int[7];
c=7(插入的数字) ,d=2(插入的位置)
for(int i=0;i<b.length;i++){
if(i<2){
b[i]=a[i]
}else if(i==2){
b[2]=7
}else{
b[i]=a[i-1];
}
}
36.String对象的常见方法?
答:
length()字符串的长度,
charAt():截取一个字符,eg:h=“abc”,h.charAt(1)='b'
getchars()截取多个字符
getBytes()eg:.getBytes("UTF-8");
equals和equalsIgnoreCase()比较两个字符串
startsWith()和stratswith()方法决定是否以特定
indexof(),lastIndexof()
substring()
concat()连接两个字符串
replace()替换
trim()去掉空格
valueOf()转化为字符串
tolowerCase(),toupperCase转化成大,小写
StringBuffer,append()可以把字符串连接在StringBuffer后面
split()把字符串分割成字符串数组
delete()和deleteCharAt删除字符串
reverse()点到StringBuffer对象中的字符
insert()插入字符串
37.如何让一个方法延迟5秒才执行
答:线程中有sleep(),也有timer对象。
38.如何将1个G的数据最快速度存放进C盘中?
答:(1)public class Test01 {
public static void main(String[] args) throws Exception{
getInputStream("C:\\setup.log","D:\\a.txt");
}
private static void getInputStream(String pathName,String copyName)throws Exception{
File file = new File(pathName);
if(!file.exists())
throw new RuntimeException("文件不存在呀,你Copy个屁!");
else{
getCopy(copyName,new BufferedInputStream(new FileInputStream(file)));
}
}
private static void getCopy(String copyName,BufferedInputStream bis)throws Exception{
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(copyName));
BufferedInputStream biss = bis;
byte[] b = new byte[biss.available()];
int len = 0;
while((len = biss.read(b))!=-1){
bos.write(b, 0, len);
}
bos.close();
biss.close();
System.out.println(copyName+"复制成功!");
}
39.mvc是什么?
答:
m-model模型层就相当于数据访问层和业务逻辑层,
v-view视图层就相当于jsp,
c-control-控制层 小型的项目就用jsp+servlet,企业级的框架就是ssh.
40.javase,javaee,javame都是表示什么意思?
答:javase是开发桌面程序的,javaee是开发网站的,
javame是为机顶盒,移动电话编写的。
41.java中clone()方法是干什么用的
答:复制的意思
eg:person p=new person(23,"zhang");
person p1=(pserson)p.clone();
这个就是真真正正克隆了一个对象;
42.讲一讲单例模式?
答:什么是单利模式官方给出的说话就是两句话:
确保一个类只有一个实列(也就是类的对象),并且提供一个访问点,外面可以通过这个访问点来访问这个类,
类似于servlet,springmvc控制器对象都是单例模式,注意了strust2是多例模式,每次请求产生一个action的对象。
43.什么是简单工程模式?
答:专门定义一个类来负责创建其他的实例,被创建的实例通常都具有共同的父类,它又被称为静态工厂模式。
44.php和.net和java的区别是什么?
答:从本质上说没什么什么区别,他们都是开发语言,
他们的主要区别就是受用群体不同,
.net:付费开发网站一般中小型企业和界面的开发比较多。
java,开源的,更实用与中大行企业,因为它发展比较长所有它对一些项目中遇到的问题有很多解决方案。
php开源的,用于一些小型项目,因为它效率比较高。
45.泛型是什么意思?
答:不管是类还是方法,表示他是用的类型其中那种,如果省略<>表示都可以用。
46.orm框架是什么?
答:ORM有映射关系的一种框架,对象会对应一个xml文件的映射,而且对象的方法可以放在映射里面存放。
47什么是token,怎么用?
答:token是服务器端生成的一个字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成了一个token便将此返回给客户端,以后客户端只需要带上这个token前来请求数据即可,无需再次带上用户名和密码。
token的目的是为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库。
怎么用:
(1).服务器会生成一个uuid,服务器会把这个uuid直接存到数据库里面,然后在将这个token值返回给客户端
(2)客户端拿到token值之后,使用sp进行保存。
(3)以后客户端在发送网络请求(一般不是登录请求)的时候,就会将这个token值附带到参数中发送给服务器。
(4)服务器接受到客户端请求后,会取出token值与保存在本地(数据库)中的token值做对比
eg:
48.java的核心优势是什么?
答:电脑和电脑之间通过互联网连在了一起,但是没个电脑的系统都不一样,这个时候我们需要一个语言可以在任何的系统上面跑,就出了java语言跨平台么,而且java发展悠久所以java遇到的问题比较完善。
49.jdk,jre,jvm是什么,什么关系,用来干什么怎么用?
答:jdk是java开发工具包,jre是java运行时环境,jvm是java虚拟机,jdk包含jre,jre包含jvm,
java虚拟机是用来执行java自解码文件,jre可以帮助我们加载一些外部的环境
50.什么是微服务?
答:就是把一个大项目放到不同的服务器上开发,把功能拆开放到不同的服务器上降低他们之间的耦合性。
51.cs和bs的区别?
答:cs是客户和服务器模式,比如说qq
bs是服务器和浏览器,比如说p2p
52.什么是分布式开发?
答:将一个项目分布到不同的服务器上 ,通过网络来共同完成,也包括数据库也分布在不同的计算机上,来完成一个任务。
53.javaweb项目中权限管理怎么设计的?
答:普遍设计三个表,一个用户表(user),角色表(role),资源表
(Resource)
54.分布式和集群的区别?
答:分布式是以缩短单个任务执行时间来提高效率,而集群则是通过提高单位时间内的任务来提高效率。例如:
如果一个任务由10个子任务组成, 每个子任务单独执行时间是一个小时,则一台服务器上执行任务需要10小时(这个模式是典型的分布式开发模式)
而采用集群方案,同样提供10台服务器,每个服务器都能单独处理这个任务,假设有10个任务同时达到,10服务器将同时达到这样整体来看就是1个小时内完成的任务。
55.web service和htttp有什么区别?
答:web service采用http协议传送数据,采用xml格式封装数据,web service是http封装的。
webservice=http+xml数据格式
56.什么是事物?
答:所有的操作,增删改查都算上,必须成功完成,否则在每个操作中所作的所有更改都会被撤销,一个操作要么全部成功要么一个也别做。
57.什么是terminal?
答:terminal是链接linux操作shell脚本的插件。
58.master-slave这个模式是什么意思?
答:主从的意思,一般来说用在数据集群比较多,主要是实现读写分离,对于数据库而言,基本上都是读大于写的,而slave可以有好多台,slave与master之间存在心跳数据包,当master有数据写入时候master会将数据同步到各slave上,如果数据库采用master-slave的话,我们的代码不需要进行修改,eg:对于mysql要实现master-slave需要借助第三方代理工具
59.解释一下线程和进程?
答:一个程序员需要最少需要一个进程,而一个进程最少需要一个线程,所以线程是程序执行的最小单位。
60.计算机的发展历史?
答:更加容易被人使用,功能更加强大。
机器语言(0,1二进制代码)冯诺依曼体系结构=>汇编语言(用单词来描述0,1,0,1指令)=>高级语言(c(贝尔实验室),java(核心优势是跨平台(我电脑是windows,服务器可以是linuxe,),去除了c++一些难以理解的特性,),c#(不能跨平台,window不是主流,linuxe是主流的))
61.jdk,jre,jvm是什么?
答:
jdk是java开发工具包,jre是java运行时环境,jvm是java虚拟机
jdk里面包含jre,jre里面包含jvm的关系
jdk就是一个软件,包括了java运行环境,java工具和java的基础类库。
虚拟机就是用来解析java代码用的。
62.java为什么能跨平台呢?
答:,我希望写的程序可以在Linux上面跑,可以在windows里面跑,可以在苹果系统里面跑,jdk里面有不同的虚拟机有linux,有windows的,有苹果的虚拟机,它写了三个版本,首先sun公司定义一个虚拟机的规范,他们就可以用不同语言来写一个虚拟机的规范,扩展一下:
虚拟机就是一种规范,你可以用软件来实现,也可以用硬件来实现,有了虚拟机就能解析java文件执行程序。
我在记事本里写的一个.java文件,然后编译称.class文件,在用jvm解析就是一个程序啦,这个.class就是你写public static class
而且一个java文件可以生成很多class文件: