重要面试题

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中的内存保存 记录到磁盘

    

posted @ 2022-04-07 21:10  永远的幼稚  阅读(62)  评论(0)    收藏  举报