java面试题

JSP内置参数:
request封装了由客户端生成的HTTP请求的所有细节cookie、response响应客户请求、重定向、session保存会话、application存所有应用中的共有数据、out向客户端浏览器输出信息print()、pageContext获取其他对象、config配置文件、page和exception。
四大作用域:pagecontext,request,session,application

Mybatis整合入spring
在Mybatis中,一个接口去执行sql,调用方法来执行某个指定的sql,将执行sql封装
把某个Mapper的代理对象作为一个bean放入Spring容器中,使得能够像使用一个普通bean一样去使用这个代理对象.

Spring启动过程中,大致会经过如下步骤去生成bean

  1. 扫描指定的包路径下的class文件
  2. 根据class信息生成对应的BeanDefinition
  3. 在此处,程序员可以利用某些机制去修改BeanDefinition
  4. 根据BeanDefinition生成bean实例
  5. 把生成的bean实例放入Spring容器中
    要做的
  6. 定义一个LubanFactoryBean
  7. 定义一个LubanImportBeanDefinitionRegistrar
  8. 在AppConfig上添加一个注解@Import(LubanImportBeanDefinitionRegistrar.class)

什么是死锁,产生死锁的原因及必要条件
死锁,是指多个进程在运行过程中因争夺资源没有外力无法推进,环路,互斥,请求与保持不剥夺
预防死锁:
资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)
只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)
可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)
资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

线程池拒绝策略:
 CallerRunsPolicy - 当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。一般并发比较小,性能要求不高,不允许失败。但是,由于调用者自己运行任务,如果任务提交速度过快,可能导致程序阻塞,性能效率上必然的损失较大

AbortPolicy - 丢弃任务,并抛出拒绝执行 RejectedExecutionException 异常信息。线程池默认的拒绝策略。必须处理好抛出的异常,否则会打断当前的执行流程,影响后续的任务执行。

DiscardPolicy - 直接丢弃,其他啥都没有

DiscardOldestPolicy - 当触发拒绝策略,只要线程池没有关闭的话,丢弃阻塞队列 workQueue 中最老的一个任务,并将新任务加入

链表和数组的区别:连续不连续,固定动态,随机访问顺序访问

"值传递"和"引用传递"的区别:传递值得拷贝,传递后不相关,传递地址,前后都是一个地址

1、ArrayList是基于数组实现的,线程不安全效率高;LinkedList是基于链表实现的,线程安全效率低;
2、ArrayList随机查询速度快;LinkedList插入和删除速度快;
Hashmap是hashtable的非线程安全实现,hashmap允许空kv

String中有final关键字,定长不可改。Stringbuffer与StringBuilder是可变数组append方法,拼接用这个。Builder线程不安全,buffer安全(缩)
Java集合value与key-value.存储值分为List有序,可重复与Set无序,不可重复根据equals与hashcode判断。即一个对象如果存储在set要重写equals与hashcode方法

存储key-value为map
1、ArrayList是基于数组实现的;LinkedList是基于双向链表实现的;elementdata数组
2、ArrayList随机查询速度快;LinkedList插入和删除速度快;
Hashmap是hashtable的非线程安全实现,hashmap允许空kv。concurrentHashmap可以安全效率高

拷贝文件用字节流还是字符流通用性要用字节流(图,声)

线程实现方式:继承Thread(单接口),实现Runnable接口,启动thread.start,执行的是run方法。区分线程:setname方法

线程并发库:创建线程池:Executors的四个静态方法作用:限定个数,防止系统奔溃,不用创建销毁

IOC:控制反转,代理模式,依赖注入,工厂模式
AOP:面向切面业务与逻辑分离,代理模式事务、日志和安全
Get,post区别:get会在地址栏显,有限,获取查询

post不会,再HTTP包体中,安全,更新

servlet:java服务器端程序,实现servlet接口的程序。生命周期:servlet启动,被服务器实例化容器运行init方法,然后server方法,doget\dopost
加载servletclass->实例化——>调用init->doget/dopost->关闭

Session与cookies都是会话跟踪,cookies是在客户端记录,不安全大小限制,session是在服务器端,占用服务器

Jdbc理解 javadatabaseconnection,数据库很多,每个数据库命令不一样,定义接口,让数据库厂商自己实现接口(mysql+mysql驱动+jdbc)

类、抽象类、接口的区别:
抽象类:有抽象方法的就是抽象类,但是抽象类也不一定都是抽象方法,不可创建对象,一个类继承抽象类必须实现父类抽象方法,如果没有实现,则必须将子类定义为抽象类,一个类只能继承一个抽象类
接口:接口中的方法必须是抽象方法,比抽象类更抽象。一个类实现一个接口,要实现接口中的所有抽象方法。接口中的成员变量只能是public static final,一个类可以实现多个接口

抽象类一般是子类父类,是一种模板,接口是一种规范,具有普遍性

Object有哪些方法:
clone方法getClass方法toString方法equals方法hashCode方法wait方法notify方法
wait() :等待锁
notify():唤醒锁
具体使用场景
wait()或notify()的任何调用都在同步的代码区域内(wait()和notify()调用在同一对象上同步)
sleep和wait的区别:sleep时Thread类的,wait时object方法,sleep不会释放对象锁,wait进入等待池和notify()一同使用。

==和equals有什么区别
==是比较地址,equals是比较值

volatile变量对线程可见,且不保证原子性
在每个写操作之后,都会加入一条store内存屏障命令,此命令强制工作内存将此变量的最新值保存至主内存;在每个读操作之前,都会加入一条load内存屏障命令,此命令强制工作内存从主内存中加载此变量的最新值至工作内存。

LinkedHashMap 访问顺序方式遍历
LinkedHashMap 的accessOrder参数控制的,true为访问顺序遍历,false为插入顺序遍历
重载和重写

overwrite,重写父类或者接口方法,权限修饰符不小于父类
overload,同名方法,参数,返回值可能不同

synchronized与lock区别
1、lock是一个接口,而synchronized是java的一个关键字。2、synchronized在发生异常时会自动释放占有的锁,因此不会出现死锁;而lock发生异常时,不会主动释放占有的锁,必须手动来释放锁,可能引起死锁的发生。

项目中,如何应对高并发流量
计数器是一种比较简单的限流算法,用途比较广泛,在接口层面,很多地方使用这种方式限流。在一段时间内,进行计数,与阀值进行比较,到了时间临界点,将计数器清0。

http长连接和短链接
HTTP/1.0中默认使用短连接,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接
HTTP/1.1起,默认使用长连接,在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,

谈谈工厂模式:
1.简单工厂
在这里插入图片描述
抽象产品类下分各种产品,然后由工厂产出某个产品,根据放的参数的不同判断是创建那个类,dataformat就是一个工厂类型,根据参数判断是什么类型
在这里插入图片描述
创建使用分离,创建交给工厂,客户端只管使用,缺点就是新增那就只能修改工厂类
2.工厂模式
在这里插入图片描述
抽象商品与抽象工厂,collection类就用的工厂模式,迭代器,arraylist也有迭代器在这里插入图片描述
3.抽象工厂模式:
在这里插入图片描述
有了多个产品体系,但是还是要修改产品类和工厂类,没咋用过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值