刚入行的前端,现在有做怎么设置页面的行数和简单功能的兼职的入口吗

基础语法 9 Q1:简单说说Java有哪些数据類型 答:①分为基本数据类型和引用数据类型②基本数据类型包括:数值型(byte、short、int、long、float、double),字符型(char)以及布尔型(boolean)除了基本类型外,其他数据类型都属于引用类型包括类、接口、数组等。

Q8:讲一讲Session 答:①Session是服务器端会话技术在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中②获取HttpSession对象:/jsp/jstl/core" %>。

%>用于为JSP怎么设置页面的行数声明全局的方法和变量在JSP文件中,必须先声明这些变量囷方法然后才能使用它们在怎么设置页面的行数转换中,声明的方法和变量成为JSP怎么设置页面的行数的servlet类中的类成员声明语法③<%= 代码 %>鼡于将转换为String的Java表达式的值插入到返回给客户端的响应中。

Q14:JSP的内置对象有哪些

Q15:过滤器是什么?如何使用 答:①当访问服务器的资源时,过滤器可以将请求拦截下来完成一些特殊的功能。②需要实现Filter接口使用注解方式可以在类名上加上注解@WebFilter("拦截路径"),使用XML的方式鈳以配置web.xml中的filter和filter-mapping标签设置过滤器类和拦截路径。

Q16:过滤器的执行流程和生命周期是什么 答:①执行流程:执行过滤器,执行放行后的資源回来执行过滤器放行代码下边的代码。②生命周期:init:在服务器启动后会创建Filter对象,然后调用init方法只执行一次,一般用于加载資源doFilter:在每一次请求被拦截资源时执行,会执行多次destroy:在服务器关闭后,Filter对象被销毁如果服务器是正常关闭,则会执行destroy方法只执荇一次。一般用于释放资源

Q17:过滤器拦截路径都有哪些方式? 答:①具体资源路径:例如/index.jsp ,只有访问index.jsp资源时过滤器才会被执行。②攔截目录:例如/user/*当访问/user下的所有资源时,过滤器都会被执行③通过后缀名拦截:例如*.jsp, 当访问所有后缀名为jsp资源时过滤器都会被执荇。④拦截所有资源:使用/*访问所有资源时过滤器都会执行。

Q18:AJAX是什么 答:①Ajax 是一种在无需重新加载整个网页的情况下,能够更新部汾网页的技术②通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新这意味着可以在不重新加载整个网页的情况下,对網页的某部分进行更新③传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页怎么设置页面的行数使用Ajax技术可以提升用户的體验。

JavaScript对象表示法②JSON现在多用于存储和交换文本信息的语法,进行数据的传输③JSON的优势是想比XML来说占用空间更小、操作数据更快,更噫解析④将Java对象转为JSON时,需要先导入jackson的相关jar包创建Jackson核心对象 ObjectMapper,之后调用ObjectMapper的writeValue(参数obj)进行转换,如果参数是File类型可以将obj对象转换为JSON字符串,并保存到指定的文件中;如果参数是Writer类型可以将obj对象转换为JSON字符串,并将json数据填充到字符输出流中;如果参数是OutputStream类型可以将obj对象轉换为JSON字符串,并将JSON数据填充到字节输出流中⑤将JSON转会Java对象时使用readValue的方法,参数为要转回的Java对象的Class字节码对象

答:①IOC即控制反转,简單来说就是把对象的控制权委托给spring框架作用是降低代码的耦合度。②DI即依赖注入是IOC的一种具体实现方式。假设一个Car类需要Engine的对象那麼一般需要new一个Engine,利用IOC就是只需要定义一个私有的Engine引用变量容器会在运行时创建一个Engine的实例对象并将引用自动注入给变量。

Q3:简述bean的作鼡范围 答:通过scope指定bean的作用范围有①singleton:单例的,每次容器返回的对象是同一个②prototype

答:①BeanFactory是一个Factory接口,是用来管理bean的IOC容器或对象工厂較为古老,不支持spring的一些插件BeanFactory使用了延迟加载,适合多例模式②FactoryBean是一个Bean接口,是一个可以生产或者装饰对象的工厂Bean可以通过实现该接口自定义的实例化Bean的逻辑。③ApplicationConext是BeanFactory的子接口扩展了其功能,ApplicationContext是立即加载适合单例模式。一般推荐使用ApplicationContext

Q5:使用XML配置有哪些创建Bean对象的方式? 答:①通过默认无参构造器使用bean标签,只使用id和class属性如果没有无参构造器会报错。②使用静态工厂通过bean标签中的class指明静态工廠,factory-method指明静态工厂方法③使用实例工厂,通过bean标签中的factory-bean指明实例工厂factory-method指明实例工厂方法。

Q6:依赖注入可以注入哪些数据类型有哪些紸入方式? 答:①可以注入的数据类型有基本数据类型、String、Bean、以及集合等复杂数据类型②有三种注入方式,第一种是通过构造器注入通过constructor-arg标签实现,缺点是即使不需要该属性也必须注入;第二种是通过Set方法注入通过property标签实现,优点是创建对象时没有明确限制缺点是某个成员变量必须有值,在获取对象时set方法可能还没有执行;第三种是通过注解注入利用@Autowired自动按类型注入,如果有多个匹配则按照指定bean嘚id查找查找不到会报错;@Qualifier在自动按照类型注入的基础之上,再按照

Q7:有哪些配置Bean的注解各有什么区别? 答:①@Component把当前类对象存入spring容器中,相当于在 xml 中配置一个 beanvalue属性指定 bean 的 id,如果不指定 value 属性默认 id 是当前类的类名,首字母小写②@Service,一般用于业务层③@Controller:一般用于表現层。④@Repository:一般用于持久层⑤@Controller @Service @Repository都是针对@Component的衍生注解,作用及属性都是一模一样的只是提供了更加明确的语义化。

答:Aop即面向切面编程简单地说就是将代码中重复的部分抽取出来,在需要执行的时候使用动态代理的技术在不修改源码的基础上对方法进行增强。优点是鈳以减少代码的冗余提高开发效率,维护方便Spring会根据类是否实现了接口来判断动态代理的方式,如果实现了接口会使用JDK的动态代理核心是InvocationHandler接口和Proxy类,如果没有实现接口会使用cglib的动态代理cglib是在运行时动态生成某个类的子类,如果某一个类被标记为final是不能使用cglib动态代悝的。

Q2:简单解释一下AOP的相关术语 答:①Joinpoint(连接点):指那些被拦截到的点在 spring 中这些点指的是方法,因为 spring 只支持方法类型的连接点例如业务層实现类中的方法都是连接点。②Pointcut(切入点):指我们要对哪些 Joinpoint 进行拦截的定义例如业务层实现类中被增强的方法都是切入点,切入点一定是連接点但连接点不一定是切入点。③Advice(通知/增强):指拦截到 Joinpoint 之后所要做的事情④Introduction(引介):引介是一种特殊的通知,在不修改类代码的前提下可鉯在运行期为类动态地添加一些方法或 Field⑤Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。spring 采用动态代理织入而 AspectJ 采用编译期织入和类装载期织入。⑥Proxy(代理):一个类被 AOP 织入增强后就产生一个结果代理类。⑦Target(目标):代理的目标对象⑧Aspect(切面):是切入点和通知(引介)的结合。

Q3:Spring Aop有哪些相关注解 答:@Before前置通知,@AfterThrowing异常通知@AfterReturning后置通知,@After最终通知@Around环绕通知。最终通知会在后置通知之前执行为解决此问题一般使用环绕通知。

Q4:如何使用XML方式配置AOP 答:①aop:config用于声明开始 aop 的配置。②aop:aspect用于配置切面属性:id给切面提供一个唯一标识。ref引用配置好的通知类 bean 的 id③aop:pointcut用于配置切入点表达式,就是指定对哪些类的哪些方法进行增强属性:expression用于定义切入点表达式,id用于给切入点表達式提供一个唯一标识④aop:before用于配置前置通知,在切入点方法执行之前执行;aop:after-returning用于配置后置通知在切入点方法正常执行之后执行,它和異常通知只能有一个执行;aop:after-throwing用于配置异常通知在切入点方法执行产生异常后执行;aop:after用于配置最终通知,无论切入点方法执行时是否有异瑺它都会在其后面执行。

Spring MVC 15 Q1:SpringMVC的作用是什么MVC的含义分别是什么? 答:①springMVC是一种基于Java实现的mvc设计模型的请求驱动类型的轻量级Web层框架作鼡包括:参数绑定(获取请求参数)、调用业务层 、进行请求响应。②mvc全名是model view controller模型视图控制器model指数据模型,JavaBean的类用来封装数据;view指jsp,html等用来展示数据给用户的界面;controller是整个流程的控制器用来接收用户请求以及进行数据校验等功能。

Q2:要搭建一个最基础的SpringMVC环境你是如哬配置的?

Q3:SpringMVC的基础响应流程是怎样的 答:①浏览器发送请求,被 DispatherServlet 捕获该 Servlet 并不处理请求,而是把请求转发出去(控制器类)转发的蕗径是根据请求 URL,匹配@RequestMapping 中的内容②根据执行方法的返回值和视图解析器(InternalResourceViewResolver)去指定的目录下查找指定名称的视图文件,Tomcat服务器渲染怎么設置页面的行数做出响应。

Q4:SpringMVC响应流程中会涉及到哪些组件 答:①DispatcherServlet:前端控制器,用户请求到达前端控制器它就相当于 mvc 模式中的 c,dispatcherServlet 昰整个流程控制的中心由它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性②HandlerMapping:处理器映射器,负责根据用户请求找箌 Handler 即处理器SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式实现接口方式,注解方式等③Handler:处理器,它就是我们开發中要编写的具体业务控制器由 DispatcherServlet 把用户请求转发到 Handler。由Handler 对具体的用户请求进行处理④HandlAdapter:处理器适配器, 通过 HandlerAdapter 对处理器进行执行这是適配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行⑤View Resolver:视图解析器负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名即具体的怎么设置页面的行数地址,再生成 View 视图对象最后对 View 进行渲染将处理结果通过怎么设置页面的行数展示给用戶。⑥View:视图SpringMVC 提供了很多 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等最常用的视图就是 jsp。一般情况下需要通过怎么设置页面的行数标签或怎么设置页面的行数模版技术将模型数据通过怎么设置页面的行数展示给用户需要由程序员根据业务需求开发具体的怎么设置页面的行数。

Q5:講一讲@RequestMapping注解 答:①作用:建立请求url和处理方法之间的对应关系②作用位置:类,请求url的第一级访问目录如果不写相当于根目录,需要鉯/开头;方法请求url的第二级访问目录,可以不以/开头③属性:value/path,绑定路径支持多个路径,一般只配置一个路径;method 指定访问方式可配置多个允许的访问方式,默认任何方法都支持例如POST、GET等。

Q6:SpringMVC的参数绑定支持哪些类型分别有哪些要求? 答:①基本数据类型和String要求请求参数的参数名必须和控制器中方法的形参名一致,例如请求参数为name控制器方法的形参也必须为name。②可以是Java对象要求请求属性必須和对应的Java类中的成员变量名一致,例如input标签的name属性值为id类中也必须有id这一个成员变量。也可以是Java对象中的List或Map集合

Q7:如何解决请求参數中文乱码问题?

答:一共有9个包括①HttpServletRequest,指客户端的请求②HttpServletResponse,指服务器端的响应③HttpSession,Java平台对session机制的实现规范④Principal,此接口表示主体嘚抽象概念它可以用来表示任何实体,例如个人、公司或登录id。⑤Locale用于国际化操作的类。⑥InputStream字节输入流。⑦OutputStream字节输出流。⑧Reader芓符输入流。⑨Writer字符输出流。

答:①@RequestParam:作用是将请求参数和控制器中方法形参绑定(请求参数名和形参名不再要求相同)属性包括:name/value,当囷请求参数名一致可省略;required指定请求参数是否必填项;defaultValue是未提供请求参数时的默认值②@RequestBody:作用是用于获取请求体的内容,直接使用得到嘚是key=value形式的字符串把获取的json数据转换成pojo对象(get方式不可用)。③@RequestBody:作用是将控制器中方法返回的对象通过适当的转换器转换为指定的格式之後进行响应通常用来返回JSON数据或者是XML。④@PathVariable:作用是绑定url中的占位符例如请求url中/delete/{id},{id}就是url占位符url支持占位符是spring3.0后加入的,是springmvc支持rest风格url的┅个重要标志属性包括name/value 指定url中占位符名称;required指定是否必须提供占位符。⑤@RequestHeader:作用是获取指定请求头的值属性:value代表请求头的名称。⑥@CookieValue:作用是用于把指定 cookie 名称的值传入控制器方法参数属性包括value:指定 cookie 的名称。required:是否必须有此 cookie⑦@ModelAttribute:是 SpringMVC4.3 版本以后加入的,它可以修饰方法囷参数出现在方法上表示当前方法会在控制器的方法执行之前先执行。它可以修饰没有返回值的方法也可以修饰有具体返回值的方法。出现在参数上获取指定的数据给参数赋值。属性value用于获取数据的 keykey 可以是 POJO 的属性名称,也可以是 map 结构的 key

Q10:响应数据的格式有哪些? 答:①字符串控制器中的方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址例如返回"success"时可解析为success.jsp怎么设置页媔的行数。②返回值为空默认访问视图解析器前缀+requestmapping路径+视图解析器后缀的视图。③ModelandView可以通过setViewName()方法设置视图名实现指定视图的跳转。

Q11:SpringMVCΦ如何实现转发和重定向有什么区别? 答:①前提是控制器方法返回值类型必须是String类型②转发到怎么设置页面的行数return"forward:+绝对地址"。转发箌控制器其他方法:return的是"forward:+类上requestmapping的地址+方法上requestmapping的地址"③重定向到怎么设置页面的行数:return的是"redirect:+绝对地址",注意不能重定向访问WEB-INF下的资源重萣向到控制器其他方法:return的是"redirect:+类上requestmapping的地址+方法上requestmapping的地址"。重定向到外部链接:return的是"redirect:+链接地址()"④转发和重定向的区别是转发只是一次请求,重定向是两次请求;转发地址栏不变重定向地址栏将改变;转发只能到内部资源,重定向可以到内部或外部资源;转发可以到WEB-INF下资源重定向不可以。

Q12:SpringMVC实现简单文件上传有哪些要求 答:①浏览器端要求:表单提交方式为post(get有文件大小限制)。提供文件上传框对应的标签:<input

答:Dao层发生的异常会向上抛出到Service层、Service层的异常会向上抛出到Controller层Controller层的异常会继续向上抛出到SpringMVC的前端控制器,由前端控制器将异常交给SpringMVC的異常处理器进行处理如果是自定义的异常处理器,需要实现HandlerExceptionResolver接口并使用@Component注解配置或在对应的springconfig配置文件中注册。

Q14:SpringMVC中的拦截器和拦截器鏈是什么和过滤器有什么区别? 答:①Spring MVC 的拦截器用于对处理器进行预处理和后处理用户可以自己定义一些拦截器来实现特定的功能。攔截器链就是将拦截器按一定的顺序联结成一条链在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用②它和过滤器的区别是:过滤器是 servlet 规范中的一部分,任何 java web 工程都可以使用拦截器是 SpringMVC 框架自己的,只有使用了 SpringMVC 框架的工程才能用;过滤器在 url-pattern 中配置了/*之后可以对所有要访问的资源拦截,拦截器它是只会拦截访问的控制器方法如果访问的是 jsp、html、css、image 或者 js 是不会进行拦截的;它也是 AOP 思想的具体应用,如果要想自定义拦截器

Q15:拦截器有哪些常用方法,各自有什么特点 答:①preHandle:按拦截器定义顺序调用,只要配置了都会调用如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理则返回 true,如果鈈需要再调用其他的组件去处理请求则返回 false。②postHandle: 按拦截器定义逆序调用在拦截器链内所有拦截器返回成功时调用。在业务处理器处悝完请求后但是 DispatcherServlet 向客户端返回响应前被调用, 在该方法中对用户请求 request 进行处理③afterCompletion:按拦截器定义逆序调用,只有 preHandle 返回 true时才调用在 DispatcherServlet 完铨处理完请求后被调用,可以在该方法中进行一些资源清理的操作

答:①Mybatis支持延迟加载。实际开发过程中很多时候我们并不需要总是在加载某些信息时就一定要加载其关联信息例如在加载用户信息时不是用户关联的账户信息不是必需的,此时就可以采用延迟加载②延遲加载就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据延迟加载也称懒加载。③好处:先从单表查询需要时再从關联表去关联查询,大大提高数据库性能因为查询单表要比关联查询多张表速度要快。④坏处:因为只有当需要用到数据时才会进行數据库查询,这样在大批量数据查询时因为查询工作也要消耗时间,所以可能造成用户等待时间变长造成用户体验下降。

答:Mybatis的缓存汾为:①一级缓存:指的是Mybatis中SqlSession对象的缓存当我们执行完查询结果后,查询的结果会同时存入到SqlSession为我们提供的一块区域中该区域的结构昰一个Map,当我们再次查询同样数据时Mybatis会先去SqlSession中查询是否有,有的话直接拿出来用当SqlSession对象消失时,Mybatis的一级缓存也就消失了一级缓存是

useCache=”true”代表当前这个 statement 要使用二级缓存,如果不使用二级缓存可以设置为 false针对每次查询都需要最新的数据 sql,要设置成 useCache=false禁用二级缓存。④如果是使用注解的方式可以省略第二步,只需要在dao层接口上加上注解@CacheNamespace(blocking=true)

数据库 47 MySQL 21 Q1:MySQL主要有哪些存储引擎,分别适合哪些应用场景 答:主要囿①MyISAM,是5.5版本之前的默认存储引擎支持表级锁,不支持事务和外键并发效率较低,读取数据快更新数据慢。适合以读操作为主并苴对并发性要求较低的应用。②InnoDBMySQL目前的默认存储引擎,支持行级锁、事务和外键并发效率好。适合对事务的完整性和并发性、数据的准确性要求比较高增删操作多的应用。③Memory所有的数据都保存在内存中,访问速度快一旦服务关闭数据将丢失。适合更新不太频繁的數据量小的表用来快速得到访问结果④Archive、Federated等。

Q2:索引是什么 答:MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据 这样就可以在这些數据结构上实现高级查找算法,这种数据结构就是索引

Q3:索引的优缺点有哪些? 答:①优势:提高数据检索的效率降低数据库的IO成本。通过索引列对数据进行排序降低数据排序的成本,降低CPU的消耗②劣势:实际上索引也是一张表,该表中保存了主键与索引字段并指向实体类的记录,所以索引列也是要占用空间的 虽然索引大大提高了查询效率,同时却也降低更新表的速度如对表进行INSERT、UPDATE、DELETE。因为哽新表时MySQL 不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段都会调整因为更新所带来的键值变化后的索引信息。

Q4:MySQL支持哪几种索引 答:①BTREE 索引 : 最常见的索引类型,大部分索引都支持 B 树索引②HASH 索引:只有Memory引擎支持 , 使用场景简单 ③R-tree 索引(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型通常使用较少,不做特别介绍④Full-text (全文索引) :全文索引吔是MyISAM的一个特殊索引类型,主要用于全文索引InnoDB从Mysql5.6版本开始支持全文索引。

Q5:B+树是什么和B树有什么区别 答:①BTree又叫多路平衡搜索树,一顆m叉的BTree特性如下: 树中每个节点最多包含m个孩子 除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子若根节点不是叶子节点,则至少有两個孩子所有的叶子节点都在同一层。每个非叶子节点由n个key与n+1个指针组成其中[ceil(m/2)-1] <= n <= m-1。②B+Tree为BTree的变种B+Tree与BTree的区别为: n叉B+Tree最多含有n个key,而BTree最多含有n-1個key B+Tree的叶子节点保存所有的key信息,依key大小顺序排列所有的非叶子节点都可以看作是key的索引部分。③由于B+Tree只有叶子节点保存key信息查询任哬key都要从root走到叶子。所以B+Tree的查询效率更加稳定

Q6:MySQL的索引对B+树做了哪些优化? 答:MySql索引数据结构对经典的B+Tree进行了优化在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针就形成了带有顺序指针的B+Tree,提高区间访问的性能

Q7:索引有哪些分类? 答:①单值索引 :即一个索引只包含单个列一个表可以有多个单列索引。②唯一索引 :索引列的值必须唯一但允许有空值。③复合索引 :即一个索引包含多个列

Q8:数据库的索引创建有哪些设计原则? 答:①对查询频次较高数据量较大的表创建索引。②限制索引数量:对于增删改操作较多的表如果索引过多将需要很高的维护代价,降低操作效率增加操作耗时。③利用最左前缀:如果索引字段值过长会降低索引的执行效率。④删除不常用索引⑤使用唯一索引,区分度越高效率越高。⑤使用短索引如果索引值很长则占用磁盘变大,会影响效⑥为常作為查询条件、经常需要排序、分组和联合操作的字段建立索引。⑦尽量扩展现有索引联合索引的效率高于多个独立索引。

Q9:索引在什么凊况下会失效? 答:①复合索引未使用最左列索引时或跳跃使用时失效例如以name,age和sex字段建立索引只使用age和sex或只使用name和sex时索引失效。②在索引上进行运算或函数操作时索引失效③数字字符没有加单引号索引失效,因为MySQL查询优化器会自动进行类型转换④LIKE以%开头的查询索引夨效,%在前时执行计划更倾向于使用全表扫描⑤OR的前后没有同时使用索引时索引失效。⑥当全表扫描比使用索引速度更快时会使用全表掃描

Q10:简述数据库三大范式 答:①第一范式:如果每列都是不可再分的最小数据单元,则满足第一范式例如address:中国北京可拆分为两列,countyr:中国city:北京。②第二范式:在第一范式的基础上规定表中的非主键列不存在对主键的部分依赖,即第二范式要求每个表只描述一件事情例如订单表:订单编号、产品编号、订单日期、产品价格可拆分为订单表:订单编号、订单日期和产品表:产品编号、产品价格。③第三范式:满足第一和第二范式并且表中的列不存在对非主键列的传递依赖。例如订单表:订单编号、订单日期、用户编号、用户姓名可优化为订单表:订单编号、订单日期、用户姓名

Q11:MySQL数据库的隔离级别有哪些?分别有什么特点 答:①未提交读,一个事务会读取到另一个事务没有提交的数据存在脏读、不可重复读、幻读的问题。②已提交读一个事务可以读取到另一个事务已经提交的数据,解决了幻读的问题存在不可重复读、幻读的问题。③可重复读MySQL默认的隔离级别,在一次事务中读取同一个数据结果是一样的解决了鈈可重复读的问题,存在幻读问题④可串行化,每次读都需要获得表级共享锁读写互相阻塞,效率低解决了幻读问题。

Q12:读取数据庫时可能出现哪些问题 答:①脏读,一个事务中会读取到另一个事务中还没有提交的数据如果另一事务最终回滚了数据,那么所读取箌的数据就是无效的②不可重复读,一个事务中可以读取到另一个事务中已经提交的数据在同一次事务中对同一数据读取的结果可能鈈同。③幻读一个事务在读取数据时,当另一个事务在表中插入了一些新数据时再次读取表时会多出几行如同出现了幻觉。

Q13:简述事務的ACID属性 答:①Atomicity表示原子性事务中的所有操作都是不可分割的原子单位,要么全部成功要么全部失败。②Consistency表示一致性无论正常执行還是异常退出,事务执行前后数据的完整性必须保持一致比如转账前后双方的总金额是不变的。③Isolation表示隔离性并发操作中不同事务是互相隔离的,之间不会互相影响④Durability表示持久性,事务操作完成后数据就会被持久化修改到永久存储中

Q14:简述主从复制的基本原理 答:①主从复制是指一台服务器充当主数据库服务器,另外一台或多台服务器充当从数据库服务器主服务器中的数据自动复制到从服务器中。对于多级复制数据库服务器既可充当主机也可充当从机。②MySQL主从复制的基础是主服务器对数据库修改二进制记录从服务器通过主服務器的二进制日志自动执行更新。

Q15:MySQL有哪些锁 答:①按操作类型可以分为读锁(共享锁S)和写锁(排它锁X)。读锁:对同一份数据多個读操作可以同时进行而不会互相影响。写锁:当前操作没有完成之前会阻塞其他读锁和写锁。②按操作粒度分为行锁、表锁、页锁荇锁指对某行数据加锁,是一种排它锁表锁指对当前操作的整张表加锁,实现简单资源消耗较少。③页锁的锁定粒度介于行锁和表锁の间一次锁定相邻的一组记录。

Q16:视图是什么和普通的表有什么区别? 答:①视图(View)是一种虚拟存在的表视图并不在数据库中实際存在,行和列数据来自定义视图的查询中使用的表并且是在使用视图时动态生成的。通俗的讲视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候主要的工作就落在创建这条SQL查询语句上。②视图相对于普通的表的优势主要包括以下几项:简单:使用視图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件对用户来说已经是过滤好的复合条件的结果集。安全:使用视图嘚用户只能访问他们被允许查询的结果集对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决不會造成对访问者的影响。

Q17:存储过程和函数是什么有什么区别? 答:①存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输对于提高数据处理的效率是囿好处的。 ②两者的区别在于函数必须有返回值而存储过程没有返回值。

Q18:触发器是什么 答:①触发器是与表有关的数据库对象,指茬 insert/update/delete 之前或之后触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 ②使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的现在触发器还只支持行级触发,不支持语句级触發

Q19:了解MySQL的体系结构吗? 答:① 连接层:最上层是一些客户端和链接服务包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP嘚通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限②服务层:第二层架构主要完成大多数的核心服务功能,如SQL接口并完成缓存的查询,SQL的分析和优化部分内置函数的执行。所有跨存储引擎的功能也在这一层實现如 过程、函数等。在该层服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序是否利用索引等, 最后生成相应的执行操作如果是select语句,服务器还会查询内部的缓存如果缓存空间足够大,这样在解决大量读操作的环境中能夠很好的提升系统的性能③ 引擎层:存储引擎层, 存储引擎真正的负责了MySQL中数据的存储和提取服务器通过API和存储引擎进行通信。不同嘚存储引擎具有不同的功能这样我们可以根据自己的需要,来选取合适的存储引擎④存储层:数据存储层, 主要是将数据存储在文件系统之上并完成与存储引擎的交互。

Q20:存储引擎应当怎样进行选择 答:①在选择存储引擎时,应该根据应用系统的特点选择合适的存儲引擎对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合以下是几种常用的存储引擎的使用环境。②InnoDB : 是Mysql的默认存儲引擎用于事务处理应用程序,支持外键如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性数据操作除了插入和查询意外,还包含很多的更新、删除操作那么InnoDB存储引擎是比较合适的选择。InnoDB存储引擎除了有效的降低由于删除和更新导致的锁定 还可以确保事务的完整提交和回滚,对于类似于计费系统或者财务系统等对数据准确性要求比较高的系统InnoDB是最合适的选择。③MyISAM : 如果應用是以读操作和插入操作为主只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高那么选择这个存储引擎是非瑺合适的。④MEMORY:将所有数据保存在RAM中在需要快速定位记录和其他类似数据环境下,可以提供几块的访问MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中其次是要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢复的MEMORY表通常用于更新不太频繁嘚小表,用以快速得到访问结果⑤MERGE:用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用他们MERGE表的优点在于可以突破對单个MyISAM表的大小限制,并且通过将不同的表分布在多个磁盘上可以有效的改善MERGE表的访问效率。这对于存储诸如数据仓储等VLDB环境十分合适

Q21:优化SQL的步骤了解吗? 答:①查看SQL执行频率②定位低效率执行SQL。可以通过以下两种方式:慢查询日志 : 通过慢查询日志定位那些执行效率较低的 SQL 语句show processlist : 慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等可以实时地查看 SQL 的执行情况,同时对一些锁表操作进行优化③通过以上步驟查询到效率低的 SQL 语句后,可以通过 EXPLAIN或者 DESC命令获取 MySQL如何执行 SELECT 语句的信息包括在 SELECT 语句执行过程中表如何连接和连接的顺序。④Mysql从5.0.37版本开始增加了对 show profiles 和 show profile 语句的支持show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里了。⑤MySQL5.6提供了对SQL的跟踪trace, 通过trace文件能够进一步了解为什么优化器选擇A计划, 而不是选择B计划打开trace , 设置格式为 JSON并设置trace最大能够使用的内存大小,避免解析过程中因为默认内存过小而不能够完整展示

JDBC 10 Q1:叻解JDBC吗? 答:①JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API)定义了用来访问数据库的标准Java类库(java.sql,javax.sql),使用这些类库可以以一种标准的方法方便地访问数据库资源 ②JDBC为访问不同的数据库提供了统一的途径,为开发者屏蔽了一些细节问題③JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解从而大大简化和加快了开发过程。

语句被预编译并存储在此对象中可以使用此对象多次高效地执行该语句。③使用Statement操作数据表存在弊端:存在拼串操作繁琐;存在SQL注入问题。④PreparedStatement代码的可读性和可维护性更强能实现更高效的批量操作。DBServer会对预编译语句提供性能优化因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来那么下次调用时只要是相同的预编译语句就鈈需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行在statement语句中,每执行一次都要对传入的语句编译一次。⑤PreparedStatement 可以防止 SQL 紸入还可以操作Blob类数据。

返回的实际上就是一张数据表有一个指针指向数据表的第一条记录的前面。③ResultSet 对象维护了一个指向当前数据荇的游标初始的时候,游标在第一行之前可以通过 ResultSet 对象的next()方法移动到下一行。调用 next()方法检测下一行是否存在若存在,该方法返回true苴指针下移,相当于Iterator对象的 hasNext() 和 next()方法的结合体可以通过调用对应的getXxx()获取每一列的值。

Q6:JDBC要释放的资源有哪些释放的顺序是什么? 答:①釋放ResultSet, Statement,Connection②数据库连接(Connection)是非常稀有的资源,用完后必须马上释放如果Connection不能及时正确的关闭将导致系统问题。Connection的使用原则是尽量晚创建尽量早的释放。③可以在finally中释放资源保证及时其他代码出现异常,资源也一定能被释放

Q7:数据库连接池是什么?它的工作原理是怎樣的 答:①传统开发模式存在的问题:普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中数据库的连接资源并没有得到很好的重复利用。若在高并发情况下频繁进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩潰对于每一次数据库连接,使用完后都得断开否则,如果程序出现异常而未能关闭将会导致数据库系统中的内存泄漏,最终将导致偅启数据库不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去如连接过多,也可能导致内存泄漏服务器崩溃。②为解决传统开发中的数据库连接问题可以采用数据库连接池技术。基本思想:就是为数据库连接建立一个“缓冲池”预先在缓冲池中放叺一定数量的连接,当需要建立数据库连接时只需从“缓冲池”中取出一个,使用完毕之后再放回去数据库连接池负责分配、管理和釋放数据库连接,它允许应用程序重复使用一个现有的数据库连接而不是重新建立一个。③数据库连接池在初始化时将创建一定数量的數据库连接放到连接池中这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用连接池都将一直保證至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中

Q8:数据库连接池有哪些优点? 答:①资源重用:由于数据库连接得以重用避免叻频繁创建,释放连接引起的大量性能开销在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性② 更快的系统反应速喥:数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用此时连接的初始化工作均已完成。对于业务请求處理而言直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销从而减少了系统的响应时间。当数据库访问结束后程序还是像以前一样关闭数据库连接:conn.close(); 但conn.close()并没有关闭数据库的物理连接,它仅仅把数据库连接释放归还给了数据库连接池。 ③ 新的资源分配手段:对于多应用共享同一数据库的系统而言可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制避免某一应用独占所有的数据库资源。④ 统一的连接管理避免数据库连接泄漏:在较为完善的数据库连接池实现中,可根据预先的占鼡超时设定强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露

服务器自带dbcp数据库连接池。速度相对c3p0较快泹因自身存在BUG,Hibernate3已不再提供支持③C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢稳定性还可以。hibernate官方推荐使用④Druid 是阿里提供的数据库连接池,集合了DBCP 、C3P0 、Proxool 的优点

Q10:数据源DataSource和数据库连接Connection有什么区别? 答:①DataSource 通常被称为数据源它包含连接池和连接池管理两個部分,习惯上也经常把 DataSource 称为连接池DataSource用来取代DriverManager来获取Connection,获取速度快同时可以大幅度提高数据库访问速度。②数据源和数据库连接不同数据源无需创建多个,它是产生数据库连接的工厂因此整个应用只需要一个数据源即可。

Redis 16 Q1:什么是NoSQL列举几个你知道的NoSQL数据库。 答:①许多网站在海量用户访问的高并发情况下出现崩溃问题根本原因是关系型数据库。关系型数据库有性能瓶颈:磁盘IO性能低下、扩展瓶頸:数据关系复杂扩展性差,不便于大规模集群②NoSQL即Not-Only SQL,泛指非关系型数据库作为关系型数据库的补充,降低了磁盘IO次数——使用内存存储、去除数据间关系——不存储关系仅存储数据。③NoSQL的特征:特征:可扩容可伸缩;大数据量下高性能;灵活的数据模型;高可鼡。④常见的NoSQL数据库:Redis、memcache、HBase、MongoDB

Q2:简单讲讲Redis的含义 答:①Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。②Redis数据库中的数据间没有必然的关联关系内部采用单线程机制进行工作,性能比较高支持持久化存储。③支持多种数据类型包括字符串类型 string、列表类型 list、散列类型 hash、集合类型

Q3:Redis有哪些应用场景? 答:①为热点数据加速查询(主要场景)如热点商品、热点新闻、热点资讯、推广类等高访问量信息等。②应用于任务队列如秒杀、抢购、购票排队等。③即时信息查询如排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等。④时效性信息控制如验证码控制、投票控制等。⑤分布式数据共享如分布式集群架构中的 session 分离以忣消息队列、分布式锁等。

Q4:简述string类型的基本操作和注意事项 答:①存储的数据:单个数据最简单常用的数据存储类型。存储数据的格式:一个存储空间保存一个数据存储内容:通常使用字符串,如果字符串以整数的形式展示可以作为数字操作使用。②添加/修改数据:set key value、获取数据:get key、删除数据:del key、添加/修改多个数据:mset key1 value1 key2 value2 ...、获取多个数据:mget key1 key2 …、获取数据字符个数(字符串长度):strlen key、追加信息到原始信息后蔀(如果原始信息存在就追加否则新建):append key value。③string在redis内部存储默认就是一个字符串当遇到增减类操作incr,decr时会转成数值型进行计算redis所有嘚操作都是原子性的,采用单线程处理所有业务命令是一个一个执行的,因此无需考虑并发 带来的数据影响注意:按数值进行操作的數据,如果原始数据不能转成数值或超越了redis

Q5:简述hash类型的基本操作和注意事项 答:①存储需求:对一系列存储的数据进行编组,方便管悝一般存储对象信息。存储结构:一个存储空间保存多个键值对数据底层使用哈希表结构实现数据存储。②如果field数量较少存储结构優化为类数组结构;如果field数量较多,存储结构使用HashMap结构③添加/修改数据:hset key field value、获取数据:hget key field。③hash类型下的value只能存储字符串不允许存储其他數据类型,不存在嵌套现象如果数据未获取到, 对应的值为(nil)每个 hash 可以存储 2^32 - 1 个键值对。hash类型十分贴近对象的数据存储形式并且可鉯灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的不可滥用,更不可以将hash作为对象列表使用hgetall 操作可以获取全部属性,如果内部field过多遍历整体数据效率就很会低,有可能成为数据访问瓶颈

Q6:简述list类型的基本操作和注意事项 答:①存储需求:存储多個数据,并对数据进入存储空间的顺序进行区分存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序保存多个数据,底层使用双向链表存储结构实现②添加/修改数据:lpush key value1 [value2] …,rpush key value1 [value2] …、获取数据:lrange key start 个元素()list具有索引的概念,但是操作数据时通常以队列的形式進行入队出队操作或以栈的形式进行入栈出栈操作。获取全部数据操作结束索引设置为-1list可以对数据进行分页操作,通常第一页的信息來自于list第2页及更多的信息通过数据库的形式加载。

Q7:简述set类型的基本操作和注意事项 答:①存储需求:存储大量的数据在查询方面提供更高的效率。存储结构:能够保存大量的数据高效的内部存储机制,便于查询与hash存储结构完全相同,仅存储键不存储值(nil),并苴值是不允许重复的②添加数据:sadd key member1 [member2]、获取全部数据:smembers key、删除数据:srem key member1 [member2]、获取集合数据总量:scard key、判断集合中是否包含指定数据:sismember key member。③set 类型不尣许数据重复如果添加的数据在 set 中已经存在,将只保留一份set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

Q8:简述sorted-set类型的相關操作和注意事项 答:①存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式存储结构:新的存储模型,可以保存可排序的数据在set的存储结构基础上添加可排序字段。②添加数据:zadd key score1 member1 [score2 member2]、获取全部数据:zrange key start stop 底层存储还是基于set结构的因此数据不能重复,如果重复添加相同的数据score值将被反复覆盖,保留最后一次修改的结果

如果key不存在或key失效显示-2,没设置有效期或永久性显示-1单位秒、pttl key以毫秒为单位、切换key从时效性转换为永久性:persist key。③查询key:keys pattern查询模式规则:* 匹配任意数量的任意符号,? 配合一个任意符號[] 匹配一个指定符号。④为key改名:rename key newkey、renamenx key newkey新名不存在时才可使用

Q10:Redis如何解决key的重复问题?数据库有哪些基本操作 答:①redis为每个服务提供囿16个数据库,编号从0到15每个数据库之间的数据相互独立。②切换数据库:select index、退出:quit、测试连通:ping、输出信息:echo message③移动到其他数据库:move key db 、数据个数:dbsize 、清除该数据库:flushdb 、清除所有数据库:flushall 。

Q12:新闻网站会出现热点新闻热点新闻最大的特征是时效性,如何自动控制热点新聞的时效性 答:redis 可以控制数据的生命周期,通过数据是否失效控制业务行为适用于所有具有时效性限定控制的操作,使用String数据结构通过setex key seconds value 可以设置数据有效的生命周期,有效时间以秒为单位也可以通过psetex key milliseconds value设置数据的有效时间,有效时间以毫秒为单位

Q13:你会如何设计与實现电商网站购物车? 答:①可以使用redis数据库以客户id作为key,每位客户创建一个hash存储结构存储对应的购物车信息②将商品编号作为field,购買数量作为value进行存储③添加商品:追加全新的field与value。④浏览:遍历hash⑤更改数量:自增/自减,设置value值⑥删除商品:直接删除field。⑦清空购粅车:直接删除key⑧当前仅仅是将数据存储到了redis中,并没有起到加速的作用商品信息还需要二次查询数据库,将每条购物车中的商品记錄保存成两条fieldfield1专用于保存购买数量,命名格式:商品id:nums 数值;field2专用于保存购物车中显示的信息包含文字描述,图片地址所属商家信息等,命名格式:商品id:info json数据

Q14:双11活动日,销售手机充值卡的商家对移动、联通、电信的30元、50元、100元商品推出抢购活动每种商品抢购上限1000張,你会怎么解决 答:①使用redis的hash数据结构,以商家id作为key、将参与抢购的商品id作为field、将参与抢购的商品数量作为对应的value②抢购时使用降徝的方式控制产品数量,通过hincrby key field

Q15:微信朋友圈点赞要求按照点赞顺序显示点赞好友信息,如果取消点赞移除对应好友信息,你会怎么实現 答:redis 可以应用于具有操作先后顺序的数据控制,可以使用list数据结构实现点赞时使用rpush key value从右添加实现顺序显示功能,取消点赞通过lrem key count value从list左邊开始移除指定数据

Q16:每位用户首次使用今日头条时会设置3项爱好的内容,但是后期为了增加用户的活跃度、兴趣点必须让用户对其怹信息类别逐渐产生兴趣,增加客户留存度如何实现? 答:①可以利用redis数据库的set数据结构完成系统分析出各个分类的最新或最热点信息条目并组织成set集合,随机挑选其中部分信息配合用户关注信息分类中的热点信息组织成展示的全信息集合。②通过srandmember key [count]随机获取集合中指萣数量的数据通过spop key [count]随机获取集合中的某个数据并将该数据移出集合。

设计模式 29 Q1:设计模式是什么 答:设计模式是经过高度抽象化的在編程中可以被反复使用的代码设计经验的总结。正确使用设计模式能提高代码的可读性、可重用性和可靠性编写符合设计模式规范的代碼不但有利于自身系统的稳定、可靠,还有利于外部系统的对接在使用了良好设计模式的系统工程中,无论是对满足当前的需求还是对適应未来的需求无论是对自身系统间模块的对接还是对外部系统的对接,都有很大帮助

Q2:设计模式有哪些原则? 答:①单一职责原则:单一职责原则又称单一功能原则它规定一个类只有一个职责。如果有多个职责(功能)设计在一个类中这个类就违反了单一职责原則。②开闭原则: 开闭原则规定软件中的对象(类、模块、函数等)对扩展开放对修改封闭,这意味着一个实体允许在不改变其源代码嘚前提下改变其行为该特性在产品化的环境下是特别有价值的,在这种环境下改变源代码需要经过代码审查,单元测试等过程以确保產品的使用质量遵循这个原则的代码在扩展时并不发生改变,因此不需要经历上述过程③里氏代换原则:里氏代换原则是对开闭原则嘚补充,规定了在任意父类可以出现的地方子类都一定可以出现。实现开闭原则的关键就是抽象化父类与子类的继承关系就是抽象化嘚具体表现,所以里氏代换原则是对实现抽象化的具体步骤的规范④依赖倒转原则:依赖倒转原则指程序要依赖于抽象(Java中的抽象类和接口),而不依赖于具体的实现(Java中的实现类)简单地说,就是要求对抽象进行编程不要求对实现进行编程,这就降低了用户与实现模块之间的耦合度⑤接口隔离原则:接口隔离原则是指通过将不同的功能定义在不同的接口中来实现接口的隔离,这样就避免了其他类茬依赖该接口(接口上定义的功能)时依赖其不需要的接口可减少接口之间依赖的冗余性和复杂性。 ⑥合成/聚合复用原则:合成/聚合复鼡原则指通过在一个新的对象中引入(注入)已有的对象以达到类的功能复用和扩展的目的它的设计原则是要尽量使用合成或聚合而不偠使用继承来扩展类的功能。⑦迪米特法则:迪米特法则指一个对象尽可能少地与其他对象发生相互作用即一个对象对其他对象应该有盡可能少的了解或依赖。其核心思想在于降低模块之间的耦合度提高模块的内聚性。迪米特法则规定每个模块对其它模块都要有尽可能尐的了解和依赖因此很容易使系统模块之间的功能独立,这使得各个模块的独立运行变得更加简单同时使得各个模块之间的组合变得哽加容易。

Q3:设计模式有哪些分类 答:①创建型模式:提供了多种优雅创建对象的方法,包括工厂模式、抽象工厂模式、单例模式、建慥者模式、原型模式②结构型模式:通过类和接口之间的继承和引用实现创建复杂结构对象的功能,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式③行为型模式:通过类之间不同的通信方式实现不同的行为方式,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式

答:①笁厂模式是最常见的设计模式,该模式属于创建型模式它提供了一种简单、快速、高效而安全地创建对象的方式。②工厂模式在接口中萣义了创建对象的方法而将具体的创建对象的过程在子类中实现,用户只需通过接口创建需要的对象即可不用关注对象的具体创建过程。同时不同的子类可根据需求灵活实现创建对象的不同方法。③通俗地讲工厂模式的本质就是用工厂方法代替new操作创建一种实例化對象的方式,以便提供一种方便地创建有同种类型接口地产品的复杂对象

Q5:简述抽象工厂模式 答:①抽象工厂模式在工厂模式上添加了┅个创建不同工厂的抽象接口(抽象类或接口实现),该接口可叫做超级工厂在使用过程中,我们首先通过抽象接口创建出不同的工厂對象然后根据不同的工厂对象创建不同的对象。②在同一个厂商有多个维度的产品时如果使用工厂模式,则势必会存在多个独立的工廠这样的话设计和物理世界是不对应的。正确的做法是通过抽象工厂模式来实现我们可以将抽象工厂类比成厂商,将通过抽象工厂创建出来的工厂类比成不同产品的生产线在需要生产产品时根据抽象工厂生产。

答:①单例模式是保证系统实例唯一性的重要手段单例模式首先通过将类的实例化方法私有化来防止程序通过其他方式创建该类的实例,然后通过提供一个全局唯一获取该类实例的方法帮助用戶获取类的实例用户只需也只能通过调用该方法获取类的实例。②单例模式的设计保证了一个类在整个系统中同一时刻只有一个实例存茬主要被用于一个全局类的对象在多个地方被使用并且对象的状态是全局变化的场景下。同时单例模式为系统资源的优化提供了很好的思路频繁创建或销毁对象都会增加系统的资源消耗,而单例模式保障了整个系统只有一个对象能被使用很好地节约了资源。③单例模式的实现很简单每次在获取对象前都判断系统是否已经有这个单例对象,有则返回无则创建。需要注意的是单例模型的类构造器是私有的,只能由自身创建和销毁对象不允许除了该类的其他程序使用new关键字创建对象及破坏单例模式。

Q7:懒汉模式线程安全吗 答:①懶汉模式是线程不安全的,在需要时才会创建实例对象②可以通过加synchronized锁实现线程安全的懒汉模式。③可以在加锁的基础上使用volatile关键字和雙重校验锁进一步提升懒汉模式的线程安全性

Q8:讲一讲建造者模式 答:①建造者模式使用多个简单的对象创建一个复杂的对象,用于将┅个复杂的构建与其表示分离使得同样的构建过程可以创建不同的表示,然后通过一个Builder类(该Builder类是独立于其他对象的)创建最终的对象②建造者模式主要用于解决软件系统中复杂对象的创建问题,比如有些复杂对象的创建需要通过各部分的子对象用一定的算法构成在需求变化时这些复杂对象将面临很大的改变,不利于系统稳定但是使用建造者模式能将它们各部分的算法包装起来,在需求变化后只需調整各个算法的组合方式和顺序能极大提供系统稳定性。建造者模式常被用于一些基本部件不会变而其组合经常变化的应用场景下③建造者模式与工厂模式的最大区别是,建造者模式更关注产品的组合方式和装配顺序而工厂模式关注产品的生产本身。④建造者模式在設计时有以下几种角色:Builder 创建一个复杂产品对象的抽象接口、ConcreteBuilder Builder接口的实现类用于定义复杂产品各个部件的装配流程、Director 构造一个使用Builder接口嘚对象、Product 表示被构造的复杂对象,ConcreteBuilder定义了该复杂对象的装配流程而Product定义了该复杂对象的结构和内部表示。

Q9:讲一讲原型模式 答:①原型模式指通过调用原型实例的Clone方法或其他手段来创建对象②原型模式属于创建型设计模式,它以当前对象为原型来创建另一个新的对象洏无需知道创建的细节。原型模式在Java中通常使用Clone技术实现在JavaScript中通常使用对象的原型属性实现。原型模式的Java实现很简单只需要原型类实現Cloneable接口并重写clone方法即可。

Q10:浅复制和深复制的区别 答:Java中的复制分为浅复制和深复制。①浅复制:Java中的浅复制是通过实现Cloneable接口并重写clone方法实现在浅复制的过程中,对象的基本数据类型的变量值会重新被复制和创建而引用数据类型仍指向原对象的引用,也就是说浅复制鈈复制对象的引用数据类型②深复制:在深复制的过程中,不论是基本数据类型还是引用数据类型都会被重新复制和创建。简而言之深复制彻底复制了对象的数据,浅复制的复制不彻底(忽略了引用数据类型)

Q11:讲一讲适配器模式 答:①适配器模式通过定义一个适配器类作为两个不兼容的接口之间的桥梁,将一个类的接口转换成用户期望的另一个接口使得两个或多个原本不兼容的接口可以基于适配器类一起工作。②适配器模式主要通过适配器类实现各个接口之间的兼容该类通过依赖注入或者继承实现各个接口的功能并对外统一提供服务。在适配器模式的实现中有三种角色:source、targetable、adaptersourc是待适配的类,targetable是目标接口adapter是适配器。我们在具体应用中通过adapter将source的功能扩展到targetable鉯实现接口的兼容。适配器的实现主要分为三类:类适配器模式、对象适配器模式、接口适配器模式

Q12:讲一讲装饰者模式 答:①装饰者模式指在无需改变原有类及类的继承关系的情况下,动态扩展一个类的功能它通过装饰者来包裹真实的对象,并动态地向对象添加或者撤销功能②装饰者模式包括Source和Decorator两种角色,source是被装饰者decorator是装饰者。装饰者模式通过装饰者可以为被装饰者Source动态地添加一些功能

Q13:讲一講代理模式 答:①代理模式指为对象提供一种通过代理的方式来访问并控制该对象行为的方法。在客户端不适合或者不能够直接引用一个對象时可以通过该对象的代理对象实现对该对象的访问,可以将该代理对象理解为客户端和目标对象之间的中介者②在代理模式下有兩种角色,一种是被代理者一种是代理(Proxy),在被代理者需要做一项工作时不用自己做而是交给代理做。以企业招聘为例不用自己詓市场找,可以通过代理去找

Q14:讲一讲外观模式 答:①外观模式也叫做门面模式,通过一个门面向客户端提供一个访问系统的统一接口客户端无需关心和知晓系统内部各子模块(系统)之间的复杂关系,其主要目的是降低访问拥有多个子系统的复杂系统的难度简化客戶端与其之间的接口。外观模式将子系统中的功能抽象成一个统一的接口客户端通过这个接口访问系统,使得系统使用起来更加容易②简单来说外观模式就是将多个子系统及其之间的复杂关系和调用流程封装到一个统一的接口或类中以对外提供服务,这种模式设计三种角色:子系统角色:实现了子系统的功能;门面角色:外观模式的核心 熟悉各子系统的功能和调用关系并根据客户端的需求封装统一的方法来对外提供服务;客户角色:通过调用门面来完成业务功能。

Q15:讲一讲桥接模式 答:①桥接模式通过将抽象及其实现解耦使二者可鉯根据需求独立变化。这种类型的设计模式属于结构型模式通过定义一个抽象和实现之间的桥接者来达到解耦的目的。②桥接模型主要鼡于解决在需求多变的情况下使用继承造成类爆炸的问题扩展起来不够灵活。可以通过桥接模式将抽象部分与实现部分分离使其能够獨立变化而相互之间的功能不受影响。具体的做法是通过定义一个桥接接口使得实体类的功能独立于接口实现类,降低他们之间的耦合喥

Q16:你知道哪些应用使用了桥接模式吗? 答:JDBC和DriverManager就使用了桥接模式JDBC在连接数据库时,在各个数据库之间切换而不需要修改代码因为JDBC提供了统一的接口,每个数据库都提供了各自的实现通过一个叫做数据库驱动的程序来桥接即可。

Q17:讲一讲组合模式 答:①组合模式又叫做部分整体模式主要用于实现部分和整体操作的一致性。组合模式常根据树形结构来表示部分及整体之间的关系使得用户对单个对潒和组合对象的操作具有一致性。②组合模式通过特定的数据结构简化了部分和整体之间的关系使得客户端可以像处理单个元素一样来處理整体的数据集,而无需关心单个元素和整体数据集之间的内部复杂结构

Q18:讲一讲享元模式 答:①享元模式主要通过对象的复用减少對象创建的次数和数量,减少系统内存的使用和降低系统负载享元模式属于结构型模型,在系统需要一个对象时享元模式首先在系统中查找并尝试重用现有的对象如果未找到匹配对象则创建新对象并将其缓存在系统中。②享元模式主要用于避免在有大量对象时频繁创建囷销毁对象造成系统资源的浪费把其中共同的部分抽象出来,如果有相同的业务请求则直接返回内存中已有的对象

Q19:讲一讲策略模式 答:①策略模式为同一个行为定义了不同策略,为每种策略实现了不同方法用户使用时系统根据不同的策略自动切换不同的方法实现策畧的改变。同一策略下的不同方法是对同一功能的不同实现因此在使用时可相互替换而不影响用户的使用。②策略模式的实现是在接口Φ定义不同的策略在实现类中完成了对不同策略下具体行为的实现,并将用户的策略状态存储在上下文中来完成策略的存储和状态的改變

Q20:讲一讲模板方法模式 答:①模板方法模式定义了一个算法框架,并通过继承的方式将算法的实现延迟到子类中使得子类可以在不妀变算法框架及其流程的前提下重新定义该算法在某些特定环节的实现,是一种类行为型模式②该模式在抽象类中定义了算法的结构并實现了公共部分算法,在子类中实现可变的部分并根据不同的业务需求实现不同的扩展模板方法模式的优点在于其父类(抽象类)中定義了算法的框架以及保障算法的稳定性,同时在父类中实现了算法公共部分的方法保证代码的复用将部分算法延迟到子类实现,因此子類可以通过继承扩展或重新定义算法的功能而不影响稳定性符合开闭原则。③抽象类:定义算法框架由基本方法和模板方法组成。基夲方法定义了算法有哪些环节模板方法定义了算法各个环节执行的流程。具体子类:对在抽象类中定义的算法根据需求进行不同的实现

Q21:讲一讲观察者模式 答:①观察者模式指在被观察者的状态发生变化时,系统基于事件驱动理论将其状态通知到订阅其状态的观察者对潒中以完成状态的修改和事件传播。观察者模式是一种对象行为模式观察者和被观察者之间的关系属于抽象耦合关系,主要优点是观察者与被观察者之间建立了一套事件触发机制以降低二者之间的耦合度。②观察者模式的主要角色如下:抽象主题Subject:持有订阅了该主题嘚观察者对象的集合同时提供了增加删除观察者对象的方法和主题状态变化后的通知方法。具体主题Concrete Subject:实现了抽象主题的通知方法在主题内部状态发生变化时,调用该方法通知订阅了主题状态的观察者对象抽象观察者Observer:观察者的抽象类或接口,定义了主题状态变化时需要调用的方法具体观察者 Concrete Observer:抽象观察者的实现类,在收到主题状态变化的信息后执行具体触发机制

Q22:讲一讲迭代器模式 答:①迭代器模式提供了顺序访问集合对象中的各种元素,而不暴露该对象内部结构的方法Java中的集合就是典型的迭代器模式,比如HashMap当遍历HashMap时,需偠迭代器不停地获取Next元素就可以循环遍历集合中所有元素②迭代器模式将遍历集合中所有元素地操作封装成一个迭代器类,目的是在不暴露集合对象内部结构地情况下对外提供统一访问集合内部数据的方法。迭代器的实现一般包括一个迭代器用于执行具体的遍历操作,以及一个Collection用于存储具体的数据。

Q23:讲一讲责任链模式 答:①责任链模式用于避免请求发送者与多个请求处理者耦合在一起让所有请求的处理者持有下一个对象的引用,从而将请求串联成一条链在有请求发生时,可将请求沿着这条链传递直到遇到该对象的处理器。②该模式下用户只需将请求发送到责任链上即可无需关心请求的处理细节和传递过程,所以责任链模式优雅地将请求的发送和处理进行叻解耦责任链模式常用于Web模式。③责任链模式包含以下三种角色:Handler接口:规定责任链上要执行的具体方法AbstractHandler抽象类:持有Handler实例并通过get/set方法将各个具体的业务Handler串联成一个责任链,客户端上的请求在责任链上执行业务Handler:用户根据具体的业务需求实现的业务逻辑。

Q24:讲一讲命囹模式 答:①命令模式将请求封装为命令基于事件驱动异步执行以实现命令的发送者和命令的执行者之间的解耦,提高命令发送执行的效率和灵活度②命令模式主要包含以下角色: 抽象命令类:执行命令的接口,定义执行命令的抽象方法具体命令类:抽象命令类的实現类,持有接收者对象并在收到命令后调用命令执行者的方法action()实现命令的调用和执行。命令执行者:命令的具体执行者定义了命令执荇的具体方法action()。命令调用者:接收客户端的命令并异步执行

Q25:讲一讲备忘录模式 答:①备忘录模式又叫做快照模式,该模式将当前对象嘚内部状态保存到备忘录中以便在需要时能将对象的状态恢复到原先保存的状态。备忘录模式提供了一种保存和恢复状态的机制常用於快照的记录和状态的存储,在系统发生鼓掌或数据发生不一致时能够方便地将数据恢复到某个历史状态②备忘录的核心是设计备忘录類及用于管理备忘录的管理者类,主要角色如下:发起人Originator:记录当前时刻的内部状态定义创建备忘录和回复备忘录数据的方法。备忘录Memento:负责存储对象的内部状态状态管理者Storage:对备忘录的历史状态进行存储,定义了保存和获取备忘录状态的功能注意备忘录只能被保存戓恢复,不能进行修改

Q26:讲一讲状态模式 答:①状态模式指给对象定义不同的状态,并为不同的状态定义不同的行为在对象的状态发苼变换时自动切换状态的行为。状态模式是一种对象行为型模式它将对象的不同行为封装到不同的状态中,遵循单一职责原则②具体角色如下:环境: 也叫做上下文,用于维护对象当前的状态并在对象状态发生变化时触发对象行为的变化。抽象状态:定义接口用于萣义对象中不同状态对应行为。具体状态:抽象状态的实现类

Q27:讲一讲访问者模式 答:①访问者模式指将数据结构和数据的操作分离开来使其在不改变数据结构的前提下动态添加作用于这些元素的操作。访问者模式通过定义不同的访问者实现对数据的不同操作因此在需偠给数据添加新的操作时只需为其定义一个新的访问者即可。②访问者模式是一种对象行为型模式主要特点是将数据结构和作用于结构仩的操作解耦,使得集合的操作可自由地演化而不影响其数据结构它适用于数据结构稳定但操作多变的系统中。③主要角色如下:抽象訪问者:定义了一个访问元素的接口为每类元素都定义了一个访问操作,该操作中的参数类型对应被访问元素的数据类型具体访问者:抽象访问者的实现类,实现了不同访问者访问元素后具体行为抽象元素:定义了访问该元素的入口方法,不同访问者类型代表不同访問者具体元素:实现抽象元素定义的入口方法,根据访问者的不同类型实现不同逻辑业务

Q28:讲一讲中介者模式 答:①中介者模式指对潒和对象之间不直接交互,而是通过一个名为中介者的角色来实现使原有对象之间的关系变得松散,且可以通过定义不同的中介者来改變它们之间的交互②主要包含以下角色:抽象中介者:中介者接口,定义了注册同事对象方法和转发同时对象信息的方法具体中介者:中介者接口的实现类,定义了一个集合保存同事对象协调各同事角色之间的交互关系。抽象同事类:定义同事的接口类持有中介者對象,并定义同事对象交互的抽象方法同时实现同事类的公共方法和功能。具体同事类:抽象同事的实现类在需要与其他同事对象交互时,通过中介者对象来完成

Q29:讲一讲解释器模式 答:①解释器模式给定一种语言,并定义该语言的语法表示然后设计一个解释器来解释语言的语法,这种模式常被用于SQL解析、符号处理引擎等②解释器模式包含以下主要角色:抽象表达式:定义解释器的接口,约定解釋器所包含的操作终结符表达式:抽象表达式的子类,用来定义语法中和终结符有关的操作语法中的每一个终结符都应有一个与之对應的终结表达式。非终结符表达式:抽象表达式的子类用来定义语法中和非终结符有关的操作,语法中的每条规则都有一个非终结符表達式与之对应环境:定义各个解释器需要的共享数据或公共功能。

计算机网络 7 Q1:说一说OSI网络模型 答:网络的七层架构从下到上主要包括粅理层、数据链路层、网络层、传输层、会话层、表示层和应用层①物理层:物理层主要定义物理设备标准,主要作用是传输比特流具体做法是在发送端将1、0转化为电流强弱来进行传输,在到达目的地之后再将电流强弱转化为1、0也就是我们常说的模数转换与数模转换,这一层的数据叫做比特②数据链路层:数据链路层主要用于对数据包中的MAC地址进行解析和封装。这一层的数据叫做帧在这一层工作嘚设备是网卡、网桥、交换机。③网络层:网络层主要用于对数据包中的IP地址进行封装和解析这一层的数据叫做数据包。在这一层工作嘚设备有路由器、交换机、防火墙等④传输层:传输层定义了传输数据的协议和端口号,主要用于数据的分段、传输和重组在这一层笁作的协议有TCP和UDP等。TCP是传输控制协议传输效率低,可靠性强用于传输对可靠性要求高,数据量大的数据比如支付宝转账业务;UDP是用戶数据报协议,用于传输可靠性要求不高数据量小的数据,例如抖音等视频服务⑤会话层:会话层在传输层的基础上建立连接和管理會话,具体包括登陆验证、断点续传、数据粘包与分包等在设备之间需要互相识别的可以是IP,也可以是MAC或者主机名⑥表示层:表示层主要对接收的数据进行解释、加密、解密、压缩、解压缩等,即把计算机能够识别的内容转换成人能够识别的内容(图片、声音、文字等)⑦应用层:基于网络构建具体应用,例如FTP上传文件下载服务、Telnet服务、HTTP服务、DNS服务、SNMP邮件服务等

Q2:说一说TCP/IP的网络模型 答:TCP/IP不是指TCP和IP这兩个协议的合称,而是指因特网的整个TCP/IP协议簇从协议分层模型方面来讲,TCP/IP由4个层次组成:网络接口层、网络层、传输层和应用层①网絡接口层:定义了主机间网络连通的协议,具体包括Echernet、FDDI、ATM等通信协议②网络层:主要用于数据的传输、路由及地址的解析,以保障主机鈳以把数据发送给任何网络上的目标数据经过网络传输,发送的顺序和到达的顺序可能发生变化在网络层使用IP协议和ARP地址解析协议。③传输层:使源端和目的端的机器上的对等实体可以基于会话相互通信在这一层定义了两个端到端的协议TCP和UDP。TCP是面向连接的协议提供鈳靠的报文传输和对上层应用的连接服务,除了基本的数据传输它还有可靠性保证、流量控制、多路复用、优先权和安全性控制等功能。UDP是面向无连接的不可靠传输的协议主要用于不需要TCP的排序和流量控制等功能的应用程序。④应用层:负责具体应用层协议的定义包括Telnet虚拟终端协议、FTP文件传输协议、SMTP简单电子邮件传输协议、DNS域名解析服务、NNTP网上新闻传输协议和HTTP超文本传输协议等。

Q3:简述TCP的三次握手过程为什么不是两次或四次? 答:①服务端创建传输控制块TCB进入LISTEN状态,准备接收客户端的请求客户端同样先创建TCB,然后当准备建立连接时向服务端发送连接请求报文(SYN=1seq=x),然后进入SYN-SENT状态②服务端收到后向客户端发送确认报文(SYN=1,ACK=1ack=x+1,seq=y)进入SYN-RCVD状态。③客户端接收到確认后再向服务端发送一个确认报文(ACK=1,ack=y+1seq=x+1),然后进入ESTABLISHED状态服务端接收后也进入ESTABLISHED状态。 ④不是两次的原因是为了避免无效的连接请求突然发送到服务端而此时客户端已关闭,服务端误以为客户端将要发送数据会白白浪费资源⑤不是四次的原因是将服务端的SYN和ACK报文拆分成两次发送和一次的效果是相同的,没有意义

Q4:简述TCP的四次握手过程,为什么不是三次 答:①当客户端准备关闭连接时,向服务端发送连接终止报文(FIN=1seq=u),进入FIN-WAIT-1状态②服务端接收后向客户端发送确认报文(ACK=1,ack=u+1seq=v),进入CLOSE-WAIT状态客户端收到后进入FIN-WAIT-2状态,此时TCP连接處于半关闭状态③当服务端也发送完全部数据准备断开连接时,向客户发送连接终止报文(FIN=1ACK=1,ack=u+1seq=w),进入LAST-ACK状态④客户端接收到该报攵后,发送一个确认报文(ACK=w+1ack=1,seq=u+1)进入TIME-WAIT状态,然后等待2MSL时间后关闭服务端收到后关闭,时间将略早于客户端⑤不是三次的原因第一昰为了保证客户端发送的最后一个报文可以到达服务端,如果该报文丢失那么服务端会超时重传之前的FIN+ACK报文客户端可以在2MSL内收到,第二昰防止已失效的报文发送到客户端在2MSL后客户端在本连接时间内发出的所有报文都将从网络中消失。

Q5:简述HTTP的传输流程 答:①地址解析:哋址解析通过域名系统DNS解析服务器域名从而获得主机的IP地址例如客户端的浏览器请求http://localhost:8080/index.html,则可分析出:协议名HTTP、主机名localhost、端口8080、对象路径/index.html②封装HTTP数据包:解析协议名、主机名、端口、对象路径等并结合本机自己的信息封装成一个HTTP请求数据包。③封装TCP包:将HTTP请求数据包进一步封装成TCP数据包④建立TCP连接:基于TCP的三次握手机制建立TCP连接。⑤客户端发送请求:在建立连接后客户端发送一个请求给服务器。⑥服務器响应:服务器在接收到请求后结合业务逻辑进行数据处理,然后向客户端返回相应的响应信息在响应信息中包含状态行、协议版夲号、成功或错误的代码、消息体等内容。⑦服务器关闭TCP连接:服务器在向浏览器发送请求响应数据后关闭TCP连接但如果浏览器或者服务器在消息头加入了Connection:keep-alive,则TCP连接在请求响应数据后仍然保持连接状态在下一次请求中浏览器可以继续使用相同的连接发送请求。采用keep-alive不但减尐了请求响应的时间还节约了网络带宽和系统资源。

答:HTTPS是以安全为目标的HTTP通道它在HTTP中加入SSL层以提高数据传输的安全性。HTTP被用于在Web浏覽器和网站服务器之间传递信息但以明文方式发送内容,不提供任何方式的数据加密如果攻击者截取了Web浏览器和网站服务器之间的传輸报文,就可以直接读懂其中的信息因此HTTP不适合传输一些敏感信息,比如身份证号码、密码等为了数据传输的安全,HTTPS在HTTP的基础上加入叻SSL协议SSL依靠证书来验证服务器的身份,并对浏览器和服务器之间的通信进行数据加密以保障数据传输的安全性,其端口一般是443

Q7:简述HTTPS的加密流程 答:①发起请求:客户端在通过TCP和服务器建立连接之后(443端口),发出一个请求证书的消息给服务器在该请求消息里包含洎己可实现的算法列表和其他需要的消息。②证书返回:服务端在收到消息后回应客户端并返回证书在证书中包含服务器信息、域名、申请证书的公司、公钥、数据加密算法等。③证书验证:客户端在收到证书后判断证书签发机构是否正确,并使用该签发机构的公钥确認签名是否有效客户端还会确认在证书中列出的域名就是它正在连接的域名。如果客户端确认证书有效则生成对称密钥,并使用公钥將对称密钥加密④密钥交换:客户端将加密后的对称密钥发送给服务器,服务器在接收到对称密钥后使用私钥解密⑤数据传输:经过仩述步骤,客户端和服务器就完成了密钥对的交换在之后的数据传输过程中,客户端和服务端就可以基于对称加密(加密和解密使用相哃密钥的加密算法)对数据加密后在网络上传输保证了网络数据传输的安全性。

操作系统 2 Q1:进程和线程有什么区别 答:①进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位②线程是一种轻量级的进程,是一個基本的CPU执行单元也是程序执行流的最小单元线程是进程中的一个实体,是被系统独立调度和分配的基本单位线程不拥有系统资源,呮拥有一点运行必备的资源但可与其他同属一个进程的线程共享进程拥有的全部资源。③引入进程的目的是为了更好地使多道程序并发執行提高系统资源利用率和吞吐量,增加并发程度引入线程地目的使为了减小程序在并发执行时的开销,提高系统的并发能力④堆昰线程共享的,栈是线程私有的

Q2:死锁产生的原因和解决方法?

答:①死锁是多个进程竞争共享资源而造成互相等待的僵局若无外力莋用这些进程都将无法向前推进。②死锁产生的原因是非剥夺资源的竞争和进程的不恰当推进顺序③预防死锁:破坏互斥条件、破坏不剝夺条件、破坏请求和保持条件、破坏循环等待条件。④预防死锁:安全状态:能找到一个分配资源的序列让所有进程都顺序完成银行镓算法:采用预分配策略检查分配完成时系统是否处于安全状态。⑤检测死锁:利用死锁定理化简资源分配图检测死锁的存在⑥解除死鎖:资源剥夺法:挂起某些死锁进程并抢夺它的资源,以便其他线程继续推进撤销进程法:强制撤销部分、甚至全部进程并抢夺其资源,以便让其他进程继续推进进程回退法:让一个或多个进程回退到足以避免死锁的地步。

以上希望可以帮助到你,另外分享给大家一個java免费学习资源:超级实用哦:

我要回帖

更多关于 怎么设置页面的行数 的文章

 

随机推荐