java
文章平均质量分 93
renxing521
这个作者很懒,什么都没留下…
展开
-
Spring用到的设计模式
1. 简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 2. 工厂方法(Factory ...转载 2018-06-07 20:20:03 · 166 阅读 · 0 评论 -
面试系统架构7-如何实现一个秒杀系统,保证只有几位用户能买到某件商品
设计这个系统是一个考虑全面的问题,可以发散出很多问题,考察很多方面,不是仅仅回答通过redis的自减操作完成比如简单的方案:1,页面开启倒计时,要保证不能把下单接口暴露过早暴露出来,防止机器刷下单接口2,前端限流,比如nginx对下单接口限流,命中限流则返回302到秒杀页3,后端单独部署,独立域名和nginx,与线上正常运行的系统隔离开来,避免影响到线上环境4,由于生成订单操作...转载 2019-02-19 10:52:27 · 889 阅读 · 0 评论 -
面试 如何搭建一个高可用系统
高可用系统,就是说要保证系统在几乎任务时候都要有正常运行,功能正常我们来看下哪些情况会造成系统不可用单机系统下的可用性问题,从nginx->tomcat->db/soa来看,单点问题会影响系统高可用,比如要是这个这个链路上其中一个单点挂了,那么整个系统都不可用了所以引申出来主备/集群模式,防止单点问题高并发场景下,请求过多也会因为后端瓶颈点引起整个系统down掉,所...转载 2019-02-19 10:53:51 · 497 阅读 · 0 评论 -
面试 哪些设计模式可以增加系统的可扩展性
可扩展性:工厂模式抽象工厂模式观察者模式:很方便增加观察者,方便系统扩展模板方法模式:很方便的实现不稳定的扩展点,完成功能的重用适配器模式:可以很方便地对适配其他接口代理模式:可以很方便在原来功能的基础上增加功能或者逻辑责任链模式:可以很方便得增加拦截器/过滤器实现对数据的处理,比如struts2的责任链策略模式:通过新增策略从而改变原来的执行策略...转载 2019-02-19 10:54:31 · 928 阅读 · 0 评论 -
面试 介绍设计模式,如模板模式,命令模式,策略模式,适配器模式、桥接模式、装饰模式,观察者模式,状态模式,访问者模式
模板模式:就是基类封装好了业务逻辑,抽象出了不稳定的部分,让子类来实现,比如命令模式:策略模式:将变化的部分抽象成策略,通过替换不同的策略来完成业务逻辑处理的变化,比如超时活动价格策略适配器模式:将现有的功能转换成已经给定的接口实现,比如:jdbc的适配器模式,jdbc定义好操作模式,不同的db针对jdbc来做不同的适配桥接模式:装饰模式:观察者模式:listener模式,...转载 2019-02-19 10:55:06 · 488 阅读 · 0 评论 -
面试 抽象能力,怎么提高研发效率
我们需要解决的问题,我们需要通过程序来解决这些问题如何将问题抽象成计算机可以识别逻辑,通过抽象能力,把现实生活中的问题域转化成计算机中可以识别的抽象问题,然后就可以通过计算机中的处理方式来解决现实生活中的问题...转载 2019-02-19 10:55:38 · 367 阅读 · 0 评论 -
面试 什么情况用接口,什么情况用消息
接口的特点是同步调用,接口实时响应,阻塞等待消息的特点是异步处理,非实时响应,消息发送后则返回,消息队列可以削峰 一般对实时性要求比较高的功能采用接口对实时性要求不高的功能可以采用消息,削峰时可以采用消息...转载 2019-02-19 10:57:53 · 1424 阅读 · 0 评论 -
面试 如果AB两个系统互相依赖,如何解除依赖
A--->B,同时B--->A解除这种双向依赖的话,需要在AB之外增加一个C,用C封装A依赖的B的那部分功能,让A改为依赖C,C依赖B然后就是这样A--->C,C---->B,B--->A不过这样依然存在环路依赖...转载 2019-02-19 10:58:26 · 2423 阅读 · 0 评论 -
面试 什么场景应该拆分系统,什么场景应该合并系统
拆分系统:当系统通过集群的方式已经无法解决性能问题的时候,或者业务扩展到很大的时候,需要把拆分系统按照业务的方式垂直拆分:将业务功能结合比较紧密的部分拆分成独立的系统,独立维护按照性能瓶颈点拆分:将系统性能瓶颈点拆分出一个独立的系统,可以针对这个独立的系统集群部署,增加可伸缩性,提高系统整体的性能 合并系统:或者系统间通过跨进程访问的性能损耗过高,可以将系统合并成一个系统,...转载 2019-02-19 10:58:59 · 529 阅读 · 0 评论 -
面试 有没有看过JDK源码,看过的类实现原理是什么。
待整理转载 2019-02-19 10:59:54 · 2010 阅读 · 6 评论 -
面试 JVM如何加载字节码文件
待整理转载 2019-02-19 11:14:17 · 297 阅读 · 0 评论 -
Spring框架设计与使用的设计模式
Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框架中的JDBC应用做过报道。本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念,有那几个核心组件?为什么需要这些组件?它们又是如何结合在一起构成Spring的骨骼架构?Spring的AOP特性又是如何利用这些基础的骨骼架构来工作的?Spring中又使用了那些设计模式来完...转载 2018-06-07 20:15:47 · 364 阅读 · 0 评论 -
Java并发编程笔记1-竞争条件&初识原子类&可重入锁
我们知道,在多线程访问一个共享变量的时候会发生安全问题。首先看下面例子:public class Counter { private int count; public void add(){ try{ for (int i = 0;i<200;i++){ Thread.sleep(100); ...转载 2018-03-09 15:40:28 · 201 阅读 · 0 评论 -
Java并发编程笔记2-线程可见性&线程封闭&指令重排序
一.指令重排序例子如下:public class Visibility1 { public static boolean ready; public static int number;}public class ReaderThread extends Thread { @Override public void run() { while (...转载 2018-03-09 15:39:36 · 157 阅读 · 0 评论 -
Java中如何遍历Map对象的4种方法
在Java中如何遍历Map对象How to Iterate Over a Map in Java在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等) 方法一 在for-each循环中使用ent转载 2017-07-18 17:23:48 · 260 阅读 · 0 评论 -
构建微服务:Spring boot 入门篇(一)
什么是spring bootSpring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知...转载 2018-03-09 11:04:55 · 175 阅读 · 0 评论 -
spring boot(二):web综合开发
上篇文章介绍了Spring boot初级教程:spring boot(一):入门篇,方便大家快速入门、了解实践Spring boot特性;本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明。web开发spri...转载 2018-03-09 11:08:05 · 150 阅读 · 0 评论 -
spring boot(三):Spring Boot中Redis的使用
spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化。redis介绍Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化。除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的...转载 2018-03-09 11:10:04 · 408 阅读 · 0 评论 -
spring boot(四):thymeleaf使用详解
在上篇文章springboot(二):web综合开发中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用。thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎。thymeleaf介绍简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其...转载 2018-03-09 11:11:52 · 873 阅读 · 0 评论 -
spring boot(五):spring data jpa的使用
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项使用spring data jpa 开发时,发现国内对spring boot jpa全面介绍的文章比较少案例也比较零碎,因此写文章总结一下。本人也正在翻译Spring Data JPA 参考指南,有兴趣的同学欢迎...转载 2018-03-09 11:13:31 · 182 阅读 · 0 评论 -
spring boot(六):如何优雅的使用mybatis
这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料,各种各样的形式都有,看的人心累,结合了mybatis的官方demo和文档终于找到了最简的两种模式,花了一天时间总结后分享出来。orm框架的本质是简化编程中操作数据库的编...转载 2018-03-09 11:16:13 · 224 阅读 · 1 评论 -
spring boot(七):springboot+mybatis多数据源最简解决方案
说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务。我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解决方案,还有的是利用aop动态切换,感觉有点小复杂,其实我只是想找一个简单的多数据支持而已,折腾了两个小时整理出来,供大家参考。废话不多说直接上代码吧配置文件pom包就不贴了比较简单该依赖的就依赖,主...转载 2018-03-09 11:17:52 · 235 阅读 · 0 评论 -
springboot(八):RabbitMQ详解
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了apache,当然了今天的主角还是讲RabbitMQ。消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产...转载 2018-03-09 11:20:03 · 211 阅读 · 0 评论 -
Java并发编程笔记4-线程池
我们使用线程的时候就去创建一个线程,但是就会有一个问题: 如果并发的线程数量非常多,而且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会导致大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?线程池正好能解决这样的问题。正如名称所称的那样,线程池管理一个工作者线程的同构池。线程池...翻译 2018-03-09 14:44:03 · 147 阅读 · 0 评论 -
java并发编程笔记3-同步容器&并发容器&闭锁&栅栏&信号量
一.同步容器: 1.Vector容器实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是Vector中的方法都是synchronized方法,即进行了同步措施。保证了线程安全。源码如下图:可以看到这些方法都加了synchronized。即加了同步操作。 2.Hashtable集合。HashTable实现了Map接口,它和HashMap很相似,但是HashTable...转载 2018-03-09 14:49:33 · 192 阅读 · 0 评论 -
Mybatis调用存储过程返回多个结果集
数据库用的是SqlServer2008图片为数据库执行存储过程返回的数据Mybatis调用存储过程返回结果集配置文件 {call Page_Up_Get_OrderState(#{id,mode=IN,jdbcType=VARCHAR})} 需要注意的地方 statementType=转载 2017-06-15 18:25:27 · 4906 阅读 · 1 评论