java面试题难题总结

java基础部分

1. String str = "123", String str1 = "123" + "456" 创建了几个对象

3个, 123,456,123456

web部分

1. 一个servlet 被请求 10 次,会创建几个实例?

只会创建一个对象, 当多个客户端进行请求时, 每次请求会创建一个请求和响应对象, 依然会执行service方法,将这两个对象传入到这个方法中, 但是init方法只会执行一次

2. get和post的区别?

  • get请求将传递的参数放到url中, 而post请求将参数放在request body请求体中
  • get请求url限制长度
  • get的安全性不如post
  • get请求产生两个tcp包, post请求产生一个tcp包

             get请求会将http 的 header和data一起传送到服务器, 相应200表示成功

             post请求会先将header传递到服务器,响应100后, 再将data传递到服务器,响应200表示成功

框架部分

1. spring ioc是什么?  原理是什么?

控制反转,  将实体类对象交给spring处理,从而实现松耦合

原理 :  

  1.  启动Tomcat服务器
  2.  初始化spring容器
  3.  扫描包下的全部class, 获取注解修饰的类的信息
  4.  通过反射实例化对象
  5.  创建一个map集合, key是类名, value是类对应的实例
  6.  通过getBean方法, 传入类名,获取对应的实例

参考 : https://blog.csdn.net/zhangcongyi420/article/details/89419715

2. spring事务是什么?

数据库部分

1. Mysql 的行锁和表锁的含义,并说明他们之间的区别?

表锁 : 不会发生死锁 锁冲突几率高, 并发性不高

行锁 : 会发生死锁,锁冲突几率低, 并发性高

锁冲突 : 当事务1对数据A进行上写锁(也就是修改数据), 事务2对数据A进行上写锁, 两个锁不能共存

死锁 : 请求和等候条件

表锁的两种表现形式 : 共享锁(写锁) 和 独占锁(读锁)

  • 当对一个表进行读取数据时 , 相当于加上了读锁, 会阻止其他的修改语句对数据库的修改,但不会阻止其他的读进程
  • 当对一个表进行修改时, 会阻止其他进程读取该表数据和修改该表数据
  • MyISAM引擎不适合写的原因就是会阻止其他的读写进程

行锁是通过索引加载的, 要是对应的sql语句没有走索引,就会全表扫描,行锁无法实现对应的就是表锁, 此时无法做修改插入操作

行锁的实现需要注意:

  • 行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。
  • 两个事务不能锁同一个索引。
  • insert,delete,update在事务中都会自动默认加上排它锁。

2. 关系型数据库和非关系型数据库的区别 ?

  • nosql存储数据以键值对的方式存储数据格式, 比sql数据库有更好的扩展性
  • nosql的查询数据比sql的快
  • nosql支持基本类型数据,也可以存储图片,视频. sql数据库只能存储基本类型数据
  • nosql不支持事务

 

 

你可能感兴趣的:(java)