java面试题目整理

1、Java中int占多少个基本字节,有哪几个基本类型?

int占4个字节,32位,8个基本类型包括四种整数类型(byte、short、int、long);两种浮点数类型(float、double);一种字符类型(char);一种布尔类型(boolean)

2、java面向对象的特征?
几多抽风 (继承,多态,抽象,封装)

3、java的装箱和拆箱

因为面向对象的语言的基本特征是封装,所以有必要将基本类型进行装箱。

integer可以位null  但是int只能位0,相比下integer更符合实际。

4、==和equals的区别?

基本类型==是比较两者的值的大小,引用类型则是比较两者的引用的首地址。

equals实际上是调用这个对象本身的equals方法

5、string stringbuilder stringbuffer?

string是内容不可变的,底部使用final修饰的数组。stringbuilder和stringbuffer都是内容可变的,底部使用没有用final修饰的数组。

stringbuilder是线程不安全,但是效率高。

stringbuffer是线程安全,效率低。

6、java中的集合?

一种是value类型的collection包括是list,set。另一种是(key,value)类型的map

list是有序的,值可以重复;set是无序的,值不能重复。

7、arraylist和linkedlist?

arrylist底层使用数组实现的,查找高效,删除和插入低效。

linkedlist底层使用链表实现的,查找低效,删除和插入高效。

8、hashmap hashtable currenthashmap

hashmap是线程不安全,高效

hashtable是线程安全,低效

currenthashmap是线程安全,高效。原理是将map分成一个个的小map,让他们并发的运行。

9、拷贝文件使用字节流还是字符流?

考虑到通用性,应该使用字节流。(字符肯定是比字节要大的)

10、讲一下线程的几种实现方式?

1、继承thread。继承扩展性不强,java是单继承,如果继承了thread就不能继承别的了。

2、实现runnable接口

两者都是用start来启动的。Thread thread = new Thread(继承了Thread的对象/实现了runnable的对象)

实际上执行的是run方法。

Thread.setname("名称")用来标识不同的线程。

11、线程池的作用

限定线程池的个数,避免线程过多导致系统崩溃或运行缓慢。

节约资源

利用Executor类提供的四种静态方法来创建线程。

12、设计模式和常用的设计模式?

单例模式:饱汉模式:

                  饿汉模式:

总结:单例模式通过单例模式可以保证系统中一个类只有一个实例,这是他的核心。

工厂模式:springIOC模式

代理模式:springAOP模式,使用的就是动态代理

包装模式

13、get和post的区别?

get会在地址栏显示出信息,而post不会。post安全性比get而且数据传输时没有大小限制

14、对servelet的理解 ?

HTTPservlet里面重写doget和dopost请求来完成用户需求

servelet生命周期:加载-->实例化-->初始化(init)-->处理请求(doget或dopost)--->服务结束(destroy)

15、forword和redirect?

 直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。

实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

16、session和cookie的区别?

两者都是会话跟踪技术,cookie通过客户端记录信息,而session通过服务端记录信息。session的实现需要依靠cookie来实现,cookie不安全,session占内存。把重要的信息放在session中比如登陆信息,不重要的放在cookie中比如购物车

17、MVC?

m:model ; JavaBean

v:view; jsp,html

c:control;servlet  action                   mvc就是  JavaBean+jsp+servlet 加起来。

以一个用户的实际请求为例,用户发起请求后先进入控制层,有控制层调用JavaBean也就是model层来完成处理,最后将结果反馈到view层。

18、对事物的理解 ?

事务是并发控制的单位,要么都做要么都不做。

事务的四个特性:原子性,一致性,隔离性,持久性。

19、mysql和Oracle的分页?

因为数据多的时候不能完全显示数据,而是需要进行分段显示。MySQL使用limit来进行分页,oracle用三层嵌套查询来进行分页。

20、数据库的存储过程?(简单了解)

阿里已经禁用了存储过程,存储过程封装性好,可以直接运行,但缺点也很明显不便于后期的维护。

21、spring的两大核心?

控制反转IOC或者称为DI依赖注入,例如:spring发现service依赖于dao就给其注入,他的核心原理就是容器+反射机制+配置文件

AOP面向切面编程,核心是动态代理,在执行前后或者出现异常时做相关逻辑处理。主要用作事务处理,权限判断和日志的记录。

22、spring事务的传播特性和隔离级别?

传播可以理解为从B方法传播到A中

多个事务存在怎么处理的策略,想象一个情景在一个类中A方法调用设置了七个级别的B方法

七个级别分别是

传播行为意义
PROPAGATION_MANDATORY表示该方法必须运行在一个事务中。如果当前没有事务正在发生,将抛出一个异常
PROPAGATION_NESTED表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。
PROPAGATION_NEVER表示当前的方法不应该在一个事务中运行。如果一个事务正在进行,则会抛出一个异常。
PROPAGATION_NOT_SUPPORTED表示该方法不应该在一个事务中运行。如果一个现有事务正在进行中,它将在该方法的运行期间被挂起。
PROPAGATION_SUPPORTS表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。
PROPAGATION_REQUIRES_NEW表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务在运行的话,则将在这个方法运行期间被挂起。
PROPAGATION_REQUIRES表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。

23、数据库优化方面的问题?

先进行定位,然后以下的优化手段。通过mysql提供的相关慢查询方式来找到那些运行速度过慢的语句加以优化。

数据库设计的时候应该遵循范式的规定。

1、创建索引:弊端:首先会占用磁盘内存,对dml操作也有影响,会使速度变慢

2、分表:水平分表(按行分表)垂直分表(按列分表),字段多但是较少的使用的字段,应该将字段进行分表

3、读写分离:访问量太大,进行集群处理,mysql最常用的是读写分离技术。主从同步,所有改变数据的操作都往主数据库去写,其他从服务器保存和主服务器的同步,读的操作都往从服务器上面去读。

4、缓存

24、redis保存对象的方式

使用json字符串进行数据的保存和使用,使用set和get来进行相应的操作,设置和获取比较简单,但没有设置专门的方法将对象转为json

字节保存方式,需要把对象序列化为字节来使用,数据量大的时候推荐这种方式

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_bukesiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值