• 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总


    作者 : Stanley 罗昊
    本人自行总结,纯手打,有疑问请在评论区留言
    转载请注明出处和署名,谢谢!

    一.java基础

    1.多态有哪些体现形式?
    重写、重载
    2. Overriding的是什么?Overloading是什么?
    Overriding是重写 Overloading是重载
     
    3. 接口与抽象类的区别?
     抽象类速度比接口快;
    接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法;
    抽象方法可以有main方法并且我们可以运行它;
    接口没有main方法,因此我们不能运行它;
     
    4. 接口在我们现实中的好处?
    我们写方法的时候,应该先定义接口,再定义实现类,这样在后期改动的时候,接口可以有多个实现类,可以保证我们代码的灵活调用,不至于到后期维护的时候改动特别大,主要是提高了程序的灵活性;
     
    5.java中的垃圾回收机制?
    当我们对象创建之后呢,这个时候对象处于可答状态,就是可以被访问的状态,在这个时候呢,对象的生命过程它是属于可控制状态,但,当我们的对象比如在方法中定义的,那你方法调用完之后其实就已经没用了,那它就会处于不可答状态;
    再举个例子,你new出来的一个对象,原本是你有值的,现在你又给它赋成null值了,那你new的那个对象,就已经成为垃圾了;
    所以,那些不可答资源呢,就被称之为,垃圾资源,而这个垃圾资源呢,会被这个java中的垃圾回收器按照一定的原则进行回收,这个一系列的操作是由java虚拟机的内附进行操作的,在正常情况下,我们是无权干涉的;
     
    6.int与integer的区别?
    int的值存在栈里面,integer的值,存在堆里面;
    integer是包装类,它是一个对象,可以赋空值,而int是基本数据类型是不能赋空值的;

    二.多线程

    1.多线程是干嘛的
    多线程就是解决程序在使用过程中会出现一些并发操作;
    如果出现并发了,怎么办?
    可以做同步,使用synchronized关键字;
    我们可以在方法上,或者在代码块上加上synchronized,这样的话,多个线程在同一个时间片就会只有一个线程能进来,这个就可以保证你程序中的数据共享问题得到足够的解决;
    2.如果你使用synchronized的话,会影响效率,你如何解决?
    如果出现这种情况的话,我们就可以使用乐观锁来解决;
    乐观锁是在数据中存储的有一个状态,就是在数据库中,有一个状态列,当我在操作的时候呢。你如我现在准备向数据库中插入一条数据,这个时候,有一个状态在哪儿放着,如果我没操作完,其他人是不能操作的,这样的话可以保证,你都能进来,但是到数据库这儿,你被我卡死了,因为我还没干完呢,你就不能做;
    乐观锁的概念就是从数据库的层面,然后呢,在数据库中加了一列,通过判断这一列的状态呢,来判断当前这个线程是否可以进行操作,如果当前线程没有操作完,下一个线程需要在后面等待,这个等待不是通过加锁来实现的,而是通过数据库的逻辑进行判断的;
    说乐观锁的话,就可以在一定程度上的进行优化;
    3.用队列的方式,利用队列的特性,先进先出;

    三.Javaweb基础

    1.什么是连接池?
    Tomcat启动的时候,它就会给默认创建100个连接池【可以设置多个,当然有最大限制度】在哪儿放着,这就连接池;
    连接池的好处呢?
    有了连接池,它就可以保证你程序在执行过程中,你需要连数据拿东西了,就来池子里面拿一个,拿走你不用管,用完它就会自动还回去,那这个是不是就可以理解成一个无限循环的池子?这就是连接池;
     
    2.什么是数据源?
    在配置中,除了配置 数据库 用户名 密码 地址 意外还需要注意几项:
    连接池的属性:
    可以配置最大连接数
    最大等待时间
    最大连接时间
    连接超时时间
    3.通过Tomcat如何配置数据源?
    在conf目录下的context.xml文件中
    4.解释一下什么是JNDI?
    J是java的意思, N是命名的意思,D是目录的意思,I是接口;
     
    5.JSP的九大内置对象?
     equest、response、session、application、out、pagecontext、config、page、exception
    详细介绍:https://www.cnblogs.com/leirenyuan/p/6016063.html
     
    6.servlet的生命周期?

    Servlet的生命周期包含了下面4个阶段:

    1.加载和实例化

    2.初始化

    3.请求处理

    4.服务终止

    7.什么是servlet?

    Servlet是一个运行了面向请求/ 响应服务器中的网络模块。

    请求是客户的一个调用,可能是远程的。

    请求包含了客户要发送给服务器的数据。

    响应是服务器返回给客户的回答该请求的数据。Servlet是一个JAVA对象,他以请求为输入,分析其数据,执行一些逻辑运算,并给客户发回一个响应。
    另一方面,Servlet作为驻留在服务器端HTTP明白的中间层,它们知道怎样在HTTP中通过RMI或IIOP在EJB和客户之间进行通信。

     
    8.Tomcat目录下有什么?分别是干嘛的?
    bin目录:
    里面存放可执行文件
    lib目录:
    存放jar包
    conf目录
    里面存放一些配置文件
    temp目录
    里面存放一些临时文件
    webapps目录
    项目存放地
    work目录

    work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。

    清空work目录,然后重启tomcat,可以达到清除缓存的作用
    logs目录
     tomcat每次启动时,自动在logs目录下生产以下日志文件,按照日期自动备份。可以帮助我们更好的找出错误。
     
    9.springboot微服务你了解过没有?
    了解过,微服务呢,我们也做过,但是对于我们公司来说呢,还是以单体项目居多!
    单体项目就是,我们这个项目没有涉及到那么高的并发量;
    所以说,我们就做过一些单体项目;
    但是呢,我们为了解决在单体项目中访问量较大的情况,我们在项目中也做过一些简单的集群,也能达到我们的项目需求;
     

    四.数据库

    1.什么是存储过程?
     存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的
    2.什么是触发器?
     触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,是一种特殊类型的存储过程,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。
    3.什么是视图?
    数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

    五.Spring SpringMvc mybatis

    1.聊聊Spirng
    Spring呢,他是一个容器,对我我来说呢,我用它更多的是来做对象的管理,以及我们资源的整合。
    比如说,我们用Spring中的IOC,用它来进行对象的注入,比如我们在分层开发的时候呢,我们可以让逐层对象之间的依赖关系交给spring来管理,spring呢就是通过ioc的方式来实现的;
    注入的形式呢,一般上都是通过注解,当然呢,也可以通过配置文件通过配置bean的方式进行注解;
    get set方式注入 或通过p命名空间进行注入,还有就是通过构造方法进行注入,一般呢,用的最多的还是通过注解进行注入;
    Spring还有一个aop,面向切面;
    当我们做程序的时候呢,我们可以在程序代码不做任何改动的情况下,我们在执行的目标方法之前,或者之后,我们可以用aop的形式呢,去植入一些增强代码,这就是aop;
    好处呢?就是让我们的程序不做任何改动,我们可以随心所欲的去加入我们想要的东西;
    aop呢,更多体现在声明式事物;
     
    2.什么是声明式事物?怎么配置的?
    里面需要先配置切面(跟那些方法加事物),第二呢,再去配置增强,第三呢,把增强和这个切入点呢进行一个整合,这个时候切面就配好了;
    spring呢支持,注解式事物;
     
    3.spring的定时任务,在什么场景下使用;
     比如定时的删除数据
     
    4.讲讲spring的声明式事物的传播机制是什么?
    事务传播行为就是多个事务方法调用时,如何定义方法间事务的传播。Spring定义了7中传播行为:
    (1)propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是Spring默认的选择。
    (2)propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
    (3)propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
    (4)propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
    (5)propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    (6)propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
    (7)propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作。
     
    5.spring的常用注解?
     @Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
    @Scope注解 作用域
    @Lazy(true) 表示延迟初始化
    @Service用于标注业务层组件、 
    @Controller用于标注控制层组件(如struts中的action)
    @Repository用于标注数据访问组件,即DAO组件。
    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
    @Scope用于指定scope作用域的(用在类上)
     
    6.mybaits与其他持久层框架的对比
    先讲讲mybaits的优点,再讲讲hibernate,然后再简单的聊聊JPA;
     
    7.mybatis的执行原理?
    先把sqlsessionfactory创建出来;
    然后再创建sqlsession;
    然后就调用sqlsession里面的一些方法,例如:
    selectOne、liset、Delete,调用它们就可以实现增删改查;
     
    8.mybatis主配置文件,里面都有什么信息项?
    1. 注册存放DB连接四要素的属性文件
    2. 注册实体类的权限定性类名的别名
    3. 配置MyBatis运行环境,即数据源与事务管理器
    4. 注册映射文件
    9.mybatis中的一二级缓存
    一级缓存是session级缓存,默认开启的,它会把我们已经查询过的数据呢,会缓存到session里面,但是如果是不同session,是不会共享的;
    二级缓存是SessionFactory级别,它默认是不开启的,需要在主配置文件中开始;
    你可以在某一个映射文件里,我可以指定我开启,我可以指定我使用缓存,当然,不是所有地方都用得到二级缓存;
    一般,一些使用较为频繁的一些数据呢,使用二级缓存,当下次再来拿相同的数据时,不再将去访问数据库,而是从缓存中获取数据;
    如果缓存的数据较多,也可以缓存到服务器的硬盘上;

    六.SpringMvc的执行流程

    一个请求过来,springmvc是如何处理的;
    第一,它有一个核心的控制器DispatcherServlet,核心控制器呢,它需要判定我们当前的请求是否为一个springmvc请求,这个呢,需要跟我的配置文件去对比,或者呢,去跟我我们的注解去对比,注解里面有一个RequestMapping,跟它去对比,当然,一般情况下,我们用的都是以注解的形式;
    一个请求来,它就开始去控制器中去找,如果找到与这个请求相匹配的,springmvc呢它会用一系列的转换器来进行初始化;
    转换器是什么呢?
    我们的请求里面如果有参数,这个转换器呢它负责把我的参数呢转换了一下,因为springmvc中的方法需要接收,比如说,传过来的参数是字符串,这我这个接收的时候用的是整数,这个时候,转换器就需要完成字符中跟整数的一个转换过程;
    比如说,我请求的这个sprinmvc是一个文件上传,那么呢,它就需要把我解析我上传的这个文件,然后把我的这个文件通过转换器的形式呢,转换成springmvc能够识别的一个对象叫;
     
    11.什么是springmvc拦截器,如何配置?
    所谓的springmvc拦截器就是,一个用户请求过来,判断这个用户是否有权限访问我的控制器,如果没有权限,那么我将直接终止你对我的访问,如果有权限,那么就会被springmvc的转换器所拦截,所谓的转换器就是参数转换器;
    最常见的一点就是,将你的参数封装到实体里面,需要让你的springmvc控制器呢能够顺利的获取参数,和使用参数;
     
    12.转换器会转换失败吗?失败后发生什么?
    如果我这个后台需要接收的是一个整数,你传过来一个abc,这个时候,转换器就会转换失败;
    转换器转换失败的时候,这个时候,你的请求将被终止,直接返回;
    转换器,转换成功的时候,它就会开始跳到你的控制器里,去执行你的service、执行你的页面跳转、执行你的业务逻辑,如果执行完了之后,就会需要进行页面跳转;
    这个时候,我们就需要判定,当前返回的是JSON还是还是需要跳页面;
    如果是跳页面的话,它需要根据springmvc配置那个静态资源的路径,去找我对应的页面;
    那,如果没有呢?返回的是JSON的呢?
    就把我们最后返回的集合,通过我们阿里巴巴的FastJson,通过这个打包工具呢,会把我们最后的独享转换成JSON字符串,最后返回到页面上解析;
     
    13.简述springmvc执行流程
    第一,先经过核心控制器(DispatcherServlet)检测是不是springmvc请求;
    第二,需要通过拦截器来判定当前你的权限等等是否能够访问;
    第三,需要通过转换器进行参数一系列转换;
    第四,访问;
    第五,返回并判断是JSON还是页面;
     
    14.springmvc的全局异常是怎么处理的?
    如果我在执行这个控制过程中,有没有可能我的代码执行的时候报500了?
    有可能吧!
    这个时候,springmvc就不会往下执行了,这个时候我们就需要配置一个全局异常处理,保证springmvc呢能够跳转到一个正常合法的页面;
     
    15.springmvc中常见的注解?
    @Controller

    @RequestMapping
    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

    @Resource和@Autowired
    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
    1、共同点
    两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
    2、不同点
    (1)@Autowired
    @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

    @requestParam
    @requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

    @ResponseBody
    作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
    使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
     
    16.springmvc怎样进行数据校验?
    JSR 303 用于对Java Bean 中的字段的值进行验证,使得验证逻辑从业务代码中脱离出来。是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。一般用于表单提交页面(如用户名必填、只能由数字字母组成等等)。
     
    17.springmvc怎么处理日期?
    在实体类字段上加:
    @DateTimeFormat(pattern="yyyy-MM-dd")

    七.springboot

    1.springboot如何配置数据源?
    2.springboot如何配置两个数据源?
     链接:https://www.cnblogs.com/fengmao/p/7538854.html
     
    3.springboot如何读取属性文件?
    一般是通过value,在类的属性上加一个value,括号里面呢这个value的值呢就写你配置文件里的值就可以了;

    4.如何实现跨域?

    JSONP,该协议的一个要点就是允许用户传递一个callback 参数给服务端。

    利用<script>标签没有跨域限制的“漏洞”,来达到与第三方通讯的目的。当需要通讯时,本站脚本动态创建一个<script>元素,地址指向第三方的API网址

     
  • 相关阅读:
    HDU-2544-最短路(floyd)
    HDU-1009-肥鼠交易
    BZOJ-3029: 守卫者的挑战 (期望DP)
    2017年10月23日23:58:04
    BZOJ-2456: mode (神题)
    BZOJ-4542: [Hnoi2016]大数 (莫队算法)
    BZOJ-2120: 数颜色 (带修改莫队)
    BZOJ-2654: tree (kruskal)
    BZOJ-1040: [ZJOI2008]骑士 (树形DP)
    BZOJ-3505: [Cqoi2014]数三角形 (容斥原理+排列组合)
  • 原文地址:https://www.cnblogs.com/StanleyBlogs/p/10908953.html
Copyright © 2020-2023  润新知