java经典面试、笔试题(基础题)

java经典面试、笔试题(基础题)

说说java语言的版本特性有哪些?
java8的十大特性
1、lambda表达式
2、接口的默认方法和静态方法
3、方法引用
4、重复注解
5、扩展注解的支持
6、optional
7、Stream
8、Date、Time Api
9、javascript引擎nashorn
10、base64

一个.java文件中,是否可以拥有多个类,有什么限制?
可以拥有多个类,但是只能有一个public类,而且public类名要和文件名一致

java有没有goto
goto:Java中的保留字,现在没有在java中使用

java和JavaScript的区别
java是原sun公司推出的一种面向对象的程序设计语言,特别适用于Internet应用程序开发
JavaScript是Netscape公司为了扩展NetScape浏览器的功能而开发出一种嵌入web页面中运行的基于对象和事件驱动的解释性语言
比较:
java是一种真正的面向对象的语言,即使是开发简单的程序,也必须设计对象
javascript是一种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件
java源代码执行前必须经过编译,javascript不需要经过编译,而是由浏览器解释执行
java采用强类型变量检查,javascript在使用变量前不需要做声明,而是解释器在运行时检查其数据类型
java是静态语言,javascript是一种动态语言

int和Integer有什么区别
int是基本数据类型
Integer是int的封装类
Integer必须实例化之后才能使用,int不需要

&与&&的区别
&和&&都可以用作逻辑与的运算符,表示逻辑与
&&为短路与,&不是短路与
&&之所以被称为短路与,是因为如果&&左边的表达式为false,则右边的表达式就会直接被短路掉,不会进行运算

在Java中如何跳出当前的多重嵌套循环?
在java中跳出多重嵌套循环的话,可以在外边的循环语句前定义一个标号,然后在里层循环体的代码中使用break即可跳出循环

==和equals方法有什么区别
**equals和==**最大的区别就是,一个是方法,一个是运算符
**==**如果是比较基本数据类型,则比较的是数值是否相等,如果比较的是引用数据类型,则比较的是对象的地址是否相等
equals用来比较方法的两个对象的内容是否相等

静态变量和实例变量的区别
静态变量前要加上static关键字,实例变量不需要
实例变量属于某个对象的属性,必须创建实例对象,才能使用实例变量,静态变量不属于某个实例对象,而是属于类,所以也称类变量,只要程序加载了类的字节码,不用创建任何实例变量,就可以使用静态变量

说出作用域public private protected 以及不写的区别
当前类 同包 子类 不同包
public V V V V

private V X X X

protected V V V X

default V V X X

String和StringBuffer、StringBuilder的区别
String:字符串常量,在修改时不会改变自身,若修改,等于重新生成新的字符串对象
StringBuffer:在修改时,会改变对象自身,每次修改都会对StringBuffer对象本身进行修改,不会生成新的对象
String:对象定义后不可变,线程安全
StringBuffer:线程安全,执行效率比较慢,适用于多线程下字符串缓冲区大量数据
StringBuilder:线程不安全,适用于单线程下曹组字符串缓冲区大量数据
StringBuffer和StringBuilder有一个共同的父类,调用公共的方法,只是StringBuffer会在方法前加上synchronized关键字,进行同步
如果不是多线程,则StringBuilder比StringBuffer效率更高

面向对象的特征有哪些
面向对象有三大特征:封装性、继承性、多态性
继承:从已有类得到继承息创建新类的过程
封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口
多态性:多态性是指允许不同子类类型的对象对同一消息做出不同的响应
抽象:抽象是将一类对象的共同特征总结出来构造类的过程

什么是oop,oop对于面向过程编程
oop是面向对象编程,面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节
oop关注对象和角色,也就是事务本身
oop把客观世界中的对象抽象成对应的类
通过类构造实例
通过依赖。继承。实现等形式建立对象间的通信关系
oop易于扩展,增加或改变业务的功能,无需大幅改动或改变源代码
oop易于建模,oop就是软件架构师在计算机高级语言中对客观世界的抽象和再现,人们可以很好的立即和建立起计算机中的抽象模型

Java中实现多态的机制是什么
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法

overload和override的区别,overloaded的方法是否可以改变返回值的类型
overload是重载,override是重写
overload重载表示一个类中可以有很多相同名称的方法,但这些方法的参数列表不相同
override重写表示子类在的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现
如果几个overloaded的方法的参数列表不一样,他们的返回类型也可以不一样,如果两个方法的参数列表完全一样,是否可以让他们的返回值不同来实现方法重载,这是不行的

构造器Constructor能否被重写
不能被继承,不可以重写,可以被重载

接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可继承具体类?抽象类是否可以有静态的main方法
接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类可以有静态的main方法

描述一下JVM加载class文件的原理机制
java中类的装载是由类加载器和它的子类来实现的,java中的类加载器是一个重要的java运行时系统组件,它负责在运行时查找和装入类文件中的类

char型变量中能不能储存一个中文汉字?为什么
可以储存,因为java中使用的编码是Unicode,一个char类型占两个字节,所以可以储存一个汉字

abstract class 和interface有什么区别
含有abstract修饰符的类则为抽象类,抽象类不能创建实例对象,含有抽象方法的类也必须定义为抽象类,但是抽象类中不一定要有抽象方法
接口中的方法必须是抽象的,接口中的方法默认为 public abstract,接口中的成员变量类型默认是public static final

java中会存在内存泄漏吗?请简单描述
理论上java有垃圾回收机制,不会存在内存泄漏,但是在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收也会发生内存泄漏

抽象方法是否可同时是静态的,是否可同时是本地方法,是否可以被synchronized修饰
都不能,抽象方法需要子类重写,而静态方法是无法被重写,本地方法由本地代码实现的方法,而抽象没有,synchronize和方法的实现细节有关,抽象方法不涉及细节

如何实现对象克隆
有两种方式 1:实现Cloneable接口重写Object类中的clone方法
2:实现Serializable接口,通过对象的序列化和反序列化实现克隆

String是最基本的数据类型吗
不是,基本数据类型是byte int char boolean short float double long

是否可以继承String
不能,因为String被定义为final,无法继承

final finally finalize的区别
final声明属性,方法和类,表示属性不可变,方法不可覆盖,类不可继承
finally是异常方法结构的一个部分,表示总是执行
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收

运行时异常与一般异常有何异同
异常表示程序运行过程中可能会出现非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误

java中异常分为哪些种类
编译时异常,运行时异常

error和exception有什么区别
error表示回恢复不是不可能但是很困难的情况下的一种严重问题,exception表示一种设计或实现问题

java中异常处理机制的简单原理和应用
异常是指java程序运行时所发生的的非正常情况或错误,java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示,该对象中包含异常的信息
异常有一个根类,Throwable类,这个类又有两个子类,error和exception,error表示一个程序基本上是必死的,exception表示还能克服和恢复的问题
一般程序中有可能出现异常的地方,都会加上try catch 或者throws抛出异常

请你写出最常见到的5个runtime exception
java.lang.nullPointerException 空指针异常
java.lang.classNotFoundException 指定类找不到
java.lang.numberFormatException 字符创转换异常
java.lang.indexOutOfBoundsException 下标越界
java.lang.classCastException 数据类型转换异常

sleep和wait有什么区别
sleep是Thread类的方法,使此线程先进入睡眠,让其他线程先执行,等到sleep的指定时间后,该线程则会继续执行
wait是Object类的方法,表示此线程放弃对象锁,进入等待锁定池,只有针对此对象发出notify或者notifyall方法后,才会进入对象锁定池拿到对象锁进入执行状态

同步和异步有什么区别,在什么情况下分别使用他们
如果数据在线程间共享,那么这些数据就是共享,则必须进行同步存取
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,很多情况下采用异步更有效率

启动一个线程是用run方法还是start方法
start,start方法使线程变成就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run方法是该线程所关联的执行代码

线程的基本概念,线程的基本状态以及状态间的关系
线程是指进程中的一个执行流程,是进程的一个实体,是cpu调度和分派的基本单位。
调用线程的start方法进入就绪状态,线程调度系统就把就绪的线程转为运行状态,遇到synchronized变为阻塞,当synchronized获得锁后,由阻塞变成运行,任何调用wait方法转为挂起状态,当线程关联的代码执行完成后,变为结束状态

HashMap和hashtable个有什么特点,他们的区别是?
都实现了Map接口,主要的区别有线程安全性,同步,以及速度
hashmap不支持异步,hashtable支持异步
hashtable线程是安全的 hashmap线程不安,所以在多线程中使用hashtable更号,在单线程中使用hashmap效率会更高

list、set、map的特点和区别
list:可以允许有重复对象,有序,可插入多个null元素
set:不允许有重复对象,无需,只允许有一个null元素
map:不是collection的子类或实现类,是一个接口,以key value的形式储存数据,可以拥有随意个null值,但只能有一个null键

说出ArrayList、vector、linkedList的储存性能和特性
ArrayList和vector都是使用数组的方式储存数据,数组元素数大于实际储存的数据以便于插入数据元素,允许直接按序号索引元素,但是插入涉及数组元素移动等内存操作,索引数据快,插入数据慢
vector使用了synchronized,通常性能上ArrayList差,线程安全
linkedList使用双向链表实现储存,索引数据需要遍历,但是插入数据只需要记录本项的前后项即可,索引数据慢,插入数据快,线程不安全

java中ArrayList和linkedlist区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

线程和进程的区别
进程:指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。
线程:是指进程中的一个执行流程,是进程的一个实体,是cpu调度和分派的基本单位。
线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存单元相互独立,线程之间内存共享
注意:多线程不友好,占大量cup资源

请说出线程同步以及线程调度相关的方法
wait:让一个线程处于阻塞状态,释放对象锁
sleep:让线程进入睡眠状态,是一个静态方法,需要捕捉或抛出异常
notify:唤醒一个处于等待状态的线程,不能唤醒指定的线程,而是由jvm自己去唤醒
notifyall:唤醒所有处于等待状态的线程

编写多线程有几种实现方式
两种,继承thread类,实现runnale接口

什么是线程池
线程池顾名思义就是事先创建若干个可执行的线程放入一个容器中,需要的时候从池中获取,使用完毕不需要销毁,而死发放回池中,从而减少创建和销毁的开销

线程池有几种
java中通过Executors提供四种线程池
FixedThreadPool 线程数固定的线程池
SingleTreadExecutor 会按照先后顺序执行的线程池
CachedThreadPool 缓存线程池
cheduleThreadPool 定长的线程池

collection和collections的区别
collection是集合类的上级接口
collections是针对集合的一个帮助类,提供一系列静态方法实现对各种集合的搜索,排序,线程安全化等操作

说出一些常用的类,包,接口

java.lang
java.util
java.io
java.sql
java.javax

Date List HashMap Thread System
接口
List Map Set Servlet HttpRequestServlet

字节流与字符流的区别
Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据
Java中的字符流处理的最基本的单元是Unicode码元,它通常用来处理文本数据

数组和链表的区别
链表是链式的存储结构;数组是顺序的存储结构
链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。
数组寻找某个元素较为简单,但是插入和删除比较复杂,最大长度需要在编程一开始的时候0指定,当到最大长度的时候,扩充的长度不如链表方便

什么是java序列化,如何实现java序列化,请接收Serializable接口的作用
序列化就是一种用来处理对象流的机制,对象流就是将对象的内容进行流花
实现:将需要被序列化的类实现serializable接口,该接口没有实现的方法,然后使用一个输出流来构造一个objectOutputStream对象,然后使用objectoutputStream对象的writeobject方法就可以将参数为obj的对象写出

描述一下JVM加载class文件的原理机制
java中类的装载是由类加载器和它的子类来实现的,java中的类加载器是一个重要的java运行时系统组件,它负责在运行时查找和装入类文件中的类

谈谈jvm的内存结构和内存分配
java虚拟机将其管辖的内存大致分为三个逻辑部分:方法区,java堆,java栈
方法区是静态分配的,编译器将变量绑定在某个储存位置上,而且这些绑定不会在运行时改变
java栈是一个逻辑概念,特点是先进后出,一个栈的空间可能是连续的,也可能是不连续的
java堆意味着随意的顺序,在运行时进行储存空间分配和收回的内存管理模型
基础数据类型直接在栈空间分配
方法的形式参数,直接在栈空间分配,方法调用完成后从栈空间回收
应用数据类型需要用new创建,在栈空间分配一个地址空间,也在堆空间分配对象的类变量
方法的引用参数在栈控件分配一个地址空间,并指向堆空间的对象区,方法调用完成后从栈空间回收
局部变量在new出来时在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立即被回收,堆空间等待gc回收
方法调用时传入的实际参数现在栈空间分配,在方法调用完成后从栈空间释放
字符串常量在DATA区域分配,this在堆空间分配
数组既可以在栈空间分配数组名称,有在堆空间分配数组实际的大小

heap和stack有什么区别
java的内存分为两类,栈内存和堆内存
栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法的局部变量,方法结束时,分配给这个方法的栈会被释放,变量也随之释放
堆是与栈不同的内存,一般用于存放不放在当前方法栈中的那些数据

GC是什么,为什么要有GC
GC是垃圾回收的意思
java提供的GC功能可以自动检测对象是否超过作用域从而达到自动回收内存的目的
垃圾回收可以有效地防止内存泄漏,有效地使用可以使用的内存

垃圾回收的优点和原理,并考虑两种回收机
使java程序员在编写程序的时候不在需要考虑内存管理,可以有效的防止内存泄漏,有效的使用可以使用的内存
当程序员创建对象的时候,GC就开始监控这个对象的地址、大小以及使用情况,通常GC采用有向图的方式记录和管理堆中的所有对象,确定哪些对象是可达的,哪些对象不可达,当确定一些对象不可达时,GC就有责任回收这些内存空间

垃圾回收的基本原理是什么,垃圾回收器可以马上回收内存吗,有什么办法主动通知虚拟机进行垃圾回收
当程序员创建对象的时候,GC就开始监控这个对象的地址、大小以及使用情况,通常GC采用有向图的方式记录和管理堆中的所有对象,确定哪些对象是可达的,哪些对象不可达,当确定一些对象不可达时,GC就有责任回收这些内存空间
可以,手动执行system.gc(),但是java语言规范并不保证GC一定会执行

java中存在内存泄漏吗,请简单描述
会存在,比如程序员创建一个对象,之后一直没有使用这个对象,但是这个对象一直被引用,无法被垃圾回收,这种情况就很可能会出现内存泄漏
另一种情况:对象被存储进hashmap中以后,不能修改这个对象中的那些参与计算哈希值的字段了,否则对象修改后的哈希值与之前存储进来的哈希值不同了,在这种情况下,就会找不到对象的结果,而且无法单独删除当前对象,也会存在内存泄漏

在开发中遇到过内存溢出吗,原因有哪些,解决办法有哪些
1、内存的加载量过大
2、集合类中有对对象的引用,使用完成未清空,JVM无法回收
3、代码存在死循环或循环产生过多的重复对象实体
4、使用的第三方软件中的bug
5、启动参数内存值设定过小
修改JVM启动参数,直接增加内存
检查错误日志,查看OutOfMemory错误前是否有其他异常或错误
对代码进行查找分析,找出可能存在溢出的位置(查询数据库是否一次性查询全部,检查代码是否有死循环,检查是否有循环重复产生的对象实体,检查集合对象使用完后是否未清空)
使用内存查看工具查看内存使用情况

简述一下你了解的设计模式
设计模式是一套呗反复使用的代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易让别人理解,保证代码可靠性
工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类有一个公共的抽象类父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作
代理模式:给对象同一个代理对象,并由代理对象控制原对象的引用
适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起使用的类能一起工作
单例模式:一个类只有一个实例

	懒汉式单例模式,线程不安全,致命的是在多线程下无法工作
	public class Singleton{
		private static Singleton instance = null;
		private Singleton(){};
		public static synchronized Singleton getInstance(){
			if(instance == null){
				instance = new Singleton();
				return instance;	
			}
		}
	
	}

	饿汉式单例模式,避免多线程的同步问题
	public class Singleton{
		private static Singleton instance = new Singleton();
		private Singleton(){};
		public static Singleton geIntance{
			return instance;	
		}
	}

用java写出一个冒泡排序
	for(int i=0;i<arr.length-1;i++){
		for(int j=0;j<arr.length-1-i;j++){
			if(arr[j]>arr[j+1]){
				int temp=arr[j];
				arr[j]=arr[j+1];
				arrr[j+1] = temp;	
			}
		}
	
	}

servlet的运行过程
web容器加载servlet并且实例化,servlet生命周期开始,容器运行init方法进行servlet初始化,请求到达时调用servlet的service方法,service方法会根据需要调用与请求对应的doget或dopost等方法,服务器关闭或项目被卸载时,servlet实例销毁,此时调用destroy方法

转发和重定向的区别
1、转发是在服务器端完成的,重定向是在客户端发生的;
2、转发的速度快,重定向速度慢;
3、转发是同一次请求,重定向是两次请求;
4、转发地址栏没有变化,重定向地址栏有变化;
5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成

同步和异步有什么异同,在什么情况下分别使用他们,举例说明
如果数据将在线程间共享,那这些数据就是共享数据,必须同步存取
当对象调用一个需要花费很长时间执行的方法,并且不希望等待方法的返回时,就应该使用异步编程

说出数据连接池的工作机制是什么
j2ee启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接,客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙,如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定,当使用的池连接调用完成后就会被记为空闲,其他调用就可以使用这个连接了

bean实例的生命周期
stateless session bean、entity bean 、 message driven bean 一般存在缓冲池管理
statefull session bean、entity bean 存在cache管理,包换创建实例,设置上下文,创建ejb object 业务方法调用,remove等过程
存在缓冲池管理的bean,在create之后实例并不从内存清除,而是采用缓冲池调度机制不懂重用实例
存在cache管理的bean通过激活去激活机制保持bean的状态并限制内存中的实例数量

j2ee常用的设计模式,说明工厂模式
常用的23中设计模式:工厂模式,建造模式,工厂方法模式,原始模型模式,单例模式,门面模式,适配器模式,桥梁模式,合成模式,装饰模式,享元模式,代理模式,命令模式,解释器模式,访问者模式,迭代子模式,调停者模式,备忘录模式,观察者模式,状态模式,策略模式,模板方法模式,责任链模式
工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类有一个公共的抽象类父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作

排序有哪几种方法,请举例,用java实现一个快速排序
插入排序(直接插入排序、希尔排序),交换排序(冒泡排序,快速排序),选择排序(直接选择排序,堆排序),归并排序,分配排序(箱排序,基数排序)
a[0:n-1],选择一个元素中心支点,取名mid并将左右两边进行分段,mid左边比mid小取名left,右边则比mid大取名right,递归的使用快速排序分别对left和right进行排序,所得结果为left+mid+right

java语言如何处理异常,关键字throws,throw,try,catch,finally分别代表什么意义,在try块中可以抛出异常吗
java通过面向对象来处理异常,把异常装入对象中,它是threaable类或其他类的实例,抛出异常后,可以调用这个对象的方法来捕捉并处理异常
throw:用来明确的抛出一个异常
throws:标明一个成员函数可能抛出的各种异常
try用来执行一段程序,如果出现异常,系统会抛出异常,catch用来捕捉异常,最后由缺省处理器来处理,finally不管发生什么异常,都会被执行的一段代码
可以抛出异常,只是这样是多此一举,try本身就是检测异常并抛出的,如果有异常,catch会自动捕捉异常

throw和throws的区别
throw:用在方法体内,表示抛出异常,由方法体内的语句处理
是具体向外抛出异常的动作,它抛出的是一个异常实例,执行throw是一定会抛出某种异常
throws:用在方法声明后面,如果抛出异常,由该方法的调用者来进行异常的处理
表示出现异常的一种可能性,并不一定会发生
声明这个方法会抛出某种异常的类型,让它的使用者知道异常的类型

mvc的各个部分都有哪些技术来实现,如何实现
Model-View-Controller
Model:应用的业务逻辑,通过javabean,ejb组件实现
view:应用的表示面,由jsp页面产生
controller:提供应用的处理过程控制
通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用

字节流和字符流的区别
字节流操作的基本单元为字节,默认不使用缓冲区,通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元
字符流操作的基本单元为Unicode码元,使用缓冲区,通常处理文本数据,它支持写入及读取Unicode码元。

bs与cs的联系与区别
c/s:服务器通常采用高性能的pc,工作站或小型机,并采用大型数据库系统,客户端需要安装专用的客户端软件
b/s:客户机上只要安装一个浏览器,服务器安装大型数据库,在这种结构下,用户界面完全通过www浏览器实现,一部分事务逻辑在前端实现,主要事务逻辑在服务器端实现,浏览器通过web server同数据库进行数据交互
区别:
硬件环境不同:c/s一般建立在专用网络上,小范围的网络环境,局域网之间在通过专门服务器提供连接和数据交换服务
b/s建立在广域网上,不必是专门的网络硬件环境,信息自己管理,有比c/s更强的适应范围,一般只要有浏览器和操作系统就行
安全要求不同:c/s一般面向固定用户群,对信息安全控制能力很强,高度机密的信息系统采用c/s结构更合适,可以通过b/s发布部分公开信息
b/s建立在广域网上,安全相对较弱,可能面向不可知的用户
程序框架不同:c/s程序可以更加注重流程,可以对权限多层校验,对系统运行速度可以较少考虑
b/s对安全以及访问速度的多重和考虑,建立在需要更加优化的基础之上
软件重用不同:c/s程序可以不可避免的整体性考虑,构建的重用性不如在b/s要求下的构建的重用性好
b/s对的多重结构要求构件相对独立的功能,能够相对较好的重用
系统维护不同:c/s程序由于整体性,必须整体考虑,处理出现的问题以及系统升级,升级难,相当于换了一个系统
b/s构件组成,方面构建个别的更换,实现实体的无缝升级,系统维护的开销减到最小,用户可以从网上自己下载安装就可以细实现升级
处理问题不同:c/s程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关
b/s建立在广域网上,面向不同的用户群,分散地域,这是c/s无法做到的,与操作系统平台关系最小
用户接口不同:c/s建立在window平台上,表现方法有限,对程序员要求会较高
b/s建立在浏览器上,有更加丰富和生动的表现方式与用户交流,并且大部分难度减低,减低开发成本
信息流不同:c/s程序一般是典型的中央集权的机械式处理,交互性较低
b/s信息流向可变化

什么是中间件
中间件就是程序中可织入的,可重用的,与业务逻辑无关的各种组件
是基础软件的一大类,属于可复用软件的范畴,中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为应用软件提供运行与开发的环境,帮助用户灵活高效的开发和集成复杂的应用软件

什么是典型的软件三层架构,软件设计为什么要分层,软件分层有什么好处
软件的三层结构一般指的是 MVC:M指的是model表示实体层,V指的是view视图层,C指的是controller表示控制层
低耦合性,高重用性和可适用性,较低的生命周期成本,快速的部署,可维护性,有利于软件工程化管理
软件分层结构使得代码维护非常方便,设计明确,各层独立,专注自己擅长的领域

简述你所知道的linux
linux起源于1991年,1995流行起来的免费的操作系统,目前linux是主流的服务器操作系统,广泛应用于互联网,云计算,智能手机等领域,linux只有一个根目录root,所有文件数据都储存在这个根目录下,不同于windows,linux是通过命令的方式进行操作,常用命令有pwd,mkdir,ls

什么是java虚拟机,为什么java被称作是与平台无关的编程语言
java虚拟机是可以执行java字节码的虚拟机进程,java字节码被编译成能被java虚拟机执行的字节码文件
因为java是跨平台语言,不需要在每一个平台上重写或者编译

java中什么是构造方法,什么是构造方法重载,什么是复制构造方法
构造方法就是与类同名的那个方法,它的作用是可以用来初始化,每一个都有构造方法,程序员没有给类提供构造方法时,java编译器会为这个类创建一个默认的构造方法
构造方法重载跟方法重载很相似,可以为一个类创建多个构造方法,每一个构造方法必须有它自己唯一的参数列表。
Java不支持构造方法的复制,复制构造方法是C++的内容。

手写单例模式和工厂模式

懒汉单例
	public class A{
	    private static A b = null;
	    private A(){};
	    public static snychronized A getB(){
	         if(b==null){
		     b=new A();
	         return b:
	         }
	    }
	}

	饿汉模式
	public class A{
	    private static A b = new A();
	    private A(){};
	    public static  A getB(){
	         	return b;
	         }
	    }
	}

	工厂模式
	interface A{
	   public Iproduct createProduct();
	}
	Class Factory implements A{
	    public Iproduct createProduct(){
		return new Product();	
	    }	
	}
	public class B{
	   public static void main(String [] args){
	   	A a = new A();
		Iproduct product = a.createProduct();
		product.ProductMethod(); 
	   }
	}

java集合框架是什么,说出一些集合框架的优点
集合框架是Collections Framework,它是一个用来表示和操作集合的统一的架构
使用核心集合类降低开发成本
使用经过严格测试的集合框架类,代码质量会得到提高
通过使用JDK附带的集合类,可以降低代码维护成本
复用性和可操作性

java集合框架的基础接口有哪些
Set 接口继承 Collection,集合元素不重复。
List 接口继承 Collection,允许重复,维护元素插入顺序。
Map接口是键-值对象,与Collection接口没有什么关系。
注意:java不提供collection接口任何直接实现

为何map接口不继承collection接口
Map提供的是键值对映射,而collection提供的是一组数据
map如果继承了collection接口的话还违反了面向对象的接口分离原则

加粗样式什么是迭代器
迭代通俗一点说就是一个个的数过去,而实现这个一个个数过去的功能就叫做迭代器
迭代器是一种概念上的抽象,那些行为上像迭代器的东西都可以叫做迭代器

java中的HashMap的工作原理是什么
Java中的HashMap是以键值对(key-value)的形式存储元素的。
HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值