java基础知识题

  1. 能不能声明main()方法为非静态?
    不能,main()方法必须声明为静态的,这样JVM才可以调用main()方法而无需实例化它的类,如果为非静态,不能运行.

  2. 不用main方法如何定义一个类?

  3. String类为什么是final的.
    主要是为了性能和安全性考虑,若不被设定为final,过度的使用会影响程序的性能.

  4. Delete与Truncate的区别

  5. 如何把String转为Integer,byte[]?
    Integer.ParseInt(str);
    str.getBytes;

  6. SVN的作用与原理.
    SVN是一个版本管理工具,进行项目开发时,把项目存储在服务器上,我们可以用SVN在本地下载代码,更新代码.

  7. servlet的生命周期.
    首先实例化,然后初始化调用servlet对象的init方法.在调用servlet对象的service方法来处理请求,最后销毁.

  8. 使用final修饰一个变量时,是引用不能变,还是引用的对象不能变?

  9. SpringIOC及DI是什么?
    IOC是控制反转(即对象之间的依赖关系由容器来建立),DI是依赖注入(容器通过调用对象提供的set方法或者其构造器来建立对象之间的依赖关系).

  10. 抽象类和接口的区别?
    (1).抽象类中可以有构造方法,接口中不能有构造方法.
    (2).抽象类中可以有普通成员变量,接口中没有普通成员变量.

  11. 服务端返回的常见状态码
    404:服务器根据路径找不到相应的资源,可能是配置文件错误或者项目没有部署.
    405:找不到sercvice方法.
    500:程序的错误,比如代码运行时出现异常.

  12. HTTP协议(超文本传输协议).
    w3c用来指定浏览器与web服务器之间如何进行通信以及通讯的数据格式的应用层协议.

  13. get与post的区别.
    get是从服务器获取数据.post是向服务器传送数据.get的传输数据量比较小,而post比较大.另外使用get的话安全性低,post的安全性较高,如果考虑性能的话get要好些.

  14. cookie与session

  15. 进程与线程的区别.
    一个进程至少有一个线程,进程在执行的过程中拥有独立的内存空间,而多个线程共享内存空间,从而提高程序的运行效率.一个进程是一个独立的运行环境,它可以是一个程序或者应用,而线程是在进程中执行的一个任务.

  16. 多线程编程的好处?
    多个线程并发的执行可以提高程序的效率,多个线程共享内存,最大化的利用cpu,比如常见的下载工具迅雷,就会运用线程,加快下载效率.

  17. 用户线程和守护线程
    在java程序中创建一个线程就是用户线程,守护线程是用于为系统中的对象和线程服务的,如果用户线程全部退出运行了,只剩下守护线程,虚拟机也会退出.可以用thread.setDaemon(true)将用户线程设置为守护线程.

  18. 解释SpringBean的生命周期.
    首先是进行初始化操作达到可用的状态,然后在bean不被调用的时候需要进行相应的操作,从容器中移出bean.
    spring框架提供了四种方式来管理bean的生命周期.配置文件中的init()方法用来初始化,destroy()方法用来销毁.还有使用注解方式@construct和@predestroy.

  19. spring框架中的单例Beans是线程安全的吗?
    大部分的springBean都没有可变的状态,所以可以说springbean是线程安全的,但是如果bean有多种状态的话,就需要自己来处理线程安全,解决的方法就是改变bean的作用域.

  20. spring框架用到了哪些设计模式?
    代理模式——在AOP中用的比较多.
    单例模式——spring的配置文件中创建的bean默认为单例.
    模版方法——用来解决代码的重复问题.比如RestTemplate.
    前端控制器—–spring提供了dispatcherServlet对请求进行分发.
    工厂模式——-用BeanFactory来创建对象的实例.

  21. 使用spring框架的好处.
    轻量级的,利用控制反转降低了耦合.
    采用面向切面编程,把业务逻辑和系统操作分开.
    使用容器来管理对象的生命周期和配置.
    在事务管理方面spring提供了一个持续的事物管理接口,可以管理本地事物和全局事物.还提供了很多API来处理相关的异常.

  22. AOP的底层工作原理
    使用的动态代理.
    1.JDK的动态代理,是jdk提供的API,属于反射的一部分,目标对象必须有接口,springAop在被代理类有接口的情况下自动使用jdk动态代理.
    2.CGLIB动态代理,需要导入CGLIB包,被代理的可以是类, 无需接口,springAop在被代理类没有接口下,自动使用CGLIB代理.
    事物的隔离级别默认为READ-COMMITTED.(性能和隔离性折中).
    事物的传播默认值为REQUIRED.

  23. 面向对象的三大特征.
    (1).封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行隐藏.
    (2).继承:是指如果继承了一个类,它可以使用现有类的所有功能,并且在不需要重新编写的情况下对相应的功能进行扩展.
    继承的实现方式有三种:
    实现继承:使用父类的属性和方法而无需额外编码的能力.
    接口继承:仅使用属性和方法,但是子类必须提供实现能力.
    可视继承:指子类使用父类的外观和编码能力.
    (3).多态:允许将子类类型的指针赋值给父类类型的指针,
    实现多态的两种方式:覆盖,重载.其实,重载的概念并不属于oop编程,因为重载是在编译期就绑定了,是静态的,所以说重载与多态无关.
    封装使代码模块化,继承是为了代码重用,多态是为了实现接口重用.

  24. 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包.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值