Day481&482.尚硅谷之高频重点面试题① -面经

Posted 阿昌喜欢吃黄桃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day481&482.尚硅谷之高频重点面试题① -面经相关的知识,希望对你有一定的参考价值。

高频重点面试题①

一、自增变量

  • 题目代码
int i = 1;
i = i++; //i = 1
int j = i++; //i = 2, j = 1
int k = i + ++i * i++;//2+3*3,i=4
System.out.println("i="+i);//i = 4
System.out.println("j="+j);//j = 1
System.out.println("k="+k);//k = 11
  • 理解
    • 等号的右侧从左到右依次压入操作数栈
    • 计算的顺序依然还是根据运算符的优先级计算
    • 自增操作是直接对变量表中的变量直接修改,不需要压入操作数栈
    • 赋值操作是最后做在处理的

二、单例模式

  • 饿汉式
//通过构造器私有化,对外暴露get方法获取
public class Singleton1 
    private static final Singleton1 SINGLETON_1 = new Singleton1();
    private Singleton1()
    public Singleton1 getInstance()
        return SINGLETON_1;
    

//通过枚举的方式获取
public enum  Singleton2 
    INSTANCE;
    public static void main(String[] args) 
        Singleton2 s = Singleton2.INSTANCE;
    

//通过静态代码块初始化
public class Singleton3 
    private static final Singleton3 INSTANCE;
    static 
        //todo 可通过配置文件去加载参数,提供初始化
        INSTANCE = new Singleton3();
    
    public Singleton3 getInstance()
        return INSTANCE;
    

  • 懒汉式
//同步方法方案
public class Singleton4 
    private static Singleton4 INSTANCE;
    private Singleton4()

    public synchronized static Singleton4 getINSTANCE()
        if (INSTANCE==null)
            INSTANCE = new Singleton4();
        
        return INSTANCE;
    

//双重锁判断方案
public class Singleton5 
    private volatile static Singleton5 INSTANCE;
    private Singleton5()
    public  static Singleton5 getINSTANCE()
        if (INSTANCE == null)
            synchronized (Singleton5.class)
                if (INSTANCE==null)
                    INSTANCE = new Singleton5();
                
            
        
        return INSTANCE;
    

//静态内部类
public class Singleton6 
    private Singleton6()
    private static class Inner
        private static final Singleton6 INSTANCE = new Singleton6();
    
    public static Singleton6 getInstance()
        return Inner.INSTANCE;
    


三、类初始化和实例初始化

  • 类初始化过程—(子类初始化需要加载初始化父类)
    • 静态成员变量、静态代码块(从上往下的顺序,顺序执行)
    • 构造器(最后执行)
  • 实例初始化过程
    • 成员变量、非静态代码块(从上往下顺序,顺序执行)
    • 构造器(最后执行)
  • 哪些方法不会被重写
    • final
    • private
    • static
  • 对象的多态性


四、方法的参数传递机制


五、成员变量&局部变量


六、SpringBean的作用域之间的区别


七、Spring数据库事务

地址:https://blog.csdn.net/qq_43284469/article/details/110919021?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163982224916780264049691%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163982224916780264049691&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-7-110919021.pc_v2_rank_blog_default&utm_term=%E4%BA%8B%E5%8A%A1

第五标题开始+


八、如何解决SpringMVCPost请求中文乱码问题?

创建一个类,继承OncePerRequestFilter添加一个Filter过滤器,来做字符集的转换


九、简单的谈一下SpringMVC的工作流程

  • DispatchServlet会拦截请求

  • 执行这里就会遍历所有this.handlerMappings,获取请求的uri和请求,拿到对应能够处理这次请求的handlerMapping,并将拿到:↓

    • handlerMapping处理器
    • 对应的拦截器
    • 这次的请求request

    包装成一个HandlerExecutionChain

  • 从HandlerExecutionChain拦截器链到拿到对应的handlerMapping

  • 根据handlerMapping,去获取对应的HandlerAdapter的处理器对应的适配器

  • 判断请求方式是否是get,如果是就判断是否被修改过

  • 遍历所有的拦截器链,执行每个applyPreHandle()

    • 每次执行都记录执行的拦截器链遍历索引
    • 如果有一个applyPreHandle返回false,就去导致执行triggerAfterCompletion,去执行倒置每一个已经执行applyPreHandle()方法的拦截器的afterCompletion()方法
  • 再通过适配器执行真正处理这次请求的controller方法handle,返回ModelAndView

    这里我们不是jsp,所以肯定必然没有ModelAndView对应,就肯定为null

  • 执行适配器对应的handle()方法也就是对应的controller的方法后,会返回ModelAndView

  • 判断当前请求的所选处理程序是否选择处理异步处理

  • 给对应返回的ModelAndView对象赋予默认名

  • 倒置去执行每个拦截器链中每个拦截的applyPostHandle()方法

  • 执行processDispatchResult()做收尾工作

    • 判断是否有ModelAndView,有就渲染,没有执行下面的
    • 去执行triggerAfterCompletion(),这里上面已经出现过,也就是去执行已经执行过preHandle拦截器的afterCompletion()方法

十、Mybatis中当实体类中的属性名和表中名字段不一样该怎么办

  • sql语句中起别名
  • 在实体类上标注注解
  • 开启驼峰规则
  • 可以使用结果集映射—resultmap映射

十一、Linux服务类常用指令

1、CentOS6

2、CentOS7


十二、Git分支相关命令


十三、Redis持久化有几种类型?他们的区别是什么?

1、RDB

  • 特点
    • 内存快照全量的方式保存,一个fork子进程不影响主进程进行备份【全量替换
  • 优点
    • 恢复速度快
    • 备份速度快
  • 缺点
    • 会有可能数据丢失
    • 数据量的时候就比较消耗性能

2、AOF

  • 特点

    • 以日志的形式,记录每一个写操作
    • 只追加文件,不改写文件【做增量操作
  • 优点

    • 存储的粒度更小更细
    • 可处理误操作
    • 人可读懂的日志文本
  • 缺点

    • 比RDB的方式更占用存储空间
    • 恢复速度慢

十四、mysql建立索引的时机

  • 什么时候建立索引

  • 什么时候不适合建立索引


十五、JVM垃圾回收机制,GC发生在JVM哪个部分,有几种GC,他的算法是什么

GC发生在JVM哪个部分?发生在中。

  • GC有几种

    • 年轻代的GC—MinorGC
    • 老年代的GC—FullGC
  • 算法的分类

    • 引用计数算法
      • python中被使用,已经被jvm淘汰
    • 复制算法
      • 特点
        • 使用与年轻代的MinorGC
      • 优点
        • 没有内存碎片
        • 没有标记清楚,效率高
      • 缺点
        • 双倍的存储空间
    • 标记清除
      • 特点
        • 发生在老年代,先进行标记,再进行清除
      • 优点
        • 不需要额外空间
      • 缺点
        • 存在内存碎片
    • 标记压缩
      • 特点
        • 发生老年代,先进行标记,再进行压缩
      • 优点
        • 又要标记又要压缩移动,需要移动的成本,所以效率低
      • 缺点
        • 解决内存碎片的问题
    • 标记清除压缩
      • 先进行标记,再清除,再压缩移动内存

十六、Redis在项目中的使用场景


十七、ES和Solr的区别

  • Solr集群


十八、单点登录实现的过程

  • 概念

一处登录,处处使用

  • 前提

分布式系统中

  • 流程图


以上是关于Day481&482.尚硅谷之高频重点面试题① -面经的主要内容,如果未能解决你的问题,请参考以下文章

Day492&493.尚硅谷之高频重点面试题④ -面经

Day495&496.尚硅谷之高频重点面试题⑤ -面经

Day489&490&491.尚硅谷之高频重点面试题③ -面经

Day489&490&491.尚硅谷之高频重点面试题③ -面经

Day486&487&488.尚硅谷之高频重点面试题② -面经

Day489.尚硅谷之高频重点面试题③ -面经