Java面试题(初级)

拜拜、爱过 提交于 2020-03-11 19:13:27

面试的基本流程
二.Java 的专业技能
2.1 Java的基础部分
2.1.1简单讲一下java的跨品台原理
Java通过不同的系统、不同版本、不同位数的java虚拟机来屏蔽不同的系统指令集差异而对外提供统一的接口(javaAPI)对于我们普通的java开发者而言只需要安装接口开发即可。如果系统需要部署到不同的环境中,只需安装不同的虚拟机即可。
2.1.2搭建一个java开发环境的步骤
Java开发环境需要做什么

  1. 适用于我们环境的jdk
  2. 对应开发环境eclipse
  3. 还需要web服务器(Tomcat)
    一、 下载对应组件
    二、 安装
    配置java_home 因为后面的eclipse和Tomcat会依赖于这个变量
    2.1.3讲一下java中的数据占几个字节
    Java中有八种基本数据类型。Byte、short、int、long、float、double、Boolean、char’
    2.1.4面向对象的特征有哪些
    封装、抽象、继承、多态
    面向对象的封装性:即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。张三这个人,他的姓名等属性要有自己提供的获取或改变的方法来操作。
    抽象就是找出一些事物的相似或共同之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略当前主题和目标无关的那些方法,将注意力集中在与当前目标有关的方法,就是把现实生活中的对象抽象为类。
    在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来运行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。
    多态是指程序中定义的引用变量所指向的具体类型和通过引用变量发出的方法调用在编程时不确定,而是在程序运行期间才确定,即一个引用变量创建会指向哪个类的实例对象,该引用变量发出的方法调用的到底是哪个类中实现的方法,必须在程序运行期间才能决定。
    2.1.5有了基本数据类型为什么还要有包装类型
    Java提供了八种基本数据类型。包装类型:每一个基本数据类型都会一一对应一个包装类型
    装箱:把基本的数据类型转换成对应的包装类型。
    拆箱:就是把包装类型转换为基本数据类型
    Java是一个面向对象的语言,而基本的数据类型,不具备面向对象的特性。
    2.1.6说一下“==”与equals方法究竟有什么区别
    ==是用来判断两个变量之间的值是否相等,变量就可以分为基本数据类型、引用类型。如果是基本数据类型的变量值直接比较值而引用类型要比较对应的引用的内存首地址
    Equal用来比较两个对象长得是否一样,判断两个对象的某些特征是否一样,实际上就是调用对象的equal方法进行比较
    2.1.7说一下string和stringbuffer的区别
    在java中提供了三个类。String、stringbuilder‘stringbuffer来表示和操作字符串,字符串就是多个字符的集合
    String是内容不可变的字符串’而其他两个则可以,string底层使用了一个不可变得字符数据。而其他两个底层使用的是可变的字符数组非final修饰。拼接字符串不能使用string进行拼接,要使用stringbuilder‘stringbuffer,stringbuffer是线程安全的效率较低,stringbuilder‘是线程不安全的效率较高。
    2.1.8讲一下java中的集合
    java中的集合分为值和key-value两种。
    存储值得有list和set,
    List是有序的和可以重复的,set是无序的,不可以重复的,根据equal和hashcode判断,也就是一个对象要是存储在set中,必须重写equals和hashcode方法。
    存储key-value的为map
    ArrayList和linkedlist的区别
    List常用的是ArrayList和linkedlist,区别是使用场景
    ArrayList使用的是数组Linkedlist 使用的是链表。数组查询具有所有查询特定元素比较快,而插入和删除和修改比较慢(数组在内存中是一块连续的内存,如果插入或删除是需要移动内存)链表不是要求内存连续的,在当前元素中存放下一个或者上一个元素的地址,查询时需要从头部开始,一个一个的找,所以查询效率低,插入时不需要移动内存,只需改变引用指向即可,所以插入和删除的效率高
    ArrayList使用在查询比较多,但是插入和删除比较少的情况,而linkedlist使用在查询比较少儿插入和删除比较多的情况20200304136925
    2.1.9讲一下hashmap和hashtable的区别
    Hashmap和hashtable都可以使用来存储key-value的数据
    Hashmap是可以把null作为key或者value的 ,而hashtable不可以
    Hashmap是线程不安全的,效率较高,而
    hashtable是线程安全的效率较低
    为了即实现线程安全有效率较高可以使用concurrenthashmap
    2.1.10实现一个拷贝文件的工具类使用字节流还是字符流
    我们拷贝的文件不确定是只包含字符流,有可能有字节流(图片、声音、图像等),为了考虑通用性,要使用字节流。
    2.1.11讲一下线程的几种实现方式?
    通过继承thread类实现一个线程
    通过实现runnable接口实现一个线程
    继承扩展性不强,java总只支持单继承,如果一个类继承thread就不能继承其他类了
    怎么启动?
    Thread thread = new Thread(继承了thread 的对象/实现了runnable的对象);
    Thread.setName();
    thread.start()
    启动线程使用start 方法,而启动了以后执行的是run方法
    怎么区分?
    在一个系统中有很多线程,每个线程都会打印日志,我想区分是哪个线程打印的怎么办?只需要在创建线程的时候设置一个线程名Thread.setName();这是一种规范,在创建线程完成后都需要设置名称。

2.1.12有没有使用过线程并发库?
简单了解过。Jdk5中增加了douglea的并发库,这一引进给java线程的管理和使用提供了强大的便利性,java.util.current包中提供了对线程优化,管理的各项操作,使得线程的使用得心应手,改包提供了线程的运行,线程的创建,线程生命周期的控制、
Java通过executors提供四种静态方法创建线程池,分别为:
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。线程池的作用:
限定线程的个数,不会导致由于线程过多而导致系统运行缓慢或崩溃
线程池不需要每次都去创建或销毁,节约了资源
线程池不需要每次都去创建,响应时间更快

2.1.13讲一下什么是设计模式,常用的设计模式有哪些?
设计模式就是经过无数前人无数次的实践总结出的在设计过程中可以反复使用的,可以解决特定问题的设计方法。
单例模式:饱汉模式、饥汉模式
懒汉方式。指全局的单例实例在第一次被使用时构建。
饿汉方式。指全局的单例实例在类装载时构建。[1]

  1. 构造方法私有化,除了自己能创建外,其他地方都不能创建
  2. 在自己的类中创建一个单实例(饿汉模式是一出来就创建单实例,而
    懒汉模式是在需要的时候创建)
  3. 提供一个方法获取该实例对象
    工厂模式:spring的IOC就是使用的工厂模式,对象的创建交给一个工厂去创建。
    代理模式:spring的aop就是使用的动态代理
    包装模式
    2.2javaweb部分
    2.2.1讲一下http get和post请求的区别
    Get和post都是http的请求方式没用户通过不同的http的请求方式完成对资源URL的操作,get、post、put、delete就对应着这个资源的查、改、增、删四个操作。具体来讲get一般用于获取查询资源信息,而post一般用于更新资源信息
  4. Get提交的数据会在地址栏显示出来,而post不会
  5. 传输数据大小不一样,post不会限制地址长度
  6. Post的安全性比get的要高
    2.2.2说一下你对servlet的理解
    全称java servlet, 是用java编写的服务器的程序,而这些servlet都要实现servlet这个借口,其主要功能在于交互式的浏览和修改数据,生成动态web内容,servlet运行于支持java的应用服务器中,,httpservlet 重新doget和dopost方法或者也可以重写service方法完成对对get和post请求的响应。
    2.2.3简单说一下servlet的生命周期?
    加载和实例化、初始化、处理请求以及服务结束,这个生存期有java.servlet.Servlet接口的init、service、和destroy方法表达
    Servlet启动时,开始加载servlet生命周期开始,servlet被服务器实例化后,容器运行期init方法,请求到达时运行service方法,service方法自动派遣运行于请求对应的doxx方法等,当服务器决定将实例销毁的时候(服务器关闭)调用其destroy方法。
    加载servlet的class–实例化servlet====>调用servlet的init完成初始化–响应请求(servlet的service方法)—servlet容器关闭时(servlet的destroy方法)
    2.2.4servlet API中forward和redirect的区别?
    前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,后者则是完全的跳转,浏览器(客户端)将会得到跳转的地址并重新发送请求连接,forward还是原来的请求,而redirect似乎重新发起请求,这样,从浏览器的地址栏中可以看到跳转后的连接地址,所以前者更加高效,在前者可以满足需求时,尽量使用forward方法,并且。这样也有助于隐藏实际的连接,在有些情况下,比如,需要跳转到一个其他服务器上的资源则必须使用sendredirect方法
  7. forward是服务器的转向,而redirect是客户端的跳转
  8. 使用forward浏览器的地址不会发生改变,而redirect会发生改变
  9. Forward是一次请求中完成,而redirect是重新发起请求
  10. Forward是在服务器端完成,而不用客户端重新发起请求,效率较高
    2.2.5 jsp和servlet有哪些相同点和不同点,他们之间的联系是什么?
    Jsp是servlet的扩展,所有的jsp文件都会被翻译为一个继承httpservlet的类jsp最终也是一个servlet。这个servlet对外提供服务,两者最主要的不同点在于servlet如果要实现HTML的功能必须使用writer输出对应的html比较麻烦,而jsp可以组合HTML和java代码。
    Jsp侧重于视图,而servlet主要用于控制逻辑
    2.2.6 jsp的常用内置对象?
    Request 用户端请求,此请求包含get/post请求的参数
    Response网页传回用户端的回应
    Pagecontext网页的属性在这里管理
    Session与请求有关的会话期
    Out用来传送回应的输出
    Exception针对错误网页,未补捉的例外
    四大作用域:pagecontext,request,session,application 可以通过jstl从四大作用域中取值
    Jsp传值:request session application cookie也能传值
    2.2.7说一下session和cookie的区别
    两者都是会话跟踪技术。Cookie是通过客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份,但是session的实现依赖于cookie,sessionID
  11. cookie数据存放在客户的浏览器上,session数据放在服务器上
  12. cookie不是很安全,别人可以分析存放在本地的cookie并运行cookie欺骗,考虑到安全应使用session
  13. session会在一定时间内保存在服务器上,当访问增多会比较占用服务器性能考虑到减轻服务器性能方面应当使用cookie
  14. 单个cookie保存的数据不能超过4k,很多浏览器都心智一个站点最多保存20个cookie
  15. 所以个人建议:
    将登陆信息等重要信息存放为session
    其他信息如果需要保留,可以放在cookie中 例如购物车最好使用cookie,但是cookie是可以在客户端禁用的,这时候我们要使用cookie+数据库的方式实现,当cookie中不能取到数据时,就从数据库中取。
    2.2.8MVC的各个部分都有哪些技术来实现?
    M(Model) 模型 javabean
    V(View) 代码视图 html jsp freemaker
    C(Control) 控制器 servlet action
    Jsp+servlet+javabean最经典的MVC模式,实际上是model2的实现方式,就是把视图和逻辑隔离开来。
    Model1的方式:jsp+service+dao
    Model2的方式:jsp+servlet+service+dao
    使用Struts2和springmvc这样的MVC框架,jsp+核心控制器+action+javabean
    2.3数据库部分
    2.3.1数据库的分类:
    关系型和非关系型数据库
    关系型:MySQL、oracle、SqlServer
    非关系型:Redis、mogodb‘Hadoop’
    2.3.2简单介绍一下关系数据库三范式
    范式就是关系型数据库在设计表时要遵循的规范。要想满足第二范式必须先满足第一范式,要想满足第三范式必须先满足第二范式。
    第一范式是指数据库表的每一列都是不可分割的数据项,同一列中不可能有多个值即实体中的某个属性不能有多个值或者不能有重复的属性,列数据的不可分割
    第二范式要求数据表中的每个行必须可以被唯一的区分,为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识(主键)。
    第三范式要求一个数据库表中不包含已在其他表中已包含的非主关键字(外键)
    2.3.3事务的四大特征ACID
    事务是并发控制的单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位
    原子性:表示事务内操作不可分割,要么都成功要么都失败
    一致性:要么都成功要么都失败,后面的失败了要对前面的操作进行回滚
    隔离性:一个事务开始后,不能受其他事务干扰
    持久性/持续性:表示事务开始了就不能终止
    2.3.4MySQL数据库的默认的最大连接数?
    为什么最大连接数?特定服务器上面的数据库只能支持一定数目同时连接,这时需要我们设置最大连接数(最多同时服务多少个连接)在数据库安装时都会有一个默认的最大连接数100。
    2.3.5说一下MySQL的分页,oracle的分页
    为什么需要分页?在很多数据时不可能完全显示数据,进行分页展示
    MySQL是使用关键字limit进行分页的,limit offset,size表示从多少索引取多少位
    Oracle的分页,大部分情况下我们是记不住了 说思路 要使用三层嵌套查询
    2.3.6简单讲一下数据库的触发器的使用场景?
    触发器,需要有触发条件,当条件满足以后做什么操作
    例如在使用一个论坛时,每插入一个帖子,最希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,用触发器做效率就很高。
    2.3.7简单讲一下数据库的存储过程的使用场景?
    优点:
  16. 存储过程只是在创建的时候进行编译,以后每次只需存储过程都不需要重新编译
  17. 复杂的业务逻辑需要更多的sql 时,如果将这些操作放在存储器中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载
  18. 创建一次可以重复使用,从而减少数据库开发人员的工作量
  19. 安全性高,存储过程可以屏蔽对底层数据库对象的直接访问。
    2.3.8用jdbc怎么调用存储过程?
    加载驱动
    获取连接
    设置参数
    执行
    释放
    2.3.9 常用sql
    2.3.10简单说一下你对jdbc的理解
    Java database connection java数据库连接。数据库管理系统是很多的比如MySQL、oracle,但每个数据库管理系统支持的命令是不一样的。Java只定义接口,让数据库厂商自己实现接口,对于开发者而言,只需要导入对应厂商开发的实现即可,然后以接口的方式进行调用(MySQL+mysql驱动(实现)+jdbc)
    2.3.11写一个简单的jdbc的程序。
    加载驱动
    获取连接
    设置参数
    执行
    Class.forName(“oracle.jdbc.driver.OracleDriver”);
    conn=DriverManager.getConnection(url, user, password);
    statement = conn.createStatement();
    2.3.12jdbc的preparedstatement相比statement的好处?
  20. preparedstatement是预编译的,比statement速度快
    2.代码的可读性和可维护性preparedstatement较好
  21. preparedstatement可以防止sql注入,而statement却不能
    2.3.13数据库连接池的作用
    1.限定数据库连接的个数,不会导致由于数据库连接过多导致系统运行缓慢或崩溃、
    2.数据库连接不需要每次都去创建或销毁,节约了资源
    3.数据库连接不需要每次都去创建,响应时间更快
    2.4前端部分
    2.4.1简单说一下HTML、css、JavaScript在网页开发中的定位?
    Html:超文本语言,定义网页的结构
    Css层叠样式表,用来美化页面
    JavaScript主要用来验证表单,用来做动态交互(ajax)
    2.4.2简单介绍一下ajax?
    什么是ajax?异步的JavaScript和xml
    作用是什么? 通过ajax与服务器进行数据交换,ajax可以使网页实现布局更新。这意味着可以在不重新加载整个页面的情况下对页面的某个部分进行更新,怎么来实现ajaxxmlhttprequest对象,使用这个对象可以异步向服务器发出请求,获取响应,完成局部更新。
    使用场景?登录页面时跳转页面,注册时提示用户名是否存在,二级联动等。。
    2.4.3js 和jQuery的关系?
    jQuery是一个js框架封装了js的属性和方法,并且增强了js的功能,让用户使用起来更加便利。
    使用原生js是要处理很多兼容性的问题,由jQuery封装了底层,就不用处理兼容性问题
    原生的js的dom和事件绑定等操作非常麻烦,jquery封装以后操作非常方便
    2.4.4jQuery的常用选择器?
    ID选择器 通过ID获取一个元素
    Class选择器 通过类css获取元素
    标签选择器 通过标签获取元素
    通用选择器
    属性选择器 tag=[attrName=’’] 获取属性名为xxxx并且值为xxx的所有标签
    2.4.5jquey的页面加载完毕事件?
    很多时候我们获取元素,但是必须等到该元素被加载完成是才能获取,我们可以把js代码放到该元素的后面,但是这样就会造成js在我们的body中存在不好管理,所有页面加载完毕后所有元素当然已经加载完毕,一般获取元素做操作都要在页面加载完毕后操作
    第一种:${document}.ready(function(){}))
    documentdocumentdomjQueryreadyReady(fn)fn{document}把原生的document这个dom对象转换为jQuery对象,调用完成后才能调用ready方法。Ready(fn)表示的是页面结构被加载完毕后执行传入函数fn 第二种(function(){}) 当页面加载完毕后执行里面的函数
    与window.onload的区别
  22. jQuery中的页面加载完毕事件,表示的是页面结构被加载完毕
  23. Windows.onload表示的是页面被加载完毕
    2.4.6jQuery的ajax和原生js实现ajax有什么关系?
    jQuery中的ajax也是通过原生的js封装的。如果使用原生的js实现ajax是非常麻烦的,并且每次都是一样的,如果我们不使用jQuery,我们也要封装对象的方法和属性,有像jQuery这些已经封装完成,并且经过很多企业实际的框架,比较可靠并且开源,我们就不需要封装,直接使用成熟的jQuery框架。
    2.4.7简单说一下HTML5
    HTML5是最新版本的HTML,是在原来HTML4的基础上增强了一下标签。增加了一些像画板、声音、视频等高级功能,但是HTML5有一个不好的地方,那就是HTML5太强调语义了,导致开发中都不知道要选择哪个标签。
    2.4.8简单说一下css3?
    Css3是最新版本的css,是对原来css2的功能增强。Css3中提供一些原来css2中实现起来比较困难或者不能实现的功能。例如盒子边框,渐变等。Css3最大的缺点就是要根据不同的浏览器处理兼容性,对应有一些处理兼容性的工具。
    2.4.9bootstrap是什么?
    Bootstrap是一个移动设备优先的UI框架,我们可以不用写任何的css,js代码就能实现比较漂亮的有交互性的页面,我们程序员对页面的编写时有硬伤的,所以要自己写页面的话就要使用类似于bootstrap这样的UI框架。
    2.5框架部分
    2.5.1什么是框架
    1.提供了一定的功能,可以在框架的基础上开发,提高了开发效率
    2.框架天生就是为扩展而设计的
    3.框架可以为后续扩展的组件提供 更多的辅助性
    2.5.2mvc模式
    Mvc 包含模型、视图、控制器。最简单最经典的mvc 模式是jsp+servlet+Javabean’
    控制器收到用户的请求后,调用javabean完成业务,通过跳转页面的方式给用户反馈信息。
    2.5.3mvc框架
    是为了解决传统mvc模式问题而出现的框架。
    传统mvc模式问题:
  24. 所有的servlet和servlet映射都要配置在web.xml中,如果项目太大,web.xml就太庞大,并且不能实现模块化管理
  25. Servlet的主要功能就是接受参数,调用逻辑,跳转页面,比如像其他字符编码,文件上传功能 也要写在servlet中。
  26. 接受参数比较麻烦
  27. 跳转页面比较单一,并且页面名称发生改变时需要修改servlet源代码
    现在常用的mvc框架有:Struts springmvc
    2.5.4简单讲一下Struts
    2.5.5Struts2的拦截器是什么?
    2.5.6简单讲一下springmvc的执行流程

一个请求匹配前端控制器 DispatcherServlet 的请求映射路径(在 web.xml中指定), WEB 容器将该请求转交给 DispatcherServlet 处理
DispatcherServlet 接收到请求后, 将根据 请求信息 交给 处理器映射器 (HandlerMapping)
HandlerMapping 根据用户的url请求 查找匹配该url的 Handler,并返回一个执行链
DispatcherServlet 再请求 处理器适配器(HandlerAdapter) 调用相应的 Handler 进行处理并返回 ModelAndView 给 DispatcherServlet
DispatcherServlet 将 ModelAndView 请求 ViewReslover(视图解析器)解析,返回具体 View
DispatcherServlet 对 View 进行渲染视图(即将模型数据填充至视图中)
DispatcherServlet 将页面响应给用户
2.5.7springmvc和Struts2的区别?
一、框架机制
Struts2采用Filter实现,SpringMVC则采用Servlet实现。
二、拦截机制
1、Struts2
a、Struts2框架是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype(否则会出现线程并发问题),然后通过setter,getter吧request数据注入到属性。
b、Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。
c、Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
2、SpringMVC
a、SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。
b、在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。
三、性能方面
SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。而Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,所以,SpringMVC开发效率和性能高于Struts2。
四、拦截机制
Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。
五、配置方面
spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
SpringMVC可以认为已经100%零配置。
六、设计思想
Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。
七、集成方面
SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
2.5.8说一下spring中的两大核心?
Spring是J2EE应用程序框架是轻量级的IOC和aop的容器框架,主要是真的javabean的生命周期进行管理的轻量级容器,可以单独使用也可以和其他框架组合使用
IOC 控制反转 原来:我的service 需要调用dao service 就需要创建dao
Spring 发现你service依赖于dao就给你注入
核心原理:就是配置文件+反射+容器
Aop面向切面编程:
核心原理:使用动态代理的设计模式在执行方法前后或出现异常做后加入相关逻辑
主要用来做:
事务处理 开启事务、执行完成后关闭事务、出
现异常回滚事务
权限判断 在执行方法前判断是否具有权限
日志 在执行前进行日志处理
2.5.10讲一下spring的事务传播特性

  1. PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
  2. PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
    3 PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
  3. PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
  4. PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    
  5. PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
    
  6. PROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。
    

2.5.12.什么是orm
对象关系映射 是一种为了 解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说orm是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。常用的框架有hibernate、mybatis
2.5.13mybatis与hibernate有什么不同?
相同点:
透视java中orm框架,屏蔽jdbcapi的底层访问细节
不同点:
1.hibernate要比mybatis功能强大的多,因为hibernate自动生成sql语句
2.Mybatis需要我们自己在xml配置中写sql语句,hibernate无法直接控制语句,我们就无法去写特定的高效语句sql。Hibernate对于一些太过复杂的语句就很难适应
3.mybatis要比hibernate简单的多,mybatis是面向sql的,不同考虑对象间一些复杂的映射关系.
2.5.14webservice使用场景
Webservice是一个soa面向服务的编程的架构,他不依赖于语言,不依赖于平台,可以实现不同语言间的相互调用,通过Internet进行基于http协议的网络应用间的交互

2.5.15简单介绍一下activity
Activity是一个业务流程管理和工作流系统,适用与开发人员和系统管理员,其核心是超快速,稳定的bpmn2流程引擎,他易于spring集成使用、
主要在OA中,把线下流程放到线上,把现实生活中的一些流程固话定义到系统中。然后通过输入表单数据完成业务。

1、按照最新标准书写中心要求的流程分析文档,1个流程,当前已完成70%(统计应拨付填单据);
2、临沂:接口服务失业人员丧葬补助金申请、失业保险待遇停发、待遇发放账号信息增加eventid 字段和扫描材料环节,当前已完成90%(任务编号:r20200303136739)
3.复读工单

2.6高级部分
2.6.1有没有用过linux,你都用来干什么?
Linux是一个长时间运行比较稳定的操作系统,所以我们一般会拿他作为服务器
2.6.2说一下Linux下面的一些常用命令
Pwd获取当前路径 cd 跳转到目录 su-u 切换到管理员 ls 列举目录
文件操作命令: tail 查看 rm –rf y移除 vi 修改
Mkdir 新建 rm- rf 移除
2.6.3你有没有做过一些关于数据库的优化
1.优化sql 查找、定位慢查询并优化
a) 创建索引
b) 分表 当一张表的数据比较多或者一张表的字段某些字段的值比较多并且很少使用时采用水平分表和垂直分表来优化
c) 读写分离 当一台服务器不能满足需求时,把读和写分离的方式进行集群
d) 缓存使用Redis来进行缓存
e) 一些常用的优化技巧
2.6.4如何查找并定位慢查询
在项目自验和项目转测试之前,先在启动数据库时开启慢查询,并且把执行慢的数的语句写到日志中,在运行一定的时间后查找日志找到慢查询语句。
使用explan 慢查询语句,来详细分析慢查询语句以及语句的问题。
2.6.5选择合适的数据库引擎
Myisam 对事务的要求不高,同时是以查询和添加为主的
Innodb 对事务的要求高,保存的是重要数据,建议使用innodb
Memory 数据变化频繁,不需要入库,同时又频繁的查询和修改,考虑使用

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!