重要面试题
1.ajax原理与执行步骤:
异步刷新技术
①、获取ajax异步对象(XmlHttpRequest)
②、选择请求方式get、post
③、使用send函数来发送请求
④、判断向服务器发送请求状态(0~4)
⑤、服务器请求状态完成readState==4
⑥、判断客户端响应状态status==200
⑦、接收服务端的返回数据并执行回调函数
2.springMvc执行原理:
①、客户端向核心处理器发出请求
②、核心处理器调用处理器映射(HandlerMapping),解析对应的Handler
③、将解析后的Handler返回给核心处理器
④、核心处理器请求处理器适配器(HandlerAdatper)执行Handler
⑤、处理器适配器(HandlerAdapter)根据Hnadler规则执行Handler
⑥、Handler执行完毕后将返回一个modelAndview给处理器适配器
⑦、处理器适配器将modelAndview返回给核心处理器
⑧、核心处理起调用视图解析器进行解析
⑨、将解析完的视图返回给核心处理器
⑩、核心处理器将试图讲给视图渲染器进行渲染
⑪、渲染完成后返回给核心处理器
⑫、核心处理器将视图返回给客户端
3.jsp与servlet原理与区别
jsp(java Server pages)java服务器页面:
java代码与html页面共存
servlet:
服务器端运行的程序
区别:
jsp编译后就是servlet
jsp是页面的表示servlet是逻辑的表示
jsp侧重于视图、 servlet类似一个controller主要做控制
4.jsp九大隐式对象:(jsp提供可直接使用)
request
response
session
application
out
page
config
exception
pageContext
5.spring常用注解
@Component
@Service 逻辑业务层(表示是一个service)
@Repository 数据访问层(表示一个jpa的dao层)
@Controller 控制层(表示一个controller层)
@Autowried (bean的注入)
@Bean
aop相关:
@Before
@After
@Around
6.SpringMvc相关注解:
@RequestMapping
@RequestBody
@ResponseBody
@PathVariable
@RequestController
7.重写与重载
重写:基于父子类中 子类重写父类的方法
方法名相同、参数相同、返回类型相同、异常小于父类、修饰范围大于父类
重载:基于本类之间
方法名相同,参数个数、类型、顺序不同,返回类型无关
8.Xml和Html区别
Xml:可扩展标记语言
一般多用来多数据文件的配置
Xml中标签必须成对出现 可自定义标签
Xml可用来传输数据
Xml区分大小写
严禁标签交叉嵌套
Html:超文本标记语言
Html标签是固定的 不可自己定义
标签可以有单标签
Html是静态的用于显示数据
Html不区分大小写
9.get和post区别
get:
参数可在地址栏上显示
长度有限
不安全
post:
参数不可在地址栏上显示
长度理论无限
相对安全
10.maven:
项目管理工具
作用:
管理依赖
创建项目工程
编译代码
自动运行单元测试
部署项目、生产web站点
生成报表
命令:
clean 清除内容
compile 编译源代码
package 打包
test 测试
install 安装
11.mybatis的分页,分页插件的原理
PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句
oracle
select* from (select rownum r ,d.* from dept d) where r between a and b
以上逻辑仅限于底数据量的分页查询(mysql 30w以下,oracle 100w以下)
大数据量分页,oracle使用 row_number()做分页
12.二分法查找
先按一定顺序排序 然后折半查找
13.单例模式
只能获取一个对象
构造器私有化;通过公有的方法来获取对象
懒汉式:
使用时创建(线程不安全的)
饿汉式:
加载类时创建(线程安全的)
14.mybatis的mapper接口注意内容:
mapper中的方法不能重载、方法名唯一、参数与xml中类型一致
15.mybatis中配置mapper的方法:
namespace=mapper全类名
id=mapper中的方法名
16.tcp/ip网络模型(OSI七层)
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层
17.BIO与NIO区别AIO
BIO:
同步阻塞流
数据读写必须一个接一个完成
NIO:
同步非阻塞
一个线程轮流询问
AIO:
异步非阻塞
18.springBoot和springmvc区别 boot自动装配原理:
springBoot项目中启动类中@SpringBootConfiguration中@EnableAutoConfiguration表示开启自动装配.
spring代理模式:
aop cglib代理
代理对象不是实现类
jdk代理:
针对目标对象实现了接口
springmvc是web框架
springboot是用来简化ssm框架简化开发的
19.重写与重载区别?
重写:
基于父子类之间
子类重写父类的方法 方法名相同、参数相同、返回值类型必须小于等于父类类型、异常小于等于父类异常、修饰范围大于等于父类
重载:
基于本类之间
方法名相同,参数顺序、类型、个数不同,与返回值类型无关
20.集合体系
单例集合:
Collection:
set(不可重复):
Hashset(无序、底层是哈希表)
TreeSet(有序、底层是红黑树)
LinkedHashSet(有序、底层是链表和哈希表)
list(有序、可重复):
ArrayList(底层数组查询快、增删慢)
Vector(底层数组查询快、增删慢、线程安全)
LinkedList(底层是链表、查询慢、增删快)
键值对集合:
Map:
Hashtable(无序的、线程安全的、不允许key为null)
TreeMap(有序的)
HashMap允许null值(key和value都允许)
21.接口与抽象类
接口:
接口可以多继承、多实现
接口中只能有抽象方法
无构造
抽象类:
被abstract修饰
只能单继承
可以有属性、其他方法、构造
22.创建线程的三种方式?
继承Thread
实现runnable
实现callable
23.@Resource与@Autowired的区别?
@Resource
默认按name自动注入 name找不到找type
设置name按name 设置type按type找不到抛异常
@Autowried
默认按类型装配 类型找不到抛异常
24.drop、delete、truncate的区别?
drop:
直接删除表(有日志可恢复)
delete:
删除表内容、不删除索引(有日志可恢复)
truncate:
删除内容、释放内存(不可恢复)
25.JVM内存模型
堆
本地方法栈
虚拟机栈
程序计数器
方法区
26.垃圾回收机制
新生代
Ende
内存满触发Young GC
老年代
Full GC
永久代空间不足,会触发Full GC
System.gc()也会触发Full GC
永久代
27.ql优化的方式?
减少or、not、!=、in、运算表达式等降低索引的查询
使用索引查询
28.简述sql语言?
DDL(数据定义语言)
create、drop等
DML(数据操作语言)
delete、insert、update
DCL(数据控制语言)
DQL(数据查询语言)
29.如何解决session共享?
使用redis缓存 将session放入redis缓存中实现共享
Tomcat实现session复制
30.面向对象编程的基本原则
单一职责原则(每个类应该专注做一件事)
里氏替换原则(超类存在的地方,子类是可以替换的)
依赖倒置原则(实现依赖抽象,不依赖具体实现)
接口隔离原则(为客户端提供较小的单独的接口而不是大的总接口)
31.创建socket通讯的步骤?
服务器创建一个ServerSocket,调用accept方法等待客户连接
客户端创建一个Socket并请求与服务器建立连接
服务器接收客户端的请求,并创建一个新的Socket与客户端建立专线连接
建立的两个Socket在一个线程上对话
服务器开始等待新的请求
32.mybatis缓存机制
一级缓存:
sqlSession缓存:
缓存数据只在SqlSession中有效
第一次查询出来的数据会存放在sqlsession缓存中 第二次直接从缓存中获取数据 提高效率
当sqlsession执行了(insert、update、delete)并且提交之后 mybatis会清空sqlsession缓存
二级缓存:
mapper缓存
默认不开启
当sqlsession执行了(insert、update、delete)并且提交之后 mybatis会清空sqlsession缓存
先找一级缓存 在找二级缓存
31.Spring中通知的类型
before:前置通知
after: 方法执行之后调用(无论是否成功)
around: 方法执行前后调用
32.mybatis:
Mybatis支持普通SQL查询、存储过程和高级映射的持久化框架
将sql语句从程序中剥离出来、配置在文件中,实现sql灵活配置
33.jdk代理和cglib代理
jdk代理:
实现接口
在目标类基础上通过动态代理功能增强
创建InvocationHandler接口的实现类,实现invoke方法,
CGLib代理:
继承
第三方包
针对类实现代理 生产子类
34.redis持久化:
RDB:
将redis在内存中的数据记录定时dump到磁盘
AOF:
以日志的形式记录除查询的操作、写入文本、打开文本可以看到详细的操作记录
35.Nginx负载均衡
轮询(默认)
权重
36.数据库三大范式:
第一范式:每个列都不可拆分(最小列)。
第二范式:表中每列都和主键相关,每列都依赖于主键
第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
37、SpringBoot自动装配原理
@SpringBootApplication核心注解包括
@SpringBootConfiguration:组合了@Configuration注解实现配置文件功能
@EnableAutoConfiguration:打开自动装配功能
@ComponentScan:Spring组件扫描
38.为什么接口不能被继承
接口中没有构造
子类继承父类会继承父类构造
39.jwt
头部
载荷
签名
40.什么是跨域问题
同源策略:
请求的端口号、ip地址不一致
解决:
1.前端解决 使用node.js代理服务
2.后端加入跨域注解
41.缓存穿透:
访问key在redis不存在 穿过redis访问数据库中
解决
放置null字符串 设置定时
42.缓存同步:
数据库更新 redis中没变
解决
数据库中更新时 判断redis是否有对应的key 有的话删除
修改数据库时,同步修改redis
43.缓存击穿:
当前reids的key持续被高并发请求时 key突然失效 则高并发请求会全部访问数据库
解决
针对热点数据设置永不失效
44..缓存雪崩:
解决
热门商品 设置失效时间短
冷门商品 失效时间长
避免缓存同一时间失效
45.redis持久化
aof
持续日志添加,操作redis一次,记录一次
rdb(快照)
每隔30秒对redis中的内存保存 记录到磁盘

浙公网安备 33010602011771号