java web
-hantao-
java程序员
展开
-
rocketmq事务消息
比如更新db并发送消息,由下游继续处理任务。但是无法保证更新db与发送消息同时成功。1. rocketmq先发一个半消息(Half Msg,类似一个 Prepare 操作),这个消息是不会投递给消费者的【如果半消息发送失败,db未更新,整个操作失败,无影响】2. 半消息发送成功后更新db【半消息发送成功,但此时发生异常,生产者以为失败了不会更新db。由于broker存储半消息成功了,缺迟迟等不到后续提交操作,超时后broker会询问生产者此消息要如何处理,生产者查询db,然后给broker答原创 2021-08-05 17:14:33 · 222 阅读 · 0 评论 -
JVM调优
jvm参数常用配置-Xmx 指定最大堆 -Xms 指定最小堆 -Xmn 设置新生代大小 -XX:NewRatio 新生代和老年代的比值,例如:4,表示新生代:老年代=1:4 -XX:SurvivorRatio Survivor区和eden的比值,例如:8,表示两个Survivor:eden=2:8 -XX:+HeapDumpOnOutOfMemoryError OOM时导出堆到文件...原创 2020-04-25 11:02:39 · 289 阅读 · 0 评论 -
zookeeper详解
一、什么是zookeeper?zookeeper是一个开源的分布式协调服务,是一个典型的分布式数据一致性解决方案。可以实现:命名服务(节点类似于文件系统)、配置管理(watcher机制)、分布式锁、集群管理(dubbo的注册中心)。可以保证:顺序一致性(同一个客户端发起的事务请求,会严格按照顺序执行) 原子性(执行一个事务,整个集群要么全部成功,要么全部失败) 单一视图(无论客户端连接...原创 2020-04-11 23:15:48 · 318 阅读 · 0 评论 -
springboot
用来简化spring应用开发,约定大于配置。嵌入式的tomcat无需部署war文件,starters自动依赖与版本控制。核心注解@SpringBootApplication。Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成spring及其他技术。...原创 2020-04-10 23:36:23 · 172 阅读 · 0 评论 -
什么是Restful
restful是一种思想或者风格,并不是一种标准。以前我们每次请求的接口或地址都在做描述,例如查询的时候用了query,新增的时候用save,其实完全没必要,我使用了get请求就是查询,使用post请求就是新增的请求,完全没必要额外描述。在Restful之前的操作:http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据http://127.0.0...原创 2020-04-09 15:24:50 · 191 阅读 · 0 评论 -
mybatis多数据源动态切换
首先在配置文件中配置多个数据源 <!--数据库配置一--> <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> ...原创 2020-04-02 17:38:59 · 295 阅读 · 0 评论 -
浅入理解jvm
自动内存管理机制 程序计数器区是唯一没有内存溢出的区域,hotspot通过使用直接指针访问方法区的对象类型数据。 垃圾回收机制。 新生代采用标记复制法,老年代采用标记整理法。引用计数器法需要用可达性分析防止循环依赖。强软弱引用尚未理解。 垃圾收集器 serial是默认的新生代收集器,但会stop the world带来不良体验。parnew仅仅是多线程,公司目前使用,多...原创 2020-03-27 22:34:36 · 258 阅读 · 0 评论 -
mybatis浅析
SqlSession是Mybatis最重要的构建之一,提供select/insert/update/delete方法,SqlSession的运行主要是依靠Executor执行器调用(调度)StatementHandler、parameterHanlder、ResultSetHandler,Executor首先通过创建StamentHandler执行预编译并设置参数运行。SqlSession重...原创 2020-03-24 14:49:02 · 291 阅读 · 0 评论 -
solr浅析
全文索引原理:可以理解为一本词典。现在有100个商品名称,首先用分词器处理(拆分、去标点、去无意义的词等)得到词元,然后创建索引文件。进行检索时,在索引表中找关键词,如果有多个关键词,将查找结果合并。使用: 创建spring-solr.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns="ht...原创 2020-03-23 22:39:48 · 185 阅读 · 0 评论 -
spring mvc 异常统一处理
使用HandlerExceptionResolver接口//HandlerExceptionResolver接口方式public class ExceptionTest implements HandlerExceptionResolver{ @Override public ModelAndView resolveException(HttpServletRequest...原创 2020-03-06 12:16:28 · 167 阅读 · 0 评论 -
spring浅析
1、spring启动流程web容器为web应用提供一个全局的上下文环境ServletContext,为IOC容器提供宿主环境。 web.xml中有contextLoaderListener,在web容器启动时触发容器初始化事件(ApplicationContext可以理解为IOC容器,具体实现有多个,如XmlWebApplicationContext),加载所有的service、dao、数据...原创 2020-01-19 18:24:27 · 463 阅读 · 0 评论 -
spring事务的传播规则
一、事务的特性原子性:事务包含的所有操作要么全部成功要么全部失败 一致性:使数据库从一个一致性状态变换到另一个一致性状态,比如A有100元 B有0元,A转给B50元,结果为A50元B50元 隔离性:多个并发事务之间要相互隔离 持久性:事务提交后对数据库的改变是永久的二、事务的隔离级别未提交读:读数据不加锁;写数据加行级S锁,事务结束释放 已提交读:读数据加行级S锁,读完就释放;...原创 2019-12-25 15:06:43 · 649 阅读 · 0 评论 -
java NIO浅析
NIO与IO的主要区别是:1、IO多路复用 2、IO流与NIO缓冲区 阻塞与非阻塞(IO多路复用) 传统IO是阻塞的,当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除block状态。此外由于每个连接都需要创建一个线程,...原创 2019-12-18 10:39:40 · 210 阅读 · 0 评论 -
秒杀系统
拜读了58沈剑的秒杀系统架构优化思路后颇有收获,秒杀系统设计的核心思想就是:将请求尽量拦截在数据库的上游、重复利用缓存。前端利用CDN和浏览器缓存进行一级流量拦截秒杀前用户不断刷新商品详情页,页面请求达到瞬时高峰,可以将该页面上的元素尽量静态化处理,除了秒杀按钮需要服务端进行动态判断,其他的静态数据可以缓存在浏览器和 CDN 上 通过按钮置灰和js限制访问间隔减少用户提交请求的次数...原创 2019-12-13 16:18:53 · 543 阅读 · 0 评论 -
分布式锁 - redis锁、zookeeper锁
应用场景:分布式锁是为了保证同一时刻只有一台机器的一个线程执行某段代码。分布式锁的目的如下 解决业务层幂等性 解决 MQ 消费端多次接受同一消息 确保串行|隔离级别 多台机器同时执行定时任务 最近在工作中遇到了一些问题,上游重复调用下游接口下发数据导致数据重复,需要用redis锁防重,线程获取不到锁时直接提示给上游已经下发过数据。redis分布式锁:...原创 2019-12-12 18:18:16 · 240 阅读 · 0 评论 -
设计模式
1、策略模式主要解决if...else..的复杂和难以维护。一个公共接口,多个子类,一个策略使用类。策略的选择可以结合枚举类使用,将枚举常量存在Map中或者存在枚举常量属性中。2、代理模式代理模式就是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。黄勇的《Proxy 那点事儿》写的超好,就不重复了,大概总结如下:静态代理:代理类和委托类需要实现相同的接口,且需...原创 2019-12-06 17:01:20 · 226 阅读 · 0 评论 -
@Autowired可以注入List和Map
spring是支持这种基于接口实现类的直接注入的@Autowiredprivate List<MyInterface> myList;这样就直接将MyInterface的子类bean直接添加到了myList中,并且还可以用Order来指定添加顺序没看过此处源码,但盲猜是在bean的后置处理器中,解析到带@Autowired的注解且是List或Map的类型的属性,则将其泛...原创 2019-12-05 18:40:19 · 3605 阅读 · 1 评论 -
spring mvc 国际化配置
要使用spring mvc配置国际化,首先用MessageSource来管理国际资源文件: <!-- 国际化资源文件 messageSource配置的是国际化资源文件的路径, classpath:messages指的是classpath路径下的 messages_zh_CN.properties文件和messages_en_US.properties文件 设置“useCodeAsD...原创 2019-12-05 10:41:36 · 349 阅读 · 0 评论 -
spring mvc踩坑 - jackson解析框架返回json多一层双引号
问题:两套业务逻辑代码相同,但返回的数据不同,导致相同的前端代码用eval解析时出错。其中一个多了一层双引号,分别为"{\"aaa\":1}" "\"{\"aaa\":1}\""//服务端代码 @RequestMapping(method = RequestMethod.POST, params = "method=xxx") public @ResponseB...原创 2019-11-26 15:07:16 · 4405 阅读 · 0 评论 -
怎么解决跨域问题(cors、nginx、jsonp)
什么是跨域问题当前页面地址与请求URL的协议、域名、端口有任意不同: 网络协议不同,如http协议访问https协议。 端口不同,如80端口访问8080端口。 域名不同,如qianduanblog.com访问baidu.com。 子域名不同,如abc.qianduanblog.com访问def.qianduanblog.com。 域名和域名对应ip...原创 2019-11-22 14:32:25 · 218 阅读 · 0 评论 -
Guava cache 本地缓存
项目开发中很多程序员喜欢用HashMap来构建本地缓存,存在并发、内存泄漏、刷新机制不健全(某些场景下我们希望定时删除或刷新缓存)、容量限制(当超过设置的最大缓存量时使用LRU算法淘汰最久未使用的缓存数据)等问题,推荐使用Google的Guava来构建本地缓存。 引包 <dependency> <groupId>com.google.guava</...原创 2019-10-18 11:54:20 · 512 阅读 · 0 评论 -
java导出静态页面html文件zip
导出图片、PDF、PPT、动态图册文件1、导出按钮 html <div class="btn-group"> <a type="button" title="{{{true:'导出动态图册', false:'金会员特权:导出动态图册'}[isHtmlExport()]}}" class="btn no-border cs-btn-toolbar" ng-cli原创 2017-08-21 15:16:45 · 2248 阅读 · 0 评论 -
《架构探险从零开始写javaweb》总结
导读:DI (实现加载指定路径的类,实现加载指定注解的类,放在Map<Class<?>, Object>中) AOP (先将目标类的所有的切面类找出来,链式的将切面代理类作为目标类的增强返回新的bean,替换原来的bean到map中。) IOC (将类中需要注入bean的属性,反射注入进去) MVC (根据方法上的注解将请求路径、类、方法存入Map<Requ...原创 2019-10-08 18:39:09 · 218 阅读 · 0 评论 -
java面试总结
一、校招面试第一个问题:一般是集合框架,ArrayListLinkedListHashMapHashTableConcurrentHashMap这几个是最常问的,他们的底层原理、区别、场景、优劣都要清楚,尤其是hashmap最好看下源码。可以参考我的博客 - -java集合框架总结第二个问题:一般是虚拟机,主要问题是垃圾回收、内存机制、类加载,看两遍《深入理解java虚拟机》就...原创 2018-08-23 11:19:17 · 327 阅读 · 0 评论 -
mybatis主从表联合插入操作useGeneratedKeys keyProperty用法
我们经常进行 主从表联合插入操作 (一对多),当数据库中表的主键设置为自动递增后,不需要添加useGeneratedKeys和keyProperty,但若需要在插入数据后获得数据的id,则需要添加。例如:班级表class(cid, cname)学生表student (sid,sname, cid)假设我们在插入班级数据时同时插入学生数据。一、首先我们在MySQL数据库建的st...原创 2018-08-28 18:42:57 · 3316 阅读 · 0 评论