Java常见的面试问题(技术总结)

什么是SOA 分布式

集群:就是很多的服务器来实现一种功能,例如mysql,很多的服务器都安装mysql

负载均衡:就是用来调节的,比方说有很多的用户都在访问读取数据,可是读取a服务器的mysql多,而读取别的服务器的mysql就少,负载均衡把访问a的用户转给b一部分,防止a由于访问量过大造成宕机什么的。

分布式:一个系统把不同的服务分开来部署,用户模块,bbs论坛模块,内容模块,支付模块。对服务的访问量很大的时候,单台服务器已经满足不了需求,就把服务分散到几台甚至几十台几百天电脑上

好处:每个模块只负责自己的事情和请求压力,开发人员只负责自己的东西

分布式应用开发简单的说,是指将用户界面、控制台服务、数据库管理三个层次部署在不同的位置上。其中用户界面是客户端实现的功能,控制台服务是一个专门的服务器,数据管理是在一个专门的数据库服务器上实现的。

自我理解:
对项目的客户(用户界面),数据存储(操作数据(服务)),对数据库的操作(数据层) 分离开来,并且可以进行高效的敏捷开发.
分布式,可以对各个模块进行加强(服务器添加(集群处理)),把调用次数比较多的服务,多加服务器,哪些很少使用的服务,可以对它进行一个降低.

hibernate和mybatis的区别

  • hibernate 是对SQL进行了高度的封装,它有自己的HQL语句
  • mybatis保留了对数据库灵活的操作,需要自己写sql语句
  • 他们都是ORM对象映射(数据查询出来以后都是存在pojo类中),使用方法都是大同小异.

hibernate的多个参数如何传递?怎么转换?

  • 自己理解 :
    • 数组传递,对HQL的语句进行拼接,in()里面的条件通过循环来判断.
  • 百度理解:
    • 集合(List),session.createSQLQuery(sql).setParameterList(“userIdList”, userIdList).list();
    • 创建一个查询对象,并且,直接吧集合传进去即可.(setParameterList)

SpringMVC和struts2 的区别

SpringMVC和struts2区别
    实现不同
        SpringMVC是通过Servlet来实现的
        Struts2是通过拦截器来实现的
    Json的转换方式不同
        Spring MVC是自动转为json
        Struts2是通过插件来转
    数据传输不同
        SpringMVC是通过参数来传递的
        Struts2是通过值栈来传递的,而值栈是个比较庞大的东西
    控制器实例不同
        SpringMVC是基于方法来实现的
        Struts2是基于对象来实现的
        SpringMVC从理论上来讲是比Struts2快的

四大域对象

  • ServletContext
    生命周期:当WEB应用被加载进容器创建代表整个WEB应用的ServletContext对象,当服务器关闭或WEB应用被移除时,ServletContext对象跟着被销毁。

    作用范围:整个WEB应用。

    在不同Servlet之间转发、读取资源文件

  • Request域
    1.生命周期:在Service方法调用前由服务器创建,传入service发那个发。整个请求结束,request生命结束。
    2.作用范围:整个请求链(请求转发也存在)
    3.作用:在整个请求链中共享数据,经常用到:在servlet中处理好的数据交给JSP显示,此时参数就可以放在Request域中。
  • Session域
    1.生命周期:在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭,没有到期的session也会跟着销毁。如果调用session提供的invalidate(),可以立即销毁session。
    2.作用范围:一次会话。
  • PageContext域
    1.生命周期:当对JSP的请求开始,当相应结束时销毁。
    2.作用范围:整个JSP页面,是四大作用域中最小的一个。
    3.作用:获取其他八大隐式对象,可以认为是一个入口对象。
    获取所有域中的数据
    跳转到其他资源

Spring 参数如何传递

  • 直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。
  • 通过HttpServletRequest接收,post方式和get方式都可以。
  • 通过一个bean来接收,post方式和get方式都可以。(也叫模型驱动)
  • 通过@PathVariable获取路径中的参数
  • 使用@ModelAttribute注解获取POST请求的FORM表单数据
  • 用注解@RequestParam绑定请求参数到方法入参

Spring的特征

  • aop(面向切面编程):

    • 软件系统分为两个部分:核心关注点和横切关注点
    • 业务处理的主要流程是核心关注点
    • 与之关系不大的部分是横切关注点
    • AOP核心概念

    横切关注点
    切面(aspect)
    连接点(joinpoint)
    切入点(pointcut)
    通知(advice)
    目标对象
    织入(weave)
    引入(introduction)

  • ioc(控制反转):

    • IOC是一种思想,是一个重要的面向对象编程的体现之一

    • 它是把创建和查找依赖对象的控制器交给了容器,有容器进行注入组合对象,所以对象与对象之间是,低耦合的,便于测试,而且也使得整个体系架构变得更灵活

    • 就是对象找依赖并注入,而不是对象自己主动去找
  • IOC依赖注入

    • 在控制反转中获取资源的过程叫做依赖注入
      -注入有2种,一种是通过xml配置进行构造注入
      -还有一种是通过setter注入,就是通过对象的set方法进行注入.
    • 一般都是在Spring配置文件中,配置bean ,然后交给Spring自动注入,我们拿到对象就可以直接使用.

Spring AOP (动态代理的实现)

Spring MVC执行流程

  • 自己理解:
    • 客户请求–>前端控制器–>前端控制器找到HandlerAdapter–>HandlerAdapter(处理数据)—>返回视图–>然后渲染视图–>最后返回视图给客户

Struts2的执行流程

Hibernate的执行流程

mybatis的执行流程

ElasticSearch 搭建

ElasticSearch怎么建立索引

ElasticSearch 怎么使用

solr 搭建

solr 怎么建立索引

solr 怎么使用

ActiveMQ 使用

消费者:
生产者:

Dobbo

WebService

String && StringBuffer 的区别,在什么时候使用.

Nginx 负载均衡搭建

Redis的搭建(集群)

Redis 中的5种数据类型

String:key-value(做缓存)
Hash:key-fields-values(做缓存)
SortedSet(zset):有顺序,不能重复

© 著作权归作者所有 转载请保留原链接地址 交流QQ群:799362339

猜你喜欢

转载自blog.csdn.net/qq_36595006/article/details/81214260