能不能声明main()方法为非静态?
不能,main()方法必须声明为静态的,这样JVM才可以调用main()方法而无需实例化它的类,如果为非静态,不能运行.不用main方法如何定义一个类?
String类为什么是final的.
主要是为了性能和安全性考虑,若不被设定为final,过度的使用会影响程序的性能.Delete与Truncate的区别
如何把String转为Integer,byte[]?
Integer.ParseInt(str);
str.getBytes;SVN的作用与原理.
SVN是一个版本管理工具,进行项目开发时,把项目存储在服务器上,我们可以用SVN在本地下载代码,更新代码.servlet的生命周期.
首先实例化,然后初始化调用servlet对象的init方法.在调用servlet对象的service方法来处理请求,最后销毁.使用final修饰一个变量时,是引用不能变,还是引用的对象不能变?
SpringIOC及DI是什么?
IOC是控制反转(即对象之间的依赖关系由容器来建立),DI是依赖注入(容器通过调用对象提供的set方法或者其构造器来建立对象之间的依赖关系).抽象类和接口的区别?
(1).抽象类中可以有构造方法,接口中不能有构造方法.
(2).抽象类中可以有普通成员变量,接口中没有普通成员变量.服务端返回的常见状态码
404:服务器根据路径找不到相应的资源,可能是配置文件错误或者项目没有部署.
405:找不到sercvice方法.
500:程序的错误,比如代码运行时出现异常.HTTP协议(超文本传输协议).
w3c用来指定浏览器与web服务器之间如何进行通信以及通讯的数据格式的应用层协议.get与post的区别.
get是从服务器获取数据.post是向服务器传送数据.get的传输数据量比较小,而post比较大.另外使用get的话安全性低,post的安全性较高,如果考虑性能的话get要好些.cookie与session
进程与线程的区别.
一个进程至少有一个线程,进程在执行的过程中拥有独立的内存空间,而多个线程共享内存空间,从而提高程序的运行效率.一个进程是一个独立的运行环境,它可以是一个程序或者应用,而线程是在进程中执行的一个任务.多线程编程的好处?
多个线程并发的执行可以提高程序的效率,多个线程共享内存,最大化的利用cpu,比如常见的下载工具迅雷,就会运用线程,加快下载效率.用户线程和守护线程
在java程序中创建一个线程就是用户线程,守护线程是用于为系统中的对象和线程服务的,如果用户线程全部退出运行了,只剩下守护线程,虚拟机也会退出.可以用thread.setDaemon(true)将用户线程设置为守护线程.解释SpringBean的生命周期.
首先是进行初始化操作达到可用的状态,然后在bean不被调用的时候需要进行相应的操作,从容器中移出bean.
spring框架提供了四种方式来管理bean的生命周期.配置文件中的init()方法用来初始化,destroy()方法用来销毁.还有使用注解方式@construct和@predestroy.spring框架中的单例Beans是线程安全的吗?
大部分的springBean都没有可变的状态,所以可以说springbean是线程安全的,但是如果bean有多种状态的话,就需要自己来处理线程安全,解决的方法就是改变bean的作用域.spring框架用到了哪些设计模式?
代理模式——在AOP中用的比较多.
单例模式——spring的配置文件中创建的bean默认为单例.
模版方法——用来解决代码的重复问题.比如RestTemplate.
前端控制器—–spring提供了dispatcherServlet对请求进行分发.
工厂模式——-用BeanFactory来创建对象的实例.使用spring框架的好处.
轻量级的,利用控制反转降低了耦合.
采用面向切面编程,把业务逻辑和系统操作分开.
使用容器来管理对象的生命周期和配置.
在事务管理方面spring提供了一个持续的事物管理接口,可以管理本地事物和全局事物.还提供了很多API来处理相关的异常.AOP的底层工作原理
使用的动态代理.
1.JDK的动态代理,是jdk提供的API,属于反射的一部分,目标对象必须有接口,springAop在被代理类有接口的情况下自动使用jdk动态代理.
2.CGLIB动态代理,需要导入CGLIB包,被代理的可以是类, 无需接口,springAop在被代理类没有接口下,自动使用CGLIB代理.
事物的隔离级别默认为READ-COMMITTED.(性能和隔离性折中).
事物的传播默认值为REQUIRED.面向对象的三大特征.
(1).封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行隐藏.
(2).继承:是指如果继承了一个类,它可以使用现有类的所有功能,并且在不需要重新编写的情况下对相应的功能进行扩展.
继承的实现方式有三种:
实现继承:使用父类的属性和方法而无需额外编码的能力.
接口继承:仅使用属性和方法,但是子类必须提供实现能力.
可视继承:指子类使用父类的外观和编码能力.
(3).多态:允许将子类类型的指针赋值给父类类型的指针,
实现多态的两种方式:覆盖,重载.其实,重载的概念并不属于oop编程,因为重载是在编译期就绑定了,是静态的,所以说重载与多态无关.
封装使代码模块化,继承是为了代码重用,多态是为了实现接口重用.Mysql与Oracle分页的区别.
Mysql分页利用LIMIT关键字,计算参数为开始序号和要查看的总条数.
select * from table_name limit startNum,totalNum
Oracle分页利用的是自带的rowNum,计算参数为开始序号和结束序号.
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
)
WHERE RN BETWEEN 21 AND 40
这种效率要比上一种低.
25.spring的工作原理.
首先第一个核心就是IOC控制反转,通过依赖注入来创建对象和建立对象之间的依赖关系.利用了java里的反射机制,spring在运行时,通过配置文件来动态的创建对象,调用对象的方法.另一个核心就是AOP面向切面编程,可以为某一类对象进行监督和控制,从而达到对一个模块扩充的功能,一般的应用场景比如性能测试,事务处理,异常处理等,AOP的实现是通过动态代理来实现的,一种是JDK的动态代理,目标对象必须有接口,springAOP在被代理类有接口的情况下,自动使用jdk的动态代理,在没有接口的情况下,使用的就是CGLIB动态代理,需要导入CGLIB包.