摘要:丢消息的情况有多种,可能是生产者丢了,可能是MQ丢了,可能是消费者丢了。 1、rabbitMQ 一般是用来承载核心业务的,数据是绝对不能丢的。解决方案的核心是接收消息方给发送消息方返回ack 一句话总结:生产者开启confirm模式 + MQ持久化消息 + 消费者关闭autoAck,手动提交 ack
阅读全文
摘要:消息重复消费,会造成数据混乱,特别是在涉及消费和财务系统里,此问题的解决显得尤为重要。 以kafka为例 关键字:消费端自动提交offset;写库或者redis时,先去查一下主键、key等是否存在 上图中,最顶上的文本框丢失的文字:并通知kafka当前最大offset; 最右边的文本框丢失的文字:数
阅读全文
摘要:保证MQ的高可用性,主要是解决MQ的缺点--系统复杂性变高--带来的问题 主要说一下 rabbitMQ 和 kafka 的高可用性 一、rabbitMQ的高可用性 rabbitMQ是基于主从做高可用性的,主要有三种模式:单机模式(不推荐)、普通集群模式(不推荐)、镜像集群模式(推荐) 1、单机模式:
阅读全文
摘要:1、Builder模式:例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder 2、工厂模式:例如SqlSessionFactory、ObjectFactory、Map
阅读全文
摘要:注:前提是知道什么是消息队列。不懂的去搜索各种消息队列入门(activeMQ、rabbitMQ、rocketMQ、kafka) 1、为什么要使用MQ?(MQ的好处:解耦、异步、削峰) (1)解耦:主要解决系统间的耦合度 场景是系统A会产生用户ID:userId,要把userId通过调用系统B\C\D
阅读全文
摘要:springboot启动类写法: @SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, ar
阅读全文
摘要:springMVC 1、是基于Servlet的一个MVC框架(DispatcherServlet、ModelAndView、ViewResolver),解决web开发问题 缺点是 :配置复杂 要简化使用,才应运而生的springBoot:约定优于配置 springMVC解决的问题是网站应用程序/服务
阅读全文
摘要:1、IOC 控制反转:由spring来控制对象的生命周期和对象之间的关系 依赖注入 DI :(1)组件之间的依赖关系由容器在运行期决定,动态的将某种依赖关系注入到组件中去 (2)通过反射机制实现 优点是: 降低了组件之间的耦合(例如组件A需要创建组件B,由spring注入到A中去,而不是A自己创建)
阅读全文
摘要:一、redis是用C语言开发的一个开源的高性能键值对内存数据库,可用作数据库、缓存、消息代理: 性能优秀,读写速度非常快;线程安全;丰富的数据类型;支持数据持久化; 高性能:执行耗时久且结果不经常变动的sql,将结果放进缓存,查询时间短。 经典场景是:电商平台,某个产品一天之内信息都不变,但每次查询
阅读全文
摘要://以上个随笔(springMVC项目配置文件)为基础,详述springMVC请求的整个过程流向 web.xml dispatcher-Servlet.xml 用户请求 --> 经DispatcherServlet拦截并分发到对应的控制器 > 由配置,/hello会进入HelloController
阅读全文
摘要:懒汉、饿汉、双重校验锁 1、懒汉:需要时才会去创建 public Class Singleton{ private static Singleton instance = null; private Singleton(){} public static synchronized Singleton
阅读全文
摘要:1、JDBC所需的四个参数username、password、url、driverClass 2、加载JDBC驱动程序 3、创建数据库连接connection对象conn 4、创建preparedStatement 5、执行sql语句 6、遍历结果集 7、处理异常,关闭JDBC对象资源 详细内容:
阅读全文
摘要:1、ConcurrentHashMap原理和技术,size方法的实现? java1.7中采用Segment +HashEntry +ReentrantLock实现,是用的分段锁 Java1.8中采用Node + CAS+Synchronized来保证并发安全实现,降低锁的粒度,采用链表 线程安全 C
阅读全文
摘要:1、事务的ACID性: (1)原子性:要么做,要么都不做。程序操作执行未成功,则所做的更改会被撤销; (2)一致性:比如转账,a转给b一百元,则a的账户少100,b的账户多100,前后数据要一致; (3)隔离性:由数据库锁实现。事务的隔离级别有4种:未提交读、提交读、可重复读、串行化; (4)持久性
阅读全文
摘要:1、创建线程的 4 种方式: (1)创建Thread类的子类,重写run方法 class Thread1 extends Thread{ public void run(){ 重写方法体 } } 在main方法中: Thread1 t1 = new Thread1 (); t1.start(); (
阅读全文
摘要:Thread类的方法列表:sleep、yield、join用于线程的协作,围绕线程的调度 注意: 只有sleep方法不释放锁,其他都释放锁 1、join()等待线程结束:调用join方法的线程,执行结束后才会释放锁。主线程main中调用启动线程(调用start),然后调用该线程的join方法,可以达
阅读全文
摘要:1、代理模式:在AOP和remoting中被用的比较多 2、单例模式:在spring配置文件中定义的bean默认为单例模式 3、模板方法模式:解决代码重复问题 父类定义骨架(共同方法的实现,调用哪些方法及顺序),某些特定方法由子类实现(父类是空方法,子类继承后再重写) 4、前端控制器模式:sprin
阅读全文
摘要:注:部分答案引用网络文章 简答题 1、Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的。web.xml中负责配置启动springmvc和启动spring,其中,在 <servlet> <servlet-name>springMV
阅读全文
摘要:1、什么是跳表? 跳表实际上就是多层链表 跳表可用在让链表的元素查询接近线性时间 代码结构及java实现参考博客园随笔 2、判断两棵二叉树是否相同?(结构相同,内容相同) 思路:(1)先定义树节点TreeNode:{ Int val; TreeNode left; TreeNode right;//
阅读全文